[PATCH] AMDGPU/SI: Don't set DATA_FORMAT if ADD_TID_ENABLE is set

Christian König via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 29 08:32:59 PDT 2015


On 29.09.2015 17:29, Tom Stellard via llvm-commits wrote:
> On Tue, Sep 29, 2015 at 04:56:53PM +0200, Marek Olšák via llvm-commits wrote:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> 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.
>> ---
>>   lib/Target/AMDGPU/SIISelLowering.cpp       |  4 +---
>>   lib/Target/AMDGPU/SIInstrInfo.cpp          | 14 ++++++++++++++
>>   lib/Target/AMDGPU/SIInstrInfo.h            |  2 +-
>>   lib/Target/AMDGPU/SIPrepareScratchRegs.cpp |  7 +++----
>>   4 files changed, 19 insertions(+), 8 deletions(-)
>>
>> diff --git a/lib/Target/AMDGPU/SIISelLowering.cpp b/lib/Target/AMDGPU/SIISelLowering.cpp
>> index 0bae789..b4b439c 100644
>> --- a/lib/Target/AMDGPU/SIISelLowering.cpp
>> +++ b/lib/Target/AMDGPU/SIISelLowering.cpp
>> @@ -2257,10 +2257,8 @@ MachineSDNode *SITargetLowering::buildScratchRSRC(SelectionDAG &DAG,
>>                                                     SDValue Ptr) const {
>>     const SIInstrInfo *TII =
>>         static_cast<const SIInstrInfo *>(Subtarget->getInstrInfo());
>> -  uint64_t Rsrc = TII->getDefaultRsrcDataFormat() | AMDGPU::RSRC_TID_ENABLE |
>> -                  0xffffffff; // Size
>>   
>> -  return buildRSRC(DAG, DL, Ptr, 0, Rsrc);
>> +  return buildRSRC(DAG, DL, Ptr, 0, TII->getScratchRsrcWords23());
>>   }
>>   
>>   SDValue SITargetLowering::CreateLiveInRegister(SelectionDAG &DAG,
>> diff --git a/lib/Target/AMDGPU/SIInstrInfo.cpp b/lib/Target/AMDGPU/SIInstrInfo.cpp
>> index b667dc2..7b10f32 100644
>> --- a/lib/Target/AMDGPU/SIInstrInfo.cpp
>> +++ b/lib/Target/AMDGPU/SIInstrInfo.cpp
>> @@ -2781,3 +2781,17 @@ uint64_t SIInstrInfo::getDefaultRsrcDataFormat() const {
>>   
>>     return RsrcDataFormat;
>>   }
>> +
>> +uint64_t SIInstrInfo::getScratchRsrcWords23() const {
>> +  uint64_t Rsrc23 = getDefaultRsrcDataFormat() |
>> +                    AMDGPU::RSRC_TID_ENABLE |
>> +                    0xffffffff; // Size;
>> +
>> +  /* If TID_ENABLE is set, DATA_FORMAT specifies stride bits [14:17].
>> +   * Clear them unless we want a huge stride.
>> +   */
> Need to use C++ comments: //
>
>
>> +  if (ST.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS)
>> +    Rsrc23 &= ~AMDGPU::RSRC_DATA_FORMAT;
>> +
> Is there a reason why we need to do this only for VI?

Yeah, that new encoding only applies for VI. SI/CIK don't have that 
feature of an extended stride.

Regards,
Christian.

>
> -Tom
>
>> +  return Rsrc23;
>> +}
>> diff --git a/lib/Target/AMDGPU/SIInstrInfo.h b/lib/Target/AMDGPU/SIInstrInfo.h
>> index f4b2f2d..ba8b89a 100644
>> --- a/lib/Target/AMDGPU/SIInstrInfo.h
>> +++ b/lib/Target/AMDGPU/SIInstrInfo.h
>> @@ -356,7 +356,7 @@ public:
>>     }
>>   
>>     uint64_t getDefaultRsrcDataFormat() const;
>> -
>> +  uint64_t getScratchRsrcWords23() const;
>>   };
>>   
>>   namespace AMDGPU {
>> diff --git a/lib/Target/AMDGPU/SIPrepareScratchRegs.cpp b/lib/Target/AMDGPU/SIPrepareScratchRegs.cpp
>> index f6e57a6..f4a5ac1 100644
>> --- a/lib/Target/AMDGPU/SIPrepareScratchRegs.cpp
>> +++ b/lib/Target/AMDGPU/SIPrepareScratchRegs.cpp
>> @@ -138,8 +138,7 @@ bool SIPrepareScratchRegs::runOnMachineFunction(MachineFunction &MF) {
>>         unsigned ScratchRsrcReg =
>>             RS.scavengeRegister(&AMDGPU::SReg_128RegClass, 0);
>>   
>> -      uint64_t Rsrc = AMDGPU::RSRC_DATA_FORMAT | AMDGPU::RSRC_TID_ENABLE |
>> -                      0xffffffff; // Size
>> +      uint64_t Rsrc23 = TII->getScratchRsrcWords23();
>>   
>>         unsigned Rsrc0 = TRI->getSubReg(ScratchRsrcReg, AMDGPU::sub0);
>>         unsigned Rsrc1 = TRI->getSubReg(ScratchRsrcReg, AMDGPU::sub1);
>> @@ -155,11 +154,11 @@ bool SIPrepareScratchRegs::runOnMachineFunction(MachineFunction &MF) {
>>                 .addReg(ScratchRsrcReg, RegState::ImplicitDefine);
>>   
>>         BuildMI(MBB, I, DL, TII->get(AMDGPU::S_MOV_B32), Rsrc2)
>> -              .addImm(Rsrc & 0xffffffff)
>> +              .addImm(Rsrc23 & 0xffffffff)
>>                 .addReg(ScratchRsrcReg, RegState::ImplicitDefine);
>>   
>>         BuildMI(MBB, I, DL, TII->get(AMDGPU::S_MOV_B32), Rsrc3)
>> -              .addImm(Rsrc >> 32)
>> +              .addImm(Rsrc23 >> 32)
>>                 .addReg(ScratchRsrcReg, RegState::ImplicitDefine);
>>   
>>         // Scratch Offset
>> -- 
>> 2.1.4
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list