Skip to content

[NFC][AMDGPU] Move AMDGPU related code out of generic TargetParser.cpp - #198433

Merged
shiltian merged 1 commit into
mainfrom
users/shiltian/amdgpu-target-parser
May 19, 2026
Merged

[NFC][AMDGPU] Move AMDGPU related code out of generic TargetParser.cpp#198433
shiltian merged 1 commit into
mainfrom
users/shiltian/amdgpu-target-parser

Conversation

@shiltian

Copy link
Copy Markdown
Contributor

No description provided.

@shiltian
shiltian requested a review from lamb-j as a code owner May 19, 2026 01:14
@shiltian

shiltian commented May 19, 2026

Copy link
Copy Markdown
Contributor Author

@llvmorg-github-actions llvmorg-github-actions Bot added backend:AMDGPU clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' clang:frontend Language frontend issues, e.g. anything involving "Sema" mlir:llvm flang:driver mlir flang Flang issues not falling into any other category labels May 19, 2026
@llvmorg-github-actions

llvmorg-github-actions Bot commented May 19, 2026

Copy link
Copy Markdown

@llvm/pr-subscribers-mlir-llvm
@llvm/pr-subscribers-flang-driver

@llvm/pr-subscribers-clang-driver

Author: Shilei Tian (shiltian)

Changes

Patch is 67.65 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/198433.diff

