@@ -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
}
@@ -5817,9 +5818,8 @@ Register AMDGPULegalizerInfo::handleD16VData(MachineIRBuilder &B,
5817
5818
return Reg;
5818
5819
}
5819
5820
5820
- Register AMDGPULegalizerInfo::fixStoreSourceType (MachineIRBuilder &B,
5821
- Register VData, LLT MemTy,
5822
- bool IsFormat) const {
5821
+ Register AMDGPULegalizerInfo::fixStoreSourceType (
5822
+ MachineIRBuilder &B, Register VData, bool IsFormat) const {
5823
5823
MachineRegisterInfo *MRI = B.getMRI ();
5824
5824
LLT Ty = MRI->getType (VData);
5825
5825
@@ -5829,10 +5829,6 @@ Register AMDGPULegalizerInfo::fixStoreSourceType(MachineIRBuilder &B,
5829
5829
if (hasBufferRsrcWorkaround (Ty))
5830
5830
return castBufferRsrcToV4I32 (VData, B);
5831
5831
5832
- if (shouldBitcastLoadStoreType (ST, Ty, MemTy)) {
5833
- Ty = getBitcastRegisterType (Ty);
5834
- VData = B.buildBitcast (Ty, VData).getReg (0 );
5835
- }
5836
5832
// Fixup illegal register types for i8 stores.
5837
5833
if (Ty == LLT::scalar (8 ) || Ty == S16) {
5838
5834
Register AnyExt = B.buildAnyExt (LLT::scalar (32 ), VData).getReg (0 );
@@ -5850,27 +5846,23 @@ Register AMDGPULegalizerInfo::fixStoreSourceType(MachineIRBuilder &B,
5850
5846
}
5851
5847
5852
5848
bool AMDGPULegalizerInfo::legalizeBufferStore (MachineInstr &MI,
5853
- LegalizerHelper &Helper,
5849
+ MachineRegisterInfo &MRI,
5850
+ MachineIRBuilder &B,
5854
5851
bool IsTyped,
5855
5852
bool IsFormat) const {
5856
- MachineIRBuilder &B = Helper.MIRBuilder ;
5857
- MachineRegisterInfo &MRI = *B.getMRI ();
5858
-
5859
5853
Register VData = MI.getOperand (1 ).getReg ();
5860
5854
LLT Ty = MRI.getType (VData);
5861
5855
LLT EltTy = Ty.getScalarType ();
5862
5856
const bool IsD16 = IsFormat && (EltTy.getSizeInBits () == 16 );
5863
5857
const LLT S32 = LLT::scalar (32 );
5864
5858
5865
- MachineMemOperand *MMO = *MI.memoperands_begin ();
5866
- const int MemSize = MMO->getSize ().getValue ();
5867
- LLT MemTy = MMO->getMemoryType ();
5868
-
5869
- VData = fixStoreSourceType (B, VData, MemTy, IsFormat);
5870
-
5859
+ VData = fixStoreSourceType (B, VData, IsFormat);
5871
5860
castBufferRsrcArgToV4I32 (MI, B, 2 );
5872
5861
Register RSrc = MI.getOperand (2 ).getReg ();
5873
5862
5863
+ MachineMemOperand *MMO = *MI.memoperands_begin ();
5864
+ const int MemSize = MMO->getSize ().getValue ();
5865
+
5874
5866
unsigned ImmOffset;
5875
5867
5876
5868
// The typed intrinsics add an immediate after the registers.
@@ -5962,13 +5954,10 @@ static void buildBufferLoad(unsigned Opc, Register LoadDstReg, Register RSrc,
5962
5954
}
5963
5955
5964
5956
bool AMDGPULegalizerInfo::legalizeBufferLoad (MachineInstr &MI,
5965
- LegalizerHelper &Helper,
5957
+ MachineRegisterInfo &MRI,
5958
+ MachineIRBuilder &B,
5966
5959
bool IsFormat,
5967
5960
bool IsTyped) const {
5968
- MachineIRBuilder &B = Helper.MIRBuilder ;
5969
- MachineRegisterInfo &MRI = *B.getMRI ();
5970
- GISelChangeObserver &Observer = Helper.Observer ;
5971
-
5972
5961
// FIXME: Verifier should enforce 1 MMO for these intrinsics.
5973
5962
MachineMemOperand *MMO = *MI.memoperands_begin ();
5974
5963
const LLT MemTy = MMO->getMemoryType ();
@@ -6017,21 +6006,9 @@ bool AMDGPULegalizerInfo::legalizeBufferLoad(MachineInstr &MI,
6017
6006
// Make addrspace 8 pointers loads into 4xs32 loads here, so the rest of the
6018
6007
// logic doesn't have to handle that case.
6019
6008
if (hasBufferRsrcWorkaround (Ty)) {
6020
- Observer.changingInstr (MI);
6021
6009
Ty = castBufferRsrcFromV4I32 (MI, B, MRI, 0 );
6022
- Observer.changedInstr (MI);
6023
6010
Dst = MI.getOperand (0 ).getReg ();
6024
- B.setInsertPt (B.getMBB (), MI);
6025
6011
}
6026
- if (shouldBitcastLoadStoreType (ST, Ty, MemTy)) {
6027
- Ty = getBitcastRegisterType (Ty);
6028
- Observer.changingInstr (MI);
6029
- Helper.bitcastDst (MI, Ty, 0 );
6030
- Observer.changedInstr (MI);
6031
- Dst = MI.getOperand (0 ).getReg ();
6032
- B.setInsertPt (B.getMBB (), MI);
6033
- }
6034
-
6035
6012
LLT EltTy = Ty.getScalarType ();
6036
6013
const bool IsD16 = IsFormat && (EltTy.getSizeInBits () == 16 );
6037
6014
const bool Unpacked = ST.hasUnpackedD16VMem ();
@@ -7411,17 +7388,17 @@ bool AMDGPULegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
7411
7388
case Intrinsic::amdgcn_raw_ptr_buffer_store:
7412
7389
case Intrinsic::amdgcn_struct_buffer_store:
7413
7390
case Intrinsic::amdgcn_struct_ptr_buffer_store:
7414
- return legalizeBufferStore (MI, Helper , false , false );
7391
+ return legalizeBufferStore (MI, MRI, B , false , false );
7415
7392
case Intrinsic::amdgcn_raw_buffer_store_format:
7416
7393
case Intrinsic::amdgcn_raw_ptr_buffer_store_format:
7417
7394
case Intrinsic::amdgcn_struct_buffer_store_format:
7418
7395
case Intrinsic::amdgcn_struct_ptr_buffer_store_format:
7419
- return legalizeBufferStore (MI, Helper , false , true );
7396
+ return legalizeBufferStore (MI, MRI, B , false , true );
7420
7397
case Intrinsic::amdgcn_raw_tbuffer_store:
7421
7398
case Intrinsic::amdgcn_raw_ptr_tbuffer_store:
7422
7399
case Intrinsic::amdgcn_struct_tbuffer_store:
7423
7400
case Intrinsic::amdgcn_struct_ptr_tbuffer_store:
7424
- return legalizeBufferStore (MI, Helper , true , true );
7401
+ return legalizeBufferStore (MI, MRI, B , true , true );
7425
7402
case Intrinsic::amdgcn_raw_buffer_load:
7426
7403
case Intrinsic::amdgcn_raw_ptr_buffer_load:
7427
7404
case Intrinsic::amdgcn_raw_atomic_buffer_load:
@@ -7430,17 +7407,17 @@ bool AMDGPULegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
7430
7407
case Intrinsic::amdgcn_struct_ptr_buffer_load:
7431
7408
case Intrinsic::amdgcn_struct_atomic_buffer_load:
7432
7409
case Intrinsic::amdgcn_struct_ptr_atomic_buffer_load:
7433
- return legalizeBufferLoad (MI, Helper , false , false );
7410
+ return legalizeBufferLoad (MI, MRI, B , false , false );
7434
7411
case Intrinsic::amdgcn_raw_buffer_load_format:
7435
7412
case Intrinsic::amdgcn_raw_ptr_buffer_load_format:
7436
7413
case Intrinsic::amdgcn_struct_buffer_load_format:
7437
7414
case Intrinsic::amdgcn_struct_ptr_buffer_load_format:
7438
- return legalizeBufferLoad (MI, Helper , true , false );
7415
+ return legalizeBufferLoad (MI, MRI, B , true , false );
7439
7416
case Intrinsic::amdgcn_raw_tbuffer_load:
7440
7417
case Intrinsic::amdgcn_raw_ptr_tbuffer_load:
7441
7418
case Intrinsic::amdgcn_struct_tbuffer_load:
7442
7419
case Intrinsic::amdgcn_struct_ptr_tbuffer_load:
7443
- return legalizeBufferLoad (MI, Helper , true , true );
7420
+ return legalizeBufferLoad (MI, MRI, B , true , true );
7444
7421
case Intrinsic::amdgcn_raw_buffer_atomic_swap:
7445
7422
case Intrinsic::amdgcn_raw_ptr_buffer_atomic_swap:
7446
7423
case Intrinsic::amdgcn_struct_buffer_atomic_swap:
0 commit comments