[PATCH] D77082: [AMDGPU] Handle SMRD signed offset immediate

Austin Kerbow via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 1 10:26:30 PDT 2020


kerbowa added inline comments.


================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp:1798
 
-  if (Gen == AMDGPUSubtarget::SEA_ISLANDS) {
-    EncodedOffset =
-        AMDGPU::getSMRDEncodedLiteralOffset32(*Subtarget, ByteOffset);
-    if (EncodedOffset) {
-      Offset = CurDAG->getTargetConstant(*EncodedOffset, SL, MVT::i32);
-      return true;
-    }
+  if (!CurDAG->SignBitIsZero(ByteOffsetNode))
+    return false;
----------------
arsenm wrote:
> The GlobalISel patch seems to be missing this part?
I think it's handled here?

AMDGPUInstructionSelector.cpp:2876
if (!GEPInfo.Imm || **GEPInfo.Imm < 0** || !isUInt<32>(GEPInfo.Imm))


================
Comment at: llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h:650
+/// S_LOAD instructions have a signed offset, on other subtargets it is
+/// unsigned. S_BUFFER has an unsigned offset for all subtargets.
 Optional<int64_t> getSMRDEncodedOffset(const MCSubtargetInfo &ST,
----------------
arsenm wrote:
> Ugh, is this really different between the buffer and non-buffer forms?
Apparently, yes. An alternative would be to disallow negative offsets entirely.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D77082





More information about the llvm-commits mailing list