OLD | NEW |
1 //===- subzero/src/IceTargetLoweringX8632.h - x86-32 lowering ---*- C++ -*-===// | 1 //===- subzero/src/IceTargetLoweringX8632.h - x86-32 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 // This file declares the TargetLoweringX8632 class, which | 10 // This file declares the TargetLoweringX8632 class, which |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 void expandAtomicRMWAsCmpxchg(LowerBinOp op_lo, LowerBinOp op_hi, | 121 void expandAtomicRMWAsCmpxchg(LowerBinOp op_lo, LowerBinOp op_hi, |
122 Variable *Dest, Operand *Ptr, Operand *Val); | 122 Variable *Dest, Operand *Ptr, Operand *Val); |
123 | 123 |
124 void eliminateNextVectorSextInstruction(Variable *SignExtendedResult); | 124 void eliminateNextVectorSextInstruction(Variable *SignExtendedResult); |
125 | 125 |
126 void scalarizeArithmetic(InstArithmetic::OpKind K, Variable *Dest, | 126 void scalarizeArithmetic(InstArithmetic::OpKind K, Variable *Dest, |
127 Operand *Src0, Operand *Src1); | 127 Operand *Src0, Operand *Src1); |
128 | 128 |
129 void sortByAlignment(VarList &Dest, const VarList &Source) const; | 129 void sortByAlignment(VarList &Dest, const VarList &Source) const; |
130 | 130 |
| 131 Variable *randomizeImmediate(Constant *Immediate); |
| 132 |
131 // Operand legalization helpers. To deal with address mode | 133 // Operand legalization helpers. To deal with address mode |
132 // constraints, the helpers will create a new Operand and emit | 134 // constraints, the helpers will create a new Operand and emit |
133 // instructions that guarantee that the Operand kind is one of those | 135 // instructions that guarantee that the Operand kind is one of those |
134 // indicated by the LegalMask (a bitmask of allowed kinds). If the | 136 // indicated by the LegalMask (a bitmask of allowed kinds). If the |
135 // input Operand is known to already meet the constraints, it may be | 137 // input Operand is known to already meet the constraints, it may be |
136 // simply returned as the result, without creating any new | 138 // simply returned as the result, without creating any new |
137 // instructions or operands. | 139 // instructions or operands. |
138 enum OperandLegalization { | 140 enum OperandLegalization { |
139 Legal_None = 0, | 141 Legal_None = 0, |
140 Legal_Reg = 1 << 0, // physical register, not stack location | 142 Legal_Reg = 1 << 0, // physical register, not stack location |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 bool IsEbpBasedFrame; | 466 bool IsEbpBasedFrame; |
465 bool NeedsStackAlignment; | 467 bool NeedsStackAlignment; |
466 size_t FrameSizeLocals; | 468 size_t FrameSizeLocals; |
467 size_t SpillAreaSizeBytes; | 469 size_t SpillAreaSizeBytes; |
468 llvm::SmallBitVector TypeToRegisterSet[IceType_NUM]; | 470 llvm::SmallBitVector TypeToRegisterSet[IceType_NUM]; |
469 llvm::SmallBitVector ScratchRegs; | 471 llvm::SmallBitVector ScratchRegs; |
470 llvm::SmallBitVector RegsUsed; | 472 llvm::SmallBitVector RegsUsed; |
471 SizeT NextLabelNumber; | 473 SizeT NextLabelNumber; |
472 bool ComputedLiveRanges; | 474 bool ComputedLiveRanges; |
473 VarList PhysicalRegisters; | 475 VarList PhysicalRegisters; |
| 476 bool ConstantBlindingCookieInitialized; |
| 477 uint32_t ConstantBlindingCookie; |
474 static IceString RegNames[]; | 478 static IceString RegNames[]; |
475 | 479 |
476 private: | 480 private: |
477 TargetX8632(const TargetX8632 &) LLVM_DELETED_FUNCTION; | 481 TargetX8632(const TargetX8632 &) LLVM_DELETED_FUNCTION; |
478 TargetX8632 &operator=(const TargetX8632 &) LLVM_DELETED_FUNCTION; | 482 TargetX8632 &operator=(const TargetX8632 &) LLVM_DELETED_FUNCTION; |
479 virtual ~TargetX8632() {} | 483 virtual ~TargetX8632() {} |
480 template <typename T> void emitConstantPool() const; | 484 template <typename T> void emitConstantPool() const; |
| 485 void emitPooledImmediates() const; |
481 }; | 486 }; |
482 | 487 |
483 class TargetGlobalInitX8632 : public TargetGlobalInitLowering { | 488 class TargetGlobalInitX8632 : public TargetGlobalInitLowering { |
484 public: | 489 public: |
485 static TargetGlobalInitLowering *create(GlobalContext *Ctx) { | 490 static TargetGlobalInitLowering *create(GlobalContext *Ctx) { |
486 return new TargetGlobalInitX8632(Ctx); | 491 return new TargetGlobalInitX8632(Ctx); |
487 } | 492 } |
488 virtual void lower(const IceString &Name, SizeT Align, bool IsInternal, | 493 virtual void lower(const IceString &Name, SizeT Align, bool IsInternal, |
489 bool IsConst, bool IsZeroInitializer, SizeT Size, | 494 bool IsConst, bool IsZeroInitializer, SizeT Size, |
490 const char *Data, bool DisableTranslation); | 495 const char *Data, bool DisableTranslation); |
491 | 496 |
492 protected: | 497 protected: |
493 TargetGlobalInitX8632(GlobalContext *Ctx); | 498 TargetGlobalInitX8632(GlobalContext *Ctx); |
494 | 499 |
495 private: | 500 private: |
496 TargetGlobalInitX8632(const TargetGlobalInitX8632 &) LLVM_DELETED_FUNCTION; | 501 TargetGlobalInitX8632(const TargetGlobalInitX8632 &) LLVM_DELETED_FUNCTION; |
497 TargetGlobalInitX8632 & | 502 TargetGlobalInitX8632 & |
498 operator=(const TargetGlobalInitX8632 &) LLVM_DELETED_FUNCTION; | 503 operator=(const TargetGlobalInitX8632 &) LLVM_DELETED_FUNCTION; |
499 virtual ~TargetGlobalInitX8632() {} | 504 virtual ~TargetGlobalInitX8632() {} |
500 }; | 505 }; |
501 | 506 |
502 template <> void ConstantInteger::emit(GlobalContext *Ctx) const; | 507 template <> void ConstantInteger::emit(GlobalContext *Ctx) const; |
503 template <> void ConstantFloat::emit(GlobalContext *Ctx) const; | 508 template <> void ConstantFloat::emit(GlobalContext *Ctx) const; |
504 template <> void ConstantDouble::emit(GlobalContext *Ctx) const; | 509 template <> void ConstantDouble::emit(GlobalContext *Ctx) const; |
505 | 510 |
506 } // end of namespace Ice | 511 } // end of namespace Ice |
507 | 512 |
508 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632_H | 513 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632_H |
OLD | NEW |