================
@@ -0,0 +1,72 @@
+//===----------- NVPTXTargetParserTest.cpp - NVPTX Target Parser 
----------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/TargetParser/NVPTXTargetParser.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+namespace {
+
+TEST(NVPTXTargetParserTest, ParseArch) {
+  EXPECT_EQ(NVPTX::parseArch("sm_90"), NVPTX::GK_SM_90);
+  EXPECT_EQ(NVPTX::parseArch("sm_90a"), NVPTX::GK_SM_90a);
+  EXPECT_EQ(NVPTX::parseArch("sm_100f"), NVPTX::GK_SM_100f);
+  // sm_32 uses the underscore-suffixed enumerator internally but the canonical
+  // name has no trailing underscore.
+  EXPECT_EQ(NVPTX::parseArch("sm_32"), NVPTX::GK_SM_32_);
+  EXPECT_EQ(NVPTX::parseArch("gfx900"), NVPTX::GK_NONE);
+  EXPECT_EQ(NVPTX::parseArch(""), NVPTX::GK_NONE);
+}
+
+TEST(NVPTXTargetParserTest, ArchNames) {
+  EXPECT_EQ(NVPTX::getArchName(NVPTX::GK_SM_90), "sm_90");
+  EXPECT_EQ(NVPTX::getArchName(NVPTX::GK_SM_32_), "sm_32");
+  EXPECT_EQ(NVPTX::getVirtualArch(NVPTX::GK_SM_90), "compute_90");
+  // sm_21 shares the compute_20 virtual arch.
+  EXPECT_EQ(NVPTX::getVirtualArch(NVPTX::GK_SM_21), "compute_20");
+  EXPECT_EQ(NVPTX::getArchName(NVPTX::GK_NONE), "");
+  EXPECT_EQ(NVPTX::getVirtualArch(NVPTX::GK_NONE), "");
+}
+
+TEST(NVPTXTargetParserTest, SmVersion) {
+  EXPECT_EQ(NVPTX::getSmVersion(NVPTX::GK_SM_90), 900u);
+  EXPECT_EQ(NVPTX::getSmVersion(NVPTX::GK_SM_90a), 900u);
+  EXPECT_EQ(NVPTX::getSmVersion(NVPTX::GK_SM_100f), 1000u);
+  EXPECT_EQ(NVPTX::getSmVersion(NVPTX::GK_NONE), 0u);
+}
+
+TEST(NVPTXTargetParserTest, ArchSuffix) {
+  EXPECT_FALSE(NVPTX::isAcceleratedArch(NVPTX::GK_SM_90));
+  EXPECT_TRUE(NVPTX::isAcceleratedArch(NVPTX::GK_SM_90a));
+  EXPECT_FALSE(NVPTX::isAcceleratedArch(NVPTX::GK_SM_100f));
+
+  // Family-specific covers both 'f' and 'a' variants.
+  EXPECT_FALSE(NVPTX::isFamilySpecificArch(NVPTX::GK_SM_90));
+  EXPECT_TRUE(NVPTX::isFamilySpecificArch(NVPTX::GK_SM_100f));
+  EXPECT_TRUE(NVPTX::isFamilySpecificArch(NVPTX::GK_SM_90a));
+}
+
+// Every parseable name must round-trip back to the same canonical name.
+TEST(NVPTXTargetParserTest, RoundTrip) {
+  static const char *const Names[] = {
+      "sm_20",   "sm_21",  "sm_30",   "sm_32",   "sm_35",  "sm_37",
+      "sm_50",   "sm_52",  "sm_53",   "sm_60",   "sm_61",  "sm_62",
+      "sm_70",   "sm_72",  "sm_75",   "sm_80",   "sm_86",  "sm_87",
+      "sm_88",   "sm_89",  "sm_90",   "sm_90a",  "sm_100", "sm_100a",
+      "sm_100f", "sm_101", "sm_101a", "sm_101f", "sm_103", "sm_103a",
+      "sm_103f", "sm_110", "sm_110a", "sm_110f", "sm_120", "sm_120a",
+      "sm_120f", "sm_121", "sm_121a", "sm_121f"};
----------------
durga4github wrote:

Is there a way for us to assert/fail here when we add an entry in the GPU-table 
but not add it here?


https://github.com/llvm/llvm-project/pull/212734
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to