Update the test case for SimplifyCfg-after-unreachable-enum-branching

This commit is contained in:
DianQK 2024-03-09 14:43:38 +08:00
parent 102bda49b1
commit ec313d1edb
No known key found for this signature in database
GPG Key ID: 46BDB1AC96C48912
3 changed files with 67 additions and 38 deletions

View File

@ -5,19 +5,27 @@
let mut _0: u8;
bb0: {
- switchInt(_1) -> [0: bb1, 255: bb2, otherwise: bb3];
+ switchInt(_1) -> [0: bb1, 255: bb1, otherwise: bb2];
- switchInt(_1) -> [0: bb3, 1: bb2, 255: bb3, otherwise: bb4];
+ switchInt(_1) -> [0: bb2, 1: bb1, 255: bb2, otherwise: bb3];
}
bb1: {
- _0 = const 1_u8;
- return;
- }
-
- bb2: {
_0 = const 2_u8;
return;
}
- bb3: {
+ bb2: {
unreachable;
}
bb2: {
- unreachable;
- }
-
- bb3: {
- bb4: {
+ bb3: {
_0 = _1;
return;
}

View File

@ -0,0 +1,52 @@
//@ unit-test: SimplifyCfg-after-unreachable-enum-branching
#![feature(custom_mir, core_intrinsics)]
#![crate_type = "lib"]
use std::intrinsics::mir::*;
// Check that we correctly cleaned up the dead BB.
// EMIT_MIR simplify_dead_blocks.assert_nonzero_nonmax.SimplifyCfg-after-unreachable-enum-branching.diff
#[custom_mir(dialect = "runtime", phase = "post-cleanup")]
pub unsafe fn assert_nonzero_nonmax(x: u8) -> u8 {
// CHECK-LABEL: fn assert_nonzero_nonmax(
// CHECK: bb0: {
// CHECK-NEXT: switchInt({{.*}}) -> [0: [[unreachable:bb.*]], 1: [[retblock2:bb.*]], 255: [[unreachable:bb.*]], otherwise: [[retblock:bb.*]]];
// CHECK-NEXT: }
// CHECK-NOT: _0 = const 1_u8;
// CHECK: [[retblock2]]: {
// CHECK-NEXT: _0 = const 2_u8;
// CHECK-NEXT: return;
// CHECK-NEXT: }
// CHECK: [[unreachable]]: {
// CHECK-NEXT: unreachable;
// CHECK-NEXT: }
// CHECK: [[retblock]]: {
// CHECK-NEXT: _0 = _1;
// CHECK-NEXT: return;
// CHECK-NEXT: }
mir!(
{
match x {
0 => unreachable,
1 => retblock2,
u8::MAX => unreachable,
_ => retblock,
}
}
deadRetblock1 = {
RET = 1;
Return()
}
retblock2 = {
RET = 2;
Return()
}
unreachable = {
Unreachable()
}
retblock = {
RET = x;
Return()
}
)
}

View File

@ -1,31 +0,0 @@
// skip-filecheck
#![feature(custom_mir, core_intrinsics)]
#![crate_type = "lib"]
use std::intrinsics::mir::*;
//@ unit-test: SimplifyCfg-after-unreachable-enum-branching
// EMIT_MIR simplify_duplicate_unreachable_blocks.assert_nonzero_nonmax.SimplifyCfg-after-unreachable-enum-branching.diff
#[custom_mir(dialect = "runtime", phase = "post-cleanup")]
pub unsafe fn assert_nonzero_nonmax(x: u8) -> u8 {
mir!(
{
match x {
0 => unreachable1,
u8::MAX => unreachable2,
_ => retblock,
}
}
unreachable1 = {
Unreachable()
}
unreachable2 = {
Unreachable()
}
retblock = {
RET = x;
Return()
}
)
}