Index: src/IceTargetLoweringMIPS32.h |
diff --git a/src/IceTargetLoweringMIPS32.h b/src/IceTargetLoweringMIPS32.h |
index 7e87f0435ad41c4d8498f117e02b210005419155..b4d188838cb8ac3aede14c3508386898cf2338e4 100644 |
--- a/src/IceTargetLoweringMIPS32.h |
+++ b/src/IceTargetLoweringMIPS32.h |
@@ -60,7 +60,8 @@ public: |
void translateOm1() override; |
void translateO2() override; |
bool doBranchOpt(Inst *Instr, const CfgNode *NextNode) override; |
- |
+ void setImplicitRet(Variable *Ret) { ImplicitRet = Ret; } |
+ Variable *getImplicitRet() const { return ImplicitRet; } |
SizeT getNumRegisters() const override { return RegMIPS32::Reg_NUM; } |
Variable *getPhysicalRegister(RegNumT RegNum, |
Type Ty = IceType_void) override; |
@@ -111,6 +112,10 @@ public: |
return Ty == IceType_i64; |
} |
+ bool shouldSplitToVariableVecOn32(Type Ty) const override { |
+ return isVectorType(Ty); |
+ } |
+ |
// TODO(ascull): what is the best size of MIPS? |
SizeT getMinJumpTableSize() const override { return 3; } |
void emitJumpTable(const Cfg *Func, |
@@ -609,9 +614,11 @@ public: |
void split64(Variable *Var); |
Operand *loOperand(Operand *Operand); |
Operand *hiOperand(Operand *Operand); |
+ Operand *getOperandAtIndex(Operand *Operand, Type BaseType, uint32_t Index); |
- void finishArgumentLowering(Variable *Arg, Variable *FramePtr, |
- size_t BasicFrameOffset, size_t *InArgsSizeBytes); |
+ void finishArgumentLowering(Variable *Arg, bool PartialOnStack, |
+ Variable *FramePtr, size_t BasicFrameOffset, |
+ size_t *InArgsSizeBytes); |
Operand *legalizeUndef(Operand *From, RegNumT RegNum = RegNumT()); |
@@ -630,6 +637,7 @@ public: |
/// appropriate register number. Note that, when Ty == IceType_i64, Reg will |
/// be an I64 register pair. |
bool argInReg(Type Ty, uint32_t ArgNo, RegNumT *Reg); |
+ void discardReg(RegNumT Reg) { GPRegsUsed |= RegisterAliases[Reg]; } |
private: |
// argInGPR is used to find if any GPR register is available for argument of |
@@ -743,6 +751,7 @@ protected: |
size_t FixedAllocaSizeBytes = 0; |
size_t FixedAllocaAlignBytes = 0; |
size_t PreservedRegsSizeBytes = 0; |
+ Variable *ImplicitRet; /// Implicit return |
Jim Stichnoth
2016/10/03 14:52:23
Variable *ImplicitRet = nullptr;
|
private: |
ENABLE_MAKE_UNIQUE; |