[llvm] [AArch64] Restore Z-registers before P-registers (PR #79623)

Scott Todd via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 20 08:48:53 PST 2024


================
@@ -3201,11 +3196,19 @@ bool AArch64FrameLowering::restoreCalleeSavedRegisters(
     return true;
   }
 
+  // For performance reasons restore SVE register in increasing order
+  auto IsPPR = [](const RegPairInfo &c) { return c.Type == RegPairInfo::PPR; };
+  auto PPRBegin = std::find_if(RegPairs.begin(), RegPairs.end(), IsPPR);
+  auto PPREnd = std::find_if(RegPairs.rbegin(), RegPairs.rend(), IsPPR);
+  std::reverse(PPRBegin, PPREnd.base());
----------------
ScottTodd wrote:

I'm seeing a crash here in a downstream project, running on Windows compiled via MSVC.

![image](https://github.com/llvm/llvm-project/assets/4010439/546302d8-a83d-4436-ad47-b9f34535408c)

attached `.bc` and `.ll` output from `llvm-dis [file.bc]`: [79623_repro_files.zip](https://github.com/llvm/llvm-project/files/14348674/79623_repro_files.zip)

If I revert https://github.com/llvm/llvm-project/commit/3f0404aae7ed2f7138526e1bcd100a60dfe08227, the crash goes away.

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


More information about the llvm-commits mailing list