Skip to content

Commit c151ed4

Browse files
committed
Add test.
1 parent bf3c6c5 commit c151ed4

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
- // MIR for `fn0` before GVN
2+
+ // MIR for `fn0` after GVN
3+
4+
fn fn0() -> () {
5+
let mut _0: ();
6+
let mut _1: usize;
7+
let mut _2: [u128; 6];
8+
let mut _3: ([u128; 6],);
9+
let mut _4: ([u128; 6],);
10+
let mut _5: ();
11+
12+
bb0: {
13+
_1 = const 1_usize;
14+
_2 = [const 42_u128; 6];
15+
- _2[_1] = const 1_u128;
16+
+ _2[1 of 2] = const 1_u128;
17+
_3 = (_2,);
18+
_4 = _3;
19+
- _5 = fn1(move (_3.0: [u128; 6]), _4) -> [return: bb1, unwind unreachable];
20+
+ _5 = fn1(move (_3.0: [u128; 6]), _3) -> [return: bb1, unwind unreachable];
21+
}
22+
23+
bb1: {
24+
return;
25+
}
26+
}
27+

tests/mir-opt/gvn_copy_moves.rs

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// unit-test: GVN
2+
3+
#![feature(custom_mir, core_intrinsics)]
4+
extern crate core;
5+
use core::intrinsics::mir::*;
6+
7+
#[custom_mir(dialect = "runtime", phase = "initial")]
8+
fn fn0() {
9+
// CHECK-LABEL: fn fn0(
10+
mir! {
11+
let a: usize;
12+
let b: [u128; 6];
13+
let c: ([u128; 6],);
14+
let d: ([u128; 6],);
15+
let x: ();
16+
{
17+
// CHECK: bb0: {
18+
// CHECK-NEXT: _1 = const 1_usize;
19+
// CHECK-NEXT: _2 = [const 42_u128; 6];
20+
// CHECK-NEXT: _2[1 of 2] = const 1_u128;
21+
// CHECK-NEXT: _3 = (_2,);
22+
// CHECK-NEXT: _4 = _3;
23+
// CHECK-NEXT: _5 = fn1((_3.0: [u128; 6]), _3)
24+
a = 1_usize;
25+
b = [42; 6];
26+
b[a] = 1;
27+
c = (b,);
28+
d = c;
29+
Call(x = fn1(Move(c.0), d), ReturnTo(bb1), UnwindUnreachable())
30+
}
31+
bb1 = {
32+
Return()
33+
}
34+
}
35+
}
36+
37+
#[inline(never)]
38+
fn fn1(a: [u128; 6], mut b: ([u128; 6],)) {
39+
b.0 = [0; 6];
40+
}
41+
42+
fn main() {
43+
fn0();
44+
}
45+
46+
// EMIT_MIR gvn_copy_moves.fn0.GVN.diff

0 commit comments

Comments
 (0)