@@ -494,8 +494,6 @@ static bool loadStoreBitcastWorkaround(const LLT Ty) {
494
494
return false ;
495
495
496
496
const unsigned Size = Ty.getSizeInBits ();
497
- if (Ty.isPointerVector ())
498
- return true ;
499
497
if (Size <= 64 )
500
498
return false ;
501
499
// Address space 8 pointers get their own workaround.
@@ -504,6 +502,9 @@ static bool loadStoreBitcastWorkaround(const LLT Ty) {
504
502
if (!Ty.isVector ())
505
503
return true ;
506
504
505
+ if (Ty.isPointerVector ())
506
+ return true ;
507
+
507
508
unsigned EltSize = Ty.getScalarSizeInBits ();
508
509
return EltSize != 32 && EltSize != 64 ;
509
510
}
@@ -5793,9 +5794,8 @@ Register AMDGPULegalizerInfo::handleD16VData(MachineIRBuilder &B,
5793
5794
return Reg;
5794
5795
}
5795
5796
5796
- Register AMDGPULegalizerInfo::fixStoreSourceType (MachineIRBuilder &B,
5797
- Register VData, LLT MemTy,
5798
- bool IsFormat) const {
5797
+ Register AMDGPULegalizerInfo::fixStoreSourceType (
5798
+ MachineIRBuilder &B, Register VData, bool IsFormat) const {
5799
5799
MachineRegisterInfo *MRI = B.getMRI ();
5800
5800
LLT Ty = MRI->getType (VData);
5801
5801
@@ -5805,10 +5805,6 @@ Register AMDGPULegalizerInfo::fixStoreSourceType(MachineIRBuilder &B,
5805
5805
if (hasBufferRsrcWorkaround (Ty))
5806
5806
return castBufferRsrcToV4I32 (VData, B);
5807
5807
5808
- if (shouldBitcastLoadStoreType (ST, Ty, MemTy)) {
5809
- Ty = getBitcastRegisterType (Ty);
5810
- VData = B.buildBitcast (Ty, VData).getReg (0 );
5811
- }
5812
5808
// Fixup illegal register types for i8 stores.
5813
5809
if (Ty == LLT::scalar (8 ) || Ty == S16) {
5814
5810
Register AnyExt = B.buildAnyExt (LLT::scalar (32 ), VData).getReg (0 );
@@ -5826,27 +5822,23 @@ Register AMDGPULegalizerInfo::fixStoreSourceType(MachineIRBuilder &B,
5826
5822
}
5827
5823
5828
5824
bool AMDGPULegalizerInfo::legalizeBufferStore (MachineInstr &MI,
5829
- LegalizerHelper &Helper,
5825
+ MachineRegisterInfo &MRI,
5826
+ MachineIRBuilder &B,
5830
5827
bool IsTyped,
5831
5828
bool IsFormat) const {
5832
- MachineIRBuilder &B = Helper.MIRBuilder ;
5833
- MachineRegisterInfo &MRI = *B.getMRI ();
5834
-
5835
5829
Register VData = MI.getOperand (1 ).getReg ();
5836
5830
LLT Ty = MRI.getType (VData);
5837
5831
LLT EltTy = Ty.getScalarType ();
5838
5832
const bool IsD16 = IsFormat && (EltTy.getSizeInBits () == 16 );
5839
5833
const LLT S32 = LLT::scalar (32 );
5840
5834
5841
- MachineMemOperand *MMO = *MI.memoperands_begin ();
5842
- const int MemSize = MMO->getSize ().getValue ();
5843
- LLT MemTy = MMO->getMemoryType ();
5844
-
5845
- VData = fixStoreSourceType (B, VData, MemTy, IsFormat);
5846
-
5835
+ VData = fixStoreSourceType (B, VData, IsFormat);
5847
5836
castBufferRsrcArgToV4I32 (MI, B, 2 );
5848
5837
Register RSrc = MI.getOperand (2 ).getReg ();
5849
5838
5839
+ MachineMemOperand *MMO = *MI.memoperands_begin ();
5840
+ const int MemSize = MMO->getSize ().getValue ();
5841
+
5850
5842
unsigned ImmOffset;
5851
5843
5852
5844
// The typed intrinsics add an immediate after the registers.
@@ -5938,13 +5930,10 @@ static void buildBufferLoad(unsigned Opc, Register LoadDstReg, Register RSrc,
5938
5930
}
5939
5931
5940
5932
bool AMDGPULegalizerInfo::legalizeBufferLoad (MachineInstr &MI,
5941
- LegalizerHelper &Helper,
5933
+ MachineRegisterInfo &MRI,
5934
+ MachineIRBuilder &B,
5942
5935
bool IsFormat,
5943
5936
bool IsTyped) const {
5944
- MachineIRBuilder &B = Helper.MIRBuilder ;
5945
- MachineRegisterInfo &MRI = *B.getMRI ();
5946
- GISelChangeObserver &Observer = Helper.Observer ;
5947
-
5948
5937
// FIXME: Verifier should enforce 1 MMO for these intrinsics.
5949
5938
MachineMemOperand *MMO = *MI.memoperands_begin ();
5950
5939
const LLT MemTy = MMO->getMemoryType ();
@@ -5993,21 +5982,9 @@ bool AMDGPULegalizerInfo::legalizeBufferLoad(MachineInstr &MI,
5993
5982
// Make addrspace 8 pointers loads into 4xs32 loads here, so the rest of the
5994
5983
// logic doesn't have to handle that case.
5995
5984
if (hasBufferRsrcWorkaround (Ty)) {
5996
- Observer.changingInstr (MI);
5997
5985
Ty = castBufferRsrcFromV4I32 (MI, B, MRI, 0 );
5998
- Observer.changedInstr (MI);
5999
5986
Dst = MI.getOperand (0 ).getReg ();
6000
- B.setInsertPt (B.getMBB (), MI);
6001
5987
}
6002
- if (shouldBitcastLoadStoreType (ST, Ty, MemTy)) {
6003
- Ty = getBitcastRegisterType (Ty);
6004
- Observer.changingInstr (MI);
6005
- Helper.bitcastDst (MI, Ty, 0 );
6006
- Observer.changedInstr (MI);
6007
- Dst = MI.getOperand (0 ).getReg ();
6008
- B.setInsertPt (B.getMBB (), MI);
6009
- }
6010
-
6011
5988
LLT EltTy = Ty.getScalarType ();
6012
5989
const bool IsD16 = IsFormat && (EltTy.getSizeInBits () == 16 );
6013
5990
const bool Unpacked = ST.hasUnpackedD16VMem ();
@@ -7387,17 +7364,17 @@ bool AMDGPULegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
7387
7364
case Intrinsic::amdgcn_raw_ptr_buffer_store:
7388
7365
case Intrinsic::amdgcn_struct_buffer_store:
7389
7366
case Intrinsic::amdgcn_struct_ptr_buffer_store:
7390
- return legalizeBufferStore (MI, Helper , false , false );
7367
+ return legalizeBufferStore (MI, MRI, B , false , false );
7391
7368
case Intrinsic::amdgcn_raw_buffer_store_format:
7392
7369
case Intrinsic::amdgcn_raw_ptr_buffer_store_format:
7393
7370
case Intrinsic::amdgcn_struct_buffer_store_format:
7394
7371
case Intrinsic::amdgcn_struct_ptr_buffer_store_format:
7395
- return legalizeBufferStore (MI, Helper , false , true );
7372
+ return legalizeBufferStore (MI, MRI, B , false , true );
7396
7373
case Intrinsic::amdgcn_raw_tbuffer_store:
7397
7374
case Intrinsic::amdgcn_raw_ptr_tbuffer_store:
7398
7375
case Intrinsic::amdgcn_struct_tbuffer_store:
7399
7376
case Intrinsic::amdgcn_struct_ptr_tbuffer_store:
7400
- return legalizeBufferStore (MI, Helper , true , true );
7377
+ return legalizeBufferStore (MI, MRI, B , true , true );
7401
7378
case Intrinsic::amdgcn_raw_buffer_load:
7402
7379
case Intrinsic::amdgcn_raw_ptr_buffer_load:
7403
7380
case Intrinsic::amdgcn_raw_atomic_buffer_load:
@@ -7406,17 +7383,17 @@ bool AMDGPULegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
7406
7383
case Intrinsic::amdgcn_struct_ptr_buffer_load:
7407
7384
case Intrinsic::amdgcn_struct_atomic_buffer_load:
7408
7385
case Intrinsic::amdgcn_struct_ptr_atomic_buffer_load:
7409
- return legalizeBufferLoad (MI, Helper , false , false );
7386
+ return legalizeBufferLoad (MI, MRI, B , false , false );
7410
7387
case Intrinsic::amdgcn_raw_buffer_load_format:
7411
7388
case Intrinsic::amdgcn_raw_ptr_buffer_load_format:
7412
7389
case Intrinsic::amdgcn_struct_buffer_load_format:
7413
7390
case Intrinsic::amdgcn_struct_ptr_buffer_load_format:
7414
- return legalizeBufferLoad (MI, Helper , true , false );
7391
+ return legalizeBufferLoad (MI, MRI, B , true , false );
7415
7392
case Intrinsic::amdgcn_raw_tbuffer_load:
7416
7393
case Intrinsic::amdgcn_raw_ptr_tbuffer_load:
7417
7394
case Intrinsic::amdgcn_struct_tbuffer_load:
7418
7395
case Intrinsic::amdgcn_struct_ptr_tbuffer_load:
7419
- return legalizeBufferLoad (MI, Helper , true , true );
7396
+ return legalizeBufferLoad (MI, MRI, B , true , true );
7420
7397
case Intrinsic::amdgcn_raw_buffer_atomic_swap:
7421
7398
case Intrinsic::amdgcn_raw_ptr_buffer_atomic_swap:
7422
7399
case Intrinsic::amdgcn_struct_buffer_atomic_swap:
0 commit comments