[llvm] AMDGPU: Validate processor and features in TargetID parsing (PR #209304)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 14 10:50:53 PDT 2026
================
@@ -2828,6 +2828,155 @@ TEST(TargetParserTest, testAMDGPUgetIsaVersionFromSubArch) {
(AMDGPU::IsaVersion{0, 0, 0}));
}
+TEST(TargetParserTest, testAMDGPUParseTargetIDString) {
+ using AMDGPU::TargetID;
+ using AMDGPU::TargetIDSetting;
+
+ // A well-formed target id parses, canonicalizing the processor and features.
+ {
+ std::optional<TargetID> TID =
+ TargetID::parseTargetIDString("amdgcn-amd-amdhsa-unknown-gfx90a");
+ ASSERT_TRUE(TID.has_value());
+ EXPECT_EQ(TID->getGPUKind(), AMDGPU::GK_GFX90A);
+ EXPECT_EQ(TID->getXnackSetting(), TargetIDSetting::Any);
+ EXPECT_EQ(TID->getSramEccSetting(), TargetIDSetting::Any);
+ }
+
+ // Explicit feature modifiers are applied.
+ {
+ std::optional<TargetID> TID = TargetID::parseTargetIDString(
+ "amdgcn-amd-amdhsa-unknown-gfx90a:xnack+:sramecc-");
+ ASSERT_TRUE(TID.has_value());
+ EXPECT_EQ(TID->getXnackSetting(), TargetIDSetting::On);
+ EXPECT_EQ(TID->getSramEccSetting(), TargetIDSetting::Off);
+ }
+
+ // The processor+features field may be empty; the ISA is taken from the
+ // triple subarch.
+ EXPECT_TRUE(TargetID::parseTargetIDString("amdgpu9.0a-amd-amdhsa-unknown-")
+ .has_value());
+
+ // Structurally malformed strings (missing the processor+features field or a
+ // non-AMDGCN triple) are rejected.
+ EXPECT_FALSE(TargetID::parseTargetIDString("not-a-valid-target-id"));
+ EXPECT_FALSE(
+ TargetID::parseTargetIDString("x86_64-unknown-linux-gnu-gfx90a"));
+
+ // An unrecognized processor is rejected.
+ EXPECT_FALSE(
+ TargetID::parseTargetIDString("amdgcn-amd-amdhsa-unknown-gfxbogus"));
+
+ // A feature the processor does not support is rejected: gfx600 has neither
+ // xnack nor sramecc.
+ EXPECT_FALSE(
+ TargetID::parseTargetIDString("amdgcn-amd-amdhsa-unknown-gfx600:xnack+"));
+ EXPECT_FALSE(TargetID::parseTargetIDString(
+ "amdgcn-amd-amdhsa-unknown-gfx900:sramecc+"));
----------------
arsenm wrote:
There isn't a need for a new test, this would already be covered. There isn't an encoding change here. The xnack always targets always emit EF_AMDGPU_FEATURE_XNACK_ANY_V4 (though I'd consider that a bug, they shouldn't emit any xnack flag)
https://github.com/llvm/llvm-project/pull/209304
More information about the llvm-commits
mailing list