diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-10-17 17:42:56 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-10-17 17:42:56 +0000 |
| commit | 83a535ff6b8d53a9ad3e8cc17feb7dea39c0a6c7 (patch) | |
| tree | 0d3df56e1ccb303f32e1a488df42d34452a00484 /llvm/lib/Target/R600/AMDGPUISelDAGToDAG.cpp | |
| parent | ad2363f9ee845c682155858f4a9c114b47b640a3 (diff) | |
| download | bcm5719-llvm-83a535ff6b8d53a9ad3e8cc17feb7dea39c0a6c7.tar.gz bcm5719-llvm-83a535ff6b8d53a9ad3e8cc17feb7dea39c0a6c7.zip | |
R600/SI: Remove SI_BUFFER_RSRC pseudo
Just use REG_SEQUENCE directly, so there are fewer
instructions to need to deal with later.
llvm-svn: 220056
Diffstat (limited to 'llvm/lib/Target/R600/AMDGPUISelDAGToDAG.cpp')
| -rw-r--r-- | llvm/lib/Target/R600/AMDGPUISelDAGToDAG.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/llvm/lib/Target/R600/AMDGPUISelDAGToDAG.cpp b/llvm/lib/Target/R600/AMDGPUISelDAGToDAG.cpp index c7539716597..8a9340289d8 100644 --- a/llvm/lib/Target/R600/AMDGPUISelDAGToDAG.cpp +++ b/llvm/lib/Target/R600/AMDGPUISelDAGToDAG.cpp @@ -944,21 +944,38 @@ bool AMDGPUDAGToDAGISel::SelectMUBUFAddr64(SDValue Addr, SDValue &SRsrc, return SelectMUBUFAddr64(Addr, SRsrc, VAddr, Offset); } +static SDValue buildSMovImm32(SelectionDAG *DAG, SDLoc DL, uint64_t Val) { + SDValue K = DAG->getTargetConstant(Val, MVT::i32); + return SDValue(DAG->getMachineNode(AMDGPU::S_MOV_B32, DL, MVT::i32, K), 0); +} + static SDValue buildRSRC(SelectionDAG *DAG, SDLoc DL, SDValue Ptr, uint32_t RsrcDword1, uint64_t RsrcDword2And3) { SDValue PtrLo = DAG->getTargetExtractSubreg(AMDGPU::sub0, DL, MVT::i32, Ptr); SDValue PtrHi = DAG->getTargetExtractSubreg(AMDGPU::sub1, DL, MVT::i32, Ptr); - if (RsrcDword1) + if (RsrcDword1) { PtrHi = SDValue(DAG->getMachineNode(AMDGPU::S_OR_B32, DL, MVT::i32, PtrHi, DAG->getConstant(RsrcDword1, MVT::i32)), 0); + } - SDValue DataLo = DAG->getTargetConstant( - RsrcDword2And3 & APInt::getAllOnesValue(32).getZExtValue(), MVT::i32); - SDValue DataHi = DAG->getTargetConstant(RsrcDword2And3 >> 32, MVT::i32); + SDValue DataLo = buildSMovImm32(DAG, DL, + RsrcDword2And3 & UINT64_C(0xFFFFFFFF)); + SDValue DataHi = buildSMovImm32(DAG, DL, RsrcDword2And3 >> 32); + + const SDValue Ops[] = { + DAG->getTargetConstant(AMDGPU::SReg_128RegClassID, MVT::i32), + PtrLo, + DAG->getTargetConstant(AMDGPU::sub0, MVT::i32), + PtrHi, + DAG->getTargetConstant(AMDGPU::sub1, MVT::i32), + DataLo, + DAG->getTargetConstant(AMDGPU::sub2, MVT::i32), + DataHi, + DAG->getTargetConstant(AMDGPU::sub3, MVT::i32) + }; - const SDValue Ops[] = { PtrLo, PtrHi, DataLo, DataHi }; - return SDValue(DAG->getMachineNode(AMDGPU::SI_BUFFER_RSRC, DL, + return SDValue(DAG->getMachineNode(AMDGPU::REG_SEQUENCE, DL, MVT::v4i32, Ops), 0); } |

