| OLD | NEW |
| 1 //===- subzero/src/IceTargetLoweringARM32.h - ARM32 lowering ----*- C++ -*-===// | 1 //===- subzero/src/IceTargetLoweringARM32.h - ARM32 lowering ----*- C++ -*-===// |
| 2 // | 2 // |
| 3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 /// | 9 /// |
| 10 /// \file | 10 /// \file |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 enum OperandLegalization { | 167 enum OperandLegalization { |
| 168 Legal_Reg = 1 << 0, /// physical register, not stack location | 168 Legal_Reg = 1 << 0, /// physical register, not stack location |
| 169 Legal_Flex = 1 << 1, /// A flexible operand2, which can hold rotated small | 169 Legal_Flex = 1 << 1, /// A flexible operand2, which can hold rotated small |
| 170 /// immediates, shifted registers, or modified fp imm. | 170 /// immediates, shifted registers, or modified fp imm. |
| 171 Legal_Mem = 1 << 2, /// includes [r0, r1 lsl #2] as well as [sp, #12] | 171 Legal_Mem = 1 << 2, /// includes [r0, r1 lsl #2] as well as [sp, #12] |
| 172 Legal_Rematerializable = 1 << 3, | 172 Legal_Rematerializable = 1 << 3, |
| 173 Legal_Default = ~Legal_Rematerializable, | 173 Legal_Default = ~Legal_Rematerializable, |
| 174 }; | 174 }; |
| 175 | 175 |
| 176 using LegalMask = uint32_t; | 176 using LegalMask = uint32_t; |
| 177 Operand *legalizeUndef(Operand *From, RegNumT RegNum = RegNumT::NoRegister); | 177 Operand *legalizeUndef(Operand *From, RegNumT RegNum = RegNumT()); |
| 178 Operand *legalize(Operand *From, LegalMask Allowed = Legal_Default, | 178 Operand *legalize(Operand *From, LegalMask Allowed = Legal_Default, |
| 179 RegNumT RegNum = RegNumT::NoRegister); | 179 RegNumT RegNum = RegNumT()); |
| 180 Variable *legalizeToReg(Operand *From, RegNumT RegNum = RegNumT::NoRegister); | 180 Variable *legalizeToReg(Operand *From, RegNumT RegNum = RegNumT()); |
| 181 | 181 |
| 182 OperandARM32ShAmtImm *shAmtImm(uint32_t ShAmtImm) const { | 182 OperandARM32ShAmtImm *shAmtImm(uint32_t ShAmtImm) const { |
| 183 assert(ShAmtImm < 32); | 183 assert(ShAmtImm < 32); |
| 184 return OperandARM32ShAmtImm::create( | 184 return OperandARM32ShAmtImm::create( |
| 185 Func, | 185 Func, |
| 186 llvm::cast<ConstantInteger32>(Ctx->getConstantInt32(ShAmtImm & 0x1F))); | 186 llvm::cast<ConstantInteger32>(Ctx->getConstantInt32(ShAmtImm & 0x1F))); |
| 187 } | 187 } |
| 188 | 188 |
| 189 GlobalContext *getCtx() const { return Ctx; } | 189 GlobalContext *getCtx() const { return Ctx; } |
| 190 | 190 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 uint32_t getCallStackArgumentsSizeBytes(const InstCall *Instr) override; | 263 uint32_t getCallStackArgumentsSizeBytes(const InstCall *Instr) override; |
| 264 void genTargetHelperCallFor(Inst *Instr) override; | 264 void genTargetHelperCallFor(Inst *Instr) override; |
| 265 void doAddressOptLoad() override; | 265 void doAddressOptLoad() override; |
| 266 void doAddressOptStore() override; | 266 void doAddressOptStore() override; |
| 267 void randomlyInsertNop(float Probability, | 267 void randomlyInsertNop(float Probability, |
| 268 RandomNumberGenerator &RNG) override; | 268 RandomNumberGenerator &RNG) override; |
| 269 | 269 |
| 270 OperandARM32Mem *formMemoryOperand(Operand *Ptr, Type Ty); | 270 OperandARM32Mem *formMemoryOperand(Operand *Ptr, Type Ty); |
| 271 | 271 |
| 272 Variable64On32 *makeI64RegPair(); | 272 Variable64On32 *makeI64RegPair(); |
| 273 Variable *makeReg(Type Ty, RegNumT RegNum = RegNumT::NoRegister); | 273 Variable *makeReg(Type Ty, RegNumT RegNum = RegNumT()); |
| 274 static Type stackSlotType(); | 274 static Type stackSlotType(); |
| 275 Variable *copyToReg(Operand *Src, RegNumT RegNum = RegNumT::NoRegister); | 275 Variable *copyToReg(Operand *Src, RegNumT RegNum = RegNumT()); |
| 276 void alignRegisterPow2(Variable *Reg, uint32_t Align, | 276 void alignRegisterPow2(Variable *Reg, uint32_t Align, |
| 277 RegNumT TmpRegNum = RegNumT::NoRegister); | 277 RegNumT TmpRegNum = RegNumT()); |
| 278 | 278 |
| 279 /// Returns a vector in a register with the given constant entries. | 279 /// Returns a vector in a register with the given constant entries. |
| 280 Variable *makeVectorOfZeros(Type Ty, RegNumT RegNum = RegNumT::NoRegister); | 280 Variable *makeVectorOfZeros(Type Ty, RegNumT RegNum = RegNumT()); |
| 281 | 281 |
| 282 void | 282 void |
| 283 makeRandomRegisterPermutation(llvm::SmallVectorImpl<RegNumT> &Permutation, | 283 makeRandomRegisterPermutation(llvm::SmallVectorImpl<RegNumT> &Permutation, |
| 284 const llvm::SmallBitVector &ExcludeRegisters, | 284 const llvm::SmallBitVector &ExcludeRegisters, |
| 285 uint64_t Salt) const override; | 285 uint64_t Salt) const override; |
| 286 | 286 |
| 287 // If a divide-by-zero check is needed, inserts a: test; branch .LSKIP; trap; | 287 // If a divide-by-zero check is needed, inserts a: test; branch .LSKIP; trap; |
| 288 // .LSKIP: <continuation>. If no check is needed nothing is inserted. | 288 // .LSKIP: <continuation>. If no check is needed nothing is inserted. |
| 289 void div0Check(Type Ty, Operand *SrcLo, Operand *SrcHi); | 289 void div0Check(Type Ty, Operand *SrcLo, Operand *SrcHi); |
| 290 using ExtInstr = void (TargetARM32::*)(Variable *, Variable *, | 290 using ExtInstr = void (TargetARM32::*)(Variable *, Variable *, |
| (...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1285 private: | 1285 private: |
| 1286 ~TargetHeaderARM32() = default; | 1286 ~TargetHeaderARM32() = default; |
| 1287 | 1287 |
| 1288 TargetARM32Features CPUFeatures; | 1288 TargetARM32Features CPUFeatures; |
| 1289 }; | 1289 }; |
| 1290 | 1290 |
| 1291 } // end of namespace ARM32 | 1291 } // end of namespace ARM32 |
| 1292 } // end of namespace Ice | 1292 } // end of namespace Ice |
| 1293 | 1293 |
| 1294 #endif // SUBZERO_SRC_ICETARGETLOWERINGARM32_H | 1294 #endif // SUBZERO_SRC_ICETARGETLOWERINGARM32_H |
| OLD | NEW |