Skip to content

Commit 6ff66c1

Browse files
committed
[DXIL] Add DXIL SubArch to correspond to version number
This change is in line with similar notation in SPIRV.
1 parent 254cdcd commit 6ff66c1

File tree

3 files changed

+78
-0
lines changed

3 files changed

+78
-0
lines changed

llvm/include/llvm/TargetParser/Triple.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,17 @@ class Triple {
165165
SPIRVSubArch_v14,
166166
SPIRVSubArch_v15,
167167
SPIRVSubArch_v16,
168+
169+
// DXIL sub-arch corresponds to its version.
170+
DXILSubArch_v10,
171+
DXILSubArch_v11,
172+
DXILSubArch_v12,
173+
DXILSubArch_v13,
174+
DXILSubArch_v14,
175+
DXILSubArch_v15,
176+
DXILSubArch_v16,
177+
DXILSubArch_v17,
178+
DXILSubArch_v18,
168179
};
169180
enum VendorType {
170181
UnknownVendor,

llvm/lib/TargetParser/Triple.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,19 @@ static Triple::SubArchType parseSubArch(StringRef SubArchName) {
741741
.EndsWith("v1.6", Triple::SPIRVSubArch_v16)
742742
.Default(Triple::NoSubArch);
743743

744+
if (SubArchName.starts_with("dxil"))
745+
return StringSwitch<Triple::SubArchType>(SubArchName)
746+
.EndsWith("v1.0", Triple::DXILSubArch_v10)
747+
.EndsWith("v1.1", Triple::DXILSubArch_v11)
748+
.EndsWith("v1.2", Triple::DXILSubArch_v12)
749+
.EndsWith("v1.3", Triple::DXILSubArch_v13)
750+
.EndsWith("v1.4", Triple::DXILSubArch_v14)
751+
.EndsWith("v1.5", Triple::DXILSubArch_v15)
752+
.EndsWith("v1.6", Triple::DXILSubArch_v16)
753+
.EndsWith("v1.7", Triple::DXILSubArch_v17)
754+
.EndsWith("v1.8", Triple::DXILSubArch_v18)
755+
.Default(Triple::NoSubArch);
756+
744757
StringRef ARMSubArch = ARM::getCanonicalArchName(SubArchName);
745758

746759
// For now, this is the small part. Early return.

llvm/unittests/TargetParser/TripleTest.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,60 @@ TEST(TripleTest, ParsedIDs) {
971971
EXPECT_EQ(Triple::Amplification, T.getEnvironment());
972972
EXPECT_FALSE(T.supportsCOMDAT());
973973

974+
T = Triple("dxilv1.0-unknown-unknown");
975+
EXPECT_EQ(Triple::dxil, T.getArch());
976+
EXPECT_EQ(Triple::DXILSubArch_v10, T.getSubArch());
977+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
978+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
979+
980+
T = Triple("dxilv1.1-unknown-unknown");
981+
EXPECT_EQ(Triple::dxil, T.getArch());
982+
EXPECT_EQ(Triple::DXILSubArch_v11, T.getSubArch());
983+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
984+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
985+
986+
T = Triple("dxilv1.2-unknown-unknown");
987+
EXPECT_EQ(Triple::dxil, T.getArch());
988+
EXPECT_EQ(Triple::DXILSubArch_v12, T.getSubArch());
989+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
990+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
991+
992+
T = Triple("dxilv1.3-unknown-unknown");
993+
EXPECT_EQ(Triple::dxil, T.getArch());
994+
EXPECT_EQ(Triple::DXILSubArch_v13, T.getSubArch());
995+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
996+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
997+
998+
T = Triple("dxilv1.4-unknown-unknown");
999+
EXPECT_EQ(Triple::dxil, T.getArch());
1000+
EXPECT_EQ(Triple::DXILSubArch_v14, T.getSubArch());
1001+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1002+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
1003+
1004+
T = Triple("dxilv1.5-unknown-unknown");
1005+
EXPECT_EQ(Triple::dxil, T.getArch());
1006+
EXPECT_EQ(Triple::DXILSubArch_v15, T.getSubArch());
1007+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1008+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
1009+
1010+
T = Triple("dxilv1.6-unknown-unknown");
1011+
EXPECT_EQ(Triple::dxil, T.getArch());
1012+
EXPECT_EQ(Triple::DXILSubArch_v16, T.getSubArch());
1013+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1014+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
1015+
1016+
T = Triple("dxilv1.7-unknown-unknown");
1017+
EXPECT_EQ(Triple::dxil, T.getArch());
1018+
EXPECT_EQ(Triple::DXILSubArch_v17, T.getSubArch());
1019+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1020+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
1021+
1022+
T = Triple("dxilv1.8-unknown-unknown");
1023+
EXPECT_EQ(Triple::dxil, T.getArch());
1024+
EXPECT_EQ(Triple::DXILSubArch_v18, T.getSubArch());
1025+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1026+
EXPECT_EQ(Triple::UnknownOS, T.getOS());
1027+
9741028
T = Triple("xtensa");
9751029
EXPECT_EQ(Triple::xtensa, T.getArch());
9761030
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());

0 commit comments

Comments
 (0)