- // MIR for `array_bound` before InstCombine
+ // MIR for `array_bound` after InstCombine
  
  fn array_bound(_1: usize, _2: &[u8; N]) -> u8 {
      debug index => _1;                   // in scope 0 at $DIR/lower_array_len.rs:+0:36: +0:41
      debug slice => _2;                   // in scope 0 at $DIR/lower_array_len.rs:+0:50: +0:55
      let mut _0: u8;                      // return place in scope 0 at $DIR/lower_array_len.rs:+0:70: +0:72
      let mut _3: bool;                    // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
      let mut _4: usize;                   // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
      let mut _5: usize;                   // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
      let mut _6: &[u8];                   // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
      let mut _7: &[u8; N];                // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
      let _8: usize;                       // in scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
      let mut _9: usize;                   // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
      let mut _10: bool;                   // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
      let mut _11: &[u8; N];               // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
  
      bb0: {
          StorageLive(_3);                 // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
          StorageLive(_4);                 // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
          _4 = _1;                         // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
          StorageLive(_5);                 // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
          StorageLive(_6);                 // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
          StorageLive(_7);                 // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
-         _7 = &(*_2);                     // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
+         _7 = _2;                         // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
          StorageLive(_11);                // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
          _11 = _7;                        // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
          _6 = move _7 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
          StorageDead(_7);                 // scope 0 at $DIR/lower_array_len.rs:+1:20: +1:21
-         _5 = Len((*_11));                // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
+         _5 = const N;                    // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
          StorageDead(_11);                // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
          StorageDead(_6);                 // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
          _3 = Lt(move _4, move _5);       // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
          StorageDead(_5);                 // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
          StorageDead(_4);                 // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
          switchInt(move _3) -> [false: bb3, otherwise: bb1]; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
      }
  
      bb1: {
          StorageLive(_8);                 // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
          _8 = _1;                         // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
-         _9 = Len((*_2));                 // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
+         _9 = const N;                    // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
          _10 = Lt(_8, _9);                // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
          assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> bb2; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
      }
  
      bb2: {
          _0 = (*_2)[_8];                  // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
          StorageDead(_8);                 // scope 0 at $DIR/lower_array_len.rs:+3:5: +3:6
          goto -> bb4;                     // scope 0 at $DIR/lower_array_len.rs:+1:5: +5:6
      }
  
      bb3: {
          _0 = const 42_u8;                // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:11
          goto -> bb4;                     // scope 0 at $DIR/lower_array_len.rs:+1:5: +5:6
      }
  
      bb4: {
          StorageDead(_3);                 // scope 0 at $DIR/lower_array_len.rs:+5:5: +5:6
          return;                          // scope 0 at $DIR/lower_array_len.rs:+6:2: +6:2
      }
  }
  
