[PATCH] D42885: [AMDGPU] intrintrics for byte/short load/store
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 5 08:09:18 PST 2019
arsenm added inline comments.
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:5605-5609
+ // set Opc based on data type
+ if (LoadVT.getScalarType() == MVT::i8)
+ Opc = AMDGPUISD::BUFFER_LOAD_UBYTE;
+ else
+ Opc = AMDGPUISD::BUFFER_LOAD_USHORT;
----------------
Ternary operator
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:5651
+
+ // handle buffer_load_ubyte/byte/ushort/short overloaded intrinsics
+ if (LoadVT.getScalarType() == MVT::i8 ||
----------------
Capitalize
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:5652-5653
+ // handle buffer_load_ubyte/byte/ushort/short overloaded intrinsics
+ if (LoadVT.getScalarType() == MVT::i8 ||
+ LoadVT.getScalarType() == MVT::i16) {
+
----------------
This looks identical to the other part, which is kind of surprising to me but this should be factored into something common
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:5655
+
+ // set Opc based on data type
+ if (LoadVT.getScalarType() == MVT::i8)
----------------
This comment can be removed
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:5702
+ // handle buffer_load_ubyte/byte/ushort/short overloaded intrinsics
+ if (LoadVT.getScalarType() == MVT::i8 ||
+ LoadVT.getScalarType() == MVT::i16) {
----------------
Repeated again
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:7829
+SDValue SITargetLowering::performSignExtendInRegCombine(SDNode *N,
+ DAGCombinerInfo &DCI) const {
+ SDValue Src = N->getOperand(0);
----------------
Formatting
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:7832
+ if (Src.getOpcode() == AMDGPUISD::BUFFER_LOAD_UBYTE ||
+ Src.getOpcode() == AMDGPUISD::BUFFER_LOAD_USHORT) {
+ DCI.DAG.viewGraph();
----------------
Should have a hasOneUse check
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:7833
+ Src.getOpcode() == AMDGPUISD::BUFFER_LOAD_USHORT) {
+ DCI.DAG.viewGraph();
+ auto *M = cast<MemSDNode>(Src);
----------------
Leftover debugging
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:7834
+ DCI.DAG.viewGraph();
+ auto *M = cast<MemSDNode>(Src);
+ SDValue Ops[] = {
----------------
This is missing a check on the source type. If you want to be fancier, you can split out the remainder bits into a new sign extend but there probably isn't much reason to
================
Comment at: lib/Target/AMDGPU/SIISelLowering.cpp:7839-7841
+ Src.getOperand(3), // voffset -- will be set by setBufferOffsets
+ Src.getOperand(4), // soffset -- will be set by setBufferOffsets
+ Src.getOperand(5), // offset -- will be set by setBufferOffsets
----------------
"will be set by" part doesn't make sense here
================
Comment at: test/CodeGen/AMDGPU/llvm.amdgcn.raw.buffer.load.ll:275
+ %tmp = call i8 @llvm.amdgcn.raw.buffer.load.i8(<4 x i32> %rsrc, i32 0, i32 0, i32 0)
+ %tmp2 = zext i8 %tmp to i32
+ %val = uitofp i32 %tmp2 to float
----------------
The base test case shouldn't have a extend of the use and directly use the value. You should also have one with an explicit zext
================
Comment at: test/CodeGen/AMDGPU/llvm.amdgcn.raw.buffer.load.ll:307
+}
+
+;CHECK-LABEL: {{^}}raw_buffer_load_sshort:
----------------
Could use a testcase with a second non-extended use
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D42885/new/
https://reviews.llvm.org/D42885
More information about the llvm-commits
mailing list