| OLD | NEW |
| 1 //===- subzero/src/IceTargetLoweringX86Base.h - x86 lowering ----*- C++ -*-===// | 1 //===- subzero/src/IceTargetLoweringX86Base.h - x86 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 using SegmentRegisters = typename Traits::X86OperandMem::SegmentRegisters; | 72 using SegmentRegisters = typename Traits::X86OperandMem::SegmentRegisters; |
| 73 using SpillVariable = typename Traits::SpillVariable; | 73 using SpillVariable = typename Traits::SpillVariable; |
| 74 | 74 |
| 75 using InstX86Br = typename Traits::Insts::Br; | 75 using InstX86Br = typename Traits::Insts::Br; |
| 76 using InstX86FakeRMW = typename Traits::Insts::FakeRMW; | 76 using InstX86FakeRMW = typename Traits::Insts::FakeRMW; |
| 77 using InstX86Label = typename Traits::Insts::Label; | 77 using InstX86Label = typename Traits::Insts::Label; |
| 78 | 78 |
| 79 ~TargetX86Base() override = default; | 79 ~TargetX86Base() override = default; |
| 80 | 80 |
| 81 static void staticInit(GlobalContext *Ctx); | 81 static void staticInit(GlobalContext *Ctx); |
| 82 static bool shouldBePooled(const Constant *C); |
| 82 | 83 |
| 83 static FixupKind getPcRelFixup() { return PcRelFixup; } | 84 static FixupKind getPcRelFixup() { return PcRelFixup; } |
| 84 static FixupKind getAbsFixup() { return AbsFixup; } | 85 static FixupKind getAbsFixup() { return AbsFixup; } |
| 85 | 86 |
| 86 bool needSandboxing() const { return NeedSandboxing; } | 87 bool needSandboxing() const { return NeedSandboxing; } |
| 87 | 88 |
| 88 void translateOm1() override; | 89 void translateOm1() override; |
| 89 void translateO2() override; | 90 void translateO2() override; |
| 90 void doLoadOpt(); | 91 void doLoadOpt(); |
| 91 bool doBranchOpt(Inst *I, const CfgNode *NextNode) override; | 92 bool doBranchOpt(Inst *I, const CfgNode *NextNode) override; |
| 92 | 93 |
| 93 SizeT getNumRegisters() const override { | 94 SizeT getNumRegisters() const override { |
| 94 return Traits::RegisterSet::Reg_NUM; | 95 return Traits::RegisterSet::Reg_NUM; |
| 95 } | 96 } |
| 96 Variable *getPhysicalRegister(RegNumT RegNum, | 97 Variable *getPhysicalRegister(RegNumT RegNum, |
| 97 Type Ty = IceType_void) override; | 98 Type Ty = IceType_void) override; |
| 98 IceString getRegName(RegNumT RegNum, Type Ty) const override; | 99 const char *getRegName(RegNumT RegNum, Type Ty) const override; |
| 99 static IceString getRegClassName(RegClass C) { | 100 static const char *getRegClassName(RegClass C) { |
| 100 auto ClassNum = static_cast<RegClassX86>(C); | 101 auto ClassNum = static_cast<RegClassX86>(C); |
| 101 assert(ClassNum < RCX86_NUM); | 102 assert(ClassNum < RCX86_NUM); |
| 102 switch (ClassNum) { | 103 switch (ClassNum) { |
| 103 default: | 104 default: |
| 104 assert(C < RC_Target); | 105 assert(C < RC_Target); |
| 105 return regClassString(C); | 106 return regClassString(C); |
| 106 case RCX86_Is64To8: | 107 case RCX86_Is64To8: |
| 107 return "i64to8"; // 64-bit GPR truncable to i8 | 108 return "i64to8"; // 64-bit GPR truncable to i8 |
| 108 case RCX86_Is32To8: | 109 case RCX86_Is32To8: |
| 109 return "i32to8"; // 32-bit GPR truncable to i8 | 110 return "i32to8"; // 32-bit GPR truncable to i8 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 virtual void updateMaxOutArgsSizeBytes(uint32_t Size) { | 168 virtual void updateMaxOutArgsSizeBytes(uint32_t Size) { |
| 168 MaxOutArgsSizeBytes = std::max(MaxOutArgsSizeBytes, Size); | 169 MaxOutArgsSizeBytes = std::max(MaxOutArgsSizeBytes, Size); |
| 169 } | 170 } |
| 170 | 171 |
| 171 bool shouldSplitToVariable64On32(Type Ty) const override { | 172 bool shouldSplitToVariable64On32(Type Ty) const override { |
| 172 return Traits::Is64Bit ? false : Ty == IceType_i64; | 173 return Traits::Is64Bit ? false : Ty == IceType_i64; |
| 173 } | 174 } |
| 174 | 175 |
| 175 ConstantRelocatable *createGetIPForRegister(const Variable *Dest) { | 176 ConstantRelocatable *createGetIPForRegister(const Variable *Dest) { |
| 176 assert(Dest->hasReg()); | 177 assert(Dest->hasReg()); |
| 177 const IceString RegName = Traits::getRegName(Dest->getRegNum()); | 178 const std::string RegName = Traits::getRegName(Dest->getRegNum()); |
| 178 return llvm::cast<ConstantRelocatable>( | 179 return llvm::cast<ConstantRelocatable>(Ctx->getConstantExternSym( |
| 179 Ctx->getConstantExternSym(H_getIP_prefix + RegName)); | 180 Ctx->getGlobalString(H_getIP_prefix + RegName))); |
| 180 } | 181 } |
| 181 | 182 |
| 182 SizeT getMinJumpTableSize() const override { return 4; } | 183 SizeT getMinJumpTableSize() const override { return 4; } |
| 183 | 184 |
| 184 void emitVariable(const Variable *Var) const override; | 185 void emitVariable(const Variable *Var) const override; |
| 185 | 186 |
| 186 void emit(const ConstantInteger32 *C) const final; | 187 void emit(const ConstantInteger32 *C) const final; |
| 187 void emit(const ConstantInteger64 *C) const final; | 188 void emit(const ConstantInteger64 *C) const final; |
| 188 void emit(const ConstantFloat *C) const final; | 189 void emit(const ConstantFloat *C) const final; |
| 189 void emit(const ConstantDouble *C) const final; | 190 void emit(const ConstantDouble *C) const final; |
| (...skipping 900 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 TargetDataX86 &operator=(const TargetDataX86 &) = delete; | 1091 TargetDataX86 &operator=(const TargetDataX86 &) = delete; |
| 1091 | 1092 |
| 1092 public: | 1093 public: |
| 1093 ~TargetDataX86() override = default; | 1094 ~TargetDataX86() override = default; |
| 1094 | 1095 |
| 1095 static std::unique_ptr<TargetDataLowering> create(GlobalContext *Ctx) { | 1096 static std::unique_ptr<TargetDataLowering> create(GlobalContext *Ctx) { |
| 1096 return makeUnique<TargetDataX86>(Ctx); | 1097 return makeUnique<TargetDataX86>(Ctx); |
| 1097 } | 1098 } |
| 1098 | 1099 |
| 1099 void lowerGlobals(const VariableDeclarationList &Vars, | 1100 void lowerGlobals(const VariableDeclarationList &Vars, |
| 1100 const IceString &SectionSuffix) override; | 1101 const std::string &SectionSuffix) override; |
| 1101 void lowerConstants() override; | 1102 void lowerConstants() override; |
| 1102 void lowerJumpTables() override; | 1103 void lowerJumpTables() override; |
| 1103 | 1104 |
| 1104 private: | 1105 private: |
| 1105 ENABLE_MAKE_UNIQUE; | 1106 ENABLE_MAKE_UNIQUE; |
| 1106 | 1107 |
| 1107 explicit TargetDataX86(GlobalContext *Ctx) : TargetDataLowering(Ctx){}; | 1108 explicit TargetDataX86(GlobalContext *Ctx) : TargetDataLowering(Ctx){}; |
| 1108 template <typename T> static void emitConstantPool(GlobalContext *Ctx); | 1109 template <typename T> static void emitConstantPool(GlobalContext *Ctx); |
| 1109 }; | 1110 }; |
| 1110 | 1111 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1125 | 1126 |
| 1126 explicit TargetHeaderX86(GlobalContext *Ctx) : TargetHeaderLowering(Ctx) {} | 1127 explicit TargetHeaderX86(GlobalContext *Ctx) : TargetHeaderLowering(Ctx) {} |
| 1127 }; | 1128 }; |
| 1128 | 1129 |
| 1129 } // end of namespace X86NAMESPACE | 1130 } // end of namespace X86NAMESPACE |
| 1130 } // end of namespace Ice | 1131 } // end of namespace Ice |
| 1131 | 1132 |
| 1132 #include "IceTargetLoweringX86BaseImpl.h" | 1133 #include "IceTargetLoweringX86BaseImpl.h" |
| 1133 | 1134 |
| 1134 #endif // SUBZERO_SRC_ICETARGETLOWERINGX86BASE_H | 1135 #endif // SUBZERO_SRC_ICETARGETLOWERINGX86BASE_H |
| OLD | NEW |