Put arm32 backend behind experimental_arm32 flag

This commit is contained in:
Jakub Krauz
2020-09-22 12:46:29 +02:00
parent f6a140a662
commit bab3c73100
12 changed files with 35 additions and 13 deletions

View File

@@ -51,4 +51,5 @@ disas = ["capstone"]
enable-peepmatic = ["cranelift-codegen/enable-peepmatic", "cranelift-filetests/enable-peepmatic"] enable-peepmatic = ["cranelift-codegen/enable-peepmatic", "cranelift-filetests/enable-peepmatic"]
wasm = ["wat", "cranelift-wasm"] wasm = ["wat", "cranelift-wasm"]
experimental_x64 = ["cranelift-codegen/x64"] experimental_x64 = ["cranelift-codegen/x64"]
experimental_arm32 = ["cranelift-codegen/arm32"]
souper-harvest = ["cranelift-codegen/souper-harvest", "rayon"] souper-harvest = ["cranelift-codegen/souper-harvest", "rayon"]

View File

@@ -61,15 +61,14 @@ unwind = ["gimli"]
# ISA targets for which we should build. # ISA targets for which we should build.
# If no ISA targets are explicitly enabled, the ISA target for the host machine is enabled. # If no ISA targets are explicitly enabled, the ISA target for the host machine is enabled.
x86 = [] x86 = []
arm32 = []
arm64 = [] arm64 = []
riscv = [] riscv = []
x64 = [] # New work-in-progress codegen backend for x86_64 based on the new isel. x64 = [] # New work-in-progress codegen backend for x86_64 based on the new isel.
arm32 = [] # Work-in-progress codegen backend for ARM.
# Option to enable all architectures. # Option to enable all architectures.
all-arch = [ all-arch = [
"x86", "x86",
"arm32",
"arm64", "arm64",
"riscv" "riscv"
] ]

View File

