[llvm-branch-commits] [clang] [flang] [llvm] clang: Start using new amdgpu subarch triples (PR #206482)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Jun 29 06:15:07 PDT 2026


https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/206482

Fixup invocations using --target=amdgcn + -mcpu to introduce
the subarch in the triple.

For offload toolchains, a single toolchain is constructed for the
top level amdgpu architecture, and the effective triple is used for
target specific tool invocations.

The specifics of the resource directory layout are tbd. This does
try to find resources in the subarch named directory. The paths
are searched at toolchain creation time, so that does not work
when there are multiple subarches.

Fixes #154925

>From 75afb660203a779f102dfe9ee28ec286e16cb5e5 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Mon, 30 Mar 2026 16:25:35 +0200
Subject: [PATCH] clang: Start using new amdgpu subarch triples

Fixup invocations using --target=amdgcn + -mcpu to introduce
the subarch in the triple.

For offload toolchains, a single toolchain is constructed for the
top level amdgpu architecture, and the effective triple is used for
target specific tool invocations.

The specifics of the resource directory layout are tbd. This does
try to find resources in the subarch named directory. The paths
are searched at toolchain creation time, so that does not work
when there are multiple subarches.

Fixes #154925
---
 clang/include/clang/Basic/OffloadArch.h       |   9 +-
 clang/include/clang/Driver/ToolChain.h        |   4 +-
 clang/lib/Basic/OffloadArch.cpp               | 232 +++++++++++++++++-
 clang/lib/Basic/Targets/AMDGPU.cpp            |   7 +-
 clang/lib/Driver/Driver.cpp                   |  55 ++++-
 clang/lib/Driver/ToolChain.cpp                |  24 +-
 clang/lib/Driver/ToolChains/AMDGPU.cpp        |  15 ++
 clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp   |  21 +-
 clang/lib/Driver/ToolChains/Arch/AMDGPU.h     |   4 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp    |  66 +++--
 clang/lib/Driver/ToolChains/HIPAMD.cpp        |   3 +
 clang/lib/Driver/ToolChains/HIPUtility.cpp    |  19 +-
 .../amdgpu-builtin-is-invocable-subarch.c     |  37 +++
 .../amdgpu-builtin-processor-is-subarch.c     |  48 ++++
 .../amdgpu-wavefront-size-from-subarch.cl     |  37 +++
 .../lib/amdgpu9-amd-amdhsa-llvm/libclc.bc     |   0
 .../libclang_rt.profile.a                     |   0
 .../libclang_rt.ubsan_minimal.a               |   0
 .../lib/amdgpu10.30-amd-amdhsa-llvm/libclc.bc |   0
 .../libflang_rt.runtime.a                     |   0
 .../amdgpu-amd-amdhsa-llvm/gfx90a/libclc.bc   |   0
 .../libclang_rt.profile.a                     |   0
 .../libclang_rt.ubsan_minimal.a               |   0
 .../lib/amdgpu-amd-amdhsa-llvm/libclc.bc      |   0
 .../libflang_rt.runtime.a                     |   0
 .../lib/amdgpu-amd-amdhsa/gfx90a/libclc.bc    |   0
 .../amdgpu-amd-amdhsa/libclang_rt.profile.a   |   0
 .../libclang_rt.ubsan_minimal.a               |   0
 .../lib/amdgpu-amd-amdhsa/libclc.bc           |   0
 .../amdgpu-amd-amdhsa/libflang_rt.runtime.a   |   0
 .../libclang_rt.profile.a                     |   0
 .../libclang_rt.ubsan_minimal.a               |   0
 .../lib/amdgpu10.30-amd-amdhsa/libclc.bc      |   0
 .../libflang_rt.runtime.a                     |   0
 clang/test/Driver/amdgpu-hip-system-arch.c    |   2 +-
 clang/test/Driver/amdgpu-multilib.yaml        |   2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   |  28 +--
 .../Driver/amdgpu-openmp-system-arch-fail.c   |   4 +-
 .../amdgpu-openmp-targets-triple-compat.c     |  39 +++
 clang/test/Driver/amdgpu-openmp-toolchain.c   |  26 +-
 clang/test/Driver/amdgpu-subarch-diag.hip     |  13 +
 .../test/Driver/amdgpu-subarch-march-diag.cl  |  12 +
 .../Driver/amdgpu-subarch-resource-dir.cl     |  42 ++++
 clang/test/Driver/amdgpu-unwind.cl            |   6 +-
 clang/test/Driver/amdgpu-validate-sanitize.cl |   2 +-
 .../test/Driver/amdgpu-xnack-sramecc-flags.c  |  20 +-
 clang/test/Driver/atomic-options.hip          |   2 +-
 clang/test/Driver/cl-denorms-are-zero.cl      |   2 +-
 clang/test/Driver/cl-offload.cu               |   4 +-
 clang/test/Driver/ftime-trace-offload.cpp     |   8 +-
 clang/test/Driver/gpu-libc.c                  |   2 +-
 clang/test/Driver/hip-autolink.hip            |   2 +-
 clang/test/Driver/hip-binding.hip             |  66 ++---
 clang/test/Driver/hip-code-object-version.hip |   4 +-
 clang/test/Driver/hip-cuid.hip                |  12 +-
 clang/test/Driver/hip-device-compile.hip      |   6 +-
 clang/test/Driver/hip-fpie-option.hip         |   6 +-
 clang/test/Driver/hip-gz-options.hip          |   2 +-
 clang/test/Driver/hip-host-cpu-features.hip   |   6 +-
 clang/test/Driver/hip-link-bc-to-bc.hip       |  12 +-
 clang/test/Driver/hip-link-bundle-archive.hip |  10 +-
 clang/test/Driver/hip-link-save-temps.hip     |   8 +-
 clang/test/Driver/hip-link-shared-library.hip |   8 +-
 clang/test/Driver/hip-link-static-library.hip |   8 +-
 clang/test/Driver/hip-offload-arch.hip        |  34 ++-
 .../test/Driver/hip-offload-compress-zstd.hip |   6 +-
 clang/test/Driver/hip-options.hip             |  54 ++--
 clang/test/Driver/hip-phases.hip              |  86 +++----
 clang/test/Driver/hip-rdc-device-only.hip     |  48 ++--
 clang/test/Driver/hip-sanitize-options.hip    |  26 +-
 clang/test/Driver/hip-save-temps.hip          |  48 ++--
 clang/test/Driver/hip-target-id.hip           |  19 +-
 clang/test/Driver/hip-thinlto.hip             |   8 +-
 .../test/Driver/hip-toolchain-device-only.hip |   4 +-
 clang/test/Driver/hip-toolchain-mllvm.hip     |   4 +-
 clang/test/Driver/hip-toolchain-no-rdc.hip    |  34 +--
 clang/test/Driver/hip-toolchain-opt.hip       |  18 +-
 .../Driver/hip-toolchain-rdc-separate.hip     |  26 +-
 .../Driver/hip-toolchain-rdc-static-lib.hip   |  14 +-
 clang/test/Driver/hip-toolchain-rdc.hip       |  16 +-
 clang/test/Driver/offload-Xarch.c             |  18 +-
 .../Driver/offload-arch-translation-amdgpu.cu | 118 ++++-----
 clang/test/Driver/offload-darwin-host.hip     |   4 +-
 clang/test/Driver/offload-target.c            |   4 +-
 clang/test/Driver/offload.f90                 |   2 +-
 .../openmp-Xopenmp-target-forward-args.c      |   2 +-
 clang/test/Driver/openmp-offload-gpu.c        |  46 ++--
 clang/test/Driver/openmp-offload-infer.c      |   4 +-
 clang/test/Driver/openmp-system-arch.c        |  12 +-
 clang/test/Driver/rocm-detect.cl              |   2 +-
 clang/test/Driver/rocm-detect.hip             |   2 +-
 clang/test/Driver/rocm-device-libs.cl         |   2 +-
 .../linker-wrapper-amdgpu-triple-compat.c     |  30 +++
 clang/test/OpenMP/amdgpu-arch-compat.c        |   5 +-
 clang/test/Preprocessor/hash_builtin.cpp      |   2 +
 ...-processor-is-invalid-subarch-arg-list.hip |  11 +
 clang/test/SemaHIP/amdgpu-processor-is.hip    |  11 +
 .../test/SemaOpenCL/builtins-amdgcn-gfx11.cl  |   4 +
 .../ClangLinkerWrapper.cpp                    |   6 +-
 clang/unittests/Basic/OffloadArchTest.cpp     |  22 ++
 flang/test/Driver/code-object-version.f90     |   2 +-
 flang/test/Driver/offload-device.f90          |   2 +-
 flang/test/Driver/omp-driver-offload.f90      |  18 +-
 flang/test/Driver/target-cpu-features.f90     |   2 +-
 flang/test/Driver/target-gpu-features.f90     |   2 +-
 flang/test/Driver/xoffload-linker.f90         |   4 +-
 .../include/llvm/Frontend/OpenMP/OMPKinds.def |   1 +
 llvm/lib/TargetParser/AMDGPUTargetParser.cpp  |  10 +-
 108 files changed, 1247 insertions(+), 491 deletions(-)
 create mode 100644 clang/test/CodeGen/amdgpu-builtin-is-invocable-subarch.c
 create mode 100644 clang/test/CodeGen/amdgpu-builtin-processor-is-subarch.c
 create mode 100644 clang/test/CodeGenOpenCL/amdgpu-wavefront-size-from-subarch.cl
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_major_version/lib/amdgpu9-amd-amdhsa-llvm/libclc.bc
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclang_rt.profile.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclang_rt.ubsan_minimal.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclc.bc
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libflang_rt.runtime.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/gfx90a/libclc.bc
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclang_rt.profile.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclang_rt.ubsan_minimal.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclc.bc
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libflang_rt.runtime.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/gfx90a/libclc.bc
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libclang_rt.profile.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libclang_rt.ubsan_minimal.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libclc.bc
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libflang_rt.runtime.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libclang_rt.profile.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libclang_rt.ubsan_minimal.a
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libclc.bc
 create mode 100644 clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libflang_rt.runtime.a
 create mode 100644 clang/test/Driver/amdgpu-openmp-targets-triple-compat.c
 create mode 100644 clang/test/Driver/amdgpu-subarch-diag.hip
 create mode 100644 clang/test/Driver/amdgpu-subarch-march-diag.cl
 create mode 100644 clang/test/Driver/amdgpu-subarch-resource-dir.cl
 create mode 100644 clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-amdgpu-triple-compat.c
 create mode 100644 clang/test/SemaHIP/amdgpu-processor-is-invalid-subarch-arg-list.hip

diff --git a/clang/include/clang/Basic/OffloadArch.h b/clang/include/clang/Basic/OffloadArch.h
index 552f1b0316ccf..1ca8f1bba4524 100644
--- a/clang/include/clang/Basic/OffloadArch.h
+++ b/clang/include/clang/Basic/OffloadArch.h
@@ -9,13 +9,9 @@
 #ifndef LLVM_CLANG_BASIC_OFFLOADARCH_H
 #define LLVM_CLANG_BASIC_OFFLOADARCH_H
 
-#include "llvm/ADT/StringRef.h"
+#include "llvm/TargetParser/Triple.h"
 #include <tuple>
 
-namespace llvm {
-class Triple;
-} // namespace llvm
-
 namespace clang {
 
 enum class OffloadArch {
@@ -165,6 +161,9 @@ const char *OffloadArchToVirtualArchString(OffloadArch A);
 // OffloadArch::Unknown if the string is not recognized.
 OffloadArch StringToOffloadArch(llvm::StringRef S);
 
+OffloadArch getSubArchOffloadArch(llvm::Triple::SubArchType SubArch);
+llvm::Triple::SubArchType getOffloadArchSubArch(OffloadArch ID);
+
 llvm::Triple OffloadArchToTriple(const llvm::Triple &DefaultToolchainTriple,
                                  OffloadArch ID);
 
diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h
index 863ba1084cb1a..60bf559b8a073 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -911,7 +911,9 @@ class ToolChain {
       return;
     }
 
-    if (TT.isAMDGPU()) {
+    if (TT.isAMDGCN()) {
+      // Fixup legacy "amdgcn" triples to "amdgpu"
+      TT.setArch(llvm::Triple::amdgpu, TT.getSubArch());
       if (TT.getVendor() == llvm::Triple::UnknownVendor)
         TT.setVendor(llvm::Triple::AMD);
       if (TT.getOS() == llvm::Triple::UnknownOS)
diff --git a/clang/lib/Basic/OffloadArch.cpp b/clang/lib/Basic/OffloadArch.cpp
index 5d12f257f3680..768965624a1cd 100644
--- a/clang/lib/Basic/OffloadArch.cpp
+++ b/clang/lib/Basic/OffloadArch.cpp
@@ -158,6 +158,232 @@ OffloadArch StringToOffloadArch(llvm::StringRef S) {
   return Result->Arch;
 }
 
+OffloadArch getSubArchOffloadArch(llvm::Triple::SubArchType SubArch) {
+  static const OffloadArch AMDGPUSubArchs[llvm::Triple::LastAMDGPUSubArch -
+                                          llvm::Triple::FirstAMDGPUSubArch +
+                                          1] = {
+      OffloadArch::Unknown,         OffloadArch::GFX600,  OffloadArch::GFX601,
+      OffloadArch::GFX602,
+
+      OffloadArch::Unknown,         OffloadArch::GFX700,  OffloadArch::GFX701,
+      OffloadArch::GFX702,          OffloadArch::GFX703,  OffloadArch::GFX704,
+      OffloadArch::GFX705,
+
+      OffloadArch::Unknown,         OffloadArch::GFX801,  OffloadArch::GFX802,
+      OffloadArch::GFX803,          OffloadArch::GFX805,
+
+      OffloadArch::GFX810,
+
+      OffloadArch::GFX9_GENERIC,    OffloadArch::GFX900,  OffloadArch::GFX902,
+      OffloadArch::GFX904,          OffloadArch::GFX906,  OffloadArch::GFX909,
+      OffloadArch::GFX90c,
+
+      OffloadArch::GFX908,
+
+      OffloadArch::GFX90a,
+
+      OffloadArch::GFX9_4_GENERIC,  OffloadArch::GFX942,  OffloadArch::GFX950,
+
+      OffloadArch::GFX10_1_GENERIC, OffloadArch::GFX1010, OffloadArch::GFX1011,
+      OffloadArch::GFX1012,         OffloadArch::GFX1013,
+
+      OffloadArch::GFX10_3_GENERIC, OffloadArch::GFX1030, OffloadArch::GFX1031,
+      OffloadArch::GFX1032,         OffloadArch::GFX1033, OffloadArch::GFX1034,
+      OffloadArch::GFX1035,         OffloadArch::GFX1036,
+
+      OffloadArch::GFX11_GENERIC,   OffloadArch::GFX1100, OffloadArch::GFX1101,
+      OffloadArch::GFX1102,         OffloadArch::GFX1103, OffloadArch::GFX1150,
+      OffloadArch::GFX1151,         OffloadArch::GFX1152, OffloadArch::GFX1153,
+      OffloadArch::GFX1154,
+
+      OffloadArch::Unknown,         OffloadArch::GFX1170, OffloadArch::GFX1171,
+      OffloadArch::GFX1172,
+
+      OffloadArch::GFX12_GENERIC,   OffloadArch::GFX1200, OffloadArch::GFX1201,
+
+      OffloadArch::GFX12_5_GENERIC, OffloadArch::GFX1250, OffloadArch::GFX1251,
+
+      OffloadArch::Unknown,         OffloadArch::GFX1310};
+
+  if (SubArch < llvm::Triple::FirstAMDGPUSubArch ||
+      SubArch > llvm::Triple::LastAMDGPUSubArch)
+    return OffloadArch::Unknown;
+
+  return AMDGPUSubArchs[SubArch - llvm::Triple::FirstAMDGPUSubArch];
+}
+
+llvm::Triple::SubArchType getOffloadArchSubArch(OffloadArch ID) {
+  switch (ID) {
+  case OffloadArch::Unused:
+  case OffloadArch::Unknown:
+  case OffloadArch::SM_20:
+  case OffloadArch::SM_21:
+  case OffloadArch::SM_30:
+  case OffloadArch::SM_32_:
+  case OffloadArch::SM_35:
+  case OffloadArch::SM_37:
+  case OffloadArch::SM_50:
+  case OffloadArch::SM_52:
+  case OffloadArch::SM_53:
+  case OffloadArch::SM_60:
+  case OffloadArch::SM_61:
+  case OffloadArch::SM_62:
+  case OffloadArch::SM_70:
+  case OffloadArch::SM_72:
+  case OffloadArch::SM_75:
+  case OffloadArch::SM_80:
+  case OffloadArch::SM_86:
+  case OffloadArch::SM_87:
+  case OffloadArch::SM_88:
+  case OffloadArch::SM_89:
+  case OffloadArch::SM_90:
+  case OffloadArch::SM_90a:
+  case OffloadArch::SM_100:
+  case OffloadArch::SM_100a:
+  case OffloadArch::SM_100f:
+  case OffloadArch::SM_101:
+  case OffloadArch::SM_101a:
+  case OffloadArch::SM_101f:
+  case OffloadArch::SM_103:
+  case OffloadArch::SM_103a:
+  case OffloadArch::SM_103f:
+  case OffloadArch::SM_110:
+  case OffloadArch::SM_110a:
+  case OffloadArch::SM_110f:
+  case OffloadArch::SM_120:
+  case OffloadArch::SM_120a:
+  case OffloadArch::SM_120f:
+  case OffloadArch::SM_121:
+  case OffloadArch::SM_121a:
+  case OffloadArch::SM_121f:
+  case OffloadArch::AMDGCNSPIRV:
+  case OffloadArch::Generic:
+  case OffloadArch::GRANITERAPIDS:
+  case OffloadArch::BMG_G21:
+    return llvm::Triple::NoSubArch;
+  case OffloadArch::GFX600:
+    return llvm::Triple::AMDGPUSubArch600;
+  case OffloadArch::GFX601:
+    return llvm::Triple::AMDGPUSubArch601;
+  case OffloadArch::GFX602:
+    return llvm::Triple::AMDGPUSubArch602;
+  case OffloadArch::GFX700:
+    return llvm::Triple::AMDGPUSubArch700;
+  case OffloadArch::GFX701:
+    return llvm::Triple::AMDGPUSubArch701;
+  case OffloadArch::GFX702:
+    return llvm::Triple::AMDGPUSubArch702;
+  case OffloadArch::GFX703:
+    return llvm::Triple::AMDGPUSubArch703;
+  case OffloadArch::GFX704:
+    return llvm::Triple::AMDGPUSubArch704;
+  case OffloadArch::GFX705:
+    return llvm::Triple::AMDGPUSubArch705;
+  case OffloadArch::GFX801:
+    return llvm::Triple::AMDGPUSubArch801;
+  case OffloadArch::GFX802:
+    return llvm::Triple::AMDGPUSubArch802;
+  case OffloadArch::GFX803:
+    return llvm::Triple::AMDGPUSubArch803;
+  case OffloadArch::GFX805:
+    return llvm::Triple::AMDGPUSubArch805;
+  case OffloadArch::GFX810:
+    return llvm::Triple::AMDGPUSubArch810;
+  case OffloadArch::GFX9_GENERIC:
+    return llvm::Triple::AMDGPUSubArch9;
+  case OffloadArch::GFX900:
+    return llvm::Triple::AMDGPUSubArch900;
+  case OffloadArch::GFX902:
+    return llvm::Triple::AMDGPUSubArch902;
+  case OffloadArch::GFX904:
+    return llvm::Triple::AMDGPUSubArch904;
+  case OffloadArch::GFX906:
+    return llvm::Triple::AMDGPUSubArch906;
+  case OffloadArch::GFX908:
+    return llvm::Triple::AMDGPUSubArch908;
+  case OffloadArch::GFX909:
+    return llvm::Triple::AMDGPUSubArch909;
+  case OffloadArch::GFX90a:
+    return llvm::Triple::AMDGPUSubArch90A;
+  case OffloadArch::GFX90c:
+    return llvm::Triple::AMDGPUSubArch90C;
+  case OffloadArch::GFX9_4_GENERIC:
+    return llvm::Triple::AMDGPUSubArch9_4;
+  case OffloadArch::GFX942:
+    return llvm::Triple::AMDGPUSubArch942;
+  case OffloadArch::GFX950:
+    return llvm::Triple::AMDGPUSubArch950;
+  case OffloadArch::GFX10_1_GENERIC:
+    return llvm::Triple::AMDGPUSubArch10_1;
+  case OffloadArch::GFX1010:
+    return llvm::Triple::AMDGPUSubArch1010;
+  case OffloadArch::GFX1011:
+    return llvm::Triple::AMDGPUSubArch1011;
+  case OffloadArch::GFX1012:
+    return llvm::Triple::AMDGPUSubArch1012;
+  case OffloadArch::GFX1013:
+    return llvm::Triple::AMDGPUSubArch1013;
+  case OffloadArch::GFX10_3_GENERIC:
+    return llvm::Triple::AMDGPUSubArch10_3;
+  case OffloadArch::GFX1030:
+    return llvm::Triple::AMDGPUSubArch1030;
+  case OffloadArch::GFX1031:
+    return llvm::Triple::AMDGPUSubArch1031;
+  case OffloadArch::GFX1032:
+    return llvm::Triple::AMDGPUSubArch1032;
+  case OffloadArch::GFX1033:
+    return llvm::Triple::AMDGPUSubArch1033;
+  case OffloadArch::GFX1034:
+    return llvm::Triple::AMDGPUSubArch1034;
+  case OffloadArch::GFX1035:
+    return llvm::Triple::AMDGPUSubArch1035;
+  case OffloadArch::GFX1036:
+    return llvm::Triple::AMDGPUSubArch1036;
+  case OffloadArch::GFX11_GENERIC:
+    return llvm::Triple::AMDGPUSubArch11;
+  case OffloadArch::GFX1100:
+    return llvm::Triple::AMDGPUSubArch1100;
+  case OffloadArch::GFX1101:
+    return llvm::Triple::AMDGPUSubArch1101;
+  case OffloadArch::GFX1102:
+    return llvm::Triple::AMDGPUSubArch1102;
+  case OffloadArch::GFX1103:
+    return llvm::Triple::AMDGPUSubArch1103;
+  case OffloadArch::GFX1150:
+    return llvm::Triple::AMDGPUSubArch1150;
+  case OffloadArch::GFX1151:
+    return llvm::Triple::AMDGPUSubArch1151;
+  case OffloadArch::GFX1152:
+    return llvm::Triple::AMDGPUSubArch1152;
+  case OffloadArch::GFX1153:
+    return llvm::Triple::AMDGPUSubArch1153;
+  case OffloadArch::GFX1154:
+    return llvm::Triple::AMDGPUSubArch1154;
+  case OffloadArch::GFX1170:
+    return llvm::Triple::AMDGPUSubArch1170;
+  case OffloadArch::GFX1171:
+    return llvm::Triple::AMDGPUSubArch1171;
+  case OffloadArch::GFX1172:
+    return llvm::Triple::AMDGPUSubArch1172;
+  case OffloadArch::GFX12_GENERIC:
+    return llvm::Triple::AMDGPUSubArch12;
+  case OffloadArch::GFX1200:
+    return llvm::Triple::AMDGPUSubArch1200;
+  case OffloadArch::GFX1201:
+    return llvm::Triple::AMDGPUSubArch1201;
+  case OffloadArch::GFX1250:
+    return llvm::Triple::AMDGPUSubArch1250;
+  case OffloadArch::GFX1251:
+    return llvm::Triple::AMDGPUSubArch1251;
+  case OffloadArch::GFX12_5_GENERIC:
+    return llvm::Triple::AMDGPUSubArch12_5;
+  case OffloadArch::GFX1310:
+    return llvm::Triple::AMDGPUSubArch1310;
+  }
+
+  llvm_unreachable("covered switch");
+}
+
 llvm::Triple OffloadArchToTriple(const llvm::Triple &DefaultToolchainTriple,
                                  OffloadArch ID) {
   if (ID == OffloadArch::AMDGCNSPIRV)
@@ -172,8 +398,10 @@ llvm::Triple OffloadArchToTriple(const llvm::Triple &DefaultToolchainTriple,
                         llvm::Triple::CUDA);
   }
 
-  if (IsAMDOffloadArch(ID))
-    return llvm::Triple("amdgcn-amd-amdhsa");
+  if (IsAMDOffloadArch(ID)) {
+    return llvm::Triple(llvm::Triple::amdgpu, llvm::Triple::NoSubArch,
+                        llvm::Triple::AMD, llvm::Triple::AMDHSA);
+  }
 
   return {};
 }
diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp
index 3fd9643373383..67d8f65c2975d 100644
--- a/clang/lib/Basic/Targets/AMDGPU.cpp
+++ b/clang/lib/Basic/Targets/AMDGPU.cpp
@@ -191,8 +191,11 @@ void AMDGPUTargetInfo::fillValidCPUList(
 AMDGPUTargetInfo::AMDGPUTargetInfo(const llvm::Triple &Triple,
                                    const TargetOptions &Opts)
     : TargetInfo(Triple),
-      GPUKind(Triple.isAMDGCN() ? llvm::AMDGPU::parseArchAMDGCN(Opts.CPU)
-                                : llvm::AMDGPU::parseArchR600(Opts.CPU)),
+      GPUKind(Triple.isAMDGCN()
+                  ? (Opts.CPU.empty() ? llvm::AMDGPU::getGPUKindFromSubArch(
+                                            Triple.getSubArch())
+                                      : llvm::AMDGPU::parseArchAMDGCN(Opts.CPU))
+                  : llvm::AMDGPU::parseArchR600(Opts.CPU)),
       GPUFeatures(Triple.isAMDGCN() ? llvm::AMDGPU::getArchAttrAMDGCN(GPUKind)
                                     : llvm::AMDGPU::getArchAttrR600(GPUKind)) {
   resetDataLayout();
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 1d4e6ab50152c..4be846b63dc8b 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -940,9 +940,11 @@ static TripleSet inferOffloadToolchains(Compilation &C,
   TripleSet Triples;
   for (llvm::StringRef Arch : Archs) {
     OffloadArch ID = StringToOffloadArch(Arch);
-    if (ID == OffloadArch::Unknown)
-      ID = StringToOffloadArch(
-          getProcessorFromTargetID(llvm::Triple("amdgcn-amd-amdhsa"), Arch));
+    if (ID == OffloadArch::Unknown) {
+      llvm::Triple AMDGPUTriple(llvm::Triple::amdgpu, llvm::Triple::NoSubArch,
+                                llvm::Triple::AMD, llvm::Triple::AMDHSA);
+      ID = StringToOffloadArch(getProcessorFromTargetID(AMDGPUTriple, Arch));
+    }
 
     if (Kind == Action::OFK_HIP && !IsAMDOffloadArch(ID)) {
       C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch)
@@ -987,9 +989,10 @@ static TripleSet inferOffloadToolchains(Compilation &C,
   }
 
   // Infer the default target triple if no specific architectures are given.
-  if (Archs.empty() && Kind == Action::OFK_HIP)
-    Triples.insert(llvm::Triple("amdgcn-amd-amdhsa"));
-  else if (Archs.empty() && Kind == Action::OFK_Cuda) {
+  if (Archs.empty() && Kind == Action::OFK_HIP) {
+    Triples.insert(llvm::Triple(llvm::Triple::amdgpu, llvm::Triple::NoSubArch,
+                                llvm::Triple::AMD, llvm::Triple::AMDHSA));
+  } else if (Archs.empty() && Kind == Action::OFK_Cuda) {
     llvm::Triple::ArchType Arch =
         C.getDefaultToolChain().getTriple().isArch64Bit()
             ? llvm::Triple::nvptx64
@@ -4853,11 +4856,22 @@ static StringRef getCanonicalArchString(Compilation &C,
     C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch)
         << "CUDA" << ArchStr;
     return StringRef();
-  } else if (Triple.isAMDGPU() &&
-             (Arch == OffloadArch::Unknown || !IsAMDOffloadArch(Arch))) {
-    C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch)
-        << "HIP" << ArchStr;
-    return StringRef();
+  } else if (Triple.isAMDGPU()) {
+    if (Arch == OffloadArch::Unknown || !IsAMDOffloadArch(Arch)) {
+      C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch)
+          << "HIP" << ArchStr;
+      return {};
+    }
+
+    if (Triple.getSubArch() != llvm::Triple::NoSubArch) {
+      llvm::Triple::SubArchType ArchSubArch = getOffloadArchSubArch(Arch);
+      if (ArchSubArch != Triple.getSubArch() &&
+          llvm::AMDGPU::getMajorSubArch(ArchSubArch) != Triple.getSubArch()) {
+        C.getDriver().Diag(clang::diag::err_target_unsupported_arch)
+            << ArchStr << Triple.getArchName();
+        return {};
+      }
+    }
   }
 
   if (IsNVIDIAOffloadArch(Arch))
@@ -4955,7 +4969,9 @@ Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args,
         << ConflictingArchs->first << ConflictingArchs->second;
 
   // Fill in the default architectures if not provided explicitly.
-  if (Archs.empty()) {
+  bool HasSubArch = TC.getTriple().isAMDGCN() &&
+                    TC.getTriple().getSubArch() != llvm::Triple::NoSubArch;
+  if (Archs.empty() && !HasSubArch) {
     if (Kind == Action::OFK_Cuda) {
       Archs.insert(OffloadArchToString(TC.getTriple().isSPIRV()
                                            ? OffloadArch::Unused
@@ -4985,7 +5001,22 @@ Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args,
         }
       }
     }
+  } else if (Archs.empty() && HasSubArch) {
+    // Use default CPU if we have a subarch in the triple.
+    //
+    // TODO: We ought to be able to get away with the empty string here, but
+    // many tests require removal of redundant -target-cpu arguments
+    OffloadArch TripleOffloadArch =
+        getSubArchOffloadArch(TC.getTriple().getSubArch());
+    llvm::StringRef ArchStr = TripleOffloadArch == OffloadArch::Unknown
+                                  ? ""
+                                  : OffloadArchToString(TripleOffloadArch);
+    StringRef CanonicalStr =
+        getCanonicalArchString(C, Args, ArchStr, TC.getTriple());
+    if (!CanonicalStr.empty())
+      Archs.insert(CanonicalStr);
   }
+
   Args.ClaimAllArgs(options::OPT_offload_arch_EQ);
   Args.ClaimAllArgs(options::OPT_no_offload_arch_EQ);
 
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 3f6049d83423f..e7f431b4d2001 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -45,6 +45,7 @@
 #include "llvm/Support/VersionTuple.h"
 #include "llvm/Support/VirtualFileSystem.h"
 #include "llvm/TargetParser/AArch64TargetParser.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 #include "llvm/TargetParser/RISCVISAInfo.h"
 #include "llvm/TargetParser/TargetParser.h"
 #include "llvm/TargetParser/Triple.h"
@@ -1169,6 +1170,20 @@ ToolChain::getTargetSubDirPath(StringRef BaseDir) const {
   if (T.isAndroid())
     return getFallbackAndroidTargetPath(BaseDir);
 
+  if (T.isAMDGCN()) {
+    // Clear the subarch as a fallback.
+    // TODO: Remove this when libc and compiler-rt builds are migrated.
+    llvm::Triple AMDGPUTriple = T;
+    AMDGPUTriple.setArch(Triple::amdgpu);
+    if (auto Path = getPathForTriple(AMDGPUTriple))
+      return *Path;
+
+    // Try legacy architecture name.
+    AMDGPUTriple.setArchName("amdgcn");
+    if (auto Path = getPathForTriple(AMDGPUTriple))
+      return *Path;
+  }
+
   return {};
 }
 
@@ -1484,7 +1499,8 @@ std::string ToolChain::ComputeLLVMTriple(const ArgList &Args, BoundArch BA,
     return getTripleString().str();
   case llvm::Triple::amdgpu: {
     llvm::Triple Triple = getTriple();
-    tools::AMDGPU::setArchNameInTriple(getDriver(), Args, InputType, Triple);
+    tools::AMDGPU::setArchNameInTriple(getDriver(), Args, BA, InputType,
+                                       Triple);
     return Triple.getTriple();
   }
   case llvm::Triple::arm:
@@ -2110,6 +2126,12 @@ void ToolChain::TranslateXarchArgs(
 static bool isXArchCompatibleTripleArch(const llvm::Triple &TT,
                                         StringRef XArchVal) {
   llvm::Triple ParsedTriple(XArchVal);
+
+  // Accept -Xarch_amdgcn for all amdgpu subarches, and -Xarch_amdgpu9 for
+  // amdgpu9.xx
+  if (TT.isAMDGCN() && ParsedTriple.isAMDGCN())
+    return llvm::AMDGPU::isSubArchCompatible(TT, ParsedTriple);
+
   return TT.getArch() == ParsedTriple.getArch() &&
          TT.getSubArch() == ParsedTriple.getSubArch();
 }
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index 325dba03c4136..217455ac209ab 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -951,6 +951,21 @@ AMDGPUToolChain::checkTargetID(const llvm::opt::ArgList &DriverArgs) const {
   if (PTID.OptionalTargetID && !PTID.OptionalGPUArch) {
     getDriver().Diag(clang::diag::err_drv_bad_target_id)
         << *PTID.OptionalTargetID;
+    return PTID;
+  }
+
+  if (getTriple().getSubArch() != llvm::Triple::NoSubArch &&
+      PTID.OptionalGPUArch) {
+    llvm::AMDGPU::GPUKind Kind =
+        llvm::AMDGPU::parseArchAMDGCN(*PTID.OptionalGPUArch);
+    llvm::Triple::SubArchType KindSubArch =
+        static_cast<llvm::Triple::SubArchType>(llvm::AMDGPU::getSubArch(Kind));
+    if (getTriple().getSubArch() != KindSubArch &&
+        getTriple().getSubArch() !=
+            llvm::AMDGPU::getMajorSubArch(KindSubArch)) {
+      getDriver().Diag(clang::diag::err_target_unsupported_arch)
+          << *PTID.OptionalGPUArch << getTriple().getArchName();
+    }
   }
   return PTID;
 }
diff --git a/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
index 266f9859ac88f..c3aebe952c87e 100644
--- a/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp
@@ -7,8 +7,10 @@
 //===----------------------------------------------------------------------===//
 
 #include "AMDGPU.h"
+#include "clang/Basic/TargetID.h"
 #include "clang/Driver/Driver.h"
 #include "clang/Options/Options.h"
+#include "llvm/TargetParser/AMDGPUTargetParser.h"
 
 using namespace clang::driver;
 using namespace clang::driver::tools;
@@ -16,14 +18,27 @@ using namespace clang;
 using namespace llvm::opt;
 
 void AMDGPU::setArchNameInTriple(const Driver &D, const ArgList &Args,
-                                 types::ID InputType, llvm::Triple &Triple) {
-  StringRef MArch;
-  AMDGPU::getAMDGPUArchCPUFromArgs(Triple, Args, MArch);
+                                 BoundArch BA, types::ID InputType,
+                                 llvm::Triple &Triple) {
+  StringRef MArch = BA.ArchName;
+  if (MArch.empty())
+    AMDGPU::getAMDGPUArchCPUFromArgs(Triple, Args, MArch);
 
   if (MArch == "amdgcnspirv") {
     Triple.setArch(llvm::Triple::ArchType::spirv64);
     return;
   }
+
+  StringRef ProcName = getProcessorFromTargetID(Triple, MArch);
+  llvm::AMDGPU::GPUKind GK = llvm::AMDGPU::parseArchAMDGCN(ProcName);
+  if (GK == llvm::AMDGPU::GPUKind::GK_NONE) {
+    // Normalize legacy "amdgcn" triples to "amdgpu"
+    Triple.setArch(Triple.getArch(), Triple.getSubArch());
+    return;
+  }
+
+  Triple.setArch(Triple.getArch(), static_cast<llvm::Triple::SubArchType>(
+                                       llvm::AMDGPU::getSubArch(GK)));
 }
 
 void AMDGPU::getAMDGPUArchCPUFromArgs(const llvm::Triple &Triple,
diff --git a/clang/lib/Driver/ToolChains/Arch/AMDGPU.h b/clang/lib/Driver/ToolChains/Arch/AMDGPU.h
index 14605213b5ef7..0218dcffccf55 100644
--- a/clang/lib/Driver/ToolChains/Arch/AMDGPU.h
+++ b/clang/lib/Driver/ToolChains/Arch/AMDGPU.h
@@ -12,7 +12,6 @@
 #include "clang/Driver/ToolChain.h"
 #include "llvm/Option/ArgList.h"
 #include "llvm/Option/Option.h"
-#include <string>
 
 namespace clang {
 namespace driver {
@@ -20,7 +19,8 @@ namespace tools {
 namespace AMDGPU {
 
 void setArchNameInTriple(const Driver &D, const llvm::opt::ArgList &Args,
-                         types::ID InputType, llvm::Triple &Triple);
+                         BoundArch BA, types::ID InputType,
+                         llvm::Triple &Triple);
 void getAMDGPUArchCPUFromArgs(const llvm::Triple &Triple,
                               const llvm::opt::ArgList &Args,
                               llvm::StringRef &Arch);
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 65591a52e25fb..3855b4855555d 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -3147,32 +3147,66 @@ void tools::addOpenCLBuiltinsLib(const Driver &D, const llvm::Triple &TT,
   }
 
   // The OpenCL libraries are stored in <ResourceDir>/lib/<triple>.
-  SmallString<128> BasePath(D.ResourceDir);
-  llvm::sys::path::append(BasePath, "lib");
-  llvm::sys::path::append(BasePath, D.getTargetTriple());
-
-  // First check for a CPU-specific library in <ResourceDir>/lib/<triple>/<CPU>.
-  // TODO: Factor this into common logic that checks for valid subtargets.
-  if (const Arg *CPUArg = DriverArgs.getLastArg(options::OPT_mcpu_EQ)) {
-    StringRef CPU = CPUArg->getValue();
+  SmallString<128> ResourceLibPath(D.ResourceDir);
+  llvm::sys::path::append(ResourceLibPath, "lib");
+
+  StringRef CPU;
+  if (const Arg *CPUArg = DriverArgs.getLastArg(options::OPT_mcpu_EQ))
+    CPU = CPUArg->getValue();
+
+  // Helper to check for libclc.bc in a specific triple directory.
+  auto TryTriplePath = [&](StringRef TripleStr) -> bool {
+    SmallString<128> BasePath(ResourceLibPath);
+    llvm::sys::path::append(BasePath, TripleStr);
+
+    // First check for a CPU-specific library in
+    // <ResourceDir>/lib/<triple>/<CPU>.
+    // TODO: Factor this into common logic that checks for valid subtargets.
     if (!CPU.empty()) {
       SmallString<128> CPUPath(BasePath);
       llvm::sys::path::append(CPUPath, CPU, "libclc.bc");
       if (D.getVFS().exists(CPUPath)) {
         CC1Args.push_back("-mlink-builtin-bitcode");
         CC1Args.push_back(DriverArgs.MakeArgString(CPUPath));
-        return;
+        return true;
       }
     }
-  }
 
-  // Fall back to the generic library for the triple.
-  SmallString<128> GenericPath(BasePath);
-  llvm::sys::path::append(GenericPath, "libclc.bc");
-  if (D.getVFS().exists(GenericPath)) {
-    CC1Args.push_back("-mlink-builtin-bitcode");
-    CC1Args.push_back(DriverArgs.MakeArgString(GenericPath));
+    // Fall back to the generic library for the triple.
+    SmallString<128> GenericPath(BasePath);
+    llvm::sys::path::append(GenericPath, "libclc.bc");
+    if (D.getVFS().exists(GenericPath)) {
+      CC1Args.push_back("-mlink-builtin-bitcode");
+      CC1Args.push_back(DriverArgs.MakeArgString(GenericPath));
+      return true;
+    }
+    return false;
+  };
+
+  // First, try the exact target triple.
+  if (TryTriplePath(TT.str()))
     return;
+
+  llvm::Triple::SubArchType SubArch = TT.getSubArch();
+  if (TT.isAMDGCN() && SubArch != llvm::Triple::NoSubArch) {
+    // For AMDGPU with a subarch, try major version and generic fallbacks.
+    // 1. Specific subarch (e.g., amdgpu9.0a-amd-amdhsa)
+    // 2. Major subarch (e.g., amdgpu9-amd-amdhsa)
+    // 3. Generic triple (e.g., amdgpu-amd-amdhsa)
+    llvm::Triple::SubArchType MajorSubArch =
+        llvm::AMDGPU::getMajorSubArch(SubArch);
+    if (MajorSubArch != SubArch) {
+      llvm::Triple MajorTT(TT);
+      MajorTT.setArch(TT.getArch(), MajorSubArch);
+      if (TryTriplePath(MajorTT.str()))
+        return;
+    }
+
+    // Try generic amdgpu triple without any subarch.
+    llvm::Triple NoSubArchTT(TT);
+    NoSubArchTT.setArch(TT.getArch(), llvm::Triple::NoSubArch);
+    if (TryTriplePath(NoSubArchTT.str()))
+      return;
   }
 
   D.Diag(diag::err_drv_libclc_not_found) << "libclc.bc";
diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp
index 139a7a6e90703..e807bbf2275fb 100644
--- a/clang/lib/Driver/ToolChains/HIPAMD.cpp
+++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp
@@ -383,6 +383,9 @@ HIPAMDToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs,
       return {};
     }
 
+    StringRef GpuArch = getGPUArch(DriverArgs);
+    assert(!GpuArch.empty() && "Must have an explicit GPU arch.");
+
     // Add common device libraries like ocml etc.
     for (auto N : getCommonDeviceLibNames(DriverArgs, BA.ArchName, GpuArch,
                                           DeviceOffloadingKind))
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 001f9f3400a06..e59cdaaf78f37 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -7,6 +7,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "HIPUtility.h"
+#include "clang/Basic/OffloadArch.h"
+#include "clang/Basic/TargetID.h"
 #include "clang/Driver/CommonArgs.h"
 #include "clang/Driver/Compilation.h"
 #include "clang/Options/Options.h"
@@ -39,8 +41,16 @@ const unsigned HIPCodeObjectAlign = 4096;
 } // namespace
 
 // Constructs a triple string for clang offload bundler.
-static std::string normalizeForBundler(const llvm::Triple &T,
-                                       bool HasTargetID) {
+static std::string normalizeForBundler(const llvm::Triple &OrigT,
+                                       StringRef BoundArch) {
+  llvm::Triple T(OrigT);
+  bool HasTargetID = !BoundArch.empty();
+  if (T.getSubArch() == llvm::Triple::NoSubArch && HasTargetID) {
+    llvm::Triple::SubArchType SubArch = getOffloadArchSubArch(
+        StringToOffloadArch(getProcessorFromTargetID(T, BoundArch)));
+    T.setArch(T.getArch(), SubArch);
+  }
+
   return HasTargetID ? (T.getArchName() + "-" + T.getVendorName() + "-" +
                         T.getOSName() + "-" + T.getEnvironmentName())
                            .str()
@@ -311,10 +321,9 @@ void HIP::constructHIPFatbinCommand(Compilation &C, const JobAction &JA,
     BoundArch BA = A->getOffloadingArch();
     BundlerTargetArg += ',' + OffloadKind + '-';
     if (BA.ArchName == "amdgcnspirv")
-      BundlerTargetArg +=
-          normalizeForBundler(llvm::Triple("spirv64-amd-amdhsa"), true);
+      BundlerTargetArg += "spirv64-amd-amdhsa-";
     else
-      BundlerTargetArg += normalizeForBundler(InputTriple, !BA.empty());
+      BundlerTargetArg += normalizeForBundler(InputTriple, BA.ArchName);
     if (BA)
       BundlerTargetArg += '-' + BA.ArchName.str();
   }
diff --git a/clang/test/CodeGen/amdgpu-builtin-is-invocable-subarch.c b/clang/test/CodeGen/amdgpu-builtin-is-invocable-subarch.c
new file mode 100644
index 0000000000000..8483cf84d3c7a
--- /dev/null
+++ b/clang/test/CodeGen/amdgpu-builtin-is-invocable-subarch.c
@@ -0,0 +1,37 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --version 6
+// RUN: %clang_cc1 -triple amdgpu9.00-amd-amdhsa -emit-llvm %s -o - | FileCheck --check-prefix=AMDGPU900 %s
+// RUN: %clang_cc1 -triple amdgpu10.10-amd-amdhsa -emit-llvm %s -o - | FileCheck --check-prefix=AMDGPU1010 %s
+
+// Test that __builtin_amdgcn_is_invocable resolves from the triple's subarch
+// alone, with no -target-cpu:
+//    1) for amdgpu9.00 (gfx900) we emit an empty kernel (lacks feature)
+//    2) for amdgpu10.10 (gfx1010) we emit a call to trap (has feature)
+// AMDGPU900-LABEL: define dso_local void @foo(
+// AMDGPU900-SAME: ) #[[ATTR0:[0-9]+]] {
+// AMDGPU900-NEXT:  [[ENTRY:.*:]]
+// AMDGPU900-NEXT:    ret void
+//
+// AMDGPU1010-LABEL: define dso_local void @foo(
+// AMDGPU1010-SAME: ) #[[ATTR0:[0-9]+]] {
+// AMDGPU1010-NEXT:  [[ENTRY:.*:]]
+// AMDGPU1010-NEXT:    call void @llvm.trap()
+// AMDGPU1010-NEXT:    ret void
+//
+void foo() {
+    if (__builtin_amdgcn_is_invocable(__builtin_amdgcn_permlanex16) ||
+        (__builtin_amdgcn_is_invocable(__builtin_amdgcn_permlanex16_var)) ||
+        (__builtin_amdgcn_is_invocable(__builtin_amdgcn_ashr_pk_i8_i32)))
+        return __builtin_trap();
+}
+//.
+// AMDGPU900: attributes #[[ATTR0]] = { convergent noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
+//.
+// AMDGPU1010: attributes #[[ATTR0]] = { convergent noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
+// AMDGPU1010: attributes #[[ATTR1:[0-9]+]] = { cold noreturn nounwind memory(inaccessiblemem: write) }
+//.
+// AMDGPU900: [[META0:![0-9]+]] = !{i32 1, !"amdhsa_code_object_version", i32 600}
+// AMDGPU900: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
+//.
+// AMDGPU1010: [[META0:![0-9]+]] = !{i32 1, !"amdhsa_code_object_version", i32 600}
+// AMDGPU1010: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
+//.
diff --git a/clang/test/CodeGen/amdgpu-builtin-processor-is-subarch.c b/clang/test/CodeGen/amdgpu-builtin-processor-is-subarch.c
new file mode 100644
index 0000000000000..8e74d3132a9bc
--- /dev/null
+++ b/clang/test/CodeGen/amdgpu-builtin-processor-is-subarch.c
@@ -0,0 +1,48 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --version 6
+// RUN: %clang_cc1 -triple amdgpu9.00-amd-amdhsa -emit-llvm %s -o - | FileCheck --check-prefix=AMDGPU900 %s
+// RUN: %clang_cc1 -triple amdgpu9-amd-amdhsa -emit-llvm %s -o - | FileCheck --check-prefix=AMDGPU9_NOCPU %s
+// RUN: %clang_cc1 -triple amdgpu9-amd-amdhsa -target-cpu gfx900 -emit-llvm %s -o - | FileCheck --check-prefix=AMDGPU900_CPU %s
+
+// Test that __builtin_amdgcn_processor_is works when the target is specified
+// only by the subarch without -target-cpu.
+
+// AMDGPU900-LABEL: define dso_local void @gfx900_name(
+// AMDGPU900-SAME: ) #[[ATTR0:[0-9]+]] {
+// AMDGPU900-NEXT:  [[ENTRY:.*:]]
+// AMDGPU900-NEXT:    call void @llvm.trap()
+// AMDGPU900-NEXT:    ret void
+//
+// AMDGPU9_NOCPU-LABEL: define dso_local void @gfx900_name(
+// AMDGPU9_NOCPU-SAME: ) #[[ATTR0:[0-9]+]] {
+// AMDGPU9_NOCPU-NEXT:  [[ENTRY:.*:]]
+// AMDGPU9_NOCPU-NEXT:    ret void
+//
+// AMDGPU900_CPU-LABEL: define dso_local void @gfx900_name(
+// AMDGPU900_CPU-SAME: ) #[[ATTR0:[0-9]+]] {
+// AMDGPU900_CPU-NEXT:  [[ENTRY:.*:]]
+// AMDGPU900_CPU-NEXT:    call void @llvm.trap()
+// AMDGPU900_CPU-NEXT:    ret void
+//
+void gfx900_name() {
+    if (__builtin_amdgcn_processor_is("gfx900"))
+        return __builtin_trap();
+}
+
+//.
+// AMDGPU900: attributes #[[ATTR0]] = { convergent noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
+// AMDGPU900: attributes #[[ATTR1:[0-9]+]] = { cold noreturn nounwind memory(inaccessiblemem: write) }
+//.
+// AMDGPU9_NOCPU: attributes #[[ATTR0]] = { convergent noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
+//.
+// AMDGPU900_CPU: attributes #[[ATTR0]] = { convergent noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="gfx900" }
+// AMDGPU900_CPU: attributes #[[ATTR1:[0-9]+]] = { cold noreturn nounwind memory(inaccessiblemem: write) }
+//.
+// AMDGPU900: [[META0:![0-9]+]] = !{i32 1, !"amdhsa_code_object_version", i32 600}
+// AMDGPU900: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
+//.
+// AMDGPU9_NOCPU: [[META0:![0-9]+]] = !{i32 1, !"amdhsa_code_object_version", i32 600}
+// AMDGPU9_NOCPU: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
+//.
+// AMDGPU900_CPU: [[META0:![0-9]+]] = !{i32 1, !"amdhsa_code_object_version", i32 600}
+// AMDGPU900_CPU: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
+//.
diff --git a/clang/test/CodeGenOpenCL/amdgpu-wavefront-size-from-subarch.cl b/clang/test/CodeGenOpenCL/amdgpu-wavefront-size-from-subarch.cl
new file mode 100644
index 0000000000000..576569592a69d
--- /dev/null
+++ b/clang/test/CodeGenOpenCL/amdgpu-wavefront-size-from-subarch.cl
@@ -0,0 +1,37 @@
+// REQUIRES: amdgpu-registered-target
+
+// Check that the default wavefront size is determined by the triple's subarch
+// alone, with no -target-cpu. Clang only emits a wavefrontsize target-feature
+// when it differs from the target default, so passing -target-feature
+// +wavefrontsizeN shows up in the IR target-features attribute exactly when N is
+// NOT the subarch default. gfx9 defaults to wave64; gfx10/gfx11/gfx12 default to
+// wave32.
+
+// gfx9 default is wave64: +wavefrontsize64 matches the default and is elided,
+// while +wavefrontsize32 is rejected because gfx9 is wave64 only.
+// RUN: %clang_cc1 -triple amdgpu9.00 -target-feature +wavefrontsize64 -emit-llvm -o - %s | FileCheck --check-prefix=NO-DELTA %s
+// RUN: not %clang_cc1 -triple amdgpu9.00 -target-feature +wavefrontsize32 -emit-llvm -o /dev/null %s 2>&1 | FileCheck --check-prefix=ERR-WAVE32 %s
+// The gfx9 major-family subarch behaves the same as its members.
+// RUN: %clang_cc1 -triple amdgpu9 -target-feature +wavefrontsize64 -emit-llvm -o - %s | FileCheck --check-prefix=NO-DELTA %s
+
+// gfx11 default is wave32: +wavefrontsize64 is a delta and is emitted, while
+// +wavefrontsize32 matches the default and is elided.
+// RUN: %clang_cc1 -triple amdgpu11.00 -target-feature +wavefrontsize64 -emit-llvm -o - %s | FileCheck --check-prefix=WAVE64-DELTA %s
+// RUN: %clang_cc1 -triple amdgpu11.00 -target-feature +wavefrontsize32 -emit-llvm -o - %s | FileCheck --check-prefix=NO-DELTA %s
+// RUN: %clang_cc1 -triple amdgpu11 -target-feature +wavefrontsize64 -emit-llvm -o - %s | FileCheck --check-prefix=WAVE64-DELTA %s
+
+// gfx1250 is wave32 only: +wavefrontsize64 is rejected.
+// RUN: not %clang_cc1 -triple amdgpu12.50 -target-feature +wavefrontsize64 -emit-llvm -o /dev/null %s 2>&1 | FileCheck --check-prefix=ERR-WAVE64 %s
+
+// A amdgpu triple with no subarch and no -target-cpu has no default wave size,
+// so both overrides are accepted and emitted verbatim.
+// RUN: %clang_cc1 -triple amdgpu -target-feature +wavefrontsize64 -emit-llvm -o - %s | FileCheck --check-prefix=WAVE64-DELTA %s
+// RUN: %clang_cc1 -triple amdgpu -target-feature +wavefrontsize32 -emit-llvm -o - %s | FileCheck --check-prefix=WAVE32-DELTA %s
+
+kernel void foo() {}
+
+// NO-DELTA-NOT: "target-features"
+// WAVE64-DELTA: "target-features"="{{[^"]*}}+wavefrontsize64{{[^"]*}}"
+// WAVE32-DELTA: "target-features"="{{[^"]*}}+wavefrontsize32{{[^"]*}}"
+// ERR-WAVE32: error: option '+wavefrontsize32' cannot be specified on this target
+// ERR-WAVE64: error: option '+wavefrontsize64' cannot be specified on this target
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_major_version/lib/amdgpu9-amd-amdhsa-llvm/libclc.bc b/clang/test/Driver/Inputs/resource_dir_amdgpu_major_version/lib/amdgpu9-amd-amdhsa-llvm/libclc.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclang_rt.profile.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclang_rt.profile.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclang_rt.ubsan_minimal.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclang_rt.ubsan_minimal.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclc.bc b/clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclc.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libflang_rt.runtime.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libflang_rt.runtime.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/gfx90a/libclc.bc b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/gfx90a/libclc.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclang_rt.profile.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclang_rt.profile.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclang_rt.ubsan_minimal.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclang_rt.ubsan_minimal.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclc.bc b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclc.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libflang_rt.runtime.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libflang_rt.runtime.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/gfx90a/libclc.bc b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/gfx90a/libclc.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libclang_rt.profile.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libclang_rt.profile.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libclang_rt.ubsan_minimal.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libclang_rt.ubsan_minimal.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libclc.bc b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libclc.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libflang_rt.runtime.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa/libflang_rt.runtime.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libclang_rt.profile.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libclang_rt.profile.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libclang_rt.ubsan_minimal.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libclang_rt.ubsan_minimal.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libclc.bc b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libclc.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libflang_rt.runtime.a b/clang/test/Driver/Inputs/resource_dir_amdgpu_triples/lib/amdgpu10.30-amd-amdhsa/libflang_rt.runtime.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/amdgpu-hip-system-arch.c b/clang/test/Driver/amdgpu-hip-system-arch.c
index 972105143debf..a6e298cd37b20 100644
--- a/clang/test/Driver/amdgpu-hip-system-arch.c
+++ b/clang/test/Driver/amdgpu-hip-system-arch.c
@@ -29,7 +29,7 @@
 // RUN:   | FileCheck %s --check-prefix=ARCH-GFX906
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib --offload-new-driver --offload-arch=native --amdgpu-arch-tool=%t/amdgpu_arch_gfx906 -x hip %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=ARCH-GFX906
-// ARCH-GFX906: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-target-cpu" "gfx906"
+// ARCH-GFX906: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"{{.*}}"-target-cpu" "gfx906"
 
 // case when CLANG_TOOLCHAIN_PROGRAM_TIMEOUT is malformed.
 // RUN: env CLANG_TOOLCHAIN_PROGRAM_TIMEOUT=foo \
diff --git a/clang/test/Driver/amdgpu-multilib.yaml b/clang/test/Driver/amdgpu-multilib.yaml
index 8c5714aa29c25..d3913a8e0269e 100644
--- a/clang/test/Driver/amdgpu-multilib.yaml
+++ b/clang/test/Driver/amdgpu-multilib.yaml
@@ -4,7 +4,7 @@
 # RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -x c %s -### -o /dev/null 2>&1 \
 # RUN:     --target=amdgcn-amd-amdhsa -mcpu=gfx1030 -fmultilib-flag=debug -nogpulib \
 # RUN:   | FileCheck --check-prefix=CHECK-DEBUG %s
-# CHECK-DEBUG:      "-cc1" "-triple" "amdgcn-amd-amdhsa"
+# CHECK-DEBUG:      "-cc1" "-triple" "amdgpu10.30-amd-amdhsa"
 # CHECK-DEBUG:      "-L{{[^"]*}}/debug"
 
 # Default behavior where no variant path is prepended.
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index 5171963e48e37..9d2d4a27bf334 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -91,29 +91,29 @@
 // RUN:   | FileCheck -check-prefixes=ERRSANCOV %s
 
 
-// NOTSUPPORTED-DAG: warning: ignoring 'leak' in '-fsanitize=leak' option as it is not currently supported for target 'amdgcn-amd-amdhsa'
-// INVALIDCOMBINATION1: warning: ignoring 'fuzzer' in '-fsanitize=address,fuzzer' option as it is not currently supported for target 'amdgcn-amd-amdhsa' [-Woption-ignored]
-// INVALIDCOMBINATION2: warning: ignoring 'fuzzer' in '-fsanitize=fuzzer,address' option as it is not currently supported for target 'amdgcn-amd-amdhsa' [-Woption-ignored]
+// NOTSUPPORTED-DAG: warning: ignoring 'leak' in '-fsanitize=leak' option as it is not currently supported for target 'amdgpu-amd-amdhsa'
+// INVALIDCOMBINATION1: warning: ignoring 'fuzzer' in '-fsanitize=address,fuzzer' option as it is not currently supported for target 'amdgpu-amd-amdhsa' [-Woption-ignored]
+// INVALIDCOMBINATION2: warning: ignoring 'fuzzer' in '-fsanitize=fuzzer,address' option as it is not currently supported for target 'amdgpu-amd-amdhsa' [-Woption-ignored]
 
 // FAIL-DAG: error: cannot find ROCm device library for ABI version 5; provide its path via '--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build without ROCm device library
 
 // NOXNACK: warning: ignoring '-fsanitize=address' option for offload arch 'gfx908' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead
 // XNACKNEG: warning: ignoring '-fsanitize=address' option for offload arch 'gfx908:xnack-' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead
 
-// HOSTSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "--offload-targets=amdgcn-amd-amdhsa".* "-x" "c".*}}
-// HOSTSANCOMBINATION: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address,fuzzer,fuzzer-no-link".* "--offload-targets=amdgcn-amd-amdhsa".* "-x" "c".*}}
-// HOSTSANCOMBINATION2: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address,fuzzer,fuzzer-no-link,leak".* "--offload-targets=amdgcn-amd-amdhsa".* "-x" "c".*}}
+// HOSTSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "--offload-targets=amdgpu-amd-amdhsa".* "-x" "c".*}}
+// HOSTSANCOMBINATION: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address,fuzzer,fuzzer-no-link".* "--offload-targets=amdgpu-amd-amdhsa".* "-x" "c".*}}
+// HOSTSANCOMBINATION2: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address,fuzzer,fuzzer-no-link,leak".* "--offload-targets=amdgpu-amd-amdhsa".* "-x" "c".*}}
 
-// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc" "-flto=full" "-flto-unit".* "-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-builtin-bitcode" "[^"]*ockl.bc".* "-target-cpu" "(gfx908|gfx900|gfx1250|gfx1251)".* "-fopenmp".* "-fsanitize=address".* "-x" "c".*}}
-// NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc" "-flto=full" "-flto-unit".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-x" "c".*}}
+// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgpu.+-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc" "-flto=full" "-flto-unit".* "-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-builtin-bitcode" "[^"]*ockl.bc".* "-target-cpu" "(gfx908|gfx900|gfx1250|gfx1251)".* "-fopenmp".* "-fsanitize=address".* "-x" "c".*}}
+// NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgpu.+-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc" "-flto=full" "-flto-unit".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-x" "c".*}}
 
-// SAN: {{"[^"]*llvm-offload-binary[^"]*" "-o".* "--image=file=.*.o,triple=amdgcn-amd-amdhsa,arch=(gfx908|gfx1250|gfx1251)(:xnack\-|:xnack\+)?,kind=openmp(,feature=(\-xnack|\+xnack))?"}}
-// SAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "--offload-targets=amdgcn-amd-amdhsa".* "-x" "ir".*}}
+// SAN: {{"[^"]*llvm-offload-binary[^"]*" "-o".* "--image=file=.*.o,triple=amdgpu.*-amd-amdhsa,arch=(gfx908|gfx1250|gfx1251)(:xnack\-|:xnack\+)?,kind=openmp(,feature=(\-xnack|\+xnack))?"}}
+// SAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "--offload-targets=amdgpu-amd-amdhsa".* "-x" "ir".*}}
 // SAN: {{"[^"]*clang-linker-wrapper[^"]*".* "--host-triple=x86_64-unknown-linux-gnu".* "--linker-path=[^"]*".* "--whole-archive" "[^"]*(libclang_rt.asan_static.a|libclang_rt.asan_static-x86_64.a)".* "--whole-archive" "[^"]*(libclang_rt.asan.a|libclang_rt.asan-x86_64.a)".*}}
 
-// UNSUPPORTEDERROR: error: 'leak' in '-fsanitize=leak' option is not currently supported for target 'amdgcn-amd-amdhsa'
+// UNSUPPORTEDERROR: error: 'leak' in '-fsanitize=leak' option is not currently supported for target 'amdgpu-amd-amdhsa'
 // XNACKERROR: error: '-fsanitize=address' option for offload arch 'gfx908:xnack-' is not currently supported there. Use it with an offload arch containing 'xnack+' instead
-// INVALIDCOMBINATIONERROR: error: 'fuzzer' in '-fsanitize=fuzzer,address' option is not currently supported for target 'amdgcn-amd-amdhsa'
+// INVALIDCOMBINATIONERROR: error: 'fuzzer' in '-fsanitize=fuzzer,address' option is not currently supported for target 'amdgpu-amd-amdhsa'
 
-// WARNSANCOV: warning: ignoring '-fsanitize-coverage=inline-bool-flag' option as it is not currently supported for target 'amdgcn-amd-amdhsa'
-// ERRSANCOV: error: '-fsanitize-coverage-stack-depth-callback-min=42' option is not currently supported for target 'amdgcn-amd-amdhsa'
+// WARNSANCOV: warning: ignoring '-fsanitize-coverage=inline-bool-flag' option as it is not currently supported for target 'amdgpu-amd-amdhsa'
+// ERRSANCOV: error: '-fsanitize-coverage-stack-depth-callback-min=42' option is not currently supported for target 'amdgpu-amd-amdhsa'
diff --git a/clang/test/Driver/amdgpu-openmp-system-arch-fail.c b/clang/test/Driver/amdgpu-openmp-system-arch-fail.c
index 8973d66afbae4..78512cf45d1b5 100644
--- a/clang/test/Driver/amdgpu-openmp-system-arch-fail.c
+++ b/clang/test/Driver/amdgpu-openmp-system-arch-fail.c
@@ -13,9 +13,9 @@
 // case when amdgpu_arch returns nothing or fails
 // RUN:   not %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp -fopenmp-targets=amdgcn-amd-amdhsa -nogpulib --amdgpu-arch-tool=%t/amdgpu_arch_fail %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=NO-OUTPUT-ERROR
-// NO-OUTPUT-ERROR: error: cannot determine amdgcn architecture{{.*}}; consider passing it via '--offload-arch'
+// NO-OUTPUT-ERROR: error: cannot determine amdgpu architecture{{.*}}; consider passing it via '--offload-arch'
 
 // case when amdgpu_arch does not return anything with successful execution
 // RUN:   not %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp -fopenmp-targets=amdgcn-amd-amdhsa -nogpulib --amdgpu-arch-tool=%t/amdgpu_arch_empty %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=EMPTY-OUTPUT
-// EMPTY-OUTPUT: error: cannot determine amdgcn architecture: No AMD GPU detected in the system; consider passing it via '--offload-arch'
+// EMPTY-OUTPUT: error: cannot determine amdgpu architecture: No AMD GPU detected in the system; consider passing it via '--offload-arch'
diff --git a/clang/test/Driver/amdgpu-openmp-targets-triple-compat.c b/clang/test/Driver/amdgpu-openmp-targets-triple-compat.c
new file mode 100644
index 0000000000000..075ee1d2c6067
--- /dev/null
+++ b/clang/test/Driver/amdgpu-openmp-targets-triple-compat.c
@@ -0,0 +1,39 @@
+/// Check amdgpu triples with a subarch respect -Xopenmp-target
+// RUN:   %clang -### -no-canonical-prefixes -nogpulib -fopenmp=libomp -fopenmp-targets=amdgpu9-amd-amdhsa -Xopenmp-target=amdgpu9-amd-amdhsa -ffinite-math-only %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=CHECK,GFX9 %s
+
+// RUN:   %clang -### -no-canonical-prefixes -nogpulib -fopenmp=libomp -fopenmp-targets=amdgpu9-amd-amdhsa -Xopenmp-target=amdgpu-amd-amdhsa -ffinite-math-only %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=CHECK,GFX9 %s
+
+// RUN:   %clang -### -no-canonical-prefixes -nogpulib -fopenmp=libomp -fopenmp-targets=amdgpu9.00-amd-amdhsa -Xopenmp-target=amdgpu9-amd-amdhsa -ffinite-math-only %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=CHECK,GFX900 %s
+
+
+// Check the same, with -Xarch instead of -Xopenmp-target
+// RUN:   %clang -### -no-canonical-prefixes -nogpulib -fopenmp=libomp -fopenmp-targets=amdgpu9-amd-amdhsa -Xarch_amdgpu9 -ffinite-math-only %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=CHECK,GFX9 %s
+
+// RUN:   %clang -### -no-canonical-prefixes -nogpulib -fopenmp=libomp -fopenmp-targets=amdgpu9-amd-amdhsa -Xarch_amdgpu -ffinite-math-only %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=CHECK,GFX9 %s
+
+// RUN:   %clang -### -no-canonical-prefixes -nogpulib -fopenmp=libomp -fopenmp-targets=amdgpu9.00-amd-amdhsa -Xarch_amdgpu9 -ffinite-math-only %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=CHECK,GFX900 %s
+
+
+// GFX9: clang{{.*}} "-cc1" "-triple" "amdgpu9-amd-amdhsa"
+// GFX900: clang{{.*}} "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
+
+// CHECK-SAME: "-ffinite-math-only"
+// CHECK-SAME: "-fopenmp-is-target-device"
+
+/// ###########################################################################
+
+/// Check amdgpu triples with a subarch do not forward to an incompatible subarch
+// RUN:   %clang -### -no-canonical-prefixes -nogpulib -fopenmp=libomp -fopenmp-targets=amdgpu9.00-amd-amdhsa -Xopenmp-target=amdgpu9.08-amd-amdhsa -ffinite-math-only %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=MISMATCH-SUBARCH %s
+
+// RUN:   %clang -### -no-canonical-prefixes -nogpulib -fopenmp=libomp -fopenmp-targets=amdgpu10.1-amd-amdhsa -Xopenmp-target=amdgpu9.08-amd-amdhsa -ffinite-math-only %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=MISMATCH-SUBARCH %s
+
+// MISMATCH-SUBARCH-NOT: "-ffinite-math-only"
+
diff --git a/clang/test/Driver/amdgpu-openmp-toolchain.c b/clang/test/Driver/amdgpu-openmp-toolchain.c
index 4de585e7c6238..2461587cbf5aa 100644
--- a/clang/test/Driver/amdgpu-openmp-toolchain.c
+++ b/clang/test/Driver/amdgpu-openmp-toolchain.c
@@ -7,9 +7,9 @@
 
 // verify the tools invocations
 // CHECK: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-emit-llvm-bc"{{.*}}"-x" "c"
-// CHECK: "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}}"-flto=full" "-flto-unit"{{.*}}"-target-cpu" "gfx906"
+// CHECK: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}}"-flto=full" "-flto-unit"{{.*}}"-target-cpu" "gfx906"
 // CHECK: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-emit-obj"
-// CHECK: clang-linker-wrapper{{.*}}"--device-compiler=amdgcn-amd-amdhsa=-flto=full"{{.*}} "-o" "a.out"
+// CHECK: clang-linker-wrapper{{.*}}"--device-compiler=amdgpu-amd-amdhsa=-flto=full"{{.*}} "-o" "a.out"
 
 // RUN:   %clang -ccc-print-phases --target=x86_64-unknown-linux-gnu -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx906 %s 2>&1 \
 // RUN:   | FileCheck --check-prefix=CHECK-PHASES %s
@@ -19,9 +19,9 @@
 // CHECK-PHASES: 3: input, "[[INPUT]]", c, (device-openmp, gfx906)
 // CHECK-PHASES: 4: preprocessor, {3}, cpp-output, (device-openmp, gfx906)
 // CHECK-PHASES: 5: compiler, {4}, ir, (device-openmp, gfx906)
-// CHECK-PHASES: 6: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (amdgcn-amd-amdhsa:gfx906)" {5}, ir
+// CHECK-PHASES: 6: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (amdgpu-amd-amdhsa:gfx906)" {5}, ir
 // CHECK-PHASES: 7: backend, {6}, lto-bc, (device-openmp, gfx906)
-// CHECK-PHASES: 8: offload, "device-openmp (amdgcn-amd-amdhsa:gfx906)" {7}, lto-bc
+// CHECK-PHASES: 8: offload, "device-openmp (amdgpu-amd-amdhsa:gfx906)" {7}, lto-bc
 // CHECK-PHASES: 9: llvm-offload-binary, {8}, image, (device-openmp)
 // CHECK-PHASES: 10: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (x86_64-unknown-linux-gnu)" {9}, ir
 // CHECK-PHASES: 11: backend, {10}, assembler, (host-openmp)
@@ -31,7 +31,7 @@
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -ccc-print-bindings -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-BINDINGS
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -ccc-print-bindings -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa --offload-arch=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-BINDINGS
 // CHECK-BINDINGS: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HOST_BC:.+]]"
-// CHECK-BINDINGS: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[DEVICE_BC:.+]]"
+// CHECK-BINDINGS: "amdgpu8.03-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[DEVICE_BC:.+]]"
 // CHECK-BINDINGS: "x86_64-unknown-linux-gnu" - "Offload::Packager", inputs: ["[[DEVICE_BC]]"], output: "[[BINARY:.+]]"
 // CHECK-BINDINGS: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[HOST_BC]]", "[[BINARY]]"], output: "[[HOST_OBJ:.+]]"
 // CHECK-BINDINGS: "x86_64-unknown-linux-gnu" - "Offload::Linker", inputs: ["[[HOST_OBJ]]"], output: "a.out"
@@ -40,16 +40,16 @@
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -ccc-print-bindings -save-temps -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa --offload-arch=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-BINDINGS-TEMPS
 // CHECK-BINDINGS-TEMPS: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HOST_PP:.+]]"
 // CHECK-BINDINGS-TEMPS: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[HOST_PP]]"], output: "[[HOST_BC:.+]]"
-// CHECK-BINDINGS-TEMPS: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[DEVICE_PP:.+]]"
-// CHECK-BINDINGS-TEMPS: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[DEVICE_PP]]", "[[HOST_BC]]"], output: "[[DEVICE_TEMP_BC:.+]]"
-// CHECK-BINDINGS-TEMPS: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[DEVICE_TEMP_BC]]"], output: "[[DEVICE_BC:.+]]"
+// CHECK-BINDINGS-TEMPS: "amdgpu8.03-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[DEVICE_PP:.+]]"
+// CHECK-BINDINGS-TEMPS: "amdgpu8.03-amd-amdhsa" - "clang", inputs: ["[[DEVICE_PP]]", "[[HOST_BC]]"], output: "[[DEVICE_TEMP_BC:.+]]"
+// CHECK-BINDINGS-TEMPS: "amdgpu8.03-amd-amdhsa" - "clang", inputs: ["[[DEVICE_TEMP_BC]]"], output: "[[DEVICE_BC:.+]]"
 // CHECK-BINDINGS-TEMPS: "x86_64-unknown-linux-gnu" - "Offload::Packager", inputs: ["[[DEVICE_BC]]"], output: "[[DEVICE_IMAGE:.+]]"
 // CHECK-BINDINGS-TEMPS: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[HOST_BC]]", "[[DEVICE_IMAGE]]"], output: "[[HOST_ASM:.+]]"
 // CHECK-BINDINGS-TEMPS: "x86_64-unknown-linux-gnu" - "clang::as", inputs: ["[[HOST_ASM]]"], output: "[[HOST_OBJ:.+]]"
 // CHECK-BINDINGS-TEMPS: "x86_64-unknown-linux-gnu" - "Offload::Linker", inputs: ["[[HOST_OBJ]]"], output: "a.out"
 
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -emit-llvm -S -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-EMIT-LLVM-IR
-// CHECK-EMIT-LLVM-IR: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-emit-llvm"
+// CHECK-EMIT-LLVM-IR: "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"{{.*}}"-emit-llvm"
 
 // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx803 \
 // RUN:   --no-offloadlib --offloadlib --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode %s  2>&1 | \
@@ -63,7 +63,7 @@
 
 // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a:sramecc-:xnack+ \
 // RUN:   -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-TARGET-ID
-// CHECK-TARGET-ID: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a" "-target-feature" "+xnack" "-target-feature" "-sramecc"
+// CHECK-TARGET-ID: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a" "-target-feature" "+xnack" "-target-feature" "-sramecc"
 // CHECK-TARGET-ID: llvm-offload-binary{{.*}}arch=gfx90a:sramecc-:xnack+,kind=openmp
 
 // RUN: not %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a,gfx90a:xnack+ \
@@ -72,11 +72,11 @@
 
 // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a \
 // RUN:   -O3 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-OPT
-// CHECK-OPT: clang-linker-wrapper{{.*}}"--device-compiler=amdgcn-amd-amdhsa=-O3"
+// CHECK-OPT: clang-linker-wrapper{{.*}}"--device-compiler=amdgpu-amd-amdhsa=-O3"
 
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -emit-llvm -S -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARN-ATOMIC
 // CHECK-WARN-ATOMIC-NOT: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-Werror=atomic-alignment"
-// CHECK-WARN-ATOMIC: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-Werror=atomic-alignment"
+// CHECK-WARN-ATOMIC: "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"{{.*}}"-Werror=atomic-alignment"
 
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -emit-llvm -S -fopenmp --offload-arch=gfx803 \
 // RUN:     -stdlib=libc++ -nogpulib %s 2>&1 | FileCheck %s --check-prefix=LIBCXX
@@ -84,4 +84,4 @@
 
 // RUN: %clang -### -target x86_64-pc-linux-gnu -nogpulib  -fopenmp --offload-arch=gfx90a \
 // RUN:   -ftime-report %s 2>&1 | FileCheck %s --check-prefix=CHECK-TIME-REPORT
-// CHECK-TIME-REPORT: clang-linker-wrapper{{.*}}"--device-compiler=amdgcn-amd-amdhsa=-ftime-report"
+// CHECK-TIME-REPORT: clang-linker-wrapper{{.*}}"--device-compiler=amdgpu-amd-amdhsa=-ftime-report"
diff --git a/clang/test/Driver/amdgpu-subarch-diag.hip b/clang/test/Driver/amdgpu-subarch-diag.hip
new file mode 100644
index 0000000000000..e83cd619bdff7
--- /dev/null
+++ b/clang/test/Driver/amdgpu-subarch-diag.hip
@@ -0,0 +1,13 @@
+// RUN: not %clang -### --target=x86_64-pc-linux-gnu --offload-targets=amdgpu9-amd-amdhsa --offload-arch=gfx1030 -nogpulib -nogpuinc -c %s 2>&1 | FileCheck -check-prefix=ERR0 %s
+
+// RUN: not %clang -### --target=x86_64-pc-linux-gnu --offload-targets=amdgpu9.00-amd-amdhsa --offload-arch=gfx902 -nogpulib -nogpuinc -c %s 2>&1 | FileCheck -check-prefix=ERR1 %s
+
+// RUN: %clang -### --target=x86_64-pc-linux-gnu --offload-targets=amdgpu9-amd-amdhsa --offload-arch=gfx900 -nogpulib -nogpuinc -c %s 2>&1 | FileCheck --allow-empty -check-prefix=NO-ERR %s
+// RUN: %clang -### --target=x86_64-pc-linux-gnu --offload-targets=amdgpu9-amd-amdhsa -nogpulib -nogpuinc -c %s 2>&1 | FileCheck --allow-empty -check-prefix=NO-ERR %s
+// RUN: %clang -### --target=x86_64-pc-linux-gnu --offload-targets=amdgpu9-amd-amdhsa --offload-arch=gfx902 -nogpulib -nogpuinc -c %s 2>&1 | FileCheck --allow-empty -check-prefix=NO-ERR %s
+
+
+// ERR0: error: the target architecture 'gfx1030' is not supported by the target 'amdgpu9'
+// ERR1: error: the target architecture 'gfx902' is not supported by the target 'amdgpu9.00'
+
+// NO-ERR: {{^$}}
diff --git a/clang/test/Driver/amdgpu-subarch-march-diag.cl b/clang/test/Driver/amdgpu-subarch-march-diag.cl
new file mode 100644
index 0000000000000..f9adf321a06d2
--- /dev/null
+++ b/clang/test/Driver/amdgpu-subarch-march-diag.cl
@@ -0,0 +1,12 @@
+// Check that -mcpu with a mismatched subarch from the triple are rejected
+// RUN: not %clang -### --target=amdgpu7-amd-amdhsa -mcpu=gfx600 -nogpulib -c %s 2>&1 | FileCheck -check-prefix=ERR0 %s
+// RUN: not %clang -### --target=amdgpu6.00-amd-amdhsa -mcpu=gfx601 -nogpulib -c %s 2>&1 | FileCheck -check-prefix=ERR1 %s
+// RUN: not %clang -### --target=amdgpu11-amd-amdhsa -mcpu=gfx900 -nogpulib -c %s 2>&1 | FileCheck -check-prefix=ERR2 %s
+// RUN: not %clang -### --target=amdgpu11-amd-amdhsa -mcpu=gfx900:xnack+ -nogpulib -c %s 2>&1 | FileCheck -check-prefix=ERR2 %s
+// RUN: not %clang -### --target=amdgpu12.50-amd-amdhsa -mcpu=gfx900 -nogpulib -c %s 2>&1 | FileCheck -check-prefix=ERR3 %s
+// RUN: not %clang -### --target=amdgpu12.50-amd-amdhsa -march=gfx900 -nogpulib -c %s 2>&1 | FileCheck -check-prefix=ERR3 %s
+
+// ERR0: error: the target architecture 'gfx600' is not supported by the target 'amdgpu7'
+// ERR1: error: the target architecture 'gfx601' is not supported by the target 'amdgpu6.00'
+// ERR2: error: the target architecture 'gfx900' is not supported by the target 'amdgpu11'
+// ERR3: error: the target architecture 'gfx900' is not supported by the target 'amdgpu12.50'
diff --git a/clang/test/Driver/amdgpu-subarch-resource-dir.cl b/clang/test/Driver/amdgpu-subarch-resource-dir.cl
new file mode 100644
index 0000000000000..15e6c82353f79
--- /dev/null
+++ b/clang/test/Driver/amdgpu-subarch-resource-dir.cl
@@ -0,0 +1,42 @@
+// RUN:   %clang -### --target=amdgpu10.30-amd-amdhsa-llvm \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_amdgpu_subarch_triples %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=TOPLEVEL-SUBARCH %s
+
+
+// RUN:   %clang -### --target=amdgpu9.0a-amd-amdhsa-llvm -mcpu=gfx90a \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_amdgpu_triples %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=CPU_NAME_SUBDIR %s
+
+// Test that with a subarch triple, we can fall back to finding libraries
+// in the generic (no-subarch) directory.
+// RUN:   %clang -### --target=amdgpu9.0a-amd-amdhsa-llvm \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_amdgpu_triples %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=FALLBACK-NO-SUBARCH %s
+
+// Test that with a specific subarch triple, we can fall back to finding
+// libraries in a compatible major version directory (e.g., amdgpu9.00 -> amdgpu9).
+// RUN:   %clang -### --target=amdgpu9.00-amd-amdhsa-llvm \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_amdgpu_major_version %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=FALLBACK-MAJOR-VERSION %s
+
+// RUN:   %clang -### --target=amdgpu9-amd-amdhsa-llvm \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_amdgpu_major_version %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=DIRECT-MAJOR-VERSION %s
+
+// gfx90a is its own major subarch, so it does not fall back to the amdgpu9
+// directory and no library is found.
+// RUN:   not %clang -### --target=amdgpu9.0a-amd-amdhsa-llvm \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_amdgpu_major_version %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=NO-FALLBACK-MAJOR-VERSION %s
+
+// TOPLEVEL-SUBARCH: "-cc1" "-triple" "amdgpu10.30-amd-amdhsa-llvm" "{{.*}}/resource_dir_amdgpu_subarch_triples/lib/amdgpu10.30-amd-amdhsa-llvm/libclc.bc"
+
+// CPU_NAME_SUBDIR: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa-llvm" "{{.*}}/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/gfx90a/libclc.bc"
+
+// FALLBACK-NO-SUBARCH: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa-llvm" "{{.*}}/resource_dir_amdgpu_triples/lib/amdgpu-amd-amdhsa-llvm/libclc.bc"
+
+// FALLBACK-MAJOR-VERSION: "-cc1" "-triple" "amdgpu9.00-amd-amdhsa-llvm" "{{.*}}/resource_dir_amdgpu_major_version/lib/amdgpu9-amd-amdhsa-llvm/libclc.bc"
+
+// DIRECT-MAJOR-VERSION: "-cc1" "-triple" "amdgpu9-amd-amdhsa-llvm" "{{.*}}/resource_dir_amdgpu_major_version/lib/amdgpu9-amd-amdhsa-llvm/libclc.bc"
+
+// NO-FALLBACK-MAJOR-VERSION: no libclc library 'libclc.bc' found in the clang resource directory
diff --git a/clang/test/Driver/amdgpu-unwind.cl b/clang/test/Driver/amdgpu-unwind.cl
index 881782028f14f..52867b0c80ed6 100644
--- a/clang/test/Driver/amdgpu-unwind.cl
+++ b/clang/test/Driver/amdgpu-unwind.cl
@@ -21,6 +21,6 @@
 // RUN: %clang -### -fopenmp=libomp --offload-arch=gfx90a --offload-device-only --no-offloadlib -c -emit-llvm -fno-asynchronous-unwind-tables -nogpuinc %s 2>&1 | FileCheck -check-prefix=NO-TABLES  %s
 
 
-// ASYNC-TABLES: "-triple" "amdgcn-amd-amdhsa" {{.*}} "-funwind-tables=2"
-// SYNC-TABLES: "-triple" "amdgcn-amd-amdhsa" {{.*}} "-funwind-tables=1"
-// NO-TABLES-NOT: "-triple" "amdgcn-amd-amdhsa" {{.*}} "-funwind-tables={{.*}}"
+// ASYNC-TABLES: "-triple" "amdgpu{{(9.0a)?}}-amd-amdhsa" {{.*}} "-funwind-tables=2"
+// SYNC-TABLES: "-triple" "amdgpu{{(9.0a)?}}-amd-amdhsa" {{.*}} "-funwind-tables=1"
+// NO-TABLES-NOT: "-triple" "amdgpu{{.*}}-amd-amdhsa" {{.*}} "-funwind-tables={{.*}}"
diff --git a/clang/test/Driver/amdgpu-validate-sanitize.cl b/clang/test/Driver/amdgpu-validate-sanitize.cl
index 907ad201b15b3..91131b8cf8ddb 100644
--- a/clang/test/Driver/amdgpu-validate-sanitize.cl
+++ b/clang/test/Driver/amdgpu-validate-sanitize.cl
@@ -28,7 +28,7 @@
 // RUN:   -nogpuinc --rocm-path=%S/Inputs/rocm \
 // RUN:   %s 2>&1 | FileCheck -check-prefix=ERR %s
 
-// CHECK: "-triple" "amdgcn-amd-amdhsa"
+// CHECK: "-triple" "amdgpu{{[0-9.]+}}-amd-amdhsa"
 // CHECK-SAME: "-mlink-bitcode-file" "{{.*}}asanrtl.bc"
 // CHECK-SAME: "-fsanitize=address"
 
diff --git a/clang/test/Driver/amdgpu-xnack-sramecc-flags.c b/clang/test/Driver/amdgpu-xnack-sramecc-flags.c
index c40dabcd4f645..214ea6c46ef3d 100644
--- a/clang/test/Driver/amdgpu-xnack-sramecc-flags.c
+++ b/clang/test/Driver/amdgpu-xnack-sramecc-flags.c
@@ -71,7 +71,7 @@
 // Test offload with target ID features synthesized from --offload-arch
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -fopenmp --offload-arch=gfx90a:xnack+:sramecc- \
 // RUN:   -nogpulib %s 2>&1 | FileCheck -check-prefix=OMP-TARGETID %s
-// OMP-TARGETID: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
+// OMP-TARGETID: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
 // OMP-TARGETID-SAME: "-target-feature" "+xnack"
 // OMP-TARGETID-SAME: "-target-feature" "-sramecc"
 
@@ -79,7 +79,7 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa \
 // RUN:   -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx908:xnack-:sramecc+ \
 // RUN:   -nogpulib %s 2>&1 | FileCheck -check-prefix=OMP-MARCH %s
-// OMP-MARCH: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx908"
+// OMP-MARCH: "-cc1" "-triple" "amdgpu9.08-amd-amdhsa" {{.*}} "-target-cpu" "gfx908"
 // OMP-MARCH-SAME: "-target-feature" "-xnack"
 // OMP-MARCH-SAME: "-target-feature" "+sramecc"
 
@@ -89,7 +89,7 @@
 // RUN:   -Xopenmp-target=amdgcn-amd-amdhsa -mxnack \
 // RUN:   -Xopenmp-target=amdgcn-amd-amdhsa -mno-sramecc \
 // RUN:   -nogpulib %s 2>&1 | FileCheck -check-prefix=OMP-FLAGS %s
-// OMP-FLAGS: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
+// OMP-FLAGS: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
 // OMP-FLAGS-SAME: "-target-feature" "+xnack"
 // OMP-FLAGS-SAME: "-target-feature" "-sramecc"
 
@@ -98,7 +98,7 @@
 // RUN:   -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx90a:xnack- \
 // RUN:   -Xopenmp-target=amdgcn-amd-amdhsa -mxnack \
 // RUN:   -nogpulib %s 2>&1 | FileCheck -check-prefix=OMP-TARGETID-WINS %s
-// OMP-TARGETID-WINS: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
+// OMP-TARGETID-WINS: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
 // OMP-TARGETID-WINS-SAME: "-target-feature" "-xnack"
 
 // Test offload using base architecture gfx90a with -mxnack flag for xnack+
@@ -106,7 +106,7 @@
 // RUN:   --offload-arch=gfx90a \
 // RUN:   -Xopenmp-target=amdgcn-amd-amdhsa -mxnack \
 // RUN:   -nogpulib %s 2>&1 | FileCheck -check-prefix=OMP-GFX90A-XNACK-ON %s
-// OMP-GFX90A-XNACK-ON: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
+// OMP-GFX90A-XNACK-ON: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
 // OMP-GFX90A-XNACK-ON-SAME: "-target-feature" "+xnack"
 
 // Test offload using base architecture gfx90a with -mno-xnack flag for xnack-
@@ -114,7 +114,7 @@
 // RUN:   --offload-arch=gfx90a \
 // RUN:   -Xopenmp-target=amdgcn-amd-amdhsa -mno-xnack \
 // RUN:   -nogpulib %s 2>&1 | FileCheck -check-prefix=OMP-GFX90A-XNACK-OFF %s
-// OMP-GFX90A-XNACK-OFF: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
+// OMP-GFX90A-XNACK-OFF: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
 // OMP-GFX90A-XNACK-OFF-SAME: "-target-feature" "-xnack"
 
 // Test offload with multiple device compilations for same base architecture.
@@ -123,9 +123,9 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -fopenmp \
 // RUN:   --offload-arch=gfx90a:xnack+ --offload-arch=gfx90a:xnack- -mxnack \
 // RUN:   -nogpulib %s 2>&1 | FileCheck -check-prefix=OMP-MULTI-XNACK %s
-// OMP-MULTI-XNACK: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
+// OMP-MULTI-XNACK: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
 // OMP-MULTI-XNACK-SAME: "-target-feature" "+xnack"
-// OMP-MULTI-XNACK: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
+// OMP-MULTI-XNACK: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
 // OMP-MULTI-XNACK-SAME: "-target-feature" "-xnack"
 
 // Test that -Xopenmp-target flags apply to all targets with matching triple.
@@ -135,9 +135,9 @@
 // RUN:   --offload-arch=gfx906 --offload-arch=gfx90a \
 // RUN:   -Xopenmp-target=amdgcn-amd-amdhsa -mxnack \
 // RUN:   -nogpulib %s 2>&1 | FileCheck -check-prefix=OMP-MULTI-ARCH %s
-// OMP-MULTI-ARCH: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx906"
+// OMP-MULTI-ARCH: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-target-cpu" "gfx906"
 // OMP-MULTI-ARCH-SAME: "-target-feature" "+xnack"
-// OMP-MULTI-ARCH: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
+// OMP-MULTI-ARCH: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa" {{.*}} "-target-cpu" "gfx90a"
 // OMP-MULTI-ARCH-SAME: "-target-feature" "+xnack"
 
 // Test that top-level -mxnack flags (not specified to the device are ignored).
diff --git a/clang/test/Driver/atomic-options.hip b/clang/test/Driver/atomic-options.hip
index e44dac308a35f..7afbdc3424e86 100644
--- a/clang/test/Driver/atomic-options.hip
+++ b/clang/test/Driver/atomic-options.hip
@@ -2,5 +2,5 @@
 // RUN:   -fatomic-fine-grained-memory -fno-atomic-remote-memory -fatomic-ignore-denormal-mode \
 // RUN:   2>&1 | FileCheck %s --check-prefix=CHECK-VALID
 
-// CHECK-VALID: "-cc1" {{.*}}"-triple" "amdgcn-amd-amdhsa" {{.*}}"-fatomic-fine-grained-memory" "-fatomic-ignore-denormal-mode"
+// CHECK-VALID: "-cc1" {{.*}}"-triple" "amdgpu9.06-amd-amdhsa" {{.*}}"-fatomic-fine-grained-memory" "-fatomic-ignore-denormal-mode"
 // CHECK-VALID: "-cc1" {{.*}}"-triple" {{.*}}"-fatomic-fine-grained-memory" "-fatomic-ignore-denormal-mode"
diff --git a/clang/test/Driver/cl-denorms-are-zero.cl b/clang/test/Driver/cl-denorms-are-zero.cl
index 85c268436bea3..953d9d3e33b9b 100644
--- a/clang/test/Driver/cl-denorms-are-zero.cl
+++ b/clang/test/Driver/cl-denorms-are-zero.cl
@@ -18,7 +18,7 @@
 // RUN: %clang -### -target amdgcn--amdhsa -nogpulib -c %s 2>&1 | FileCheck -check-prefixes=AMDGCN,AMDGCN-DENORM %s
 // RUN: %clang -### -cl-denorms-are-zero -o - -target amdgcn--amdhsa -nogpulib -c %s 2>&1 | FileCheck -check-prefixes=AMDGCN,AMDGCN-FLUSH %s
 
-// AMDGCN: "-triple" "amdgcn-unknown-amdhsa"
+// AMDGCN: "-triple" "amdgpu{{([0-9].)*}}-unknown-amdhsa"
 // AMDGCN-FLUSH: "-fdenormal-fp-math-f32=preserve-sign,preserve-sign"
 
 // This should be omitted and default to ieee
diff --git a/clang/test/Driver/cl-offload.cu b/clang/test/Driver/cl-offload.cu
index 8f1200f173359..59249b91db621 100644
--- a/clang/test/Driver/cl-offload.cu
+++ b/clang/test/Driver/cl-offload.cu
@@ -18,9 +18,9 @@
 // CUDA-SAME: "-Weverything"
 // CUDA: link
 
-// HIP: "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-pc-windows-msvc"
+// HIP: "-cc1" "-triple" "amdgpu10.10-amd-amdhsa" "-aux-triple" "x86_64-pc-windows-msvc"
 // HIP-SAME: "-Weverything"
-// HIP: "-cc1" "-triple" "x86_64-pc-windows-msvc{{.*}}" "-aux-triple" "amdgcn-amd-amdhsa"
+// HIP: "-cc1" "-triple" "x86_64-pc-windows-msvc{{.*}}" "-aux-triple" "amdgpu-amd-amdhsa"
 // HIP-SAME: "-Weverything"
 // HIP: {{link.* "amdhip64.lib"}}
 
diff --git a/clang/test/Driver/ftime-trace-offload.cpp b/clang/test/Driver/ftime-trace-offload.cpp
index 2305d7bf4e04d..a7c26ce923774 100644
--- a/clang/test/Driver/ftime-trace-offload.cpp
+++ b/clang/test/Driver/ftime-trace-offload.cpp
@@ -5,8 +5,8 @@
 // RUN: %clang -### -ftime-trace -ftime-trace-granularity=0 -x hip d/a.cpp --offload-arch=gfx906 --offload-arch=gfx90a \
 // RUN:   -nogpulib -nogpuinc -c -o e/a.o --target=x86_64-linux-gnu 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=HIP
-// HIP: -cc1{{.*}} "-triple" "amdgcn-amd-amdhsa"{{.*}} "-ftime-trace=e{{/|\\\\}}a-hip-amdgcn-amd-amdhsa-gfx906.json"
-// HIP: -cc1{{.*}} "-triple" "amdgcn-amd-amdhsa"{{.*}} "-ftime-trace=e{{/|\\\\}}a-hip-amdgcn-amd-amdhsa-gfx90a.json"
+// HIP: -cc1{{.*}} "-triple" "amdgpu9.06-amd-amdhsa"{{.*}} "-ftime-trace=e{{/|\\\\}}a-hip-amdgpu9.06-amd-amdhsa-gfx906.json"
+// HIP: -cc1{{.*}} "-triple" "amdgpu9.0a-amd-amdhsa"{{.*}} "-ftime-trace=e{{/|\\\\}}a-hip-amdgpu9.0a-amd-amdhsa-gfx90a.json"
 // HIP: -cc1{{.*}} "-triple" "x86_64{{.*}}"{{.*}} "-ftime-trace=e{{/|\\\\}}a.json"
 
 /// Test HIP offloading with new driver: same output as above.
@@ -18,14 +18,14 @@
 // RUN: %clang -### -ftime-trace=f -ftime-trace-granularity=0 -x hip d/a.cpp --offload-arch=gfx906 \
 // RUN:   -nogpulib -nogpuinc -c -o e/a.o --target=x86_64-linux-gnu 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=HIP-DIR
-// HIP-DIR: -cc1{{.*}} "-triple" "amdgcn-amd-amdhsa"{{.*}} "-ftime-trace=f{{/|\\\\}}a-hip-amdgcn-amd-amdhsa-gfx906.json"
+// HIP-DIR: -cc1{{.*}} "-triple" "amdgpu9.06-amd-amdhsa"{{.*}} "-ftime-trace=f{{/|\\\\}}a-hip-amdgpu9.06-amd-amdhsa-gfx906.json"
 // HIP-DIR: -cc1{{.*}} "-triple" "x86_64{{.*}}"{{.*}} "-ftime-trace=f{{/|\\\\}}a.json"
 
 /// Test HIP offloading with --save-temps: both host and device get unique trace files.
 // RUN: %clang -### -ftime-trace -ftime-trace-granularity=0 -x hip d/a.cpp --offload-arch=gfx906 \
 // RUN:   -nogpulib -nogpuinc -c -o e/a.o --target=x86_64-linux-gnu --save-temps 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=HIP-SAVE-TEMPS
-// HIP-SAVE-TEMPS: -cc1{{.*}} "-triple" "amdgcn-amd-amdhsa"{{.*}} "-ftime-trace=e{{/|\\\\}}a-hip-amdgcn-amd-amdhsa-gfx906.json"
+// HIP-SAVE-TEMPS: -cc1{{.*}} "-triple" "amdgpu9.06-amd-amdhsa"{{.*}} "-ftime-trace=e{{/|\\\\}}a-hip-amdgpu9.06-amd-amdhsa-gfx906.json"
 // HIP-SAVE-TEMPS: -cc1{{.*}} "-triple" "x86_64{{.*}}"{{.*}} "-ftime-trace=e{{/|\\\\}}a-host-x86_64-unknown-linux-gnu.json"
 
 /// Test CUDA offloading: -ftime-trace should generate traces for both host and device.
diff --git a/clang/test/Driver/gpu-libc.c b/clang/test/Driver/gpu-libc.c
index 88f346f32e0b8..733cee2c5b567 100644
--- a/clang/test/Driver/gpu-libc.c
+++ b/clang/test/Driver/gpu-libc.c
@@ -17,7 +17,7 @@
 // RUN:   %clang -### -fopenmp=libomp --target=x86_64-unknown-linux-gnu \
 // RUN:     --offload-arch=gfx908 --rocm-path=%S/Inputs/rocm --sysroot=%S/Inputs/basic_gpu_tree \
 // RUN:     -ccc-install-dir %S/Inputs/basic_gpu_tree/bin %s 2>&1 | FileCheck %s --check-prefix=OPENMP-AMDGPU
-// OPENMP-AMDGPU: clang-linker-wrapper{{.*}}"--device-linker=amdgcn-amd-amdhsa=-lc"
+// OPENMP-AMDGPU: clang-linker-wrapper{{.*}}"--device-linker=amdgpu-amd-amdhsa=-lc"
 // RUN:   %clang -### -fopenmp=libomp --target=x86_64-unknown-linux-gnu -foffload-lto \
 // RUN:     --offload-arch=sm_52 --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda --sysroot=%S/Inputs/basic_gpu_tree \
 // RUN:     -ccc-install-dir %S/Inputs/basic_gpu_tree/bin %s 2>&1 | FileCheck %s --check-prefix=OPENMP-NVPTX
diff --git a/clang/test/Driver/hip-autolink.hip b/clang/test/Driver/hip-autolink.hip
index cce3977375d2e..272bf76e27e33 100644
--- a/clang/test/Driver/hip-autolink.hip
+++ b/clang/test/Driver/hip-autolink.hip
@@ -3,7 +3,7 @@
 // RUN: %clang --target=i386-pc-windows-msvc --cuda-gpu-arch=gfx906 -nogpulib -nogpuinc \
 // RUN:   --cuda-host-only %s -### 2>&1 | FileCheck --check-prefix=HOST %s
 
-// DEV: "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// DEV: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"
 // DEV-SAME: "-fno-autolink"
 
 // HOST: "-cc1" "-triple" "i386-pc-windows-msvc{{.*}}"
diff --git a/clang/test/Driver/hip-binding.hip b/clang/test/Driver/hip-binding.hip
index b0839021aa1d9..e60e02014466c 100644
--- a/clang/test/Driver/hip-binding.hip
+++ b/clang/test/Driver/hip-binding.hip
@@ -4,26 +4,26 @@
 // RUN: %clang -ccc-print-bindings --target=x86_64-linux-gnu --offload-new-driver \
 // RUN:   --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \
 // RUN:   --no-offload-new-driver -c 2>&1 | FileCheck -check-prefix=NRDCS %s
-// NRDCS: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[IN:.*hip-binding.hip]]"], output: "[[OBJ1:.*o]]"
-// NRDCS: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[OBJ1]]"], output: "[[IMG1:.*]]"
-// NRDCS: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[IN:.*hip-binding.hip]]"], output: "[[OBJ2:.*o]]"
-// NRDCS: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[OBJ2]]"], output: "[[IMG2:.*]]"
-// NRDCS: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[IMG1]]", "[[IMG2]]"], output: "[[FATBIN:.*]]"
+// NRDCS: # "amdgpu8.03-amd-amdhsa" - "clang", inputs: ["[[IN:.*hip-binding.hip]]"], output: "[[OBJ1:.*o]]"
+// NRDCS: # "amdgpu8.03-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[OBJ1]]"], output: "[[IMG1:.*]]"
+// NRDCS: # "amdgpu9.00-amd-amdhsa" - "clang", inputs: ["[[IN:.*hip-binding.hip]]"], output: "[[OBJ2:.*o]]"
+// NRDCS: # "amdgpu9.00-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[OBJ2]]"], output: "[[IMG2:.*]]"
+// NRDCS: # "amdgpu-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[IMG1]]", "[[IMG2]]"], output: "[[FATBIN:.*]]"
 // NRDCS: # "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[IN]]", "[[FATBIN]]"], output: "{{.*}}"
 
 // RUN: %clang -ccc-print-bindings --target=x86_64-linux-gnu \
 // RUN:   --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \
 // RUN:   --no-offload-new-driver -c -fgpu-rdc 2>&1 | FileCheck -check-prefix=RDCS %s
-// RDCS: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[IN:.*hip-binding.hip]]"], output: "[[OBJ1:.*o]]"
-// RDCS: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[IN:.*hip-binding.hip]]"], output: "[[OBJ2:.*o]]"
+// RDCS: # "amdgpu8.03-amd-amdhsa" - "clang", inputs: ["[[IN:.*hip-binding.hip]]"], output: "[[OBJ1:.*o]]"
+// RDCS: # "amdgpu9.00-amd-amdhsa" - "clang", inputs: ["[[IN:.*hip-binding.hip]]"], output: "[[OBJ2:.*o]]"
 // RDCS: # "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[IN]]"], output: "[[HOSTOBJ:.*o]]"
 // RDCS: # "x86_64-unknown-linux-gnu" - "offload bundler", inputs: ["[[OBJ1]]", "[[OBJ2]]", "[[HOSTOBJ]]"], output: "{{.*}}"
 
 // RUN: %clang -ccc-print-bindings --target=x86_64-linux-gnu --offload-new-driver \
 // RUN:   --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \
 // RUN:   -c -fgpu-rdc 2>&1 | FileCheck -check-prefix=RDCS-NEW %s
-// RDCS-NEW: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HIP803:.*o]]"
-// RDCS-NEW: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[HIP900:.*o]]"
+// RDCS-NEW: # "amdgpu8.03-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HIP803:.*o]]"
+// RDCS-NEW: # "amdgpu9.00-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[HIP900:.*o]]"
 // RDCS-NEW: # "x86_64-unknown-linux-gnu" - "Offload::Packager", inputs: ["[[HIP803]]", "[[HIP900]]"], output: "[[HIPFB:.+]]"
 // RDCS-NEW: # "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[INPUT]]", "[[HIPFB]]"], output: "{{.*}}"
 
@@ -33,12 +33,12 @@
 // RUN: 2>&1 | FileCheck %s
 
 // CHECK: # "x86_64-unknown-linux-gnu" - "offload bundler", inputs: ["[[IN:.*o]]"], outputs: ["[[HOSTOBJ:.*o]]", "{{.*o}}", "{{.*o}}"]
-// CHECK: # "amdgcn-amd-amdhsa" - "offload bundler", inputs: ["[[IN]]"], outputs: ["{{.*o}}", "[[DOBJ1:.*o]]", "[[DOBJ2:.*o]]"]
-// CHECK: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ1]]"], output: "[[IMG1:.*out]]"
+// CHECK: # "amdgpu8.03-amd-amdhsa" - "offload bundler", inputs: ["[[IN]]"], outputs: ["{{.*o}}", "[[DOBJ1:.*o]]", "[[DOBJ2:.*o]]"]
+// CHECK: # "amdgpu8.03-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ1]]"], output: "[[IMG1:.*out]]"
 // CHECK-NOT: offload bundler
-// CHECK: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ2]]"], output: "[[IMG2:.*out]]"
+// CHECK: # "amdgpu9.00-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ2]]"], output: "[[IMG2:.*out]]"
 // CHECK-NOT: offload bundler
-// CHECK: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[IMG1]]", "[[IMG2]]"], output: "[[FATBINOBJ:.*o]]"
+// CHECK: # "amdgpu-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[IMG1]]", "[[IMG2]]"], output: "[[FATBINOBJ:.*o]]"
 // CHECK-NOT: offload bundler
 // CHECK: # "x86_64-unknown-linux-gnu" - "GNU::Linker", inputs: ["[[HOSTOBJ]]", "[[FATBINOBJ]]"], output: "a.out"
 
@@ -56,11 +56,11 @@
 // RUN: %clang -### --target=x86_64-linux-gnu --offload-new-driver -ccc-print-bindings -nogpulib -nogpuinc \
 // RUN:        --offload-arch=gfx90a --offload-arch=gfx908 --offload-device-only -c %s 2>&1 \
 // RUN: | FileCheck -check-prefix=MULTI-D-ONLY %s
-//      MULTI-D-ONLY: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[GFX908:.+]]"
-// MULTI-D-ONLY-NEXT: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908]]"], output: "[[GFX908_OUT:.+]]"
-// MULTI-D-ONLY-NEXT: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[GFX90a:.+]]"
-// MULTI-D-ONLY-NEXT: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX90a]]"], output: "[[GFX90a_OUT:.+]]"
-// MULTI-D-ONLY-NEXT: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908_OUT]]", "[[GFX90a_OUT]]"], output: "{{.+}}"
+//      MULTI-D-ONLY: # "amdgpu9.08-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[GFX908:.+]]"
+// MULTI-D-ONLY-NEXT: # "amdgpu9.08-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908]]"], output: "[[GFX908_OUT:.+]]"
+// MULTI-D-ONLY-NEXT: # "amdgpu9.0a-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[GFX90a:.+]]"
+// MULTI-D-ONLY-NEXT: # "amdgpu9.0a-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX90a]]"], output: "[[GFX90a_OUT:.+]]"
+// MULTI-D-ONLY-NEXT: # "amdgpu-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908_OUT]]", "[[GFX90a_OUT]]"], output: "{{.+}}"
 //
 // RUN: not %clang -### --target=x86_64-linux-gnu --offload-new-driver -ccc-print-bindings -nogpulib -nogpuinc -emit-llvm \
 // RUN:        --no-gpu-bundle-output --offload-arch=gfx90a --offload-arch=gfx908 --offload-device-only -c -o %t %s 2>&1 \
@@ -70,28 +70,28 @@
 // RUN: %clang -### --target=x86_64-linux-gnu --offload-new-driver -ccc-print-bindings -nogpulib -nogpuinc \
 // RUN:        --gpu-bundle-output --offload-arch=gfx90a --offload-arch=gfx908 --offload-device-only -c -o a.out %s 2>&1 \
 // RUN: | FileCheck -check-prefix=MULTI-D-ONLY-O %s
-//      MULTI-D-ONLY-O: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[GFX908_OBJ:.+]]"
-// MULTI-D-ONLY-O-NEXT: "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908_OBJ]]"], output: "[[GFX908:.+]]"
-// MULTI-D-ONLY-O-NEXT: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[GFX90A_OBJ:.+]]"
-// MULTI-D-ONLY-O-NEXT: "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX90A_OBJ]]"], output: "[[GFX90A:.+]]"
-// MULTI-D-ONLY-O-NEXT: "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908]]", "[[GFX90A]]"], output: "a.out"
+//      MULTI-D-ONLY-O: "amdgpu9.08-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[GFX908_OBJ:.+]]"
+// MULTI-D-ONLY-O-NEXT: "amdgpu9.08-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908_OBJ]]"], output: "[[GFX908:.+]]"
+// MULTI-D-ONLY-O-NEXT: "amdgpu9.0a-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[GFX90A_OBJ:.+]]"
+// MULTI-D-ONLY-O-NEXT: "amdgpu9.0a-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX90A_OBJ]]"], output: "[[GFX90A:.+]]"
+// MULTI-D-ONLY-O-NEXT: "amdgpu-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908]]", "[[GFX90A]]"], output: "a.out"
 
 // RUN: %clang -### --target=x86_64-linux-gnu --offload-new-driver -ccc-print-bindings -nogpulib -nogpuinc -emit-llvm \
 // RUN:        --gpu-bundle-output --offload-arch=gfx90a --offload-arch=gfx908 --offload-device-only -c -o a.out %s 2>&1 \
 // RUN: | FileCheck -check-prefix=MULTI-D-ONLY-BC %s
-//      MULTI-D-ONLY-BC: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[GFX908:.+]]"
-// MULTI-D-ONLY-BC-NEXT: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[GFX90A:.+]]"
-// MULTI-D-ONLY-BC-NEXT: "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908]]", "[[GFX90A]]"], output: "a.out"
+//      MULTI-D-ONLY-BC: "amdgpu9.08-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[GFX908:.+]]"
+// MULTI-D-ONLY-BC-NEXT: "amdgpu9.0a-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[GFX90A:.+]]"
+// MULTI-D-ONLY-BC-NEXT: "amdgpu-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[GFX908]]", "[[GFX90A]]"], output: "a.out"
 
 //
 // Check to ensure that we can use '-fsyntax-only' for HIP output with the new
 // driver.
-// 
+//
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu --offload-new-driver -nogpulib -nogpuinc \
 // RUN:        -fsyntax-only --offload-arch=gfx90a --offload-arch=gfx908 -c %s 2>&1 \
 // RUN: | FileCheck -check-prefix=SYNTAX-ONLY %s
-// SYNTAX-ONLY: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-fsyntax-only"
-// SYNTAX-ONLY: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-fsyntax-only"
+// SYNTAX-ONLY: "-cc1" "-triple" "amdgpu9.08-amd-amdhsa"{{.*}}"-fsyntax-only"
+// SYNTAX-ONLY: "-cc1" "-triple" "amdgpu9.0a-amd-amdhsa"{{.*}}"-fsyntax-only"
 // SYNTAX-ONLY: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-fsyntax-only"
 
 //
@@ -100,8 +100,8 @@
 // RUN: %clang -### --target=x86_64-linux-gnu -fno-gpu-rdc --offload-new-driver -ccc-print-bindings \
 // RUN:        -nogpulib -nogpuinc -foffload-lto --offload-arch=gfx90a --offload-arch=gfx908 -c %s 2>&1 \
 // RUN: | FileCheck -check-prefix=LTO-NO-RDC %s
-//      LTO-NO-RDC: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[LTO_908:.+]]"
-// LTO-NO-RDC-NEXT: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[LTO_90A:.+]]"
-// LTO-NO-RDC-NEXT: # "amdgcn-amd-amdhsa" - "Offload::Packager", inputs: ["[[LTO_908]]", "[[LTO_90A]]"], output: "[[PKG:.+]]"
-// LTO-NO-RDC-NEXT: # "amdgcn-amd-amdhsa" - "Offload::Linker", inputs: ["[[PKG]]"], output: "[[HIPFB:.+]]"
+//      LTO-NO-RDC: # "amdgpu9.08-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[LTO_908:.+]]"
+// LTO-NO-RDC-NEXT: # "amdgpu9.0a-amd-amdhsa" - "clang", inputs: ["[[INPUT]]"], output: "[[LTO_90A:.+]]"
+// LTO-NO-RDC-NEXT: # "amdgpu-amd-amdhsa" - "Offload::Packager", inputs: ["[[LTO_908]]", "[[LTO_90A]]"], output: "[[PKG:.+]]"
+// LTO-NO-RDC-NEXT: # "amdgpu-amd-amdhsa" - "Offload::Linker", inputs: ["[[PKG]]"], output: "[[HIPFB:.+]]"
 // LTO-NO-RDC-NEXT: # "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[INPUT]]", "[[HIPFB]]"], output: "hip-binding.o"
diff --git a/clang/test/Driver/hip-code-object-version.hip b/clang/test/Driver/hip-code-object-version.hip
index c57593a4ec478..a563351c33139 100644
--- a/clang/test/Driver/hip-code-object-version.hip
+++ b/clang/test/Driver/hip-code-object-version.hip
@@ -34,7 +34,7 @@
 // RUN:   --offload-arch=gfx906 -nogpuinc -nogpulib \
 // RUN:   %s 2>&1 | FileCheck -check-prefix=VD %s
 
-// VD: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx906"
+// VD: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgpu9.06-amd-amdhsa--gfx906"
 
 // Check invalid code object version option.
 
@@ -69,4 +69,4 @@
 // RUN:   %s 2>&1 | FileCheck -check-prefix=CC1 %s
 
 // CC1: "-cc1" {{.*}}"-mcode-object-version=5" {{.*}}"-mllvm" "--amdhsa-code-object-version=5"
-// CC1: clang-linker-wrapper{{.*}}"--device-compiler=amdgcn-amd-amdhsa=-mcode-object-version=5"
+// CC1: clang-linker-wrapper{{.*}}"--device-compiler=amdgpu-amd-amdhsa=-mcode-object-version=5"
diff --git a/clang/test/Driver/hip-cuid.hip b/clang/test/Driver/hip-cuid.hip
index 78c391c966e2a..858fc64a0328c 100644
--- a/clang/test/Driver/hip-cuid.hip
+++ b/clang/test/Driver/hip-cuid.hip
@@ -103,13 +103,13 @@
 
 // INVALID: invalid value 'invalid' in '-fuse-cuid=invalid'
 
-// COMMON: "-cc1"{{.*}} "-triple" "[[TRIP:(amdgcn-amd-amdhsa|nvptx64-nvidia-cuda)]]"
+// COMMON: "-cc1"{{.*}} "-triple" "[[TRIP0:(amdgpu9.00-amd-amdhsa|nvptx64-nvidia-cuda)]]"
 // COMMON-SAME: "-target-cpu" "[[G1:(gfx900|sm_60)]]"
 // HEX-SAME: "-cuid=[[CUID:[0-9a-f]+]]"
 // FIXED-SAME: "-cuid=[[CUID:xyz_123]]"
 // COMMON-SAME: "{{.*}}a.cu"
 
-// COMMON: "-cc1"{{.*}} "-triple" "[[TRIP]]"
+// COMMON: "-cc1"{{.*}} "-triple" "[[TRIP1:(amdgpu9.06-amd-amdhsa|nvptx64-nvidia-cuda)]]"
 // COMMON-SAME: "-target-cpu" "[[G2:(gfx906|sm_70)]]"
 // COMMON-SAME: "-cuid=[[CUID]]"
 // COMMON-SAME: "{{.*}}a.cu"
@@ -118,14 +118,14 @@
 // COMMON-SAME: "-cuid=[[CUID]]"
 // COMMON-SAME: "{{.*}}a.cu"
 
-// COMMON: "-cc1"{{.*}} "-triple" "[[TRIP]]"
+// COMMON: "-cc1"{{.*}} "-triple" "[[TRIP0]]"
 // COMMON-SAME: "-target-cpu" "[[G1]]"
 // HEX-NOT: "-cuid=[[CUID]]"
 // HEX-SAME: "-cuid=[[CUID2:[0-9a-f]+]]"
 // FIXED-SAME: "-cuid=[[CUID2:xyz_123]]"
 // COMMON-SAME: "{{.*}}b.hip"
 
-// COMMON: "-cc1"{{.*}} "-triple" "[[TRIP]]"
+// COMMON: "-cc1"{{.*}} "-triple" "[[TRIP1]]"
 // COMMON-SAME: "-target-cpu" "[[G2]]"
 // HEX-NOT: "-cuid=[[CUID]]"
 // COMMON-SAME: "-cuid=[[CUID2]]"
@@ -144,12 +144,12 @@
 // HOST-SAME: "-cuid=[[CUID]]"
 // HOST-SAME: "{{.*}}b.hip"
 
-// DEVICE: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa"
+// DEVICE: "-cc1"{{.*}} "-triple" "amdgpu9.00-amd-amdhsa"
 // DEVICE-SAME: "-target-cpu" "gfx900"
 // DEVICE-SAME: "-cuid=[[CUID:xyz_123]]"
 // DEVICE-SAME: "{{.*}}a.cu"
 
-// DEVICE: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa"
+// DEVICE: "-cc1"{{.*}} "-triple" "amdgpu9.00-amd-amdhsa"
 // DEVICE-SAME: "-target-cpu" "gfx900"
 // DEVICE-SAME: "-cuid=[[CUID]]"
 // DEVICE-SAME: "{{.*}}b.hip"
diff --git a/clang/test/Driver/hip-device-compile.hip b/clang/test/Driver/hip-device-compile.hip
index efc9345f63d28..dc21ba60869d3 100644
--- a/clang/test/Driver/hip-device-compile.hip
+++ b/clang/test/Driver/hip-device-compile.hip
@@ -58,7 +58,7 @@
 // RUN:   %S/Inputs/hip_multiple_inputs/a.cu --gpu-bundle-output \
 // RUN: 2>&1 | FileCheck -check-prefixes=CHECK,ASMBUN %s
 
-// CHECK: {{".*clang.*"}} "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: {{".*clang.*"}} "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // BC-SAME: "-emit-llvm-bc"
 // LL-SAME: "-emit-llvm"
@@ -137,8 +137,8 @@
 // RUN:   %S/Inputs/hip_multiple_inputs/a.cu \
 // RUN: 2>&1 | FileCheck -check-prefixes=NOLTO %s
 
-// NOLTO: {{".*clang.*"}} "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// NOLTO: {{".*clang.*"}} "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // NOLTO-SAME: "-S"
 // NOLTO-NOT: "-flto
 // NOLTO-SAME: "-target-cpu" "gfx900"
-// NOLTO-SAME: "-o" "a-hip-amdgcn-amd-amdhsa-gfx900.s"
+// NOLTO-SAME: "-o" "a-hip-amdgpu9.00-amd-amdhsa-gfx900.s"
diff --git a/clang/test/Driver/hip-fpie-option.hip b/clang/test/Driver/hip-fpie-option.hip
index 426564b67066e..5535a86447698 100644
--- a/clang/test/Driver/hip-fpie-option.hip
+++ b/clang/test/Driver/hip-fpie-option.hip
@@ -1,7 +1,7 @@
 // REQUIRES: default-pie-on-linux
 
 // -fPIC and -fPIE only affects host relocation model.
-// device compilation always uses PIC. 
+// device compilation always uses PIC.
 
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu \
 // RUN:   --offload-arch=gfx906 %s -nogpulib -nogpuinc \
@@ -31,8 +31,8 @@
 // RUN:   -fPIE \
 // RUN:   2>&1 | FileCheck -check-prefixes=DEV,HOST-PIE %s
 
-// DEV-DAG: {{".*clang.*".* "-triple" "amdgcn-amd-amdhsa".* "-mrelocation-model" "pic" "-pic-level" "[1|2]".* "-mframe-pointer=all"}}
+// DEV-DAG: {{".*clang.*".* "-triple" "amdgpu9.06-amd-amdhsa".* "-mrelocation-model" "pic" "-pic-level" "[1|2]".* "-mframe-pointer=all"}}
 // HOST-PIC-DAG: {{".*clang.*".* "-triple" "x86_64-unknown-linux-gnu".* "-mrelocation-model" "pic" "-pic-level" "2"}}
 // HOST-PIC-NOT: "-pic-is-pie"
 // HOST-PIE-DAG: {{".*clang.*".* "-triple" "x86_64-unknown-linux-gnu".* "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie"}}
-// DEV-NOT: {{".*clang.*".* "-triple" "amdgcn-amd-amdhsa".* "-pic-is-pie"}}
+// DEV-NOT: {{".*clang.*".* "-triple" "amdgpu{{.*}}-amd-amdhsa".* "-pic-is-pie"}}
diff --git a/clang/test/Driver/hip-gz-options.hip b/clang/test/Driver/hip-gz-options.hip
index 6d2709a172784..0733c782d3ae2 100644
--- a/clang/test/Driver/hip-gz-options.hip
+++ b/clang/test/Driver/hip-gz-options.hip
@@ -8,6 +8,6 @@
 // RUN:   -fgpu-rdc --offload-arch=gfx906 %s -nogpulib -nogpuinc \
 // RUN:   -ggdb -gz=zlib 2>&1 | FileCheck %s
 
-// CHECK-DAG: {{".*clang(-[0-9]+)?(.exe)?" .* "-triple" "amdgcn-amd-amdhsa" .* "--compress-debug-sections=zlib"}}
+// CHECK-DAG: {{".*clang(-[0-9]+)?(.exe)?" .* "-triple" "amdgpu9.06-amd-amdhsa" .* "--compress-debug-sections=zlib"}}
 // CHECK-DAG: {{".*clang(-[0-9]+)?(.exe)?" .* "-triple" "x86_64-unknown-linux-gnu".* "--compress-debug-sections=zlib"}}
 // CHECK: "--compress-debug-sections=zlib"
diff --git a/clang/test/Driver/hip-host-cpu-features.hip b/clang/test/Driver/hip-host-cpu-features.hip
index 7318ed2080a9b..677f98a238b4f 100644
--- a/clang/test/Driver/hip-host-cpu-features.hip
+++ b/clang/test/Driver/hip-host-cpu-features.hip
@@ -2,14 +2,14 @@
 // RUN: %clang -### -c --target=x86_64-linux-gnu -msse3 --cuda-gpu-arch=gfx803 -nogpuinc -nogpulib %s 2>&1 | FileCheck %s -check-prefix=HOSTSSE3
 // RUN: %clang -### -c --target=x86_64-linux-gnu --gpu-use-aux-triple-only -march=znver2 --cuda-gpu-arch=gfx803 -nogpuinc -nogpulib %s 2>&1 | FileCheck %s -check-prefix=NOHOSTCPU
 
-// HOSTCPU: "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// HOSTCPU: "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // HOSTCPU-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // HOSTCPU-SAME: "-aux-target-cpu" "znver2"
 
-// HOSTSSE3: "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// HOSTSSE3: "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // HOSTSSE3-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // HOSTSSE3-SAME: "-aux-target-feature" "+sse3"
 
-// NOHOSTCPU: "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// NOHOSTCPU: "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // NOHOSTCPU-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // NOHOSTCPU-NOT: "-aux-target-cpu" "znver2"
diff --git a/clang/test/Driver/hip-link-bc-to-bc.hip b/clang/test/Driver/hip-link-bc-to-bc.hip
index b372551e200e3..8c9976fedfd86 100644
--- a/clang/test/Driver/hip-link-bc-to-bc.hip
+++ b/clang/test/Driver/hip-link-bc-to-bc.hip
@@ -8,13 +8,13 @@
 // RUN:   --no-offload-new-driver %t/bundle1.bc %t/bundle2.bc \
 // RUN:   2>&1 | FileCheck -check-prefix=BITCODE %s
 
-// BITCODE: "{{.*}}clang-offload-bundler" "-type=bc" "-targets=host-x86_64-unknown-linux-gnu,hip-amdgcn-amd-amdhsa-unknown-gfx906" "-input={{.*}}bundle1.bc" "-output=[[B1HOST:.*\.bc]]" "-output=[[B1DEV1:.*\.bc]]" "-unbundle" "-allow-missing-bundles"
+// BITCODE: "{{.*}}clang-offload-bundler" "-type=bc" "-targets=host-x86_64-unknown-linux-gnu,hip-amdgpu9.06-amd-amdhsa-unknown-gfx906" "-input={{.*}}bundle1.bc" "-output=[[B1HOST:.*\.bc]]" "-output=[[B1DEV1:.*\.bc]]" "-unbundle" "-allow-missing-bundles"
 // BITCODE: "{{.*}}clang{{.*}}" "-o" "[[B1DEV2:.*bundle1-gfx906-.*\.bc]]" "-x" "ir" "[[B1DEV1]]"
 
-// BITCODE: "{{.*}}clang-offload-bundler" "-type=bc" "-targets=host-x86_64-unknown-linux-gnu,hip-amdgcn-amd-amdhsa-unknown-gfx906" "-input={{.*}}bundle2.bc" "-output=[[B2HOST:.*\.bc]]" "-output=[[B2DEV1:.*\.bc]]" "-unbundle" "-allow-missing-bundles"
+// BITCODE: "{{.*}}clang-offload-bundler" "-type=bc" "-targets=host-x86_64-unknown-linux-gnu,hip-amdgpu9.06-amd-amdhsa-unknown-gfx906" "-input={{.*}}bundle2.bc" "-output=[[B2HOST:.*\.bc]]" "-output=[[B2DEV1:.*\.bc]]" "-unbundle" "-allow-missing-bundles"
 // BITCODE: "{{.*}}clang{{.*}}" "-o" "[[B2DEV2:.*bundle2-gfx906-.*\.bc]]" "-x" "ir" "[[B2DEV1]]"
 
-// BITCODE: "{{.*}}llvm-link" "-o" "bundle1-hip-amdgcn-amd-amdhsa-gfx906.bc" "[[B1DEV2]]" "[[B2DEV2]]"
+// BITCODE: "{{.*}}llvm-link" "-o" "bundle1-hip-amdgpu9.06-amd-amdhsa-gfx906.bc" "[[B1DEV2]]" "[[B2DEV2]]"
 
 // Check that clang unbundles the bitcode and archive and links via llvm-link
 // RUN: llvm-ar rc %t/libhipbundle.a
@@ -25,9 +25,9 @@
 // RUN:   --no-offload-new-driver %t/bundle.bc -L%t -lhipbundle \
 // RUN:   2>&1 | FileCheck -check-prefix=ARCHIVE %s
 
-// ARCHIVE: "{{.*}}clang-offload-bundler" "-type=bc" "-targets=host-x86_64-unknown-linux-gnu,hip-amdgcn-amd-amdhsa-unknown-gfx906" "-input={{.*}}bundle.bc" "-output=[[HOST:.*\.bc]]" "-output=[[DEV1:.*\.bc]]" "-unbundle" "-allow-missing-bundles"
+// ARCHIVE: "{{.*}}clang-offload-bundler" "-type=bc" "-targets=host-x86_64-unknown-linux-gnu,hip-amdgpu9.06-amd-amdhsa-unknown-gfx906" "-input={{.*}}bundle.bc" "-output=[[HOST:.*\.bc]]" "-output=[[DEV1:.*\.bc]]" "-unbundle" "-allow-missing-bundles"
 // ARCHIVE: "{{.*}}clang{{.*}}" "-o" "[[DEV2:.*\.bc]]" "-x" "ir" "[[DEV1]]"
 
-// ARCHIVE: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libhipbundle.a" "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx906" "-output=[[AR:.*\.a]]" "-allow-missing-bundles" "-hip-openmp-compatible"
+// ARCHIVE: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libhipbundle.a" "-targets=hip-amdgpu9.06-amd-amdhsa-unknown-gfx906" "-output=[[AR:.*\.a]]" "-allow-missing-bundles" "-hip-openmp-compatible"
 
-// ARCHIVE: "{{.*}}llvm-link" "-o" "bundle-hip-amdgcn-amd-amdhsa-gfx906.bc" "[[DEV2]]" "[[AR]]"
+// ARCHIVE: "{{.*}}llvm-link" "-o" "bundle-hip-amdgpu9.06-amd-amdhsa-gfx906.bc" "[[DEV2]]" "[[AR]]"
diff --git a/clang/test/Driver/hip-link-bundle-archive.hip b/clang/test/Driver/hip-link-bundle-archive.hip
index f1902957fbc13..45d4039e82577 100644
--- a/clang/test/Driver/hip-link-bundle-archive.hip
+++ b/clang/test/Driver/hip-link-bundle-archive.hip
@@ -68,10 +68,10 @@
 // RUN:   -nogpuinc -nogpulib %s -fgpu-rdc %t/hipBundled2.lib \
 // RUN:   2>&1 | FileCheck -check-prefix=MSVC %s
 
-// GNU1: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}[[LIB:libhipBundled\.a]]" "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx906" "-output=[[A906:.*\.a]]" "-allow-missing-bundles"
-// GNU2: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}[[LIB:libhipBundled\.a\.5\.2]]" "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx906" "-output=[[A906:.*\.a]]" "-allow-missing-bundles"
+// GNU1: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}[[LIB:libhipBundled\.a]]" "-targets=hip-amdgpu9.06-amd-amdhsa-unknown-gfx906" "-output=[[A906:.*\.a]]" "-allow-missing-bundles"
+// GNU2: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}[[LIB:libhipBundled\.a\.5\.2]]" "-targets=hip-amdgpu9.06-amd-amdhsa-unknown-gfx906" "-output=[[A906:.*\.a]]" "-allow-missing-bundles"
 // GNU: "{{.*}}lld{{.*}}" {{.*}}"-plugin-opt=mcpu=gfx906" {{.*}} "[[A906]]"
-// GNU: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}[[LIB]]" "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx1030" "-output=[[A1030:.*\.a]]" "-allow-missing-bundles"
+// GNU: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}[[LIB]]" "-targets=hip-amdgpu10.30-amd-amdhsa-unknown-gfx1030" "-output=[[A1030:.*\.a]]" "-allow-missing-bundles"
 // GNU: "{{.*}}lld{{.*}}" {{.*}}"-plugin-opt=mcpu=gfx1030" {{.*}} "[[A1030]]"
 // GNU-L: "{{.*}}ld{{.*}}" {{.*}}"-o" "a.out" {{.*}}"-lhipBundled"
 // GNU-LA: "{{.*}}ld{{.*}}" {{.*}}"-o" "a.out" {{.*}}"-l:libhipBundled.a"
@@ -79,8 +79,8 @@
 // NONARCHIVE-NOT: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*libNonArchive\.a}}"
 // NONE-NOT: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*NoneExist\.a}}"
 
-// MSVC: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}hipBundled2.lib" "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx906" "-output=[[A906:.*\.a]]" "-allow-missing-bundles"
+// MSVC: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}hipBundled2.lib" "-targets=hip-amdgpu9.06-amd-amdhsa-unknown-gfx906" "-output=[[A906:.*\.a]]" "-allow-missing-bundles"
 // MSVC: "{{.*}}lld{{.*}}" {{.*}}"-plugin-opt=mcpu=gfx906" {{.*}} "[[A906]]"
-// MSVC: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}hipBundled2.lib" "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx1030" "-output=[[A1030:.*\.a]]" "-allow-missing-bundles"
+// MSVC: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}hipBundled2.lib" "-targets=hip-amdgpu10.30-amd-amdhsa-unknown-gfx1030" "-output=[[A1030:.*\.a]]" "-allow-missing-bundles"
 // MSVC: "{{.*}}lld{{.*}}" {{.*}}"-plugin-opt=mcpu=gfx1030" {{.*}} "[[A1030]]"
 // MSVC: "{{.*}}link{{.*}}" {{.*}}"-out:a.exe" {{.*}}hipBundled2.lib"
diff --git a/clang/test/Driver/hip-link-save-temps.hip b/clang/test/Driver/hip-link-save-temps.hip
index e321970274bb4..aa0e0d342bf13 100644
--- a/clang/test/Driver/hip-link-save-temps.hip
+++ b/clang/test/Driver/hip-link-save-temps.hip
@@ -33,15 +33,15 @@
 // RUN:   --offload-arch=gfx906  %t/obj1.o %t/obj2.o 2>&1 | \
 // RUN:   FileCheck -check-prefixes=CHECK,SLNO %s
 
-// CHECK: "{{.*clang-offload-bundler.*}}" {{.*}} "-output=obj1-host-x86_64-unknown-linux-gnu.o" "-output=obj1-hip-amdgcn-amd-amdhsa-gfx900.o" "-output=obj1-hip-amdgcn-amd-amdhsa-gfx906.o" "-unbundle"
-// CHECK: "{{.*clang-offload-bundler.*}}" {{.*}} "-output=obj2-host-x86_64-unknown-linux-gnu.o" "-output=obj2-hip-amdgcn-amd-amdhsa-gfx900.o" "-output=obj2-hip-amdgcn-amd-amdhsa-gfx906.o" "-unbundle"
+// CHECK: "{{.*clang-offload-bundler.*}}" {{.*}} "-output=obj1-host-x86_64-unknown-linux-gnu.o" "-output=obj1-hip-amdgpu-amd-amdhsa-gfx900.o" "-output=obj1-hip-amdgpu-amd-amdhsa-gfx906.o" "-unbundle"
+// CHECK: "{{.*clang-offload-bundler.*}}" {{.*}} "-output=obj2-host-x86_64-unknown-linux-gnu.o" "-output=obj2-hip-amdgpu-amd-amdhsa-gfx900.o" "-output=obj2-hip-amdgpu-amd-amdhsa-gfx906.o" "-unbundle"
 // CHECK-NOT: {{".*/llvm-link"}}
 // CHECK-NOT: {{".*/opt"}}
 // CHECK-NOT: {{".*/llc"}}
 // CHECK: "{{.*lld.*}}" {{.*}} "-plugin-opt=-amdgpu-internalize-symbols"
-// CHECK-SAME: "-o" "[[HIPFB1:.+]]" "obj1-hip-amdgcn-amd-amdhsa-gfx900.o" "obj2-hip-amdgcn-amd-amdhsa-gfx900.o"
+// CHECK-SAME: "-o" "[[HIPFB1:.+]]" "obj1-hip-amdgpu-amd-amdhsa-gfx900.o" "obj2-hip-amdgpu-amd-amdhsa-gfx900.o"
 // CHECK: "{{.*lld.*}}" {{.*}} "-plugin-opt=-amdgpu-internalize-symbols"
-// CHECK-SAME: "-o" "[[HIPFB2:.+]]" "obj1-hip-amdgcn-amd-amdhsa-gfx906.o" "obj2-hip-amdgcn-amd-amdhsa-gfx906.o"
+// CHECK-SAME: "-o" "[[HIPFB2:.+]]" "obj1-hip-amdgpu-amd-amdhsa-gfx906.o" "obj2-hip-amdgpu-amd-amdhsa-gfx906.o"
 // CHECK: "{{.*clang.*}}" "-target" "x86_64-unknown-linux-gnu" "-o" "[[OBJBUNDLE:.+.o]]" "-x" "assembler" "{{.*}}.mcin" "-c"
 // OUT: "{{.*ld.*}}" {{.*}} "-o" "executable" {{.*}} "[[OBJBUNDLE]]"
 // NOUT: "{{.*ld.*}}" {{.*}} "-o" "a.out" {{.*}} "[[OBJBUNDLE]]"
diff --git a/clang/test/Driver/hip-link-shared-library.hip b/clang/test/Driver/hip-link-shared-library.hip
index a075ee82dda1c..a354b0de430e0 100644
--- a/clang/test/Driver/hip-link-shared-library.hip
+++ b/clang/test/Driver/hip-link-shared-library.hip
@@ -5,11 +5,11 @@
 // RUN:   --no-offload-new-driver -fgpu-rdc 2>&1 | FileCheck %s
 
 // CHECK: # "x86_64-unknown-linux-gnu" - "offload bundler", inputs: ["[[IN:.*o]]"], outputs: ["[[HOSTOBJ:.*o]]", "{{.*o}}", "{{.*o}}"]
-// CHECK: # "amdgcn-amd-amdhsa" - "offload bundler", inputs: ["[[IN]]"], outputs: ["{{.*o}}", "[[DOBJ1:.*o]]", "[[DOBJ2:.*o]]"]
-// CHECK: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ1]]"], output: "[[IMG1:.*out]]"
+// CHECK: # "amdgpu8.03-amd-amdhsa" - "offload bundler", inputs: ["[[IN]]"], outputs: ["{{.*o}}", "[[DOBJ1:.*o]]", "[[DOBJ2:.*o]]"]
+// CHECK: # "amdgpu8.03-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ1]]"], output: "[[IMG1:.*out]]"
 // CHECK-NOT: offload bundler
-// CHECK: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ2]]"], output: "[[IMG2:.*out]]"
+// CHECK: # "amdgpu9.00-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ2]]"], output: "[[IMG2:.*out]]"
 // CHECK-NOT: offload bundler
-// CHECK: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[IMG1]]", "[[IMG2]]"], output: "[[FATBINOBJ:.*o]]"
+// CHECK: # "amdgpu-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[IMG1]]", "[[IMG2]]"], output: "[[FATBINOBJ:.*o]]"
 // CHECK-NOT: offload bundler
 // CHECK: # "x86_64-unknown-linux-gnu" - "GNU::Linker", inputs: ["[[HOSTOBJ]]", "{{.*}}.so", "[[FATBINOBJ]]"], output: "a.out"
diff --git a/clang/test/Driver/hip-link-static-library.hip b/clang/test/Driver/hip-link-static-library.hip
index dcdc26af3b36b..6f281b8a9e0f4 100644
--- a/clang/test/Driver/hip-link-static-library.hip
+++ b/clang/test/Driver/hip-link-static-library.hip
@@ -5,12 +5,12 @@
 // RUN: 2>&1 | FileCheck %s
 
 // CHECK: # "x86_64-unknown-linux-gnu" - "offload bundler", inputs: ["[[IN:.*o]]"], outputs: ["[[HOSTOBJ:.*o]]", "{{.*o}}", "{{.*o}}"]
-// CHECK: # "amdgcn-amd-amdhsa" - "offload bundler", inputs: ["[[IN]]"], outputs: ["{{.*o}}", "[[DOBJ1:.*o]]", "[[DOBJ2:.*o]]"]
-// CHECK: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ1]]"], output: "[[IMG1:.*out]]"
+// CHECK: # "amdgpu8.03-amd-amdhsa" - "offload bundler", inputs: ["[[IN]]"], outputs: ["{{.*o}}", "[[DOBJ1:.*o]]", "[[DOBJ2:.*o]]"]
+// CHECK: # "amdgpu8.03-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ1]]"], output: "[[IMG1:.*out]]"
 // CHECK-NOT: offload bundler
-// CHECK: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ2]]"], output: "[[IMG2:.*out]]"
+// CHECK: # "amdgpu9.00-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[DOBJ2]]"], output: "[[IMG2:.*out]]"
 // CHECK-NOT: offload bundler
-// CHECK: # "amdgcn-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[IMG1]]", "[[IMG2]]"], output: "[[FATBINOBJ:.*o]]"
+// CHECK: # "amdgpu-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[IMG1]]", "[[IMG2]]"], output: "[[FATBINOBJ:.*o]]"
 // CHECK-NOT: offload bundler
 // CHECK: # "x86_64-unknown-linux-gnu" - "GNU::StaticLibTool", inputs: ["[[HOSTOBJ]]", "[[FATBINOBJ]]"], output: "a.out"
 
diff --git a/clang/test/Driver/hip-offload-arch.hip b/clang/test/Driver/hip-offload-arch.hip
index 1af53baf63da7..a467d900aa564 100644
--- a/clang/test/Driver/hip-offload-arch.hip
+++ b/clang/test/Driver/hip-offload-arch.hip
@@ -4,5 +4,35 @@
 // RUN:   -nogpuinc -nogpulib \
 // RUN:   %s 2>&1 | FileCheck %s
 
-// CHECK: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-target-cpu" "gfx1030"
-// CHECK: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-target-cpu" "gfx1031"
+
+// CHECK: "-cc1" "-triple" "amdgpu10.30-amd-amdhsa"{{.*}}"-target-cpu" "gfx1030"
+// CHECK: "-cc1" "-triple" "amdgpu10.31-amd-amdhsa"{{.*}}"-target-cpu" "gfx1031"
+
+// RUN: %clang -### --target=x86_64-linux-gnu --offload-targets=amdgpu9-amd-amdhsa \
+// RUN:   --offload-arch=gfx900 \
+// RUN:   --offload-arch=gfx906 \
+// RUN:   -nogpuinc -nogpulib \
+// RUN:   %s 2>&1 | FileCheck -check-prefix=SUBARCH-TRIPLE %s
+
+// SUBARCH-TRIPLE-NOT: "-cc1"
+// SUBARCH-TRIPLE: "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"{{.*}}"-target-cpu" "gfx900"
+// SUBARCH-TRIPLE-NEXT: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"{{.*}}"-target-cpu" "gfx906"
+// SUBARCH-TRIPLE-NOT: "-cc1"
+// SUBARCH-TRIPLE: "-cc1" "-triple" "x86_64-unknown-linux-gnu"
+// SUBARCH-TRIPLE-NOT: "-cc1"
+
+// gfx90a is its own major subarch, so it is not covered by the amdgpu9 target.
+// RUN: not %clang -### --target=x86_64-linux-gnu --offload-targets=amdgpu9-amd-amdhsa \
+// RUN:   --offload-arch=gfx90a \
+// RUN:   -nogpuinc -nogpulib \
+// RUN:   %s 2>&1 | FileCheck -check-prefix=GFX90A-NOT-IN-GFX9 %s
+
+// GFX90A-NOT-IN-GFX9: clang: error: the target architecture 'gfx90a' is not supported by the target 'amdgpu9'
+
+// RUN: not %clang -### --target=x86_64-linux-gnu --offload-targets=amdgpu12-amd-amdhsa \
+// RUN:   --offload-arch=gfx900 \
+// RUN:   --offload-arch=gfx90a \
+// RUN:   -nogpuinc -nogpulib \
+// RUN:   %s 2>&1 | FileCheck -check-prefix=OTHER-SUBARCH-TRIPLE-ERR %s
+
+// OTHER-SUBARCH-TRIPLE-ERR: clang: error: the target architecture 'gfx900' is not supported by the target 'amdgpu12'
diff --git a/clang/test/Driver/hip-offload-compress-zstd.hip b/clang/test/Driver/hip-offload-compress-zstd.hip
index bffeb38afebac..36ca2f7263a11 100644
--- a/clang/test/Driver/hip-offload-compress-zstd.hip
+++ b/clang/test/Driver/hip-offload-compress-zstd.hip
@@ -13,7 +13,7 @@
 // RUN: 2>&1 | FileCheck %s
 
 // CHECK: clang-offload-bundler{{.*}} -type=o
-// CHECK-SAME: -targets={{.*}}hip-amdgcn-amd-amdhsa-unknown-gfx1100,hip-amdgcn-amd-amdhsa-unknown-gfx1101
+// CHECK-SAME: -targets={{.*}}hip-amdgpu11.00-amd-amdhsa-unknown-gfx1100,hip-amdgpu11.01-amd-amdhsa-unknown-gfx1101
 // CHECK-SAME: --compress --verbose --compression-level=9
 // CHECK: Compressed bundle format
 
@@ -26,7 +26,7 @@
 // RUN: 2>&1 | FileCheck -check-prefix=UNBUNDLE %s
 
 // UNBUNDLE: clang-offload-bundler{{.*}} "-type=bc"
-// UNBUNDLE-SAME: -targets={{.*}}hip-amdgcn-amd-amdhsa-unknown-gfx1100,hip-amdgcn-amd-amdhsa-unknown-gfx1101
+// UNBUNDLE-SAME: -targets={{.*}}hip-amdgpu11.00-amd-amdhsa-unknown-gfx1100,hip-amdgpu11.01-amd-amdhsa-unknown-gfx1101
 // UNBUNDLE-SAME: -unbundle
 // UNBUNDLE-SAME: -verbose
 
@@ -40,7 +40,7 @@
 // RUN: 2>&1 | FileCheck -check-prefix=CO %s
 
 // CO: clang-offload-bundler{{.*}} "-type=o"
-// CO-SAME: -targets={{.*}}hipv4-amdgcn-amd-amdhsa--gfx1100,hipv4-amdgcn-amd-amdhsa--gfx1101
+// CO-SAME: -targets={{.*}}hipv4-amdgpu11.00-amd-amdhsa--gfx1100,hipv4-amdgpu11.01-amd-amdhsa--gfx1101
 // CO-SAME: "--compress" "--verbose"
 
 // RUN: rm -rf %t.bc
diff --git a/clang/test/Driver/hip-options.hip b/clang/test/Driver/hip-options.hip
index 25d5d7f7673d1..90cd051c98271 100644
--- a/clang/test/Driver/hip-options.hip
+++ b/clang/test/Driver/hip-options.hip
@@ -20,15 +20,15 @@
 
 // Check -mprintf-kind=hostcall
 // RUN: %clang -### -nogpulib -nogpuinc --target=x86_64-unknown-linux-gnu -mprintf-kind=hostcall  %s -save-temps 2>&1 | FileCheck -check-prefix=HOSTC %s
-// HOSTC: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-mprintf-kind=hostcall" "-Werror=format-invalid-specifier"{{.*}}"-E" {{.*}}
-// HOSTC: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}} "-mprintf-kind=hostcall" "-Werror=format-invalid-specifier" {{.*}}"-x" "hip-cpp-output"
+// HOSTC: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"{{.*}} "-mprintf-kind=hostcall" "-Werror=format-invalid-specifier"{{.*}}"-E" {{.*}}
+// HOSTC: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"{{.*}} "-mprintf-kind=hostcall" "-Werror=format-invalid-specifier" {{.*}}"-x" "hip-cpp-output"
 // HOSTC: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}} "-E" {{.*}}
 // HOSTC: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-x" "ir"
 
 // Check -mprintf-kind=buffered
 // RUN: %clang -### -nogpulib -nogpuinc --target=x86_64-unknown-linux-gnu -mprintf-kind=buffered  %s -save-temps 2>&1 | FileCheck -check-prefix=BUFF %s
-// BUFF: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-mprintf-kind=buffered" "-Werror=format-invalid-specifier"{{.*}}"-E" {{.*}}
-// BUFF: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}} "-mprintf-kind=buffered" "-Werror=format-invalid-specifier" {{.*}}"-x" "hip-cpp-output"
+// BUFF: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"{{.*}} "-mprintf-kind=buffered" "-Werror=format-invalid-specifier"{{.*}}"-E" {{.*}}
+// BUFF: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"{{.*}} "-mprintf-kind=buffered" "-Werror=format-invalid-specifier" {{.*}}"-x" "hip-cpp-output"
 // BUFF: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}} "-E" {{.*}}
 // BUFF: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-x" "ir"
 
@@ -52,15 +52,15 @@
 
 // RUN: %clang -### -nogpuinc -nogpulib -munsafe-fp-atomics \
 // RUN:   --cuda-gpu-arch=gfx906  %s 2>&1 | FileCheck -check-prefix=UNSAFE-FP-ATOMICS %s
-// UNSAFE-FP-ATOMICS: clang{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fatomic-ignore-denormal-mode"
+// UNSAFE-FP-ATOMICS: clang{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-fatomic-ignore-denormal-mode"
 
 // RUN: %clang -### -nogpuinc -nogpulib \
 // RUN:   --cuda-gpu-arch=gfx906  %s 2>&1 | FileCheck -check-prefix=DEFAULT-UNSAFE-FP-ATOMICS %s
-// DEFAULT-UNSAFE-FP-ATOMICS-NOT: clang{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fatomic-ignore-denormal-mode"
+// DEFAULT-UNSAFE-FP-ATOMICS-NOT: clang{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-fatomic-ignore-denormal-mode"
 
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib -fgpu-exclude-wrong-side-overloads \
 // RUN:   --cuda-gpu-arch=gfx906  %s 2>&1 | FileCheck -check-prefix=FIX-OVERLOAD %s
-// FIX-OVERLOAD: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fgpu-exclude-wrong-side-overloads" "-fgpu-defer-diag"
+// FIX-OVERLOAD: "-cc1"{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-fgpu-exclude-wrong-side-overloads" "-fgpu-defer-diag"
 // FIX-OVERLOAD: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-fgpu-exclude-wrong-side-overloads" "-fgpu-defer-diag"
 
 // Check -mconstructor-aliases is not passed to device compilation.
@@ -68,11 +68,11 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
 // RUN:   --cuda-gpu-arch=gfx906  %s 2>&1 | FileCheck -check-prefix=CTA %s
 // CTA: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-mconstructor-aliases"
-// CTA-NOT: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-mconstructor-aliases"
+// CTA-NOT: "-cc1"{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-mconstructor-aliases"
 
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
 // RUN:   --offload-arch=gfx906 -fgpu-inline-threshold=1000 %s 2>&1 | FileCheck -check-prefix=THRESH %s
-// THRESH: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-mllvm" "-inline-threshold=1000"
+// THRESH: "-cc1"{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-mllvm" "-inline-threshold=1000"
 // THRESH-NOT: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-inline-threshold=1000"
 
 // Check -foffload-lto=thin translated correctly.
@@ -84,9 +84,9 @@
 // Ensure we don't error about -fwhole-program-vtables for the non-device offload compile.
 // HIPTHINLTO-NOT: error: invalid argument '-fwhole-program-vtables' only allowed with '-flto'
 // HIPTHINLTO-NOT: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-flto-unit"
-// HIPTHINLTO: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-flto=thin" "-flto-unit" {{.*}} "-fwhole-program-vtables"
+// HIPTHINLTO: "-cc1"{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-flto=thin" "-flto-unit" {{.*}} "-fwhole-program-vtables"
 // HIPTHINLTO-NOT: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-flto-unit"
-// HIPTHINLTO: clang-linker-wrapper{{.*}} "--device-compiler=amdgcn-amd-amdhsa=-flto=thin"
+// HIPTHINLTO: clang-linker-wrapper{{.*}} "--device-compiler=amdgpu-amd-amdhsa=-flto=thin"
 
 // Check -no-canonical-prefixes is propagated correctly.
 
@@ -96,7 +96,7 @@
 
 // Ensure that we invoke clang-linker-wrapper with --no-canonical-prefixes and
 // pass -no-canonical-prefixes as a device compiler flag.
-// HIPTHINLTO-NO-CANON-PREFIXES: clang-linker-wrapper{{.*}} "--device-compiler=amdgcn-amd-amdhsa=-no-canonical-prefixes" {{.*}} "--no-canonical-prefixes"
+// HIPTHINLTO-NO-CANON-PREFIXES: clang-linker-wrapper{{.*}} "--device-compiler=amdgpu-amd-amdhsa=-no-canonical-prefixes" {{.*}} "--no-canonical-prefixes"
 
 // Check that -flto=thin is handled correctly, particularly with -fwhole-program-vtables.
 //
@@ -108,15 +108,15 @@
 // drop -fwhole-program-vtables for the device offload compile and pass it through for the
 // non-device offload compile along with -flto=thin.
 // THINLTO-NOT: error: invalid argument '-fwhole-program-vtables' only allowed with '-flto'
-// THINLTO-NOT: "-cc1"{{.*}}" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fwhole-program-vtables"
+// THINLTO-NOT: "-cc1"{{.*}}" "-triple" "amdgpu9-amd-amdhsa" {{.*}} "-fwhole-program-vtables"
 // THINLTO: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-flto=thin" {{.*}} "-fwhole-program-vtables"
-// THINLTO-NOT: "-cc1"{{.*}}" "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fwhole-program-vtables"
+// THINLTO-NOT: "-cc1"{{.*}}" "-triple" "amdgpu9-amd-amdhsa" {{.*}} "-fwhole-program-vtables"
 
 // Check -fopenmp=libomp is allowed with HIP but -fopenmp-targets= is not allowed.
 
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
 // RUN:   --offload-arch=gfx906 -fopenmp=libomp %s 2>&1 | FileCheck -check-prefix=OMP %s
-// OMP-NOT: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fopenmp"
+// OMP-NOT: "-cc1"{{.*}} "-triple" "amdgpu9-amd-amdhsa" {{.*}} "-fopenmp"
 // OMP: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-fopenmp"
 
 // Check -Xoffload-linker option is passed to lld.
@@ -129,7 +129,7 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
 // RUN:   --offload-arch=gfx906 -fhip-kernel-arg-name %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=KAN %s
-// KAN: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fhip-kernel-arg-name"
+// KAN: "-cc1"{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-fhip-kernel-arg-name"
 
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
 // RUN:   --offload-arch=gfx906 %s 2>&1 \
@@ -138,22 +138,22 @@
 
 // RUN: %clang -### -nogpuinc -nogpulib -mno-amdgpu-ieee -mamdgpu-ieee \
 // RUN:   --cuda-gpu-arch=gfx906  %s 2>&1 | FileCheck -check-prefix=IEEE-ON %s
-// IEEE-ON-NOT: clang{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-m{{(no-)?}}amdgpu-ieee"
+// IEEE-ON-NOT: clang{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-m{{(no-)?}}amdgpu-ieee"
 
 // RUN: %clang -### -nogpuinc -nogpulib -mamdgpu-ieee -mno-amdgpu-ieee -ffast-math \
 // RUN:   --cuda-gpu-arch=gfx906  %s 2>&1 | FileCheck -check-prefixes=IEEE-OFF %s
-// IEEE-OFF: clang{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-mno-amdgpu-ieee"
+// IEEE-OFF: clang{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-mno-amdgpu-ieee"
 
 // RUN: %clang -### -nogpuinc -nogpulib -mamdgpu-ieee -mno-amdgpu-ieee -ffast-math \
 // RUN:   --cuda-gpu-arch=gfx906  %s 2>&1 | FileCheck -check-prefixes=IEEE-OFF-NEG %s
-// IEEE-OFF-NEG-NOT: clang{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-mamdgpu-ieee"
+// IEEE-OFF-NEG-NOT: clang{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-mamdgpu-ieee"
 
 // Check -fno-hip-fp32-correctly-rounded-divide-sqrt is passed to -cc1 but
 // (default) -fhip-fp32-correctly-rounded-divide-sqrt is not.
 
 // RUN: %clang -### -nogpuinc -nogpulib -fno-hip-fp32-correctly-rounded-divide-sqrt \
 // RUN:   --cuda-gpu-arch=gfx906  %s 2>&1 | FileCheck -check-prefixes=NOCRDS %s
-// NOCRDS: clang{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fno-hip-fp32-correctly-rounded-divide-sqrt"
+// NOCRDS: clang{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-fno-hip-fp32-correctly-rounded-divide-sqrt"
 
 // RUN: %clang -### -nogpuinc -nogpulib \
 // RUN:   --cuda-gpu-arch=gfx906  %s 2>&1 | FileCheck -check-prefixes=CRDS %s
@@ -174,7 +174,7 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib -ffast-math \
 // RUN:   --cuda-gpu-arch=gfx906 %s 2>&1 | FileCheck -check-prefix=APPROX %s
 
-// APPROX: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fgpu-approx-transcendentals"
+// APPROX: "-cc1"{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-fgpu-approx-transcendentals"
 // APPROX: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-fgpu-approx-transcendentals"
 
 // RUN: %clang -### -nogpuinc -nogpulib -fno-gpu-approx-transcendentals \
@@ -204,13 +204,13 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib -fno-offload-uniform-block \
 // RUN:   --cuda-gpu-arch=gfx906 %s 2>&1 | FileCheck -check-prefix=NOUNIBLK %s
 
-// NOUNIBLK: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-fno-offload-uniform-block"
+// NOUNIBLK: "-cc1"{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-fno-offload-uniform-block"
 // NOUNIBLK: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-fno-offload-uniform-block"
 
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib -foffload-uniform-block \
 // RUN:   --cuda-gpu-arch=gfx906 %s 2>&1 | FileCheck -check-prefix=UNIBLK %s
 
-// UNIBLK: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-foffload-uniform-block"
+// UNIBLK: "-cc1"{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-foffload-uniform-block"
 // UNIBLK: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-foffload-uniform-block"
 
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
@@ -227,7 +227,7 @@
 
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
 // RUN:   --cuda-gpu-arch=gfx906 %s 2>&1 | FileCheck -check-prefix=WARN-ATOMIC %s
-// WARN-ATOMIC: clang{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-Werror=atomic-alignment"
+// WARN-ATOMIC: clang{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-Werror=atomic-alignment"
 // WARN-ATOMIC-NOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-Werror=atomic-alignment"
 
 // Check the default -Werror=atomic-alignment can be overridden.
@@ -235,7 +235,7 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
 // RUN:   --cuda-gpu-arch=gfx906 -Xarch_device -Wno-error=atomic-alignment %s \
 // RUN:   2>&1 | FileCheck -check-prefix=NO-WARN-ATOMIC %s
-// NO-WARN-ATOMIC: clang{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-Werror=atomic-alignment" {{.*}} "-Wno-error=atomic-alignment"
+// NO-WARN-ATOMIC: clang{{.*}} "-triple" "amdgpu9.06-amd-amdhsa" {{.*}} "-Werror=atomic-alignment" {{.*}} "-Wno-error=atomic-alignment"
 // NO-WARN-ATOMIC-NOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-Werror=atomic-alignment"
 // NO-WARN-ATOMIC-NOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-Wno-error=atomic-alignment"
 
@@ -268,7 +268,7 @@
 // RUN:   --offload-arch=gfx1100 --offload-new-driver \
 // RUN:   -fprofile-instr-generate -fcoverage-mapping %s 2>&1 | \
 // RUN:   FileCheck -check-prefix=COV %s
-// COV: clang-linker-wrapper{{.*}} "--device-compiler=amdgcn-amd-amdhsa=-fprofile-instr-generate" "--device-compiler=amdgcn-amd-amdhsa=-fcoverage-mapping"
+// COV: clang-linker-wrapper{{.*}} "--device-compiler=amdgpu-amd-amdhsa=-fprofile-instr-generate" "--device-compiler=amdgpu-amd-amdhsa=-fcoverage-mapping"
 
 // RUN: %clang -### -Werror --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
 // RUN:   -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
@@ -276,7 +276,7 @@
 // RUN:   -fprofile-instr-generate -fcoverage-mapping \
 // RUN:   -fcoverage-compilation-dir=/src %s 2>&1 | \
 // RUN:   FileCheck -check-prefix=COV-DIR %s
-// COV-DIR: clang-linker-wrapper{{.*}} "--device-compiler=amdgcn-amd-amdhsa=-fcoverage-compilation-dir=/src"
+// COV-DIR: clang-linker-wrapper{{.*}} "--device-compiler=amdgpu-amd-amdhsa=-fcoverage-compilation-dir=/src"
 
 // RUN: %clang -### -Werror --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
 // RUN:   -resource-dir=%S/Inputs/resource_dir \
diff --git a/clang/test/Driver/hip-phases.hip b/clang/test/Driver/hip-phases.hip
index c63f1259c4414..5c5784bad6875 100644
--- a/clang/test/Driver/hip-phases.hip
+++ b/clang/test/Driver/hip-phases.hip
@@ -35,22 +35,22 @@
 // OLDN-DAG: [[P6:[0-9]+]]: backend, {[[P5]]}, assembler, (device-[[T]], [[ARCH]])
 // OLDN-DAG: [[P7:[0-9]+]]: assembler, {[[P6]]}, object, (device-[[T]], [[ARCH]])
 // OLDN-DAG: [[P8:[0-9]+]]: linker, {[[P7]]}, image, (device-[[T]], [[ARCH]])
-// OLDN-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P8]]}, image
+// OLDN-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P8]]}, image
 // OLDN-DAG: [[P10:[0-9]+]]: linker, {[[P9]]}, hip-fatbin, (device-[[T]])
 // OLDR-DAG: [[P6:[0-9]+]]: backend, {[[P5]]}, lto-bc, (device-[[T]], [[ARCH]])
 // OLDR-DAG: [[P7:[0-9]+]]: linker, {[[P6]]}, image, (device-[[T]], [[ARCH]])
-// OLDR-DAG: [[P8:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P7]]}, image
+// OLDR-DAG: [[P8:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P7]]}, image
 // OLDR-DAG: [[P9:[0-9]+]]: linker, {[[P8]]}, object, (device-[[T]])
-// OLDR-DAG: [[P10:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P9]]}, object
+// OLDR-DAG: [[P10:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P9]]}, object
 // NEW-DAG: [[P6:[0-9]+]]: backend, {[[P5]]}, lto-bc, (device-[[T]], [[ARCH]])
-// NEW-DAG: [[P7:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P6]]}, lto-bc
+// NEW-DAG: [[P7:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P6]]}, lto-bc
 // NEW-DAG: [[P8:[0-9]+]]: llvm-offload-binary, {[[P7]]}, image, (device-[[T]])
 // NEWN-DAG: [[P9:[0-9]+]]: clang-linker-wrapper, {[[P8]]}, hip-fatbin, (device-[[T]])
 // NEWLTO-DAG: [[P9:[0-9]+]]: clang-linker-wrapper, {[[P8]]}, hip-fatbin, (device-[[T]])
 
-// OLDN-DAG: [[P11:[0-9]+]]: offload, "host-[[T]] (x86_64-unknown-linux-gnu)" {[[P2]]}, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P10]]}, ir
-// NEWN-DAG: [[P10:[0-9]+]]: offload, "host-[[T]] (x86_64-unknown-linux-gnu)" {[[P2]]}, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P9]]}, ir
-// NEWLTO-DAG: [[P10:[0-9]+]]: offload, "host-[[T]] (x86_64-unknown-linux-gnu)" {[[P2]]}, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P9]]}, ir
+// OLDN-DAG: [[P11:[0-9]+]]: offload, "host-[[T]] (x86_64-unknown-linux-gnu)" {[[P2]]}, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P10]]}, ir
+// NEWN-DAG: [[P10:[0-9]+]]: offload, "host-[[T]] (x86_64-unknown-linux-gnu)" {[[P2]]}, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P9]]}, ir
+// NEWLTO-DAG: [[P10:[0-9]+]]: offload, "host-[[T]] (x86_64-unknown-linux-gnu)" {[[P2]]}, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P9]]}, ir
 // NEWR-DAG: [[P9:[0-9]+]]: offload, "host-[[T]] (x86_64-unknown-linux-gnu)" {[[P2]]}, "device-[[T]] (x86_64-unknown-linux-gnu)" {[[P8]]}, ir
 // OLDR-DAG: [[P14:[0-9]+]]: linker, {[[P13]], [[P10]]}, image, (host-[[T]])
 // OLDN-DAG: [[P12:[0-9]+]]: backend, {[[P11]]}, assembler, (host-[[T]])
@@ -104,7 +104,7 @@
 // NRD2-DAG: [[P6:[0-9]+]]: backend, {[[P5]]}, assembler, (device-[[T]], [[ARCH1]])
 // NRD2-DAG: [[P7:[0-9]+]]: assembler, {[[P6]]}, object, (device-[[T]], [[ARCH1]])
 // NRD2-DAG: [[P8:[0-9]+]]: linker, {[[P7]]}, image, (device-[[T]], [[ARCH1]])
-// NRD2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH1]])" {[[P8]]}, image
+// NRD2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH1]])" {[[P8]]}, image
 
 // NRD2-DAG: [[P10:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T]], (device-[[T]], [[ARCH2:gfx900]])
 // NRD2-DAG: [[P11:[0-9]+]]: preprocessor, {[[P10]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH2]])
@@ -112,9 +112,9 @@
 // NRD2-DAG: [[P13:[0-9]+]]: backend, {[[P12]]}, assembler, (device-[[T]], [[ARCH2]])
 // NRD2-DAG: [[P14:[0-9]+]]: assembler, {[[P13]]}, object, (device-[[T]], [[ARCH2]])
 // NRD2-DAG: [[P15:[0-9]+]]: linker, {[[P14]]}, image, (device-[[T]], [[ARCH2]])
-// NRD2-DAG: [[P16:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P15]]}, image
+// NRD2-DAG: [[P16:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P15]]}, image
 // NRD2-DAG: [[P17:[0-9]+]]: linker, {[[P9]], [[P16]]}, hip-fatbin, (device-[[T]])
-// NRD2-DAG: [[P18:[0-9]+]]: offload, "host-[[T]] (x86_64-unknown-linux-gnu)" {[[P2]]}, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P17]]}, ir
+// NRD2-DAG: [[P18:[0-9]+]]: offload, "host-[[T]] (x86_64-unknown-linux-gnu)" {[[P2]]}, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P17]]}, ir
 // NRD2-DAG: [[P19:[0-9]+]]: backend, {[[P18]]}, assembler, (host-[[T]])
 // NRD2-DAG: [[P20:[0-9]+]]: assembler, {[[P19]]}, object, (host-[[T]])
 // NCL2-DAG: [[P21:[0-9]+]]: linker, {[[P20]]}, image, (host-[[T]])
@@ -141,16 +141,16 @@
 // RDC2-DAG: [[P5:[0-9]+]]: compiler, {[[P4]]}, ir, (device-[[T]], [[ARCH1]])
 // RDC2-DAG: [[P6:[0-9]+]]: backend, {[[P5]]}, lto-bc, (device-[[T]], [[ARCH1]])
 // RCL2-DAG: [[P8:[0-9]+]]: linker, {[[P6]]}, image, (device-[[T]], [[ARCH1]])
-// RCL2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH1]])" {[[P8]]}, image
-// RC2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH1]])" {[[P6]]}, lto-bc
+// RCL2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH1]])" {[[P8]]}, image
+// RC2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH1]])" {[[P6]]}, lto-bc
 
 // RDC2-DAG: [[P10:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T]], (device-[[T]], [[ARCH2:gfx900]])
 // RDC2-DAG: [[P11:[0-9]+]]: preprocessor, {[[P10]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH2]])
 // RDC2-DAG: [[P12:[0-9]+]]: compiler, {[[P11]]}, ir, (device-[[T]], [[ARCH2]])
 // RDC2-DAG: [[P13:[0-9]+]]: backend, {[[P12]]}, lto-bc, (device-[[T]], [[ARCH2]])
 // RCL2-DAG: [[P15:[0-9]+]]: linker, {[[P13]]}, image, (device-[[T]], [[ARCH2]])
-// RCL2-DAG: [[P16:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P15]]}, image
-// RC2-DAG: [[P16:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P13]]}, lto-bc
+// RCL2-DAG: [[P16:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P15]]}, image
+// RC2-DAG: [[P16:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P13]]}, lto-bc
 
 // RC2-DAG: [[P0:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T:hip]], (host-[[T]])
 // RC2-DAG: [[P1:[0-9]+]]: preprocessor, {[[P0]]}, [[T]]-cpp-output, (host-[[T]])
@@ -159,7 +159,7 @@
 // RC2-DAG: [[P20:[0-9]+]]: assembler, {[[P19]]}, object, (host-[[T]])
 
 // RCL2-DAG: [[P17:[0-9]+]]: linker, {[[P9]], [[P16]]}, object, (device-[[T]])
-// RCL2-DAG: [[P22:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P17]]}, object
+// RCL2-DAG: [[P22:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P17]]}, object
 // RCL2-DAG: [[P23:[0-9]+]]: linker, {[[P20]], [[P22]]}, image, (host-[[T]])
 // RC2-DAG: [[P23:[0-9]+]]: clang-offload-bundler, {[[P9]], [[P16]], [[P20]]}, object, (host-[[T]])
 
@@ -256,9 +256,9 @@
 // DBIN-DAG: [[P3:[0-9]+]]: backend, {[[P2]]}, assembler, (device-[[T]], [[ARCH]])
 // DBIN-DAG: [[P4:[0-9]+]]: assembler, {[[P3]]}, object, (device-[[T]], [[ARCH]])
 // DBIN-DAG: [[P5:[0-9]+]]: linker, {[[P4]]}, image, (device-[[T]], [[ARCH]])
-// DBIN-DAG: [[P6:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P5]]}, image
+// DBIN-DAG: [[P6:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P5]]}, image
 // DBIN-DAG: [[P7:[0-9]+]]: linker, {[[P6]]}, hip-fatbin, (device-hip)
-// DBIN-DAG: [[P8:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P7]]}, hip-fatbin
+// DBIN-DAG: [[P8:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P7]]}, hip-fatbin
 // DBIN-NOT: host
 
 //
@@ -272,7 +272,7 @@
 // DASM-DAG: [[P1:[0-9]+]]: preprocessor, {[[P0]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH]])
 // DASM-DAG: [[P2:[0-9]+]]: compiler, {[[P1]]}, ir, (device-[[T]], [[ARCH]])
 // DASM-DAG: [[P3:[0-9]+]]: backend, {[[P2]]}, assembler, (device-[[T]], [[ARCH]])
-// DASM-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P3]]}, assembler
+// DASM-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P3]]}, assembler
 // DASM-NOT: clang-offload-bundler
 // DASM-NOT: host
 
@@ -299,7 +299,7 @@
 // RELOC-DAG: [[P2:[0-9]+]]: compiler, {[[P1]]}, ir, (device-[[T]], [[ARCH]])
 // RELOC-DAG: [[P3:[0-9]+]]: backend, {[[P2]]}, lto-bc, (device-[[T]], [[ARCH]])
 // RELOC-NOT: linker
-// RELOC-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P3]]}
+// RELOC-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P3]]}
 // RELOC-NOT: host
 
 //
@@ -319,13 +319,13 @@
 // RELOC2-DAG: [[P2:[0-9]+]]: compiler, {[[P1]]}, ir, (device-[[T]], [[ARCH]])
 // RELOC2-DAG: [[P3:[0-9]+]]: backend, {[[P2]]}, lto-bc, (device-[[T]], [[ARCH]])
 // RELOC2-NOT: linker
-// RELOC2-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P3]]}, lto-bc
+// RELOC2-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P3]]}, lto-bc
 // RELOC2-DAG: [[P5:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T:hip]], (device-[[T]], [[ARCH2:gfx900]])
 // RELOC2-DAG: [[P6:[0-9]+]]: preprocessor, {[[P5]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH2]])
 // RELOC2-DAG: [[P7:[0-9]+]]: compiler, {[[P6]]}, ir, (device-[[T]], [[ARCH2]])
 // RELOC2-DAG: [[P8:[0-9]+]]: backend, {[[P7]]}, lto-bc, (device-[[T]], [[ARCH2]])
 // RELOC2-NOT: linker
-// RELOC2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P8]]}, lto-bc
+// RELOC2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P8]]}, lto-bc
 // RELOC2-NOT: host
 
 //
@@ -349,16 +349,16 @@
 // DBIN2-DAG: [[P3:[0-9]+]]: backend, {[[P2]]}, assembler, (device-[[T]], [[ARCH]])
 // DBIN2-DAG: [[P4:[0-9]+]]: assembler, {[[P3]]}, object, (device-[[T]], [[ARCH]])
 // DBIN2-DAG: [[P5:[0-9]+]]: linker, {[[P4]]}, image, (device-[[T]], [[ARCH]])
-// DBIN2-DAG: [[P6:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P5]]}, image
+// DBIN2-DAG: [[P6:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P5]]}, image
 // DBIN2-DAG: [[P7:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T]], (device-[[T]], [[ARCH2:gfx900]])
 // DBIN2-DAG: [[P8:[0-9]+]]: preprocessor, {[[P7]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH2]])
 // DBIN2-DAG: [[P9:[0-9]+]]: compiler, {[[P8]]}, ir, (device-[[T]], [[ARCH2]])
 // DBIN2-DAG: [[P10:[0-9]+]]: backend, {[[P9]]}, assembler, (device-[[T]], [[ARCH2]])
 // DBIN2-DAG: [[P11:[0-9]+]]: assembler, {[[P10]]}, object, (device-[[T]], [[ARCH2]])
 // DBIN2-DAG: [[P12:[0-9]+]]: linker, {[[P11]]}, image, (device-[[T]], [[ARCH2]])
-// DBIN2-DAG: [[P13:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P12]]}, image
+// DBIN2-DAG: [[P13:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P12]]}, image
 // DBIN2-DAG: [[P14:[0-9]+]]: linker, {[[P6]], [[P13]]}, hip-fatbin, (device-hip)
-// DBIN2-DAG: [[P15:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P14]]}, hip-fatbin
+// DBIN2-DAG: [[P15:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P14]]}, hip-fatbin
 // DBIN2-NOT: host
 
 //
@@ -385,12 +385,12 @@
 // DASM2-DAG: [[P1:[0-9]+]]: preprocessor, {[[P0]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH]])
 // DASM2-DAG: [[P2:[0-9]+]]: compiler, {[[P1]]}, ir, (device-[[T]], [[ARCH]])
 // DASM2-DAG: [[P3:[0-9]+]]: backend, {[[P2]]}, assembler, (device-[[T]], [[ARCH]])
-// DASM2-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P3]]}, assembler
+// DASM2-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P3]]}, assembler
 // DASM2-DAG: [[P5:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T]], (device-[[T]], [[ARCH2:gfx900]])
 // DASM2-DAG: [[P6:[0-9]+]]: preprocessor, {[[P5]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH2]])
 // DASM2-DAG: [[P7:[0-9]+]]: compiler, {[[P6]]}, ir, (device-[[T]], [[ARCH2]])
 // DASM2-DAG: [[P8:[0-9]+]]: backend, {[[P7]]}, assembler, (device-[[T]], [[ARCH2]])
-// DASM2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P8]]}, assembler
+// DASM2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P8]]}, assembler
 // DASM2-BUNDLE: [[P10:[0-9]+]]: clang-offload-bundler, {[[P4]], [[P9]]}, assembler, (device-hip)
 // DASM2-NOBUNDLE-NOT: clang-offload-bundler, {[[P4]], [[P9]]}, assembler, (device-hip)
 // DASM2-NOT: host
@@ -434,13 +434,13 @@
 // RL2-DAG: [[P3:[0-9]+]]: clang-offload-unbundler, {[[P2]]}, object
 
 // RL2-DAG: [[P4:[0-9]+]]: linker, {[[P1]], [[P3]]}, image, (device-[[T:hip]], [[ARCH1:gfx803]])
-// RL2-DAG: [[P5:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH1]])" {[[P4]]}, image
+// RL2-DAG: [[P5:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH1]])" {[[P4]]}, image
 // RL2-DAG: [[P6:[0-9]+]]: linker, {[[P1]], [[P3]]}, image, (device-[[T]], [[ARCH2:gfx900]])
-// RL2-DAG: [[P7:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P6]]}, image
+// RL2-DAG: [[P7:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P6]]}, image
 // RL2-DEV-DAG: [[P8:[0-9]+]]: linker, {[[P5]], [[P7]]}, hip-fatbin, (device-[[T]])
-// RL2-DEV-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P8]]}, hip-fatbin
+// RL2-DEV-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P8]]}, hip-fatbin
 // RL2-EM-DAG: [[P8:[0-9]+]]: linker, {[[P5]], [[P7]]}, object, (device-[[T]])
-// RL2-EM-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa)" {[[P8]]}, object
+// RL2-EM-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa)" {[[P8]]}, object
 // RL2-NB-NOT: linker
 // RL2-NB-NOT: offload
 
@@ -517,17 +517,17 @@
 
 // PPE-DAG: [[P0:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T:hip]], (device-[[T]], [[ARCH:gfx803]])
 // PPE-DAG: [[P1:[0-9]+]]: preprocessor, {[[P0]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH]])
-// PPE-DAG: [[P2:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P1]]}, [[T]]-cpp-output
+// PPE-DAG: [[P2:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P1]]}, [[T]]-cpp-output
 // PPEB-DAG: [[P3:[0-9]+]]: clang-offload-bundler, {[[P2]]}, [[T]]-cpp-output, (device-hip)
 // PPEN-NOT: clang-offload-bundler, {{.*}}, [[T]]-cpp-output, (device-hip)
 // PPE-NOT: host
 
 // PPE2-DAG: [[P0:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T:hip]], (device-[[T]], [[ARCH:gfx803]])
 // PPE2-DAG: [[P1:[0-9]+]]: preprocessor, {[[P0]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH]])
-// PPE2-DAG: [[P2:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P1]]}, [[T]]-cpp-output
+// PPE2-DAG: [[P2:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P1]]}, [[T]]-cpp-output
 // PPE2-DAG: [[P5:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T]], (device-[[T]], [[ARCH2:gfx900]])
 // PPE2-DAG: [[P6:[0-9]+]]: preprocessor, {[[P5]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH2]])
-// PPE2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P6]]}, [[T]]-cpp-output
+// PPE2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P6]]}, [[T]]-cpp-output
 // PPE2B-DAG: [[P10:[0-9]+]]: clang-offload-bundler, {[[P2]], [[P9]]}, [[T]]-cpp-output, (device-hip)
 // PPE2N-NOT: clang-offload-bundler, {{.*}}, [[T]]-cpp-output, (device-hip)
 // PPE2-NOT: host
@@ -543,12 +543,12 @@
 // LLVM2-DAG: [[P1:[0-9]+]]: preprocessor, {[[P0]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH]])
 // LLVM2-DAG: [[P2:[0-9]+]]: compiler, {[[P1]]}, ir, (device-[[T]], [[ARCH]])
 // LLVM2-DAG: [[P3:[0-9]+]]: backend, {[[P2]]}, ir, (device-[[T]], [[ARCH]])
-// LLVM2-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P3]]}, ir
+// LLVM2-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P3]]}, ir
 // LLVM2-DAG: [[P5:[0-9]+]]: input, "{{.*}}hip-phases.hip", [[T]], (device-[[T]], [[ARCH2:gfx900]])
 // LLVM2-DAG: [[P6:[0-9]+]]: preprocessor, {[[P5]]}, [[T]]-cpp-output, (device-[[T]], [[ARCH2]])
 // LLVM2-DAG: [[P7:[0-9]+]]: compiler, {[[P6]]}, ir, (device-[[T]], [[ARCH2]])
 // LLVM2-DAG: [[P8:[0-9]+]]: backend, {[[P7]]}, ir, (device-[[T]], [[ARCH2]])
-// LLVM2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P8]]}, ir
+// LLVM2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P8]]}, ir
 // LLVM2-DAG: [[P10:[0-9]+]]: clang-offload-bundler, {[[P4]], [[P9]]}, ir, (device-hip)
 // LLVM2-NOT: host
 
@@ -556,10 +556,10 @@
 // PPELLVM2-DAG: [[P1:[0-9]+]]: clang-offload-unbundler, {[[P0]]}, hip-cpp-output
 // PPELLVM2-DAG: [[P2:[0-9]+]]: compiler, {[[P1]]}, ir, (device-[[T]], [[ARCH:gfx803]])
 // PPELLVM2-DAG: [[P3:[0-9]+]]: backend, {[[P2]]}, ir, (device-[[T]], [[ARCH]])
-// PPELLVM2-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH]])" {[[P3]]}, ir
+// PPELLVM2-DAG: [[P4:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH]])" {[[P3]]}, ir
 // PPELLVM2-DAG: [[P7:[0-9]+]]: compiler, {[[P1]]}, ir, (device-[[T]], [[ARCH2:gfx900]])
 // PPELLVM2-DAG: [[P8:[0-9]+]]: backend, {[[P7]]}, ir, (device-[[T]], [[ARCH2]])
-// PPELLVM2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgcn-amd-amdhsa:[[ARCH2]])" {[[P8]]}, ir
+// PPELLVM2-DAG: [[P9:[0-9]+]]: offload, "device-[[T]] (amdgpu-amd-amdhsa:[[ARCH2]])" {[[P8]]}, ir
 // PPELLVM2-DAG: [[P10:[0-9]+]]: clang-offload-bundler, {[[P4]], [[P9]]}, ir, (device-hip)
 // PPELLVM2-NOT: host
 
@@ -648,7 +648,7 @@
 // CHECK: [[B3:[0-9]+]]: backend, {[[B2]]}, ir, (device-hip, [[ARCH]])
 
 // CHECK: [[L0:[0-9]+]]: linker, {[[A3]], [[B3]]}, ir, (device-hip, [[ARCH]])
-// CHECK: offload, "device-hip (amdgcn-amd-amdhsa:[[ARCH]])" {[[L0]]}, ir
+// CHECK: offload, "device-hip (amdgpu-amd-amdhsa:[[ARCH]])" {[[L0]]}, ir
 
 //
 // Test the bindings using the new driver in LTO-mode.
@@ -663,12 +663,12 @@
 // LTO-NEXT: 4: preprocessor, {3}, hip-cpp-output, (device-hip, gfx908)
 // LTO-NEXT: 5: compiler, {4}, ir, (device-hip, gfx908)
 // LTO-NEXT: 6: backend, {5}, lto-bc, (device-hip, gfx908)
-// LTO-NEXT: 7: offload, "device-hip (amdgcn-amd-amdhsa:gfx908)" {6}, lto-bc
+// LTO-NEXT: 7: offload, "device-hip (amdgpu-amd-amdhsa:gfx908)" {6}, lto-bc
 // LTO-NEXT: 8: input, "[[INPUT]]", hip, (device-hip, gfx90a)
 // LTO-NEXT: 9: preprocessor, {8}, hip-cpp-output, (device-hip, gfx90a)
 // LTO-NEXT: 10: compiler, {9}, ir, (device-hip, gfx90a)
 // LTO-NEXT: 11: backend, {10}, lto-bc, (device-hip, gfx90a)
-// LTO-NEXT: 12: offload, "device-hip (amdgcn-amd-amdhsa:gfx90a)" {11}, lto-bc
+// LTO-NEXT: 12: offload, "device-hip (amdgpu-amd-amdhsa:gfx90a)" {11}, lto-bc
 // LTO-NEXT: 13: llvm-offload-binary, {7, 12}, image, (device-hip)
 // LTO-NEXT: 14: offload, "host-hip (x86_64-unknown-linux-gnu)" {2}, "device-hip (x86_64-unknown-linux-gnu)" {13}, ir
 // LTO-NEXT: 15: backend, {14}, assembler, (host-hip)
@@ -684,7 +684,7 @@
 // DEVICE-ONLY-NEXT: 1: preprocessor, {0}, hip-cpp-output, (device-hip, gfx90a)
 // DEVICE-ONLY-NEXT: 2: compiler, {1}, ir, (device-hip, gfx90a)
 // DEVICE-ONLY-NEXT: 3: backend, {2}, ir, (device-hip, gfx90a)
-// DEVICE-ONLY-NEXT: 4: offload, "device-hip (amdgcn-amd-amdhsa:gfx90a)" {3}, none
+// DEVICE-ONLY-NEXT: 4: offload, "device-hip (amdgpu-amd-amdhsa:gfx90a)" {3}, none
 
 //
 // Test the new driver bundling SPIR-V targets.
@@ -698,7 +698,7 @@
 // SPIRV-ONLY-NEXT: 2: compiler, {1}, ir, (device-hip, gfx1030)
 // SPIRV-ONLY-NEXT: 3: backend, {2}, lto-bc, (device-hip, gfx1030)
 // SPIRV-ONLY-NEXT: 4: linker, {3}, image, (device-hip, gfx1030)
-// SPIRV-ONLY-NEXT: 5: offload, "device-hip (amdgcn-amd-amdhsa:gfx1030)" {4}, image
+// SPIRV-ONLY-NEXT: 5: offload, "device-hip (amdgpu-amd-amdhsa:gfx1030)" {4}, image
 // SPIRV-ONLY-NEXT: 6: input, "[[INPUT]]", hip, (device-hip, amdgcnspirv)
 // SPIRV-ONLY-NEXT: 7: preprocessor, {6}, hip-cpp-output, (device-hip, amdgcnspirv)
 // SPIRV-ONLY-NEXT: 8: compiler, {7}, ir, (device-hip, amdgcnspirv)
@@ -706,4 +706,4 @@
 // SPIRV-ONLY-NEXT: 10: linker, {9}, image, (device-hip, amdgcnspirv)
 // SPIRV-ONLY-NEXT: 11: offload, "device-hip (spirv64-amd-amdhsa:amdgcnspirv)" {10}, image
 // SPIRV-ONLY-NEXT: 12: linker, {5, 11}, hip-fatbin, (device-hip)
-// SPIRV-ONLY-NEXT: 13: offload, "device-hip (amdgcn-amd-amdhsa)" {12}, none
+// SPIRV-ONLY-NEXT: 13: offload, "device-hip (amdgpu-amd-amdhsa)" {12}, none
diff --git a/clang/test/Driver/hip-rdc-device-only.hip b/clang/test/Driver/hip-rdc-device-only.hip
index b946f198160a2..921f1d3c8b4e7 100644
--- a/clang/test/Driver/hip-rdc-device-only.hip
+++ b/clang/test/Driver/hip-rdc-device-only.hip
@@ -61,7 +61,7 @@
 // RUN:   %S/Inputs/hip_multiple_inputs/a.cu -o %t.s --no-gpu-bundle-output \
 // RUN: 2>&1 | FileCheck -check-prefix=FAIL %s
 
-// COMMON: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// COMMON: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // COMMON-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // EMITBC-SAME: "-emit-llvm-bc"
 // EMITLL-SAME: "-emit-llvm"
@@ -74,7 +74,7 @@
 // EMITLL-SAME: {{.*}} "-o" {{".*a.*\.(s|ll)"}} "-x" "hip"
 // CHECK-SAME: {{.*}} {{".*a.cu"}}
 
-// COMMON: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// COMMON: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // COMMON-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // EMITBC-SAME: "-emit-llvm-bc"
 // EMITLL-SAME: "-emit-llvm"
@@ -88,10 +88,10 @@
 // COMMON-SAME: {{.*}} {{".*a.cu"}}
 
 // COMMON: "{{.*}}clang-offload-bundler" "-type={{(bc|ll|o|s)}}"
-// COMMON-SAME: "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900"
-// COMMON-SAME: "-output=a-hip-amdgcn-amd-amdhsa.{{(bc|ll|o|s)}}"
+// COMMON-SAME: "-targets=hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900"
+// COMMON-SAME: "-output=a-hip-amdgpu-amd-amdhsa.{{(bc|ll|o|s)}}"
 
-// COMMON: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// COMMON: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // COMMON-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // EMITBC-SAME: "-emit-llvm-bc"
 // EMITLL-SAME: "-emit-llvm"
@@ -104,7 +104,7 @@
 // EMITLL-SAME: {{.*}} "-o" {{".*b.*\.(s|ll)"}} "-x" "hip"
 // COMMON-SAME: {{.*}} {{".*b.hip"}}
 
-// COMMON: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// COMMON: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // COMMON-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // EMITBC-SAME: "-emit-llvm-bc"
 // EMITLL-SAME: "-emit-llvm"
@@ -118,67 +118,67 @@
 // COMMON-SAME: {{.*}} {{".*b.hip"}}
 
 // COMMON: "{{.*}}clang-offload-bundler" "-type={{(bc|ll|o|s)}}"
-// COMMON-SAME: "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900"
-// COMMON-SAME: "-output=b-hip-amdgcn-amd-amdhsa.{{(bc|ll|o|s)}}"
+// COMMON-SAME: "-targets=hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900"
+// COMMON-SAME: "-output=b-hip-amdgpu-amd-amdhsa.{{(bc|ll|o|s)}}"
 
-// SAVETEMP: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-E"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx803"
 // SAVETEMP-SAME: {{.*}} "-o" [[A_GFX803_CUI:"a.*hipi"]] "-x" "hip" {{".*a.cu"}}
-// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-emit-llvm-bc"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx803"
 // SAVETEMP-SAME: {{.*}} "-o" [[A_GFX803_TMP_BC:"a.*tmp.bc"]] "-x" "hip-cpp-output" [[A_GFX803_CUI]]
-// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-emit-llvm"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx803"
 // SAVETEMP-SAME: {{.*}} "-o" {{"a.*\.s"}} "-x" "ir" [[A_GFX803_TMP_BC]]
 
-// SAVETEMP: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-E"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx900"
 // SAVETEMP-SAME: {{.*}} "-o" [[A_GFX900_CUI:"a.*hipi"]] "-x" "hip" {{".*a.cu"}}
-// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-emit-llvm-bc"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx900"
 // SAVETEMP-SAME: {{.*}} "-o" [[A_GFX900_TMP_BC:"a.*tmp.bc"]] "-x" "hip-cpp-output" [[A_GFX900_CUI]]
-// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-emit-llvm"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx900"
 // SAVETEMP-SAME: {{.*}} "-o" {{"a.*\.s"}} "-x" "ir" [[A_GFX900_TMP_BC]]
 
 // SAVETEMP: "{{.*}}clang-offload-bundler" "-type=s"
-// SAVETEMP-SAME: "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900"
-// SAVETEMP-SAME: "-output=a-hip-amdgcn-amd-amdhsa.s"
+// SAVETEMP-SAME: "-targets=hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900"
+// SAVETEMP-SAME: "-output=a-hip-amdgpu-amd-amdhsa.s"
 
-// SAVETEMP: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-E"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx803"
 // SAVETEMP-SAME: {{.*}} "-o" [[B_GFX803_CUI:"b.*hipi"]] "-x" "hip" {{".*b.hip"}}
-// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-emit-llvm-bc"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx803"
 // SAVETEMP-SAME: {{.*}} "-o" [[B_GFX803_TMP_BC:"b.*tmp.bc"]] "-x" "hip-cpp-output" [[B_GFX803_CUI]]
-// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-emit-llvm"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx803"
 // SAVETEMP-SAME: {{.*}} "-o" {{"b.*\.s"}} "-x" "ir" [[B_GFX803_TMP_BC]]
 
-// SAVETEMP: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-E"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx900"
 // SAVETEMP-SAME: {{.*}} "-o" [[B_GFX900_CUI:"b.*hipi"]] "-x" "hip" {{".*b.hip"}}
-// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-emit-llvm-bc"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx900"
 // SAVETEMP-SAME: {{.*}} "-o" [[B_GFX900_TMP_BC:"b.*tmp.bc"]] "-x" "hip-cpp-output" [[B_GFX900_CUI]]
-// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
+// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
 // SAVETEMP-SAME: "-emit-llvm"
 // SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx900"
 // SAVETEMP-SAME: {{.*}} "-o" {{"b.*\.s"}} "-x" "ir" [[B_GFX900_TMP_BC]]
 
 // SAVETEMP: "{{.*}}clang-offload-bundler" "-type=s"
-// SAVETEMP-SAME: "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900"
-// SAVETEMP-SAME: "-output=b-hip-amdgcn-amd-amdhsa.s"
+// SAVETEMP-SAME: "-targets=hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900"
+// SAVETEMP-SAME: "-output=b-hip-amdgpu-amd-amdhsa.s"
 
 // FAIL: error: cannot specify -o when generating multiple output files
diff --git a/clang/test/Driver/hip-sanitize-options.hip b/clang/test/Driver/hip-sanitize-options.hip
index 16eccf4a76013..00f9f315cb0f7 100644
--- a/clang/test/Driver/hip-sanitize-options.hip
+++ b/clang/test/Driver/hip-sanitize-options.hip
@@ -115,7 +115,7 @@
 
 // FAIL: error: cannot find ROCm device library for ABI version 5; provide its path via '--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build without ROCm device library
 
-// XNACK: warning: ignoring 'leak' in '-fsanitize=leak' option as it is not currently supported for target 'amdgcn-amd-amdhsa'
+// XNACK: warning: ignoring 'leak' in '-fsanitize=leak' option as it is not currently supported for target 'amdgpu-amd-amdhsa'
 // XNACK: warning: ignoring '-fsanitize=address' option for offload arch 'gfx900:xnack-' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead
 // XNACK: warning: ignoring '-fsanitize=address' option for offload arch 'gfx906' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead
 // XNACK-DAG: {{"[^"]*clang[^"]*".* "-mlink-bitcode-file" ".*asanrtl.bc".* "-target-cpu" "gfx900".* "-target-feature" "\+xnack".* "-fsanitize=address"}}
@@ -135,7 +135,7 @@
 // NOGPU-DAG: {{"[^"]*clang[^"]*".* "-target-cpu" "gfx900".* "-target-feature" "-xnack"}}
 // NOGPU-DAG: {{"[^"]*clang[^"]*".* "-target-cpu" "gfx906"}}
 // NOGPU-DAG: {{"[^"]*clang[^"]*".* "-triple" "x86_64-unknown-linux-gnu".* "-fsanitize=address,leak"}}
-// NOGPUNEG-NOT: warning: ignoring '-fsanitize=leak' option as it is not currently supported for target 'amdgcn-amd-amdhsa'
+// NOGPUNEG-NOT: warning: ignoring '-fsanitize=leak' option as it is not currently supported for target 'amdgpu9-amd-amdhsa'
 // NOGPUNEG-NOT: warning: ignoring '-fsanitize=address' option for offload arch 'gfx900:xnack-' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead
 // NOGPUNEG-NOT: warning: ignoring '-fsanitize=address' option for offload arch 'gfx906' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead
 // NOGPUNEG-NOT: {{"[^"]*clang[^"]*".* "-mlink-bitcode-file" ".*asanrtl.bc".* "-target-cpu" "gfx900".* "-target-feature" "\+xnack".* "-fsanitize=address"}}
@@ -150,30 +150,28 @@
 // NOGPUNEG-NOT: {{"[^"]*clang[^"]*".* "-mlink-bitcode-file" ".*asanrtl.bc".* "-target-cpu" "gfx906"}}
 // NOGPUNEG-NOT: {{"[^"]*lld(\.exe){0,1}".* ".*hip.bc"}}
 
-// INVALIDCOMBINATION1-DAG: warning: ignoring 'fuzzer' in '-fsanitize=address,fuzzer' option as it is not currently supported for target 'amdgcn-amd-amdhsa' [-Woption-ignored]
-// INVALIDCOMBINATION2-DAG: warning: ignoring 'fuzzer' in '-fsanitize=fuzzer,address' option as it is not currently supported for target 'amdgcn-amd-amdhsa' [-Woption-ignored]
+// INVALIDCOMBINATION1-DAG: warning: ignoring 'fuzzer' in '-fsanitize=address,fuzzer' option as it is not currently supported for target 'amdgpu-amd-amdhsa' [-Woption-ignored]
+// INVALIDCOMBINATION2-DAG: warning: ignoring 'fuzzer' in '-fsanitize=fuzzer,address' option as it is not currently supported for target 'amdgpu-amd-amdhsa' [-Woption-ignored]
 // INVALIDCOMBINATION-DAG: {{"[^"]*clang[^"]*".* "-mlink-bitcode-file" ".*asanrtl.bc".* "-target-cpu" "gfx900".* "-target-feature" "\+xnack".* "-fsanitize=address"}}
 // INVALIDCOMBINATION-DAG: {{"[^"]*clang[^"]*".* "-triple" "x86_64-unknown-linux-gnu".* "-fsanitize=address,fuzzer,fuzzer-no-link"}}
 
-// MULT1: warning: ignoring 'leak' in '-fsanitize=leak' option as it is not currently supported for target 'amdgcn-amd-amdhsa' [-Woption-ignored]
-// MULT1: warning: ignoring 'fuzzer' in '-fsanitize=address,fuzzer' option as it is not currently supported for target 'amdgcn-amd-amdhsa' [-Woption-ignored]
+// MULT1: warning: ignoring 'leak' in '-fsanitize=leak' option as it is not currently supported for target 'amdgpu-amd-amdhsa' [-Woption-ignored]
+// MULT1: warning: ignoring 'fuzzer' in '-fsanitize=address,fuzzer' option as it is not currently supported for target 'amdgpu-amd-amdhsa' [-Woption-ignored]
 
 // FIXME: This should produce a separate warning for address and fuzzer. The xnack+ hint only applies to the address part
 // MULT1: warning: ignoring '-fsanitize=address,fuzzer' option for offload arch 'gfx908:xnack-' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead [-Woption-ignored]
 
-// MULT2: warning: ignoring 'leak' in '-fsanitize=leak' option as it is not currently supported for target 'amdgcn-amd-amdhsa' [-Woption-ignored]
-// MULT2: warning: ignoring 'fuzzer' in '-fsanitize=fuzzer,address' option as it is not currently supported for target 'amdgcn-amd-amdhsa' [-Woption-ignored]
-
-// FIXME: This should produce a separate warning for address and fuzzer. The xnack+ hint only applies to the address part
+// MULT2: warning: ignoring 'leak' in '-fsanitize=leak' option as it is not currently supported for target 'amdgpu-amd-amdhsa' [-Woption-ignored]
+// MULT2: warning: ignoring 'fuzzer' in '-fsanitize=fuzzer,address' option as it is not currently supported for target 'amdgpu-amd-amdhsa' [-Woption-ignored]
 // MULT2: warning: ignoring '-fsanitize=fuzzer,address' option for offload arch 'gfx908:xnack-' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead [-Woption-ignored]
 
 // XNACK2-DAG: {{"[^"]*clang[^"]*".* "-mlink-bitcode-file" ".*asanrtl.bc".* "-target-cpu" "gfx900".* "-target-feature" "\+xnack".* "-fsanitize=address"}}
 // XNACK2-DAG: {{"[^"]*clang[^"]*".* "-target-cpu" "gfx908"}}
 // XNACK2-DAG: {{"[^"]*clang[^"]*".* "-triple" "x86_64-unknown-linux-gnu".* "-fsanitize=address,fuzzer,fuzzer-no-link,leak"}}
 
-// UNSUPPORTEDERROR: error: 'leak' in '-fsanitize=leak' option is not currently supported for target 'amdgcn-amd-amdhsa'
+// UNSUPPORTEDERROR: error: 'leak' in '-fsanitize=leak' option is not currently supported for target 'amdgpu-amd-amdhsa'
 // XNACKERROR: error: '-fsanitize=address' option for offload arch 'gfx900:xnack-' is not currently supported there. Use it with an offload arch containing 'xnack+' instead
-// INVALIDCOMBINATIONERROR: error: 'fuzzer' in '-fsanitize=fuzzer,address' option is not currently supported for target 'amdgcn-amd-amdhsa'
+// INVALIDCOMBINATIONERROR: error: 'fuzzer' in '-fsanitize=fuzzer,address' option is not currently supported for target 'amdgpu-amd-amdhsa'
 
-// WARNSANCOV: warning: ignoring '-fsanitize-coverage=inline-bool-flag' option as it is not currently supported for target 'amdgcn-amd-amdhsa'
-// ERRSANCOV: error: '-fsanitize-coverage-stack-depth-callback-min=42' option is not currently supported for target 'amdgcn-amd-amdhsa'
+// WARNSANCOV: warning: ignoring '-fsanitize-coverage=inline-bool-flag' option as it is not currently supported for target 'amdgpu-amd-amdhsa'
+// ERRSANCOV: error: '-fsanitize-coverage-stack-depth-callback-min=42' option is not currently supported for target 'amdgpu-amd-amdhsa'
diff --git a/clang/test/Driver/hip-save-temps.hip b/clang/test/Driver/hip-save-temps.hip
index 6ad0ef6dc4e77..cddf8ef8c60cc 100644
--- a/clang/test/Driver/hip-save-temps.hip
+++ b/clang/test/Driver/hip-save-temps.hip
@@ -35,23 +35,23 @@
 // RDCL: "{{.*clang.*}}" "-cc1as" {{.*}} "-o" "hip-save-temps-host-x86_64-unknown-linux-gnu.o"
 
 // device object paths
-// CHECK: {{".*clang.*"}} "-cc1" {{.*}} "-E" {{.*}} [[CPU:"-target-cpu" "gfx900"]] {{.*}}  "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.hipi"
-// NORDC: {{".*clang.*"}} "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} [[CPU]] {{.*}} "-disable-llvm-passes" {{.*}} "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.bc"
-// RDC: {{".*clang.*"}} "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} [[CPU]] {{.*}} "-disable-llvm-passes" {{.*}} "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.tmp.bc"
+// CHECK: {{".*clang.*"}} "-cc1" {{.*}} "-E" {{.*}} [[CPU:"-target-cpu" "gfx900"]] {{.*}}  "-o" "hip-save-temps-hip-amdgpu9.00-amd-amdhsa-gfx900.hipi"
+// NORDC: {{".*clang.*"}} "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} [[CPU]] {{.*}} "-disable-llvm-passes" {{.*}} "-o" "hip-save-temps-hip-amdgpu9.00-amd-amdhsa-gfx900.bc"
+// RDC: {{".*clang.*"}} "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} [[CPU]] {{.*}} "-disable-llvm-passes" {{.*}} "-o" "hip-save-temps-hip-amdgpu9.00-amd-amdhsa-gfx900.tmp.bc"
 
-// RDC: {{".*clang.*"}} "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} [[CPU]] {{.*}} "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.{{(bc|o)}}"
+// RDC: {{".*clang.*"}} "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} [[CPU]] {{.*}} "-o" "hip-save-temps-hip-amdgpu9.00-amd-amdhsa-gfx900.{{(bc|o)}}"
 // CHECK-NOT: "{{.*}}llvm-link"
 // CHECK-NOT: "{{.*}}opt"
 // CHECK-NOT: "{{.*}}llc"
-// NORDC: {{.*lld.*}}"-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.out"
+// NORDC: {{.*lld.*}}"-o" "hip-save-temps-hip-amdgpu9.00-amd-amdhsa-gfx900.out"
 // RDCL: "{{.*lld.*}}" {{.*}} "-plugin-opt=-amdgpu-internalize-symbols" {{.*}}"-save-temps"
-// RDCL-SAME: "-o" "a.out-hip-amdgcn-amd-amdhsa-gfx900"
+// RDCL-SAME: "-o" "a.out-hip-amdgpu9.00-amd-amdhsa-gfx900"
 // RDCC: "{{.*clang.*}}" "-cc1" {{.*}} "-E" {{.*}} "-o" "hip-save-temps-host-x86_64-unknown-linux-gnu.hipi"
 // RDCC: "{{.*clang.*}}" "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} "-o" "hip-save-temps-host-x86_64-unknown-linux-gnu.bc"
 // RDCC: "{{.*clang.*}}" "-cc1" {{.*}} "-S" {{.*}} "-o" "hip-save-temps-host-x86_64-unknown-linux-gnu.s"
 // RDCC: "{{.*clang.*}}" "-cc1as" {{.*}} "-o" "hip-save-temps-host-x86_64-unknown-linux-gnu.o"
 // RDCC: "{{.*clang-offload-bundler.*}}" {{.*}} "-output=hip-save-temps.o"
-// RDCL: "{{.*clang-offload-bundler.*}}" {{.*}} "-output=hip-save-temps-hip-amdgcn-amd-amdhsa.hipfb"
+// RDCL: "{{.*clang-offload-bundler.*}}" {{.*}} "-output=hip-save-temps-hip-amdgpu-amd-amdhsa.hipfb"
 // RDCL: "{{.*clang.*}}" "-target" "x86_64-unknown-linux-gnu" "-o" "{{.*}}.o" "-x" "assembler" "{{.*}}.mcin" "-c"
 
 // -fno-gpu-rdc host object path
@@ -68,17 +68,35 @@
 // RUN: %clang -### -ccc-print-bindings --target=x86_64-linux-gnu -nogpulib \
 // RUN:   -save-temps -fno-gpu-rdc -nogpuinc --offload-arch=gfx906 -c %s 2>&1 | \
 // RUN:   FileCheck -check-prefixes=NORDC-BINDINGS %s
-//      NORDC-BINDINGS: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HIPI:.+]]"
-// NORDC-BINDINGS-NEXT: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[HIPI]]"], output: "[[TMP_BC:.+]]"
-// NORDC-BINDINGS-NEXT: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[TMP_BC]]"], output: "[[BC:.+]]"
-// NORDC-BINDINGS-NEXT: "amdgcn-amd-amdhsa" - "Offload::Packager", inputs: ["[[BC]]"], output: "[[OUTPUT:.+]]"
-// NORDC-BINDINGS-NEXT: "amdgcn-amd-amdhsa" - "Offload::Linker", inputs: ["[[OUTPUT]]"], output: "[[FATBIN:.+]]"
+//      NORDC-BINDINGS: "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HIPI:.+]]"
+// NORDC-BINDINGS-NEXT: "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[HIPI]]"], output: "[[TMP_BC:.+]]"
+// NORDC-BINDINGS-NEXT: "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[TMP_BC]]"], output: "[[BC:.+]]"
+// NORDC-BINDINGS-NEXT: "amdgpu-amd-amdhsa" - "Offload::Packager", inputs: ["[[BC]]"], output: "[[OUTPUT:.+]]"
+// NORDC-BINDINGS-NEXT: "amdgpu-amd-amdhsa" - "Offload::Linker", inputs: ["[[OUTPUT]]"], output: "[[FATBIN:.+]]"
+
+
+
 
 // Check to ensure we have a .tmp for unoptimized bitcode with -fgpu-rdc.
 // RUN: %clang -### -ccc-print-bindings --target=x86_64-linux-gnu -nogpulib \
 // RUN:   -save-temps -fgpu-rdc -nogpuinc --offload-arch=gfx906 -c %s 2>&1 | \
 // RUN:   FileCheck -check-prefixes=RDC-BINDINGS %s
-//      RDC-BINDINGS: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HIPI:.+]]"
-// RDC-BINDINGS-NEXT: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[HIPI]]"], output: "[[TMP_BC:.+]]"
-// RDC-BINDINGS-NEXT: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[TMP_BC]]"], output: "[[BC:.+]]"
+//      RDC-BINDINGS: # "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HIPI:.+]]"
+// RDC-BINDINGS-NEXT: # "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[HIPI]]"], output: "[[TMP_BC:.+]]"
+// RDC-BINDINGS-NEXT: # "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[TMP_BC]]"], output: "[[BC:.+]]"
 // RDC-BINDINGS-NEXT: # "x86_64-unknown-linux-gnu" - "Offload::Packager", inputs: ["[[BC]]"], output: "[[OUTPUT:.+]]"
+
+
+
+// RUN: %clang -### -ccc-print-bindings --target=x86_64-linux-gnu -nogpulib \
+// RUN:   -save-temps -fno-gpu-rdc -nogpuinc --offload-arch=gfx906 --offload-arch=gfx1030 -c %s 2>&1 | \
+// RUN:   FileCheck -check-prefixes=NORDC-BINDINGS-MULTIARCH %s
+//
+//      NORDC-BINDINGS-MULTIARCH: "amdgpu10.30-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HIPI_0:.+]]"
+// NORDC-BINDINGS-MULTIARCH-NEXT: "amdgpu10.30-amd-amdhsa" - "clang", inputs: ["[[HIPI_0]]"], output: "[[TMP_BC_0:.+]]"
+// NORDC-BINDINGS-MULTIARCH-NEXT: "amdgpu10.30-amd-amdhsa" - "clang", inputs: ["[[TMP_BC_0]]"], output: "[[BC_0:.+]]"
+// NORDC-BINDINGS-MULTIARCH-NEXT: "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HIPI_1:.+]]"
+// NORDC-BINDINGS-MULTIARCH-NEXT: "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[HIPI_1]]"], output: "[[TMP_BC_1:.+]]"
+// NORDC-BINDINGS-MULTIARCH-NEXT: "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[TMP_BC_1]]"], output: "[[BC_1:.+]]"
+// NORDC-BINDINGS-MULTIARCH-NEXT: "amdgpu-amd-amdhsa" - "Offload::Packager", inputs: ["[[BC_0]]", "[[BC_1]]"], output: "[[OUTPUT:.+]]"
+// NORDC-BINDINGS-MULTIARCH-NEXT: "amdgpu-amd-amdhsa" - "Offload::Linker", inputs: ["[[OUTPUT]]"], output: "[[FATBIN:.+]]"
diff --git a/clang/test/Driver/hip-target-id.hip b/clang/test/Driver/hip-target-id.hip
index b7889b1634404..bd602369ccca0 100644
--- a/clang/test/Driver/hip-target-id.hip
+++ b/clang/test/Driver/hip-target-id.hip
@@ -21,7 +21,7 @@
 // RUN:   --no-offload-new-driver -fgpu-rdc \
 // RUN:   %s 2>&1 | FileCheck --check-prefixes=CHECK %s
 
-// CHECK: [[CLANG:"[^"]*clang[^"]*"]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG:"[^"]*clang[^"]*"]] "-cc1" "-triple" "amdgpu9.08-amd-amdhsa"
 // CHECK-SAME: "-target-cpu" "gfx908"
 // CHECK-SAME: "-target-feature" "+xnack"
 // CHECK-SAME: "-target-feature" "+sramecc"
@@ -31,10 +31,15 @@
 // TMP-SAME: "-target-feature" "+xnack"
 // TMP-SAME: "-target-feature" "+sramecc"
 
+// TMP: [[CLANG:"[^"]*clang[^"]*"]] "-cc1as" "-triple" "amdgpu9.08-amd-amdhsa"
+// TMP-SAME: "-target-cpu" "gfx908"
+// TMP-SAME: "-target-feature" "+sramecc"
+// TMP-SAME: "-target-feature" "+xnack"
+
 // CHECK: [[LLD:"[^"]*lld[^"]*"]] {{.*}} "-plugin-opt=mcpu=gfx908"
 // CHECK-SAME: "-plugin-opt=-mattr=+xnack,+sramecc"
 
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu9.08-amd-amdhsa"
 // CHECK-SAME: "-target-cpu" "gfx908"
 // CHECK-SAME: "-target-feature" "+xnack"
 // CHECK-SAME: "-target-feature" "-sramecc"
@@ -43,7 +48,7 @@
 // CHECK-SAME: "-plugin-opt=-mattr=+xnack,-sramecc"
 
 // CHECK: {{"[^"]*clang-offload-bundler[^"]*"}}
-// CHECK-SAME: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx908:sramecc+:xnack+,hipv4-amdgcn-amd-amdhsa--gfx908:sramecc-:xnack+"
+// CHECK-SAME: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgpu9.08-amd-amdhsa--gfx908:sramecc+:xnack+,hipv4-amdgpu9.08-amd-amdhsa--gfx908:sramecc-:xnack+"
 
 // Check canonicalization and repeating of target ID.
 
@@ -54,10 +59,10 @@
 // RUN:   --offload-arch=fiji \
 // RUN:   --no-offload-new-driver --rocm-path=%S/Inputs/rocm \
 // RUN:   %s 2>&1 | FileCheck -check-prefix=FIJI %s
-// FIJI: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx803"
+// FIJI: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgpu8.03-amd-amdhsa--gfx803"
 
-// RUN: not %clang -### --target=x86_64-linux-gnu \
-// RUN:   -x hip \
+// RUN: %clang -### --target=x86_64-linux-gnu \
+// RUN:   -x hip -nogpulib \
 // RUN:   --offload-arch=gfx900:xnack- \
 // RUN:   --offload-arch=gfx900:xnack+ \
 // RUN:   --offload-arch=gfx908:sramecc+ \
@@ -65,4 +70,4 @@
 // RUN:   --offload-arch=gfx906 \
 // RUN:   --no-offload-new-driver --rocm-path=%S/Inputs/rocm \
 // RUN:   %s 2>&1 | FileCheck -check-prefix=MULTI %s
-// MULTI: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx900:xnack+,hipv4-amdgcn-amd-amdhsa--gfx900:xnack-,hipv4-amdgcn-amd-amdhsa--gfx908:sramecc+,hipv4-amdgcn-amd-amdhsa--gfx908:sramecc-,hipv4-amdgcn-amd-amdhsa--gfx906"
+// MULTI: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgpu9.00-amd-amdhsa--gfx900:xnack+,hipv4-amdgpu9.00-amd-amdhsa--gfx900:xnack-,hipv4-amdgpu9.08-amd-amdhsa--gfx908:sramecc+,hipv4-amdgpu9.08-amd-amdhsa--gfx908:sramecc-,hipv4-amdgpu9.06-amd-amdhsa--gfx906"
diff --git a/clang/test/Driver/hip-thinlto.hip b/clang/test/Driver/hip-thinlto.hip
index 53fd0485cb16b..8ec0ff5130fcc 100644
--- a/clang/test/Driver/hip-thinlto.hip
+++ b/clang/test/Driver/hip-thinlto.hip
@@ -1,9 +1,9 @@
 // RUN: %clang -foffload-lto=thin -nogpulib -nogpuinc %s -### 2>&1 | FileCheck %s
 
-// CHECK: "--device-compiler=amdgcn-amd-amdhsa=-flto=thin"
-// CHECK-SAME: "--device-linker=amdgcn-amd-amdhsa=-plugin-opt=-force-import-all"
-// CHECK-SAME: "--device-linker=amdgcn-amd-amdhsa=-plugin-opt=-avail-extern-to-local"
-// CHECK-SAME: "--device-linker=amdgcn-amd-amdhsa=-plugin-opt=-avail-extern-gv-in-addrspace-to-local=3"
+// CHECK: "--device-compiler=amdgpu-amd-amdhsa=-flto=thin"
+// CHECK-SAME: "--device-linker=amdgpu-amd-amdhsa=-plugin-opt=-force-import-all"
+// CHECK-SAME: "--device-linker=amdgpu-amd-amdhsa=-plugin-opt=-avail-extern-to-local"
+// CHECK-SAME: "--device-linker=amdgpu-amd-amdhsa=-plugin-opt=-avail-extern-gv-in-addrspace-to-local=3"
 int main(int, char *[]) {
   return 0;
 }
diff --git a/clang/test/Driver/hip-toolchain-device-only.hip b/clang/test/Driver/hip-toolchain-device-only.hip
index 6af8c719e8f01..01ea00eef1f61 100644
--- a/clang/test/Driver/hip-toolchain-device-only.hip
+++ b/clang/test/Driver/hip-toolchain-device-only.hip
@@ -5,7 +5,7 @@
 
 // CHECK-NOT: error:
 
-// CHECK: [[CLANG:".*clang.*"]] "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG:".*clang.*"]] "-cc1"{{.*}} "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-fcuda-is-device"
 // CHECK-SAME: "-target-cpu" "gfx803"
 // CHECK-SAME: {{.*}} "-o" [[OBJ_DEV_A_803:".*o"]] "-x" "hip"
@@ -13,7 +13,7 @@
 // CHECK: [[LLD: ".*lld.*"]] "-flavor" "gnu" "-m" "elf64_amdgpu" "--no-undefined" "-shared"
 // CHECK-SAME: "-o" "[[IMG_DEV_A_803:.*out]]" [[OBJ_DEV_A_803]]
 
-// CHECK: [[CLANG:".*clang.*"]] "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG:".*clang.*"]] "-cc1"{{.*}} "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-fcuda-is-device"
 // CHECK-SAME: "-target-cpu" "gfx900"
diff --git a/clang/test/Driver/hip-toolchain-mllvm.hip b/clang/test/Driver/hip-toolchain-mllvm.hip
index bedb053b9006c..36c9a4774d5da 100644
--- a/clang/test/Driver/hip-toolchain-mllvm.hip
+++ b/clang/test/Driver/hip-toolchain-mllvm.hip
@@ -26,12 +26,12 @@
 // RUN:   -Xoffload-linker -mllvm=-inline-threshold=100 \
 // RUN:   %s 2>&1 | FileCheck -check-prefix=NEG %s
 
-// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: {{.*}} "-target-cpu" "gfx803"
 // CHECK-SAME: {{.*}} "-mllvm" "-unroll-count=10" {{.*}}
 
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: {{.*}} "-target-cpu" "gfx900"
 // CHECK-SAME: {{.*}} "-mllvm" "-unroll-count=10" {{.*}}
diff --git a/clang/test/Driver/hip-toolchain-no-rdc.hip b/clang/test/Driver/hip-toolchain-no-rdc.hip
index 6f148ce01ff30..76bae3456e215 100644
--- a/clang/test/Driver/hip-toolchain-no-rdc.hip
+++ b/clang/test/Driver/hip-toolchain-no-rdc.hip
@@ -65,7 +65,7 @@
 // Compile device code in a.cu to code object for gfx803.
 //
 
-// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // OLD-SAME: "-emit-obj"
 // NEW-SAME: "-emit-llvm-bc"
@@ -89,7 +89,7 @@
 // Compile device code in a.cu to code object for gfx900.
 //
 
-// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-{{(obj|llvm-bc)}}"
 // CHECK-SAME: {{.*}} "-main-file-name" "a.cu"
@@ -114,22 +114,22 @@
 
 // OLD: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
 // OLD-SAME: "-bundle-align=4096"
-// OLD-SAME: "-targets={{.*}},hipv4-amdgcn-amd-amdhsa--gfx803,hipv4-amdgcn-amd-amdhsa--gfx900"
+// OLD-SAME: "-targets={{.*}},hipv4-amdgpu8.03-amd-amdhsa--gfx803,hipv4-amdgpu9.00-amd-amdhsa--gfx900"
 // OLD-SAME: "-input={{.*}}" "-input=[[IMG_DEV_A_803]]" "-input=[[IMG_DEV_A_900]]" "-output=[[BUNDLE_A:.*hipfb]]"
 
 // NEW: [[PACKAGER:".*llvm-offload-binary"]] "-o" "[[PACKAGE_A:.*.out]]"
-// NEW-SAME: "--image=file=[[OBJ_DEV_A_803]],triple=amdgcn-amd-amdhsa,arch=gfx803,kind=hip"
-// NEW-SAME: "--image=file=[[OBJ_DEV_A_900]],triple=amdgcn-amd-amdhsa,arch=gfx900,kind=hip"
+// NEW-SAME: "--image=file=[[OBJ_DEV_A_803]],triple=amdgpu8.03-amd-amdhsa,arch=gfx803,kind=hip"
+// NEW-SAME: "--image=file=[[OBJ_DEV_A_900]],triple=amdgpu9.00-amd-amdhsa,arch=gfx900,kind=hip"
 
 // NEW: [[WRAPPER:".*clang-linker-wrapper]]"
-// NEW-SAME: "--device-compiler=amdgcn-amd-amdhsa=-flto=full"
+// NEW-SAME: "--device-compiler=amdgpu-amd-amdhsa=-flto=full"
 // NEW-SAME: "--no-lto"
 // NEW-SAME: "--host-triple=x86_64-unknown-linux-gnu"
 // NEW-SAME: "--emit-fatbin-only"
 // NEW-SAME: "-o" "[[HIPFB_A:.*.hipfb]]" "[[PACKAGE_A]]"
 
 // CHECK: [[CLANG]] "-cc1" "-triple" "x86_64-unknown-linux-gnu"
-// CHECK-SAME: "-aux-triple" "amdgcn-amd-amdhsa"
+// CHECK-SAME: "-aux-triple" "amdgpu-amd-amdhsa"
 // CHECK-SAME: "-emit-obj"
 // CHECK-SAME: {{.*}} "-main-file-name" "a.cu"
 // OLD-SAME: {{.*}} "-fcuda-include-gpubinary" "[[BUNDLE_A]]"
@@ -141,7 +141,7 @@
 // Compile device code in b.hip to code object for gfx803.
 //
 
-// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-{{(obj|llvm-bc)}}"
 // CHECK-SAME: {{.*}} "-main-file-name" "b.hip"
@@ -164,7 +164,7 @@
 // Compile device code in b.hip to code object for gfx900.
 //
 
-// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-{{(obj|llvm-bc)}}"
 // CHECK-SAME: {{.*}} "-main-file-name" "b.hip"
@@ -189,21 +189,21 @@
 
 // OLD: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
 // OLD-SAME: "-bundle-align=4096"
-// OLD-SAME: "-targets={{.*}},hipv4-amdgcn-amd-amdhsa--gfx803,hipv4-amdgcn-amd-amdhsa--gfx900"
+// OLD-SAME: "-targets={{.*}},hipv4-amdgpu8.03-amd-amdhsa--gfx803,hipv4-amdgpu9.00-amd-amdhsa--gfx900"
 // OLD-SAME: "-input={{.*}}" "-input=[[IMG_DEV_B_803]]" "-input=[[IMG_DEV_B_900]]" "-output=[[BUNDLE_B:.*hipfb]]"
 
 // NEW: [[PACKAGER:".*llvm-offload-binary"]] "-o" "[[PACKAGE_B:.*.out]]"
-// NEW-SAME: "--image=file=[[OBJ_DEV_B_803]],triple=amdgcn-amd-amdhsa,arch=gfx803,kind=hip"
-// NEW-SAME: "--image=file=[[OBJ_DEV_B_900]],triple=amdgcn-amd-amdhsa,arch=gfx900,kind=hip"
+// NEW-SAME: "--image=file=[[OBJ_DEV_B_803]],triple=amdgpu8.03-amd-amdhsa,arch=gfx803,kind=hip"
+// NEW-SAME: "--image=file=[[OBJ_DEV_B_900]],triple=amdgpu9.00-amd-amdhsa,arch=gfx900,kind=hip"
 
 // NEW: [[WRAPPER:".*clang-linker-wrapper]]"
-// NEW-SAME: "--device-compiler=amdgcn-amd-amdhsa=-flto=full"
+// NEW-SAME: "--device-compiler=amdgpu-amd-amdhsa=-flto=full"
 // NEW-SAME: "--no-lto"
 // NEW-SAME: "--emit-fatbin-only"
 // NEW-SAME: "-o" "[[HIPFB_B:.*.hipfb]]" "[[PACKAGE_B]]"
 
 // CHECK: [[CLANG]] "-cc1" "-triple" "x86_64-unknown-linux-gnu"
-// CHECK-SAME: "-aux-triple" "amdgcn-amd-amdhsa"
+// CHECK-SAME: "-aux-triple" "amdgpu-amd-amdhsa"
 // CHECK-SAME: "-emit-obj"
 // CHECK-SAME: {{.*}} "-main-file-name" "b.hip"
 // OLD-SAME: {{.*}} "-fcuda-include-gpubinary" "[[BUNDLE_B]]"
@@ -231,13 +231,13 @@
 // Check mixed AMDGCNSPIRV and concrete GPU arch.
 //
 
-// AMDGCNSPIRV: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}}"-emit-obj" {{.*}} "-target-cpu" "gfx900"{{.*}} "-o" "[[GFX900_OBJ:.*o]]"
+// AMDGCNSPIRV: "-cc1" "-triple" "amdgpu9.00-amd-amdhsa" {{.*}}"-emit-obj" {{.*}} "-target-cpu" "gfx900"{{.*}} "-o" "[[GFX900_OBJ:.*o]]"
 // AMDGCNSPIRV: {{".*lld.*"}} {{.*}}"-plugin-opt=mcpu=gfx900" {{.*}} "-o" "[[GFX900_CO:.*out]]" {{.*}}"[[GFX900_OBJ]]"
 // AMDGCNSPIRV: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}}"-flto=full"{{.*}} "-fembed-bitcode=marker" "-disable-llvm-passes" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]"
 // AMDGCNSPIRV: {{".*llvm-link.*"}} "-o" "[[AMDGCNSPV_TMP:.*bc]]" "[[AMDGCNSPV_BC]]"
 // AMDGCNSPIRV: {{".*llvm-spirv.*"}} "--spirv-max-version=1.6" "--spirv-ext=+all" {{.*}} "[[AMDGCNSPV_TMP]]" {{.*}}"-o" "[[AMDGCNSPV_CO:.*out]]"
 // AMDGCNSPIRV: {{".*clang-offload-bundler.*"}} "-type=o"
-// AMDGCNSPIRV-SAME: "-targets={{.*}}hipv4-amdgcn-amd-amdhsa--gfx900,hipv4-spirv64-amd-amdhsa--amdgcnspirv"
+// AMDGCNSPIRV-SAME: "-targets={{.*}}hipv4-amdgpu9.00-amd-amdhsa--gfx900,hipv4-spirv64-amd-amdhsa--amdgcnspirv"
 // AMDGCNSPIRV-SAME: "-input=[[GFX900_CO]]" "-input=[[AMDGCNSPV_CO]]"
 // AMDGCNSPIRV-NEW: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}} "-o" "[[AMDGCNSPV_BC:[^"]*]]"
 
@@ -245,5 +245,5 @@
 // RUN: %clang -### --target=x86_64-linux-gnu -fno-gpu-rdc -nogpulib -nogpuinc \
 // RUN:   --offload-new-driver --offload-arch=gfx908 -v %s 2>&1 | FileCheck %s --check-prefix=VERBOSE
 // VERBOSE: clang-linker-wrapper
-// VERBOSE-NOT: --device-compiler=amdgcn-amd-amdhsa=-v {{.*}}-o {{.*}}.hipfb
+// VERBOSE-NOT: --device-compiler=amdgpu{{.*}}-amd-amdhsa=-v {{.*}}-o {{.*}}.hipfb
 // VERBOSE-NOT: --wrapper-verbose {{.*}}-o {{.*}}.hipfb
diff --git a/clang/test/Driver/hip-toolchain-opt.hip b/clang/test/Driver/hip-toolchain-opt.hip
index 22edf4107004e..b0d06e239fc57 100644
--- a/clang/test/Driver/hip-toolchain-opt.hip
+++ b/clang/test/Driver/hip-toolchain-opt.hip
@@ -62,7 +62,7 @@
 // RUN:   %S/Inputs/hip_multiple_inputs/b.hip \
 // RUN: 2>&1 | FileCheck --check-prefixes=ALL,O0-CGO2 %s
 
-// ALL: "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// ALL: "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // DEFAULT-NOT: "-O{{.}}"
 // O0-SAME: "-O0"
 // O1-SAME: "-O1"
@@ -76,14 +76,14 @@
 
 // ALL: "{{.*}}clang-linker-wrapper{{.*}}" "--should-extract=gfx900"
 // DEFAULT-NOT: "--device-compiler=amdgcn-amd-amdhsa=-O{{.*}}"
-// O0-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O0"
-// O1-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O1"
-// O2-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O2"
-// O3-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O3"
-// Os-SAME: "--device-compiler=amdgcn-amd-amdhsa=-Os"
-// Oz-SAME: "--device-compiler=amdgcn-amd-amdhsa=-Oz"
-// Og-SAME: "--device-compiler=amdgcn-amd-amdhsa=-Og"
-// O0-CGO2-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O0"
+// O0-SAME: "--device-compiler=amdgpu-amd-amdhsa=-O0"
+// O1-SAME: "--device-compiler=amdgpu-amd-amdhsa=-O1"
+// O2-SAME: "--device-compiler=amdgpu-amd-amdhsa=-O2"
+// O3-SAME: "--device-compiler=amdgpu-amd-amdhsa=-O3"
+// Os-SAME: "--device-compiler=amdgpu-amd-amdhsa=-Os"
+// Oz-SAME: "--device-compiler=amdgpu-amd-amdhsa=-Oz"
+// Og-SAME: "--device-compiler=amdgpu-amd-amdhsa=-Og"
+// O0-CGO2-SAME: "--device-compiler=amdgpu-amd-amdhsa=-O0"
 
 // ALL: "-cc1" "-triple" "x86_64-unknown-linux-gnu"
 // DEFAULT-NOT: "-O{{.}}"
diff --git a/clang/test/Driver/hip-toolchain-rdc-separate.hip b/clang/test/Driver/hip-toolchain-rdc-separate.hip
index b515050b36305..63399eb2f0c8f 100644
--- a/clang/test/Driver/hip-toolchain-rdc-separate.hip
+++ b/clang/test/Driver/hip-toolchain-rdc-separate.hip
@@ -9,7 +9,7 @@
 // RUN:   %S/Inputs/hip_multiple_inputs/b.hip \
 // RUN: 2>&1 | FileCheck %s
 
-// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -22,7 +22,7 @@
 // CHECK-SAME: {{.*}} "-o" "[[A_BC1:.*o]]" "-x" "hip"
 // CHECK-SAME: {{.*}} [[A_SRC:".*a.cu"]]
 
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -35,7 +35,7 @@
 // CHECK-SAME: {{.*}} [[A_SRC]]
 
 // CHECK: [[CLANG]] "-cc1" "-triple" "x86_64-unknown-linux-gnu"
-// CHECK-SAME: "-aux-triple" "amdgcn-amd-amdhsa"
+// CHECK-SAME: "-aux-triple" "amdgpu-amd-amdhsa"
 // CHECK-SAME: "-emit-obj"
 // CHECK-SAME: {{.*}} "-main-file-name" "a.cu"
 // CHECK-SAME: "-fgpu-rdc"
@@ -43,10 +43,10 @@
 // CHECK-SAME: {{.*}} [[A_SRC]]
 
 // CHECK: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
-// CHECK-SAME: "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900,host-x86_64-unknown-linux-gnu"
+// CHECK-SAME: "-targets=hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900,host-x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-output=[[A_O:.*a.o]]" "-input=[[A_BC1]]" "-input=[[A_BC2]]" "-input=[[A_OBJ_HOST]]"
 
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -59,7 +59,7 @@
 // CHECK-SAME: {{.*}} "-o" "[[B_BC1:.*o]]" "-x" "hip"
 // CHECK-SAME: {{.*}} [[B_SRC:".*b.hip"]]
 
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -72,7 +72,7 @@
 // CHECK-SAME: {{.*}} [[B_SRC]]
 
 // CHECK: [[CLANG]] "-cc1" "-triple" "x86_64-unknown-linux-gnu"
-// CHECK-SAME: "-aux-triple" "amdgcn-amd-amdhsa"
+// CHECK-SAME: "-aux-triple" "amdgpu-amd-amdhsa"
 // CHECK-SAME: "-emit-obj"
 // CHECK-SAME: {{.*}} "-main-file-name" "b.hip"
 // CHECK-SAME: "-fgpu-rdc"
@@ -80,7 +80,7 @@
 // CHECK-SAME: {{.*}} [[B_SRC]]
 
 // CHECK: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
-// CHECK-SAME: "-targets=hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900,host-x86_64-unknown-linux-gnu"
+// CHECK-SAME: "-targets=hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900,host-x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-output=[[B_O:.*b.o]]" "-input=[[B_BC1]]" "-input=[[B_BC2]]" "-input=[[B_OBJ_HOST]]"
 
 // RUN: touch %t/a.o %t/b.o
@@ -103,22 +103,22 @@
 // RUN: 2>&1 | FileCheck -check-prefixes=LINK,LLD-FIN,LINK-NOBUNDLE,LINK-NOEMBED %s
 
 // LINK-HOST-UNBUNDLE: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
-// LINK-HOST-UNBUNDLE-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900"
+// LINK-HOST-UNBUNDLE-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900"
 // LINK-HOST-UNBUNDLE-SAME: "-input=[[A_O:.*a.o]]" "-output=[[A_OBJ_HOST:.*o]]" "-output={{.*o}}" "-output={{.*o}}"
 // LINK-HOST-UNBUNDLE: "-unbundle" "-allow-missing-bundles"
 
 // LINK-HOST-UNBUNDLE: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
-// LINK-HOST-UNBUNDLE-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900"
+// LINK-HOST-UNBUNDLE-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900"
 // LINK-HOST-UNBUNDLE-SAME: "-input=[[B_O:.*b.o]]" "-output=[[B_OBJ_HOST:.*o]]" "-output={{.*o}}" "-output={{.*o}}"
 // LINK-HOST-UNBUNDLE: "-unbundle" "-allow-missing-bundles"
 
 // LINK: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
-// LINK-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900"
+// LINK-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900"
 // LINK-SAME: "-input=[[A_O:.*a.o]]" "-output={{.*o}}" "-output=[[A_BC1:.*o]]" "-output=[[A_BC2:.*o]]"
 // LINK-SAME: "-unbundle" "-allow-missing-bundles"
 
 // LINK: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
-// LINK-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-amdgcn-amd-amdhsa-unknown-gfx803,hip-amdgcn-amd-amdhsa-unknown-gfx900"
+// LINK-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-amdgpu8.03-amd-amdhsa-unknown-gfx803,hip-amdgpu9.00-amd-amdhsa-unknown-gfx900"
 // LINK-SAME: "-input=[[B_O:.*b.o]]" "-output={{.*o}}" "-output=[[B_BC1:.*o]]" "-output=[[B_BC2:.*o]]"
 // LINK-SAME: "-unbundle" "-allow-missing-bundles"
 
@@ -145,7 +145,7 @@
 // LINK-SAME: "--no-whole-archive"
 
 // LINK-BUNDLE: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
-// LINK-BUNDLE-SAME: "-targets={{.*}},hipv4-amdgcn-amd-amdhsa--gfx803,hipv4-amdgcn-amd-amdhsa--gfx900"
+// LINK-BUNDLE-SAME: "-targets={{.*}},hipv4-amdgpu8.03-amd-amdhsa--gfx803,hipv4-amdgpu9.00-amd-amdhsa--gfx900"
 // LINK-BUNDLE-SAME: "-input={{.*}}" "-input=[[IMG_DEV1]]" "-input=[[IMG_DEV2]]" "-output=[[BUNDLE:.*]]"
 // LINK-NOBUNDLE-NOT: {{".*clang-offload-bundler"}} "-type=o"
 
diff --git a/clang/test/Driver/hip-toolchain-rdc-static-lib.hip b/clang/test/Driver/hip-toolchain-rdc-static-lib.hip
index 71ac901b69299..3aa6caf3b805a 100644
--- a/clang/test/Driver/hip-toolchain-rdc-static-lib.hip
+++ b/clang/test/Driver/hip-toolchain-rdc-static-lib.hip
@@ -9,7 +9,7 @@
 
 // emit objects for host side path
 // CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "x86_64-unknown-linux-gnu"
-// CHECK-SAME: "-aux-triple" "amdgcn-amd-amdhsa"
+// CHECK-SAME: "-aux-triple" "amdgpu-amd-amdhsa"
 // CHECK-SAME: "-emit-obj"
 // CHECK-SAME: {{.*}} "-main-file-name" "a.cu"
 // CHECK-SAME: "-fgpu-rdc"
@@ -17,7 +17,7 @@
 // CHECK-SAME: {{.*}} [[A_SRC:".*a.cu"]]
 
 // CHECK: [[CLANG]] "-cc1" "-triple" "x86_64-unknown-linux-gnu"
-// CHECK-SAME: "-aux-triple" "amdgcn-amd-amdhsa"
+// CHECK-SAME: "-aux-triple" "amdgpu-amd-amdhsa"
 // CHECK-SAME: "-emit-obj"
 // CHECK-SAME: {{.*}} "-main-file-name" "b.hip"
 // CHECK-SAME: "-fgpu-rdc"
@@ -25,7 +25,7 @@
 // CHECK-SAME: {{.*}} [[B_SRC:".*b.hip"]]
 
 // generate image for device side path on gfx803
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -36,7 +36,7 @@
 // CHECK-SAME: {{.*}} "-o" [[A_BC1:".*o"]] "-x" "hip"
 // CHECK-SAME: {{.*}} [[A_SRC]]
 
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -56,7 +56,7 @@
 // CHECK-SAME: "-o" "[[IMG_DEV1:.*out]]" [[A_BC1]] [[B_BC1]]
 
 // generate image for device side path on gfx900
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -67,7 +67,7 @@
 // CHECK-SAME: {{.*}} "-o" [[A_BC2:".*o"]] "-x" "hip"
 // CHECK-SAME: {{.*}} [[A_SRC]]
 
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -90,7 +90,7 @@
 
 // combine images generated into hip fat binary object
 // CHECK: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
-// CHECK-SAME: "-targets={{.*}},hipv4-amdgcn-amd-amdhsa--gfx803,hipv4-amdgcn-amd-amdhsa--gfx900"
+// CHECK-SAME: "-targets={{.*}},hipv4-amdgpu8.03-amd-amdhsa--gfx803,hipv4-amdgpu9.00-amd-amdhsa--gfx900"
 // CHECK-SAME: "-input=[[IMG_DEV1]]" "-input=[[IMG_DEV2]]" "-output=[[BUNDLE:.*hipfb]]"
 
 // CHECK: [[MC:".*clang.*"]] "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin"
diff --git a/clang/test/Driver/hip-toolchain-rdc.hip b/clang/test/Driver/hip-toolchain-rdc.hip
index 7e100c521441d..3c8d7922f3e7a 100644
--- a/clang/test/Driver/hip-toolchain-rdc.hip
+++ b/clang/test/Driver/hip-toolchain-rdc.hip
@@ -75,7 +75,7 @@
 
 // emit objects for host side path
 // CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" [[HOST:"x86_64-[^"]+"]]
-// CHECK-SAME: "-aux-triple" "amdgcn-amd-amdhsa"
+// CHECK-SAME: "-aux-triple" "amdgpu-amd-amdhsa"
 // CHECK-SAME: "-emit-obj"
 // CHECK-SAME: {{.*}} "-main-file-name" "a.cu"
 // CHECK-SAME: "-fgpu-rdc"
@@ -83,7 +83,7 @@
 // CHECK-SAME: {{.*}} [[A_SRC:".*a.cu"]]
 
 // CHECK: [[CLANG]] "-cc1" "-triple" [[HOST]]
-// CHECK-SAME: "-aux-triple" "amdgcn-amd-amdhsa"
+// CHECK-SAME: "-aux-triple" "amdgpu-amd-amdhsa"
 // CHECK-SAME: "-emit-obj"
 // CHECK-SAME: {{.*}} "-main-file-name" "b.hip"
 // CHECK-SAME: "-fgpu-rdc"
@@ -91,7 +91,7 @@
 // CHECK-SAME: {{.*}} [[B_SRC:".*b.hip"]]
 
 // generate image for device side path on gfx803
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" [[HOST:"x86_64-[^"]+"]]
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -104,7 +104,7 @@
 // CHECK-SAME: {{.*}} "-o" [[A_BC1:".*o"]] "-x" "hip"
 // CHECK-SAME: {{.*}} [[A_SRC]]
 
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu8.03-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" [[HOST]]
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -125,7 +125,7 @@
 // CHECK-SAME: "-o" "[[IMG_DEV1:.*.out]]" [[A_BC1]] [[B_BC1]]
 
 // generate image for device side path on gfx900
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" [[HOST]]
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -136,7 +136,7 @@
 // CHECK-SAME: {{.*}} "-o" [[A_BC2:".*o"]] "-x" "hip"
 // CHECK-SAME: {{.*}} [[A_SRC]]
 
-// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK: [[CLANG]] "-cc1" "-triple" "amdgpu9.00-amd-amdhsa"
 // CHECK-SAME: "-aux-triple" [[HOST]]
 // CHECK-SAME: "-emit-llvm-bc"
 // CHECK-SAME: "-flto=full" "-flto-unit"
@@ -159,7 +159,7 @@
 // combine images generated into hip fat binary object
 // CHECK: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
 // CHECK-SAME: "-bundle-align=4096"
-// CHECK-SAME: "-targets={{.*}},hipv4-amdgcn-amd-amdhsa--gfx803,hipv4-amdgcn-amd-amdhsa--gfx900"
+// CHECK-SAME: "-targets={{.*}},hipv4-amdgpu8.03-amd-amdhsa--gfx803,hipv4-amdgpu9.00-amd-amdhsa--gfx900"
 // CHECK-SAME: "-input={{.*}}" "-input=[[IMG_DEV1]]" "-input=[[IMG_DEV2]]" "-output=[[BUNDLE]]"
 
 // CHECK: [[MC:".*clang.*"]] "-target" [[HOST]] "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin"
@@ -178,7 +178,7 @@
 // RUN: %clang -### -fgpu-rdc --offload-arch=gfx90a -nogpulib -nogpuinc --offload-new-driver \
 // RUN:   -L. -foffload-lto %s 2>&1 | FileCheck -check-prefix=LTO_DEFAULT_NEW %s
 // LTO_DEFAULT_NEW: clang-linker-wrapper
-// LTO_DEFAULT_NEW-NOT: "--device-compiler=amdgcn-amd-amdhsa=-flto-partitions=
+// LTO_DEFAULT_NEW-NOT: "--device-compiler=amdgpu-amd-amdhsa=-flto-partitions=
 
 // RUN: %clang -### -fgpu-rdc --offload-arch=gfx90a -nogpulib -nogpuinc --no-offload-new-driver \
 // RUN:   -L. -foffload-lto -flto-partitions=42 %s 2>&1 | FileCheck -check-prefix=LTO_PARTS %s
diff --git a/clang/test/Driver/offload-Xarch.c b/clang/test/Driver/offload-Xarch.c
index 73943f3e9c7f8..d3cd8ccc10df7 100644
--- a/clang/test/Driver/offload-Xarch.c
+++ b/clang/test/Driver/offload-Xarch.c
@@ -20,8 +20,8 @@
 // RUN: | FileCheck -check-prefix=OPENMP %s
 
 // OPENMP: # "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HOST_BC:.+]]"
-// OPENMP: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[GFX1030_BC:.+]]"
-// OPENMP: # "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[GFX90A_BC:.+]]"
+// OPENMP: # "amdgpu10.30-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[GFX1030_BC:.+]]"
+// OPENMP: # "amdgpu9.0a-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[GFX90A_BC:.+]]"
 // OPENMP: # "nvptx64-nvidia-cuda" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[SM52_PTX:.+]]"
 // OPENMP: # "nvptx64-nvidia-cuda" - "NVPTX::Assembler", inputs: ["[[SM52_PTX]]"], output: "[[SM52_CUBIN:.+]]"
 // OPENMP: # "nvptx64-nvidia-cuda" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[SM60_PTX:.+]]"
@@ -40,8 +40,16 @@
 // Make sure that `-Xarch_amdgcn` forwards libraries to the device linker.
 // RUN: %clang -fopenmp=libomp --offload-arch=gfx90a -nogpulib -nogpuinc \
 // RUN:   --target=x86_64-unknown-linux-gnu -Xarch_amdgcn -Wl,-lfoo -### %s 2>&1 \
-// RUN: | FileCheck -check-prefix=LIBS %s
+// RUN: | FileCheck -check-prefix=LIBS0 %s
+//
+// RUN: %clang -fopenmp=libomp --offload-arch=gfx90a -nogpulib -nogpuinc \
+// RUN:   -Xoffload-linker-amdgpu9.0a-amd-amdhsa -lfoo -### %s 2>&1 \
+// RUN: | FileCheck -check-prefix=LIBS0_SUBARCH %s
+
+// LIBS0: "--device-linker=amdgpu-amd-amdhsa=-lfoo"
+// LIBS0_SUBARCH: "--device-linker=amdgpu9.0a-amd-amdhsa=-lfoo"
+
 // RUN: %clang -fopenmp=libomp --offload-arch=gfx90a -nogpulib -nogpuinc \
 // RUN:   -Xoffload-linker-amdgcn-amd-amdhsa -lfoo -### %s 2>&1 \
-// RUN: | FileCheck -check-prefix=LIBS %s
-// LIBS: "--device-linker=amdgcn-amd-amdhsa=-lfoo"
+// RUN: | FileCheck -check-prefix=LIBS1 %s
+// LIBS1: "--device-linker=amdgpu-amd-amdhsa=-lfoo"
diff --git a/clang/test/Driver/offload-arch-translation-amdgpu.cu b/clang/test/Driver/offload-arch-translation-amdgpu.cu
index a5176315fbaf2..9cf1f4e42de11 100644
--- a/clang/test/Driver/offload-arch-translation-amdgpu.cu
+++ b/clang/test/Driver/offload-arch-translation-amdgpu.cu
@@ -80,66 +80,66 @@
 
 // HIP: llvm-offload-binary
 
-// GFX600:  triple=amdgcn-amd-amdhsa,arch=gfx600
-// GFX601:  triple=amdgcn-amd-amdhsa,arch=gfx601
-// GFX602:  triple=amdgcn-amd-amdhsa,arch=gfx602
-// GFX700:  triple=amdgcn-amd-amdhsa,arch=gfx700
-// GFX701:  triple=amdgcn-amd-amdhsa,arch=gfx701
-// GFX702:  triple=amdgcn-amd-amdhsa,arch=gfx702
-// GFX703:  triple=amdgcn-amd-amdhsa,arch=gfx703
-// GFX704:  triple=amdgcn-amd-amdhsa,arch=gfx704
-// GFX705:  triple=amdgcn-amd-amdhsa,arch=gfx705
-// GFX801:  triple=amdgcn-amd-amdhsa,arch=gfx801
-// GFX802:  triple=amdgcn-amd-amdhsa,arch=gfx802
-// GFX803:  triple=amdgcn-amd-amdhsa,arch=gfx803
-// GFX805:  triple=amdgcn-amd-amdhsa,arch=gfx805
-// GFX810:  triple=amdgcn-amd-amdhsa,arch=gfx810
-// GFX900:  triple=amdgcn-amd-amdhsa,arch=gfx900
-// GFX902:  triple=amdgcn-amd-amdhsa,arch=gfx902
-// GFX906:  triple=amdgcn-amd-amdhsa,arch=gfx906
-// GFX908:  triple=amdgcn-amd-amdhsa,arch=gfx908
-// GFX90A:  triple=amdgcn-amd-amdhsa,arch=gfx90a
-// GFX90C:  triple=amdgcn-amd-amdhsa,arch=gfx90c
-// GFX942:  triple=amdgcn-amd-amdhsa,arch=gfx942
-// GFX950:  triple=amdgcn-amd-amdhsa,arch=gfx950
-// GFX1010: triple=amdgcn-amd-amdhsa,arch=gfx1010
-// GFX1011: triple=amdgcn-amd-amdhsa,arch=gfx1011
-// GFX1012: triple=amdgcn-amd-amdhsa,arch=gfx1012
-// GFX1030: triple=amdgcn-amd-amdhsa,arch=gfx1030
-// GFX1031: triple=amdgcn-amd-amdhsa,arch=gfx1031
-// GFX1032: triple=amdgcn-amd-amdhsa,arch=gfx1032
-// GFX1033: triple=amdgcn-amd-amdhsa,arch=gfx1033
-// GFX1034: triple=amdgcn-amd-amdhsa,arch=gfx1034
-// GFX1035: triple=amdgcn-amd-amdhsa,arch=gfx1035
-// GFX1036: triple=amdgcn-amd-amdhsa,arch=gfx1036
-// GFX1100: triple=amdgcn-amd-amdhsa,arch=gfx1100
-// GFX1101: triple=amdgcn-amd-amdhsa,arch=gfx1101
-// GFX1102: triple=amdgcn-amd-amdhsa,arch=gfx1102
-// GFX1103: triple=amdgcn-amd-amdhsa,arch=gfx1103
-// GFX1150: triple=amdgcn-amd-amdhsa,arch=gfx1150
-// GFX1151: triple=amdgcn-amd-amdhsa,arch=gfx1151
-// GFX1152: triple=amdgcn-amd-amdhsa,arch=gfx1152
-// GFX1153: triple=amdgcn-amd-amdhsa,arch=gfx1153
-// GFX1170: triple=amdgcn-amd-amdhsa,arch=gfx1170
-// GFX1171: triple=amdgcn-amd-amdhsa,arch=gfx1171
-// GFX1172: triple=amdgcn-amd-amdhsa,arch=gfx1172
-// GFX1200: triple=amdgcn-amd-amdhsa,arch=gfx1200
-// GFX1201: triple=amdgcn-amd-amdhsa,arch=gfx1201
-// GFX1250: triple=amdgcn-amd-amdhsa,arch=gfx1250
-// GFX1251: triple=amdgcn-amd-amdhsa,arch=gfx1251
-// GFX1310: triple=amdgcn-amd-amdhsa,arch=gfx1310
+// GFX600:  triple=amdgpu6.00-amd-amdhsa,arch=gfx600
+// GFX601:  triple=amdgpu6.01-amd-amdhsa,arch=gfx601
+// GFX602:  triple=amdgpu6.02-amd-amdhsa,arch=gfx602
+// GFX700:  triple=amdgpu7.00-amd-amdhsa,arch=gfx700
+// GFX701:  triple=amdgpu7.01-amd-amdhsa,arch=gfx701
+// GFX702:  triple=amdgpu7.02-amd-amdhsa,arch=gfx702
+// GFX703:  triple=amdgpu7.03-amd-amdhsa,arch=gfx703
+// GFX704:  triple=amdgpu7.04-amd-amdhsa,arch=gfx704
+// GFX705:  triple=amdgpu7.05-amd-amdhsa,arch=gfx705
+// GFX801:  triple=amdgpu8.01-amd-amdhsa,arch=gfx801
+// GFX802:  triple=amdgpu8.02-amd-amdhsa,arch=gfx802
+// GFX803:  triple=amdgpu8.03-amd-amdhsa,arch=gfx803
+// GFX805:  triple=amdgpu8.05-amd-amdhsa,arch=gfx805
+// GFX810:  triple=amdgpu8.10-amd-amdhsa,arch=gfx810
+// GFX900:  triple=amdgpu9.00-amd-amdhsa,arch=gfx900
+// GFX902:  triple=amdgpu9.02-amd-amdhsa,arch=gfx902
+// GFX906:  triple=amdgpu9.06-amd-amdhsa,arch=gfx906
+// GFX908:  triple=amdgpu9.08-amd-amdhsa,arch=gfx908
+// GFX90A:  triple=amdgpu9.0a-amd-amdhsa,arch=gfx90a
+// GFX90C:  triple=amdgpu9.0c-amd-amdhsa,arch=gfx90c
+// GFX942:  triple=amdgpu9.42-amd-amdhsa,arch=gfx942
+// GFX950:  triple=amdgpu9.50-amd-amdhsa,arch=gfx950
+// GFX1010: triple=amdgpu10.10-amd-amdhsa,arch=gfx1010
+// GFX1011: triple=amdgpu10.11-amd-amdhsa,arch=gfx1011
+// GFX1012: triple=amdgpu10.12-amd-amdhsa,arch=gfx1012
+// GFX1030: triple=amdgpu10.30-amd-amdhsa,arch=gfx1030
+// GFX1031: triple=amdgpu10.31-amd-amdhsa,arch=gfx1031
+// GFX1032: triple=amdgpu10.32-amd-amdhsa,arch=gfx1032
+// GFX1033: triple=amdgpu10.33-amd-amdhsa,arch=gfx1033
+// GFX1034: triple=amdgpu10.34-amd-amdhsa,arch=gfx1034
+// GFX1035: triple=amdgpu10.35-amd-amdhsa,arch=gfx1035
+// GFX1036: triple=amdgpu10.36-amd-amdhsa,arch=gfx1036
+// GFX1100: triple=amdgpu11.00-amd-amdhsa,arch=gfx1100
+// GFX1101: triple=amdgpu11.01-amd-amdhsa,arch=gfx1101
+// GFX1102: triple=amdgpu11.02-amd-amdhsa,arch=gfx1102
+// GFX1103: triple=amdgpu11.03-amd-amdhsa,arch=gfx1103
+// GFX1150: triple=amdgpu11.50-amd-amdhsa,arch=gfx1150
+// GFX1151: triple=amdgpu11.51-amd-amdhsa,arch=gfx1151
+// GFX1152: triple=amdgpu11.52-amd-amdhsa,arch=gfx1152
+// GFX1153: triple=amdgpu11.53-amd-amdhsa,arch=gfx1153
+// GFX1170: triple=amdgpu11.70-amd-amdhsa,arch=gfx1170
+// GFX1171: triple=amdgpu11.71-amd-amdhsa,arch=gfx1171
+// GFX1172: triple=amdgpu11.72-amd-amdhsa,arch=gfx1172
+// GFX1200: triple=amdgpu12.00-amd-amdhsa,arch=gfx1200
+// GFX1201: triple=amdgpu12.01-amd-amdhsa,arch=gfx1201
+// GFX1250: triple=amdgpu12.50-amd-amdhsa,arch=gfx1250
+// GFX1251: triple=amdgpu12.51-amd-amdhsa,arch=gfx1251
+// GFX1310: triple=amdgpu13.10-amd-amdhsa,arch=gfx1310
 
-// GFX90A_XNACK: triple=amdgcn-amd-amdhsa,arch=gfx90a:xnack+
-// GFX908_SRAM:  triple=amdgcn-amd-amdhsa,arch=gfx908:sramecc-
+// GFX90A_XNACK: triple=amdgpu9.0a-amd-amdhsa,arch=gfx90a:xnack+
+// GFX908_SRAM:  triple=amdgpu9.08-amd-amdhsa,arch=gfx908:sramecc-
 
-// GFX9_GENERIC: triple=amdgcn-amd-amdhsa,arch=gfx9-generic
-// GFX9_4_GENERIC: triple=amdgcn-amd-amdhsa,arch=gfx9-4-generic
-// GFX10_1_GENERIC: triple=amdgcn-amd-amdhsa,arch=gfx10-1-generic
-// GFX10_3_GENERIC: triple=amdgcn-amd-amdhsa,arch=gfx10-3-generic
-// GFX11_GENERIC: triple=amdgcn-amd-amdhsa,arch=gfx11-generic
-// GFX11_7_GENERIC: triple=amdgcn-amd-amdhsa,arch=gfx11-7-generic
-// GFX12_GENERIC: triple=amdgcn-amd-amdhsa,arch=gfx12-generic
-// GFX12_5_GENERIC: triple=amdgcn-amd-amdhsa,arch=gfx12-5-generic
-// GFX13_GENERIC: triple=amdgcn-amd-amdhsa,arch=gfx13-generic
+// GFX9_GENERIC: triple=amdgpu9-amd-amdhsa,arch=gfx9-generic
+// GFX9_4_GENERIC: triple=amdgpu9.4-amd-amdhsa,arch=gfx9-4-generic
+// GFX10_1_GENERIC: triple=amdgpu10.1-amd-amdhsa,arch=gfx10-1-generic
+// GFX10_3_GENERIC: triple=amdgpu10.3-amd-amdhsa,arch=gfx10-3-generic
+// GFX11_GENERIC: triple=amdgpu11-amd-amdhsa,arch=gfx11-generic
+// GFX11_7_GENERIC: triple=amdgpu11.7-amd-amdhsa,arch=gfx11-7-generic
+// GFX12_GENERIC: triple=amdgpu12-amd-amdhsa,arch=gfx12-generic
+// GFX12_5_GENERIC: triple=amdgpu12.5-amd-amdhsa,arch=gfx12-5-generic
+// GFX13_GENERIC: triple=amdgpu13-amd-amdhsa,arch=gfx13-generic
 
 // SPIRV: triple=spirv64-amd-amdhsa,arch=amdgcnspirv
diff --git a/clang/test/Driver/offload-darwin-host.hip b/clang/test/Driver/offload-darwin-host.hip
index 3a3ab7267bd70..935bf62bad84a 100644
--- a/clang/test/Driver/offload-darwin-host.hip
+++ b/clang/test/Driver/offload-darwin-host.hip
@@ -4,5 +4,5 @@
 
 // RUN: %clang -### --target=arm64-apple-darwin24.6.0 -mmacos-version-min=10.9 --offload-arch=gfx900 -nogpulib -nogpuinc %s 2>&1 | FileCheck %s
 
-// CHECK: "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "arm64-apple-darwin24.6.0"
-// CHECK: "-cc1" "-triple" "arm64-apple-macosx10.9.0" "-aux-triple" "amdgcn-amd-amdhsa"
+// CHECK: "-cc1" "-triple" "amdgpu9.00-amd-amdhsa" "-aux-triple" "arm64-apple-darwin24.6.0"
+// CHECK: "-cc1" "-triple" "arm64-apple-macosx10.9.0" "-aux-triple" "amdgpu-amd-amdhsa"
diff --git a/clang/test/Driver/offload-target.c b/clang/test/Driver/offload-target.c
index 76d506c3dcf9a..5ba248996832e 100644
--- a/clang/test/Driver/offload-target.c
+++ b/clang/test/Driver/offload-target.c
@@ -4,7 +4,7 @@
 
 // RUN: %clang -### --offload-targets=amdgcn-amd-amdhsa -nogpulib -nogpuinc -x hip %s -ccc-print-bindings 2>&1 \
 // RUN: | FileCheck %s -check-prefix=HIP
-// HIP: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[AMD_OBJ:.+]]"
+// HIP: "amdgpu9.06-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[AMD_OBJ:.+]]"
 
 // RUN: %clang -### --offload-targets=nvptx64-nvidia-cuda -nogpulib -nogpuinc -x cuda %s -ccc-print-bindings 2>&1 \
 // RUN: | FileCheck %s -check-prefix=CUDA
@@ -14,7 +14,7 @@
 // RUN:   -Xarch_amdgcn --offload-arch=gfx90a -Xarch_nvptx64 --offload-arch=sm_89 \
 // RUN:   -nogpulib -nogpuinc %s -ccc-print-bindings 2>&1 \
 // RUN: | FileCheck %s -check-prefix=OPENMP
-// OPENMP: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[AMD_OBJ:.+]]"
+// OPENMP: "amdgpu9.0a-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[AMD_OBJ:.+]]"
 // OPENMP: "nvptx64-nvidia-cuda" - "clang", inputs: ["[[INPUT]]"], output: "[[NV_OBJ:.+]]"
 
 // RUN: %clang -### --offload-targets=spirv64-amd-amdhsa -nogpulib -nogpuinc -x hip %s -ccc-print-bindings 2>&1 \
diff --git a/clang/test/Driver/offload.f90 b/clang/test/Driver/offload.f90
index 5f49f69f4d8f8..53af52498a079 100644
--- a/clang/test/Driver/offload.f90
+++ b/clang/test/Driver/offload.f90
@@ -2,4 +2,4 @@
 // RUN:   -resource-dir %S/Inputs/resource_dir_with_per_target_subdir \
 // RUN:   --rocm-path=%S/Inputs/rocm -fopenmp --offload-arch=gfx908 \
 // RUN: %s 2>&1 | FileCheck %s --check-prefix=CHECK-FLANG-RT
-// CHECK-FLANG-RT: clang-linker-wrapper{{.*}}"--device-linker=amdgcn-amd-amdhsa=-lflang_rt.runtime"{{.*}}"-lflang_rt.runtime"
+// CHECK-FLANG-RT: clang-linker-wrapper{{.*}}"--device-linker=amdgpu-amd-amdhsa=-lflang_rt.runtime"{{.*}}"-lflang_rt.runtime"
diff --git a/clang/test/Driver/openmp-Xopenmp-target-forward-args.c b/clang/test/Driver/openmp-Xopenmp-target-forward-args.c
index 5749df973ed78..00112256eeb20 100644
--- a/clang/test/Driver/openmp-Xopenmp-target-forward-args.c
+++ b/clang/test/Driver/openmp-Xopenmp-target-forward-args.c
@@ -6,5 +6,5 @@
 // Flag should only apply to device, not the host.
 
 // CHECK-NOT: -ffinite-math-only
-// CHECK: "-triple" "amdgcn-amd-amdhsa" {{.*}} "-ffinite-math-only"
+// CHECK: "-triple" "amdgpu9.00-amd-amdhsa" {{.*}} "-ffinite-math-only"
 // CHECK-NOT: -ffinite-math-only
diff --git a/clang/test/Driver/openmp-offload-gpu.c b/clang/test/Driver/openmp-offload-gpu.c
index 4ad0aede8a50e..3c159130adeca 100644
--- a/clang/test/Driver/openmp-offload-gpu.c
+++ b/clang/test/Driver/openmp-offload-gpu.c
@@ -179,15 +179,15 @@
 // RUN:   | FileCheck -check-prefix=CUDA_MODE %s
 // RUN:   %clang -### -nogpulib -nogpuinc -fopenmp=libomp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target -march=gfx906 %s -fno-openmp-cuda-mode -fopenmp-cuda-mode 2>&1 \
 // RUN:   | FileCheck -check-prefix=CUDA_MODE %s
-// CUDA_MODE: "-cc1"{{.*}}"-triple" "{{nvptx64-nvidia-cuda|amdgcn-amd-amdhsa}}"
+// CUDA_MODE: "-cc1"{{.*}}"-triple" "{{nvptx64-nvidia-cuda|amdgpu9.06-amd-amdhsa}}"
 // CUDA_MODE-SAME: "-fopenmp-cuda-mode"
 // RUN:   %clang -### -nogpulib -nogpuinc -fopenmp=libomp -fopenmp-targets=nvptx64-nvidia-cuda -Xopenmp-target -march=sm_60 %s -fno-openmp-cuda-mode 2>&1 \
 // RUN:   | FileCheck -check-prefix=NO_CUDA_MODE %s
 // RUN:   %clang -### -nogpulib -nogpuinc -fopenmp=libomp -fopenmp-targets=nvptx64-nvidia-cuda -Xopenmp-target -march=sm_60 %s -fopenmp-cuda-mode -fno-openmp-cuda-mode 2>&1 \
 // RUN:   | FileCheck -check-prefix=NO_CUDA_MODE %s
-// RUN:   %clang -### -nogpulib -nogpuinc -fopenmp=libomp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target -march=gfx906 %s -fno-openmp-cuda-mode 2>&1 \
+// RUN:   %clang -### -nogpulib -nogpuinc -fopenmp=libomp -fopenmp-targets=amdgpu9-amd-amdhsa -Xopenmp-target -march=gfx906 %s -fno-openmp-cuda-mode 2>&1 \
 // RUN:   | FileCheck -check-prefix=NO_CUDA_MODE %s
-// RUN:   %clang -### -nogpulib -nogpuinc -fopenmp=libomp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target -march=gfx906 %s -fopenmp-cuda-mode -fno-openmp-cuda-mode 2>&1 \
+// RUN:   %clang -### -nogpulib -nogpuinc -fopenmp=libomp -fopenmp-targets=amdgpu9-amd-amdhsa -Xopenmp-target -march=gfx906 %s -fopenmp-cuda-mode -fno-openmp-cuda-mode 2>&1 \
 // RUN:   | FileCheck -check-prefix=NO_CUDA_MODE %s
 // NO_CUDA_MODE-NOT: "-{{fno-|f}}openmp-cuda-mode"
 
@@ -277,7 +277,7 @@
 // RUN:     -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-NVIDIA-AMDGPU
 
 // CHECK-NVIDIA-AMDGPU: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HOST_BC:.+]]"
-// CHECK-NVIDIA-AMDGPU: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[AMD_BC:.+]]"
+// CHECK-NVIDIA-AMDGPU: "amdgpu9.08-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[AMD_BC:.+]]"
 // CHECK-NVIDIA-AMDGPU: "nvptx64-nvidia-cuda" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[NVIDIA_PTX:.+]]"
 // CHECK-NVIDIA-AMDGPU: "nvptx64-nvidia-cuda" - "NVPTX::Assembler", inputs: ["[[NVIDIA_PTX]]"], output: "[[NVIDIA_CUBIN:.+]]"
 // CHECK-NVIDIA-AMDGPU: "x86_64-unknown-linux-gnu" - "Offload::Packager", inputs: ["[[AMD_BC]]", "[[NVIDIA_CUBIN]]"], output: "[[BINARY:.*]]"
@@ -391,11 +391,11 @@
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp \
 // RUN:     --offload-arch=gfx906 -foffload-lto=thin -nogpulib -nogpuinc %s 2>&1 \
 // RUN:   | FileCheck --check-prefix=THINLTO-GFX906 %s
-// THINLTO-GFX906: --device-compiler=amdgcn-amd-amdhsa=-flto=thin
-// THINLTO-GFX906-SAME: --device-linker=amdgcn-amd-amdhsa=-plugin-opt=-force-import-all
-// THINLTO-GFX906-SAME: --device-linker=amdgcn-amd-amdhsa=-plugin-opt=-avail-extern-to-local
-// THINLTO-GFX906-SAME: --device-linker=amdgcn-amd-amdhsa=-plugin-opt=-avail-extern-gv-in-addrspace-to-local=3
-// THINLTO-GFX906-SAME: --device-linker=amdgcn-amd-amdhsa=-plugin-opt=-amdgpu-internalize-symbols
+// THINLTO-GFX906: --device-compiler=amdgpu-amd-amdhsa=-flto=thin
+// THINLTO-GFX906-SAME: --device-linker=amdgpu-amd-amdhsa=-plugin-opt=-force-import-all
+// THINLTO-GFX906-SAME: --device-linker=amdgpu-amd-amdhsa=-plugin-opt=-avail-extern-to-local
+// THINLTO-GFX906-SAME: --device-linker=amdgpu-amd-amdhsa=-plugin-opt=-avail-extern-gv-in-addrspace-to-local=3
+// THINLTO-GFX906-SAME: --device-linker=amdgpu-amd-amdhsa=-plugin-opt=-amdgpu-internalize-symbols
 //
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp \
 // RUN:     --offload-arch=sm_52 -foffload-lto=thin -nogpulib -nogpuinc %s 2>&1 \
@@ -420,14 +420,30 @@
 // RUN:     --offload-arch=gfx906 -fprofile-generate -nogpulib -nogpuinc %s 2>&1 \
 // RUN:   | FileCheck --check-prefix=PROFILE %s
 //
-// PROFILE: clang-linker-wrapper{{.*}}--device-compiler=amdgcn-amd-amdhsa=-fprofile-generate
-// 
+// Check with new triple named directory structure
+// RUN:   %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_amdgpu_triples \
+// RUN:     --offload-arch=gfx906 -fprofile-generate -nogpulib -nogpuinc %s 2>&1 \
+// RUN:   | FileCheck --check-prefix=PROFILE %s
+//
+// PROFILE: clang-linker-wrapper{{.*}}--device-compiler=amdgpu-amd-amdhsa=-fprofile-generate
+//
+// Check with subarch directory name is respected when the toolchain triple is forced.
+// TODO: This does not work with just --offload-arch
+// RUN:   %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_amdgpu_subarch_triples \
+// RUN:     -fopenmp-targets=amdgpu10.30-amd-amdhsa-llvm -fprofile-generate -nogpulib -nogpuinc %s 2>&1 \
+// RUN:   | FileCheck --check-prefix=PROFILE-SUBARCH %s
+//
+// PROFILE-SUBARCH: clang-linker-wrapper{{.*}}--device-compiler=amdgpu10.30-amd-amdhsa-llvm=-fprofile-generate
+
+
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp \
 // RUN:     -resource-dir=%S/Inputs/resource_dir \
 // RUN:     --offload-arch=gfx906 -fprofile-generate -nogpulib -nogpuinc %s 2>&1 \
 // RUN:   | FileCheck --check-prefix=NO-PROFILE %s
 //
-// NO-PROFILE-NOT: --device-compiler=amdgcn-amd-amdhsa=-fprofile-generate
+// NO-PROFILE-NOT: --device-compiler=amd{{.*}}-amd-amdhsa=-fprofile-generate
 
 //
 // Check that `-fsanitize=` flags are forwarded to link in the runtime
@@ -439,8 +455,8 @@
 // RUN:     -fsanitize-minimal-runtime -nogpulib -nogpuinc %s 2>&1 \
 // RUN:   | FileCheck --check-prefix=UBSAN %s
 //
-// UBSAN: clang-linker-wrapper{{.*}}--device-compiler=amdgcn-amd-amdhsa=-fsanitize=undefined
-// UBSAN-SAME: --device-compiler=amdgcn-amd-amdhsa=-fsanitize-minimal-runtime
+// UBSAN: clang-linker-wrapper{{.*}}--device-compiler=amdgpu-amd-amdhsa=-fsanitize=undefined
+// UBSAN-SAME: --device-compiler=amdgpu-amd-amdhsa=-fsanitize-minimal-runtime
 //
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp \
 // RUN:     -resource-dir=%S/Inputs/resource_dir \
@@ -448,7 +464,7 @@
 // RUN:     -fsanitize-minimal-runtime -nogpulib -nogpuinc %s 2>&1 \
 // RUN:   | FileCheck --check-prefix=NO-UBSAN %s
 //
-// NO-UBSAN-NOT: --device-compiler=amdgcn-amd-amdhsa=-fsanitize=undefined
+// NO-UBSAN-NOT: --device-compiler=amdgpu{{.*}}-amd-amdhsa=-fsanitize=undefined
 
 // Check that --cuda-path and --rocm-path are forwarded unconditionally
 //
diff --git a/clang/test/Driver/openmp-offload-infer.c b/clang/test/Driver/openmp-offload-infer.c
index 2a38a99c30518..336a7db59e10c 100644
--- a/clang/test/Driver/openmp-offload-infer.c
+++ b/clang/test/Driver/openmp-offload-infer.c
@@ -6,7 +6,7 @@
 
 // verify the tools invocations
 // CHECK: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-emit-llvm-bc"{{.*}}"-x" "c"
-// CHECK: "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}}"-target-cpu" "gfx803"
+// CHECK: "-cc1" "-triple" "amdgpu8.03-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}}"-target-cpu" "gfx803"
 // CHECK: "-cc1" "-triple" "nvptx64-nvidia-cuda" "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}}"-target-cpu" "sm_52"
 // CHECK: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-emit-obj"
 // CHECK: clang-linker-wrapper{{.*}} "-o" "a.out"
@@ -16,7 +16,7 @@
 // RUN:     -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-NVIDIA-AMDGPU
 
 // CHECK-NVIDIA-AMDGPU: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[HOST_BC:.+]]"
-// CHECK-NVIDIA-AMDGPU: "amdgcn-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[AMD_BC:.+]]"
+// CHECK-NVIDIA-AMDGPU: "amdgpu9.08-amd-amdhsa" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[AMD_BC:.+]]"
 // CHECK-NVIDIA-AMDGPU: "nvptx64-nvidia-cuda" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[NVIDIA_PTX:.+]]"
 // CHECK-NVIDIA-AMDGPU: "nvptx64-nvidia-cuda" - "NVPTX::Assembler", inputs: ["[[NVIDIA_PTX]]"], output: "[[NVIDIA_CUBIN:.+]]"
 // CHECK-NVIDIA-AMDGPU: "x86_64-unknown-linux-gnu" - "Offload::Packager", inputs: ["[[AMD_BC]]", "[[NVIDIA_CUBIN]]"], output: "[[BINARY:.+]]"
diff --git a/clang/test/Driver/openmp-system-arch.c b/clang/test/Driver/openmp-system-arch.c
index 1670fd30f4b59..6dd1776e2f851 100644
--- a/clang/test/Driver/openmp-system-arch.c
+++ b/clang/test/Driver/openmp-system-arch.c
@@ -34,7 +34,7 @@
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -fopenmp=libomp -fopenmp-targets=amdgcn-amd-amdhsa \
 // RUN:     --nvptx-arch-tool=%t/nvptx_arch_fail --amdgpu-arch-tool=%t/amdgpu_arch_gfx906 %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=ARCH-GFX906
-// ARCH-GFX906: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-target-cpu" "gfx906"
+// ARCH-GFX906: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"{{.*}}"-target-cpu" "gfx906"
 
 // case when nvptx-arch succeeds.
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -fopenmp=libomp --offload-arch=native \
@@ -49,15 +49,15 @@
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -fopenmp=libomp --offload-arch=native \
 // RUN:     --offload-arch-tool=%t/offload_arch_sm_70_gfx906 %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=ARCH-SM_70-GFX906
-// ARCH-SM_70-GFX906: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-target-cpu" "gfx906"
+// ARCH-SM_70-GFX906: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"{{.*}}"-target-cpu" "gfx906"
 // ARCH-SM_70-GFX906: "-cc1" "-triple" "nvptx64-nvidia-cuda"{{.*}}"-target-cpu" "sm_70"
 
 // case when both nvptx-arch and amdgpu-arch succeed with other archs.
 // RUN:   %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -fopenmp=libomp --offload-arch=native,sm_75,gfx1030 \
 // RUN:     --offload-arch-tool=%t/offload_arch_sm_70_gfx906 %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=ARCH-MULTIPLE
-// ARCH-MULTIPLE: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-target-cpu" "gfx1030"
-// ARCH-MULTIPLE: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-target-cpu" "gfx906"
+// ARCH-MULTIPLE: "-cc1" "-triple" "amdgpu10.30-amd-amdhsa"{{.*}}"-target-cpu" "gfx1030"
+// ARCH-MULTIPLE: "-cc1" "-triple" "amdgpu9.06-amd-amdhsa"{{.*}}"-target-cpu" "gfx906"
 // ARCH-MULTIPLE: "-cc1" "-triple" "nvptx64-nvidia-cuda"{{.*}}"-target-cpu" "sm_70"
 // ARCH-MULTIPLE: "-cc1" "-triple" "nvptx64-nvidia-cuda"{{.*}}"-target-cpu" "sm_75"
 
@@ -71,7 +71,7 @@
 // RUN:   not %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -fopenmp=libomp \
 // RUN:     -fopenmp-targets=amdgcn-amd-amdhsa --amdgpu-arch-tool=%t/amdgpu_arch_empty %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix=AMDGPU
-// AMDGPU: error: cannot determine amdgcn architecture: No AMD GPU detected in the system; consider passing it via '--offload-arch'
+// AMDGPU: error: cannot determine amdgpu architecture: No AMD GPU detected in the system; consider passing it via '--offload-arch'
 
 // case when CLANG_TOOLCHAIN_PROGRAM_TIMEOUT is malformed for nvptx-arch.
 // RUN: env CLANG_TOOLCHAIN_PROGRAM_TIMEOUT=foo \
@@ -87,4 +87,4 @@
 // RUN:     -fopenmp-targets=amdgcn-amd-amdhsa -nogpulib \
 // RUN:     --amdgpu-arch-tool=%t/amdgpu_arch_gfx906 %s 2>&1 | \
 // RUN:   FileCheck %s --check-prefix=BAD-TIMEOUT-AMDGPU
-// BAD-TIMEOUT-AMDGPU: clang: error: cannot determine amdgcn architecture: CLANG_TOOLCHAIN_PROGRAM_TIMEOUT expected an integer, got ''; consider passing it via '--offload-arch'; environment variable CLANG_TOOLCHAIN_PROGRAM_TIMEOUT specifies the tool timeout (integer secs, <=0 is infinite)
+// BAD-TIMEOUT-AMDGPU: clang: error: cannot determine amdgpu architecture: CLANG_TOOLCHAIN_PROGRAM_TIMEOUT expected an integer, got ''; consider passing it via '--offload-arch'; environment variable CLANG_TOOLCHAIN_PROGRAM_TIMEOUT specifies the tool timeout (integer secs, <=0 is infinite)
diff --git a/clang/test/Driver/rocm-detect.cl b/clang/test/Driver/rocm-detect.cl
index 2d693e2afb04e..b14ee584102b2 100644
--- a/clang/test/Driver/rocm-detect.cl
+++ b/clang/test/Driver/rocm-detect.cl
@@ -16,4 +16,4 @@
 
 // NODEFAULTLIBS-NOT: error: cannot find
 
-// COMMON: "-triple" "amdgcn-amd-amdhsa"
+// COMMON: "-triple" "amdgpu9.02-amd-amdhsa"
diff --git a/clang/test/Driver/rocm-detect.hip b/clang/test/Driver/rocm-detect.hip
index d7e0d4b1c0017..8005fb573bd77 100644
--- a/clang/test/Driver/rocm-detect.hip
+++ b/clang/test/Driver/rocm-detect.hip
@@ -98,7 +98,7 @@
 
 // NODEFAULTLIBS-NOT: error: cannot find
 
-// COMMON: "-triple" "amdgcn-amd-amdhsa"
+// COMMON: "-triple" "amdgpu9.02-amd-amdhsa"
 
 // ROCM-ENV: ROCm installation search path: [[ROCM_PATH:.*/Inputs/rocm]]
 
diff --git a/clang/test/Driver/rocm-device-libs.cl b/clang/test/Driver/rocm-device-libs.cl
index 232f36df38768..b5b009b2de909 100644
--- a/clang/test/Driver/rocm-device-libs.cl
+++ b/clang/test/Driver/rocm-device-libs.cl
@@ -162,7 +162,7 @@
 // RUN:   %s \
 // RUN: 2>&1 | FileCheck  --check-prefixes=NOASAN %s
 
-// COMMON: "-triple" "amdgcn-amd-amdhsa"
+// COMMON: "-triple" "amdgpu{{[0-9.]+}}-amd-amdhsa"
 // COMMON-SAME: "-mlink-builtin-bitcode" "{{.*}}/amdgcn/bitcode/opencl.bc"
 // ASAN-SAME: "-mlink-bitcode-file" "{{.*}}/amdgcn/bitcode/asanrtl.bc"
 // COMMON-SAME: "-mlink-builtin-bitcode" "{{.*}}/amdgcn/bitcode/ocml.bc"
diff --git a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-amdgpu-triple-compat.c b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-amdgpu-triple-compat.c
new file mode 100644
index 0000000000000..b3dc4b50f56ff
--- /dev/null
+++ b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-amdgpu-triple-compat.c
@@ -0,0 +1,30 @@
+// REQUIRES: amdgpu-registered-target, x86-registered-target
+
+// Check that --device-linker and --device-compiler forward arguments to triples
+// considered compatible, not only exact match.
+
+// RUN: %clang -cc1 %s -triple amdgpu9.00-amd-amdhsa -emit-llvm-bc -o %t.amdgpu9.00.bc
+// RUN: %clang -cc1 %s -triple amdgpu9-amd-amdhsa -emit-llvm-bc -o %t.amdgpu9.bc
+// RUN: %clang -cc1 %s -triple amdgpu10.3-amd-amdhsa -emit-llvm-bc -o %t.amdgpu10.3.bc
+
+// RUN: llvm-offload-binary -o %t.out                                   \
+// RUN:   --image=file=%t.amdgpu9.00.bc,kind=openmp,triple=amdgpu9.00-amd-amdhsa,arch=gfx900 \
+// RUN:   --image=file=%t.amdgpu9.bc,kind=openmp,triple=amdgpu9-amd-amdhsa \
+// RUN:   --image=file=%t.amdgpu10.3.bc,kind=openmp,triple=amdgpu10.3-amd-amdhsa
+//
+// RUN: %clang -cc1 %s -triple x86_64-unknown-linux-gnu -emit-obj -o %t.o -fembed-offload-object=%t.out
+//
+// RUN: clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --dry-run --device-compiler=--save-temps \
+// RUN:   --device-linker=amdgpu-amd-amdhsa=-ffinite-math-only \
+// RUN:   --device-linker=amdgpu9-amd-amdhsa=-fno-signed-zeroes \
+// RUN:   --device-linker=amdgpu10.3-amd-amdhsa=-fapprox-func \
+// RUN:   --device-compiler=amdgpu-amd-amdhsa=-DALL_TRIPLES \
+// RUN:   --device-compiler=amdgpu9-amd-amdhsa=-DAMDGPU9_TRIPLES \
+// RUN:   --device-compiler=amdgpu10.3-amd-amdhsa=-DAMDGPU103_TRIPLES \
+// RUN:   --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s
+
+// CHECK: --target=amdgpu9.00-amd-amdhsa -mcpu=gfx900 {{.*}} -Xlinker -ffinite-math-only -Xlinker -fno-signed-zeroes --save-temps -DALL_TRIPLES -DAMDGPU9_TRIPLES
+// CHECK: --target=amdgpu9-amd-amdhsa {{.*}} -Xlinker -ffinite-math-only -Xlinker -fno-signed-zeroes --save-temps -DALL_TRIPLES -DAMDGPU9_TRIPLES
+// CHECK: --target=amdgpu10.3-amd-amdhsa {{.*}} -Xlinker -ffinite-math-only -Xlinker -fapprox-func --save-temps -DALL_TRIPLES -DAMDGPU103_TRIPLES
+
+__attribute__((visibility("protected"), used)) int x;
diff --git a/clang/test/OpenMP/amdgpu-arch-compat.c b/clang/test/OpenMP/amdgpu-arch-compat.c
index 363781e3c3c3f..31ea8597135b4 100644
--- a/clang/test/OpenMP/amdgpu-arch-compat.c
+++ b/clang/test/OpenMP/amdgpu-arch-compat.c
@@ -1,10 +1,13 @@
-// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -fopenmp -nogpulib -fopenmp-is-target-device -verify %s
+// RUN: %clang_cc1 -triple amdgpu9.00-amd-amdhsa -fopenmp -nogpulib -fopenmp-is-target-device -verify %s
+// RUN: %clang_cc1 -triple amdgpu9-amd-amdhsa -fopenmp -nogpulib -fopenmp-is-target-device -verify %s
 // expected-no-diagnostics
 
 #pragma omp begin declare variant match(device = {arch(amdgcn)})
 void is_amdgcn();
 #pragma omp end declare variant
 
+// TODO: This should also accept subarch names matched for compatibility against
+// the triple.
 #pragma omp begin declare variant match(device = {arch(amdgpu)})
 void is_amdgpu();
 #pragma omp end declare variant
diff --git a/clang/test/Preprocessor/hash_builtin.cpp b/clang/test/Preprocessor/hash_builtin.cpp
index 018b71eca418e..0657ae11bcbb5 100644
--- a/clang/test/Preprocessor/hash_builtin.cpp
+++ b/clang/test/Preprocessor/hash_builtin.cpp
@@ -1,4 +1,6 @@
 // RUN: %clang_cc1 -triple amdgcn -target-cpu gfx906 -E %s -o - | FileCheck %s
+// The subarch alone determines __has_builtin, with no -target-cpu.
+// RUN: %clang_cc1 -triple amdgpu9.06 -E %s -o - | FileCheck %s
 // RUN: %clang_cc1 -triple spirv64-amd-amdhsa -E %s -o - | FileCheck %s --check-prefix=SPIRV-AMDGCN
 
 // CHECK: has_s_memtime_inst
diff --git a/clang/test/SemaHIP/amdgpu-processor-is-invalid-subarch-arg-list.hip b/clang/test/SemaHIP/amdgpu-processor-is-invalid-subarch-arg-list.hip
new file mode 100644
index 0000000000000..6fa878708e3ef
--- /dev/null
+++ b/clang/test/SemaHIP/amdgpu-processor-is-invalid-subarch-arg-list.hip
@@ -0,0 +1,11 @@
+// REQUIRES: amdgpu-registered-target
+// RUN: %clang_cc1 -triple amdgpu10.10-amd-amdhsa -fsyntax-only -verify %s
+// RUN: %clang_cc1 -triple amdgpu9-amd-amdhsa -fsyntax-only -verify %s
+
+__attribute__((device)) void f() {
+  // The note lists all processors, not just those covered by the subarch.
+  if (__builtin_amdgcn_processor_is("not-a-gpu"))
+    // expected-error at -1 {{the argument to __builtin_amdgcn_processor_is must be a valid AMDGCN processor identifier; 'not-a-gpu' is not valid}}
+    // expected-note-re at -2 {{valid AMDGCN processor identifiers are: {{.*gfx900.*gfx902.*gfx1010.*gfx1100.*}}}}
+    return;
+}
diff --git a/clang/test/SemaHIP/amdgpu-processor-is.hip b/clang/test/SemaHIP/amdgpu-processor-is.hip
index 0f7211fd75d90..4b599f9108cc3 100644
--- a/clang/test/SemaHIP/amdgpu-processor-is.hip
+++ b/clang/test/SemaHIP/amdgpu-processor-is.hip
@@ -5,6 +5,15 @@
 // RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64 -aux-triple amdgcn -Wno-unused-value %s
 // RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64 -aux-triple spirv64-amd-amdhsa -Wno-unused-value %s
 
+// The queried processor is accepted whenever it is a recognized AMDGCN
+// processor, independent of the target's own subarch. A processor that does not
+// match the target simply evaluates to false, so none of these error.
+// RUN: %clang_cc1 -fsyntax-only -verify -triple amdgpu9.00-amd-amdhsa -Wno-unused-value %s
+// RUN: %clang_cc1 -fsyntax-only -verify -triple amdgpu9-amd-amdhsa -Wno-unused-value %s
+// RUN: %clang_cc1 -fsyntax-only -verify -triple amdgpu9.02-amd-amdhsa -Wno-unused-value %s
+// RUN: %clang_cc1 -fsyntax-only -verify -triple amdgpu10.10-amd-amdhsa -Wno-unused-value %s
+// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64 -aux-triple amdgpu10.10-amd-amdhsa -Wno-unused-value %s
+
 // expected-no-diagnostics
 
 #define __device__ __attribute__((device))
@@ -13,6 +22,8 @@
 __device__ void foo() {
     if (__builtin_amdgcn_processor_is("gfx900"))
         return __builtin_trap();
+    if (__builtin_amdgcn_processor_is("gfx1010"))
+        return __builtin_trap();
 }
 
 __global__ void bar() {
diff --git a/clang/test/SemaOpenCL/builtins-amdgcn-gfx11.cl b/clang/test/SemaOpenCL/builtins-amdgcn-gfx11.cl
index 823d30262c648..97e932cf44274 100644
--- a/clang/test/SemaOpenCL/builtins-amdgcn-gfx11.cl
+++ b/clang/test/SemaOpenCL/builtins-amdgcn-gfx11.cl
@@ -1,5 +1,9 @@
 // RUN: %clang_cc1 -triple amdgcn-- -target-cpu gfx1030 -verify=GFX10 -S -o - %s
 // RUN: %clang_cc1 -triple amdgcn-- -target-cpu gfx1100 -verify=GFX11 -S -o - %s
+// The subarch alone drives the target-feature and __has_builtin checks, with no
+// -target-cpu.
+// RUN: %clang_cc1 -triple amdgpu10.30 -verify=GFX10 -S -o - %s
+// RUN: %clang_cc1 -triple amdgpu11.00 -verify=GFX11 -S -o - %s
 
 typedef unsigned int uint;
 typedef unsigned long ulong;
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index 75e92861ef4f7..ac353beb52875 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -905,6 +905,8 @@ DerivedArgList getLinkerArgs(ArrayRef<OffloadFile> Input,
   if (llvm::all_of(Input, ContainsBitcode))
     DAL.AddFlagArg(nullptr, Tbl.getOption(OPT_whole_program));
 
+  llvm::Triple CurrentTT(DAL.getLastArgValue(OPT_triple_EQ));
+
   // Forward '-Xoffload-linker' options to the appropriate backend.
   for (StringRef Arg : Args.getAllArgValues(OPT_device_linker_args_EQ)) {
     auto [Triple, Value] = Arg.split('=');
@@ -916,7 +918,7 @@ DerivedArgList getLinkerArgs(ArrayRef<OffloadFile> Input,
     else if (Value.empty())
       DAL.AddJoinedArg(nullptr, Tbl.getOption(OPT_linker_arg_EQ),
                        Args.MakeArgString(Triple));
-    else if (Triple == DAL.getLastArgValue(OPT_triple_EQ))
+    else if (TT.isCompatibleWith(CurrentTT))
       DAL.AddJoinedArg(nullptr, Tbl.getOption(OPT_linker_arg_EQ),
                        Args.MakeArgString(Value));
   }
@@ -932,7 +934,7 @@ DerivedArgList getLinkerArgs(ArrayRef<OffloadFile> Input,
     else if (Value.empty())
       DAL.AddJoinedArg(nullptr, Tbl.getOption(OPT_compiler_arg_EQ),
                        Args.MakeArgString(Triple));
-    else if (Triple == DAL.getLastArgValue(OPT_triple_EQ))
+    else if (TT.isCompatibleWith(CurrentTT))
       DAL.AddJoinedArg(nullptr, Tbl.getOption(OPT_compiler_arg_EQ),
                        Args.MakeArgString(Value));
   }
diff --git a/clang/unittests/Basic/OffloadArchTest.cpp b/clang/unittests/Basic/OffloadArchTest.cpp
index c19ad0043d774..8c792ba64e055 100644
--- a/clang/unittests/Basic/OffloadArchTest.cpp
+++ b/clang/unittests/Basic/OffloadArchTest.cpp
@@ -7,6 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "clang/Basic/OffloadArch.h"
+#include "llvm/TargetParser/Triple.h"
 #include "gtest/gtest.h"
 
 using namespace clang;
@@ -34,3 +35,24 @@ TEST(OffloadArchTest, basic) {
   EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::Generic));
   EXPECT_FALSE(IsIntelOffloadArch(OffloadArch::Generic));
 }
+
+// Every AMDGPU gfx OffloadArch must round-trip through its subarch and
+// back. This guards against adding a GPU to the OffloadArch enum but forgetting
+// to update either getOffloadArchSubArch or the getSubArchOffloadArch table
+// (the two are position-sensitive and easy to leave out of sync).
+TEST(OffloadArchTest, AMDGPUSubArchRoundTrip) {
+  for (int I = static_cast<int>(OffloadArch::GFX600);
+       I < static_cast<int>(OffloadArch::AMDGCNSPIRV); ++I) {
+    OffloadArch Arch = static_cast<OffloadArch>(I);
+    EXPECT_TRUE(IsAMDOffloadArch(Arch));
+
+    llvm::Triple::SubArchType SubArch = getOffloadArchSubArch(Arch);
+    EXPECT_NE(SubArch, llvm::Triple::NoSubArch)
+        << "missing subarch mapping for " << OffloadArchToString(Arch);
+    EXPECT_EQ(getSubArchOffloadArch(SubArch), Arch)
+        << "subarch round-trip failed for " << OffloadArchToString(Arch);
+  }
+
+  EXPECT_EQ(getOffloadArchSubArch(OffloadArch::AMDGCNSPIRV),
+            llvm::Triple::NoSubArch);
+}
diff --git a/flang/test/Driver/code-object-version.f90 b/flang/test/Driver/code-object-version.f90
index 430cc864d03ec..c446b2546bf4f 100644
--- a/flang/test/Driver/code-object-version.f90
+++ b/flang/test/Driver/code-object-version.f90
@@ -11,6 +11,6 @@
 ! INVALID_VERSION: error: invalid integral value '3' in '-mcode-object-version=3'
 ! UNUSED_PARAM: warning: argument unused during compilation: '-mcode-object-version=3' [-Wunused-command-line-argument]
 
-! VALID_USE: "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! VALID_USE: "-fc1" "-triple" "amdgpu9.08-amd-amdhsa"
 ! VALID_USE-SAME: "-mcode-object-version=5"
 ! VALID_USE-SAME: "-mllvm" "--amdhsa-code-object-version=5"
diff --git a/flang/test/Driver/offload-device.f90 b/flang/test/Driver/offload-device.f90
index 13834171a9233..4edbed2e5ccd9 100644
--- a/flang/test/Driver/offload-device.f90
+++ b/flang/test/Driver/offload-device.f90
@@ -14,7 +14,7 @@
 
 ! Compiled as OpenMP, device-code is compiled after host-code compilation,
 ! once for each --offload-arch argument
-! OPENMP: {{(^|[\\/])flang(-[0-9]+)?(-bolt\.inst)?(\.exe)?}}" "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! OPENMP: {{(^|[\\/])flang(-[0-9]+)?(-bolt\.inst)?(\.exe)?}}" "-fc1" "-triple" "amdgpu9.01-amd-amdhsa"
 ! OPENMP-SAME: "-foffload-device"
 ! OPENMP: {{(^|[\\/])flang(-[0-9]+)?(-bolt\.inst)?(\.exe)?}}" "-fc1" "-triple" "nvptx64-nvidia-cuda"
 ! OPENMP-SAME: "-foffload-device"
diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90
index 1d1d4f6f1dd4b..f20098e81be8c 100644
--- a/flang/test/Driver/omp-driver-offload.f90
+++ b/flang/test/Driver/omp-driver-offload.f90
@@ -23,7 +23,7 @@
 ! RUN:   | FileCheck %s --check-prefix=OFFLOAD-HOST-AND-DEVICE
 
 ! OFFLOAD-HOST-AND-DEVICE: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "aarch64-unknown-linux-gnu"
-! OFFLOAD-HOST-AND-DEVICE-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! OFFLOAD-HOST-AND-DEVICE-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgpu9.0a-amd-amdhsa"
 ! OFFLOAD-HOST-AND-DEVICE-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "nvptx64-nvidia-cuda"
 ! OFFLOAD-HOST-AND-DEVICE: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "aarch64-unknown-linux-gnu"
 
@@ -43,7 +43,7 @@
 ! RUN:   | FileCheck %s --check-prefix=OFFLOAD-DEVICE
 
 ! OFFLOAD-DEVICE: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "aarch64-unknown-linux-gnu"
-! OFFLOAD-DEVICE-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! OFFLOAD-DEVICE-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgpu9.0a-amd-amdhsa"
 ! OFFLOAD-DEVICE-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "nvptx64-nvidia-cuda"
 ! OFFLOAD-DEVICE-NOT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "aarch64-unknown-linux-gnu"
 
@@ -57,11 +57,11 @@
 ! RUN: --target=aarch64-unknown-linux-gnu -nogpulib\
 ! RUN:   | FileCheck %s --check-prefix=OPENMP-OFFLOAD-ARGS
 ! OPENMP-OFFLOAD-ARGS: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "aarch64-unknown-linux-gnu" {{.*}} "-fopenmp" {{.*}}.f90"
-! OPENMP-OFFLOAD-ARGS-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! OPENMP-OFFLOAD-ARGS-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgpu9.0a-amd-amdhsa"
 ! OPENMP-OFFLOAD-ARGS-SAME:  "-fopenmp"
 ! OPENMP-OFFLOAD-ARGS-SAME:  "-fopenmp-host-ir-file-path" "{{.*}}.bc" "-fopenmp-is-target-device"
 ! OPENMP-OFFLOAD-ARGS-SAME:  {{.*}}.f90"
-! OPENMP-OFFLOAD-ARGS: "{{[^"]*}}llvm-offload-binary{{.*}}" {{.*}} "--image=file={{.*}}.s,triple=amdgcn-amd-amdhsa,arch=gfx90a,kind=openmp"
+! OPENMP-OFFLOAD-ARGS: "{{[^"]*}}llvm-offload-binary{{.*}}" {{.*}} "--image=file={{.*}}.s,triple=amdgpu9.0a-amd-amdhsa,arch=gfx90a,kind=openmp"
 ! OPENMP-OFFLOAD-ARGS-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "aarch64-unknown-linux-gnu"
 ! OPENMP-OFFLOAD-ARGS-SAME:  "-fopenmp"
 ! OPENMP-OFFLOAD-ARGS-SAME:  "-fembed-offload-object={{.*}}.out" {{.*}}.bc"
@@ -203,14 +203,14 @@
 
 ! FORCE-USM-OFFLOAD: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "aarch64-unknown-linux-gnu"
 ! FORCE-USM-OFFLOAD-SAME: "-fopenmp" "-fopenmp-force-usm"
-! FORCE-USM-OFFLOAD-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! FORCE-USM-OFFLOAD-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgpu9.0a-amd-amdhsa"
 ! FORCE-USM-OFFLOAD-SAME: "-fopenmp" "-fopenmp-force-usm"
 
 ! RUN:   %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp  \
 ! RUN:      --offload-arch=gfx900 \
 ! RUN:      --rocm-path=%S/Inputs/rocm %s 2>&1 \
 ! RUN:   | FileCheck --check-prefix=MLINK-BUILTIN-BITCODE  %s
-! MLINK-BUILTIN-BITCODE:      "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! MLINK-BUILTIN-BITCODE:      "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgpu9.00-amd-amdhsa"
 ! MLINK-BUILTIN-BITCODE-SAME: "-mlink-builtin-bitcode" {{.*Inputs.*rocm.*amdgcn.*bitcode.*}}oclc_isa_version_900.bc
 
 ! Test that the -fopenmp-targets option is added to host compilation invocations
@@ -225,8 +225,8 @@
 ! RUN: | FileCheck %s --check-prefix=OFFLOAD-TARGETS
 
 ! OFFLOAD-TARGETS: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "x86_64-unknown-linux-gnu"
-! OFFLOAD-TARGETS-SAME: "--offload-targets=amdgcn-amd-amdhsa"
-! OFFLOAD-TARGETS-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! OFFLOAD-TARGETS-SAME: "--offload-targets=amdgpu-amd-amdhsa"
+! OFFLOAD-TARGETS-NEXT: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "amdgpu9.0a-amd-amdhsa"
 ! OFFLOAD-TARGETS-NOT: --offload-targets
 ! OFFLOAD-TARGETS: "{{[^"]*}}flang{{[^"]*}}" "-fc1" "-triple" "x86_64-unknown-linux-gnu"
-! OFFLOAD-TARGETS-SAME: "--offload-targets=amdgcn-amd-amdhsa"
+! OFFLOAD-TARGETS-SAME: "--offload-targets=amdgpu-amd-amdhsa"
diff --git a/flang/test/Driver/target-cpu-features.f90 b/flang/test/Driver/target-cpu-features.f90
index 92ad12de781f2..97175b767e329 100644
--- a/flang/test/Driver/target-cpu-features.f90
+++ b/flang/test/Driver/target-cpu-features.f90
@@ -76,7 +76,7 @@
 ! CHECK-RV64: "-fc1" "-triple" "riscv64-unknown-linux-gnu"
 ! CHECK-RV64-SAME: "-target-cpu" "generic-rv64" "-target-feature" "+i" "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" "-target-feature" "+d" "-target-feature" "+c"
 
-! CHECK-AMDGPU: "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! CHECK-AMDGPU: "-fc1" "-triple" "amdgpu9.08-amd-amdhsa"
 ! CHECK-AMDGPU-SAME: "-target-cpu" "gfx908"
 
 ! CHECK-AMDGPU-R600: "-fc1" "-triple" "r600-unknown-unknown"
diff --git a/flang/test/Driver/target-gpu-features.f90 b/flang/test/Driver/target-gpu-features.f90
index b783574370a0f..577181bd1272f 100644
--- a/flang/test/Driver/target-gpu-features.f90
+++ b/flang/test/Driver/target-gpu-features.f90
@@ -6,5 +6,5 @@
 ! RUN: %flang --target=amdgcn-amd-amdhsa -mcpu=gfx902  -nogpulib -c %s -### 2>&1 \
 ! RUN: | FileCheck %s -check-prefix=CHECK-AMDGCN
 
-! CHECK-AMDGCN: "-fc1" "-triple" "amdgcn-amd-amdhsa"
+! CHECK-AMDGCN: "-fc1" "-triple" "amdgpu9.02-amd-amdhsa"
 ! CHECK-AMDGCN-SAME: "-target-cpu" "gfx902"
diff --git a/flang/test/Driver/xoffload-linker.f90 b/flang/test/Driver/xoffload-linker.f90
index c8988de1fdec8..7c7f895aa8a1c 100644
--- a/flang/test/Driver/xoffload-linker.f90
+++ b/flang/test/Driver/xoffload-linker.f90
@@ -1,4 +1,4 @@
-! Test the -Xoffload-linker flag that forwards link commands to the clang-linker-wrapper used
+1! Test the -Xoffload-linker flag that forwards link commands to the clang-linker-wrapper used
 ! to help link offloading device libraries
 
 ! RUN: %flang -### %s -o %t 2>&1 -fopenmp --offload-arch=gfx90a --target=aarch64-unknown-linux-gnu -nogpulib -Xoffload-linker a | FileCheck %s --check-prefix=CHECK-XLINKER
@@ -7,4 +7,4 @@
 
 ! RUN: %flang -### %s -o %t 2>&1 -fopenmp --offload-arch=gfx90a --target=aarch64-unknown-linux-gnu -nogpulib -Xoffload-linker a -Xoffload-linker-amdgcn-amd-amdhsa b | FileCheck %s --check-prefix=CHECK-XLINKER-AMDGCN
 
-! CHECK-XLINKER-AMDGCN: "{{[^"]*}}clang-linker-wrapper{{.*}}"{{.*}}"--device-linker=a"{{.*}}"--device-linker=amdgcn-amd-amdhsa=b"{{.*}}
+! CHECK-XLINKER-AMDGCN: "{{[^"]*}}clang-linker-wrapper{{.*}}"{{.*}}"--device-linker=a"{{.*}}"--device-linker=amdgpu-amd-amdhsa=b"{{.*}}
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
index e253c838e5e28..bd92b34bf3f17 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
@@ -1280,6 +1280,7 @@ __OMP_TRAIT_PROPERTY(device, arch, ppc64)
 __OMP_TRAIT_PROPERTY(device, arch, ppc64le)
 __OMP_TRAIT_PROPERTY(device, arch, x86)
 __OMP_TRAIT_PROPERTY(device, arch, x86_64)
+// TODO: Should also cover subarches
 __OMP_TRAIT_PROPERTY(device, arch, amdgcn)
 __OMP_TRAIT_PROPERTY(device, arch, amdgpu)
 __OMP_TRAIT_PROPERTY(device, arch, nvptx)
diff --git a/llvm/lib/TargetParser/AMDGPUTargetParser.cpp b/llvm/lib/TargetParser/AMDGPUTargetParser.cpp
index 1c549810ccef5..4289e687b179a 100644
--- a/llvm/lib/TargetParser/AMDGPUTargetParser.cpp
+++ b/llvm/lib/TargetParser/AMDGPUTargetParser.cpp
@@ -371,7 +371,10 @@ static std::pair<FeatureError, StringRef>
 insertWaveSizeFeature(StringRef GPU, const Triple &T,
                       const StringMap<bool> &DefaultFeatures,
                       StringMap<bool> &Features) {
-  const bool IsNullGPU = GPU.empty();
+  // A bare subarch triple (no -target-cpu) still pins down the target, so it is
+  // not a null GPU: DefaultFeatures has already been populated from the
+  // subarch.
+  const bool IsNullGPU = T.getSubArch() == Triple::NoSubArch && GPU.empty();
   const bool TargetHasWave32 = DefaultFeatures.count("wavefrontsize32");
   const bool TargetHasWave64 = DefaultFeatures.count("wavefrontsize64");
 
@@ -428,7 +431,10 @@ insertWaveSizeFeature(StringRef GPU, const Triple &T,
 /// default target features with entries overridden by \p Features.
 static void fillAMDGCNFeatureMap(StringRef GPU, const Triple &T,
                                  StringMap<bool> &Features) {
-  AMDGPU::GPUKind Kind = parseArchAMDGCN(GPU);
+  // With no explicit GPU, the triple's subarch identifies the target.
+  AMDGPU::GPUKind Kind = GPU.empty() && T.getSubArch() != Triple::NoSubArch
+                             ? getGPUKindFromSubArch(T.getSubArch())
+                             : parseArchAMDGCN(GPU);
   switch (Kind) {
   case GK_GFX1251:
     Features["gfx1251-gemm-insts"] = true;



More information about the llvm-branch-commits mailing list