| Index: src/IceTargetLoweringMIPS32.h
|
| diff --git a/src/IceTargetLoweringMIPS32.h b/src/IceTargetLoweringMIPS32.h
|
| index 9570385c44873a7ea0c893fac1c0cdeee43efa1a..5d49b0140741d9d9fac1f1d5d64f9a49f60c0e43 100644
|
| --- a/src/IceTargetLoweringMIPS32.h
|
| +++ b/src/IceTargetLoweringMIPS32.h
|
| @@ -461,6 +461,8 @@ public:
|
| // the outargs area
|
| void findMaxStackOutArgsSize();
|
|
|
| + void postLowerLegalization();
|
| +
|
| void addProlog(CfgNode *Node) override;
|
| void addEpilog(CfgNode *Node) override;
|
|
|
| @@ -559,6 +561,32 @@ protected:
|
|
|
| OperandMIPS32Mem *formMemoryOperand(Operand *Ptr, Type Ty);
|
|
|
| + class PostLoweringLegalizer {
|
| + PostLoweringLegalizer() = delete;
|
| + PostLoweringLegalizer(const PostLoweringLegalizer &) = delete;
|
| + PostLoweringLegalizer &operator=(const PostLoweringLegalizer &) = delete;
|
| +
|
| + public:
|
| + explicit PostLoweringLegalizer(TargetMIPS32 *Target)
|
| + : Target(Target), StackOrFrameReg(Target->getPhysicalRegister(
|
| + Target->getFrameOrStackReg())) {}
|
| +
|
| + /// Legalizes Mov if its Source (or Destination) is a spilled Variable, or
|
| + /// if its Source is a Rematerializable variable (this form is used in lieu
|
| + /// of lea, which is not available in MIPS.)
|
| + ///
|
| + /// Moves to memory become store instructions, and moves from memory, loads.
|
| + void legalizeMov(InstMIPS32Mov *Mov);
|
| +
|
| + private:
|
| + /// Creates a new Base register centered around [Base, +/- Offset].
|
| + Variable *newBaseRegister(Variable *Base, int32_t Offset,
|
| + RegNumT ScratchRegNum);
|
| +
|
| + TargetMIPS32 *const Target;
|
| + Variable *const StackOrFrameReg;
|
| + };
|
| +
|
| bool UsesFramePointer = false;
|
| bool NeedsStackAlignment = false;
|
| bool MaybeLeafFunc = true;
|
|
|