[PATCH] D152920: [SystemZ][z/OS] Correct value of length/4 of params field in PPA1.
Neumann Hon via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 14 08:13:02 PDT 2023
Everybody0523 updated this revision to Diff 531343.
Everybody0523 added a comment.
Run clang format
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D152920/new/
https://reviews.llvm.org/D152920
Files:
llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
Index: llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
===================================================================
--- llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
+++ llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
@@ -14,6 +14,9 @@
; CHECK64: lg 7, 2072(4)
; CHECK64: aghi 4, 192
; CHECK64: b 2(7)
+
+; CHECK64: @@PPA1_func0_0:
+; CHECK64: .short 0 * Length/4 of Parms
define void @func0() {
call i64 (i64) @fun(i64 10)
ret void
@@ -27,6 +30,9 @@
; CHECK64: lmg 7, 15, 2072(4)
; CHECK64: aghi 4, 160
; CHECK64: b 2(7)
+
+; CHECK64: @@PPA1_func1_0:
+; CHECK64: .short 2 * Length/4 of Parms
define void @func1(ptr %ptr) {
%l01 = load volatile i64, ptr %ptr
%l02 = load volatile i64, ptr %ptr
@@ -338,6 +344,9 @@
; CHECK64: @BB7_2:
; CHECK64: stmg 6, 7, 2064(4)
; CHECK64: lgr 3, 0
+
+; CHECK64: @@PPA1_large_stack1_0:
+; CHECK64: .short 6 * Length/4 of Parms
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,
Index: llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
===================================================================
--- llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
+++ llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
@@ -27,6 +27,9 @@
class SystemZMachineFunctionInfo : public MachineFunctionInfo {
virtual void anchor();
+ /// Size of expected parameter area for current function. (Fixed args only).
+ unsigned SizeOfFnParams;
+
SystemZ::GPRRegs SpillGPRRegs;
SystemZ::GPRRegs RestoreGPRRegs;
Register VarArgsFirstGPR;
@@ -38,14 +41,20 @@
public:
SystemZMachineFunctionInfo(const Function &F, const TargetSubtargetInfo *STI)
- : VarArgsFirstGPR(0), VarArgsFirstFPR(0), VarArgsFrameIndex(0),
- RegSaveFrameIndex(0), FramePointerSaveIndex(0), NumLocalDynamics(0) {}
+ : SizeOfFnParams(0), VarArgsFirstGPR(0), VarArgsFirstFPR(0),
+ VarArgsFrameIndex(0), RegSaveFrameIndex(0), FramePointerSaveIndex(0),
+ NumLocalDynamics(0) {}
MachineFunctionInfo *
clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF,
const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB)
const override;
+ // z/OS: Get and set the size of the expected parameter area for the
+ // current function. (ie. Size of param area in caller).
+ unsigned getSizeOfFnParams() const { return SizeOfFnParams; }
+ void setSizeOfFnParams(unsigned Size) { SizeOfFnParams = Size; }
+
// Get and set the first and last call-saved GPR that should be saved by
// this function and the SP offset for the STMG. These are 0 if no GPRs
// need to be saved or restored.
Index: llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
===================================================================
--- llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+++ llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
@@ -1505,6 +1505,7 @@
SmallVector<CCValAssign, 16> ArgLocs;
SystemZCCState CCInfo(CallConv, IsVarArg, MF, ArgLocs, *DAG.getContext());
CCInfo.AnalyzeFormalArguments(Ins, CC_SystemZ);
+ FuncInfo->setSizeOfFnParams(CCInfo.getStackSize());
unsigned NumFixedGPRs = 0;
unsigned NumFixedFPRs = 0;
Index: llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
===================================================================
--- llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
+++ llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
@@ -1058,7 +1058,7 @@
OutStreamer->AddComment("Length/4 of Parms");
OutStreamer->emitInt16(
- static_cast<uint16_t>(MFFrame.getMaxCallFrameSize() / 4)); // Parms/4.
+ static_cast<uint16_t>(ZFI->getSizeOfFnParams() / 4)); // Parms/4.
OutStreamer->AddComment("Length of Code");
OutStreamer->emitAbsoluteSymbolDiff(FnEndSym, CurrentFnEPMarkerSym, 4);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D152920.531343.patch
Type: text/x-patch
Size: 3834 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230614/bff69d18/attachment.bin>
More information about the llvm-commits
mailing list