mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
R600: Add support for indirect addressing of non default const buffer
NOTE: This is a candidate for the Mesa stable branch. llvm-svn: 176484
This commit is contained in:
parent
a707dc5c34
commit
484e21aa38
@ -918,7 +918,8 @@ SDValue R600TargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const
|
||||
if (ConstantBlock > -1) {
|
||||
SDValue Result;
|
||||
if (dyn_cast<ConstantExpr>(LoadNode->getSrcValue()) ||
|
||||
dyn_cast<Constant>(LoadNode->getSrcValue())) {
|
||||
dyn_cast<Constant>(LoadNode->getSrcValue()) ||
|
||||
dyn_cast<ConstantSDNode>(Ptr)) {
|
||||
SDValue Slots[4];
|
||||
for (unsigned i = 0; i < 4; i++) {
|
||||
// We want Const position encoded with the following formula :
|
||||
@ -934,7 +935,8 @@ SDValue R600TargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const
|
||||
} else {
|
||||
// non constant ptr cant be folded, keeps it as a v4f32 load
|
||||
Result = DAG.getNode(AMDGPUISD::CONST_ADDRESS, DL, MVT::v4i32,
|
||||
DAG.getNode(ISD::SRL, DL, MVT::i32, Ptr, DAG.getConstant(4, MVT::i32))
|
||||
DAG.getNode(ISD::SRL, DL, MVT::i32, Ptr, DAG.getConstant(4, MVT::i32)),
|
||||
DAG.getConstant(LoadNode->getAddressSpace() - 9, MVT::i32)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -512,8 +512,8 @@ def INTERP_PAIR_ZW : AMDGPUShaderInst <
|
||||
[]>;
|
||||
|
||||
def CONST_ADDRESS: SDNode<"AMDGPUISD::CONST_ADDRESS",
|
||||
SDTypeProfile<1, 1, [SDTCisInt<0>, SDTCisPtrTy<1>]>,
|
||||
[SDNPMayLoad]
|
||||
SDTypeProfile<1, -1, [SDTCisInt<0>, SDTCisPtrTy<1>]>,
|
||||
[SDNPMayLoad, SDNPVariadic]
|
||||
>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -1663,14 +1663,13 @@ def CONST_COPY : Instruction {
|
||||
} // end isCodeGenOnly = 1, isPseudo = 1, Namespace = "AMDGPU"
|
||||
|
||||
def TEX_VTX_CONSTBUF :
|
||||
InstR600ISA <(outs R600_Reg128:$dst), (ins MEMxi:$ptr), "VTX_READ_eg $dst, $ptr",
|
||||
[(set R600_Reg128:$dst, (CONST_ADDRESS ADDRGA_VAR_OFFSET:$ptr))]>,
|
||||
InstR600ISA <(outs R600_Reg128:$dst), (ins MEMxi:$ptr, i32imm:$BUFFER_ID), "VTX_READ_eg $dst, $ptr",
|
||||
[(set R600_Reg128:$dst, (CONST_ADDRESS ADDRGA_VAR_OFFSET:$ptr, (i32 imm:$BUFFER_ID)))]>,
|
||||
VTX_WORD1_GPR, VTX_WORD0 {
|
||||
|
||||
let VC_INST = 0;
|
||||
let FETCH_TYPE = 2;
|
||||
let FETCH_WHOLE_QUAD = 0;
|
||||
let BUFFER_ID = 0;
|
||||
let SRC_REL = 0;
|
||||
let SRC_SEL_X = 0;
|
||||
let DST_REL = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user