| // EMIT_MIR_FOR_EACH_PANIC_STRATEGY | |
| //@ test-mir-pass: GVN | |
| //@ compile-flags: -O | |
| // EMIT_MIR aggregate.main.GVN.diff | |
| fn main() { | |
| // CHECK-LABEL: fn main( | |
| // CHECK: debug x => [[x:_.*]]; | |
| // CHECK-NOT: = Add( | |
| // CHECK: [[x]] = const 1_u8; | |
| // CHECK-NOT: = Add( | |
| // CHECK: foo(const 1_u8) | |
| let x = (0, 1, 2).1 + 0; | |
| foo(x); | |
| } | |
| // Verify that we still propagate if part of the aggregate is not known. | |
| // EMIT_MIR aggregate.foo.GVN.diff | |
| fn foo(x: u8) { | |
| // CHECK-LABEL: fn foo( | |
| // CHECK: debug first => [[first:_.*]]; | |
| // CHECK: debug second => [[second:_.*]]; | |
| // CHECK-NOT: = Add( | |
| // CHECK: [[first]] = const 1_i32; | |
| // CHECK-NOT: = Add( | |
| // CHECK: [[second]] = const 3_i32; | |
| let first = (0, x).0 + 1; | |
| let second = (x, 1).1 + 2; | |
| } |