FileCheck aggregate.

This commit is contained in:
Camille GILLOT 2023-12-02 20:17:04 +00:00
parent 378abbc604
commit 6564bac532
5 changed files with 14 additions and 174 deletions

View File

@ -1,49 +0,0 @@
// MIR for `foo` after PreCodegen
fn foo(_1: u8) -> () {
debug x => _1;
let mut _0: ();
let _2: i32;
let mut _3: i32;
let mut _4: (i32, u8);
let mut _5: u8;
let mut _7: i32;
let mut _8: (u8, i32);
let mut _9: u8;
scope 1 {
debug first => _2;
let _6: i32;
scope 2 {
debug second => _6;
}
}
bb0: {
StorageLive(_2);
StorageLive(_3);
StorageLive(_4);
StorageLive(_5);
_5 = _1;
_4 = (const 0_i32, move _5);
StorageDead(_5);
_3 = const 0_i32;
_2 = const 1_i32;
StorageDead(_3);
StorageDead(_4);
StorageLive(_6);
StorageLive(_7);
StorageLive(_8);
StorageLive(_9);
_9 = _1;
_8 = (move _9, const 1_i32);
StorageDead(_9);
_7 = const 1_i32;
_6 = const 3_i32;
StorageDead(_7);
StorageDead(_8);
_0 = const ();
StorageDead(_6);
StorageDead(_2);
return;
}
}

View File

@ -1,49 +0,0 @@
// MIR for `foo` after PreCodegen
fn foo(_1: u8) -> () {
debug x => _1;
let mut _0: ();
let _2: i32;
let mut _3: i32;
let mut _4: (i32, u8);
let mut _5: u8;
let mut _7: i32;
let mut _8: (u8, i32);
let mut _9: u8;
scope 1 {
debug first => _2;
let _6: i32;
scope 2 {
debug second => _6;
}
}
bb0: {
StorageLive(_2);
StorageLive(_3);
StorageLive(_4);
StorageLive(_5);
_5 = _1;
_4 = (const 0_i32, move _5);
StorageDead(_5);
_3 = const 0_i32;
_2 = const 1_i32;
StorageDead(_3);
StorageDead(_4);
StorageLive(_6);
StorageLive(_7);
StorageLive(_8);
StorageLive(_9);
_9 = _1;
_8 = (move _9, const 1_i32);
StorageDead(_9);
_7 = const 1_i32;
_6 = const 3_i32;
StorageDead(_7);
StorageDead(_8);
_0 = const ();
StorageDead(_6);
StorageDead(_2);
return;
}
}

View File

@ -1,36 +0,0 @@
// MIR for `main` after PreCodegen
fn main() -> () {
let mut _0: ();
let _1: u8;
let mut _2: u8;
let mut _3: (i32, u8, i32);
let _4: ();
let mut _5: u8;
scope 1 {
debug x => _1;
}
bb0: {
StorageLive(_1);
StorageLive(_2);
StorageLive(_3);
_3 = (const 0_i32, const 1_u8, const 2_i32);
_2 = const 1_u8;
_1 = const 1_u8;
StorageDead(_2);
StorageDead(_3);
StorageLive(_4);
StorageLive(_5);
_5 = const 1_u8;
_4 = foo(const 1_u8) -> [return: bb1, unwind unreachable];
}
bb1: {
StorageDead(_5);
StorageDead(_4);
_0 = const ();
StorageDead(_1);
return;
}
}

View File

@ -1,36 +0,0 @@
// MIR for `main` after PreCodegen
fn main() -> () {
let mut _0: ();
let _1: u8;
let mut _2: u8;
let mut _3: (i32, u8, i32);
let _4: ();
let mut _5: u8;
scope 1 {
debug x => _1;
}
bb0: {
StorageLive(_1);
StorageLive(_2);
StorageLive(_3);
_3 = (const 0_i32, const 1_u8, const 2_i32);
_2 = const 1_u8;
_1 = const 1_u8;
StorageDead(_2);
StorageDead(_3);
StorageLive(_4);
StorageLive(_5);
_5 = const 1_u8;
_4 = foo(const 1_u8) -> [return: bb1, unwind continue];
}
bb1: {
StorageDead(_5);
StorageDead(_4);
_0 = const ();
StorageDead(_1);
return;
}
}

View File

@ -1,19 +1,29 @@
// skip-filecheck
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// unit-test: ConstProp
// compile-flags: -O
// EMIT_MIR aggregate.main.ConstProp.diff
// EMIT_MIR aggregate.main.PreCodegen.after.mir
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.ConstProp.diff
// EMIT_MIR aggregate.foo.PreCodegen.after.mir
fn foo(x: u8) {
// Verify that we still propagate if part of the aggregate is not known.
// 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;
}