mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
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;
|
let mut _0: u8;
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
- switchInt(_1) -> [0: bb1, 255: bb2, otherwise: bb3];
|
- switchInt(_1) -> [0: bb3, 1: bb2, 255: bb3, otherwise: bb4];
|
||||||
+ switchInt(_1) -> [0: bb1, 255: bb1, otherwise: bb2];
|
+ switchInt(_1) -> [0: bb2, 1: bb1, 255: bb2, otherwise: bb3];
|
||||||
}
|
}
|
||||||
|
|
||||||
bb1: {
|
bb1: {
|
||||||
|
- _0 = const 1_u8;
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb2: {
|
||||||
|
_0 = const 2_u8;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- bb3: {
|
||||||
|
+ bb2: {
|
||||||
unreachable;
|
unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
bb2: {
|
- bb4: {
|
||||||
- unreachable;
|
+ bb3: {
|
||||||
- }
|
|
||||||
-
|
|
||||||
- bb3: {
|
|
||||||
_0 = _1;
|
_0 = _1;
|
||||||
return;
|
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…
Reference in New Issue
Block a user