| OLD | NEW |
| 1 //===- subzero/src/IceInstX86BaseImpl.h - Generic X86 instructions -*- C++ -*=// | 1 //===- subzero/src/IceInstX86BaseImpl.h - Generic X86 instructions -*- 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 1191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1202 InstX86Base<Machine>::Traits::RegisterSet::Reg_xmm0); | 1202 InstX86Base<Machine>::Traits::RegisterSet::Reg_xmm0); |
| 1203 const Variable *Dest = Inst->getDest(); | 1203 const Variable *Dest = Inst->getDest(); |
| 1204 const Operand *Src = Inst->getSrc(1); | 1204 const Operand *Src = Inst->getSrc(1); |
| 1205 emitIASRegOpTyXMM<Machine>(Func, Dest->getType(), Dest, Src, Emitter); | 1205 emitIASRegOpTyXMM<Machine>(Func, Dest->getType(), Dest, Src, Emitter); |
| 1206 } | 1206 } |
| 1207 | 1207 |
| 1208 template <class Machine> | 1208 template <class Machine> |
| 1209 void InstX86Blendvps<Machine>::emit(const Cfg *Func) const { | 1209 void InstX86Blendvps<Machine>::emit(const Cfg *Func) const { |
| 1210 if (!BuildDefs::dump()) | 1210 if (!BuildDefs::dump()) |
| 1211 return; | 1211 return; |
| 1212 auto *Target = InstX86Base<Machine>::getTarget(Func); | 1212 assert(InstX86Base<Machine>::getTarget(Func)->getInstructionSet() >= |
| 1213 assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); | 1213 InstX86Base<Machine>::Traits::SSE4_1); |
| 1214 emitVariableBlendInst<Machine>(this->Opcode, this, Func); | 1214 emitVariableBlendInst<Machine>(this->Opcode, this, Func); |
| 1215 } | 1215 } |
| 1216 | 1216 |
| 1217 template <class Machine> | 1217 template <class Machine> |
| 1218 void InstX86Blendvps<Machine>::emitIAS(const Cfg *Func) const { | 1218 void InstX86Blendvps<Machine>::emitIAS(const Cfg *Func) const { |
| 1219 auto *Target = InstX86Base<Machine>::getTarget(Func); | 1219 assert(InstX86Base<Machine>::getTarget(Func)->getInstructionSet() >= |
| 1220 assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); | 1220 InstX86Base<Machine>::Traits::SSE4_1); |
| 1221 static const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterRegOp | 1221 static const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterRegOp |
| 1222 Emitter = {&InstX86Base<Machine>::Traits::Assembler::blendvps, | 1222 Emitter = {&InstX86Base<Machine>::Traits::Assembler::blendvps, |
| 1223 &InstX86Base<Machine>::Traits::Assembler::blendvps}; | 1223 &InstX86Base<Machine>::Traits::Assembler::blendvps}; |
| 1224 emitIASVariableBlendInst<Machine>(this, Func, Emitter); | 1224 emitIASVariableBlendInst<Machine>(this, Func, Emitter); |
| 1225 } | 1225 } |
| 1226 | 1226 |
| 1227 template <class Machine> | 1227 template <class Machine> |
| 1228 void InstX86Pblendvb<Machine>::emit(const Cfg *Func) const { | 1228 void InstX86Pblendvb<Machine>::emit(const Cfg *Func) const { |
| 1229 if (!BuildDefs::dump()) | 1229 if (!BuildDefs::dump()) |
| 1230 return; | 1230 return; |
| 1231 auto *Target = InstX86Base<Machine>::getTarget(Func); | 1231 assert(InstX86Base<Machine>::getTarget(Func)->getInstructionSet() >= |
| 1232 assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); | 1232 InstX86Base<Machine>::Traits::SSE4_1); |
| 1233 emitVariableBlendInst<Machine>(this->Opcode, this, Func); | 1233 emitVariableBlendInst<Machine>(this->Opcode, this, Func); |
| 1234 } | 1234 } |
| 1235 | 1235 |
| 1236 template <class Machine> | 1236 template <class Machine> |
| 1237 void InstX86Pblendvb<Machine>::emitIAS(const Cfg *Func) const { | 1237 void InstX86Pblendvb<Machine>::emitIAS(const Cfg *Func) const { |
| 1238 auto *Target = InstX86Base<Machine>::getTarget(Func); | 1238 assert(InstX86Base<Machine>::getTarget(Func)->getInstructionSet() >= |
| 1239 assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); | 1239 InstX86Base<Machine>::Traits::SSE4_1); |
| 1240 static const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterRegOp | 1240 static const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterRegOp |
| 1241 Emitter = {&InstX86Base<Machine>::Traits::Assembler::pblendvb, | 1241 Emitter = {&InstX86Base<Machine>::Traits::Assembler::pblendvb, |
| 1242 &InstX86Base<Machine>::Traits::Assembler::pblendvb}; | 1242 &InstX86Base<Machine>::Traits::Assembler::pblendvb}; |
| 1243 emitIASVariableBlendInst<Machine>(this, Func, Emitter); | 1243 emitIASVariableBlendInst<Machine>(this, Func, Emitter); |
| 1244 } | 1244 } |
| 1245 | 1245 |
| 1246 template <class Machine> | 1246 template <class Machine> |
| 1247 void InstX86Imul<Machine>::emit(const Cfg *Func) const { | 1247 void InstX86Imul<Machine>::emit(const Cfg *Func) const { |
| 1248 if (!BuildDefs::dump()) | 1248 if (!BuildDefs::dump()) |
| 1249 return; | 1249 return; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1333 Machine, typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister, | 1333 Machine, typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister, |
| 1334 typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister, | 1334 typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister, |
| 1335 InstX86Base<Machine>::Traits::getEncodedGPR, | 1335 InstX86Base<Machine>::Traits::getEncodedGPR, |
| 1336 InstX86Base<Machine>::Traits::getEncodedGPR>( | 1336 InstX86Base<Machine>::Traits::getEncodedGPR>( |
| 1337 Func, Ty, Dest, this->getSrc(0), this->getSrc(1), Emitter); | 1337 Func, Ty, Dest, this->getSrc(0), this->getSrc(1), Emitter); |
| 1338 } | 1338 } |
| 1339 | 1339 |
| 1340 template <class Machine> | 1340 template <class Machine> |
| 1341 void InstX86Insertps<Machine>::emitIAS(const Cfg *Func) const { | 1341 void InstX86Insertps<Machine>::emitIAS(const Cfg *Func) const { |
| 1342 assert(this->getSrcSize() == 3); | 1342 assert(this->getSrcSize() == 3); |
| 1343 auto *Target = InstX86Base<Machine>::getTarget(Func); | 1343 assert(InstX86Base<Machine>::getTarget(Func)->getInstructionSet() >= |
| 1344 assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); | 1344 InstX86Base<Machine>::Traits::SSE4_1); |
| 1345 const Variable *Dest = this->getDest(); | 1345 const Variable *Dest = this->getDest(); |
| 1346 assert(Dest == this->getSrc(0)); | 1346 assert(Dest == this->getSrc(0)); |
| 1347 Type Ty = Dest->getType(); | 1347 Type Ty = Dest->getType(); |
| 1348 static const typename InstX86Base<Machine>::Traits::Assembler:: | 1348 static const typename InstX86Base<Machine>::Traits::Assembler:: |
| 1349 template ThreeOpImmEmitter< | 1349 template ThreeOpImmEmitter< |
| 1350 typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister, | 1350 typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister, |
| 1351 typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister> | 1351 typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister> |
| 1352 Emitter = {&InstX86Base<Machine>::Traits::Assembler::insertps, | 1352 Emitter = {&InstX86Base<Machine>::Traits::Assembler::insertps, |
| 1353 &InstX86Base<Machine>::Traits::Assembler::insertps}; | 1353 &InstX86Base<Machine>::Traits::Assembler::insertps}; |
| 1354 emitIASThreeOpImmOps< | 1354 emitIASThreeOpImmOps< |
| (...skipping 901 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2256 << (!isScalarFloatingType(DestTy) | 2256 << (!isScalarFloatingType(DestTy) |
| 2257 ? this->getWidthString(DestTy) | 2257 ? this->getWidthString(DestTy) |
| 2258 : InstX86Base<Machine>::Traits::TypeAttributes[DestTy] | 2258 : InstX86Base<Machine>::Traits::TypeAttributes[DestTy] |
| 2259 .SdSsString) << "\t"; | 2259 .SdSsString) << "\t"; |
| 2260 } | 2260 } |
| 2261 // For an integer truncation operation, src is wider than dest. In this case, | 2261 // For an integer truncation operation, src is wider than dest. In this case, |
| 2262 // we use a mov instruction whose data width matches the narrower dest. | 2262 // we use a mov instruction whose data width matches the narrower dest. |
| 2263 // TODO: This assert disallows usages such as copying a floating | 2263 // TODO: This assert disallows usages such as copying a floating |
| 2264 // point value between a vector and a scalar (which movss is used for). Clean | 2264 // point value between a vector and a scalar (which movss is used for). Clean |
| 2265 // this up. | 2265 // this up. |
| 2266 auto *Target = InstX86Base<Machine>::getTarget(Func); | 2266 assert( |
| 2267 assert(Target->typeWidthInBytesOnStack(DestTy) == | 2267 InstX86Base<Machine>::getTarget(Func)->typeWidthInBytesOnStack(DestTy) == |
| 2268 Target->typeWidthInBytesOnStack(SrcTy)); | 2268 InstX86Base<Machine>::getTarget(Func)->typeWidthInBytesOnStack(SrcTy)); |
| 2269 const Operand *NewSrc = Src; | 2269 const Operand *NewSrc = Src; |
| 2270 if (auto *SrcVar = llvm::dyn_cast<Variable>(Src)) { | 2270 if (auto *SrcVar = llvm::dyn_cast<Variable>(Src)) { |
| 2271 int32_t NewRegNum = Variable::NoRegister; | 2271 int32_t NewRegNum = Variable::NoRegister; |
| 2272 if (SrcVar->hasReg()) | 2272 if (SrcVar->hasReg()) |
| 2273 NewRegNum = InstX86Base<Machine>::Traits::getGprForType( | 2273 NewRegNum = InstX86Base<Machine>::Traits::getGprForType( |
| 2274 DestTy, SrcVar->getRegNum()); | 2274 DestTy, SrcVar->getRegNum()); |
| 2275 if (SrcTy != DestTy) | 2275 if (SrcTy != DestTy) |
| 2276 NewSrc = SrcVar->asType(DestTy, NewRegNum); | 2276 NewSrc = SrcVar->asType(DestTy, NewRegNum); |
| 2277 } | 2277 } |
| 2278 NewSrc->emit(Func); | 2278 NewSrc->emit(Func); |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2716 this->emitTwoAddress(buf, this, Func); | 2716 this->emitTwoAddress(buf, this, Func); |
| 2717 } | 2717 } |
| 2718 | 2718 |
| 2719 template <class Machine> | 2719 template <class Machine> |
| 2720 void InstX86Pextr<Machine>::emit(const Cfg *Func) const { | 2720 void InstX86Pextr<Machine>::emit(const Cfg *Func) const { |
| 2721 if (!BuildDefs::dump()) | 2721 if (!BuildDefs::dump()) |
| 2722 return; | 2722 return; |
| 2723 Ostream &Str = Func->getContext()->getStrEmit(); | 2723 Ostream &Str = Func->getContext()->getStrEmit(); |
| 2724 assert(this->getSrcSize() == 2); | 2724 assert(this->getSrcSize() == 2); |
| 2725 // pextrb and pextrd are SSE4.1 instructions. | 2725 // pextrb and pextrd are SSE4.1 instructions. |
| 2726 auto *Target = InstX86Base<Machine>::getTarget(Func); | |
| 2727 assert(this->getSrc(0)->getType() == IceType_v8i16 || | 2726 assert(this->getSrc(0)->getType() == IceType_v8i16 || |
| 2728 this->getSrc(0)->getType() == IceType_v8i1 || | 2727 this->getSrc(0)->getType() == IceType_v8i1 || |
| 2729 Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); | 2728 InstX86Base<Machine>::getTarget(Func)->getInstructionSet() >= |
| 2729 InstX86Base<Machine>::Traits::SSE4_1); |
| 2730 Str << "\t" << this->Opcode | 2730 Str << "\t" << this->Opcode |
| 2731 << InstX86Base<Machine>::Traits::TypeAttributes[this->getSrc(0) | 2731 << InstX86Base<Machine>::Traits::TypeAttributes[this->getSrc(0) |
| 2732 ->getType()] | 2732 ->getType()] |
| 2733 .PackString << "\t"; | 2733 .PackString << "\t"; |
| 2734 this->getSrc(1)->emit(Func); | 2734 this->getSrc(1)->emit(Func); |
| 2735 Str << ", "; | 2735 Str << ", "; |
| 2736 this->getSrc(0)->emit(Func); | 2736 this->getSrc(0)->emit(Func); |
| 2737 Str << ", "; | 2737 Str << ", "; |
| 2738 Variable *Dest = this->getDest(); | 2738 Variable *Dest = this->getDest(); |
| 2739 // pextrw must take a register dest. There is an SSE4.1 version that takes a | 2739 // pextrw must take a register dest. There is an SSE4.1 version that takes a |
| 2740 // memory dest, but we aren't using it. For uniformity, just restrict them | 2740 // memory dest, but we aren't using it. For uniformity, just restrict them |
| 2741 // all to have a register dest for now. | 2741 // all to have a register dest for now. |
| 2742 assert(Dest->hasReg()); | 2742 assert(Dest->hasReg()); |
| 2743 Dest->asType(IceType_i32, Dest->getRegNum())->emit(Func); | 2743 Dest->asType(IceType_i32, Dest->getRegNum())->emit(Func); |
| 2744 } | 2744 } |
| 2745 | 2745 |
| 2746 template <class Machine> | 2746 template <class Machine> |
| 2747 void InstX86Pextr<Machine>::emitIAS(const Cfg *Func) const { | 2747 void InstX86Pextr<Machine>::emitIAS(const Cfg *Func) const { |
| 2748 assert(this->getSrcSize() == 2); | 2748 assert(this->getSrcSize() == 2); |
| 2749 // pextrb and pextrd are SSE4.1 instructions. | 2749 // pextrb and pextrd are SSE4.1 instructions. |
| 2750 const Variable *Dest = this->getDest(); | 2750 const Variable *Dest = this->getDest(); |
| 2751 Type DispatchTy = InstX86Base<Machine>::Traits::getInVectorElementType( | 2751 Type DispatchTy = InstX86Base<Machine>::Traits::getInVectorElementType( |
| 2752 this->getSrc(0)->getType()); | 2752 this->getSrc(0)->getType()); |
| 2753 auto *Target = InstX86Base<Machine>::getTarget(Func); | |
| 2754 assert(DispatchTy == IceType_i16 || | 2753 assert(DispatchTy == IceType_i16 || |
| 2755 Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); | 2754 InstX86Base<Machine>::getTarget(Func)->getInstructionSet() >= |
| 2755 InstX86Base<Machine>::Traits::SSE4_1); |
| 2756 // pextrw must take a register dest. There is an SSE4.1 version that takes a | 2756 // pextrw must take a register dest. There is an SSE4.1 version that takes a |
| 2757 // memory dest, but we aren't using it. For uniformity, just restrict them | 2757 // memory dest, but we aren't using it. For uniformity, just restrict them |
| 2758 // all to have a register dest for now. | 2758 // all to have a register dest for now. |
| 2759 assert(Dest->hasReg()); | 2759 assert(Dest->hasReg()); |
| 2760 // pextrw's Src(0) must be a register (both SSE4.1 and SSE2). | 2760 // pextrw's Src(0) must be a register (both SSE4.1 and SSE2). |
| 2761 assert(llvm::cast<Variable>(this->getSrc(0))->hasReg()); | 2761 assert(llvm::cast<Variable>(this->getSrc(0))->hasReg()); |
| 2762 static const typename InstX86Base<Machine>::Traits::Assembler:: | 2762 static const typename InstX86Base<Machine>::Traits::Assembler:: |
| 2763 template ThreeOpImmEmitter< | 2763 template ThreeOpImmEmitter< |
| 2764 typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister, | 2764 typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister, |
| 2765 typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister> | 2765 typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister> |
| 2766 Emitter = {&InstX86Base<Machine>::Traits::Assembler::pextr, nullptr}; | 2766 Emitter = {&InstX86Base<Machine>::Traits::Assembler::pextr, nullptr}; |
| 2767 emitIASThreeOpImmOps< | 2767 emitIASThreeOpImmOps< |
| 2768 Machine, typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister, | 2768 Machine, typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister, |
| 2769 typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister, | 2769 typename InstX86Base<Machine>::Traits::RegisterSet::XmmRegister, |
| 2770 InstX86Base<Machine>::Traits::getEncodedGPR, | 2770 InstX86Base<Machine>::Traits::getEncodedGPR, |
| 2771 InstX86Base<Machine>::Traits::getEncodedXmm>( | 2771 InstX86Base<Machine>::Traits::getEncodedXmm>( |
| 2772 Func, DispatchTy, Dest, this->getSrc(0), this->getSrc(1), Emitter); | 2772 Func, DispatchTy, Dest, this->getSrc(0), this->getSrc(1), Emitter); |
| 2773 } | 2773 } |
| 2774 | 2774 |
| 2775 template <class Machine> | 2775 template <class Machine> |
| 2776 void InstX86Pinsr<Machine>::emit(const Cfg *Func) const { | 2776 void InstX86Pinsr<Machine>::emit(const Cfg *Func) const { |
| 2777 if (!BuildDefs::dump()) | 2777 if (!BuildDefs::dump()) |
| 2778 return; | 2778 return; |
| 2779 Ostream &Str = Func->getContext()->getStrEmit(); | 2779 Ostream &Str = Func->getContext()->getStrEmit(); |
| 2780 assert(this->getSrcSize() == 3); | 2780 assert(this->getSrcSize() == 3); |
| 2781 // pinsrb and pinsrd are SSE4.1 instructions. | 2781 // pinsrb and pinsrd are SSE4.1 instructions. |
| 2782 auto *Target = InstX86Base<Machine>::getTarget(Func); | |
| 2783 assert(this->getDest()->getType() == IceType_v8i16 || | 2782 assert(this->getDest()->getType() == IceType_v8i16 || |
| 2784 this->getDest()->getType() == IceType_v8i1 || | 2783 this->getDest()->getType() == IceType_v8i1 || |
| 2785 Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); | 2784 InstX86Base<Machine>::getTarget(Func)->getInstructionSet() >= |
| 2785 InstX86Base<Machine>::Traits::SSE4_1); |
| 2786 Str << "\t" << this->Opcode | 2786 Str << "\t" << this->Opcode |
| 2787 << InstX86Base< | 2787 << InstX86Base< |
| 2788 Machine>::Traits::TypeAttributes[this->getDest()->getType()] | 2788 Machine>::Traits::TypeAttributes[this->getDest()->getType()] |
| 2789 .PackString << "\t"; | 2789 .PackString << "\t"; |
| 2790 this->getSrc(2)->emit(Func); | 2790 this->getSrc(2)->emit(Func); |
| 2791 Str << ", "; | 2791 Str << ", "; |
| 2792 Operand *Src1 = this->getSrc(1); | 2792 Operand *Src1 = this->getSrc(1); |
| 2793 if (const auto *Src1Var = llvm::dyn_cast<Variable>(Src1)) { | 2793 if (const auto *Src1Var = llvm::dyn_cast<Variable>(Src1)) { |
| 2794 // If src1 is a register, it should always be r32. | 2794 // If src1 is a register, it should always be r32. |
| 2795 if (Src1Var->hasReg()) { | 2795 if (Src1Var->hasReg()) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2807 this->getDest()->emit(Func); | 2807 this->getDest()->emit(Func); |
| 2808 } | 2808 } |
| 2809 | 2809 |
| 2810 template <class Machine> | 2810 template <class Machine> |
| 2811 void InstX86Pinsr<Machine>::emitIAS(const Cfg *Func) const { | 2811 void InstX86Pinsr<Machine>::emitIAS(const Cfg *Func) const { |
| 2812 assert(this->getSrcSize() == 3); | 2812 assert(this->getSrcSize() == 3); |
| 2813 assert(this->getDest() == this->getSrc(0)); | 2813 assert(this->getDest() == this->getSrc(0)); |
| 2814 // pinsrb and pinsrd are SSE4.1 instructions. | 2814 // pinsrb and pinsrd are SSE4.1 instructions. |
| 2815 const Operand *Src0 = this->getSrc(1); | 2815 const Operand *Src0 = this->getSrc(1); |
| 2816 Type DispatchTy = Src0->getType(); | 2816 Type DispatchTy = Src0->getType(); |
| 2817 auto *Target = InstX86Base<Machine>::getTarget(Func); | |
| 2818 assert(DispatchTy == IceType_i16 || | 2817 assert(DispatchTy == IceType_i16 || |
| 2819 Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); | 2818 InstX86Base<Machine>::getTarget(Func)->getInstructionSet() >= |
| 2819 InstX86Base<Machine>::Traits::SSE4_1); |
| 2820 // If src1 is a register, it should always be r32 (this should fall out from | 2820 // If src1 is a register, it should always be r32 (this should fall out from |
| 2821 // the encodings for ByteRegs overlapping the encodings for r32), but we have | 2821 // the encodings for ByteRegs overlapping the encodings for r32), but we have |
| 2822 // to make sure the register allocator didn't choose an 8-bit high register | 2822 // to make sure the register allocator didn't choose an 8-bit high register |
| 2823 // like "ah". | 2823 // like "ah". |
| 2824 if (BuildDefs::asserts()) { | 2824 if (BuildDefs::asserts()) { |
| 2825 if (auto *Src0Var = llvm::dyn_cast<Variable>(Src0)) { | 2825 if (auto *Src0Var = llvm::dyn_cast<Variable>(Src0)) { |
| 2826 if (Src0Var->hasReg()) { | 2826 if (Src0Var->hasReg()) { |
| 2827 int32_t RegNum = Src0Var->getRegNum(); | 2827 int32_t RegNum = Src0Var->getRegNum(); |
| 2828 int32_t BaseRegNum = InstX86Base<Machine>::Traits::getBaseReg(RegNum); | 2828 int32_t BaseRegNum = InstX86Base<Machine>::Traits::getBaseReg(RegNum); |
| 2829 (void)BaseRegNum; | 2829 (void)BaseRegNum; |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3244 return; | 3244 return; |
| 3245 Ostream &Str = Func->getContext()->getStrDump(); | 3245 Ostream &Str = Func->getContext()->getStrDump(); |
| 3246 Str << "IACA_END"; | 3246 Str << "IACA_END"; |
| 3247 } | 3247 } |
| 3248 | 3248 |
| 3249 } // end of namespace X86Internal | 3249 } // end of namespace X86Internal |
| 3250 | 3250 |
| 3251 } // end of namespace Ice | 3251 } // end of namespace Ice |
| 3252 | 3252 |
| 3253 #endif // SUBZERO_SRC_ICEINSTX86BASEIMPL_H | 3253 #endif // SUBZERO_SRC_ICEINSTX86BASEIMPL_H |
| OLD | NEW |