33 Files Affected:

  • (modified) clang/lib/Basic/TargetID.cpp (+1-1)
  • (modified) clang/lib/Basic/Targets/AMDGPU.cpp (+1)
  • (modified) clang/lib/Basic/Targets/AMDGPU.h (+1-1)
  • (modified) clang/lib/Basic/Targets/SPIR.cpp (+1-1)
  • (modified) clang/lib/Driver/ToolChains/AMDGPU.cpp (+1-1)
  • (modified) clang/lib/Driver/ToolChains/AMDGPU.h (+1-1)
  • (modified) clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp (-2)
  • (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+1-1)
  • (modified) clang/lib/Sema/SemaAMDGPU.cpp (+1-1)
  • (modified) flang/lib/Frontend/CompilerInstance.cpp (+1-1)
  • (added) llvm/include/llvm/TargetParser/AMDGPUTargetParser.h (+109)
  • (modified) llvm/include/llvm/TargetParser/TargetParser.h (+1-90)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp (+1)
  • (modified) llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h (-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp (+1-1)
  • (added) llvm/lib/TargetParser/AMDGPUTargetParser.cpp (+659)
  • (modified) llvm/lib/TargetParser/CMakeLists.txt (+1)
  • (modified) llvm/lib/TargetParser/TargetParser.cpp (+1-643)
  • (modified) llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp (+1-1)
  • (modified) mlir/lib/Target/LLVM/ROCDL/Target.cpp (+1-1)
diff --git a/clang/lib/Basic/TargetID.cpp b/clang/lib/Basic/TargetID.cpp
index 446577930b017..6d9ba55ccd9d7 100644
--- a/clang/lib/Basic/TargetID.cpp
+++ b/clang/lib/Basic/TargetID.cpp
@@ -11,7 +11,7 @@
 #include "llvm/ADT/SmallSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Support/Path.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Triple.h"
 #include <map>
 #include <optional>
diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp
index 48ba5d94df581..6b077dfa8e142 100644
--- a/clang/lib/Basic/Targets/AMDGPU.cpp
+++ b/clang/lib/Basic/Targets/AMDGPU.cpp
@@ -17,6 +17,7 @@
 #include "clang/Basic/MacroBuilder.h"
 #include "clang/Basic/TargetBuiltins.h"
 #include "llvm/ADT/SmallString.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 using namespace clang;
 using namespace clang::targets;
 
diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h
index 38c92e73708f8..f1bfca4c42417 100644
--- a/clang/lib/Basic/Targets/AMDGPU.h
+++ b/clang/lib/Basic/Targets/AMDGPU.h
@@ -19,7 +19,7 @@
 #include "llvm/ADT/StringSet.h"
 #include "llvm/Support/AMDGPUAddrSpace.h"
 #include "llvm/Support/Compiler.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Triple.h"
 #include <optional>
 
diff --git a/clang/lib/Basic/Targets/SPIR.cpp b/clang/lib/Basic/Targets/SPIR.cpp
index b6d6b213d78ed..8fdb45acf381f 100644
--- a/clang/lib/Basic/Targets/SPIR.cpp
+++ b/clang/lib/Basic/Targets/SPIR.cpp
@@ -14,7 +14,7 @@
 #include "AMDGPU.h"
 #include "clang/Basic/MacroBuilder.h"
 #include "clang/Basic/TargetBuiltins.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace clang;
 using namespace clang::targets;
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index d2d8e56eb22be..5c3baa6898126 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -22,8 +22,8 @@
 #include "llvm/Support/Path.h"
 #include "llvm/Support/Process.h"
 #include "llvm/Support/VirtualFileSystem.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Host.h"
-#include "llvm/TargetParser/TargetParser.h"
 #include <optional>
 #include <system_error>
 
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h
index 20b9365c91bbf..ebc02fa477894 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.h
+++ b/clang/lib/Driver/ToolChains/AMDGPU.h
@@ -15,7 +15,7 @@
 #include "clang/Driver/ToolChain.h"
 #include "clang/Options/Options.h"
 #include "llvm/ADT/SmallString.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 #include <map>
 
diff --git a/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
index 8a9cb7ef5b367..461ec590faf40 100644
--- a/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
@@ -7,10 +7,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "AMDGPU.h"
-#include "clang/Basic/TargetID.h"
 #include "clang/Driver/Driver.h"
 #include "clang/Options/Options.h"
-#include "llvm/TargetParser/TargetParser.h"
 
 using namespace clang::driver;
 using namespace clang::driver::tools;
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 9c2d1955a9e12..6b6bfc284e495 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -58,9 +58,9 @@
 #include "llvm/Support/Threading.h"
 #include "llvm/Support/VirtualFileSystem.h"
 #include "llvm/Support/YAMLParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Host.h"
 #include "llvm/TargetParser/PPCTargetParser.h"
-#include "llvm/TargetParser/TargetParser.h"
 #include <optional>
 
 using namespace clang::driver;
diff --git a/clang/lib/Sema/SemaAMDGPU.cpp b/clang/lib/Sema/SemaAMDGPU.cpp
index 96a4648f06314..1d2b3898c92d6 100644
--- a/clang/lib/Sema/SemaAMDGPU.cpp
+++ b/clang/lib/Sema/SemaAMDGPU.cpp
@@ -26,7 +26,7 @@
 #include "llvm/ADT/StringMap.h"
 #include "llvm/Support/AMDGPUAddrSpace.h"
 #include "llvm/Support/AtomicOrdering.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include <cstdint>
 #include <utility>
 
diff --git a/flang/lib/Frontend/CompilerInstance.cpp b/flang/lib/Frontend/CompilerInstance.cpp
index 28011e8bf685a..3e820d386f8a9 100644
--- a/flang/lib/Frontend/CompilerInstance.cpp
+++ b/flang/lib/Frontend/CompilerInstance.cpp
@@ -29,8 +29,8 @@
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/raw_ostream.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/PPCTargetParser.h"
-#include "llvm/TargetParser/TargetParser.h"
 #include "llvm/TargetParser/Triple.h"
 
 using namespace Fortran::frontend;
diff --git a/llvm/include/llvm/TargetParser/AMDGPUTargetParser.h b/llvm/include/llvm/TargetParser/AMDGPUTargetParser.h
new file mode 100644
index 0000000000000..7c192b36b6ec8
--- /dev/null
+++ b/llvm/include/llvm/TargetParser/AMDGPUTargetParser.h
@@ -0,0 +1,109 @@
+//===-- AMDGPUTargetParser - Parser for AMDGPU features ---------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements a target parser to recognise AMDGPU hardware features.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TARGETPARSER_AMDGPUTARGETPARSER_H
+#define LLVM_TARGETPARSER_AMDGPUTARGETPARSER_H
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Compiler.h"
+#include <cstdint>
+#include <utility>
+
+namespace llvm {
+
+template <typename T> class SmallVectorImpl;
+class Triple;
+
+namespace AMDGPU {
+
+/// GPU kinds supported by the AMDGPU target.
+enum GPUKind : uint32_t {
+  // Not specified processor.
+  GK_NONE = 0,
+
+#define R600_GPU(NAME, ENUM, FEATURES) ENUM,
+#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) ENUM,
+#include "AMDGPUTargetParser.def"
+
+  GK_AMDGCN_GENERIC_FIRST = GK_GFX9_GENERIC,
+  GK_AMDGCN_GENERIC_LAST = GK_GFX12_5_GENERIC,
+};
+
+/// Instruction set architecture version.
+struct IsaVersion {
+  unsigned Major;
+  unsigned Minor;
+  unsigned Stepping;
+};
+
+// This isn't comprehensive for now, just things that are needed from the
+// frontend driver.
+enum ArchFeatureKind : uint32_t {
+  FEATURE_NONE = 0,
+
+  // These features only exist for r600, and are implied true for amdgcn.
+  FEATURE_FMA = 1 << 1,
+  FEATURE_LDEXP = 1 << 2,
+  FEATURE_FP64 = 1 << 3,
+
+  // Common features.
+  FEATURE_FAST_FMA_F32 = 1 << 4,
+  FEATURE_FAST_DENORMAL_F32 = 1 << 5,
+
+  // Wavefront 32 is available.
+  FEATURE_WAVE32 = 1 << 6,
+
+  // Xnack is available.
+  FEATURE_XNACK = 1 << 7,
+
+  // Sram-ecc is available.
+  FEATURE_SRAMECC = 1 << 8,
+
+  // WGP mode is supported.
+  FEATURE_WGP = 1 << 9,
+
+  // Xnack is available by default
+  FEATURE_XNACK_ALWAYS = 1 << 10
+};
+
+enum FeatureError : uint32_t {
+  NO_ERROR = 0,
+  INVALID_FEATURE_COMBINATION,
+  UNSUPPORTED_TARGET_FEATURE
+};
+
+LLVM_ABI StringRef getArchFamilyNameAMDGCN(GPUKind AK);
+
+LLVM_ABI StringRef getArchNameAMDGCN(GPUKind AK);
+LLVM_ABI StringRef getArchNameR600(GPUKind AK);
+LLVM_ABI StringRef getCanonicalArchName(const Triple &T, StringRef Arch);
+LLVM_ABI GPUKind parseArchAMDGCN(StringRef CPU);
+LLVM_ABI GPUKind parseArchR600(StringRef CPU);
+LLVM_ABI unsigned getArchAttrAMDGCN(GPUKind AK);
+LLVM_ABI unsigned getArchAttrR600(GPUKind AK);
+
+LLVM_ABI void fillValidArchListAMDGCN(SmallVectorImpl<StringRef> &Values);
+LLVM_ABI void fillValidArchListR600(SmallVectorImpl<StringRef> &Values);
+
+LLVM_ABI IsaVersion getIsaVersion(StringRef GPU);
+
+/// Fills Features map with default values for given target GPU.
+/// \p Features contains overriding target features and this function returns
+/// default target features with entries overridden by \p Features.
+LLVM_ABI std::pair<FeatureError, StringRef>
+fillAMDGPUFeatureMap(StringRef GPU, const Triple &T, StringMap<bool> &Features);
+} // namespace AMDGPU
+
+} // namespace llvm
+
+#endif
diff --git a/llvm/include/llvm/TargetParser/TargetParser.h b/llvm/include/llvm/TargetParser/TargetParser.h
index caf57c804db46..b65ff37dfc958 100644
--- a/llvm/include/llvm/TargetParser/TargetParser.h
+++ b/llvm/include/llvm/TargetParser/TargetParser.h
@@ -19,99 +19,10 @@
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Compiler.h"
+#include <optional>
 
 namespace llvm {
 
-template <typename T> class SmallVectorImpl;
-class Triple;
-
-// Target specific information in their own namespaces.
-// (ARM/AArch64/X86 are declared in ARM/AArch64/X86TargetParser.h)
-// These should be generated from TableGen because the information is already
-// there, and there is where new information about targets will be added.
-// FIXME: To TableGen this we need to make some table generated files available
-// even if the back-end is not compiled with LLVM, plus we need to create a new
-// back-end to TableGen to create these clean tables.
-namespace AMDGPU {
-
-/// GPU kinds supported by the AMDGPU target.
-enum GPUKind : uint32_t {
-  // Not specified processor.
-  GK_NONE = 0,
-
-#define R600_GPU(NAME, ENUM, FEATURES) ENUM,
-#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) ENUM,
-#include "AMDGPUTargetParser.def"
-
-  GK_AMDGCN_GENERIC_FIRST = GK_GFX9_GENERIC,
-  GK_AMDGCN_GENERIC_LAST = GK_GFX12_5_GENERIC,
-};
-
-/// Instruction set architecture version.
-struct IsaVersion {
-  unsigned Major;
-  unsigned Minor;
-  unsigned Stepping;
-};
-
-// This isn't comprehensive for now, just things that are needed from the
-// frontend driver.
-enum ArchFeatureKind : uint32_t {
-  FEATURE_NONE = 0,
-
-  // These features only exist for r600, and are implied true for amdgcn.
-  FEATURE_FMA = 1 << 1,
-  FEATURE_LDEXP = 1 << 2,
-  FEATURE_FP64 = 1 << 3,
-
-  // Common features.
-  FEATURE_FAST_FMA_F32 = 1 << 4,
-  FEATURE_FAST_DENORMAL_F32 = 1 << 5,
-
-  // Wavefront 32 is available.
-  FEATURE_WAVE32 = 1 << 6,
-
-  // Xnack is available.
-  FEATURE_XNACK = 1 << 7,
-
-  // Sram-ecc is available.
-  FEATURE_SRAMECC = 1 << 8,
-
-  // WGP mode is supported.
-  FEATURE_WGP = 1 << 9,
-
-  // Xnack is available by default
-  FEATURE_XNACK_ALWAYS = 1 << 10
-};
-
-enum FeatureError : uint32_t {
-  NO_ERROR = 0,
-  INVALID_FEATURE_COMBINATION,
-  UNSUPPORTED_TARGET_FEATURE
-};
-
-LLVM_ABI StringRef getArchFamilyNameAMDGCN(GPUKind AK);
-
-LLVM_ABI StringRef getArchNameAMDGCN(GPUKind AK);
-LLVM_ABI StringRef getArchNameR600(GPUKind AK);
-LLVM_ABI StringRef getCanonicalArchName(const Triple &T, StringRef Arch);
-LLVM_ABI GPUKind parseArchAMDGCN(StringRef CPU);
-LLVM_ABI GPUKind parseArchR600(StringRef CPU);
-LLVM_ABI unsigned getArchAttrAMDGCN(GPUKind AK);
-LLVM_ABI unsigned getArchAttrR600(GPUKind AK);
-
-LLVM_ABI void fillValidArchListAMDGCN(SmallVectorImpl<StringRef> &Values);
-LLVM_ABI void fillValidArchListR600(SmallVectorImpl<StringRef> &Values);
-
-LLVM_ABI IsaVersion getIsaVersion(StringRef GPU);
-
-/// Fills Features map with default values for given target GPU.
-/// \p Features contains overriding target features and this function returns
-/// default target features with entries overridden by \p Features.
-LLVM_ABI std::pair<FeatureError, StringRef>
-fillAMDGPUFeatureMap(StringRef GPU, const Triple &T, StringMap<bool> &Features);
-} // namespace AMDGPU
-
 struct BasicSubtargetFeatureKV {
   const char *Key;         ///< K-V key string
   unsigned Value;          ///< K-V integer value
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
index 6e8ad3f9f1a24..18b3af1cea294 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
@@ -50,7 +50,7 @@
 #include "llvm/Support/Compiler.h"
 #include "llvm/Target/TargetLoweringObjectFile.h"
 #include "llvm/Target/TargetMachine.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp
index e262d4e715fea..873aae5daae94 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp
@@ -13,7 +13,7 @@
 
 #include "AMDGPUMIRFormatter.h"
 #include "SIMachineFunctionInfo.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp
index 90c4f4e6680c2..c943d6fa2dd92 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp
@@ -31,7 +31,7 @@
 #include "GCNSubtarget.h"
 #include "SIMachineFunctionInfo.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp b/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp
index faef40862d718..a04163599aab9 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp
@@ -17,7 +17,7 @@
 #include "MCTargetDesc/AMDGPUMCTargetDesc.h"
 #include "SIInstrInfo.h"
 #include "llvm/ADT/SetVector.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
index 111b28af3b47e..24dbcdf8cc475 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
+++ b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
@@ -13,7 +13,7 @@
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 namespace llvm {
 
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index 0e169106b9794..75e48f20b6945 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -43,7 +43,7 @@
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/MathExtras.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include <optional>
 
 using namespace llvm;
diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
index 8e2306682dbc3..8ab90d953200e 100644
--- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
@@ -21,7 +21,7 @@
 #include "llvm/CodeGen/MachineInstrBuilder.h"
 #include "llvm/CodeGen/ScheduleDAG.h"
 #include "llvm/Support/Debug.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp
index 9ec12131d7236..6c81cbcad3330 100644
--- a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp
+++ b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp
@@ -18,6 +18,7 @@
 #include "llvm/MC/TargetRegistry.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/WithColor.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 namespace llvm::mca {
 
diff --git a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h
index aeb5c032daee4..c764ff71f5d0c 100644
--- a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h
+++ b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h
@@ -20,7 +20,6 @@
 #include "Utils/AMDGPUBaseInfo.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/MCA/CustomBehaviour.h"
-#include "llvm/TargetParser/TargetParser.h"
 
 namespace llvm {
 namespace mca {
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
index 95da56f420b2d..d71dcf225df50 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
@@ -21,7 +21,7 @@
 #include "llvm/MC/MCValue.h"
 #include "llvm/MC/TargetRegistry.h"
 #include "llvm/Support/EndianStream.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
index 9ffa4458abdc6..19c5ac6a647ce 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
@@ -20,7 +20,7 @@
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/MC/MCRegisterInfo.h"
 #include "llvm/MC/MCSubtargetInfo.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp
index 296b248dfa23a..a37fe6741ea55 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp
@@ -12,7 +12,7 @@
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCSubtargetInfo.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
index d6509fdd2b21a..d2d11f0786a16 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
@@ -31,7 +31,7 @@
 #include "llvm/Support/AMDHSAKernelDescriptor.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/FormattedStream.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
index e3d7b7a5a519e..c03f18768d590 100644
--- a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
@@ -40,7 +40,7 @@
 #include "llvm/IR/Dominators.h"
 #include "llvm/InitializePasses.h"
 #include "llvm/Support/DebugCounter.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp b/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp
index fe87c5afda1b8..25922c5af7da1 100644
--- a/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp
+++ b/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp
@@ -28,7 +28,7 @@
 #include "llvm/Support/AMDGPUAddrSpace.h"
 #include "llvm/Support/AtomicOrdering.h"
 #include "llvm/Support/Debug.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index 6feaa4951b14a..bcdb20c6bd24f 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -26,7 +26,7 @@
 #include "llvm/MC/MCRegisterInfo.h"
 #include "llvm/MC/MCSubtargetInfo.h"
 #include "llvm/Support/Comma...
[truncated]

@llvmorg-github-actions

Copy link
Copy Markdown

@llvm/pr-subscribers-backend-amdgpu

Author: Shilei Tian (shiltian)

Changes

Patch is 67.65 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/198433.diff

33 Files Affected:

  • (modified) clang/lib/Basic/TargetID.cpp (+1-1)
  • (modified) clang/lib/Basic/Targets/AMDGPU.cpp (+1)
  • (modified) clang/lib/Basic/Targets/AMDGPU.h (+1-1)
  • (modified) clang/lib/Basic/Targets/SPIR.cpp (+1-1)
  • (modified) clang/lib/Driver/ToolChains/AMDGPU.cpp (+1-1)
  • (modified) clang/lib/Driver/ToolChains/AMDGPU.h (+1-1)
  • (modified) clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp (-2)
  • (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+1-1)
  • (modified) clang/lib/Sema/SemaAMDGPU.cpp (+1-1)
  • (modified) flang/lib/Frontend/CompilerInstance.cpp (+1-1)
  • (added) llvm/include/llvm/TargetParser/AMDGPUTargetParser.h (+109)
  • (modified) llvm/include/llvm/TargetParser/TargetParser.h (+1-90)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp (+1)
  • (modified) llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h (-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp (+1-1)
  • (added) llvm/lib/TargetParser/AMDGPUTargetParser.cpp (+659)
  • (modified) llvm/lib/TargetParser/CMakeLists.txt (+1)
  • (modified) llvm/lib/TargetParser/TargetParser.cpp (+1-643)
  • (modified) llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp (+1-1)
  • (modified) mlir/lib/Target/LLVM/ROCDL/Target.cpp (+1-1)
diff --git a/clang/lib/Basic/TargetID.cpp b/clang/lib/Basic/TargetID.cpp
index 446577930b017..6d9ba55ccd9d7 100644
--- a/clang/lib/Basic/TargetID.cpp
+++ b/clang/lib/Basic/TargetID.cpp
@@ -11,7 +11,7 @@
 #include "llvm/ADT/SmallSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Support/Path.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Triple.h"
 #include <map>
 #include <optional>
diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp
index 48ba5d94df581..6b077dfa8e142 100644
--- a/clang/lib/Basic/Targets/AMDGPU.cpp
+++ b/clang/lib/Basic/Targets/AMDGPU.cpp
@@ -17,6 +17,7 @@
 #include "clang/Basic/MacroBuilder.h"
 #include "clang/Basic/TargetBuiltins.h"
 #include "llvm/ADT/SmallString.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 using namespace clang;
 using namespace clang::targets;
 
diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h
index 38c92e73708f8..f1bfca4c42417 100644
--- a/clang/lib/Basic/Targets/AMDGPU.h
+++ b/clang/lib/Basic/Targets/AMDGPU.h
@@ -19,7 +19,7 @@
 #include "llvm/ADT/StringSet.h"
 #include "llvm/Support/AMDGPUAddrSpace.h"
 #include "llvm/Support/Compiler.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Triple.h"
 #include <optional>
 
diff --git a/clang/lib/Basic/Targets/SPIR.cpp b/clang/lib/Basic/Targets/SPIR.cpp
index b6d6b213d78ed..8fdb45acf381f 100644
--- a/clang/lib/Basic/Targets/SPIR.cpp
+++ b/clang/lib/Basic/Targets/SPIR.cpp
@@ -14,7 +14,7 @@
 #include "AMDGPU.h"
 #include "clang/Basic/MacroBuilder.h"
 #include "clang/Basic/TargetBuiltins.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace clang;
 using namespace clang::targets;
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index d2d8e56eb22be..5c3baa6898126 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -22,8 +22,8 @@
 #include "llvm/Support/Path.h"
 #include "llvm/Support/Process.h"
 #include "llvm/Support/VirtualFileSystem.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Host.h"
-#include "llvm/TargetParser/TargetParser.h"
 #include <optional>
 #include <system_error>
 
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h
index 20b9365c91bbf..ebc02fa477894 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.h
+++ b/clang/lib/Driver/ToolChains/AMDGPU.h
@@ -15,7 +15,7 @@
 #include "clang/Driver/ToolChain.h"
 #include "clang/Options/Options.h"
 #include "llvm/ADT/SmallString.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 #include <map>
 
diff --git a/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
index 8a9cb7ef5b367..461ec590faf40 100644
--- a/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
@@ -7,10 +7,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "AMDGPU.h"
-#include "clang/Basic/TargetID.h"
 #include "clang/Driver/Driver.h"
 #include "clang/Options/Options.h"
-#include "llvm/TargetParser/TargetParser.h"
 
 using namespace clang::driver;
 using namespace clang::driver::tools;
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 9c2d1955a9e12..6b6bfc284e495 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -58,9 +58,9 @@
 #include "llvm/Support/Threading.h"
 #include "llvm/Support/VirtualFileSystem.h"
 #include "llvm/Support/YAMLParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Host.h"
 #include "llvm/TargetParser/PPCTargetParser.h"
-#include "llvm/TargetParser/TargetParser.h"
 #include <optional>
 
 using namespace clang::driver;
diff --git a/clang/lib/Sema/SemaAMDGPU.cpp b/clang/lib/Sema/SemaAMDGPU.cpp
index 96a4648f06314..1d2b3898c92d6 100644
--- a/clang/lib/Sema/SemaAMDGPU.cpp
+++ b/clang/lib/Sema/SemaAMDGPU.cpp
@@ -26,7 +26,7 @@
 #include "llvm/ADT/StringMap.h"
 #include "llvm/Support/AMDGPUAddrSpace.h"
 #include "llvm/Support/AtomicOrdering.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include <cstdint>
 #include <utility>
 
diff --git a/flang/lib/Frontend/CompilerInstance.cpp b/flang/lib/Frontend/CompilerInstance.cpp
index 28011e8bf685a..3e820d386f8a9 100644
--- a/flang/lib/Frontend/CompilerInstance.cpp
+++ b/flang/lib/Frontend/CompilerInstance.cpp
@@ -29,8 +29,8 @@
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/raw_ostream.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/PPCTargetParser.h"
-#include "llvm/TargetParser/TargetParser.h"
 #include "llvm/TargetParser/Triple.h"
 
 using namespace Fortran::frontend;
diff --git a/llvm/include/llvm/TargetParser/AMDGPUTargetParser.h b/llvm/include/llvm/TargetParser/AMDGPUTargetParser.h
new file mode 100644
index 0000000000000..7c192b36b6ec8
--- /dev/null
+++ b/llvm/include/llvm/TargetParser/AMDGPUTargetParser.h
@@ -0,0 +1,109 @@
+//===-- AMDGPUTargetParser - Parser for AMDGPU features ---------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements a target parser to recognise AMDGPU hardware features.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TARGETPARSER_AMDGPUTARGETPARSER_H
+#define LLVM_TARGETPARSER_AMDGPUTARGETPARSER_H
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Compiler.h"
+#include <cstdint>
+#include <utility>
+
+namespace llvm {
+
+template <typename T> class SmallVectorImpl;
+class Triple;
+
+namespace AMDGPU {
+
+/// GPU kinds supported by the AMDGPU target.
+enum GPUKind : uint32_t {
+  // Not specified processor.
+  GK_NONE = 0,
+
+#define R600_GPU(NAME, ENUM, FEATURES) ENUM,
+#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) ENUM,
+#include "AMDGPUTargetParser.def"
+
+  GK_AMDGCN_GENERIC_FIRST = GK_GFX9_GENERIC,
+  GK_AMDGCN_GENERIC_LAST = GK_GFX12_5_GENERIC,
+};
+
+/// Instruction set architecture version.
+struct IsaVersion {
+  unsigned Major;
+  unsigned Minor;
+  unsigned Stepping;
+};
+
+// This isn't comprehensive for now, just things that are needed from the
+// frontend driver.
+enum ArchFeatureKind : uint32_t {
+  FEATURE_NONE = 0,
+
+  // These features only exist for r600, and are implied true for amdgcn.
+  FEATURE_FMA = 1 << 1,
+  FEATURE_LDEXP = 1 << 2,
+  FEATURE_FP64 = 1 << 3,
+
+  // Common features.
+  FEATURE_FAST_FMA_F32 = 1 << 4,
+  FEATURE_FAST_DENORMAL_F32 = 1 << 5,
+
+  // Wavefront 32 is available.
+  FEATURE_WAVE32 = 1 << 6,
+
+  // Xnack is available.
+  FEATURE_XNACK = 1 << 7,
+
+  // Sram-ecc is available.
+  FEATURE_SRAMECC = 1 << 8,
+
+  // WGP mode is supported.
+  FEATURE_WGP = 1 << 9,
+
+  // Xnack is available by default
+  FEATURE_XNACK_ALWAYS = 1 << 10
+};
+
+enum FeatureError : uint32_t {
+  NO_ERROR = 0,
+  INVALID_FEATURE_COMBINATION,
+  UNSUPPORTED_TARGET_FEATURE
+};
+
+LLVM_ABI StringRef getArchFamilyNameAMDGCN(GPUKind AK);
+
+LLVM_ABI StringRef getArchNameAMDGCN(GPUKind AK);
+LLVM_ABI StringRef getArchNameR600(GPUKind AK);
+LLVM_ABI StringRef getCanonicalArchName(const Triple &T, StringRef Arch);
+LLVM_ABI GPUKind parseArchAMDGCN(StringRef CPU);
+LLVM_ABI GPUKind parseArchR600(StringRef CPU);
+LLVM_ABI unsigned getArchAttrAMDGCN(GPUKind AK);
+LLVM_ABI unsigned getArchAttrR600(GPUKind AK);
+
+LLVM_ABI void fillValidArchListAMDGCN(SmallVectorImpl<StringRef> &Values);
+LLVM_ABI void fillValidArchListR600(SmallVectorImpl<StringRef> &Values);
+
+LLVM_ABI IsaVersion getIsaVersion(StringRef GPU);
+
+/// Fills Features map with default values for given target GPU.
+/// \p Features contains overriding target features and this function returns
+/// default target features with entries overridden by \p Features.
+LLVM_ABI std::pair<FeatureError, StringRef>
+fillAMDGPUFeatureMap(StringRef GPU, const Triple &T, StringMap<bool> &Features);
+} // namespace AMDGPU
+
+} // namespace llvm
+
+#endif
diff --git a/llvm/include/llvm/TargetParser/TargetParser.h b/llvm/include/llvm/TargetParser/TargetParser.h
index caf57c804db46..b65ff37dfc958 100644
--- a/llvm/include/llvm/TargetParser/TargetParser.h
+++ b/llvm/include/llvm/TargetParser/TargetParser.h
@@ -19,99 +19,10 @@
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Compiler.h"
+#include <optional>
 
 namespace llvm {
 
-template <typename T> class SmallVectorImpl;
-class Triple;
-
-// Target specific information in their own namespaces.
-// (ARM/AArch64/X86 are declared in ARM/AArch64/X86TargetParser.h)
-// These should be generated from TableGen because the information is already
-// there, and there is where new information about targets will be added.
-// FIXME: To TableGen this we need to make some table generated files available
-// even if the back-end is not compiled with LLVM, plus we need to create a new
-// back-end to TableGen to create these clean tables.
-namespace AMDGPU {
-
-/// GPU kinds supported by the AMDGPU target.
-enum GPUKind : uint32_t {
-  // Not specified processor.
-  GK_NONE = 0,
-
-#define R600_GPU(NAME, ENUM, FEATURES) ENUM,
-#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) ENUM,
-#include "AMDGPUTargetParser.def"
-
-  GK_AMDGCN_GENERIC_FIRST = GK_GFX9_GENERIC,
-  GK_AMDGCN_GENERIC_LAST = GK_GFX12_5_GENERIC,
-};
-
-/// Instruction set architecture version.
-struct IsaVersion {
-  unsigned Major;
-  unsigned Minor;
-  unsigned Stepping;
-};
-
-// This isn't comprehensive for now, just things that are needed from the
-// frontend driver.
-enum ArchFeatureKind : uint32_t {
-  FEATURE_NONE = 0,
-
-  // These features only exist for r600, and are implied true for amdgcn.
-  FEATURE_FMA = 1 << 1,
-  FEATURE_LDEXP = 1 << 2,
-  FEATURE_FP64 = 1 << 3,
-
-  // Common features.
-  FEATURE_FAST_FMA_F32 = 1 << 4,
-  FEATURE_FAST_DENORMAL_F32 = 1 << 5,
-
-  // Wavefront 32 is available.
-  FEATURE_WAVE32 = 1 << 6,
-
-  // Xnack is available.
-  FEATURE_XNACK = 1 << 7,
-
-  // Sram-ecc is available.
-  FEATURE_SRAMECC = 1 << 8,
-
-  // WGP mode is supported.
-  FEATURE_WGP = 1 << 9,
-
-  // Xnack is available by default
-  FEATURE_XNACK_ALWAYS = 1 << 10
-};
-
-enum FeatureError : uint32_t {
-  NO_ERROR = 0,
-  INVALID_FEATURE_COMBINATION,
-  UNSUPPORTED_TARGET_FEATURE
-};
-
-LLVM_ABI StringRef getArchFamilyNameAMDGCN(GPUKind AK);
-
-LLVM_ABI StringRef getArchNameAMDGCN(GPUKind AK);
-LLVM_ABI StringRef getArchNameR600(GPUKind AK);
-LLVM_ABI StringRef getCanonicalArchName(const Triple &T, StringRef Arch);
-LLVM_ABI GPUKind parseArchAMDGCN(StringRef CPU);
-LLVM_ABI GPUKind parseArchR600(StringRef CPU);
-LLVM_ABI unsigned getArchAttrAMDGCN(GPUKind AK);
-LLVM_ABI unsigned getArchAttrR600(GPUKind AK);
-
-LLVM_ABI void fillValidArchListAMDGCN(SmallVectorImpl<StringRef> &Values);
-LLVM_ABI void fillValidArchListR600(SmallVectorImpl<StringRef> &Values);
-
-LLVM_ABI IsaVersion getIsaVersion(StringRef GPU);
-
-/// Fills Features map with default values for given target GPU.
-/// \p Features contains overriding target features and this function returns
-/// default target features with entries overridden by \p Features.
-LLVM_ABI std::pair<FeatureError, StringRef>
-fillAMDGPUFeatureMap(StringRef GPU, const Triple &T, StringMap<bool> &Features);
-} // namespace AMDGPU
-
 struct BasicSubtargetFeatureKV {
   const char *Key;         ///< K-V key string
   unsigned Value;          ///< K-V integer value
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
index 6e8ad3f9f1a24..18b3af1cea294 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
@@ -50,7 +50,7 @@
 #include "llvm/Support/Compiler.h"
 #include "llvm/Target/TargetLoweringObjectFile.h"
 #include "llvm/Target/TargetMachine.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp
index e262d4e715fea..873aae5daae94 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp
@@ -13,7 +13,7 @@
 
 #include "AMDGPUMIRFormatter.h"
 #include "SIMachineFunctionInfo.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp
index 90c4f4e6680c2..c943d6fa2dd92 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp
@@ -31,7 +31,7 @@
 #include "GCNSubtarget.h"
 #include "SIMachineFunctionInfo.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp b/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp
index faef40862d718..a04163599aab9 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp
@@ -17,7 +17,7 @@
 #include "MCTargetDesc/AMDGPUMCTargetDesc.h"
 #include "SIInstrInfo.h"
 #include "llvm/ADT/SetVector.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
index 111b28af3b47e..24dbcdf8cc475 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
+++ b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
@@ -13,7 +13,7 @@
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 namespace llvm {
 
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index 0e169106b9794..75e48f20b6945 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -43,7 +43,7 @@
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/MathExtras.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include <optional>
 
 using namespace llvm;
diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
index 8e2306682dbc3..8ab90d953200e 100644
--- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
@@ -21,7 +21,7 @@
 #include "llvm/CodeGen/MachineInstrBuilder.h"
 #include "llvm/CodeGen/ScheduleDAG.h"
 #include "llvm/Support/Debug.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp
index 9ec12131d7236..6c81cbcad3330 100644
--- a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp
+++ b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp
@@ -18,6 +18,7 @@
 #include "llvm/MC/TargetRegistry.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/WithColor.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 namespace llvm::mca {
 
diff --git a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h
index aeb5c032daee4..c764ff71f5d0c 100644
--- a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h
+++ b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h
@@ -20,7 +20,6 @@
 #include "Utils/AMDGPUBaseInfo.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/MCA/CustomBehaviour.h"
-#include "llvm/TargetParser/TargetParser.h"
 
 namespace llvm {
 namespace mca {
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
index 95da56f420b2d..d71dcf225df50 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
@@ -21,7 +21,7 @@
 #include "llvm/MC/MCValue.h"
 #include "llvm/MC/TargetRegistry.h"
 #include "llvm/Support/EndianStream.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
index 9ffa4458abdc6..19c5ac6a647ce 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
@@ -20,7 +20,7 @@
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/MC/MCRegisterInfo.h"
 #include "llvm/MC/MCSubtargetInfo.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp
index 296b248dfa23a..a37fe6741ea55 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp
@@ -12,7 +12,7 @@
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCSubtargetInfo.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
index d6509fdd2b21a..d2d11f0786a16 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
@@ -31,7 +31,7 @@
 #include "llvm/Support/AMDHSAKernelDescriptor.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/FormattedStream.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
index e3d7b7a5a519e..c03f18768d590 100644
--- a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
@@ -40,7 +40,7 @@
 #include "llvm/IR/Dominators.h"
 #include "llvm/InitializePasses.h"
 #include "llvm/Support/DebugCounter.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp b/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp
index fe87c5afda1b8..25922c5af7da1 100644
--- a/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp
+++ b/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp
@@ -28,7 +28,7 @@
 #include "llvm/Support/AMDGPUAddrSpace.h"
 #include "llvm/Support/AtomicOrdering.h"
 #include "llvm/Support/Debug.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index 6feaa4951b14a..bcdb20c6bd24f 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -26,7 +26,7 @@
 #include "llvm/MC/MCRegisterInfo.h"
 #include "llvm/MC/MCSubtargetInfo.h"
 #include "llvm/Support/Comma...
[truncated]

@llvmorg-github-actions

Copy link
Copy Markdown

@llvm/pr-subscribers-mlir

Author: Shilei Tian (shiltian)

Changes

Patch is 67.65 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/198433.diff

33 Files Affected:

  • (modified) clang/lib/Basic/TargetID.cpp (+1-1)
  • (modified) clang/lib/Basic/Targets/AMDGPU.cpp (+1)
  • (modified) clang/lib/Basic/Targets/AMDGPU.h (+1-1)
  • (modified) clang/lib/Basic/Targets/SPIR.cpp (+1-1)
  • (modified) clang/lib/Driver/ToolChains/AMDGPU.cpp (+1-1)
  • (modified) clang/lib/Driver/ToolChains/AMDGPU.h (+1-1)
  • (modified) clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp (-2)
  • (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+1-1)
  • (modified) clang/lib/Sema/SemaAMDGPU.cpp (+1-1)
  • (modified) flang/lib/Frontend/CompilerInstance.cpp (+1-1)
  • (added) llvm/include/llvm/TargetParser/AMDGPUTargetParser.h (+109)
  • (modified) llvm/include/llvm/TargetParser/TargetParser.h (+1-90)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp (+1)
  • (modified) llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h (-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp (+1-1)
  • (modified) llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp (+1-1)
  • (added) llvm/lib/TargetParser/AMDGPUTargetParser.cpp (+659)
  • (modified) llvm/lib/TargetParser/CMakeLists.txt (+1)
  • (modified) llvm/lib/TargetParser/TargetParser.cpp (+1-643)
  • (modified) llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp (+1-1)
  • (modified) mlir/lib/Target/LLVM/ROCDL/Target.cpp (+1-1)
diff --git a/clang/lib/Basic/TargetID.cpp b/clang/lib/Basic/TargetID.cpp
index 446577930b017..6d9ba55ccd9d7 100644
--- a/clang/lib/Basic/TargetID.cpp
+++ b/clang/lib/Basic/TargetID.cpp
@@ -11,7 +11,7 @@
 #include "llvm/ADT/SmallSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Support/Path.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Triple.h"
 #include <map>
 #include <optional>
diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp
index 48ba5d94df581..6b077dfa8e142 100644
--- a/clang/lib/Basic/Targets/AMDGPU.cpp
+++ b/clang/lib/Basic/Targets/AMDGPU.cpp
@@ -17,6 +17,7 @@
 #include "clang/Basic/MacroBuilder.h"
 #include "clang/Basic/TargetBuiltins.h"
 #include "llvm/ADT/SmallString.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 using namespace clang;
 using namespace clang::targets;
 
diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h
index 38c92e73708f8..f1bfca4c42417 100644
--- a/clang/lib/Basic/Targets/AMDGPU.h
+++ b/clang/lib/Basic/Targets/AMDGPU.h
@@ -19,7 +19,7 @@
 #include "llvm/ADT/StringSet.h"
 #include "llvm/Support/AMDGPUAddrSpace.h"
 #include "llvm/Support/Compiler.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Triple.h"
 #include <optional>
 
diff --git a/clang/lib/Basic/Targets/SPIR.cpp b/clang/lib/Basic/Targets/SPIR.cpp
index b6d6b213d78ed..8fdb45acf381f 100644
--- a/clang/lib/Basic/Targets/SPIR.cpp
+++ b/clang/lib/Basic/Targets/SPIR.cpp
@@ -14,7 +14,7 @@
 #include "AMDGPU.h"
 #include "clang/Basic/MacroBuilder.h"
 #include "clang/Basic/TargetBuiltins.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace clang;
 using namespace clang::targets;
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index d2d8e56eb22be..5c3baa6898126 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -22,8 +22,8 @@
 #include "llvm/Support/Path.h"
 #include "llvm/Support/Process.h"
 #include "llvm/Support/VirtualFileSystem.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Host.h"
-#include "llvm/TargetParser/TargetParser.h"
 #include <optional>
 #include <system_error>
 
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h
index 20b9365c91bbf..ebc02fa477894 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.h
+++ b/clang/lib/Driver/ToolChains/AMDGPU.h
@@ -15,7 +15,7 @@
 #include "clang/Driver/ToolChain.h"
 #include "clang/Options/Options.h"
 #include "llvm/ADT/SmallString.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 #include <map>
 
diff --git a/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
index 8a9cb7ef5b367..461ec590faf40 100644
--- a/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
@@ -7,10 +7,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "AMDGPU.h"
-#include "clang/Basic/TargetID.h"
 #include "clang/Driver/Driver.h"
 #include "clang/Options/Options.h"
-#include "llvm/TargetParser/TargetParser.h"
 
 using namespace clang::driver;
 using namespace clang::driver::tools;
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 9c2d1955a9e12..6b6bfc284e495 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -58,9 +58,9 @@
 #include "llvm/Support/Threading.h"
 #include "llvm/Support/VirtualFileSystem.h"
 #include "llvm/Support/YAMLParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/Host.h"
 #include "llvm/TargetParser/PPCTargetParser.h"
-#include "llvm/TargetParser/TargetParser.h"
 #include <optional>
 
 using namespace clang::driver;
diff --git a/clang/lib/Sema/SemaAMDGPU.cpp b/clang/lib/Sema/SemaAMDGPU.cpp
index 96a4648f06314..1d2b3898c92d6 100644
--- a/clang/lib/Sema/SemaAMDGPU.cpp
+++ b/clang/lib/Sema/SemaAMDGPU.cpp
@@ -26,7 +26,7 @@
 #include "llvm/ADT/StringMap.h"
 #include "llvm/Support/AMDGPUAddrSpace.h"
 #include "llvm/Support/AtomicOrdering.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include <cstdint>
 #include <utility>
 
diff --git a/flang/lib/Frontend/CompilerInstance.cpp b/flang/lib/Frontend/CompilerInstance.cpp
index 28011e8bf685a..3e820d386f8a9 100644
--- a/flang/lib/Frontend/CompilerInstance.cpp
+++ b/flang/lib/Frontend/CompilerInstance.cpp
@@ -29,8 +29,8 @@
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/raw_ostream.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/PPCTargetParser.h"
-#include "llvm/TargetParser/TargetParser.h"
 #include "llvm/TargetParser/Triple.h"
 
 using namespace Fortran::frontend;
diff --git a/llvm/include/llvm/TargetParser/AMDGPUTargetParser.h b/llvm/include/llvm/TargetParser/AMDGPUTargetParser.h
new file mode 100644
index 0000000000000..7c192b36b6ec8
--- /dev/null
+++ b/llvm/include/llvm/TargetParser/AMDGPUTargetParser.h
@@ -0,0 +1,109 @@
+//===-- AMDGPUTargetParser - Parser for AMDGPU features ---------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements a target parser to recognise AMDGPU hardware features.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TARGETPARSER_AMDGPUTARGETPARSER_H
+#define LLVM_TARGETPARSER_AMDGPUTARGETPARSER_H
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Compiler.h"
+#include <cstdint>
+#include <utility>
+
+namespace llvm {
+
+template <typename T> class SmallVectorImpl;
+class Triple;
+
+namespace AMDGPU {
+
+/// GPU kinds supported by the AMDGPU target.
+enum GPUKind : uint32_t {
+  // Not specified processor.
+  GK_NONE = 0,
+
+#define R600_GPU(NAME, ENUM, FEATURES) ENUM,
+#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) ENUM,
+#include "AMDGPUTargetParser.def"
+
+  GK_AMDGCN_GENERIC_FIRST = GK_GFX9_GENERIC,
+  GK_AMDGCN_GENERIC_LAST = GK_GFX12_5_GENERIC,
+};
+
+/// Instruction set architecture version.
+struct IsaVersion {
+  unsigned Major;
+  unsigned Minor;
+  unsigned Stepping;
+};
+
+// This isn't comprehensive for now, just things that are needed from the
+// frontend driver.
+enum ArchFeatureKind : uint32_t {
+  FEATURE_NONE = 0,
+
+  // These features only exist for r600, and are implied true for amdgcn.
+  FEATURE_FMA = 1 << 1,
+  FEATURE_LDEXP = 1 << 2,
+  FEATURE_FP64 = 1 << 3,
+
+  // Common features.
+  FEATURE_FAST_FMA_F32 = 1 << 4,
+  FEATURE_FAST_DENORMAL_F32 = 1 << 5,
+
+  // Wavefront 32 is available.
+  FEATURE_WAVE32 = 1 << 6,
+
+  // Xnack is available.
+  FEATURE_XNACK = 1 << 7,
+
+  // Sram-ecc is available.
+  FEATURE_SRAMECC = 1 << 8,
+
+  // WGP mode is supported.
+  FEATURE_WGP = 1 << 9,
+
+  // Xnack is available by default
+  FEATURE_XNACK_ALWAYS = 1 << 10
+};
+
+enum FeatureError : uint32_t {
+  NO_ERROR = 0,
+  INVALID_FEATURE_COMBINATION,
+  UNSUPPORTED_TARGET_FEATURE
+};
+
+LLVM_ABI StringRef getArchFamilyNameAMDGCN(GPUKind AK);
+
+LLVM_ABI StringRef getArchNameAMDGCN(GPUKind AK);
+LLVM_ABI StringRef getArchNameR600(GPUKind AK);
+LLVM_ABI StringRef getCanonicalArchName(const Triple &T, StringRef Arch);
+LLVM_ABI GPUKind parseArchAMDGCN(StringRef CPU);
+LLVM_ABI GPUKind parseArchR600(StringRef CPU);
+LLVM_ABI unsigned getArchAttrAMDGCN(GPUKind AK);
+LLVM_ABI unsigned getArchAttrR600(GPUKind AK);
+
+LLVM_ABI void fillValidArchListAMDGCN(SmallVectorImpl<StringRef> &Values);
+LLVM_ABI void fillValidArchListR600(SmallVectorImpl<StringRef> &Values);
+
+LLVM_ABI IsaVersion getIsaVersion(StringRef GPU);
+
+/// Fills Features map with default values for given target GPU.
+/// \p Features contains overriding target features and this function returns
+/// default target features with entries overridden by \p Features.
+LLVM_ABI std::pair<FeatureError, StringRef>
+fillAMDGPUFeatureMap(StringRef GPU, const Triple &T, StringMap<bool> &Features);
+} // namespace AMDGPU
+
+} // namespace llvm
+
+#endif
diff --git a/llvm/include/llvm/TargetParser/TargetParser.h b/llvm/include/llvm/TargetParser/TargetParser.h
index caf57c804db46..b65ff37dfc958 100644
--- a/llvm/include/llvm/TargetParser/TargetParser.h
+++ b/llvm/include/llvm/TargetParser/TargetParser.h
@@ -19,99 +19,10 @@
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Compiler.h"
+#include <optional>
 
 namespace llvm {
 
-template <typename T> class SmallVectorImpl;
-class Triple;
-
-// Target specific information in their own namespaces.
-// (ARM/AArch64/X86 are declared in ARM/AArch64/X86TargetParser.h)
-// These should be generated from TableGen because the information is already
-// there, and there is where new information about targets will be added.
-// FIXME: To TableGen this we need to make some table generated files available
-// even if the back-end is not compiled with LLVM, plus we need to create a new
-// back-end to TableGen to create these clean tables.
-namespace AMDGPU {
-
-/// GPU kinds supported by the AMDGPU target.
-enum GPUKind : uint32_t {
-  // Not specified processor.
-  GK_NONE = 0,
-
-#define R600_GPU(NAME, ENUM, FEATURES) ENUM,
-#define AMDGCN_GPU(NAME, ENUM, ISAVERSION, FEATURES) ENUM,
-#include "AMDGPUTargetParser.def"
-
-  GK_AMDGCN_GENERIC_FIRST = GK_GFX9_GENERIC,
-  GK_AMDGCN_GENERIC_LAST = GK_GFX12_5_GENERIC,
-};
-
-/// Instruction set architecture version.
-struct IsaVersion {
-  unsigned Major;
-  unsigned Minor;
-  unsigned Stepping;
-};
-
-// This isn't comprehensive for now, just things that are needed from the
-// frontend driver.
-enum ArchFeatureKind : uint32_t {
-  FEATURE_NONE = 0,
-
-  // These features only exist for r600, and are implied true for amdgcn.
-  FEATURE_FMA = 1 << 1,
-  FEATURE_LDEXP = 1 << 2,
-  FEATURE_FP64 = 1 << 3,
-
-  // Common features.
-  FEATURE_FAST_FMA_F32 = 1 << 4,
-  FEATURE_FAST_DENORMAL_F32 = 1 << 5,
-
-  // Wavefront 32 is available.
-  FEATURE_WAVE32 = 1 << 6,
-
-  // Xnack is available.
-  FEATURE_XNACK = 1 << 7,
-
-  // Sram-ecc is available.
-  FEATURE_SRAMECC = 1 << 8,
-
-  // WGP mode is supported.
-  FEATURE_WGP = 1 << 9,
-
-  // Xnack is available by default
-  FEATURE_XNACK_ALWAYS = 1 << 10
-};
-
-enum FeatureError : uint32_t {
-  NO_ERROR = 0,
-  INVALID_FEATURE_COMBINATION,
-  UNSUPPORTED_TARGET_FEATURE
-};
-
-LLVM_ABI StringRef getArchFamilyNameAMDGCN(GPUKind AK);
-
-LLVM_ABI StringRef getArchNameAMDGCN(GPUKind AK);
-LLVM_ABI StringRef getArchNameR600(GPUKind AK);
-LLVM_ABI StringRef getCanonicalArchName(const Triple &T, StringRef Arch);
-LLVM_ABI GPUKind parseArchAMDGCN(StringRef CPU);
-LLVM_ABI GPUKind parseArchR600(StringRef CPU);
-LLVM_ABI unsigned getArchAttrAMDGCN(GPUKind AK);
-LLVM_ABI unsigned getArchAttrR600(GPUKind AK);
-
-LLVM_ABI void fillValidArchListAMDGCN(SmallVectorImpl<StringRef> &Values);
-LLVM_ABI void fillValidArchListR600(SmallVectorImpl<StringRef> &Values);
-
-LLVM_ABI IsaVersion getIsaVersion(StringRef GPU);
-
-/// Fills Features map with default values for given target GPU.
-/// \p Features contains overriding target features and this function returns
-/// default target features with entries overridden by \p Features.
-LLVM_ABI std::pair<FeatureError, StringRef>
-fillAMDGPUFeatureMap(StringRef GPU, const Triple &T, StringMap<bool> &Features);
-} // namespace AMDGPU
-
 struct BasicSubtargetFeatureKV {
   const char *Key;         ///< K-V key string
   unsigned Value;          ///< K-V integer value
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
index 6e8ad3f9f1a24..18b3af1cea294 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
@@ -50,7 +50,7 @@
 #include "llvm/Support/Compiler.h"
 #include "llvm/Target/TargetLoweringObjectFile.h"
 #include "llvm/Target/TargetMachine.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp
index e262d4e715fea..873aae5daae94 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUMIRFormatter.cpp
@@ -13,7 +13,7 @@
 
 #include "AMDGPUMIRFormatter.h"
 #include "SIMachineFunctionInfo.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp
index 90c4f4e6680c2..c943d6fa2dd92 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUPreloadKernArgProlog.cpp
@@ -31,7 +31,7 @@
 #include "GCNSubtarget.h"
 #include "SIMachineFunctionInfo.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp b/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp
index faef40862d718..a04163599aab9 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUWaitSGPRHazards.cpp
@@ -17,7 +17,7 @@
 #include "MCTargetDesc/AMDGPUMCTargetDesc.h"
 #include "SIInstrInfo.h"
 #include "llvm/ADT/SetVector.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
index 111b28af3b47e..24dbcdf8cc475 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
+++ b/llvm/lib/Target/AMDGPU/AMDGPUWaitcntUtils.h
@@ -13,7 +13,7 @@
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 namespace llvm {
 
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index 0e169106b9794..75e48f20b6945 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -43,7 +43,7 @@
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/MathExtras.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include <optional>
 
 using namespace llvm;
diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
index 8e2306682dbc3..8ab90d953200e 100644
--- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp
@@ -21,7 +21,7 @@
 #include "llvm/CodeGen/MachineInstrBuilder.h"
 #include "llvm/CodeGen/ScheduleDAG.h"
 #include "llvm/Support/Debug.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp
index 9ec12131d7236..6c81cbcad3330 100644
--- a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp
+++ b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.cpp
@@ -18,6 +18,7 @@
 #include "llvm/MC/TargetRegistry.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/WithColor.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 namespace llvm::mca {
 
diff --git a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h
index aeb5c032daee4..c764ff71f5d0c 100644
--- a/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h
+++ b/llvm/lib/Target/AMDGPU/MCA/AMDGPUCustomBehaviour.h
@@ -20,7 +20,6 @@
 #include "Utils/AMDGPUBaseInfo.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/MCA/CustomBehaviour.h"
-#include "llvm/TargetParser/TargetParser.h"
 
 namespace llvm {
 namespace mca {
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
index 95da56f420b2d..d71dcf225df50 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
@@ -21,7 +21,7 @@
 #include "llvm/MC/MCValue.h"
 #include "llvm/MC/TargetRegistry.h"
 #include "llvm/Support/EndianStream.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
index 9ffa4458abdc6..19c5ac6a647ce 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
@@ -20,7 +20,7 @@
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/MC/MCRegisterInfo.h"
 #include "llvm/MC/MCSubtargetInfo.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp
index 296b248dfa23a..a37fe6741ea55 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCKernelDescriptor.cpp
@@ -12,7 +12,7 @@
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCSubtargetInfo.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
index d6509fdd2b21a..d2d11f0786a16 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
@@ -31,7 +31,7 @@
 #include "llvm/Support/AMDHSAKernelDescriptor.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/FormattedStream.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
index e3d7b7a5a519e..c03f18768d590 100644
--- a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
@@ -40,7 +40,7 @@
 #include "llvm/IR/Dominators.h"
 #include "llvm/InitializePasses.h"
 #include "llvm/Support/DebugCounter.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 
diff --git a/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp b/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp
index fe87c5afda1b8..25922c5af7da1 100644
--- a/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp
+++ b/llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp
@@ -28,7 +28,7 @@
 #include "llvm/Support/AMDGPUAddrSpace.h"
 #include "llvm/Support/AtomicOrdering.h"
 #include "llvm/Support/Debug.h"
-#include "llvm/TargetParser/TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace llvm;
 using namespace llvm::AMDGPU;
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index 6feaa4951b14a..bcdb20c6bd24f 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -26,7 +26,7 @@
 #include "llvm/MC/MCRegisterInfo.h"
 #include "llvm/MC/MCSubtargetInfo.h"
 #include "llvm/Support/Comma...
[truncated]

@shiltian
shiltian force-pushed the users/shiltian/mqsad-target-feature branch from 74a466a to c48bc2f Compare May 19, 2026 01:31
@shiltian
shiltian force-pushed the users/shiltian/amdgpu-target-parser branch from 700f693 to 91d102f Compare May 19, 2026 01:31
Base automatically changed from users/shiltian/mqsad-target-feature to main May 19, 2026 15:31
@shiltian
shiltian requested a review from ritter-x2a as a code owner May 19, 2026 15:31
@shiltian
shiltian force-pushed the users/shiltian/amdgpu-target-parser branch from 91d102f to ce7b6ed Compare May 19, 2026 15:32
@shiltian shiltian changed the title [NFC][AMDGPU] Remove AMDGPU related code from generic TargetParser.cpp [NFC][AMDGPU] Move AMDGPU related code out of generic TargetParser.cpp May 19, 2026
#include "clang/Basic/MacroBuilder.h"
#include "clang/Basic/TargetBuiltins.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/TargetParser/AMDGPUTargetParser.h"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You already have it included in the AMDGPU.h.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, but my understanding is that the best practice is to include the headers we actually need instead of relying on transitive includes from other headers, since those headers might later stop including the ones we depend on.

That probably won't happen with AMDGPU.h, since it's basically a giant all-in-one header included by almost every AMDGPU source file, but IMHO that's not really a good thing.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Up to you.

#include "clang/Basic/MacroBuilder.h"
#include "clang/Basic/TargetBuiltins.h"
#include "llvm/TargetParser/TargetParser.h"
#include "llvm/TargetParser/AMDGPUTargetParser.h"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here.

#include "llvm/Support/Path.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/TargetParser/AMDGPUTargetParser.h"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same.

@rampitec rampitec left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

#include "clang/Basic/MacroBuilder.h"
#include "clang/Basic/TargetBuiltins.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/TargetParser/AMDGPUTargetParser.h"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Up to you.

@shiltian
shiltian merged commit 9997b11 into main May 19, 2026
9 of 10 checks passed
@shiltian
shiltian deleted the users/shiltian/amdgpu-target-parser branch May 19, 2026 20:16
suryajasper pushed a commit to suryajasper/rocm-llvm-project that referenced this pull request May 20, 2026
suryajasper pushed a commit to suryajasper/rocm-llvm-project that referenced this pull request May 20, 2026
antiagainst added a commit to triton-lang/triton that referenced this pull request Jun 4, 2026
- Update AMD target parser includes after llvm/llvm-project#198433
- Add explicit TypeID for AMD UniformityAnalysis after llvm/llvm-project#199634
- Update finite-trip-count AMD range analysis after llvm/llvm-project#196616
- Update NVVM::BarrierOp creation after llvm/llvm-project#199404
antiagainst added a commit to triton-lang/triton that referenced this pull request Jun 4, 2026
- Update AMD target parser includes after llvm/llvm-project#198433
- Add explicit TypeID for AMD UniformityAnalysis after llvm/llvm-project#199634
- Update finite-trip-count AMD range analysis after llvm/llvm-project#196616
- Update NVVM::BarrierOp creation after llvm/llvm-project#199404
antiagainst added a commit to triton-lang/triton that referenced this pull request Jun 4, 2026
- Update AMD target parser includes after llvm/llvm-project#198433
- Add explicit TypeID for AMD UniformityAnalysis after llvm/llvm-project#199634
- Update finite-trip-count AMD range analysis after llvm/llvm-project#196616
- Update NVVM::BarrierOp creation after llvm/llvm-project#199404
ThomasRaoux added a commit to triton-lang/triton that referenced this pull request Jun 5, 2026
* Dropped -Os and -Oz after
llvm/llvm-project#191363
* Emit scalar {add,sub,mul}.rn.bf16 ops after
llvm/llvm-project#190414
* Also changed to avoid hardcoding line numbers in test_line_info.py
* Add identifier/discriminator arguments to DICompositeTypeAttr::get
* calls after llvm/llvm-project#195321
* Pass MCRegisterInfo and MCSubtargetInfo by reference when constructing
* MCContext after llvm/llvm-project#195032
* Replace NVVM::Barrier0Op and nvvm.barrier0 test expectations with
* NVVM::BarrierOp/nvvm.barrier after
llvm/llvm-project#195608
* Update AMD target parser includes after
llvm/llvm-project#198433
* Add explicit TypeID for AMD UniformityAnalysis after
llvm/llvm-project#199634
* Update finite-trip-count AMD range analysis after
llvm/llvm-project#196616
* Update NVVM::BarrierOp creation after
llvm/llvm-project#199404

also disable SLP vectorizer on sm_80 to workaround a ptxas bug

---------

Co-authored-by: Lei Zhang <antiagainst@gmail.com>
Co-authored-by: Lei Zhang <Lei.Zhang2@amd.com>
jerryyin pushed a commit to jerryyin/triton that referenced this pull request Jun 12, 2026
- Update AMD target parser includes after llvm/llvm-project#198433
- Add explicit TypeID for AMD UniformityAnalysis after llvm/llvm-project#199634
- Update finite-trip-count AMD range analysis after llvm/llvm-project#196616
- Update NVVM::BarrierOp creation after llvm/llvm-project#199404
neudinger pushed a commit to zml/intel-xpu-backend-for-triton that referenced this pull request Jun 23, 2026
* Dropped -Os and -Oz after
llvm/llvm-project#191363
* Emit scalar {add,sub,mul}.rn.bf16 ops after
llvm/llvm-project#190414
* Also changed to avoid hardcoding line numbers in test_line_info.py
* Add identifier/discriminator arguments to DICompositeTypeAttr::get
* calls after llvm/llvm-project#195321
* Pass MCRegisterInfo and MCSubtargetInfo by reference when constructing
* MCContext after llvm/llvm-project#195032
* Replace NVVM::Barrier0Op and nvvm.barrier0 test expectations with
* NVVM::BarrierOp/nvvm.barrier after
llvm/llvm-project#195608
* Update AMD target parser includes after
llvm/llvm-project#198433
* Add explicit TypeID for AMD UniformityAnalysis after
llvm/llvm-project#199634
* Update finite-trip-count AMD range analysis after
llvm/llvm-project#196616
* Update NVVM::BarrierOp creation after
llvm/llvm-project#199404

also disable SLP vectorizer on sm_80 to workaround a ptxas bug

---------

Co-authored-by: Lei Zhang <antiagainst@gmail.com>
Co-authored-by: Lei Zhang <Lei.Zhang2@amd.com>
ngocson2vn pushed a commit to ngocson2vn/triton that referenced this pull request Jul 5, 2026
* Dropped -Os and -Oz after
llvm/llvm-project#191363
* Emit scalar {add,sub,mul}.rn.bf16 ops after
llvm/llvm-project#190414
* Also changed to avoid hardcoding line numbers in test_line_info.py
* Add identifier/discriminator arguments to DICompositeTypeAttr::get
* calls after llvm/llvm-project#195321
* Pass MCRegisterInfo and MCSubtargetInfo by reference when constructing
* MCContext after llvm/llvm-project#195032
* Replace NVVM::Barrier0Op and nvvm.barrier0 test expectations with
* NVVM::BarrierOp/nvvm.barrier after
llvm/llvm-project#195608
* Update AMD target parser includes after
llvm/llvm-project#198433
* Add explicit TypeID for AMD UniformityAnalysis after
llvm/llvm-project#199634
* Update finite-trip-count AMD range analysis after
llvm/llvm-project#196616
* Update NVVM::BarrierOp creation after
llvm/llvm-project#199404

also disable SLP vectorizer on sm_80 to workaround a ptxas bug

---------

Co-authored-by: Lei Zhang <antiagainst@gmail.com>
Co-authored-by: Lei Zhang <Lei.Zhang2@amd.com>
lamb-j added a commit to ROCm/llvm-project that referenced this pull request Jul 10, 2026
comgr-hotswap.cpp only uses llvm::AMDGPU::IsaVersion and
llvm::AMDGPU::getIsaVersion. On this compiler branch's LLVM base those
symbols still live in llvm/TargetParser/TargetParser.h; the split-out
llvm/TargetParser/AMDGPUTargetParser.h header (upstream llvm/llvm-project
PR llvm#198433) is not present, so the original include broke the TheRock
compiler-runtime build with a missing-header fatal error.

Switch the include to TargetParser.h, which provides both symbols at this
base, avoiding the need to also pull in the large NFC TargetParser split.
jammm pushed a commit to ROCm/llvm-project that referenced this pull request Jul 15, 2026
comgr-hotswap.cpp only uses llvm::AMDGPU::IsaVersion and
llvm::AMDGPU::getIsaVersion. On this compiler branch's LLVM base those
symbols still live in llvm/TargetParser/TargetParser.h; the split-out
llvm/TargetParser/AMDGPUTargetParser.h header (upstream llvm/llvm-project
PR llvm#198433) is not present, so the original include broke the TheRock
compiler-runtime build with a missing-header fatal error.

Switch the include to TargetParser.h, which provides both symbols at this
base, avoiding the need to also pull in the large NFC TargetParser split.
jammm pushed a commit to ROCm/llvm-project that referenced this pull request Jul 16, 2026
comgr-hotswap.cpp only uses llvm::AMDGPU::IsaVersion and
llvm::AMDGPU::getIsaVersion. On this compiler branch's LLVM base those
symbols still live in llvm/TargetParser/TargetParser.h; the split-out
llvm/TargetParser/AMDGPUTargetParser.h header (upstream llvm/llvm-project
PR llvm#198433) is not present, so the original include broke the TheRock
compiler-runtime build with a missing-header fatal error.

Switch the include to TargetParser.h, which provides both symbols at this
base, avoiding the need to also pull in the large NFC TargetParser split.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend:AMDGPU clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' clang:frontend Language frontend issues, e.g. anything involving "Sema" flang:driver flang Flang issues not falling into any other category mlir:llvm mlir

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants