[llvm] [AArch64] Prevent the AArch64LoadStoreOptimizer from reordering CFI instructions (PR #101317)
Momchil Velikov via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 5 10:06:41 PDT 2024
================
@@ -2243,6 +2266,20 @@ MachineBasicBlock::iterator AArch64LoadStoreOpt::findMatchingUpdateInsnBackward(
if (!ModifiedRegUnits.available(BaseReg) ||
!UsedRegUnits.available(BaseReg))
return E;
+
+ // If we have a destination register (i.e. a load instruction) and a
+ // destination register is used or modified, then we can only merge forward,
+ // i.e. the combined instruction is put in the place of the memory
+ // instruction. Same applies if we see a memory access or side effects.
+ if (MI.mayLoadOrStore() || MI.hasUnmodeledSideEffects() ||
+ (DestReg[0] != AArch64::NoRegister &&
+ !(ModifiedRegUnits.available(DestReg[0]) &&
+ UsedRegUnits.available(DestReg[0]))) ||
+ (DestReg[1] != AArch64::NoRegister &&
+ !(ModifiedRegUnits.available(DestReg[1]) &&
+ UsedRegUnits.available(DestReg[1]))))
+ MergeEither = false;
+
----------------
momchil-velikov wrote:
Added tests, cover most of it.
https://github.com/llvm/llvm-project/pull/101317
More information about the llvm-commits
mailing list