diff options
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp | 8 | 
1 files changed, 7 insertions, 1 deletions
| diff --git a/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp b/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp index c45c0b4c8ed..005f2d51e40 100644 --- a/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp +++ b/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp @@ -808,7 +808,13 @@ AArch64LoadStoreOpt::promoteLoadFromStore(MachineBasicBlock::iterator LoadI,      // Remove the load, if the destination register of the loads is the same      // register for stored value.      if (StRt == LdRt && LoadSize == 8) { -      StoreI->clearRegisterKills(StRt, TRI); +      for (MachineInstr &MI : make_range(StoreI->getIterator(), +                                         LoadI->getIterator())) { +        if (MI.killsRegister(StRt, TRI)) { +          MI.clearRegisterKills(StRt, TRI); +          break; +        } +      }        DEBUG(dbgs() << "Remove load instruction:\n    ");        DEBUG(LoadI->print(dbgs()));        DEBUG(dbgs() << "\n"); | 

