[llvm] a2face4 - [DXIL] Add DXIL SubArch to correspond to version number (#89125)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 18 15:06:08 PDT 2024
Author: S. Bharadwaj Yadavalli
Date: 2024-04-18T18:06:05-04:00
New Revision: a2face49ac7ba49736ca47f5e5dd7fa636b5defa
URL: https://github.com/llvm/llvm-project/commit/a2face49ac7ba49736ca47f5e5dd7fa636b5defa
DIFF: https://github.com/llvm/llvm-project/commit/a2face49ac7ba49736ca47f5e5dd7fa636b5defa.diff
LOG: [DXIL] Add DXIL SubArch to correspond to version number (#89125)
This change is in line with similar notation in SPIRV.
Decoupling version numbering of DXIL and of Shader Model is intended to
enable accurate specification of DXIL features that can be targeted by
different Shader Model versions.
Added:
Modified:
llvm/include/llvm/TargetParser/Triple.h
llvm/lib/TargetParser/Triple.cpp
llvm/unittests/TargetParser/TripleTest.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h
index f256e2b205a889..7da30e6cf96f6c 100644
--- a/llvm/include/llvm/TargetParser/Triple.h
+++ b/llvm/include/llvm/TargetParser/Triple.h
@@ -165,6 +165,17 @@ class Triple {
SPIRVSubArch_v14,
SPIRVSubArch_v15,
SPIRVSubArch_v16,
+
+ // DXIL sub-arch corresponds to its version.
+ DXILSubArch_v1_0,
+ DXILSubArch_v1_1,
+ DXILSubArch_v1_2,
+ DXILSubArch_v1_3,
+ DXILSubArch_v1_4,
+ DXILSubArch_v1_5,
+ DXILSubArch_v1_6,
+ DXILSubArch_v1_7,
+ DXILSubArch_v1_8,
};
enum VendorType {
UnknownVendor,
diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp
index 9c73f515ae6890..77fdf31d4865c0 100644
--- a/llvm/lib/TargetParser/Triple.cpp
+++ b/llvm/lib/TargetParser/Triple.cpp
@@ -573,7 +573,9 @@ static Triple::ArchType parseArch(StringRef ArchName) {
.Case("csky", Triple::csky)
.Case("loongarch32", Triple::loongarch32)
.Case("loongarch64", Triple::loongarch64)
- .Case("dxil", Triple::dxil)
+ .Cases("dxil", "dxilv1.0", "dxilv1.1", "dxilv1.2", "dxilv1.3",
+ "dxilv1.4", "dxilv1.5", "dxilv1.6", "dxilv1.7", "dxilv1.8",
+ Triple::dxil)
.Case("xtensa", Triple::xtensa)
.Default(Triple::UnknownArch);
@@ -741,6 +743,19 @@ static Triple::SubArchType parseSubArch(StringRef SubArchName) {
.EndsWith("v1.6", Triple::SPIRVSubArch_v16)
.Default(Triple::NoSubArch);
+ if (SubArchName.starts_with("dxil"))
+ return StringSwitch<Triple::SubArchType>(SubArchName)
+ .EndsWith("v1.0", Triple::DXILSubArch_v1_0)
+ .EndsWith("v1.1", Triple::DXILSubArch_v1_1)
+ .EndsWith("v1.2", Triple::DXILSubArch_v1_2)
+ .EndsWith("v1.3", Triple::DXILSubArch_v1_3)
+ .EndsWith("v1.4", Triple::DXILSubArch_v1_4)
+ .EndsWith("v1.5", Triple::DXILSubArch_v1_5)
+ .EndsWith("v1.6", Triple::DXILSubArch_v1_6)
+ .EndsWith("v1.7", Triple::DXILSubArch_v1_7)
+ .EndsWith("v1.8", Triple::DXILSubArch_v1_8)
+ .Default(Triple::NoSubArch);
+
StringRef ARMSubArch = ARM::getCanonicalArchName(SubArchName);
// For now, this is the small part. Early return.
diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp
index e1e1bbd76ecda6..0fa7e769038905 100644
--- a/llvm/unittests/TargetParser/TripleTest.cpp
+++ b/llvm/unittests/TargetParser/TripleTest.cpp
@@ -868,6 +868,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-pixel");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Pixel, T.getEnvironment());
@@ -875,6 +876,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-vertex");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Vertex, T.getEnvironment());
@@ -882,6 +884,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-geometry");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Geometry, T.getEnvironment());
@@ -889,6 +892,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-hull");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Hull, T.getEnvironment());
@@ -896,6 +900,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-domain");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Domain, T.getEnvironment());
@@ -903,6 +908,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-compute");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Compute, T.getEnvironment());
@@ -910,6 +916,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-library");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Library, T.getEnvironment());
@@ -917,6 +924,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-raygeneration");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::RayGeneration, T.getEnvironment());
@@ -924,6 +932,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-intersection");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Intersection, T.getEnvironment());
@@ -931,6 +940,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-anyhit");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::AnyHit, T.getEnvironment());
@@ -938,6 +948,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-closesthit");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::ClosestHit, T.getEnvironment());
@@ -945,6 +956,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-miss");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Miss, T.getEnvironment());
@@ -952,6 +964,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-callable");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Callable, T.getEnvironment());
@@ -959,6 +972,7 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-mesh");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Mesh, T.getEnvironment());
@@ -966,11 +980,80 @@ TEST(TripleTest, ParsedIDs) {
T = Triple("dxil-unknown-shadermodel-amplification");
EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Amplification, T.getEnvironment());
EXPECT_FALSE(T.supportsCOMDAT());
+ T = Triple("dxilv1.0-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ T = Triple("dxilv1.1-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ T = Triple("dxilv1.2-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::DXILSubArch_v1_2, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ T = Triple("dxilv1.3-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::DXILSubArch_v1_3, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ T = Triple("dxilv1.4-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::DXILSubArch_v1_4, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ T = Triple("dxilv1.5-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::DXILSubArch_v1_5, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ T = Triple("dxilv1.6-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::DXILSubArch_v1_6, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ T = Triple("dxilv1.7-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::DXILSubArch_v1_7, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ T = Triple("dxilv1.8-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ // Check specification of unknown SubArch results in
+ // unknown architecture.
+ T = Triple("dxilv1.999-unknown-unknown");
+ EXPECT_EQ(Triple::UnknownArch, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
+ T = Triple("dxil-unknown-unknown");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::UnknownOS, T.getOS());
+
T = Triple("xtensa");
EXPECT_EQ(Triple::xtensa, T.getArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
More information about the llvm-commits
mailing list