diff --git a/cranelift/filetests/filetests/vcode/aarch64/arithmetic.clif b/cranelift/filetests/filetests/vcode/aarch64/arithmetic.clif index 9a95c52c64..98ec613214 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/arithmetic.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/arithmetic.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f1(i64, i64) -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/basic1.clif b/cranelift/filetests/filetests/vcode/aarch64/basic1.clif index b5ec1ae160..dc117152e1 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/basic1.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/basic1.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f(i32, i32) -> i32 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/bitops.clif b/cranelift/filetests/filetests/vcode/aarch64/bitops.clif index f1f1a7dba3..c7ddd04608 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/bitops.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/bitops.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %a(i8) -> i8 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/call-indirect.clif b/cranelift/filetests/filetests/vcode/aarch64/call-indirect.clif index c5e8ea0596..6bb331dd20 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/call-indirect.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/call-indirect.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f(i64, i64) -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/call.clif b/cranelift/filetests/filetests/vcode/aarch64/call.clif index 4178a4c2f7..40cbd21383 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/call.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/call.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f(i64) -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/condbr.clif b/cranelift/filetests/filetests/vcode/aarch64/condbr.clif index 3f0c0766d7..d171d02bfb 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/condbr.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/condbr.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f(i64, i64) -> b1 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/condops.clif b/cranelift/filetests/filetests/vcode/aarch64/condops.clif index e489836527..ebdff13850 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/condops.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/condops.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f(i8, i64, i64) -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/constants.clif b/cranelift/filetests/filetests/vcode/aarch64/constants.clif index 7470941dec..80baeb1c98 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/constants.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/constants.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f() -> b8 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/extend-op.clif b/cranelift/filetests/filetests/vcode/aarch64/extend-op.clif index 6194dd563f..aa58cb2deb 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/extend-op.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/extend-op.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f(i8) -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/floating-point.clif b/cranelift/filetests/filetests/vcode/aarch64/floating-point.clif index 6b991026ae..7fb8ec07ed 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/floating-point.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/floating-point.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f1(f32, f32) -> f32 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/jumptable.clif b/cranelift/filetests/filetests/vcode/aarch64/jumptable.clif index f7c94c50b6..da4daae571 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/jumptable.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/jumptable.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f(i64) -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/narrow-arithmetic.clif b/cranelift/filetests/filetests/vcode/aarch64/narrow-arithmetic.clif index d11fc22417..e68eb28c67 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/narrow-arithmetic.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/narrow-arithmetic.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %add8(i8, i8) -> i8 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/saturating-ops.clif b/cranelift/filetests/filetests/vcode/aarch64/saturating-ops.clif index dcb76e0f26..d184eeef95 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/saturating-ops.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/saturating-ops.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %uaddsat64(i64, i64) -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/shift-op.clif b/cranelift/filetests/filetests/vcode/aarch64/shift-op.clif index 12984620a1..2b72b9951f 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/shift-op.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/shift-op.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f(i64) -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/shift-rotate.clif b/cranelift/filetests/filetests/vcode/aarch64/shift-rotate.clif index 26a6922b39..2f2439ff57 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/shift-rotate.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/shift-rotate.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/cranelift/filetests/filetests/vcode/aarch64/stack-limit.clif b/cranelift/filetests/filetests/vcode/aarch64/stack-limit.clif index c9734e7cdd..b7dc3bf342 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/stack-limit.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/stack-limit.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %foo() { diff --git a/cranelift/filetests/filetests/vcode/aarch64/stack.clif b/cranelift/filetests/filetests/vcode/aarch64/stack.clif index 47c4b37a0f..85f19bdb25 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/stack.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/stack.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %stack_addr_small() -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/symbol-value.clif b/cranelift/filetests/filetests/vcode/aarch64/symbol-value.clif index 01c0a8a46b..650115f1f8 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/symbol-value.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/symbol-value.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f() -> i64 { diff --git a/cranelift/filetests/filetests/vcode/aarch64/traps.clif b/cranelift/filetests/filetests/vcode/aarch64/traps.clif index b4c4be344b..ab0ca07ae4 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/traps.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/traps.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f() { diff --git a/cranelift/filetests/filetests/vcode/aarch64/uextend-sextend.clif b/cranelift/filetests/filetests/vcode/aarch64/uextend-sextend.clif index 86084ff0cc..803f144844 100644 --- a/cranelift/filetests/filetests/vcode/aarch64/uextend-sextend.clif +++ b/cranelift/filetests/filetests/vcode/aarch64/uextend-sextend.clif @@ -1,4 +1,4 @@ -test vcode +test compile target aarch64 function %f_u_8_64(i8) -> i64 { diff --git a/cranelift/filetests/src/lib.rs b/cranelift/filetests/src/lib.rs index 5cf7331225..05a6a80da3 100644 --- a/cranelift/filetests/src/lib.rs +++ b/cranelift/filetests/src/lib.rs @@ -57,7 +57,6 @@ mod test_shrink; mod test_simple_gvn; mod test_simple_preopt; mod test_unwind; -mod test_vcode; mod test_verifier; /// The result of running the test in a file. @@ -141,7 +140,6 @@ fn new_subtest(parsed: &TestCommand) -> subtest::SubtestResult test_simple_gvn::subtest(parsed), "simple_preopt" => test_simple_preopt::subtest(parsed), "unwind" => test_unwind::subtest(parsed), - "vcode" => test_vcode::subtest(parsed), "verifier" => test_verifier::subtest(parsed), _ => Err(format!("unknown test command '{}'", parsed.command)), } diff --git a/cranelift/filetests/src/test_compile.rs b/cranelift/filetests/src/test_compile.rs index 8e0f2dd1ab..64369183ba 100644 --- a/cranelift/filetests/src/test_compile.rs +++ b/cranelift/filetests/src/test_compile.rs @@ -40,6 +40,11 @@ impl SubTest for TestCompile { let isa = context.isa.expect("compile needs an ISA"); let mut comp_ctx = cranelift_codegen::Context::for_function(func.into_owned()); + if isa.get_mach_backend().is_some() { + // With `MachBackend`s, we need to explicitly request dissassembly results. + comp_ctx.set_disasm(true); + } + let CodeInfo { total_size, .. } = comp_ctx .compile(isa) .map_err(|e| pretty_error(&comp_ctx.func, context.isa, e))?; @@ -50,25 +55,36 @@ impl SubTest for TestCompile { comp_ctx.func.display(isa) ); - // Verify that the returned code size matches the emitted bytes. - let mut sink = SizeSink { offset: 0 }; - binemit::emit_function( - &comp_ctx.func, - |func, inst, div, sink, isa| isa.emit_inst(func, inst, div, sink), - &mut sink, - isa, - ); + if !isa.get_mach_backend().is_some() { + // Verify that the returned code size matches the emitted bytes. + let mut sink = SizeSink { offset: 0 }; + binemit::emit_function( + &comp_ctx.func, + |func, inst, div, sink, isa| isa.emit_inst(func, inst, div, sink), + &mut sink, + isa, + ); - if sink.offset != total_size { - return Err(format!( - "Expected code size {}, got {}", - total_size, sink.offset - )); + if sink.offset != total_size { + return Err(format!( + "Expected code size {}, got {}", + total_size, sink.offset + )); + } + + // Run final code through filecheck. + let text = comp_ctx.func.display(Some(isa)).to_string(); + run_filecheck(&text, context) + } else { + let disasm = comp_ctx + .mach_compile_result + .as_ref() + .unwrap() + .disasm + .as_ref() + .unwrap(); + run_filecheck(&disasm, context) } - - // Run final code through filecheck. - let text = comp_ctx.func.display(Some(isa)).to_string(); - run_filecheck(&text, context) } } diff --git a/cranelift/filetests/src/test_vcode.rs b/cranelift/filetests/src/test_vcode.rs deleted file mode 100644 index 93bce57a59..0000000000 --- a/cranelift/filetests/src/test_vcode.rs +++ /dev/null @@ -1,67 +0,0 @@ -use crate::subtest::{run_filecheck, Context, SubTest, SubtestResult}; -use cranelift_codegen::ir::Function; -use cranelift_codegen::isa::lookup; -use cranelift_codegen::settings; -use cranelift_codegen::Context as CodegenContext; -use cranelift_reader::{TestCommand, TestOption}; - -use log::info; -use std::borrow::Cow; -use std::string::String; - -struct TestVCode { - arch: String, -} - -pub fn subtest(parsed: &TestCommand) -> SubtestResult> { - assert_eq!(parsed.command, "vcode"); - - let mut arch = "arm64".to_string(); - for option in &parsed.options { - match option { - TestOption::Value(k, v) if k == &"arch" => { - arch = v.to_string(); - } - _ => {} - } - } - - Ok(Box::new(TestVCode { arch })) -} - -impl SubTest for TestVCode { - fn name(&self) -> &'static str { - "vcode" - } - - fn is_mutating(&self) -> bool { - true - } - - fn needs_isa(&self) -> bool { - true - } - - fn run(&self, func: Cow, context: &Context) -> SubtestResult<()> { - let triple = context.isa.unwrap().triple().clone(); - let func = func.into_owned(); - - let mut isa = lookup(triple) - .map_err(|_| format!("Could not look up backend for arch '{}'", self.arch))? - .finish(settings::Flags::new(settings::builder())); - - let mut codectx = CodegenContext::for_function(func); - codectx.set_disasm(true); - - codectx - .compile(&mut *isa) - .map_err(|e| format!("Could not compile with arch '{}': {:?}", self.arch, e))?; - - let result = codectx.mach_compile_result.take().unwrap(); - let text = result.disasm.unwrap(); - - info!("text input to filecheck is:\n{}\n", text); - - run_filecheck(&text, context) - } -}