[clang] [llvm] [AMDGPU] Define gfx1250-strict target (PR #218543)
Stanislav Mekhanoshin via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 24 15:51:40 PDT 2026
https://github.com/rampitec updated https://github.com/llvm/llvm-project/pull/218543
>From a2e2c70fb247fd18deaee71024f683c4977d2f6e Mon Sep 17 00:00:00 2001
From: Stanislav Mekhanoshin <Stanislav.Mekhanoshin at amd.com>
Date: Mon, 24 Aug 2026 15:25:44 -0700
Subject: [PATCH] [AMDGPU] Define gfx1250-strict target
---
clang/test/Driver/amdgpu-macros.cl | 1 +
clang/test/Driver/amdgpu-mcpu.cl | 2 ++
clang/test/Driver/cuda-bad-arch.cu | 2 ++
.../Misc/target-invalid-cpu-note/amdgcn.c | 1 +
.../test/Misc/target-invalid-cpu-note/nvptx.c | 1 +
llvm/docs/AMDGPUUsage.rst | 13 ++++++++
llvm/include/llvm/BinaryFormat/ELF.h | 5 ++--
llvm/include/llvm/TargetParser/Triple.h | 1 +
llvm/lib/Target/AMDGPU/AMDGPU.td | 30 +++++++++++++++++++
llvm/lib/Target/AMDGPU/GCNProcessors.td | 6 ++++
llvm/lib/Target/AMDGPU/GCNSubtarget.cpp | 1 +
.../MCTargetDesc/AMDGPUTargetStreamer.cpp | 2 ++
llvm/lib/TargetParser/Triple.cpp | 1 +
llvm/test/CodeGen/AMDGPU/amdgpu-triple.ll | 5 ++++
.../CodeGen/AMDGPU/elf-header-flags-mach.ll | 2 ++
.../Object/AMDGPU/elf-header-flags-mach.yaml | 7 +++++
.../llvm-objdump/ELF/AMDGPU/subtarget.ll | 5 ++++
.../llvm-readobj/ELF/AMDGPU/elf-headers.test | 9 ++++++
.../TargetParser/TargetParserTest.cpp | 5 ++++
19 files changed, 97 insertions(+), 2 deletions(-)
diff --git a/clang/test/Driver/amdgpu-macros.cl b/clang/test/Driver/amdgpu-macros.cl
index f162b0cc541df..586a01f2766d0 100644
--- a/clang/test/Driver/amdgpu-macros.cl
+++ b/clang/test/Driver/amdgpu-macros.cl
@@ -136,6 +136,7 @@
// RUN: %clang -E -dM -target amdgcn -mcpu=gfx1200 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,FAST_FMAF %s -DWAVEFRONT_SIZE=32 -DCPU=gfx1200 -DFAMILY=GFX12
// RUN: %clang -E -dM -target amdgcn -mcpu=gfx1201 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,FAST_FMAF %s -DWAVEFRONT_SIZE=32 -DCPU=gfx1201 -DFAMILY=GFX12
// RUN: %clang -E -dM -target amdgcn -mcpu=gfx1250 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,FAST_FMAF %s -DWAVEFRONT_SIZE=32 -DCPU=gfx1250 -DFAMILY=GFX12
+// RUN: %clang -E -dM -target amdgcn -mcpu=gfx1250-strict %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,FAST_FMAF %s -DWAVEFRONT_SIZE=32 -DCPU=gfx1250_strict -DFAMILY=GFX12
// RUN: %clang -E -dM -target amdgcn -mcpu=gfx1251 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,FAST_FMAF %s -DWAVEFRONT_SIZE=32 -DCPU=gfx1251 -DFAMILY=GFX12
// RUN: %clang -E -dM -target amdgcn -mcpu=gfx1310 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,FAST_FMAF %s -DWAVEFRONT_SIZE=32 -DCPU=gfx1310 -DFAMILY=GFX13
diff --git a/clang/test/Driver/amdgpu-mcpu.cl b/clang/test/Driver/amdgpu-mcpu.cl
index 32dc3e6fe4205..3b2fe51cea315 100644
--- a/clang/test/Driver/amdgpu-mcpu.cl
+++ b/clang/test/Driver/amdgpu-mcpu.cl
@@ -120,6 +120,7 @@
// RUN: %clang -### -target amdgcn -mcpu=gfx1200 %s 2>&1 | FileCheck --check-prefix=GFX1200 %s
// RUN: %clang -### -target amdgcn -mcpu=gfx1201 %s 2>&1 | FileCheck --check-prefix=GFX1201 %s
// RUN: %clang -### -target amdgcn -mcpu=gfx1250 %s 2>&1 | FileCheck --check-prefix=GFX1250 %s
+// RUN: %clang -### -target amdgcn -mcpu=gfx1250-strict %s 2>&1 | FileCheck --check-prefix=GFX1250-STRICT %s
// RUN: %clang -### -target amdgcn -mcpu=gfx1251 %s 2>&1 | FileCheck --check-prefix=GFX1251 %s
// RUN: %clang -### -target amdgcn -mcpu=gfx1310 %s 2>&1 | FileCheck --check-prefix=GFX1310 %s
@@ -190,6 +191,7 @@
// GFX1200: "-target-cpu" "gfx1200"
// GFX1201: "-target-cpu" "gfx1201"
// GFX1250: "-target-cpu" "gfx1250"
+// GFX1250-STRICT: "-target-cpu" "gfx1250-strict"
// GFX1251: "-target-cpu" "gfx1251"
// GFX1310: "-target-cpu" "gfx1310"
diff --git a/clang/test/Driver/cuda-bad-arch.cu b/clang/test/Driver/cuda-bad-arch.cu
index 41eb96f5e3fae..9046517bd6f02 100644
--- a/clang/test/Driver/cuda-bad-arch.cu
+++ b/clang/test/Driver/cuda-bad-arch.cu
@@ -33,6 +33,8 @@
// RUN: | FileCheck -check-prefix OK %s
// RUN: %clang -### -x hip --target=x86_64-linux-gnu -nogpulib -nogpuinc --cuda-gpu-arch=gfx1250 -c %s 2>&1 \
// RUN: | FileCheck -check-prefix OK %s
+// RUN: %clang -### -x hip --target=x86_64-linux-gnu -nogpulib -nogpuinc --cuda-gpu-arch=gfx1250-strict -c %s 2>&1 \
+// RUN: | FileCheck -check-prefix OK %s
// RUN: %clang -### -x hip --target=x86_64-linux-gnu -nogpulib -nogpuinc --cuda-gpu-arch=gfx1251 -c %s 2>&1 \
// RUN: | FileCheck -check-prefix OK %s
diff --git a/clang/test/Misc/target-invalid-cpu-note/amdgcn.c b/clang/test/Misc/target-invalid-cpu-note/amdgcn.c
index 3e641a3944397..3848eb308758a 100644
--- a/clang/test/Misc/target-invalid-cpu-note/amdgcn.c
+++ b/clang/test/Misc/target-invalid-cpu-note/amdgcn.c
@@ -54,6 +54,7 @@
// CHECK-SAME: {{^}}, gfx1172
// CHECK-SAME: {{^}}, gfx1200
// CHECK-SAME: {{^}}, gfx1201
+// CHECK-SAME: {{^}}, gfx1250-strict
// CHECK-SAME: {{^}}, gfx1250
// CHECK-SAME: {{^}}, gfx1251
// CHECK-SAME: {{^}}, gfx1310
diff --git a/clang/test/Misc/target-invalid-cpu-note/nvptx.c b/clang/test/Misc/target-invalid-cpu-note/nvptx.c
index af57f6a102e2d..20dbd8dc6aa3b 100644
--- a/clang/test/Misc/target-invalid-cpu-note/nvptx.c
+++ b/clang/test/Misc/target-invalid-cpu-note/nvptx.c
@@ -97,6 +97,7 @@
// CHECK-SAME: {{^}}, gfx1172
// CHECK-SAME: {{^}}, gfx1200
// CHECK-SAME: {{^}}, gfx1201
+// CHECK-SAME: {{^}}, gfx1250-strict
// CHECK-SAME: {{^}}, gfx1250
// CHECK-SAME: {{^}}, gfx1251
// CHECK-SAME: {{^}}, gfx1310
diff --git a/llvm/docs/AMDGPUUsage.rst b/llvm/docs/AMDGPUUsage.rst
index 9b436e00a43ab..97f2e28631222 100644
--- a/llvm/docs/AMDGPUUsage.rst
+++ b/llvm/docs/AMDGPUUsage.rst
@@ -667,6 +667,18 @@ Every processor supports every OS ABI (see :ref:`amdgpu-os`) with the following
work-item
IDs
+ ``gfx1250-strict`` ``amdgpu12.50s`` APU - sramecc - Architected *TBA*
+ flat
+ scratch .. TODO::
+ - Packed
+ work-item Add product
+ IDs names.
+ - Globally
+ Accessible
+ Scratch
+ - Workgroup
+ Clusters
+
``gfx1250`` ``amdgpu12.50`` APU - sramecc - Architected *TBA*
flat
scratch .. TODO::
@@ -3309,6 +3321,7 @@ The AMDGPU backend uses the following ELF header:
``EF_AMDGPU_MACH_AMDGCN_GFX11_7_GENERIC`` 0x062 ``gfx11-7-generic``
``EF_AMDGPU_MACH_AMDGCN_GFX13_GENERIC`` 0x063 ``gfx13-generic``
*reserved* 0x070 Reserved.
+ ``EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT`` 0x0eb ``gfx1250-strict``
========================================== ========== =============================
Sections
diff --git a/llvm/include/llvm/BinaryFormat/ELF.h b/llvm/include/llvm/BinaryFormat/ELF.h
index 823a08d7dd81b..46d806e1b9d8a 100644
--- a/llvm/include/llvm/BinaryFormat/ELF.h
+++ b/llvm/include/llvm/BinaryFormat/ELF.h
@@ -842,7 +842,8 @@ enum {
X(0x5e, EF_AMDGPU_MACH_AMDGCN_GFX1171, "gfx1171") \
X(0x5f, EF_AMDGPU_MACH_AMDGCN_GFX9_4_GENERIC, "gfx9-4-generic") \
X(0x62, EF_AMDGPU_MACH_AMDGCN_GFX11_7_GENERIC, "gfx11-7-generic") \
- X(0x63, EF_AMDGPU_MACH_AMDGCN_GFX13_GENERIC, "gfx13-generic")
+ X(0x63, EF_AMDGPU_MACH_AMDGCN_GFX13_GENERIC, "gfx13-generic") \
+ X(0xeb, EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT, "gfx1250-strict")
enum : unsigned {
// clang-format off
@@ -875,7 +876,7 @@ enum : unsigned {
// First/last AMDGCN-based processors.
EF_AMDGPU_MACH_AMDGCN_FIRST = EF_AMDGPU_MACH_AMDGCN_GFX600,
- EF_AMDGPU_MACH_AMDGCN_LAST = EF_AMDGPU_MACH_AMDGCN_GFX13_GENERIC,
+ EF_AMDGPU_MACH_AMDGCN_LAST = EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT,
// Indicates if the "xnack" target feature is enabled for all code contained
// in the object.
diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h
index 18634a8bbe6ff..4344ffbd4519a 100644
--- a/llvm/include/llvm/TargetParser/Triple.h
+++ b/llvm/include/llvm/TargetParser/Triple.h
@@ -268,6 +268,7 @@ class Triple {
AMDGPUSubArch1201,
AMDGPUSubArch12_5,
+ AMDGPUSubArch1250_STRICT,
AMDGPUSubArch1250,
AMDGPUSubArch1251,
diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td
index 160e91cb0da66..47171468dd1aa 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPU.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPU.td
@@ -1555,6 +1555,11 @@ def FeatureUseAddPC64Inst : SubtargetFeature<"use-add-pc64-inst",
"Use s_add_pc_i64 instruction."
>;
+defm GFX1250_STRICT : AMDGPUSubtargetFeature<"gfx1250-strict",
+ "gfx1250 strict mode",
+ /*GenPredicate=*/0
+>;
+
defm VOP3PX2IncrementsVaVdstTwice : AMDGPUSubtargetFeature<"vop3px2-increments-va-vdst-twice",
"VOP3PX2 encoded instructions increment the VaVdst counter twice", GenPredicate=false
>;
@@ -2386,6 +2391,31 @@ def FeatureISAVersion12_50_Common : FeatureSet<
FeatureVMulU64Inst,
]>;
+def FeatureISAVersion12_50_STRICT : FeatureSet<
+ !listconcat(FeatureISAVersion12_50_Common.Features,
+ [FeatureGFX1250_STRICT,
+ FeatureAddressableLocalMemorySize327680,
+ FeatureVOP3PX2IncrementsVaVdstTwice,
+ FeatureSetregVGPRMSBFixup,
+ FeatureCubeInsts,
+ FeatureLerpInst,
+ FeatureSadInsts,
+ FeatureQsadInsts,
+ FeatureMsadInsts,
+ FeatureMqsadPkInsts,
+ FeatureMqsadInsts,
+ FeatureCvtNormInsts,
+ FeatureCvtPkNormVOP2Insts,
+ FeatureCvtPkNormVOP3Insts,
+ FeatureSWMMACGfx1200Insts,
+ FeatureSWMMACGfx1250Insts,
+ FeatureTransCoexecutionHazard,
+ FeatureWMMACoexecutionHazards,
+ FeatureDataCacheLineSize128,
+ FeatureRequiresInitialUnclausedVmem,
+ FeatureNeedsTDMDrain,
+ ])>;
+
def FeatureISAVersion12_50 : FeatureSet<
!listconcat(FeatureISAVersion12_50_Common.Features,
[FeatureAddressableLocalMemorySize327680,
diff --git a/llvm/lib/Target/AMDGPU/GCNProcessors.td b/llvm/lib/Target/AMDGPU/GCNProcessors.td
index 47dc1f182c7b4..fa32a86cddad1 100644
--- a/llvm/lib/Target/AMDGPU/GCNProcessors.td
+++ b/llvm/lib/Target/AMDGPU/GCNProcessors.td
@@ -368,6 +368,11 @@ def GFX12_GENERIC : AMDGPUProcessorModel<"gfx12-generic", GFX12SpeedModel,
let CoveredGPUs = [GFX1200, GFX1201];
}
+def GFX1250_STRICT : AMDGPUProcessorModel<"gfx1250-strict", GFX1250SpeedModel,
+ FeatureISAVersion12_50_STRICT.Features, [12, 5, 0]> {
+ let ArchFeatures = [FEATURE_FAST_FMA_F32, FEATURE_FAST_DENORMAL_F32, FEATURE_WAVE32, FEATURE_XNACK, FEATURE_SRAMECC];
+}
+
def GFX1250 : AMDGPUProcessorModel<"gfx1250", GFX1250SpeedModel,
FeatureISAVersion12_50.Features, [12, 5, 0]> {
let ArchFeatures = [FEATURE_FAST_FMA_F32, FEATURE_FAST_DENORMAL_F32, FEATURE_WAVE32, FEATURE_XNACK, FEATURE_SRAMECC];
@@ -404,3 +409,4 @@ def GFX13_GENERIC : AMDGPUProcessorModel<"gfx13-generic", GFX12SpeedModel,
def : AMDGPUFamily<"6", [GFX600, GFX601, GFX602]>;
def : AMDGPUFamily<"7", [GFX700, GFX701, GFX702, GFX703, GFX704, GFX705]>;
def : AMDGPUFamily<"8", [GFX801, GFX802, GFX803, GFX805]>;
+def : AMDGPUFamily<"1250_STRICT", [GFX1250_STRICT]>;
diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp b/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
index 225cdfeb914c6..1778af5e84745 100644
--- a/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
@@ -83,6 +83,7 @@ static AMDGPUSubtarget::Generation computeDefaultGeneration(const Triple &TT) {
return AMDGPUSubtarget::GFX11;
case Triple::AMDGPUSubArch12:
case Triple::AMDGPUSubArch12_5:
+ case Triple::AMDGPUSubArch1250_STRICT:
return AMDGPUSubtarget::GFX12;
case Triple::AMDGPUSubArch13:
return AMDGPUSubtarget::GFX13;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
index 463387f064ef0..be162919c46ce 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
@@ -132,6 +132,7 @@ StringRef AMDGPUTargetStreamer::getArchNameFromElfMach(unsigned ElfMach) {
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1172: AK = GK_GFX1172; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1200: AK = GK_GFX1200; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1201: AK = GK_GFX1201; break;
+ case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT: AK = GK_GFX1250_STRICT; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1250: AK = GK_GFX1250; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1251: AK = GK_GFX1251; break;
case ELF::EF_AMDGPU_MACH_AMDGCN_GFX1310: AK = GK_GFX1310; break;
@@ -227,6 +228,7 @@ unsigned AMDGPUTargetStreamer::getElfMach(StringRef GPU) {
case GK_GFX1172: return ELF::EF_AMDGPU_MACH_AMDGCN_GFX1172;
case GK_GFX1200: return ELF::EF_AMDGPU_MACH_AMDGCN_GFX1200;
case GK_GFX1201: return ELF::EF_AMDGPU_MACH_AMDGCN_GFX1201;
+ case GK_GFX1250_STRICT: return ELF::EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT;
case GK_GFX1250: return ELF::EF_AMDGPU_MACH_AMDGCN_GFX1250;
case GK_GFX1251: return ELF::EF_AMDGPU_MACH_AMDGCN_GFX1251;
case GK_GFX1310: return ELF::EF_AMDGPU_MACH_AMDGCN_GFX1310;
diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp
index 5bfaae7fbc998..231c8641c590e 100644
--- a/llvm/lib/TargetParser/Triple.cpp
+++ b/llvm/lib/TargetParser/Triple.cpp
@@ -840,6 +840,7 @@ Triple::SubArchType Triple::parseSubArch(StringRef SubArchName) {
.Case("12.01", Triple::AMDGPUSubArch1201)
.Case("12.5", Triple::AMDGPUSubArch12_5)
.Case("12.50", Triple::AMDGPUSubArch1250)
+ .Case("12.50s", Triple::AMDGPUSubArch1250_STRICT)
.Case("12.51", Triple::AMDGPUSubArch1251)
.Case("13", Triple::AMDGPUSubArch13)
.Case("13.10", Triple::AMDGPUSubArch1310)
diff --git a/llvm/test/CodeGen/AMDGPU/amdgpu-triple.ll b/llvm/test/CodeGen/AMDGPU/amdgpu-triple.ll
index f7187fb03f072..4f93ba23919bc 100644
--- a/llvm/test/CodeGen/AMDGPU/amdgpu-triple.ll
+++ b/llvm/test/CodeGen/AMDGPU/amdgpu-triple.ll
@@ -33,6 +33,9 @@
; RUN: llc -mtriple=amdgpu12.5-amd-amdhsa < %s | FileCheck -check-prefixes=GFX125 %s
; RUN: llc -mtriple=amdgpu12.5-amd-amdhsa -mcpu=gfx1250 < %s | FileCheck -check-prefixes=GFX1250 %s
+; RUN: llc -mtriple=amdgpu12.50s-amd-amdhsa < %s | FileCheck -check-prefixes=GFX1250-STRICT %s
+; RUN: llc -mtriple=amdgpu12.50s-amd-amdhsa -mcpu=gfx1250-strict < %s | FileCheck -check-prefixes=GFX1250-STRICT %s
+
; RUN: llc -mtriple=amdgpu13-amd-amdhsa < %s | FileCheck -check-prefixes=GFX13 %s
; RUN: llc -mtriple=amdgpu13-amd-amdhsa -mcpu=gfx1310 < %s | FileCheck -check-prefixes=GFX1310 %s
@@ -71,6 +74,8 @@
; GFX125: .amdgcn_target "amdgpu12.5-amd-amdhsa-unknown-gfx12-5-generic"
; GFX1250: .amdgcn_target "amdgpu12.5-amd-amdhsa-unknown-gfx1250"
+; GFX1250-STRICT: .amdgcn_target "amdgpu12.50s-amd-amdhsa-unknown-gfx1250-strict"
+
; GFX13: .amdgcn_target "amdgpu13-amd-amdhsa-unknown-gfx13-generic"
; GFX1310: .amdgcn_target "amdgpu13-amd-amdhsa-unknown-gfx1310"
define amdgpu_kernel void @kernel() {
diff --git a/llvm/test/CodeGen/AMDGPU/elf-header-flags-mach.ll b/llvm/test/CodeGen/AMDGPU/elf-header-flags-mach.ll
index 24e17a76043a5..dad87e78d3748 100644
--- a/llvm/test/CodeGen/AMDGPU/elf-header-flags-mach.ll
+++ b/llvm/test/CodeGen/AMDGPU/elf-header-flags-mach.ll
@@ -81,6 +81,7 @@
; RUN: llc -filetype=obj -mtriple=amdgpu11.72 < %s | llvm-readobj --file-header - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX1172 %s
; RUN: llc -filetype=obj -mtriple=amdgpu12.00 < %s | llvm-readobj --file-header - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX1200 %s
; RUN: llc -filetype=obj -mtriple=amdgpu12.01 < %s | llvm-readobj --file-header - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX1201 %s
+; RUN: llc -filetype=obj -mtriple=amdgpu12.50s < %s | llvm-readobj --file-header - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX1250_STRICT %s
; RUN: llc -filetype=obj -mtriple=amdgpu12.50 < %s | llvm-readobj --file-header - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX1250 %s
; RUN: llc -filetype=obj -mtriple=amdgpu12.51 < %s | llvm-readobj --file-header - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX1251 %s
; RUN: llc -filetype=obj -mtriple=amdgpu13.10 < %s | llvm-readobj --file-header - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX1310 %s
@@ -172,6 +173,7 @@
; GFX1172: EF_AMDGPU_MACH_AMDGCN_GFX1172 (0x5C)
; GFX1200: EF_AMDGPU_MACH_AMDGCN_GFX1200 (0x48)
; GFX1201: EF_AMDGPU_MACH_AMDGCN_GFX1201 (0x4E)
+; GFX1250_STRICT: EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT (0xEB)
; GFX1250: EF_AMDGPU_MACH_AMDGCN_GFX1250 (0x49)
; GFX1251: EF_AMDGPU_MACH_AMDGCN_GFX1251 (0x5A)
; GFX1310: EF_AMDGPU_MACH_AMDGCN_GFX1310 (0x50)
diff --git a/llvm/test/Object/AMDGPU/elf-header-flags-mach.yaml b/llvm/test/Object/AMDGPU/elf-header-flags-mach.yaml
index 2a24c2d438e7f..34340f307d19e 100644
--- a/llvm/test/Object/AMDGPU/elf-header-flags-mach.yaml
+++ b/llvm/test/Object/AMDGPU/elf-header-flags-mach.yaml
@@ -262,6 +262,10 @@
# RUN: llvm-readobj -S --file-headers %t.o.AMDGCN_GFX1250 | FileCheck --check-prefixes=ELF-AMDGCN-ALL,ELF-AMDGCN-GFX1250 %s
# RUN: obj2yaml %t.o.AMDGCN_GFX1250 | FileCheck --check-prefixes=YAML-AMDGCN-ALL,YAML-AMDGCN-GFX1250 %s
+# RUN: sed -e 's/<BITS>/64/' -e 's/<MACH>/AMDGCN_GFX1250_STRICT/' %s | yaml2obj -o %t.o.AMDGCN_GFX1250_STRICT
+# RUN: llvm-readobj -S --file-headers %t.o.AMDGCN_GFX1250_STRICT | FileCheck --check-prefixes=ELF-AMDGCN-ALL,ELF-AMDGCN-GFX1250-STRICT %s
+# RUN: obj2yaml %t.o.AMDGCN_GFX1250_STRICT | FileCheck --check-prefixes=YAML-AMDGCN-ALL,YAML-AMDGCN-GFX1250-STRICT %s
+
# RUN: sed -e 's/<BITS>/64/' -e 's/<MACH>/AMDGCN_GFX1251/' %s | yaml2obj -o %t.o.AMDGCN_GFX1251
# RUN: llvm-readobj -S --file-headers %t.o.AMDGCN_GFX1251 | FileCheck --check-prefixes=ELF-AMDGCN-ALL,ELF-AMDGCN-GFX1251 %s
# RUN: obj2yaml %t.o.AMDGCN_GFX1251 | FileCheck --check-prefixes=YAML-AMDGCN-ALL,YAML-AMDGCN-GFX1251 %s
@@ -522,6 +526,9 @@
# ELF-AMDGCN-GFX1250: EF_AMDGPU_MACH_AMDGCN_GFX1250 (0x49)
# YAML-AMDGCN-GFX1250: Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX1250 ]
+# ELF-AMDGCN-GFX1250-STRICT: EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT (0xEB)
+# YAML-AMDGCN-GFX1250-STRICT: Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT ]
+
# ELF-AMDGCN-GFX1251: EF_AMDGPU_MACH_AMDGCN_GFX1251 (0x5A)
# YAML-AMDGCN-GFX1251: Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX1251 ]
diff --git a/llvm/test/tools/llvm-objdump/ELF/AMDGPU/subtarget.ll b/llvm/test/tools/llvm-objdump/ELF/AMDGPU/subtarget.ll
index 218a7e8dec159..f478eb649c3d9 100644
--- a/llvm/test/tools/llvm-objdump/ELF/AMDGPU/subtarget.ll
+++ b/llvm/test/tools/llvm-objdump/ELF/AMDGPU/subtarget.ll
@@ -43,6 +43,11 @@ define amdgpu_kernel void @test_kernel() {
; RUN: llvm-objdump -D %t.o > %t-detect.txt
; RUN: diff %t-specify.txt %t-detect.txt
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250-strict -filetype=obj -O0 -o %t.o %s
+; RUN: llvm-objdump -D --arch-name=amdgpu --mcpu=gfx1250-strict %t.o > %t-specify.txt
+; RUN: llvm-objdump -D %t.o > %t-detect.txt
+; RUN: diff %t-specify.txt %t-detect.txt
+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1251 -filetype=obj -O0 -o %t.o %s
; RUN: llvm-objdump -D --arch-name=amdgpu --mcpu=gfx1251 %t.o > %t-specify.txt
; RUN: llvm-objdump -D %t.o > %t-detect.txt
diff --git a/llvm/test/tools/llvm-readobj/ELF/AMDGPU/elf-headers.test b/llvm/test/tools/llvm-readobj/ELF/AMDGPU/elf-headers.test
index c802aed428631..974cb1dea5ec0 100644
--- a/llvm/test/tools/llvm-readobj/ELF/AMDGPU/elf-headers.test
+++ b/llvm/test/tools/llvm-readobj/ELF/AMDGPU/elf-headers.test
@@ -502,6 +502,15 @@
# RUN: yaml2obj %s -o %t -DABI_VERSION=2 -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1250
# RUN: llvm-readobj -h %t | FileCheck %s --check-prefixes=ALL,KNOWN-ABI-VERSION,SINGLE-FLAG --match-full-lines -DABI_VERSION=2 -DFILE=%t -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1250 -DFLAG_VALUE=0x49
+# RUN: yaml2obj %s -o %t -DABI_VERSION=0 -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT
+# RUN: llvm-readobj -h %t | FileCheck %s --check-prefixes=ALL,KNOWN-ABI-VERSION,SINGLE-FLAG --match-full-lines -DABI_VERSION=0 -DFILE=%t -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT -DFLAG_VALUE=0xEB
+
+# RUN: yaml2obj %s -o %t -DABI_VERSION=1 -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT
+# RUN: llvm-readobj -h %t | FileCheck %s --check-prefixes=ALL,KNOWN-ABI-VERSION,SINGLE-FLAG --match-full-lines -DABI_VERSION=1 -DFILE=%t -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT -DFLAG_VALUE=0xEB
+
+# RUN: yaml2obj %s -o %t -DABI_VERSION=2 -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT
+# RUN: llvm-readobj -h %t | FileCheck %s --check-prefixes=ALL,KNOWN-ABI-VERSION,SINGLE-FLAG --match-full-lines -DABI_VERSION=2 -DFILE=%t -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1250_STRICT -DFLAG_VALUE=0xEB
+
# RUN: yaml2obj %s -o %t -DABI_VERSION=0 -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1251
# RUN: llvm-readobj -h %t | FileCheck %s --check-prefixes=ALL,KNOWN-ABI-VERSION,SINGLE-FLAG --match-full-lines -DABI_VERSION=0 -DFILE=%t -DFLAG_NAME=EF_AMDGPU_MACH_AMDGCN_GFX1251 -DFLAG_VALUE=0x5A
diff --git a/llvm/unittests/TargetParser/TargetParserTest.cpp b/llvm/unittests/TargetParser/TargetParserTest.cpp
index 0b09569868d36..6159dd61f4c31 100644
--- a/llvm/unittests/TargetParser/TargetParserTest.cpp
+++ b/llvm/unittests/TargetParser/TargetParserTest.cpp
@@ -2516,6 +2516,8 @@ TEST(TargetParserTest, testAMDGPUArch) {
EXPECT_EQ(Triple("amdgpu12.01--").getSubArch(), Triple::AMDGPUSubArch1201);
EXPECT_EQ(Triple("amdgpu12.5--").getSubArch(), Triple::AMDGPUSubArch12_5);
EXPECT_EQ(Triple("amdgpu12.50--").getSubArch(), Triple::AMDGPUSubArch1250);
+ EXPECT_EQ(Triple("amdgpu12.50s--").getSubArch(),
+ Triple::AMDGPUSubArch1250_STRICT);
EXPECT_EQ(Triple("amdgpu12.51--").getSubArch(), Triple::AMDGPUSubArch1251);
EXPECT_EQ(Triple("amdgpu122--").getSubArch(), Triple::NoSubArch); // Unknown
EXPECT_EQ(Triple("amdgpu12.59--").getSubArch(),
@@ -2946,6 +2948,7 @@ TEST(TargetParserTest, testAMDGPUgetGPUKindFromSubArch) {
{Triple::AMDGPUSubArch1200, AMDGPU::GK_GFX1200},
{Triple::AMDGPUSubArch1201, AMDGPU::GK_GFX1201},
{Triple::AMDGPUSubArch12_5, AMDGPU::GK_GFX12_5_GENERIC},
+ {Triple::AMDGPUSubArch1250_STRICT, AMDGPU::GK_GFX1250_STRICT},
{Triple::AMDGPUSubArch1250, AMDGPU::GK_GFX1250},
{Triple::AMDGPUSubArch1251, AMDGPU::GK_GFX1251},
@@ -2966,6 +2969,8 @@ TEST(TargetParserTest, testAMDGPUgetIsaVersionFromSubArch) {
(AMDGPU::IsaVersion{9, 0, 0}));
EXPECT_EQ(AMDGPU::getIsaVersion(Triple::AMDGPUSubArch1250),
(AMDGPU::IsaVersion{12, 5, 0}));
+ EXPECT_EQ(AMDGPU::getIsaVersion(Triple::AMDGPUSubArch1250_STRICT),
+ (AMDGPU::IsaVersion{12, 5, 0}));
EXPECT_EQ(AMDGPU::getIsaVersion(Triple::AMDGPUSubArch1251),
(AMDGPU::IsaVersion{12, 5, 1}));
EXPECT_EQ(AMDGPU::getIsaVersion(Triple::AMDGPUSubArch1310),
More information about the cfe-commits
mailing list