[llvm] 39b8af4 - Revert "[SystemZ][z/OS] Save (and restore) R3 to avoid clobbering parameter when call stack frame extension is invoked"

Neumann Hon via llvm-commits llvm-commits at lists.llvm.org
Thu May 11 19:32:34 PDT 2023


Author: Neumann Hon
Date: 2023-05-11T22:32:16-04:00
New Revision: 39b8af47fc95fd99a9b1870b9fb31b22521071ff

URL: https://github.com/llvm/llvm-project/commit/39b8af47fc95fd99a9b1870b9fb31b22521071ff
DIFF: https://github.com/llvm/llvm-project/commit/39b8af47fc95fd99a9b1870b9fb31b22521071ff.diff

LOG: Revert "[SystemZ][z/OS] Save (and restore) R3 to avoid clobbering parameter when call stack frame extension is invoked"

This reverts commit 1aec3d15aaa25c39fae026688708d7353d488974.

Added: 
    

Modified: 
    llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp
    llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp b/llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp
index ba6458fa88228..d7a2a51d4652f 100644
--- a/llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp
@@ -1315,10 +1315,6 @@ void SystemZXPLINKFrameLowering::inlineStackProbe(
   if (StackAllocMI == nullptr)
     return;
 
-  bool NeedSaveSP = hasFP(MF);
-  bool NeedSaveArg = PrologMBB.isLiveIn(SystemZ::R3D);
-  const int64_t SaveSlotR3 = 2192;
-
   MachineBasicBlock &MBB = PrologMBB;
   const DebugLoc DL = StackAllocMI->getDebugLoc();
 
@@ -1338,25 +1334,7 @@ void SystemZXPLINKFrameLowering::inlineStackProbe(
   // BASR r3,r3
   BuildMI(StackExtMBB, DL, ZII->get(SystemZ::CallBASR_STACKEXT))
       .addReg(SystemZ::R3D);
-  if (NeedSaveArg) {
-    if (!NeedSaveSP) {
-      // LGR r0,r3
-      BuildMI(MBB, StackAllocMI, DL, ZII->get(SystemZ::LGR))
-          .addReg(SystemZ::R0D, RegState::Define)
-          .addReg(SystemZ::R3D);
-    } else {
-      // In this case, the incoming value of r4 is saved in r0 so the
-      // latter register is unavailable. Store r3 in its corresponding
-      // slot in the parameter list instead. Do this at the start of
-      // the prolog before r4 is manipulated by anything else.
-      // STG r3, 2192(r4)
-      BuildMI(MBB, MBB.begin(), DL, ZII->get(SystemZ::STG))
-          .addReg(SystemZ::R3D)
-          .addReg(SystemZ::R4D)
-          .addImm(SaveSlotR3)
-          .addReg(0);
-    }
-  }
+
   // LLGT r3,1208
   BuildMI(MBB, StackAllocMI, DL, ZII->get(SystemZ::LLGT), SystemZ::R3D)
       .addReg(0)
@@ -1377,28 +1355,6 @@ void SystemZXPLINKFrameLowering::inlineStackProbe(
   NextMBB = SystemZ::splitBlockBefore(StackAllocMI, &MBB);
   MBB.addSuccessor(NextMBB);
   MBB.addSuccessor(StackExtMBB);
-  if (NeedSaveArg) {
-    if (!NeedSaveSP) {
-      // LGR r3, r0
-      BuildMI(*NextMBB, StackAllocMI, DL, ZII->get(SystemZ::LGR))
-          .addReg(SystemZ::R3D, RegState::Define)
-          .addReg(SystemZ::R0D, RegState::Kill);
-    } else {
-      // In this case, the incoming value of r4 is saved in r0 so the
-      // latter register is unavailable. We stored r3 in its corresponding
-      // slot in the parameter list instead and we now restore it from there.
-      // LGR r3, r0
-      BuildMI(*NextMBB, StackAllocMI, DL, ZII->get(SystemZ::LGR))
-          .addReg(SystemZ::R3D)
-          .addReg(SystemZ::R0D);
-      // LG r3, 2192(r3)
-      BuildMI(*NextMBB, StackAllocMI, DL, ZII->get(SystemZ::LG))
-          .addReg(SystemZ::R3D, RegState::Define)
-          .addReg(SystemZ::R3D)
-          .addImm(SaveSlotR3)
-          .addReg(0);
-    }
-  }
 
   // Add jump back from stack extension BB.
   BuildMI(StackExtMBB, DL, ZII->get(SystemZ::J)).addMBB(NextMBB);

diff  --git a/llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll b/llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
index 13224c01ca9a1..f074a26481099 100644
--- a/llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
+++ b/llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
@@ -319,57 +319,12 @@ define i64 @func5(i64 %n) {
 ; CHECK64: lg  3, 72(3)
 ; CHECK64: basr  3, 3
 ; CHECK64: stmg  6, 7, 2064(4)
-define void @large_stack0() {
+define void @large_stack() {
   %arr = alloca [131072 x i64], align 8
   call i64 (ptr) @fun1(ptr %arr)
   ret void
 }
 
-; CHECK-LABEL: large_stack1
-; CHECK64: agfi  4, -1048768
-; CHECK64: lgr 0, 3
-; CHECK64: llgt  3, 1208
-; CHECK64: cg  4, 64(3)
-; CHECK64: jhe @BB7_2
-; CHECK64: %bb.1:
-; CHECK64: lg  3, 72(3)
-; CHECK64: basr  3, 3
-; CHECK64: bcr 0, 7
-; CHECK64: @BB7_2:
-; CHECK64: stmg  6, 7, 2064(4)
-; CHECK64: lgr 3, 0
-define void @large_stack1(i64 %n1, i64 %n2, i64 %n3) {
-  %arr = alloca [131072 x i64], align 8
-  call i64 (ptr, i64, i64, i64) @fun3(ptr %arr,
-            i64 %n1, i64 %n2, i64 %n3)
-  ret void
-}
-
-
-; CHECK-LABEL: large_stack2
-; CHECK64: lgr 0, 4
-; CHECK64: stg 3, 2192(4)
-; CHECK64: agfi  4, -1048768
-; CHECK64: llgt  3, 1208
-; CHECK64: cg  4, 64(3)
-; CHECK64: jhe @BB8_2
-; CHECK64: %bb.1:
-; CHECK64: lg  3, 72(3)
-; CHECK64: basr  3, 3
-; CHECK64: bcr 0, 7
-; CHECK64: @BB8_2:
-; CHECK64: lgr 3, 0
-; CHECK64: lg  3, 2192(3)
-; CHECK64: stmg  4, 11, 2048(4)
-; CHECK64: lgr 8, 4
-define void @large_stack2(i64 %n1, i64 %n2, i64 %n3) {
-  %arr0 = alloca [131072 x i64], align 8
-  %arr1 = alloca i64, i64 %n1, align 8
-  call i64 (ptr, ptr, i64, i64, i64) @fun4(ptr %arr0,
-            ptr %arr1, i64 %n1, i64 %n2, i64 %n3)
-  ret void
-}
-
 ; CHECK-LABEL: leaf_func
 ; CHECK-NOT: aghi  4,
 ; CHECK-NOT: stmg
@@ -388,5 +343,3 @@ define i64 @leaf_func0(i64 %a, i64 %b, i64 %c) {
 declare i64 @fun(i64 %arg0)
 declare i64 @fun1(ptr %ptr)
 declare i64 @fun2(i64 %n, ptr %arr0, ptr %arr1)
-declare i64 @fun3(ptr %ptr, i64 %n1, i64 %n2, i64 %n3)
-declare i64 @fun4(ptr %ptr0, ptr %ptr1, i64 %n1, i64 %n2, i64 %n3)


        


More information about the llvm-commits mailing list