|
@@ -112,7 +112,7 @@ static unsigned findFirstFreeSGPR(CCState &CCInfo) {
|
|
}
|
|
}
|
|
|
|
|
|
SITargetLowering::SITargetLowering(const TargetMachine &TM,
|
|
SITargetLowering::SITargetLowering(const TargetMachine &TM,
|
|
- const SISubtarget &STI)
|
|
|
|
|
|
+ const GCNSubtarget &STI)
|
|
: AMDGPUTargetLowering(TM, STI),
|
|
: AMDGPUTargetLowering(TM, STI),
|
|
Subtarget(&STI) {
|
|
Subtarget(&STI) {
|
|
addRegisterClass(MVT::i1, &AMDGPU::VReg_1RegClass);
|
|
addRegisterClass(MVT::i1, &AMDGPU::VReg_1RegClass);
|
|
@@ -378,7 +378,7 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
|
|
setOperationAction(ISD::FMINNUM, MVT::f64, Legal);
|
|
setOperationAction(ISD::FMINNUM, MVT::f64, Legal);
|
|
setOperationAction(ISD::FMAXNUM, MVT::f64, Legal);
|
|
setOperationAction(ISD::FMAXNUM, MVT::f64, Legal);
|
|
|
|
|
|
- if (Subtarget->getGeneration() >= SISubtarget::SEA_ISLANDS) {
|
|
|
|
|
|
+ if (Subtarget->getGeneration() >= AMDGPUSubtarget::SEA_ISLANDS) {
|
|
setOperationAction(ISD::FTRUNC, MVT::f64, Legal);
|
|
setOperationAction(ISD::FTRUNC, MVT::f64, Legal);
|
|
setOperationAction(ISD::FCEIL, MVT::f64, Legal);
|
|
setOperationAction(ISD::FCEIL, MVT::f64, Legal);
|
|
setOperationAction(ISD::FRINT, MVT::f64, Legal);
|
|
setOperationAction(ISD::FRINT, MVT::f64, Legal);
|
|
@@ -667,7 +667,7 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
|
|
setHasFloatingPointExceptions(Subtarget->hasFPExceptions());
|
|
setHasFloatingPointExceptions(Subtarget->hasFPExceptions());
|
|
}
|
|
}
|
|
|
|
|
|
-const SISubtarget *SITargetLowering::getSubtarget() const {
|
|
|
|
|
|
+const GCNSubtarget *SITargetLowering::getSubtarget() const {
|
|
return Subtarget;
|
|
return Subtarget;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -708,12 +708,12 @@ bool SITargetLowering::getTgtMemIntrinsic(IntrinsicInfo &Info,
|
|
|
|
|
|
if (RsrcIntr->IsImage) {
|
|
if (RsrcIntr->IsImage) {
|
|
Info.ptrVal = MFI->getImagePSV(
|
|
Info.ptrVal = MFI->getImagePSV(
|
|
- *MF.getSubtarget<SISubtarget>().getInstrInfo(),
|
|
|
|
|
|
+ *MF.getSubtarget<GCNSubtarget>().getInstrInfo(),
|
|
CI.getArgOperand(RsrcIntr->RsrcArg));
|
|
CI.getArgOperand(RsrcIntr->RsrcArg));
|
|
Info.align = 0;
|
|
Info.align = 0;
|
|
} else {
|
|
} else {
|
|
Info.ptrVal = MFI->getBufferPSV(
|
|
Info.ptrVal = MFI->getBufferPSV(
|
|
- *MF.getSubtarget<SISubtarget>().getInstrInfo(),
|
|
|
|
|
|
+ *MF.getSubtarget<GCNSubtarget>().getInstrInfo(),
|
|
CI.getArgOperand(RsrcIntr->RsrcArg));
|
|
CI.getArgOperand(RsrcIntr->RsrcArg));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -877,16 +877,16 @@ bool SITargetLowering::isLegalAddressingMode(const DataLayout &DL,
|
|
if (Ty->isSized() && DL.getTypeStoreSize(Ty) < 4)
|
|
if (Ty->isSized() && DL.getTypeStoreSize(Ty) < 4)
|
|
return isLegalGlobalAddressingMode(AM);
|
|
return isLegalGlobalAddressingMode(AM);
|
|
|
|
|
|
- if (Subtarget->getGeneration() == SISubtarget::SOUTHERN_ISLANDS) {
|
|
|
|
|
|
+ if (Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS) {
|
|
// SMRD instructions have an 8-bit, dword offset on SI.
|
|
// SMRD instructions have an 8-bit, dword offset on SI.
|
|
if (!isUInt<8>(AM.BaseOffs / 4))
|
|
if (!isUInt<8>(AM.BaseOffs / 4))
|
|
return false;
|
|
return false;
|
|
- } else if (Subtarget->getGeneration() == SISubtarget::SEA_ISLANDS) {
|
|
|
|
|
|
+ } else if (Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS) {
|
|
// On CI+, this can also be a 32-bit literal constant offset. If it fits
|
|
// On CI+, this can also be a 32-bit literal constant offset. If it fits
|
|
// in 8-bits, it can use a smaller encoding.
|
|
// in 8-bits, it can use a smaller encoding.
|
|
if (!isUInt<32>(AM.BaseOffs / 4))
|
|
if (!isUInt<32>(AM.BaseOffs / 4))
|
|
return false;
|
|
return false;
|
|
- } else if (Subtarget->getGeneration() >= SISubtarget::VOLCANIC_ISLANDS) {
|
|
|
|
|
|
+ } else if (Subtarget->getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS) {
|
|
// On VI, these use the SMEM format and the offset is 20-bit in bytes.
|
|
// On VI, these use the SMEM format and the offset is 20-bit in bytes.
|
|
if (!isUInt<20>(AM.BaseOffs))
|
|
if (!isUInt<20>(AM.BaseOffs))
|
|
return false;
|
|
return false;
|
|
@@ -1560,7 +1560,7 @@ static void reservePrivateMemoryRegs(const TargetMachine &TM,
|
|
// the scratch registers to pass in.
|
|
// the scratch registers to pass in.
|
|
bool RequiresStackAccess = HasStackObjects || MFI.hasCalls();
|
|
bool RequiresStackAccess = HasStackObjects || MFI.hasCalls();
|
|
|
|
|
|
- const SISubtarget &ST = MF.getSubtarget<SISubtarget>();
|
|
|
|
|
|
+ const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
|
|
if (ST.isAmdCodeObjectV2(MF.getFunction())) {
|
|
if (ST.isAmdCodeObjectV2(MF.getFunction())) {
|
|
if (RequiresStackAccess) {
|
|
if (RequiresStackAccess) {
|
|
// If we have stack objects, we unquestionably need the private buffer
|
|
// If we have stack objects, we unquestionably need the private buffer
|
|
@@ -1676,7 +1676,7 @@ SDValue SITargetLowering::LowerFormalArguments(
|
|
const Function &Fn = MF.getFunction();
|
|
const Function &Fn = MF.getFunction();
|
|
FunctionType *FType = MF.getFunction().getFunctionType();
|
|
FunctionType *FType = MF.getFunction().getFunctionType();
|
|
SIMachineFunctionInfo *Info = MF.getInfo<SIMachineFunctionInfo>();
|
|
SIMachineFunctionInfo *Info = MF.getInfo<SIMachineFunctionInfo>();
|
|
- const SISubtarget &ST = MF.getSubtarget<SISubtarget>();
|
|
|
|
|
|
+ const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
|
|
|
|
|
|
if (Subtarget->isAmdHsaOS() && AMDGPU::isShader(CallConv)) {
|
|
if (Subtarget->isAmdHsaOS() && AMDGPU::isShader(CallConv)) {
|
|
DiagnosticInfoUnsupported NoGraphicsHSA(
|
|
DiagnosticInfoUnsupported NoGraphicsHSA(
|
|
@@ -1808,7 +1808,7 @@ SDValue SITargetLowering::LowerFormalArguments(
|
|
|
|
|
|
auto *ParamTy =
|
|
auto *ParamTy =
|
|
dyn_cast<PointerType>(FType->getParamType(Ins[i].getOrigArgIndex()));
|
|
dyn_cast<PointerType>(FType->getParamType(Ins[i].getOrigArgIndex()));
|
|
- if (Subtarget->getGeneration() == SISubtarget::SOUTHERN_ISLANDS &&
|
|
|
|
|
|
+ if (Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS &&
|
|
ParamTy && ParamTy->getAddressSpace() == AMDGPUAS::LOCAL_ADDRESS) {
|
|
ParamTy && ParamTy->getAddressSpace() == AMDGPUAS::LOCAL_ADDRESS) {
|
|
// On SI local pointers are just offsets into LDS, so they are always
|
|
// On SI local pointers are just offsets into LDS, so they are always
|
|
// less than 16-bits. On CI and newer they could potentially be
|
|
// less than 16-bits. On CI and newer they could potentially be
|
|
@@ -2668,7 +2668,7 @@ unsigned SITargetLowering::getRegisterByName(const char* RegName, EVT VT,
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if (Subtarget->getGeneration() == SISubtarget::SOUTHERN_ISLANDS &&
|
|
|
|
|
|
+ if (Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS &&
|
|
Subtarget->getRegisterInfo()->regsOverlap(Reg, AMDGPU::FLAT_SCR)) {
|
|
Subtarget->getRegisterInfo()->regsOverlap(Reg, AMDGPU::FLAT_SCR)) {
|
|
report_fatal_error(Twine("invalid register \""
|
|
report_fatal_error(Twine("invalid register \""
|
|
+ StringRef(RegName) + "\" for subtarget."));
|
|
+ StringRef(RegName) + "\" for subtarget."));
|
|
@@ -2959,7 +2959,7 @@ static bool setM0ToIndexFromSGPR(const SIInstrInfo *TII,
|
|
// Control flow needs to be inserted if indexing with a VGPR.
|
|
// Control flow needs to be inserted if indexing with a VGPR.
|
|
static MachineBasicBlock *emitIndirectSrc(MachineInstr &MI,
|
|
static MachineBasicBlock *emitIndirectSrc(MachineInstr &MI,
|
|
MachineBasicBlock &MBB,
|
|
MachineBasicBlock &MBB,
|
|
- const SISubtarget &ST) {
|
|
|
|
|
|
+ const GCNSubtarget &ST) {
|
|
const SIInstrInfo *TII = ST.getInstrInfo();
|
|
const SIInstrInfo *TII = ST.getInstrInfo();
|
|
const SIRegisterInfo &TRI = TII->getRegisterInfo();
|
|
const SIRegisterInfo &TRI = TII->getRegisterInfo();
|
|
MachineFunction *MF = MBB.getParent();
|
|
MachineFunction *MF = MBB.getParent();
|
|
@@ -3050,7 +3050,7 @@ static unsigned getMOVRELDPseudo(const SIRegisterInfo &TRI,
|
|
|
|
|
|
static MachineBasicBlock *emitIndirectDst(MachineInstr &MI,
|
|
static MachineBasicBlock *emitIndirectDst(MachineInstr &MI,
|
|
MachineBasicBlock &MBB,
|
|
MachineBasicBlock &MBB,
|
|
- const SISubtarget &ST) {
|
|
|
|
|
|
+ const GCNSubtarget &ST) {
|
|
const SIInstrInfo *TII = ST.getInstrInfo();
|
|
const SIInstrInfo *TII = ST.getInstrInfo();
|
|
const SIRegisterInfo &TRI = TII->getRegisterInfo();
|
|
const SIRegisterInfo &TRI = TII->getRegisterInfo();
|
|
MachineFunction *MF = MBB.getParent();
|
|
MachineFunction *MF = MBB.getParent();
|
|
@@ -3964,7 +3964,7 @@ SDValue SITargetLowering::lowerTRAP(SDValue Op, SelectionDAG &DAG) const {
|
|
SDLoc SL(Op);
|
|
SDLoc SL(Op);
|
|
SDValue Chain = Op.getOperand(0);
|
|
SDValue Chain = Op.getOperand(0);
|
|
|
|
|
|
- if (Subtarget->getTrapHandlerAbi() != SISubtarget::TrapHandlerAbiHsa ||
|
|
|
|
|
|
+ if (Subtarget->getTrapHandlerAbi() != GCNSubtarget::TrapHandlerAbiHsa ||
|
|
!Subtarget->isTrapHandlerEnabled())
|
|
!Subtarget->isTrapHandlerEnabled())
|
|
return DAG.getNode(AMDGPUISD::ENDPGM, SL, MVT::Other, Chain);
|
|
return DAG.getNode(AMDGPUISD::ENDPGM, SL, MVT::Other, Chain);
|
|
|
|
|
|
@@ -3979,7 +3979,7 @@ SDValue SITargetLowering::lowerTRAP(SDValue Op, SelectionDAG &DAG) const {
|
|
QueuePtr, SDValue());
|
|
QueuePtr, SDValue());
|
|
SDValue Ops[] = {
|
|
SDValue Ops[] = {
|
|
ToReg,
|
|
ToReg,
|
|
- DAG.getTargetConstant(SISubtarget::TrapIDLLVMTrap, SL, MVT::i16),
|
|
|
|
|
|
+ DAG.getTargetConstant(GCNSubtarget::TrapIDLLVMTrap, SL, MVT::i16),
|
|
SGPR01,
|
|
SGPR01,
|
|
ToReg.getValue(1)
|
|
ToReg.getValue(1)
|
|
};
|
|
};
|
|
@@ -3991,7 +3991,7 @@ SDValue SITargetLowering::lowerDEBUGTRAP(SDValue Op, SelectionDAG &DAG) const {
|
|
SDValue Chain = Op.getOperand(0);
|
|
SDValue Chain = Op.getOperand(0);
|
|
MachineFunction &MF = DAG.getMachineFunction();
|
|
MachineFunction &MF = DAG.getMachineFunction();
|
|
|
|
|
|
- if (Subtarget->getTrapHandlerAbi() != SISubtarget::TrapHandlerAbiHsa ||
|
|
|
|
|
|
+ if (Subtarget->getTrapHandlerAbi() != GCNSubtarget::TrapHandlerAbiHsa ||
|
|
!Subtarget->isTrapHandlerEnabled()) {
|
|
!Subtarget->isTrapHandlerEnabled()) {
|
|
DiagnosticInfoUnsupported NoTrap(MF.getFunction(),
|
|
DiagnosticInfoUnsupported NoTrap(MF.getFunction(),
|
|
"debugtrap handler not supported",
|
|
"debugtrap handler not supported",
|
|
@@ -4004,7 +4004,7 @@ SDValue SITargetLowering::lowerDEBUGTRAP(SDValue Op, SelectionDAG &DAG) const {
|
|
|
|
|
|
SDValue Ops[] = {
|
|
SDValue Ops[] = {
|
|
Chain,
|
|
Chain,
|
|
- DAG.getTargetConstant(SISubtarget::TrapIDLLVMDebugTrap, SL, MVT::i16)
|
|
|
|
|
|
+ DAG.getTargetConstant(GCNSubtarget::TrapIDLLVMDebugTrap, SL, MVT::i16)
|
|
};
|
|
};
|
|
return DAG.getNode(AMDGPUISD::TRAP, SL, MVT::Other, Ops);
|
|
return DAG.getNode(AMDGPUISD::TRAP, SL, MVT::Other, Ops);
|
|
}
|
|
}
|
|
@@ -4513,7 +4513,7 @@ SDValue SITargetLowering::lowerImage(SDValue Op,
|
|
|
|
|
|
MVT StoreVT = VData.getSimpleValueType();
|
|
MVT StoreVT = VData.getSimpleValueType();
|
|
if (StoreVT.getScalarType() == MVT::f16) {
|
|
if (StoreVT.getScalarType() == MVT::f16) {
|
|
- if (Subtarget->getGeneration() < SISubtarget::VOLCANIC_ISLANDS ||
|
|
|
|
|
|
+ if (Subtarget->getGeneration() < AMDGPUSubtarget::VOLCANIC_ISLANDS ||
|
|
!BaseOpcode->HasD16)
|
|
!BaseOpcode->HasD16)
|
|
return Op; // D16 is unsupported for this instruction
|
|
return Op; // D16 is unsupported for this instruction
|
|
|
|
|
|
@@ -4526,7 +4526,7 @@ SDValue SITargetLowering::lowerImage(SDValue Op,
|
|
} else {
|
|
} else {
|
|
MVT LoadVT = Op.getSimpleValueType();
|
|
MVT LoadVT = Op.getSimpleValueType();
|
|
if (LoadVT.getScalarType() == MVT::f16) {
|
|
if (LoadVT.getScalarType() == MVT::f16) {
|
|
- if (Subtarget->getGeneration() < SISubtarget::VOLCANIC_ISLANDS ||
|
|
|
|
|
|
+ if (Subtarget->getGeneration() < AMDGPUSubtarget::VOLCANIC_ISLANDS ||
|
|
!BaseOpcode->HasD16)
|
|
!BaseOpcode->HasD16)
|
|
return Op; // D16 is unsupported for this instruction
|
|
return Op; // D16 is unsupported for this instruction
|
|
|
|
|
|
@@ -4620,7 +4620,7 @@ SDValue SITargetLowering::lowerImage(SDValue Op,
|
|
int NumVAddrDwords = VAddr.getValueType().getSizeInBits() / 32;
|
|
int NumVAddrDwords = VAddr.getValueType().getSizeInBits() / 32;
|
|
int Opcode = -1;
|
|
int Opcode = -1;
|
|
|
|
|
|
- if (Subtarget->getGeneration() >= SISubtarget::VOLCANIC_ISLANDS)
|
|
|
|
|
|
+ if (Subtarget->getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS)
|
|
Opcode = AMDGPU::getMIMGOpcode(Intr->BaseOpcode, AMDGPU::MIMGEncGfx8,
|
|
Opcode = AMDGPU::getMIMGOpcode(Intr->BaseOpcode, AMDGPU::MIMGEncGfx8,
|
|
NumVDataDwords, NumVAddrDwords);
|
|
NumVDataDwords, NumVAddrDwords);
|
|
if (Opcode == -1)
|
|
if (Opcode == -1)
|
|
@@ -4699,16 +4699,16 @@ SDValue SITargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
|
|
case Intrinsic::amdgcn_rsq:
|
|
case Intrinsic::amdgcn_rsq:
|
|
return DAG.getNode(AMDGPUISD::RSQ, DL, VT, Op.getOperand(1));
|
|
return DAG.getNode(AMDGPUISD::RSQ, DL, VT, Op.getOperand(1));
|
|
case Intrinsic::amdgcn_rsq_legacy:
|
|
case Intrinsic::amdgcn_rsq_legacy:
|
|
- if (Subtarget->getGeneration() >= SISubtarget::VOLCANIC_ISLANDS)
|
|
|
|
|
|
+ if (Subtarget->getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS)
|
|
return emitRemovedIntrinsicError(DAG, DL, VT);
|
|
return emitRemovedIntrinsicError(DAG, DL, VT);
|
|
|
|
|
|
return DAG.getNode(AMDGPUISD::RSQ_LEGACY, DL, VT, Op.getOperand(1));
|
|
return DAG.getNode(AMDGPUISD::RSQ_LEGACY, DL, VT, Op.getOperand(1));
|
|
case Intrinsic::amdgcn_rcp_legacy:
|
|
case Intrinsic::amdgcn_rcp_legacy:
|
|
- if (Subtarget->getGeneration() >= SISubtarget::VOLCANIC_ISLANDS)
|
|
|
|
|
|
+ if (Subtarget->getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS)
|
|
return emitRemovedIntrinsicError(DAG, DL, VT);
|
|
return emitRemovedIntrinsicError(DAG, DL, VT);
|
|
return DAG.getNode(AMDGPUISD::RCP_LEGACY, DL, VT, Op.getOperand(1));
|
|
return DAG.getNode(AMDGPUISD::RCP_LEGACY, DL, VT, Op.getOperand(1));
|
|
case Intrinsic::amdgcn_rsq_clamp: {
|
|
case Intrinsic::amdgcn_rsq_clamp: {
|
|
- if (Subtarget->getGeneration() < SISubtarget::VOLCANIC_ISLANDS)
|
|
|
|
|
|
+ if (Subtarget->getGeneration() < AMDGPUSubtarget::VOLCANIC_ISLANDS)
|
|
return DAG.getNode(AMDGPUISD::RSQ_CLAMP, DL, VT, Op.getOperand(1));
|
|
return DAG.getNode(AMDGPUISD::RSQ_CLAMP, DL, VT, Op.getOperand(1));
|
|
|
|
|
|
Type *Type = VT.getTypeForEVT(*DAG.getContext());
|
|
Type *Type = VT.getTypeForEVT(*DAG.getContext());
|
|
@@ -4845,7 +4845,7 @@ SDValue SITargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
|
|
return DAG.getNode(AMDGPUISD::COS_HW, DL, VT, Op.getOperand(1));
|
|
return DAG.getNode(AMDGPUISD::COS_HW, DL, VT, Op.getOperand(1));
|
|
|
|
|
|
case Intrinsic::amdgcn_log_clamp: {
|
|
case Intrinsic::amdgcn_log_clamp: {
|
|
- if (Subtarget->getGeneration() < SISubtarget::VOLCANIC_ISLANDS)
|
|
|
|
|
|
+ if (Subtarget->getGeneration() < AMDGPUSubtarget::VOLCANIC_ISLANDS)
|
|
return SDValue();
|
|
return SDValue();
|
|
|
|
|
|
DiagnosticInfoUnsupported BadIntrin(
|
|
DiagnosticInfoUnsupported BadIntrin(
|
|
@@ -5278,7 +5278,7 @@ SDValue SITargetLowering::LowerINTRINSIC_VOID(SDValue Op,
|
|
}
|
|
}
|
|
case Intrinsic::amdgcn_s_barrier: {
|
|
case Intrinsic::amdgcn_s_barrier: {
|
|
if (getTargetMachine().getOptLevel() > CodeGenOpt::None) {
|
|
if (getTargetMachine().getOptLevel() > CodeGenOpt::None) {
|
|
- const SISubtarget &ST = MF.getSubtarget<SISubtarget>();
|
|
|
|
|
|
+ const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
|
|
unsigned WGSize = ST.getFlatWorkGroupSizes(MF.getFunction()).second;
|
|
unsigned WGSize = ST.getFlatWorkGroupSizes(MF.getFunction()).second;
|
|
if (WGSize <= ST.getWavefrontSize())
|
|
if (WGSize <= ST.getWavefrontSize())
|
|
return SDValue(DAG.getMachineNode(AMDGPU::WAVE_BARRIER, DL, MVT::Other,
|
|
return SDValue(DAG.getMachineNode(AMDGPU::WAVE_BARRIER, DL, MVT::Other,
|
|
@@ -5889,7 +5889,7 @@ SDValue SITargetLowering::LowerFDIV64(SDValue Op, SelectionDAG &DAG) const {
|
|
|
|
|
|
SDValue Scale;
|
|
SDValue Scale;
|
|
|
|
|
|
- if (Subtarget->getGeneration() == SISubtarget::SOUTHERN_ISLANDS) {
|
|
|
|
|
|
+ if (Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS) {
|
|
// Workaround a hardware bug on SI where the condition output from div_scale
|
|
// Workaround a hardware bug on SI where the condition output from div_scale
|
|
// is not usable.
|
|
// is not usable.
|
|
|
|
|
|
@@ -6709,7 +6709,7 @@ static bool isKnownNeverSNan(SelectionDAG &DAG, SDValue Op) {
|
|
}
|
|
}
|
|
|
|
|
|
static bool isCanonicalized(SelectionDAG &DAG, SDValue Op,
|
|
static bool isCanonicalized(SelectionDAG &DAG, SDValue Op,
|
|
- const SISubtarget *ST, unsigned MaxDepth=5) {
|
|
|
|
|
|
+ const GCNSubtarget *ST, unsigned MaxDepth=5) {
|
|
// If source is a result of another standard FP operation it is already in
|
|
// If source is a result of another standard FP operation it is already in
|
|
// canonical form.
|
|
// canonical form.
|
|
|
|
|
|
@@ -8296,7 +8296,7 @@ bool SITargetLowering::isSDNodeSourceOfDivergence(const SDNode * N,
|
|
if (R)
|
|
if (R)
|
|
{
|
|
{
|
|
const MachineFunction * MF = FLI->MF;
|
|
const MachineFunction * MF = FLI->MF;
|
|
- const SISubtarget &ST = MF->getSubtarget<SISubtarget>();
|
|
|
|
|
|
+ const GCNSubtarget &ST = MF->getSubtarget<GCNSubtarget>();
|
|
const MachineRegisterInfo &MRI = MF->getRegInfo();
|
|
const MachineRegisterInfo &MRI = MF->getRegInfo();
|
|
const SIRegisterInfo &TRI = ST.getInstrInfo()->getRegisterInfo();
|
|
const SIRegisterInfo &TRI = ST.getInstrInfo()->getRegisterInfo();
|
|
unsigned Reg = R->getReg();
|
|
unsigned Reg = R->getReg();
|