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 |