- // MIR for `repeated_index` before GVN
+ // MIR for `repeated_index` after GVN
  
  fn repeated_index(_1: T, _2: usize) -> () {
      debug x => _1;
      debug idx => _2;
      let mut _0: ();
      let _3: [T; N];
      let mut _4: T;
      let _5: ();
      let mut _6: T;
      let _7: usize;
      let mut _8: usize;
      let mut _9: bool;
      let _10: ();
      let mut _11: T;
      let _12: usize;
      let mut _13: usize;
      let mut _14: bool;
      scope 1 {
          debug a => _3;
      }
  
      bb0: {
          StorageLive(_3);
          StorageLive(_4);
          _4 = copy _1;
-         _3 = [move _4; N];
+         _3 = [copy _1; N];
          StorageDead(_4);
          StorageLive(_5);
          StorageLive(_6);
          StorageLive(_7);
          _7 = const 0_usize;
-         _8 = Len(_3);
-         _9 = Lt(copy _7, copy _8);
-         assert(move _9, "index out of bounds: the length is {} but the index is {}", move _8, copy _7) -> [success: bb1, unwind continue];
+         _8 = const N;
+         _9 = Lt(const 0_usize, const N);
+         assert(move _9, "index out of bounds: the length is {} but the index is {}", const N, const 0_usize) -> [success: bb1, unwind continue];
      }
  
      bb1: {
-         _6 = copy _3[_7];
-         _5 = opaque::<T>(move _6) -> [return: bb2, unwind continue];
+         _6 = copy _1;
+         _5 = opaque::<T>(copy _1) -> [return: bb2, unwind continue];
      }
  
      bb2: {
          StorageDead(_6);
          StorageDead(_7);
          StorageDead(_5);
          StorageLive(_10);
          StorageLive(_11);
          StorageLive(_12);
          _12 = copy _2;
-         _13 = Len(_3);
-         _14 = Lt(copy _12, copy _13);
-         assert(move _14, "index out of bounds: the length is {} but the index is {}", move _13, copy _12) -> [success: bb3, unwind continue];
+         _13 = const N;
+         _14 = Lt(copy _2, const N);
+         assert(move _14, "index out of bounds: the length is {} but the index is {}", const N, copy _2) -> [success: bb3, unwind continue];
      }
  
      bb3: {
-         _11 = copy _3[_12];
-         _10 = opaque::<T>(move _11) -> [return: bb4, unwind continue];
+         _11 = copy _1;
+         _10 = opaque::<T>(copy _1) -> [return: bb4, unwind continue];
      }
  
      bb4: {
          StorageDead(_11);
          StorageDead(_12);
          StorageDead(_10);
          _0 = const ();
          StorageDead(_3);
          return;
      }
  }
  
