Index: src/IceInstX86BaseImpl.h |
diff --git a/src/IceInstX86BaseImpl.h b/src/IceInstX86BaseImpl.h |
index 2c3bfe26637d9d8583f0381a86a9e909337840bb..de9e566c33ff15709906503b2ae30c8fe5aa3cfd 100644 |
--- a/src/IceInstX86BaseImpl.h |
+++ b/src/IceInstX86BaseImpl.h |
@@ -570,7 +570,7 @@ void InstX86Call<Machine>::emit(const Cfg *Func) const { |
assert(this->getSrcSize() == 1); |
Str << "\tcall\t"; |
Operand *CallTarget = getCallTarget(); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
if (const auto *CI = llvm::dyn_cast<ConstantInteger32>(CallTarget)) { |
// Emit without a leading '$'. |
Str << CI->getValue(); |
@@ -589,15 +589,12 @@ void InstX86Call<Machine>::emitIAS(const Cfg *Func) const { |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
Operand *CallTarget = getCallTarget(); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
if (const auto *Var = llvm::dyn_cast<Variable>(CallTarget)) { |
if (Var->hasReg()) { |
Asm->call(InstX86Base<Machine>::Traits::getEncodedGPR(Var->getRegNum())); |
} else { |
- Asm->call( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(Var)); |
+ Asm->call(Target->stackVarToAsmOperand(Var)); |
} |
} else if (const auto *Mem = llvm::dyn_cast< |
typename InstX86Base<Machine>::Traits::X86OperandMem>( |
@@ -654,7 +651,7 @@ template <class Machine> |
void emitIASOpTyGPR(const Cfg *Func, Type Ty, const Operand *Op, |
const typename InstX86Base< |
Machine>::Traits::Assembler::GPREmitterOneOp &Emitter) { |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
if (const auto *Var = llvm::dyn_cast<Variable>(Op)) { |
@@ -665,9 +662,7 @@ void emitIASOpTyGPR(const Cfg *Func, Type Ty, const Operand *Op, |
(Asm->*(Emitter.Reg))(Ty, VarReg); |
} else { |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(Var)); |
+ Target->stackVarToAsmOperand(Var)); |
(Asm->*(Emitter.Addr))(Ty, StackAddr); |
} |
} else if (const auto *Mem = llvm::dyn_cast< |
@@ -684,7 +679,7 @@ void emitIASRegOpTyGPR( |
const Cfg *Func, Type Ty, const Variable *Var, const Operand *Src, |
const typename InstX86Base<Machine>::Traits::Assembler::GPREmitterRegOp |
&Emitter) { |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
assert(Var->hasReg()); |
@@ -703,9 +698,7 @@ void emitIASRegOpTyGPR( |
(Asm->*(Emitter.GPRGPR))(Ty, VarReg, SrcReg); |
} else { |
typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(SrcVar); |
+ Target->stackVarToAsmOperand(SrcVar); |
(Asm->*(Emitter.GPRAddr))(Ty, VarReg, SrcStackAddr); |
} |
} else if (const auto *Mem = llvm::dyn_cast< |
@@ -757,13 +750,11 @@ void emitIASAsAddrOpTyGPR( |
const Cfg *Func, Type Ty, const Operand *Op0, const Operand *Op1, |
const typename InstX86Base<Machine>::Traits::Assembler::GPREmitterAddrOp |
&Emitter) { |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
if (const auto *Op0Var = llvm::dyn_cast<Variable>(Op0)) { |
assert(!Op0Var->hasReg()); |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(Op0Var)); |
+ Target->stackVarToAsmOperand(Op0Var)); |
emitIASAddrOpTyGPR<Machine>(Func, Ty, StackAddr, Op1, Emitter); |
} else if (const auto *Op0Mem = llvm::dyn_cast< |
typename InstX86Base<Machine>::Traits::X86OperandMem>(Op0)) { |
@@ -841,7 +832,7 @@ void emitIASXmmShift( |
const Cfg *Func, Type Ty, const Variable *Var, const Operand *Src, |
const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterShiftOp |
&Emitter) { |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
assert(Var->hasReg()); |
@@ -854,9 +845,7 @@ void emitIASXmmShift( |
(Asm->*(Emitter.XmmXmm))(Ty, VarReg, SrcReg); |
} else { |
typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(SrcVar); |
+ Target->stackVarToAsmOperand(SrcVar); |
(Asm->*(Emitter.XmmAddr))(Ty, VarReg, SrcStackAddr); |
} |
} else if (const auto *Mem = llvm::dyn_cast< |
@@ -876,7 +865,7 @@ void emitIASRegOpTyXMM( |
const Cfg *Func, Type Ty, const Variable *Var, const Operand *Src, |
const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterRegOp |
&Emitter) { |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
assert(Var->hasReg()); |
@@ -889,9 +878,7 @@ void emitIASRegOpTyXMM( |
(Asm->*(Emitter.XmmXmm))(Ty, VarReg, SrcReg); |
} else { |
typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(SrcVar); |
+ Target->stackVarToAsmOperand(SrcVar); |
(Asm->*(Emitter.XmmAddr))(Ty, VarReg, SrcStackAddr); |
} |
} else if (const auto *Mem = llvm::dyn_cast< |
@@ -914,7 +901,7 @@ void emitIASCastRegOp(const Cfg *Func, Type DestTy, const Variable *Dest, |
Type SrcTy, const Operand *Src, |
const typename InstX86Base<Machine>::Traits::Assembler:: |
template CastEmitterRegOp<DReg_t, SReg_t> &Emitter) { |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
assert(Dest->hasReg()); |
@@ -925,9 +912,7 @@ void emitIASCastRegOp(const Cfg *Func, Type DestTy, const Variable *Dest, |
(Asm->*(Emitter.RegReg))(DestTy, DestReg, SrcTy, SrcReg); |
} else { |
typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(SrcVar); |
+ Target->stackVarToAsmOperand(SrcVar); |
(Asm->*(Emitter.RegAddr))(DestTy, DestReg, SrcTy, SrcStackAddr); |
} |
} else if (const auto *Mem = llvm::dyn_cast< |
@@ -947,7 +932,7 @@ void emitIASThreeOpImmOps( |
const Operand *Src1, |
const typename InstX86Base<Machine>::Traits::Assembler:: |
template ThreeOpImmEmitter<DReg_t, SReg_t> Emitter) { |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
// This only handles Dest being a register, and Src1 being an immediate. |
@@ -960,9 +945,7 @@ void emitIASThreeOpImmOps( |
(Asm->*(Emitter.RegRegImm))(DispatchTy, DestReg, SrcReg, Imm); |
} else { |
typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(SrcVar); |
+ Target->stackVarToAsmOperand(SrcVar); |
(Asm->*(Emitter.RegAddrImm))(DispatchTy, DestReg, SrcStackAddr, Imm); |
} |
} else if (const auto *Mem = llvm::dyn_cast< |
@@ -980,7 +963,7 @@ void emitIASMovlikeXMM( |
const Cfg *Func, const Variable *Dest, const Operand *Src, |
const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterMovOps |
Emitter) { |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
if (Dest->hasReg()) { |
@@ -993,9 +976,7 @@ void emitIASMovlikeXMM( |
InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum())); |
} else { |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast< |
- typename InstX86Base<Machine>::Traits::TargetLowering *>(Target) |
- ->stackVarToAsmOperand(SrcVar)); |
+ Target->stackVarToAsmOperand(SrcVar)); |
(Asm->*(Emitter.XmmAddr))(DestReg, StackAddr); |
} |
} else if (const auto *SrcMem = llvm::dyn_cast< |
@@ -1008,9 +989,7 @@ void emitIASMovlikeXMM( |
} |
} else { |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(Dest)); |
+ Target->stackVarToAsmOperand(Dest)); |
// Src must be a register in this case. |
const auto *SrcVar = llvm::cast<Variable>(Src); |
assert(SrcVar->hasReg()); |
@@ -1066,12 +1045,10 @@ void InstX86Pmull<Machine>::emit(const Cfg *Func) const { |
char buf[30]; |
bool TypesAreValid = this->getDest()->getType() == IceType_v4i32 || |
this->getDest()->getType() == IceType_v8i16; |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
bool InstructionSetIsValid = |
this->getDest()->getType() == IceType_v8i16 || |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1; |
+ Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1; |
(void)TypesAreValid; |
(void)InstructionSetIsValid; |
assert(TypesAreValid); |
@@ -1087,12 +1064,10 @@ template <class Machine> |
void InstX86Pmull<Machine>::emitIAS(const Cfg *Func) const { |
Type Ty = this->getDest()->getType(); |
bool TypesAreValid = Ty == IceType_v4i32 || Ty == IceType_v8i16; |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
bool InstructionSetIsValid = |
Ty == IceType_v8i16 || |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1; |
+ Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1; |
(void)TypesAreValid; |
(void)InstructionSetIsValid; |
assert(TypesAreValid); |
@@ -1236,21 +1211,15 @@ template <class Machine> |
void InstX86Blendvps<Machine>::emit(const Cfg *Func) const { |
if (!BuildDefs::dump()) |
return; |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
- assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
+ assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
emitVariableBlendInst<Machine>(this->Opcode, this, Func); |
} |
template <class Machine> |
void InstX86Blendvps<Machine>::emitIAS(const Cfg *Func) const { |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
- assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
+ assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
static const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterRegOp |
Emitter = {&InstX86Base<Machine>::Traits::Assembler::blendvps, |
&InstX86Base<Machine>::Traits::Assembler::blendvps}; |
@@ -1261,21 +1230,15 @@ template <class Machine> |
void InstX86Pblendvb<Machine>::emit(const Cfg *Func) const { |
if (!BuildDefs::dump()) |
return; |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
- assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
+ assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
emitVariableBlendInst<Machine>(this->Opcode, this, Func); |
} |
template <class Machine> |
void InstX86Pblendvb<Machine>::emitIAS(const Cfg *Func) const { |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
- assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
+ assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
static const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterRegOp |
Emitter = {&InstX86Base<Machine>::Traits::Assembler::pblendvb, |
&InstX86Base<Machine>::Traits::Assembler::pblendvb}; |
@@ -1379,11 +1342,8 @@ void InstX86ImulImm<Machine>::emitIAS(const Cfg *Func) const { |
template <class Machine> |
void InstX86Insertps<Machine>::emitIAS(const Cfg *Func) const { |
assert(this->getSrcSize() == 3); |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
- assert(static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
+ assert(Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
const Variable *Dest = this->getDest(); |
assert(Dest == this->getSrc(0)); |
Type Ty = Dest->getType(); |
@@ -1629,7 +1589,7 @@ void InstX86Cmov<Machine>::emitIAS(const Cfg *Func) const { |
(InstX86Base<Machine>::Traits::Is64Bit)); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
if (const auto *SrcVar = llvm::dyn_cast<Variable>(Src)) { |
if (SrcVar->hasReg()) { |
Asm->cmov( |
@@ -1640,9 +1600,7 @@ void InstX86Cmov<Machine>::emitIAS(const Cfg *Func) const { |
Asm->cmov( |
SrcTy, Condition, InstX86Base<Machine>::Traits::getEncodedGPR( |
this->getDest()->getRegNum()), |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(SrcVar)); |
+ Target->stackVarToAsmOperand(SrcVar)); |
} |
} else if (const auto *Mem = llvm::dyn_cast< |
typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { |
@@ -1696,7 +1654,7 @@ void InstX86Cmpps<Machine>::emitIAS(const Cfg *Func) const { |
// Assuming there isn't any load folding for cmpps, and vector constants are |
// not allowed in PNaCl. |
assert(llvm::isa<Variable>(this->getSrc(1))); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
const auto *SrcVar = llvm::cast<Variable>(this->getSrc(1)); |
if (SrcVar->hasReg()) { |
Asm->cmpps(InstX86Base<Machine>::Traits::getEncodedXmm( |
@@ -1705,9 +1663,7 @@ void InstX86Cmpps<Machine>::emitIAS(const Cfg *Func) const { |
Condition); |
} else { |
typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(SrcVar); |
+ Target->stackVarToAsmOperand(SrcVar); |
Asm->cmpps(InstX86Base<Machine>::Traits::getEncodedXmm( |
this->getDest()->getRegNum()), |
SrcStackAddr, Condition); |
@@ -1750,7 +1706,7 @@ void InstX86Cmpxchg<Machine>::emitIAS(const Cfg *Func) const { |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
Type Ty = this->getSrc(0)->getType(); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
const auto Mem = |
llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( |
this->getSrc(0)); |
@@ -1800,7 +1756,7 @@ void InstX86Cmpxchg8b<Machine>::emitIAS(const Cfg *Func) const { |
this->getSrc(0)); |
assert(Mem->getSegmentRegister() == |
InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
const typename InstX86Base<Machine>::Traits::Address Addr = |
Mem->toAsmAddress(Asm, Target); |
Asm->cmpxchg8b(Addr, this->Locked); |
@@ -2142,13 +2098,11 @@ void InstX86Store<Machine>::emitIAS(const Cfg *Func) const { |
InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum()); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
if (const auto *DestVar = llvm::dyn_cast<Variable>(Dest)) { |
assert(!DestVar->hasReg()); |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(DestVar)); |
+ Target->stackVarToAsmOperand(DestVar)); |
Asm->movss(DestTy, StackAddr, SrcReg); |
} else { |
const auto DestMem = |
@@ -2205,7 +2159,7 @@ void InstX86StoreP<Machine>::emitIAS(const Cfg *Func) const { |
assert(DestMem->getSegmentRegister() == |
InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
assert(SrcVar->hasReg()); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
Asm->movups(DestMem->toAsmAddress(Asm, Target), |
InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum())); |
} |
@@ -2248,7 +2202,7 @@ void InstX86StoreQ<Machine>::emitIAS(const Cfg *Func) const { |
assert(DestMem->getSegmentRegister() == |
InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
assert(SrcVar->hasReg()); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
Asm->movq(DestMem->toAsmAddress(Asm, Target), |
InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum())); |
} |
@@ -2312,8 +2266,7 @@ template <class Machine> void InstX86Mov<Machine>::emit(const Cfg *Func) const { |
// TODO: This assert disallows usages such as copying a floating |
// point value between a vector and a scalar (which movss is used for). Clean |
// this up. |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
assert(Target->typeWidthInBytesOnStack(DestTy) == |
Target->typeWidthInBytesOnStack(SrcTy)); |
const Operand *NewSrc = Src; |
@@ -2359,7 +2312,7 @@ void InstX86Mov<Machine>::emitIAS(const Cfg *Func) const { |
// TODO: This assert disallows usages such as copying a floating |
// point value between a vector and a scalar (which movss is used for). Clean |
// this up. |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
assert(Target->typeWidthInBytesOnStack(this->getDest()->getType()) == |
Target->typeWidthInBytesOnStack(Src->getType())); |
if (Dest->hasReg()) { |
@@ -2394,9 +2347,7 @@ void InstX86Mov<Machine>::emitIAS(const Cfg *Func) const { |
// Dest must be Stack and Src *could* be a register. Use Src's type to |
// decide on the emitters. |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(Dest)); |
+ Target->stackVarToAsmOperand(Dest)); |
if (isScalarFloatingType(SrcTy)) { |
// Src must be a register. |
const auto *SrcVar = llvm::cast<Variable>(Src); |
@@ -2424,7 +2375,7 @@ void InstX86Movd<Machine>::emitIAS(const Cfg *Func) const { |
assert(this->getSrcSize() == 1); |
const Variable *Dest = this->getDest(); |
const auto *SrcVar = llvm::cast<Variable>(this->getSrc(0)); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
// For insert/extract element (one of Src/Dest is an Xmm vector and the other |
// is an int type). |
if (SrcVar->getType() == IceType_i32 || |
@@ -2443,9 +2394,7 @@ void InstX86Movd<Machine>::emitIAS(const Cfg *Func) const { |
InstX86Base<Machine>::Traits::getEncodedGPR(SrcVar->getRegNum())); |
} else { |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(SrcVar)); |
+ Target->stackVarToAsmOperand(SrcVar)); |
Asm->movd(SrcVar->getType(), DestReg, StackAddr); |
} |
} else { |
@@ -2465,9 +2414,7 @@ void InstX86Movd<Machine>::emitIAS(const Cfg *Func) const { |
SrcReg); |
} else { |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(Dest)); |
+ Target->stackVarToAsmOperand(Dest)); |
Asm->movd(Dest->getType(), StackAddr, SrcReg); |
} |
} |
@@ -2629,7 +2576,7 @@ void InstX86Fld<Machine>::emitIAS(const Cfg *Func) const { |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
assert(this->getSrcSize() == 1); |
const Operand *Src = this->getSrc(0); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
Type Ty = Src->getType(); |
if (const auto *Var = llvm::dyn_cast<Variable>(Src)) { |
if (Var->hasReg()) { |
@@ -2651,9 +2598,7 @@ void InstX86Fld<Machine>::emitIAS(const Cfg *Func) const { |
Width); |
} else { |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(Var)); |
+ Target->stackVarToAsmOperand(Var)); |
Asm->fld(Ty, StackAddr); |
} |
} else if (const auto *Mem = llvm::dyn_cast< |
@@ -2723,13 +2668,11 @@ void InstX86Fstp<Machine>::emitIAS(const Cfg *Func) const { |
Asm->fstp(InstX86Base<Machine>::Traits::RegisterSet::getEncodedSTReg(0)); |
return; |
} |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
Type Ty = Dest->getType(); |
if (!Dest->hasReg()) { |
typename InstX86Base<Machine>::Traits::Address StackAddr( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(Dest)); |
+ Target->stackVarToAsmOperand(Dest)); |
Asm->fstp(Ty, StackAddr); |
} else { |
// Dest is a physical (xmm) register, so st(0) needs to go through memory. |
@@ -2791,13 +2734,10 @@ void InstX86Pextr<Machine>::emit(const Cfg *Func) const { |
Ostream &Str = Func->getContext()->getStrEmit(); |
assert(this->getSrcSize() == 2); |
// pextrb and pextrd are SSE4.1 instructions. |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
assert(this->getSrc(0)->getType() == IceType_v8i16 || |
this->getSrc(0)->getType() == IceType_v8i1 || |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
+ Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
Str << "\t" << this->Opcode |
<< InstX86Base<Machine>::Traits::TypeAttributes[this->getSrc(0) |
->getType()] |
@@ -2821,12 +2761,9 @@ void InstX86Pextr<Machine>::emitIAS(const Cfg *Func) const { |
const Variable *Dest = this->getDest(); |
Type DispatchTy = InstX86Base<Machine>::Traits::getInVectorElementType( |
this->getSrc(0)->getType()); |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
assert(DispatchTy == IceType_i16 || |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
+ Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
// pextrw must take a register dest. There is an SSE4.1 version that takes a |
// memory dest, but we aren't using it. For uniformity, just restrict them |
// all to have a register dest for now. |
@@ -2853,13 +2790,10 @@ void InstX86Pinsr<Machine>::emit(const Cfg *Func) const { |
Ostream &Str = Func->getContext()->getStrEmit(); |
assert(this->getSrcSize() == 3); |
// pinsrb and pinsrd are SSE4.1 instructions. |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
assert(this->getDest()->getType() == IceType_v8i16 || |
this->getDest()->getType() == IceType_v8i1 || |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
+ Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
Str << "\t" << this->Opcode |
<< InstX86Base< |
Machine>::Traits::TypeAttributes[this->getDest()->getType()] |
@@ -2891,12 +2825,9 @@ void InstX86Pinsr<Machine>::emitIAS(const Cfg *Func) const { |
// pinsrb and pinsrd are SSE4.1 instructions. |
const Operand *Src0 = this->getSrc(1); |
Type DispatchTy = Src0->getType(); |
- TargetLowering *Target = Func->getTarget(); |
- (void)Target; |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
assert(DispatchTy == IceType_i16 || |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
+ Target->getInstructionSet() >= InstX86Base<Machine>::Traits::SSE4_1); |
// If src1 is a register, it should always be r32 (this should fall out from |
// the encodings for ByteRegs overlapping the encodings for r32), but we have |
// to make sure the register allocator didn't choose an 8-bit high register |
@@ -2983,11 +2914,8 @@ void InstX86Pop<Machine>::emitIAS(const Cfg *Func) const { |
Asm->popl(InstX86Base<Machine>::Traits::getEncodedGPR( |
this->getDest()->getRegNum())); |
} else { |
- TargetLowering *Target = Func->getTarget(); |
- Asm->popl( |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(this->getDest())); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
+ Asm->popl(Target->stackVarToAsmOperand(this->getDest())); |
} |
} |
@@ -3005,7 +2933,7 @@ void InstX86AdjustStack<Machine>::emit(const Cfg *Func) const { |
return; |
Ostream &Str = Func->getContext()->getStrEmit(); |
Str << "\tsubl\t$" << Amount << ", %esp"; |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
Target->updateStackAdjustment(Amount); |
} |
@@ -3016,7 +2944,7 @@ void InstX86AdjustStack<Machine>::emitIAS(const Cfg *Func) const { |
Asm->sub(IceType_i32, |
InstX86Base<Machine>::Traits::RegisterSet::Encoded_Reg_esp, |
Immediate(Amount)); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
Target->updateStackAdjustment(Amount); |
} |
@@ -3147,16 +3075,12 @@ void InstX86Setcc<Machine>::emitIAS(const Cfg *Func) const { |
assert(this->getSrcSize() == 0); |
typename InstX86Base<Machine>::Traits::Assembler *Asm = |
Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
if (this->getDest()->hasReg()) |
Asm->setcc(Condition, InstX86Base<Machine>::Traits::getEncodedByteReg( |
this->getDest()->getRegNum())); |
else |
- Asm->setcc( |
- Condition, |
- static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
- Target) |
- ->stackVarToAsmOperand(this->getDest())); |
+ Asm->setcc(Condition, Target->stackVarToAsmOperand(this->getDest())); |
return; |
} |
@@ -3196,7 +3120,7 @@ void InstX86Xadd<Machine>::emitIAS(const Cfg *Func) const { |
this->getSrc(0)); |
assert(Mem->getSegmentRegister() == |
InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
const typename InstX86Base<Machine>::Traits::Address Addr = |
Mem->toAsmAddress(Asm, Target); |
const auto *VarReg = llvm::cast<Variable>(this->getSrc(1)); |
@@ -3254,7 +3178,7 @@ void InstX86Xchg<Machine>::emitIAS(const Cfg *Func) const { |
this->getSrc(0)); |
assert(Mem->getSegmentRegister() == |
InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
- TargetLowering *Target = Func->getTarget(); |
+ auto *Target = InstX86Base<Machine>::getTarget(Func); |
const typename InstX86Base<Machine>::Traits::Address Addr = |
Mem->toAsmAddress(Asm, Target); |
Asm->xchg(Ty, Addr, Reg1); |