| 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;
 | 
| 
 |