[PATCH] D87050: GlobalISel: Add combines for G_TRUNC

Matt Arsenault via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 2 12:22:17 PDT 2020


arsenm added inline comments.


================
Comment at: llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp:1845
+    return true;
+  } else {
+    Builder.setInstrAndDebugLoc(MI);
----------------
No else after return


================
Comment at: llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp:1867
+  LLT ShiftAmtTy = getTargetLowering().getPreferredShiftAmountTy(DstTy);
+  if (MRI.hasOneUse(SrcReg) &&
+      mi_match(SrcReg, MRI, m_GShl(m_Reg(ShiftSrc), m_Reg(ShiftAmt))) &&
----------------
hasOneNonDBGUse?


================
Comment at: llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp:1869
+      mi_match(SrcReg, MRI, m_GShl(m_Reg(ShiftSrc), m_Reg(ShiftAmt))) &&
+      isLegalOrBeforeLegalizer({TargetOpcode::G_SHL, {DstTy, ShiftAmtTy}})) {
+    KnownBits Known = KB->getKnownBits(ShiftAmt);
----------------
For AMDGPU this would need a regbank legality check for post-regbankselect combines but I'm not sure what to do about that


================
Comment at: llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp:1891
+  Builder.setInstrAndDebugLoc(MI);
+  Builder.buildInstr(TargetOpcode::G_SHL, {DstReg},
+                     {Builder.buildTrunc(DstTy, ShiftSrc),
----------------
buildShl


================
Comment at: llvm/test/CodeGen/AMDGPU/GlobalISel/shl.ll:85-86
 ; GFX8:       ; %bb.0:
-; GFX8-NEXT:    s_and_b32 s0, s0, 0xff
-; GFX8-NEXT:    s_lshl_b32 s0, s0, 7
+; GFX8-NEXT:    s_bfe_u32 s1, 7, 0x100000
+; GFX8-NEXT:    s_lshl_b32 s0, s0, s1
 ; GFX8-NEXT:    ; return to shader part epilog
----------------
This is strange looking. It's technically neutral but the shift amount no longer appears constant?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D87050



More information about the llvm-commits mailing list