Index: src/IceTargetLoweringMIPS32.h |
diff --git a/src/IceTargetLoweringMIPS32.h b/src/IceTargetLoweringMIPS32.h |
index 842f266e2be730aced312e48437e56d3910393bb..664f6b126096dbe7500873a0149e24018d086c7e 100644 |
--- a/src/IceTargetLoweringMIPS32.h |
+++ b/src/IceTargetLoweringMIPS32.h |
@@ -103,7 +103,9 @@ public: |
PrologEmitsFixedAllocas = true; |
} |
int32_t getFrameFixedAllocaOffset() const override { |
- return FixedAllocaSizeBytes - (SpillAreaSizeBytes - MaxOutArgsSizeBytes); |
+ int32_t FixedAllocaOffset = |
+ Utils::applyAlignment(CurrentAllocaOffset, FixedAllocaAlignBytes); |
+ return FixedAllocaOffset - MaxOutArgsSizeBytes; |
} |
uint32_t maxOutArgsSizeBytes() const override { return MaxOutArgsSizeBytes; } |
@@ -700,10 +702,7 @@ protected: |
void lowerSwitch(const InstSwitch *Instr) override; |
void lowerUnreachable(const InstUnreachable *Instr) override; |
void prelowerPhis() override; |
- uint32_t getCallStackArgumentsSizeBytes(const InstCall *Instr) override { |
- (void)Instr; |
- return 0; |
- } |
+ uint32_t getCallStackArgumentsSizeBytes(const InstCall *Instr) override; |
void genTargetHelperCallFor(Inst *Instr) override; |
void doAddressOptLoad() override; |
void doAddressOptStore() override; |
@@ -749,6 +748,7 @@ protected: |
bool VariableAllocaUsed = false; |
uint32_t MaxOutArgsSizeBytes = 0; |
uint32_t TotalStackSizeBytes = 0; |
+ uint32_t CurrentAllocaOffset = 0; |
static SmallBitVector TypeToRegisterSet[RCMIPS32_NUM]; |
static SmallBitVector TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; |
static SmallBitVector RegisterAliases[RegMIPS32::Reg_NUM]; |