[PATCH] D147547: [AMDGPU] Add buffer intrinsics that take resources as pointers
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon May 1 13:49:29 PDT 2023
arsenm added inline comments.
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp:482
+ Register VectorReg = MRI.createGenericVirtualRegister(VectorTy);
+ SmallVector<Register, 4> VectorElems;
+ B.setInsertPt(B.getMBB(), ++B.getInsertPt());
----------------
Can just use an std::array since if this is only 4 piece case?
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp:484-486
+ for (unsigned I = 0; I < NumParts; ++I) {
+ VectorElems.push_back(MRI.createGenericVirtualRegister(S32));
+ B.buildExtractVectorElementConstant(VectorElems.back(), VectorReg, I);
----------------
Can do VectorElements[I]= B.buildExtractVectorElementConstant(S32, ...).getReg().
Also we really should have a scalarize vector utility in MachineIRBuilder like the DAG does
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp:496
+ B.setInsertPt(B.getMBB(), ++B.getInsertPt());
+ B.buildBitcast(ScalarReg, BitcastReg);
+ B.buildIntToPtr(MO, ScalarReg);
----------------
auto BitCast = B.buildBitcast(ScalarTy, BitcastReg)
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp:498
+ B.buildIntToPtr(MO, ScalarReg);
+ MO.setReg(BitcastReg);
+
----------------
Missing observer notification?
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp:1027
getActionDefinitionsBuilder(G_PTR_ADD)
- .legalIf(all(isPointer(0), sameSize(0, 1)))
- .scalarize(0)
- .scalarSameSizeAs(1, 0);
+ .unsupportedFor({BufferFatPtr, RsrcPtr})
+ .legalIf(all(isPointer(0), sameSize(0, 1)))
----------------
Move this to the end, legal cases should be first and ordered with the most common cases first
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp:2479-2481
+ // Legalize vectors of large pointers to vectors of large integers so
+ // we don't try to do pointer <-> integer bitcasts later in legalization.
+ if (EltTy.isPointer() && EltTy.getSizeInBits() > 64) {
----------------
This seems very special cased and I don't understand why you need specially handle vector extracts
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp:2487
+ Register IntVec = MRI.createGenericVirtualRegister(IntVecTy);
+ B.buildPtrToInt(IntVec, Vec);
+
----------------
Fold register creation into the build
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp:2525-2526
+ Register Dst = MI.getOperand(0).getReg();
+ Register Vec = MI.getOperand(1).getReg();
+ Register Ins = MI.getOperand(2).getReg();
----------------
Ditto with the extract case
================
Comment at: llvm/test/CodeGen/AMDGPU/GlobalISel/fp64-atomics-gfx90a.ll:3
; RUN: llc -global-isel -march=amdgcn -mcpu=gfx90a -verify-machineinstrs < %s | FileCheck %s -check-prefix=GFX90A
+; RUN: llc < %s -march=amdgcn -mcpu=gfx940 -verify-machineinstrs | FileCheck %s -check-prefix=GFX940
----------------
Add new run line in pre-commit
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D147547/new/
https://reviews.llvm.org/D147547
More information about the llvm-commits
mailing list