@@ -1,5 +1,6 @@
test compile test compile
target arm target arm
feature "experimental_arm32"
function %iadd(i8, i8) -> i8 { function %iadd(i8, i8) -> i8 {
block0(v0: i8, v1: i8): block0(v0: i8, v1: i8):

View File

@@ -1,5 +1,6 @@
test compile test compile
target arm target arm
feature "experimental_arm32"
function %bitrev_i8(i8) -> i8 { function %bitrev_i8(i8) -> i8 {
block0(v0: i8): block0(v0: i8):

View File

@@ -1,5 +1,6 @@
test compile test compile
target arm target arm
feature "experimental_arm32"
function %icmp(i32, i32) -> b1 { function %icmp(i32, i32) -> b1 {
block0(v0: i32, v1: i32): block0(v0: i32, v1: i32):

View File

@@ -1,5 +1,6 @@
test compile test compile
target arm target arm
feature "experimental_arm32"
function %b1() -> b1 { function %b1() -> b1 {
block0: block0:

View File

@@ -1,5 +1,6 @@
test compile test compile
target arm target arm
feature "experimental_arm32"
function %brnz(b1) -> i32 { function %brnz(b1) -> i32 {
block0(v0: b1): block0(v0: b1):

View File

@@ -1,5 +1,6 @@
test compile test compile
target arm target arm
feature "experimental_arm32"
function %uextend_i8_i32(i8) -> i32 { function %uextend_i8_i32(i8) -> i32 {
block0(v0: i8): block0(v0: i8):

View File

@@ -1,5 +1,6 @@
test compile test compile
target arm target arm
feature "experimental_arm32"
function %args(i32) -> i32 { function %args(i32) -> i32 {
sig0 = (i32, i32, i32, i32) -> i32 sig0 = (i32, i32, i32, i32) -> i32

View File

@@ -1,5 +1,6 @@
test compile test compile
target arm target arm
feature "experimental_arm32"
function %ishl_i8(i8, i8) -> i8 { function %ishl_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8): block0(v0: i8, v1: i8):

View File

@@ -9,7 +9,7 @@ use cranelift_codegen::print_errors::pretty_verifier_error;
use cranelift_codegen::settings::Flags; use cranelift_codegen::settings::Flags;
use cranelift_codegen::timing; use cranelift_codegen::timing;
use cranelift_codegen::verify_function; use cranelift_codegen::verify_function;
use cranelift_reader::{parse_test, IsaSpec, ParseOptions}; use cranelift_reader::{parse_test, Feature, IsaSpec, ParseOptions};
use log::info; use log::info;
use std::borrow::Cow; use std::borrow::Cow;
use std::fs; use std::fs;
@@ -51,6 +51,15 @@ pub fn run(
} }
}; };
#[cfg(not(feature = "experimental_arm32"))]
if testfile
.features
.contains(&Feature::With("experimental_arm32"))
{
println!("skipped {:?}: no experimental_arm32 feature", path);
return Ok(started.elapsed());
}
if testfile.functions.is_empty() { if testfile.functions.is_empty() {
anyhow::bail!("no functions found"); anyhow::bail!("no functions found");
} }

View File

@@ -972,12 +972,13 @@ mod tests {
let shared_builder = settings::builder(); let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder); let shared_flags = settings::Flags::new(shared_builder);
let triple = ::target_lexicon::Triple::from_str("arm").expect("Couldn't create arm triple"); let triple =
::target_lexicon::Triple::from_str("riscv32").expect("Couldn't create riscv32 triple");
let target = isa::lookup(triple) let target = isa::lookup(triple)
.ok() .ok()
.map(|b| b.finish(shared_flags)) .map(|b| b.finish(shared_flags))
.expect("This test requires arm support."); .expect("This test requires riscv32 support.");
let mut sig = Signature::new(target.default_call_conv()); let mut sig = Signature::new(target.default_call_conv());
sig.returns.push(AbiParam::new(I32)); sig.returns.push(AbiParam::new(I32));
@@ -1033,12 +1034,13 @@ block0:
let shared_builder = settings::builder(); let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder); let shared_flags = settings::Flags::new(shared_builder);
let triple = ::target_lexicon::Triple::from_str("arm").expect("Couldn't create arm triple"); let triple =
::target_lexicon::Triple::from_str("riscv32").expect("Couldn't create riscv32 triple");
let target = isa::lookup(triple) let target = isa::lookup(triple)
.ok() .ok()
.map(|b| b.finish(shared_flags)) .map(|b| b.finish(shared_flags))
.expect("This test requires arm support."); .expect("This test requires riscv32 support.");
let mut sig = Signature::new(target.default_call_conv()); let mut sig = Signature::new(target.default_call_conv());
sig.returns.push(AbiParam::new(I32)); sig.returns.push(AbiParam::new(I32));
@@ -1090,12 +1092,13 @@ block0:
let shared_builder = settings::builder(); let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder); let shared_flags = settings::Flags::new(shared_builder);
let triple = ::target_lexicon::Triple::from_str("arm").expect("Couldn't create arm triple"); let triple =
::target_lexicon::Triple::from_str("riscv32").expect("Couldn't create riscv32 triple");
let target = isa::lookup(triple) let target = isa::lookup(triple)
.ok() .ok()
.map(|b| b.finish(shared_flags)) .map(|b| b.finish(shared_flags))
.expect("This test requires arm support."); .expect("This test requires riscv32 support.");
let mut sig = Signature::new(target.default_call_conv()); let mut sig = Signature::new(target.default_call_conv());
sig.returns.push(AbiParam::new(I32)); sig.returns.push(AbiParam::new(I32));
@@ -1150,12 +1153,13 @@ block0:
let shared_builder = settings::builder(); let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder); let shared_flags = settings::Flags::new(shared_builder);
let triple = ::target_lexicon::Triple::from_str("arm").expect("Couldn't create arm triple"); let triple =
::target_lexicon::Triple::from_str("riscv32").expect("Couldn't create riscv32 triple");
let target = isa::lookup(triple) let target = isa::lookup(triple)
.ok() .ok()
.map(|b| b.finish(shared_flags)) .map(|b| b.finish(shared_flags))
.expect("This test requires arm support."); .expect("This test requires riscv32 support.");
let mut sig = Signature::new(target.default_call_conv()); let mut sig = Signature::new(target.default_call_conv());
sig.returns.push(AbiParam::new(I32)); sig.returns.push(AbiParam::new(I32));
@@ -1202,12 +1206,13 @@ block0:
let shared_builder = settings::builder(); let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder); let shared_flags = settings::Flags::new(shared_builder);
let triple = ::target_lexicon::Triple::from_str("arm").expect("Couldn't create arm triple"); let triple =
::target_lexicon::Triple::from_str("riscv32").expect("Couldn't create riscv32 triple");
let target = isa::lookup(triple) let target = isa::lookup(triple)
.ok() .ok()
.map(|b| b.finish(shared_flags)) .map(|b| b.finish(shared_flags))
.expect("This test requires arm support."); .expect("This test requires riscv32 support.");
let mut sig = Signature::new(target.default_call_conv()); let mut sig = Signature::new(target.default_call_conv());
sig.returns.push(AbiParam::new(I32)); sig.returns.push(AbiParam::new(I32));