Skip to content

Commit b4286f2

Browse files
committed
Merging r248858:
------------------------------------------------------------------------ r248858 | marek.olsak | 2015-09-29 19:37:32 -0400 (Tue, 29 Sep 2015) | 9 lines AMDGPU/SI: Don't set DATA_FORMAT if ADD_TID_ENABLE is set to prevent setting a huge stride, because DATA_FORMAT has a different meaning if ADD_TID_ENABLE is set. This is a candidate for stable llvm 3.7. Tested-and-Reviewed-by: Christian König <[email protected]> ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_37@253236 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 24b2348 commit b4286f2

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

lib/Target/AMDGPU/SIISelLowering.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2253,10 +2253,8 @@ MachineSDNode *SITargetLowering::buildScratchRSRC(SelectionDAG &DAG,
22532253
SDValue Ptr) const {
22542254
const SIInstrInfo *TII =
22552255
static_cast<const SIInstrInfo *>(Subtarget->getInstrInfo());
2256-
uint64_t Rsrc = TII->getDefaultRsrcDataFormat() | AMDGPU::RSRC_TID_ENABLE |
2257-
0xffffffff; // Size
22582256

2259-
return buildRSRC(DAG, DL, Ptr, 0, Rsrc);
2257+
return buildRSRC(DAG, DL, Ptr, 0, TII->getScratchRsrcWords23());
22602258
}
22612259

22622260
SDValue SITargetLowering::CreateLiveInRegister(SelectionDAG &DAG,

lib/Target/AMDGPU/SIInstrInfo.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2778,3 +2778,16 @@ uint64_t SIInstrInfo::getDefaultRsrcDataFormat() const {
27782778

27792779
return RsrcDataFormat;
27802780
}
2781+
2782+
uint64_t SIInstrInfo::getScratchRsrcWords23() const {
2783+
uint64_t Rsrc23 = getDefaultRsrcDataFormat() |
2784+
AMDGPU::RSRC_TID_ENABLE |
2785+
0xffffffff; // Size;
2786+
2787+
// If TID_ENABLE is set, DATA_FORMAT specifies stride bits [14:17].
2788+
// Clear them unless we want a huge stride.
2789+
if (ST.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS)
2790+
Rsrc23 &= ~AMDGPU::RSRC_DATA_FORMAT;
2791+
2792+
return Rsrc23;
2793+
}

lib/Target/AMDGPU/SIInstrInfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ class SIInstrInfo : public AMDGPUInstrInfo {
353353
}
354354

355355
uint64_t getDefaultRsrcDataFormat() const;
356-
356+
uint64_t getScratchRsrcWords23() const;
357357
};
358358

359359
namespace AMDGPU {

lib/Target/AMDGPU/SIPrepareScratchRegs.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,7 @@ bool SIPrepareScratchRegs::runOnMachineFunction(MachineFunction &MF) {
135135
unsigned ScratchRsrcReg =
136136
RS.scavengeRegister(&AMDGPU::SReg_128RegClass, 0);
137137

138-
uint64_t Rsrc = AMDGPU::RSRC_DATA_FORMAT | AMDGPU::RSRC_TID_ENABLE |
139-
0xffffffff; // Size
138+
uint64_t Rsrc23 = TII->getScratchRsrcWords23();
140139

141140
unsigned Rsrc0 = TRI->getSubReg(ScratchRsrcReg, AMDGPU::sub0);
142141
unsigned Rsrc1 = TRI->getSubReg(ScratchRsrcReg, AMDGPU::sub1);
@@ -152,11 +151,11 @@ bool SIPrepareScratchRegs::runOnMachineFunction(MachineFunction &MF) {
152151
.addReg(ScratchRsrcReg, RegState::ImplicitDefine);
153152

154153
BuildMI(MBB, I, DL, TII->get(AMDGPU::S_MOV_B32), Rsrc2)
155-
.addImm(Rsrc & 0xffffffff)
154+
.addImm(Rsrc23 & 0xffffffff)
156155
.addReg(ScratchRsrcReg, RegState::ImplicitDefine);
157156

158157
BuildMI(MBB, I, DL, TII->get(AMDGPU::S_MOV_B32), Rsrc3)
159-
.addImm(Rsrc >> 32)
158+
.addImm(Rsrc23 >> 32)
160159
.addReg(ScratchRsrcReg, RegState::ImplicitDefine);
161160

162161
// Scratch Offset

0 commit comments

Comments
 (0)