- // 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/simplify_if.rs:+0:11: +0:11
      let mut _1: bool;                    // in scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
      let _2: ();                          // in scope 0 at $DIR/simplify_if.rs:+2:9: +2:15
  
      bb0: {
          StorageLive(_1);                 // scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
          _1 = const false;                // scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
-         switchInt(const false) -> [0: bb3, otherwise: bb1]; // scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
+         goto -> bb3;                     // scope 0 at $DIR/simplify_if.rs:+1:8: +1:13
      }
  
      bb1: {
          StorageLive(_2);                 // scope 0 at $DIR/simplify_if.rs:+2:9: +2:15
          _2 = noop() -> bb2;              // scope 0 at $DIR/simplify_if.rs:+2:9: +2:15
                                           // mir::Constant
                                           // + span: $DIR/simplify_if.rs:7:9: 7:13
                                           // + literal: Const { ty: fn() {noop}, val: Value(<ZST>) }
      }
  
      bb2: {
          StorageDead(_2);                 // scope 0 at $DIR/simplify_if.rs:+2:15: +2:16
          goto -> bb4;                     // scope 0 at $DIR/simplify_if.rs:+1:5: +3:6
      }
  
      bb3: {
          goto -> bb4;                     // scope 0 at $DIR/simplify_if.rs:+1:5: +3:6
      }
  
      bb4: {
          StorageDead(_1);                 // scope 0 at $DIR/simplify_if.rs:+3:5: +3:6
          return;                          // scope 0 at $DIR/simplify_if.rs:+4:2: +4:2
      }
  }
  
