- // MIR for `main` before SimplifyConstCondition-after-const-prop
+ // MIR for `main` after SimplifyConstCondition-after-const-prop
  
  fn main() -> () {
      let mut _0: ();                      // return place in scope 0 at $DIR/switch_int.rs:+0:11: +0:11
      let mut _1: i32;                     // in scope 0 at $DIR/switch_int.rs:+1:11: +1:12
  
      bb0: {
          StorageLive(_1);                 // scope 0 at $DIR/switch_int.rs:+1:11: +1:12
          _1 = const 1_i32;                // scope 0 at $DIR/switch_int.rs:+1:11: +1:12
-         switchInt(const 1_i32) -> [1_i32: bb2, otherwise: bb1]; // scope 0 at $DIR/switch_int.rs:+1:5: +1:12
+         goto -> bb2;                     // scope 0 at $DIR/switch_int.rs:+1:5: +1:12
      }
  
      bb1: {
          _0 = foo(const -1_i32) -> bb3;   // scope 0 at $DIR/switch_int.rs:+3:14: +3:21
                                           // mir::Constant
                                           // + span: $DIR/switch_int.rs:9:14: 9:17
                                           // + literal: Const { ty: fn(i32) {foo}, val: Value(<ZST>) }
      }
  
      bb2: {
          _0 = foo(const 0_i32) -> bb3;    // scope 0 at $DIR/switch_int.rs:+2:14: +2:20
                                           // mir::Constant
                                           // + span: $DIR/switch_int.rs:8:14: 8:17
                                           // + literal: Const { ty: fn(i32) {foo}, val: Value(<ZST>) }
      }
  
      bb3: {
          StorageDead(_1);                 // scope 0 at $DIR/switch_int.rs:+5:1: +5:2
          return;                          // scope 0 at $DIR/switch_int.rs:+5:2: +5:2
      }
  }
  
