Browse Source
This test command sends each function through legalize_function() and then filecheck.pull/3/head
Jakob Stoklund Olesen
8 years ago
4 changed files with 68 additions and 1 deletions
@ -0,0 +1,19 @@ |
|||||
|
test legalizer |
||||
|
isa riscv supports_m=1 |
||||
|
|
||||
|
function int32(i32, i32) { |
||||
|
ebb0(v1: i32, v2: i32): |
||||
|
v10 = iadd v1, v2 |
||||
|
; check: [R#0c] |
||||
|
; sameln: $v10 = iadd |
||||
|
|
||||
|
v11 = isub v1, v2 |
||||
|
; check: [R#200c] |
||||
|
; sameln: $v11 = isub |
||||
|
|
||||
|
v12 = imul v1, v2 |
||||
|
; check: [R#10c] |
||||
|
; sameln: $v12 = imul |
||||
|
|
||||
|
return |
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
//! Test command for checking the IL legalizer.
|
||||
|
//!
|
||||
|
//! The `test legalizer` test command runs each function through `legalize_function()` and sends
|
||||
|
//! the result to filecheck.
|
||||
|
|
||||
|
use std::borrow::Cow; |
||||
|
use cretonne::{legalize_function, write_function}; |
||||
|
use cretonne::ir::Function; |
||||
|
use cton_reader::TestCommand; |
||||
|
use filetest::subtest::{SubTest, Context, Result, run_filecheck}; |
||||
|
|
||||
|
struct TestLegalizer; |
||||
|
|
||||
|
pub fn subtest(parsed: &TestCommand) -> Result<Box<SubTest>> { |
||||
|
assert_eq!(parsed.command, "legalizer"); |
||||
|
if !parsed.options.is_empty() { |
||||
|
Err(format!("No options allowed on {}", parsed)) |
||||
|
} else { |
||||
|
Ok(Box::new(TestLegalizer)) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
impl SubTest for TestLegalizer { |
||||
|
fn name(&self) -> Cow<str> { |
||||
|
Cow::from("legalizer") |
||||
|
} |
||||
|
|
||||
|
fn is_mutating(&self) -> bool { |
||||
|
true |
||||
|
} |
||||
|
|
||||
|
fn needs_isa(&self) -> bool { |
||||
|
true |
||||
|
} |
||||
|
|
||||
|
fn run(&self, func: Cow<Function>, context: &Context) -> Result<()> { |
||||
|
let mut func = func.into_owned(); |
||||
|
let isa = context.isa.expect("legalizer needs an ISA"); |
||||
|
legalize_function(&mut func, isa); |
||||
|
|
||||
|
let mut text = String::new(); |
||||
|
try!(write_function(&mut text, &func, Some(isa)).map_err(|e| e.to_string())); |
||||
|
run_filecheck(&text, context) |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue