[llvm] [AMDGPU] Add VEXPORT encoding for gfx13 (PR #181788)

Mariusz Sikora via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 17 01:00:58 PST 2026


https://github.com/mariusz-sikora-at-amd created https://github.com/llvm/llvm-project/pull/181788

None

>From ca3662e8a0f9ec372de7f595b78e9196989495a3 Mon Sep 17 00:00:00 2001
From: Jay Foad <jay.foad at amd.com>
Date: Thu, 12 Feb 2026 05:44:43 -0500
Subject: [PATCH] [AMDGPU] Add VEXPORT encoding for gfx13

---
 llvm/lib/Target/AMDGPU/EXPInstructions.td     | 23 +++----
 .../Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp    |  2 +-
 llvm/test/MC/AMDGPU/exp.s                     |  1 +
 llvm/test/MC/AMDGPU/gfx13_asm_vexport.s       | 66 +++++++++++++++++++
 4 files changed, 78 insertions(+), 14 deletions(-)
 create mode 100644 llvm/test/MC/AMDGPU/gfx13_asm_vexport.s

diff --git a/llvm/lib/Target/AMDGPU/EXPInstructions.td b/llvm/lib/Target/AMDGPU/EXPInstructions.td
index 701a4c7923eff..c9b236ab1f06a 100644
--- a/llvm/lib/Target/AMDGPU/EXPInstructions.td
+++ b/llvm/lib/Target/AMDGPU/EXPInstructions.td
@@ -101,7 +101,7 @@ defm EXP      : EXP_Real_si, EXP_Real_vi, EXP_Real_gfx10;
 defm EXP_DONE : EXP_Real_si, EXP_Real_vi, EXP_Real_gfx10;
 
 //===----------------------------------------------------------------------===//
-// GFX11, GFX12.
+// GFX11, GFX12, GFX13.
 //===----------------------------------------------------------------------===//
 
 multiclass EXP_Real_gfx11 {
@@ -114,25 +114,22 @@ multiclass EXP_Real_gfx11 {
   }
 }
 
-multiclass VEXPORT_Real_gfx12 {
+multiclass VEXPORT_Real<GFXGen Gen> {
   defvar ps = !cast<EXP_Pseudo>(NAME);
-  def _gfx12 : EXP_Real_Row<ps, SIEncodingFamily.GFX12, "export">,
-    EXPe_Row {
-    let AssemblerPredicate = isGFX12Only;
+  def Gen.Suffix : EXP_Real_Row<ps, Gen.Subtarget, "export">,
+    EXPe_Row, MnemonicAlias<"exp", "export">, Requires<[Gen.AssemblerPredicate]> {
+    let AssemblerPredicate = Gen.AssemblerPredicate;
     let OtherPredicates = [HasExportInsts];
-    let DecoderNamespace = "GFX12";
+    let DecoderNamespace = Gen.DecoderNamespace;
     let row = ps.row;
     let done = ps.done;
   }
-  def : AMDGPUMnemonicAlias<"exp", "export"> {
-    let AssemblerPredicate = isGFX12Plus;
-  }
 }
 
-defm EXP          : EXP_Real_gfx11, VEXPORT_Real_gfx12;
-defm EXP_DONE     : EXP_Real_gfx11, VEXPORT_Real_gfx12;
-defm EXP_ROW      : EXP_Real_gfx11, VEXPORT_Real_gfx12;
-defm EXP_ROW_DONE : EXP_Real_gfx11, VEXPORT_Real_gfx12;
+defm EXP          : EXP_Real_gfx11, VEXPORT_Real<GFX12Not12_50Gen>, VEXPORT_Real<GFX13Gen>;
+defm EXP_DONE     : EXP_Real_gfx11, VEXPORT_Real<GFX12Not12_50Gen>, VEXPORT_Real<GFX13Gen>;
+defm EXP_ROW      : EXP_Real_gfx11, VEXPORT_Real<GFX12Not12_50Gen>, VEXPORT_Real<GFX13Gen>;
+defm EXP_ROW_DONE : EXP_Real_gfx11, VEXPORT_Real<GFX12Not12_50Gen>, VEXPORT_Real<GFX13Gen>;
 
 //===----------------------------------------------------------------------===//
 // EXP Patterns
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index 3f32d1166fc89..79296279a43f0 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -2264,7 +2264,7 @@ bool isSupportedTgtId(unsigned Id, const MCSubtargetInfo &STI) {
     return isGFX11Plus(STI);
   default:
     if (Id >= ET_PARAM0 && Id <= ET_PARAM31)
-      return !isGFX11Plus(STI);
+      return !isGFX11Plus(STI) || isGFX13Plus(STI);
     return true;
   }
 }
diff --git a/llvm/test/MC/AMDGPU/exp.s b/llvm/test/MC/AMDGPU/exp.s
index a04642929239b..e2072b412857c 100644
--- a/llvm/test/MC/AMDGPU/exp.s
+++ b/llvm/test/MC/AMDGPU/exp.s
@@ -5,6 +5,7 @@
 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1010 -show-encoding %s | FileCheck -check-prefix=GFX10 %s
 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -show-encoding %s | FileCheck -check-prefix=GFX10 %s
 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -show-encoding %s | FileCheck -check-prefix=GFX12 %s
+// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1310 -show-encoding %s | FileCheck -check-prefix=GFX12 %s
 
 // Check format without comma between target export and first data
 exp mrt0 off, off, off, off
diff --git a/llvm/test/MC/AMDGPU/gfx13_asm_vexport.s b/llvm/test/MC/AMDGPU/gfx13_asm_vexport.s
new file mode 100644
index 0000000000000..ba8830eae8d80
--- /dev/null
+++ b/llvm/test/MC/AMDGPU/gfx13_asm_vexport.s
@@ -0,0 +1,66 @@
+// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
+// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1310 -show-encoding < %s | FileCheck -check-prefix=GFX13 %s
+// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1310 -show-encoding < %s | %extract-encodings | llvm-mc -triple=amdgcn -mcpu=gfx1310 -disassemble -show-encoding | FileCheck -check-prefix=GFX13 %s
+
+export mrt0 v0, off, off, off
+// GFX13: export mrt0, v0, off, off, off          ; encoding: [0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export mrt7 v0, off, off, off
+// GFX13: export mrt7, v0, off, off, off          ; encoding: [0x71,0x00,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export mrtz v0, off, off, off
+// GFX13: export mrtz, v0, off, off, off          ; encoding: [0x81,0x00,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export pos0 v0, off, off, off
+// GFX13: export pos0, v0, off, off, off          ; encoding: [0xc1,0x00,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export pos4 v0, off, off, off
+// GFX13: export pos4, v0, off, off, off          ; encoding: [0x01,0x01,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export prim v0, off, off, off
+// GFX13: export prim, v0, off, off, off          ; encoding: [0x41,0x01,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export dual_src_blend0 v0, off, off, off
+// GFX13: export dual_src_blend0, v0, off, off, off ; encoding: [0x51,0x01,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export dual_src_blend1 v0, off, off, off
+// GFX13: export dual_src_blend1, v0, off, off, off ; encoding: [0x61,0x01,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export param0 v0, off, off, off
+// GFX13: export param0, v0, off, off, off        ; encoding: [0x01,0x02,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export param31 v0, off, off, off
+// GFX13: export param31, v0, off, off, off       ; encoding: [0xf1,0x03,0x00,0xf8,0x00,0x00,0x00,0x00]
+
+export mrt0 v4, off, off, off
+// GFX13: export mrt0, v4, off, off, off          ; encoding: [0x01,0x00,0x00,0xf8,0x04,0x00,0x00,0x00]
+
+export mrt0 off, v3, off, off
+// GFX13: export mrt0, off, v3, off, off          ; encoding: [0x02,0x00,0x00,0xf8,0x00,0x03,0x00,0x00]
+
+export mrt0 off, off, v2, off
+// GFX13: export mrt0, off, off, v2, off          ; encoding: [0x04,0x00,0x00,0xf8,0x00,0x00,0x02,0x00]
+
+export mrt0 off, off, off, v1
+// GFX13: export mrt0, off, off, off, v1          ; encoding: [0x08,0x00,0x00,0xf8,0x00,0x00,0x00,0x01]
+
+export mrt0 v4, v3, off, off
+// GFX13: export mrt0, v4, v3, off, off           ; encoding: [0x03,0x00,0x00,0xf8,0x04,0x03,0x00,0x00]
+
+export mrt0 v4, off, v2, off
+// GFX13: export mrt0, v4, off, v2, off           ; encoding: [0x05,0x00,0x00,0xf8,0x04,0x00,0x02,0x00]
+
+export mrt0 v4, off, off, v1
+// GFX13: export mrt0, v4, off, off, v1           ; encoding: [0x09,0x00,0x00,0xf8,0x04,0x00,0x00,0x01]
+
+export mrt0 v4, v3, v2, v1
+// GFX13: export mrt0, v4, v3, v2, v1             ; encoding: [0x0f,0x00,0x00,0xf8,0x04,0x03,0x02,0x01]
+
+export mrt0 v4, v3, v2, v1 row_en
+// GFX13: export mrt0, v4, v3, v2, v1 row_en      ; encoding: [0x0f,0x20,0x00,0xf8,0x04,0x03,0x02,0x01]
+
+export mrt0 v4, v3, v2, v1 done
+// GFX13: export mrt0, v4, v3, v2, v1 done        ; encoding: [0x0f,0x08,0x00,0xf8,0x04,0x03,0x02,0x01]
+
+export mrt0 v4, v3, v2, v1 done row_en
+// GFX13: export mrt0, v4, v3, v2, v1 done row_en ; encoding: [0x0f,0x28,0x00,0xf8,0x04,0x03,0x02,0x01]



More information about the llvm-commits mailing list