Convert more tests to FuncCursor.
This commit is contained in:
@@ -214,53 +214,52 @@ impl<'f> InstBuilderBase<'f> for ReplaceBuilder<'f> {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use ir::{Function, Cursor, CursorBase, InstBuilder, ValueDef};
|
||||
use cursor::{Cursor, FuncCursor};
|
||||
use ir::{Function, InstBuilder, ValueDef};
|
||||
use ir::types::*;
|
||||
use ir::condcodes::*;
|
||||
|
||||
#[test]
|
||||
fn types() {
|
||||
let mut func = Function::new();
|
||||
let dfg = &mut func.dfg;
|
||||
let ebb0 = dfg.make_ebb();
|
||||
let arg0 = dfg.append_ebb_arg(ebb0, I32);
|
||||
let pos = &mut Cursor::new(&mut func.layout);
|
||||
let ebb0 = func.dfg.make_ebb();
|
||||
let arg0 = func.dfg.append_ebb_arg(ebb0, I32);
|
||||
let mut pos = FuncCursor::new(&mut func);
|
||||
pos.insert_ebb(ebb0);
|
||||
|
||||
// Explicit types.
|
||||
let v0 = dfg.ins(pos).iconst(I32, 3);
|
||||
assert_eq!(dfg.value_type(v0), I32);
|
||||
let v0 = pos.ins().iconst(I32, 3);
|
||||
assert_eq!(pos.func.dfg.value_type(v0), I32);
|
||||
|
||||
// Inferred from inputs.
|
||||
let v1 = dfg.ins(pos).iadd(arg0, v0);
|
||||
assert_eq!(dfg.value_type(v1), I32);
|
||||
let v1 = pos.ins().iadd(arg0, v0);
|
||||
assert_eq!(pos.func.dfg.value_type(v1), I32);
|
||||
|
||||
// Formula.
|
||||
let cmp = dfg.ins(pos).icmp(IntCC::Equal, arg0, v0);
|
||||
assert_eq!(dfg.value_type(cmp), B1);
|
||||
let cmp = pos.ins().icmp(IntCC::Equal, arg0, v0);
|
||||
assert_eq!(pos.func.dfg.value_type(cmp), B1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reuse_results() {
|
||||
let mut func = Function::new();
|
||||
let dfg = &mut func.dfg;
|
||||
let ebb0 = dfg.make_ebb();
|
||||
let arg0 = dfg.append_ebb_arg(ebb0, I32);
|
||||
let pos = &mut Cursor::new(&mut func.layout);
|
||||
let ebb0 = func.dfg.make_ebb();
|
||||
let arg0 = func.dfg.append_ebb_arg(ebb0, I32);
|
||||
let mut pos = FuncCursor::new(&mut func);
|
||||
pos.insert_ebb(ebb0);
|
||||
|
||||
let v0 = dfg.ins(pos).iadd_imm(arg0, 17);
|
||||
assert_eq!(dfg.value_type(v0), I32);
|
||||
let v0 = pos.ins().iadd_imm(arg0, 17);
|
||||
assert_eq!(pos.func.dfg.value_type(v0), I32);
|
||||
let iadd = pos.prev_inst().unwrap();
|
||||
assert_eq!(dfg.value_def(v0), ValueDef::Res(iadd, 0));
|
||||
assert_eq!(pos.func.dfg.value_def(v0), ValueDef::Res(iadd, 0));
|
||||
|
||||
// Detach v0 and reuse it for a different instruction.
|
||||
dfg.clear_results(iadd);
|
||||
let v0b = dfg.ins(pos).with_result(v0).iconst(I32, 3);
|
||||
pos.func.dfg.clear_results(iadd);
|
||||
let v0b = pos.ins().with_result(v0).iconst(I32, 3);
|
||||
assert_eq!(v0, v0b);
|
||||
assert_eq!(pos.current_inst(), Some(iadd));
|
||||
let iconst = pos.prev_inst().unwrap();
|
||||
assert!(iadd != iconst);
|
||||
assert_eq!(dfg.value_def(v0), ValueDef::Res(iconst, 0));
|
||||
assert_eq!(pos.func.dfg.value_def(v0), ValueDef::Res(iconst, 0));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user