forked from OSchip/llvm-project
Revert "R600: Move code for generating REGISTER_LOAD into R600ISelLowering.cpp"
This reverts commit r214566. I did not mean to commit this yet. llvm-svn: 214572
This commit is contained in:
parent
6a2de90039
commit
4973a13680
|
@ -1285,7 +1285,43 @@ SDValue AMDGPUTargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
||||||
return DAG.getMergeValues(Ops, DL);
|
return DAG.getMergeValues(Ops, DL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SDValue();
|
if (Load->getAddressSpace() != AMDGPUAS::PRIVATE_ADDRESS ||
|
||||||
|
ExtType == ISD::NON_EXTLOAD || Load->getMemoryVT().bitsGE(MVT::i32))
|
||||||
|
return SDValue();
|
||||||
|
|
||||||
|
|
||||||
|
SDValue Ptr = DAG.getNode(ISD::SRL, DL, MVT::i32, Load->getBasePtr(),
|
||||||
|
DAG.getConstant(2, MVT::i32));
|
||||||
|
SDValue Ret = DAG.getNode(AMDGPUISD::REGISTER_LOAD, DL, Op.getValueType(),
|
||||||
|
Load->getChain(), Ptr,
|
||||||
|
DAG.getTargetConstant(0, MVT::i32),
|
||||||
|
Op.getOperand(2));
|
||||||
|
SDValue ByteIdx = DAG.getNode(ISD::AND, DL, MVT::i32,
|
||||||
|
Load->getBasePtr(),
|
||||||
|
DAG.getConstant(0x3, MVT::i32));
|
||||||
|
SDValue ShiftAmt = DAG.getNode(ISD::SHL, DL, MVT::i32, ByteIdx,
|
||||||
|
DAG.getConstant(3, MVT::i32));
|
||||||
|
|
||||||
|
Ret = DAG.getNode(ISD::SRL, DL, MVT::i32, Ret, ShiftAmt);
|
||||||
|
|
||||||
|
EVT MemEltVT = MemVT.getScalarType();
|
||||||
|
if (ExtType == ISD::SEXTLOAD) {
|
||||||
|
SDValue MemEltVTNode = DAG.getValueType(MemEltVT);
|
||||||
|
|
||||||
|
SDValue Ops[] = {
|
||||||
|
DAG.getNode(ISD::SIGN_EXTEND_INREG, DL, MVT::i32, Ret, MemEltVTNode),
|
||||||
|
Load->getChain()
|
||||||
|
};
|
||||||
|
|
||||||
|
return DAG.getMergeValues(Ops, DL);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDValue Ops[] = {
|
||||||
|
DAG.getZeroExtendInReg(Ret, DL, MemEltVT),
|
||||||
|
Load->getChain()
|
||||||
|
};
|
||||||
|
|
||||||
|
return DAG.getMergeValues(Ops, DL);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDValue AMDGPUTargetLowering::LowerSTORE(SDValue Op, SelectionDAG &DAG) const {
|
SDValue AMDGPUTargetLowering::LowerSTORE(SDValue Op, SelectionDAG &DAG) const {
|
||||||
|
|
|
@ -1514,8 +1514,6 @@ SDValue R600TargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const
|
||||||
EVT VT = Op.getValueType();
|
EVT VT = Op.getValueType();
|
||||||
SDLoc DL(Op);
|
SDLoc DL(Op);
|
||||||
LoadSDNode *LoadNode = cast<LoadSDNode>(Op);
|
LoadSDNode *LoadNode = cast<LoadSDNode>(Op);
|
||||||
ISD::LoadExtType ExtType = LoadNode->getExtensionType();
|
|
||||||
EVT MemVT = LoadNode->getMemoryVT();
|
|
||||||
SDValue Chain = Op.getOperand(0);
|
SDValue Chain = Op.getOperand(0);
|
||||||
SDValue Ptr = Op.getOperand(1);
|
SDValue Ptr = Op.getOperand(1);
|
||||||
SDValue LoweredLoad;
|
SDValue LoweredLoad;
|
||||||
|
@ -1529,45 +1527,6 @@ SDValue R600TargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const
|
||||||
return DAG.getMergeValues(Ops, DL);
|
return DAG.getMergeValues(Ops, DL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle ext private loads
|
|
||||||
if (LoadNode->getAddressSpace() == AMDGPUAS::PRIVATE_ADDRESS &&
|
|
||||||
ExtType != ISD::NON_EXTLOAD && LoadNode->getMemoryVT().bitsLT(MVT::i32)) {
|
|
||||||
|
|
||||||
|
|
||||||
SDValue Ptr = DAG.getNode(ISD::SRL, DL, MVT::i32, LoadNode->getBasePtr(),
|
|
||||||
DAG.getConstant(2, MVT::i32));
|
|
||||||
SDValue Ret = DAG.getNode(AMDGPUISD::REGISTER_LOAD, DL, Op.getValueType(),
|
|
||||||
LoadNode->getChain(), Ptr,
|
|
||||||
DAG.getTargetConstant(0, MVT::i32),
|
|
||||||
Op.getOperand(2));
|
|
||||||
SDValue ByteIdx = DAG.getNode(ISD::AND, DL, MVT::i32,
|
|
||||||
LoadNode->getBasePtr(),
|
|
||||||
DAG.getConstant(0x3, MVT::i32));
|
|
||||||
SDValue ShiftAmt = DAG.getNode(ISD::SHL, DL, MVT::i32, ByteIdx,
|
|
||||||
DAG.getConstant(3, MVT::i32));
|
|
||||||
|
|
||||||
Ret = DAG.getNode(ISD::SRL, DL, MVT::i32, Ret, ShiftAmt);
|
|
||||||
|
|
||||||
EVT MemEltVT = MemVT.getScalarType();
|
|
||||||
if (ExtType == ISD::SEXTLOAD) {
|
|
||||||
SDValue MemEltVTNode = DAG.getValueType(MemEltVT);
|
|
||||||
|
|
||||||
SDValue Ops[] = {
|
|
||||||
DAG.getNode(ISD::SIGN_EXTEND_INREG, DL, MVT::i32, Ret, MemEltVTNode),
|
|
||||||
LoadNode->getChain()
|
|
||||||
};
|
|
||||||
|
|
||||||
return DAG.getMergeValues(Ops, DL);
|
|
||||||
}
|
|
||||||
|
|
||||||
SDValue Ops[] = {
|
|
||||||
DAG.getZeroExtendInReg(Ret, DL, MemEltVT),
|
|
||||||
LoadNode->getChain()
|
|
||||||
};
|
|
||||||
|
|
||||||
return DAG.getMergeValues(Ops, DL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lower loads constant address space global variable loads
|
// Lower loads constant address space global variable loads
|
||||||
if (LoadNode->getAddressSpace() == AMDGPUAS::CONSTANT_ADDRESS &&
|
if (LoadNode->getAddressSpace() == AMDGPUAS::CONSTANT_ADDRESS &&
|
||||||
isa<GlobalVariable>(
|
isa<GlobalVariable>(
|
||||||
|
|
|
@ -118,8 +118,7 @@ for.end:
|
||||||
|
|
||||||
; SI-PROMOTE: BUFFER_STORE_SHORT v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, s{{[0-9]+}}
|
; SI-PROMOTE: BUFFER_STORE_SHORT v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, s{{[0-9]+}}
|
||||||
; SI-PROMOTE: BUFFER_STORE_SHORT v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, s{{[0-9]+}}
|
; SI-PROMOTE: BUFFER_STORE_SHORT v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, s{{[0-9]+}}
|
||||||
; SI-PROMOTE-NOT: MOVREL
|
; SI_PROMOTE: BUFFER_LOAD_SSHORT v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}] + v{{[0-9]+}}, s{{[0-9]+}}
|
||||||
; SI-PROMOTE: BUFFER_LOAD_SSHORT v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}] + v{{[0-9]+}} + s{{[0-9]+}}
|
|
||||||
define void @short_array(i32 addrspace(1)* %out, i32 %index) {
|
define void @short_array(i32 addrspace(1)* %out, i32 %index) {
|
||||||
entry:
|
entry:
|
||||||
%0 = alloca [2 x i16]
|
%0 = alloca [2 x i16]
|
||||||
|
|
Loading…
Reference in New Issue