mirror of
https://github.com/kmc7468/cs420.git
synced 2025-12-14 22:38:46 +00:00
Add deadcode examples
This commit is contained in:
39
examples/deadcode/deadcode.input.ir
Normal file
39
examples/deadcode/deadcode.input.ir
Normal file
@@ -0,0 +1,39 @@
|
||||
fun unit @sink {
|
||||
init:
|
||||
bid: b0
|
||||
allocations:
|
||||
|
||||
block b0:
|
||||
%b0:p0:unit
|
||||
ret unit:unit
|
||||
}
|
||||
|
||||
fun i32 @deadcode {
|
||||
init:
|
||||
bid: b0
|
||||
allocations:
|
||||
%l0:i32:x
|
||||
%l1:i32:y
|
||||
|
||||
block b0:
|
||||
%b0:i0:i32 = add 100:i32 200:i32
|
||||
%b0:i1:i32 = add %b0:i0:i32 300:i32
|
||||
%b0:i2:i32 = add %b0:i1:i32 400:i32
|
||||
%b0:i3:unit = store %l1:i32 %b0:i0:i32
|
||||
|
||||
br undef:i1 b1() b2()
|
||||
|
||||
block b1:
|
||||
%b1:i0:unit = nop
|
||||
%b1:i1:unit = call @sink(%b1:i0:unit)
|
||||
|
||||
j b3()
|
||||
|
||||
block b2:
|
||||
%b2:i0:unit = store %l1:i32 42:i32
|
||||
|
||||
j b3()
|
||||
|
||||
block b3:
|
||||
ret 0:i32
|
||||
}
|
||||
35
examples/deadcode/deadcode.output.ir
Normal file
35
examples/deadcode/deadcode.output.ir
Normal file
@@ -0,0 +1,35 @@
|
||||
fun unit @sink {
|
||||
init:
|
||||
bid: b0
|
||||
allocations:
|
||||
|
||||
block b0:
|
||||
%b0:p0:unit
|
||||
ret unit:unit
|
||||
}
|
||||
|
||||
fun i32 @deadcode {
|
||||
init:
|
||||
bid: b0
|
||||
allocations:
|
||||
%l0:i32:y
|
||||
|
||||
block b0:
|
||||
%b0:i0:i32 = add 100:i32 200:i32
|
||||
%b0:i1:unit = store %l0:i32 %b0:i0:i32
|
||||
|
||||
br undef:i1 b1() b2()
|
||||
|
||||
block b1:
|
||||
%b1:i0:unit = call @sink(unit:unit)
|
||||
|
||||
j b3()
|
||||
|
||||
block b2:
|
||||
%b2:i0:unit = store %l0:i32 42:i32
|
||||
|
||||
j b3()
|
||||
|
||||
block b3:
|
||||
ret 0:i32
|
||||
}
|
||||
@@ -238,7 +238,7 @@ peg::parser! {
|
||||
}
|
||||
/
|
||||
"unit" {
|
||||
Constant::undef(Dtype::unit()) // TODO
|
||||
Constant::unit()
|
||||
}
|
||||
/
|
||||
"<constant>" {
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::ir::*;
|
||||
use crate::opt::FunctionPass;
|
||||
use crate::*;
|
||||
|
||||
pub type Deadcode = FunctionPass<DeadcodeInner>;
|
||||
pub type Deadcode = FunctionPass<Repeat<DeadcodeInner>>;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct DeadcodeInner {}
|
||||
|
||||
@@ -20,7 +20,7 @@ pub trait Optimize<T> {
|
||||
}
|
||||
|
||||
pub type O0 = Null;
|
||||
pub type O1 = Repeat<(SimplifyCfg, (Mem2reg, (Deadcode, Gvn)))>;
|
||||
pub type O1 = Repeat<(SimplifyCfg, (Mem2reg, (Gvn, Deadcode)))>;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Null {}
|
||||
|
||||
@@ -92,3 +92,12 @@ fn test_examples_gvn() {
|
||||
&mut Gvn::default(),
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_examples_deadcode() {
|
||||
test_opt(
|
||||
&Path::new("examples/deadcode/deadcode.input.ir"),
|
||||
&Path::new("examples/deadcode/deadcode.output.ir"),
|
||||
&mut Deadcode::default(),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user