Index: src/IceTargetLoweringMIPS32.h |
diff --git a/src/IceTargetLoweringMIPS32.h b/src/IceTargetLoweringMIPS32.h |
index 3366dcea677cec844f82fdebbc75e05d8250ee9f..e45a07fc6ca0351a853c5189e740499f3a365a5d 100644 |
--- a/src/IceTargetLoweringMIPS32.h |
+++ b/src/IceTargetLoweringMIPS32.h |
@@ -447,6 +447,11 @@ public: |
static Type stackSlotType(); |
Variable *copyToReg(Operand *Src, RegNumT RegNum = RegNumT()); |
+ // Iterates over the CFG and determines the maximum outgoing stack arguments |
+ // bytes. This information is later used during addProlog() to pre-allocate |
+ // the outargs area |
+ void findMaxStackOutArgsSize(); |
+ |
void addProlog(CfgNode *Node) override; |
void addEpilog(CfgNode *Node) override; |
@@ -457,6 +462,9 @@ public: |
Operand *loOperand(Operand *Operand); |
Operand *hiOperand(Operand *Operand); |
+ void finishArgumentLowering(Variable *Arg, Variable *FramePtr, |
+ size_t BasicFrameOffset, size_t *InArgsSizeBytes); |
+ |
Operand *legalizeUndef(Operand *From, RegNumT RegNum = RegNumT()); |
protected: |
@@ -506,13 +514,18 @@ protected: |
bool UsesFramePointer = false; |
bool NeedsStackAlignment = false; |
+ bool MaybeLeafFunc = true; |
+ bool PrologEmitsFixedAllocas = false; |
+ uint32_t MaxOutArgsSizeBytes = 0; |
static SmallBitVector TypeToRegisterSet[RCMIPS32_NUM]; |
static SmallBitVector TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; |
static SmallBitVector RegisterAliases[RegMIPS32::Reg_NUM]; |
SmallBitVector RegsUsed; |
VarList PhysicalRegisters[IceType_NUM]; |
+ VarList PreservedGPRs; |
static constexpr uint32_t CHAR_BITS = 8; |
static constexpr uint32_t INT32_BITS = 32; |
+ size_t SpillAreaSizeBytes = 0; |
private: |
ENABLE_MAKE_UNIQUE; |