Skip to content

Commit 24b87d7

Browse files
committed
cranelift: Add icmp to fuzzer
1 parent 1234776 commit 24b87d7

2 files changed

Lines changed: 26 additions & 14 deletions

File tree

cranelift/codegen/src/ir/condcodes.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ mod tests {
362362

363363
#[test]
364364
fn int_inverse() {
365-
for r in &IntCC::all() {
365+
for r in IntCC::all() {
366366
let cc = *r;
367367
let inv = cc.inverse();
368368
assert!(cc != inv);
@@ -372,7 +372,7 @@ mod tests {
372372

373373
#[test]
374374
fn int_reverse() {
375-
for r in &IntCC::all() {
375+
for r in IntCC::all() {
376376
let cc = *r;
377377
let rev = cc.reverse();
378378
assert_eq!(rev.reverse(), cc);
@@ -381,7 +381,7 @@ mod tests {
381381

382382
#[test]
383383
fn int_display() {
384-
for r in &IntCC::all() {
384+
for r in IntCC::all() {
385385
let cc = *r;
386386
assert_eq!(cc.to_string().parse(), Ok(cc));
387387
}
@@ -390,7 +390,7 @@ mod tests {
390390

391391
#[test]
392392
fn float_inverse() {
393-
for r in &FloatCC::all() {
393+
for r in FloatCC::all() {
394394
let cc = *r;
395395
let inv = cc.inverse();
396396
assert!(cc != inv);
@@ -400,7 +400,7 @@ mod tests {
400400

401401
#[test]
402402
fn float_reverse() {
403-
for r in &FloatCC::all() {
403+
for r in FloatCC::all() {
404404
let cc = *r;
405405
let rev = cc.reverse();
406406
assert_eq!(rev.reverse(), cc);
@@ -409,7 +409,7 @@ mod tests {
409409

410410
#[test]
411411
fn float_display() {
412-
for r in &FloatCC::all() {
412+
for r in FloatCC::all() {
413413
let cc = *r;
414414
assert_eq!(cc.to_string().parse(), Ok(cc));
415415
}

cranelift/fuzzgen/src/function_generator.rs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,10 @@ fn insert_stack_store(
111111
Ok(())
112112
}
113113

114-
fn insert_fcmp(
114+
fn insert_cmp(
115115
fgen: &mut FunctionGenerator,
116116
builder: &mut FunctionBuilder,
117-
_opcode: Opcode,
117+
opcode: Opcode,
118118
args: &'static [Type],
119119
rets: &'static [Type],
120120
) -> Result<()> {
@@ -124,9 +124,13 @@ fn insert_fcmp(
124124
let rhs = fgen.get_variable_of_type(args[1])?;
125125
let rhs = builder.use_var(rhs);
126126

127-
let cc = *fgen.u.choose(FloatCC::all())?;
128-
129-
let res = builder.ins().fcmp(cc, lhs, rhs);
127+
let res = if opcode == Opcode::Fcmp {
128+
let cc = *fgen.u.choose(FloatCC::all())?;
129+
builder.ins().fcmp(cc, lhs, rhs)
130+
} else {
131+
let cc = *fgen.u.choose(IntCC::all())?;
132+
builder.ins().icmp(cc, lhs, rhs)
133+
};
130134

131135
let var = fgen.get_variable_of_type(rets[0])?;
132136
builder.def_var(var, res);
@@ -415,8 +419,16 @@ const OPCODE_SIGNATURES: &'static [(
415419
(Opcode::Nearest, &[F32], &[F32], insert_opcode),
416420
(Opcode::Nearest, &[F64], &[F64], insert_opcode),
417421
// Fcmp
418-
(Opcode::Fcmp, &[F32, F32], &[B1], insert_fcmp),
419-
(Opcode::Fcmp, &[F64, F64], &[B1], insert_fcmp),
422+
(Opcode::Fcmp, &[F32, F32], &[B1], insert_cmp),
423+
(Opcode::Fcmp, &[F64, F64], &[B1], insert_cmp),
424+
// Icmp
425+
(Opcode::Icmp, &[I8, I8], &[B1], insert_cmp),
426+
(Opcode::Icmp, &[I16, I16], &[B1], insert_cmp),
427+
(Opcode::Icmp, &[I32, I32], &[B1], insert_cmp),
428+
(Opcode::Icmp, &[I64, I64], &[B1], insert_cmp),
429+
// TODO: icmp of/nof broken for i128 on x86_64
430+
// See: https://github.com/bytecodealliance/wasmtime/issues/4406
431+
// (Opcode::Icmp, &[I128, I128], &[B1], insert_cmp),
420432
// Stack Access
421433
(Opcode::StackStore, &[I8], &[], insert_stack_store),
422434
(Opcode::StackStore, &[I16], &[], insert_stack_store),
@@ -688,7 +700,7 @@ where
688700

689701
fn generate_bricmp(&mut self, builder: &mut FunctionBuilder) -> Result<()> {
690702
let (block, args) = self.generate_target_block(builder)?;
691-
let cond = *fgen.u.choose(IntCC::all())?;
703+
let cond = *self.u.choose(IntCC::all())?;
692704

693705
let bricmp_types = [
694706
I8, I16, I32,

0 commit comments

Comments
 (0)