[llvm] AMDGPU: Add dedicated features for wavesize support (PR #212581)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 28 11:50:06 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-amdgpu

Author: Matt Arsenault (arsenm)

<details>
<summary>Changes</summary>

Previously we had features for which wavesize is active,
and unstructured checks for which targets support which
wavesize.

One assembler test changes because it was artificially
forcing wave64 on gfx1250 for test simplification, and
the supportsWave32 helper function was buggy.

Co-authored-by: Claude (Claude-Opus-4.8)

---

Patch is 59.66 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/212581.diff


8 Files Affected:

- (modified) llvm/lib/Target/AMDGPU/AMDGPU.td (+10-4) 
- (modified) llvm/lib/Target/AMDGPU/AMDGPUFeatures.td (+16) 
- (modified) llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp (+5-3) 
- (modified) llvm/lib/Target/AMDGPU/GCNSubtarget.h (-4) 
- (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp (+1-1) 
- (modified) llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h (-4) 
- (modified) llvm/test/MC/AMDGPU/vop3-literal.s (+164-81) 
- (modified) llvm/test/MC/Disassembler/AMDGPU/gfx1250_wave64_feature.s (+4-3) 


``````````diff
diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td
index 671b1e588bdb9..fbfd0e2f6937f 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPU.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPU.td
@@ -1498,7 +1498,8 @@ class GCNSubtargetFeatureGeneration <string Value,
 def FeatureSouthernIslands : GCNSubtargetFeatureGeneration<"SOUTHERN_ISLANDS",
     "southern-islands",
   [FeatureFP64, FeatureAddressableLocalMemorySize32768, FeatureMIMG_R128,
-  FeatureWavefrontSize64, FeatureSMemTimeInst, FeatureMadMacF32Insts,
+  FeatureWavefrontSize64, FeatureSupportsWave64, FeatureSMemTimeInst,
+  FeatureMadMacF32Insts,
   FeatureDsSrc2Insts, FeatureLDSBankCount32, FeatureMovrel,
   FeatureTrigReducedRange, FeatureExtendedImageInsts, FeatureImageInsts,
   FeatureInstCacheLineSize64,
@@ -1514,7 +1515,7 @@ def FeatureSouthernIslands : GCNSubtargetFeatureGeneration<"SOUTHERN_ISLANDS",
 def FeatureSeaIslands : GCNSubtargetFeatureGeneration<"SEA_ISLANDS",
     "sea-islands",
   [FeatureFP64, FeatureAddressableLocalMemorySize65536, FeatureMIMG_R128,
-  FeatureWavefrontSize64, FeatureFlatAddressSpace,
+  FeatureWavefrontSize64, FeatureSupportsWave64, FeatureFlatAddressSpace,
   FeatureCIInsts, FeatureMovrel, FeatureTrigReducedRange,
   FeatureGFX7GFX8GFX9Insts, FeatureSMemTimeInst, FeatureMadMacF32Insts,
   FeatureDsSrc2Insts, FeatureExtendedImageInsts, FeatureUnalignedBufferAccess,
@@ -1532,7 +1533,7 @@ def FeatureSeaIslands : GCNSubtargetFeatureGeneration<"SEA_ISLANDS",
 def FeatureVolcanicIslands : GCNSubtargetFeatureGeneration<"VOLCANIC_ISLANDS",
   "volcanic-islands",
   [FeatureFP64, FeatureAddressableLocalMemorySize65536, FeatureMIMG_R128,
-   FeatureWavefrontSize64, FeatureFlatAddressSpace,
+   FeatureWavefrontSize64, FeatureSupportsWave64, FeatureFlatAddressSpace,
    FeatureGCN3Encoding, FeatureCIInsts, Feature16BitInsts,
    FeatureSMemRealTime, FeatureVGPRIndexMode, FeatureMovrel,
    FeatureScalarStores, FeatureInv2PiInlineImm,
@@ -1553,7 +1554,7 @@ def FeatureVolcanicIslands : GCNSubtargetFeatureGeneration<"VOLCANIC_ISLANDS",
 def FeatureGFX9 : GCNSubtargetFeatureGeneration<"GFX9",
   "gfx9",
   [FeatureFP64,
-   FeatureWavefrontSize64, FeatureFlatAddressSpace,
+   FeatureWavefrontSize64, FeatureSupportsWave64, FeatureFlatAddressSpace,
    FeatureGCN3Encoding, FeatureCIInsts, Feature16BitInsts,
    FeatureSMemRealTime, FeatureScalarStores, FeatureInv2PiInlineImm,
    FeatureApertureRegs, FeatureGFX9Insts, FeatureVOP3PInsts, FeatureVGPRIndexMode,
@@ -1577,6 +1578,7 @@ def FeatureGFX9 : GCNSubtargetFeatureGeneration<"GFX9",
 def FeatureGFX10 : GCNSubtargetFeatureGeneration<"GFX10",
   "gfx10",
   [FeatureFP64, FeatureAddressableLocalMemorySize65536, FeatureMIMG_R128,
+   FeatureSupportsWave32, FeatureSupportsWave64,
    FeatureFlatAddressSpace,
    FeatureCIInsts, Feature16BitInsts,
    FeatureSMemRealTime, FeatureInv2PiInlineImm,
@@ -1607,6 +1609,7 @@ def FeatureGFX10 : GCNSubtargetFeatureGeneration<"GFX10",
 def FeatureGFX11 : GCNSubtargetFeatureGeneration<"GFX11",
   "gfx11",
   [FeatureFP64, FeatureAddressableLocalMemorySize65536, FeatureMIMG_R128,
+   FeatureSupportsWave32, FeatureSupportsWave64,
    FeatureFlatAddressSpace, Feature16BitInsts,
    FeatureInv2PiInlineImm, FeatureApertureRegs,
    FeatureCIInsts, FeatureGFX8Insts, FeatureGFX9Insts, FeatureGFX10Insts,
@@ -1635,6 +1638,7 @@ def FeatureGFX11 : GCNSubtargetFeatureGeneration<"GFX11",
 def FeatureGFX12 : GCNSubtargetFeatureGeneration<"GFX12",
   "gfx12",
   [FeatureFP64, FeatureMIMG_R128,
+   FeatureSupportsWave32,
    FeatureFlatAddressSpace, Feature16BitInsts,
    FeatureInv2PiInlineImm, FeatureApertureRegs,
    FeatureCIInsts, FeatureGFX8Insts, FeatureGFX9Insts, FeatureGFX10Insts,
@@ -1662,6 +1666,7 @@ def FeatureGFX12 : GCNSubtargetFeatureGeneration<"GFX12",
 def FeatureGFX13 : GCNSubtargetFeatureGeneration<"GFX13",
   "gfx13",
   [FeatureFP64, FeatureMIMG_R128,
+   FeatureSupportsWave32, FeatureSupportsWave64,
    FeatureFlatAddressSpace, Feature16BitInsts,
    FeatureInv2PiInlineImm, FeatureApertureRegs,
    FeatureCIInsts, FeatureGFX8Insts, FeatureGFX9Insts, FeatureGFX10Insts,
@@ -2132,6 +2137,7 @@ def FeatureISAVersion11_7_Generic: FeatureSet<
 
 def FeatureISAVersion12 : FeatureSet<
   [FeatureGFX12,
+   FeatureSupportsWave64,
    FeatureBackOffBarrier,
    FeatureAddressableLocalMemorySize65536,
    FeatureLDSBankCount32,
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td b/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td
index 2c105c3804e35..b1c09a89433ab 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td
@@ -44,6 +44,22 @@ def FeatureAddressableLocalMemorySize65536 : SubtargetFeatureAddressableLocalMem
 def FeatureAddressableLocalMemorySize163840 : SubtargetFeatureAddressableLocalMemorySize<163840>;
 def FeatureAddressableLocalMemorySize327680 : SubtargetFeatureAddressableLocalMemorySize<327680>;
 
+// Whether each wavefront size mode is available on the hardware,
+// independent of the active mode.
+def FeatureSupportsWave32 : SubtargetFeature<"supports-wave32",
+  "SupportsWave32",
+  "true",
+  "Hardware supports wave32 mode",
+  [], InlineIgnore
+>;
+
+def FeatureSupportsWave64 : SubtargetFeature<"supports-wave64",
+  "SupportsWave64",
+  "true",
+  "Hardware supports wave64 mode",
+  [], InlineIgnore
+>;
+
 class SubtargetFeatureWavefrontSize <int ValueLog2> : SubtargetFeature<
   "wavefrontsize"#!shl(1, ValueLog2),
   "WavefrontSizeLog2",
diff --git a/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp b/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp
index b2cad75da626b..32f81623c0117 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp
@@ -196,12 +196,14 @@ bool AMDGPURemoveIncompatibleFunctions::checkFunction(Function &F) {
   // gfx9 and below targets that don't support the mode.
   // gfx10, gfx11, gfx12 are implied to support both wave32 and 64 features.
   // They are not in the feature set. So, we need a separate check
-  if (!ST->supportsWave32() && ST->hasFeature(AMDGPU::FeatureWavefrontSize32)) {
+  if (!GPUFeatureBits.test(AMDGPU::FeatureSupportsWave32) &&
+      ST->hasFeature(AMDGPU::FeatureWavefrontSize32)) {
     reportFunctionRemoved(F, *ST, AMDGPU::FeatureWavefrontSize32);
     return true;
   }
-  // gfx125x only support FeatureWavefrontSize32.
-  if (!ST->supportsWave64() && ST->hasFeature(AMDGPU::FeatureWavefrontSize64)) {
+
+  if (!GPUFeatureBits.test(AMDGPU::FeatureSupportsWave64) &&
+      ST->hasFeature(AMDGPU::FeatureWavefrontSize64)) {
     reportFunctionRemoved(F, *ST, AMDGPU::FeatureWavefrontSize64);
     return true;
   }
diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.h b/llvm/lib/Target/AMDGPU/GCNSubtarget.h
index 8557d7a218d60..c7937d8d33ed5 100644
--- a/llvm/lib/Target/AMDGPU/GCNSubtarget.h
+++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.h
@@ -902,10 +902,6 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
   /// unit requirement.
   unsigned getMaxNumVGPRs(const MachineFunction &MF) const;
 
-  bool supportsWave32() const { return getGeneration() >= GFX10; }
-
-  bool supportsWave64() const { return !hasGFX1250Insts() || HasGFX13Insts; }
-
   bool isWave32() const { return getWavefrontSize() == 32; }
 
   bool isWave64() const { return getWavefrontSize() == 64; }
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp
index 641b77c150aad..5bfc232822d90 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp
@@ -103,7 +103,7 @@ createAMDGPUMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {
   } else if (IsWave64 && IsWave32) {
     // The wave size is mutually exclusive. If both somehow end up set, wave32
     // wins if supported.
-    STI->ToggleFeature(AMDGPU::supportsWave32(*STI)
+    STI->ToggleFeature(STI->hasFeature(AMDGPU::FeatureSupportsWave32)
                            ? AMDGPU::FeatureWavefrontSize64
                            : AMDGPU::FeatureWavefrontSize32);
 
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
index 1c29065246824..c06ec8e5b8ab7 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
@@ -1527,10 +1527,6 @@ bool hasMAIInsts(const MCSubtargetInfo &STI);
 bool hasVOPD(const MCSubtargetInfo &STI);
 bool hasDPPSrc1SGPR(const MCSubtargetInfo &STI);
 
-inline bool supportsWave32(const MCSubtargetInfo &STI) {
-  return AMDGPU::isGFX10Plus(STI) && !AMDGPU::isGFX1250(STI);
-}
-
 int getTotalNumVGPRs(bool has90AInsts, int32_t ArgNumAGPR, int32_t ArgNumVGPR);
 unsigned hasKernargPreload(const MCSubtargetInfo &STI);
 bool hasSMRDSignedImmOffset(const MCSubtargetInfo &ST);
diff --git a/llvm/test/MC/AMDGPU/vop3-literal.s b/llvm/test/MC/AMDGPU/vop3-literal.s
index 14d453ef424fc..125db6d2764cc 100644
--- a/llvm/test/MC/AMDGPU/vop3-literal.s
+++ b/llvm/test/MC/AMDGPU/vop3-literal.s
@@ -3,7 +3,7 @@
 // RUN: not llvm-mc -triple=amdgpu9.00 %s -show-encoding | FileCheck %s -check-prefix=GFX9
 // RUN: not llvm-mc -triple=amdgpu10.10 %s -show-encoding -mattr=+wavefrontsize64 | FileCheck %s -check-prefix=GFX10
 // RUN: not llvm-mc -triple=amdgpu12.50 %s -show-encoding -mattr=+wavefrontsize64,-real-true16 | FileCheck %s -check-prefixes=GFX1250
-// RUN: not llvm-mc -triple=amdgpu12.50 %s -show-encoding -mattr=+wavefrontsize64,-real-true16 | %extract-encodings | llvm-mc -triple=amdgpu12.50 -mattr=+wavefrontsize64,-real-true16 -disassemble -show-encoding | FileCheck --check-prefixes=GFX1250 %s
+// RUN: not llvm-mc -triple=amdgpu12.50 %s -show-encoding -mattr=+wavefrontsize64,-real-true16 | %extract-encodings | llvm-mc -triple=amdgpu12.50 -mattr=+wavefrontsize64,-real-true16 -disassemble -show-encoding | FileCheck --check-prefixes=GFX1250-DIS %s
 
 // RUN: not llvm-mc -triple=amdgpu9.00 %s -filetype=null -no-warn 2>&1 | FileCheck %s -implicit-check-not=error: -check-prefix=GFX9-ERR
 // RUN: not llvm-mc -triple=amdgpu10.10 %s -filetype=null -no-warn 2>&1 -mattr=+wavefrontsize64 | FileCheck %s -implicit-check-not=error: -check-prefix=GFX10-ERR
@@ -12,37 +12,44 @@
 v_bfe_u32 v0, 0x3039, v1, s1
 // GFX10: v_bfe_u32 v0, 0x3039, v1, s1            ; encoding: [0x00,0x00,0x48,0xd5,0xff,0x02,0x06,0x00,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfe_u32 v0, 0x3039, v1, s1            ; encoding: [0x00,0x00,0x10,0xd6,0xff,0x02,0x06,0x00,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:15: error: literal operands are not supported
+// GFX1250-DIS: v_bfe_u32 v0, 0x3039, v1, s1            ; encoding: [0x00,0x00,0x10,0xd6,0xff,0x02,0x06,0x00,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:15: error: literal operands are not supported
 
 v_bfe_u32 v0, v1, 0x3039, s1
 // GFX10: v_bfe_u32 v0, v1, 0x3039, s1            ; encoding: [0x00,0x00,0x48,0xd5,0x01,0xff,0x05,0x00,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfe_u32 v0, v1, 0x3039, s1            ; encoding: [0x00,0x00,0x10,0xd6,0x01,0xff,0x05,0x00,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:19: error: literal operands are not supported
+// GFX1250-DIS: v_bfe_u32 v0, v1, 0x3039, s1            ; encoding: [0x00,0x00,0x10,0xd6,0x01,0xff,0x05,0x00,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:19: error: literal operands are not supported
 
 v_bfe_u32 v0, v1, s1, 0x3039
 // GFX10: v_bfe_u32 v0, v1, s1, 0x3039            ; encoding: [0x00,0x00,0x48,0xd5,0x01,0x03,0xfc,0x03,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfe_u32 v0, v1, s1, 0x3039            ; encoding: [0x00,0x00,0x10,0xd6,0x01,0x03,0xfc,0x03,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:23: error: literal operands are not supported
+// GFX1250-DIS: v_bfe_u32 v0, v1, s1, 0x3039            ; encoding: [0x00,0x00,0x10,0xd6,0x01,0x03,0xfc,0x03,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:23: error: literal operands are not supported
 
 v_bfe_u32 v0, 0x3039, 0x3039, s1
 // GFX10: v_bfe_u32 v0, 0x3039, 0x3039, s1        ; encoding: [0x00,0x00,0x48,0xd5,0xff,0xfe,0x05,0x00,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfe_u32 v0, 0x3039, 0x3039, s1        ; encoding: [0x00,0x00,0x10,0xd6,0xff,0xfe,0x05,0x00,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:15: error: literal operands are not supported
+// GFX1250-DIS: v_bfe_u32 v0, 0x3039, 0x3039, s1        ; encoding: [0x00,0x00,0x10,0xd6,0xff,0xfe,0x05,0x00,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:15: error: literal operands are not supported
 
 v_bfe_u32 v0, 0x3039, s1, 0x3039
 // GFX10: v_bfe_u32 v0, 0x3039, s1, 0x3039        ; encoding: [0x00,0x00,0x48,0xd5,0xff,0x02,0xfc,0x03,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfe_u32 v0, 0x3039, s1, 0x3039        ; encoding: [0x00,0x00,0x10,0xd6,0xff,0x02,0xfc,0x03,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:15: error: literal operands are not supported
+// GFX1250-DIS: v_bfe_u32 v0, 0x3039, s1, 0x3039        ; encoding: [0x00,0x00,0x10,0xd6,0xff,0x02,0xfc,0x03,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:15: error: literal operands are not supported
 
 v_bfe_u32 v0, v1, 0x3039, 0x3039
 // GFX10: v_bfe_u32 v0, v1, 0x3039, 0x3039        ; encoding: [0x00,0x00,0x48,0xd5,0x01,0xff,0xfd,0x03,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfe_u32 v0, v1, 0x3039, 0x3039        ; encoding: [0x00,0x00,0x10,0xd6,0x01,0xff,0xfd,0x03,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:19: error: literal operands are not supported
+// GFX1250-DIS: v_bfe_u32 v0, v1, 0x3039, 0x3039        ; encoding: [0x00,0x00,0x10,0xd6,0x01,0xff,0xfd,0x03,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:19: error: literal operands are not supported
 
 v_bfe_u32 v0, 0x3039, 0x3039, 0x3039
 // GFX10: v_bfe_u32 v0, 0x3039, 0x3039, 0x3039    ; encoding: [0x00,0x00,0x48,0xd5,0xff,0xfe,0xfd,0x03,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfe_u32 v0, 0x3039, 0x3039, 0x3039    ; encoding: [0x00,0x00,0x10,0xd6,0xff,0xfe,0xfd,0x03,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:15: error: literal operands are not supported
+// GFX1250-DIS: v_bfe_u32 v0, 0x3039, 0x3039, 0x3039    ; encoding: [0x00,0x00,0x10,0xd6,0xff,0xfe,0xfd,0x03,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:15: error: literal operands are not supported
 
 v_bfe_u32 v0, 0x3039, s1, 0x3038
 // GFX10-ERR: :[[@LINE-1]]:27: error: only one unique literal operand is allowed
@@ -52,7 +59,8 @@ v_bfe_u32 v0, 0x3039, s1, 0x3038
 v_bfe_u32 v0, 0x3039, v1, v2
 // GFX10: v_bfe_u32 v0, 0x3039, v1, v2            ; encoding: [0x00,0x00,0x48,0xd5,0xff,0x02,0x0a,0x04,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfe_u32 v0, 0x3039, v1, v2            ; encoding: [0x00,0x00,0x10,0xd6,0xff,0x02,0x0a,0x04,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:15: error: literal operands are not supported
+// GFX1250-DIS: v_bfe_u32 v0, 0x3039, v1, v2            ; encoding: [0x00,0x00,0x10,0xd6,0xff,0x02,0x0a,0x04,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:15: error: literal operands are not supported
 
 v_bfe_u32 v0, 0x3039, 0x12345, v2
 // GFX10-ERR: :[[@LINE-1]]:23: error: only one unique literal operand is allowed
@@ -62,7 +70,8 @@ v_bfe_u32 v0, 0x3039, 0x12345, v2
 v_bfe_u32 v0, s1, 0x3039, s1
 // GFX10: v_bfe_u32 v0, s1, 0x3039, s1            ; encoding: [0x00,0x00,0x48,0xd5,0x01,0xfe,0x05,0x00,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfe_u32 v0, s1, 0x3039, s1            ; encoding: [0x00,0x00,0x10,0xd6,0x01,0xfe,0x05,0x00,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:19: error: literal operands are not supported
+// GFX1250-DIS: v_bfe_u32 v0, s1, 0x3039, s1            ; encoding: [0x00,0x00,0x10,0xd6,0x01,0xfe,0x05,0x00,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:19: error: literal operands are not supported
 
 v_bfe_u32 v0, s1, 0x3039, s2
 // GFX10-ERR: :[[@LINE-1]]:27: error: invalid operand (violates constant bus restrictions)
@@ -72,17 +81,20 @@ v_bfe_u32 v0, s1, 0x3039, s2
 v_bfm_b32_e64 v0, 0x3039, s1
 // GFX10: v_bfm_b32 v0, 0x3039, s1                ; encoding: [0x00,0x00,0x63,0xd7,0xff,0x02,0x00,0x02,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfm_b32 v0, 0x3039, s1                ; encoding: [0x00,0x00,0x1d,0xd7,0xff,0x02,0x00,0x02,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:19: error: literal operands are not supported
+// GFX1250-DIS: v_bfm_b32 v0, 0x3039, s1                ; encoding: [0x00,0x00,0x1d,0xd7,0xff,0x02,0x00,0x02,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:19: error: literal operands are not supported
 
 v_bfm_b32_e64 v0, 0x3039, v1
 // GFX10: v_bfm_b32 v0, 0x3039, v1                ; encoding: [0x00,0x00,0x63,0xd7,0xff,0x02,0x02,0x02,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfm_b32 v0, 0x3039, v1                ; encoding: [0x00,0x00,0x1d,0xd7,0xff,0x02,0x02,0x02,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:19: error: literal operands are not supported
+// GFX1250-DIS: v_bfm_b32 v0, 0x3039, v1                ; encoding: [0x00,0x00,0x1d,0xd7,0xff,0x02,0x02,0x02,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:19: error: literal operands are not supported
 
 v_bfm_b32_e64 v0, 0x3039, 0x3039
 // GFX10: v_bfm_b32 v0, 0x3039, 0x3039            ; encoding: [0x00,0x00,0x63,0xd7,0xff,0xfe,0x01,0x02,0x39,0x30,0x00,0x00]
 // GFX1250: v_bfm_b32 v0, 0x3039, 0x3039            ; encoding: [0x00,0x00,0x1d,0xd7,0xff,0xfe,0x01,0x02,0x39,0x30,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:19: error: literal operands are not supported
+// GFX1250-DIS: v_bfm_b32 v0, 0x3039, 0x3039            ; encoding: [0x00,0x00,0x1d,0xd7,0xff,0xfe,0x01,0x02,0x39,0x30,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:19: error: literal operands are not supported
 
 v_bfm_b32_e64 v0, 0x3039, 0x3038
 // GFX10-ERR: :[[@LINE-1]]:27: error: only one unique literal operand is allowed
@@ -92,22 +104,26 @@ v_bfm_b32_e64 v0, 0x3039, 0x3038
 v_pk_add_f16 v1, 25.0, v2
 // GFX10: v_pk_add_f16 v1, 0x4e40, v2             ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0x04,0x02,0x1a,0x40,0x4e,0x00,0x00]
 // GFX1250: v_pk_add_f16 v1, 0x4e40, v2             ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0x04,0x02,0x1a,0x40,0x4e,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:18: error: literal operands are not supported
+// GFX1250-DIS: v_pk_add_f16 v1, 0x4e40, v2             ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0x04,0x02,0x1a,0x40,0x4e,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:18: error: literal operands are not supported
 
 v_pk_add_f16 v1, 123456, v2
 // GFX10: v_pk_add_f16 v1, 0x1e240, v2            ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0x04,0x02,0x1a,0x40,0xe2,0x01,0x00]
 // GFX1250: v_pk_add_f16 v1, 0x1e240, v2            ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0x04,0x02,0x1a,0x40,0xe2,0x01,0x00]
-// GFX9-ERR: :[[@LINE-3]]:18: error: literal operands are not supported
+// GFX1250-DIS: v_pk_add_f16 v1, 0x1e240, v2            ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0x04,0x02,0x1a,0x40,0xe2,0x01,0x00]
+// GFX9-ERR: :[[@LINE-4]]:18: error: literal operands are not supported
 
 v_pk_add_f16 v1, -200, v2
 // GFX10: v_pk_add_f16 v1, 0xffffff38, v2         ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0x04,0x02,0x1a,0x38,0xff,0xff,0xff]
 // GFX1250: v_pk_add_f16 v1, 0xffffff38, v2         ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0x04,0x02,0x1a,0x38,0xff,0xff,0xff]
-// GFX9-ERR: :[[@LINE-3]]:18: error: literal operands are not supported
+// GFX1250-DIS: v_pk_add_f16 v1, 0xffffff38, v2         ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0x04,0x02,0x1a,0x38,0xff,0xff,0xff]
+// GFX9-ERR: :[[@LINE-4]]:18: error: literal operands are not supported
 
 v_pk_add_f16 v1, 25.0, 25.0
 // GFX10: v_pk_add_f16 v1, 0x4e40, 0x4e40         ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0xfe,0x01,0x1a,0x40,0x4e,0x00,0x00]
 // GFX1250: v_pk_add_f16 v1, 0x4e40, 0x4e40         ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0xfe,0x01,0x1a,0x40,0x4e,0x00,0x00]
-// GFX9-ERR: :[[@LINE-3]]:18: error: literal operands are not supported
+// GFX1250-DIS: v_pk_add_f16 v1, 0x4e40, 0x4e40         ; encoding: [0x01,0x40,0x0f,0xcc,0xff,0xfe,0x01,0x1a,0x40,0x4e,0x00,0x00]
+// GFX9-ERR: :[[@LINE-4]]:18: error: literal operands are not supported
 
 v_pk_add_f16 v1, 25.0, 25.1
 // GFX10-ERR: :[[@LINE-1]]:24: error: only one unique literal operand is allowed
@@ -117,87 +133,104 @@ v_pk_add_f16 v1, 25.0, 25.1
 v_pk_add_u16 v1, -200, v2
 // GFX10: v_pk_add_u16 v1, 0xffffff38, v2         ; encoding: [0x01,0x40,0x0a,0xcc,0xff,0x04,0x02,0x1a,0x38,0xff,0xff,0xff]
 // GFX1250: v_pk_add_u16 v1, 0xffffff38, v2         ; encoding: [0x01,0x40,0x0a,0xcc,0xff,0x04,0x02,0x1a,0x38,0xff,0xff,0xff]
-// GFX9-ERR: :[[@LINE-3]]:18: error: literal operands are ...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/212581


More information about the llvm-commits mailing list