[PATCH] D100770: [AMDGPU] Allow multiple uses of the same literal

Jay Foad via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 20 08:44:23 PDT 2021


This revision was automatically updated to reflect the committed changes.
Closed by commit rGec8c61efdf95: [AMDGPU] Allow multiple uses of the same literal (authored by foad).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D100770

Files:
  llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
  llvm/test/CodeGen/AMDGPU/verify-duplicate-literal.mir


Index: llvm/test/CodeGen/AMDGPU/verify-duplicate-literal.mir
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/AMDGPU/verify-duplicate-literal.mir
@@ -0,0 +1,28 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass machineverifier -o - %s | FileCheck %s
+
+# Two uses of the same literal only count as one use of the constant bus.
+
+---
+name: use_duplicate_literal_cndmask
+tracksRegLiveness: true
+body:            |
+  bb.0:
+    liveins: $vcc_lo
+    ; CHECK-LABEL: name: use_duplicate_literal_cndmask
+    ; CHECK: liveins: $vcc_lo
+    ; CHECK: $vgpr0 = V_CNDMASK_B32_e64 0, 1234567, 0, 1234567, killed $vcc_lo, implicit $exec
+    $vgpr0 = V_CNDMASK_B32_e64 0, 1234567, 0, 1234567, killed $vcc_lo, implicit $exec
+...
+
+---
+name: use_duplicate_literal_fma
+tracksRegLiveness: true
+body:            |
+  bb.0:
+    liveins: $vgpr0
+    ; CHECK-LABEL: name: use_duplicate_literal_fma
+    ; CHECK: liveins: $vgpr0
+    ; CHECK: $vgpr0 = V_FMA_F32_e64 0, $vgpr0, 0, 1077936128, 0, 1077936128, 0, 0, implicit $mode, implicit $exec
+    $vgpr0 = V_FMA_F32_e64 0, $vgpr0, 0, 1077936128, 0, 1077936128, 0, 0, implicit $mode, implicit $exec
+...
Index: llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+++ llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
@@ -3986,7 +3986,8 @@
     const int OpIndices[] = { Src0Idx, Src1Idx, Src2Idx };
 
     unsigned ConstantBusCount = 0;
-    unsigned LiteralCount = 0;
+    bool UsesLiteral = false;
+    const MachineOperand *LiteralVal = nullptr;
 
     if (AMDGPU::getNamedOperandIdx(Opcode, AMDGPU::OpName::imm) != -1)
       ++ConstantBusCount;
@@ -4008,8 +4009,15 @@
             SGPRsUsed.push_back(SGPRUsed);
           }
         } else {
-          ++ConstantBusCount;
-          ++LiteralCount;
+          if (!UsesLiteral) {
+            ++ConstantBusCount;
+            UsesLiteral = true;
+            LiteralVal = &MO;
+          } else if (!MO.isIdenticalTo(*LiteralVal)) {
+            assert(isVOP3(MI));
+            ErrInfo = "VOP3 instruction uses more than one literal";
+            return false;
+          }
         }
       }
     }
@@ -4033,15 +4041,9 @@
       return false;
     }
 
-    if (isVOP3(MI) && LiteralCount) {
-      if (!ST.hasVOP3Literal()) {
-        ErrInfo = "VOP3 instruction uses literal";
-        return false;
-      }
-      if (LiteralCount > 1) {
-        ErrInfo = "VOP3 instruction uses more than one literal";
-        return false;
-      }
+    if (isVOP3(MI) && UsesLiteral && !ST.hasVOP3Literal()) {
+      ErrInfo = "VOP3 instruction uses literal";
+      return false;
     }
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100770.338884.patch
Type: text/x-patch
Size: 2811 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210420/f3034edd/attachment-0001.bin>


More information about the llvm-commits mailing list