[const-prop] Handle MIR Rvalue::Discriminant
This commit is contained in:
parent
a2e3ed5c05
commit
4d89031e80
@ -436,13 +436,13 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
|
||||
|
||||
// if this isn't a supported operation, then return None
|
||||
match rvalue {
|
||||
Rvalue::NullaryOp(NullOp::Box, _) |
|
||||
Rvalue::Discriminant(..) => return None,
|
||||
Rvalue::NullaryOp(NullOp::Box, _) => return None,
|
||||
|
||||
Rvalue::Use(_) |
|
||||
Rvalue::Len(_) |
|
||||
Rvalue::Repeat(..) |
|
||||
Rvalue::Aggregate(..) |
|
||||
Rvalue::Discriminant(..) |
|
||||
Rvalue::Cast(..) |
|
||||
Rvalue::NullaryOp(..) |
|
||||
Rvalue::CheckedBinaryOp(..) |
|
||||
|
53
src/test/mir-opt/const_prop/discriminant.rs
Normal file
53
src/test/mir-opt/const_prop/discriminant.rs
Normal file
@ -0,0 +1,53 @@
|
||||
// compile-flags: -O
|
||||
|
||||
fn main() {
|
||||
let x = (if let Some(true) = Some(true) { 42 } else { 10 }) + 0;
|
||||
}
|
||||
|
||||
// END RUST SOURCE
|
||||
// START rustc.main.ConstProp.before.mir
|
||||
// bb0: {
|
||||
// ...
|
||||
// _3 = std::option::Option::<bool>::Some(const true,);
|
||||
// _4 = discriminant(_3);
|
||||
// switchInt(move _4) -> [1isize: bb3, otherwise: bb2];
|
||||
// }
|
||||
// bb1: {
|
||||
// _2 = const 42i32;
|
||||
// goto -> bb4;
|
||||
// }
|
||||
// bb2: {
|
||||
// _2 = const 10i32;
|
||||
// goto -> bb4;
|
||||
// }
|
||||
// bb3: {
|
||||
// switchInt(((_3 as Some).0: bool)) -> [false: bb2, otherwise: bb1];
|
||||
// }
|
||||
// bb4: {
|
||||
// _1 = Add(move _2, const 0i32);
|
||||
// ...
|
||||
// }
|
||||
// END rustc.main.ConstProp.before.mir
|
||||
// START rustc.main.ConstProp.after.mir
|
||||
// bb0: {
|
||||
// ...
|
||||
// _3 = const Scalar(0x01) : std::option::Option<bool>;
|
||||
// _4 = const 1isize;
|
||||
// switchInt(const 1isize) -> [1isize: bb3, otherwise: bb2];
|
||||
// }
|
||||
// bb1: {
|
||||
// _2 = const 42i32;
|
||||
// goto -> bb4;
|
||||
// }
|
||||
// bb2: {
|
||||
// _2 = const 10i32;
|
||||
// goto -> bb4;
|
||||
// }
|
||||
// bb3: {
|
||||
// switchInt(const true) -> [false: bb2, otherwise: bb1];
|
||||
// }
|
||||
// bb4: {
|
||||
// _1 = Add(move _2, const 0i32);
|
||||
// ...
|
||||
// }
|
||||
// END rustc.main.ConstProp.after.mir
|
Loading…
x
Reference in New Issue
Block a user