[PATCH] D81524: AMDGPU/GlobalISel: Fix 8-byte aligned, 96-bit scalar loads

Mirko Brkusanin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 10 07:04:25 PDT 2020


mbrkusanin added a comment.

What about DS_READ? Following are also broken:

  define <3 x i32> @v_load_lds_v3i32_align1(<3 x i32> addrspace(3)* %ptr) {
    %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 1
    ret <3 x i32> %load
  }
  
  define <3 x i32> @v_load_lds_v3i32_align2(<3 x i32> addrspace(3)* %ptr) {
    %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 2
    ret <3 x i32> %load
  }
  
  define <3 x i32> @v_load_lds_v3i32_align4(<3 x i32> addrspace(3)* %ptr) {
    %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 4
    ret <3 x i32> %load
  }
  
  define <3 x i32> @v_load_lds_v3i32_align8(<3 x i32> addrspace(3)* %ptr) {
    %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 8
    ret <3 x i32> %load
  }
  
  define <3 x i32> @v_load_lds_v3i32_align16(<3 x i32> addrspace(3)* %ptr) {
    %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 16
    ret <3 x i32> %load
  }

It can be done with the same code in applyMappingLoad just by checking:

   if (PtrBank == &AMDGPU::VGPRRegBank) {
      if (LoadSize != 96)
        return false;
  
      Register PtrReg = MI.getOperand(1).getReg();
      const LLT PtrTy = MRI.getType(PtrReg);
  
      if (PtrTy.getAddressSpace() == AMDGPUAS::LOCAL_ADDRESS) {
       ...
    }
  }

and using VGPR bank in

  ApplyRegBankMapping O(*this, MRI, &AMDGPU::VGPRRegBank);

But should it select ds_read_b96 instead? SDag does not select it either.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D81524/new/

https://reviews.llvm.org/D81524





More information about the llvm-commits mailing list