[llvm] [AArch64] Only clear kill flags if necessary when merging str (PR #69680)
Matthias Braun via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 1 11:46:04 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))
+ MOP.setIsKill(false);
+ };
+ ClearKill(*It, RegOp0, TRI);
----------------
MatzeB wrote:
It's been a while since I worked on this, so I hope I am not missing anything. But intuitively you would only need to change the flags for operands that you move around the schedule (as in conceptually you are moving one store next to the other store before replacing it with the `strd`).
https://github.com/llvm/llvm-project/pull/69680
More information about the llvm-commits
mailing list