@@ -494,8 +494,6 @@ static bool loadStoreBitcastWorkaround(const LLT Ty) {
494494 return false ;
495495
496496 const unsigned Size = Ty.getSizeInBits ();
497- if (Ty.isPointerVector ())
498- return true ;
499497 if (Size <= 64 )
500498 return false ;
501499 // Address space 8 pointers get their own workaround.
@@ -504,6 +502,9 @@ static bool loadStoreBitcastWorkaround(const LLT Ty) {
504502 if (!Ty.isVector ())
505503 return true ;
506504
505+ if (Ty.isPointerVector ())
506+ return true ;
507+
507508 unsigned EltSize = Ty.getScalarSizeInBits ();
508509 return EltSize != 32 && EltSize != 64 ;
509510}
@@ -5817,9 +5818,8 @@ Register AMDGPULegalizerInfo::handleD16VData(MachineIRBuilder &B,
58175818 return Reg;
58185819}
58195820
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 {
58235823 MachineRegisterInfo *MRI = B.getMRI ();
58245824 LLT Ty = MRI->getType (VData);
58255825
@@ -5829,10 +5829,6 @@ Register AMDGPULegalizerInfo::fixStoreSourceType(MachineIRBuilder &B,
58295829 if (hasBufferRsrcWorkaround (Ty))
58305830 return castBufferRsrcToV4I32 (VData, B);
58315831
5832- if (shouldBitcastLoadStoreType (ST, Ty, MemTy)) {
5833- Ty = getBitcastRegisterType (Ty);
5834- VData = B.buildBitcast (Ty, VData).getReg (0 );
5835- }
58365832 // Fixup illegal register types for i8 stores.
58375833 if (Ty == LLT::scalar (8 ) || Ty == S16) {
58385834 Register AnyExt = B.buildAnyExt (LLT::scalar (32 ), VData).getReg (0 );
@@ -5850,27 +5846,23 @@ Register AMDGPULegalizerInfo::fixStoreSourceType(MachineIRBuilder &B,
58505846}
58515847
58525848bool AMDGPULegalizerInfo::legalizeBufferStore (MachineInstr &MI,
5853- LegalizerHelper &Helper,
5849+ MachineRegisterInfo &MRI,
5850+ MachineIRBuilder &B,
58545851 bool IsTyped,
58555852 bool IsFormat) const {
5856- MachineIRBuilder &B = Helper.MIRBuilder ;
5857- MachineRegisterInfo &MRI = *B.getMRI ();
5858-
58595853 Register VData = MI.getOperand (1 ).getReg ();
58605854 LLT Ty = MRI.getType (VData);
58615855 LLT EltTy = Ty.getScalarType ();
58625856 const bool IsD16 = IsFormat && (EltTy.getSizeInBits () == 16 );
58635857 const LLT S32 = LLT::scalar (32 );
58645858
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);
58715860 castBufferRsrcArgToV4I32 (MI, B, 2 );
58725861 Register RSrc = MI.getOperand (2 ).getReg ();
58735862
5863+ MachineMemOperand *MMO = *MI.memoperands_begin ();
5864+ const int MemSize = MMO->getSize ().getValue ();
5865+
58745866 unsigned ImmOffset;
58755867
58765868 // The typed intrinsics add an immediate after the registers.
@@ -5962,13 +5954,10 @@ static void buildBufferLoad(unsigned Opc, Register LoadDstReg, Register RSrc,
59625954}
59635955
59645956bool AMDGPULegalizerInfo::legalizeBufferLoad (MachineInstr &MI,
5965- LegalizerHelper &Helper,
5957+ MachineRegisterInfo &MRI,
5958+ MachineIRBuilder &B,
59665959 bool IsFormat,
59675960 bool IsTyped) const {
5968- MachineIRBuilder &B = Helper.MIRBuilder ;
5969- MachineRegisterInfo &MRI = *B.getMRI ();
5970- GISelChangeObserver &Observer = Helper.Observer ;
5971-
59725961 // FIXME: Verifier should enforce 1 MMO for these intrinsics.
59735962 MachineMemOperand *MMO = *MI.memoperands_begin ();
59745963 const LLT MemTy = MMO->getMemoryType ();
@@ -6017,21 +6006,9 @@ bool AMDGPULegalizerInfo::legalizeBufferLoad(MachineInstr &MI,
60176006 // Make addrspace 8 pointers loads into 4xs32 loads here, so the rest of the
60186007 // logic doesn't have to handle that case.
60196008 if (hasBufferRsrcWorkaround (Ty)) {
6020- Observer.changingInstr (MI);
60216009 Ty = castBufferRsrcFromV4I32 (MI, B, MRI, 0 );
6022- Observer.changedInstr (MI);
60236010 Dst = MI.getOperand (0 ).getReg ();
6024- B.setInsertPt (B.getMBB (), MI);
60256011 }
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-
60356012 LLT EltTy = Ty.getScalarType ();
60366013 const bool IsD16 = IsFormat && (EltTy.getSizeInBits () == 16 );
60376014 const bool Unpacked = ST.hasUnpackedD16VMem ();
@@ -7411,17 +7388,17 @@ bool AMDGPULegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
74117388 case Intrinsic::amdgcn_raw_ptr_buffer_store:
74127389 case Intrinsic::amdgcn_struct_buffer_store:
74137390 case Intrinsic::amdgcn_struct_ptr_buffer_store:
7414- return legalizeBufferStore (MI, Helper , false , false );
7391+ return legalizeBufferStore (MI, MRI, B , false , false );
74157392 case Intrinsic::amdgcn_raw_buffer_store_format:
74167393 case Intrinsic::amdgcn_raw_ptr_buffer_store_format:
74177394 case Intrinsic::amdgcn_struct_buffer_store_format:
74187395 case Intrinsic::amdgcn_struct_ptr_buffer_store_format:
7419- return legalizeBufferStore (MI, Helper , false , true );
7396+ return legalizeBufferStore (MI, MRI, B , false , true );
74207397 case Intrinsic::amdgcn_raw_tbuffer_store:
74217398 case Intrinsic::amdgcn_raw_ptr_tbuffer_store:
74227399 case Intrinsic::amdgcn_struct_tbuffer_store:
74237400 case Intrinsic::amdgcn_struct_ptr_tbuffer_store:
7424- return legalizeBufferStore (MI, Helper , true , true );
7401+ return legalizeBufferStore (MI, MRI, B , true , true );
74257402 case Intrinsic::amdgcn_raw_buffer_load:
74267403 case Intrinsic::amdgcn_raw_ptr_buffer_load:
74277404 case Intrinsic::amdgcn_raw_atomic_buffer_load:
@@ -7430,17 +7407,17 @@ bool AMDGPULegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
74307407 case Intrinsic::amdgcn_struct_ptr_buffer_load:
74317408 case Intrinsic::amdgcn_struct_atomic_buffer_load:
74327409 case Intrinsic::amdgcn_struct_ptr_atomic_buffer_load:
7433- return legalizeBufferLoad (MI, Helper , false , false );
7410+ return legalizeBufferLoad (MI, MRI, B , false , false );
74347411 case Intrinsic::amdgcn_raw_buffer_load_format:
74357412 case Intrinsic::amdgcn_raw_ptr_buffer_load_format:
74367413 case Intrinsic::amdgcn_struct_buffer_load_format:
74377414 case Intrinsic::amdgcn_struct_ptr_buffer_load_format:
7438- return legalizeBufferLoad (MI, Helper , true , false );
7415+ return legalizeBufferLoad (MI, MRI, B , true , false );
74397416 case Intrinsic::amdgcn_raw_tbuffer_load:
74407417 case Intrinsic::amdgcn_raw_ptr_tbuffer_load:
74417418 case Intrinsic::amdgcn_struct_tbuffer_load:
74427419 case Intrinsic::amdgcn_struct_ptr_tbuffer_load:
7443- return legalizeBufferLoad (MI, Helper , true , true );
7420+ return legalizeBufferLoad (MI, MRI, B , true , true );
74447421 case Intrinsic::amdgcn_raw_buffer_atomic_swap:
74457422 case Intrinsic::amdgcn_raw_ptr_buffer_atomic_swap:
74467423 case Intrinsic::amdgcn_struct_buffer_atomic_swap:
0 commit comments