[llvm] [AArch64] Only clear kill flags if necessary when merging str (PR #69680)

Zhaoxuan Jiang via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 24 01:36:58 PDT 2023


================
@@ -997,8 +997,17 @@ AArch64LoadStoreOpt::mergePairedInsns(MachineBasicBlock::iterator I,
       //   STRWui %w0, ...
       //   USE %w1
       //   STRWui kill %w1  ; need to clear kill flag when moving STRWui upwards
-      RegOp0.setIsKill(false);
-      RegOp1.setIsKill(false);
+      for (auto It = std::next(I);
+           It != Paired && (RegOp0.isKill() || RegOp1.isKill()); ++It) {
+        auto ClearKill = [](MachineInstr &MI, MachineOperand &MOP,
+                            const TargetRegisterInfo *TRI) {
+          Register Reg = MOP.getReg();
+          if (MI.readsRegister(Reg, TRI) || MI.modifiesRegister(Reg, TRI))
----------------
nocchijiang wrote:

Good point. I pushed a new commit to remove the `modifiesRegister` check.

https://github.com/llvm/llvm-project/pull/69680


More information about the llvm-commits mailing list