Update the test case for SimplifyCfg-after-unreachable-enum-branching
This commit is contained in:
parent
102bda49b1
commit
ec313d1edb
@ -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;
|
||||
}
|
52
tests/mir-opt/simplify_dead_blocks.rs
Normal file
52
tests/mir-opt/simplify_dead_blocks.rs
Normal 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()
|
||||
}
|
||||
)
|
||||
}
|
@ -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()
|
||||
}
|
||||
)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user