diff --git a/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp b/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp index 782d62a7e5e13..e69fa32967a79 100644 --- a/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp +++ b/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp @@ -1193,7 +1193,8 @@ AArch64LoadStoreOpt::mergePairedInsns(MachineBasicBlock::iterator I, // USE kill %w1 ; need to clear kill flag when moving STRWui downwards // STRW %w0 Register Reg = getLdStRegOp(*I).getReg(); - for (MachineInstr &MI : make_range(std::next(I), Paired)) + for (MachineInstr &MI : + make_range(std::next(I->getIterator()), Paired->getIterator())) MI.clearRegisterKills(Reg, TRI); } } diff --git a/llvm/test/CodeGen/AArch64/sve-vls-ldst-opt.mir b/llvm/test/CodeGen/AArch64/sve-vls-ldst-opt.mir index 49453bc178914..a3e6cc10c1d0b 100644 --- a/llvm/test/CodeGen/AArch64/sve-vls-ldst-opt.mir +++ b/llvm/test/CodeGen/AArch64/sve-vls-ldst-opt.mir @@ -72,3 +72,21 @@ body: | # CHECK: STURQi killed renamable $q1, renamable $x1, 16 :: (store (s128)) # CHECK: STURQi killed renamable $q2, renamable $x1, 48 :: (store (s128)) # CHECK: STR_ZXI killed renamable $z3, renamable $x1, 4 :: (store ()) +--- +name: clear-kill-in-bundle-forward +tracksRegLiveness: true +body: | + bb.0: + liveins: $x0, $z0 + STR_ZXI $z0, $x0, 0 :: (store ()) + BUNDLE implicit-def $z1, implicit killed $z0 { + $z1 = ADD_ZZZ_D killed $z0, $z0 + } + STR_ZXI renamable $z1, $x0, 1 :: (store ()) + RET_ReallyLR +... +# CHECK-LABEL: name: clear-kill-in-bundle-forward +# CHECK: BUNDLE implicit-def $z1, implicit $z0 { +# CHECK: $z1 = ADD_ZZZ_D $z0, $z0 +# CHECK: } +# CHECK: STPQi $q0, $q1, $x0, 0 :: (store ())