[llvm] [PowerPC] Spill non-volatile registers required for traceback table (PR #71115)

Amy Kwan via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 25 11:40:14 PST 2024


================
@@ -2733,6 +2735,65 @@ bool PPCFrameLowering::enableShrinkWrapping(const MachineFunction &MF) const {
   return !MF.getSubtarget<PPCSubtarget>().is32BitELFABI();
 }
 
+void PPCFrameLowering::updateCalleeSaves(const MachineFunction &MF,
+                                         BitVector &SavedRegs) const {
+  // The AIX ABI uses traceback tables for EH which require that if callee-saved
+  // register N is used, all registers N-31 must be saved/restored.
+  // NOTE: The check for AIX is not actually what is relevant. Traceback tables
+  // on Linux have the same requirements. It is just that AIX is the only ABI
+  // for which we actually use traceback tables. If another ABI needs to be
+  // supported that also uses them, we can add a check such as
+  // Subtarget.usesTraceBackTables().
+  assert(Subtarget.isAIXABI() && "function only called for AIX");
+
+  // If there are no callee saves then there is nothing to do.
+  if (SavedRegs.none())
+    return;
+
+  const TargetRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
----------------
amy-kwan wrote:

It seems we only need `RegInfo` for the line below, so I think we can just inline this call.

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


More information about the llvm-commits mailing list