[llvm] r325399 - AMDGPU: Bring elf flags in sync with the spec

Konstantin Zhuravlyov via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 16 14:33:59 PST 2018


Author: kzhuravl
Date: Fri Feb 16 14:33:59 2018
New Revision: 325399

URL: http://llvm.org/viewvc/llvm-project?rev=325399&view=rev
Log:
AMDGPU: Bring elf flags in sync with the spec

- Add MACH flags
- Add XNACK flag
- Add reserved flags
- Minor cleanups in docs

Differential Revision: https://reviews.llvm.org/D43356

Added:
    llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-mach.ll
    llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-xnack.ll
    llvm/trunk/test/CodeGen/AMDGPU/elf-header-osabi.ll
    llvm/trunk/test/Object/AMDGPU/elf-header-flags-mach.yaml
    llvm/trunk/test/Object/AMDGPU/elf-header-flags-xnack.yaml
    llvm/trunk/test/Object/AMDGPU/elf-header-osabi.yaml
Removed:
    llvm/trunk/test/CodeGen/AMDGPU/elf-header.ll
    llvm/trunk/test/Object/AMDGPU/elf32-r600-definitions.yaml
    llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdhsa-definitions.yaml
    llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdpal-definitions.yaml
    llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml
Modified:
    llvm/trunk/docs/AMDGPUUsage.rst
    llvm/trunk/include/llvm/BinaryFormat/ELF.h
    llvm/trunk/include/llvm/Object/ELFObjectFile.h
    llvm/trunk/lib/ObjectYAML/ELFYAML.cpp
    llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp
    llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h
    llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp
    llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
    llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h
    llvm/trunk/tools/llvm-readobj/ELFDumper.cpp

Modified: llvm/trunk/docs/AMDGPUUsage.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/AMDGPUUsage.rst?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/docs/AMDGPUUsage.rst (original)
+++ llvm/trunk/docs/AMDGPUUsage.rst Fri Feb 16 14:33:59 2018
@@ -100,23 +100,23 @@ names from both the *Processor* and *Alt
      **Radeon HD 5000 Series (Evergreen)** [AMD-RADEON-HD-5000]_
      -----------------------------------------------------------------------------------
      ``cedar``                   ``r600``     dGPU
+     ``cypress``                 ``r600``     dGPU
+     ``juniper``                 ``r600``     dGPU
      ``redwood``                 ``r600``     dGPU
      ``sumo``                    ``r600``     dGPU
-     ``juniper``                 ``r600``     dGPU
-     ``cypress``                 ``r600``     dGPU
      **Radeon HD 6000 Series (Northern Islands)** [AMD-RADEON-HD-6000]_
      -----------------------------------------------------------------------------------
      ``barts``                   ``r600``     dGPU
-     ``turks``                   ``r600``     dGPU
      ``caicos``                  ``r600``     dGPU
      ``cayman``                  ``r600``     dGPU
+     ``turks``                   ``r600``     dGPU
      **GCN GFX6 (Southern Islands (SI))** [AMD-GCN-GFX6]_
      -----------------------------------------------------------------------------------
      ``gfx600``  - ``tahiti``    ``amdgcn``   dGPU
-     ``gfx601``  - ``pitcairn``  ``amdgcn``   dGPU
-                 - ``verde``
+     ``gfx601``  - ``hainan``    ``amdgcn``   dGPU
                  - ``oland``
-                 - ``hainan``
+                 - ``pitcairn``
+                 - ``verde``
      **GCN GFX7 (Sea Islands (CI))** [AMD-GCN-GFX7]_
      -----------------------------------------------------------------------------------
      ``gfx700``  - ``kaveri``    ``amdgcn``   APU                     - A6-7000
@@ -170,8 +170,8 @@ names from both the *Processor* and *Alt
      \                           ``amdgcn``   APU   - xnack           - E2-9010
                                                       [on]            - A6-9210
                                                                       - A9-9410
-     ``gfx802``  - ``tonga``     ``amdgcn``   dGPU  - xnack   ROCm    - FirePro S7150
-                 - ``iceland``                        [off]           - FirePro S7100
+     ``gfx802``  - ``iceland``   ``amdgcn``   dGPU  - xnack   ROCm    - FirePro S7150
+                 - ``tonga``                          [off]           - FirePro S7100
                                                                       - FirePro W7100
                                                                       - Radeon R285
                                                                       - Radeon R9 380
@@ -514,39 +514,42 @@ The AMDGPU backend uses the following EL
      Name                              Value      Description (see
                                                   :ref:`amdgpu-processor-table`)
      ================================= ========== =============================
-     ``EF_AMDGPU_MACH_NONE``           0          *not specified*
-     ``EF_AMDGPU_MACH_R600_R600``      1          ``r600``
-     ``EF_AMDGPU_MACH_R600_R630``      2          ``r630``
-     ``EF_AMDGPU_MACH_R600_RS880``     3          ``rs880``
-     ``EF_AMDGPU_MACH_R600_RV670``     4          ``rv670``
-     ``EF_AMDGPU_MACH_R600_RV710``     5          ``rv710``
-     ``EF_AMDGPU_MACH_R600_RV730``     6          ``rv730``
-     ``EF_AMDGPU_MACH_R600_RV770``     7          ``rv770``
-     ``EF_AMDGPU_MACH_R600_CEDAR``     8          ``cedar``
-     ``EF_AMDGPU_MACH_R600_REDWOOD``   9          ``redwood``
-     ``EF_AMDGPU_MACH_R600_SUMO``      10         ``sumo``
-     ``EF_AMDGPU_MACH_R600_JUNIPER``   11         ``juniper``
-     ``EF_AMDGPU_MACH_R600_CYPRESS``   12         ``cypress``
-     ``EF_AMDGPU_MACH_R600_BARTS``     13         ``barts``
-     ``EF_AMDGPU_MACH_R600_TURKS``     14         ``turks``
-     ``EF_AMDGPU_MACH_R600_CAICOS``    15         ``caicos``
-     ``EF_AMDGPU_MACH_R600_CAYMAN``    16         ``cayman``
-     *reserved*                        17-31      Reserved for ``r600``
-                                                  architecture processors.
-     ``EF_AMDGPU_MACH_AMDGCN_GFX600``  32         ``gfx600``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX601``  33         ``gfx601``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX700``  34         ``gfx700``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX701``  35         ``gfx701``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX702``  36         ``gfx702``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX703``  37         ``gfx703``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX704``  38         ``gfx704``
-     *reserved*                        39         Reserved.
-     ``EF_AMDGPU_MACH_AMDGCN_GFX801``  40         ``gfx801``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX802``  41         ``gfx802``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX803``  42         ``gfx803``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX810``  43         ``gfx810``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX900``  44         ``gfx900``
-     ``EF_AMDGPU_MACH_AMDGCN_GFX902``  45         ``gfx902``
+     ``EF_AMDGPU_MACH_NONE``           0x000      *not specified*
+     ``EF_AMDGPU_MACH_R600_R600``      0x001      ``r600``
+     ``EF_AMDGPU_MACH_R600_R630``      0x002      ``r630``
+     ``EF_AMDGPU_MACH_R600_RS880``     0x003      ``rs880``
+     ``EF_AMDGPU_MACH_R600_RV670``     0x004      ``rv670``
+     ``EF_AMDGPU_MACH_R600_RV710``     0x005      ``rv710``
+     ``EF_AMDGPU_MACH_R600_RV730``     0x006      ``rv730``
+     ``EF_AMDGPU_MACH_R600_RV770``     0x007      ``rv770``
+     ``EF_AMDGPU_MACH_R600_CEDAR``     0x008      ``cedar``
+     ``EF_AMDGPU_MACH_R600_CYPRESS``   0x009      ``cypress``
+     ``EF_AMDGPU_MACH_R600_JUNIPER``   0x00a      ``juniper``
+     ``EF_AMDGPU_MACH_R600_REDWOOD``   0x00b      ``redwood``
+     ``EF_AMDGPU_MACH_R600_SUMO``      0x00c      ``sumo``
+     ``EF_AMDGPU_MACH_R600_BARTS``     0x00d      ``barts``
+     ``EF_AMDGPU_MACH_R600_CAICOS``    0x00e      ``caicos``
+     ``EF_AMDGPU_MACH_R600_CAYMAN``    0x00f      ``cayman``
+     ``EF_AMDGPU_MACH_R600_TURKS``     0x010      ``turks``
+     *reserved*                        0x011 -    Reserved for ``r600``
+                                       0x01f      architecture processors.
+     ``EF_AMDGPU_MACH_AMDGCN_GFX600``  0x020      ``gfx600``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX601``  0x021      ``gfx601``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX700``  0x022      ``gfx700``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX701``  0x023      ``gfx701``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX702``  0x024      ``gfx702``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX703``  0x025      ``gfx703``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX704``  0x026      ``gfx704``
+     *reserved*                        0x027      Reserved.
+     ``EF_AMDGPU_MACH_AMDGCN_GFX801``  0x028      ``gfx801``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX802``  0x029      ``gfx802``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX803``  0x02a      ``gfx803``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX810``  0x02b      ``gfx810``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX900``  0x02c      ``gfx900``
+     ``EF_AMDGPU_MACH_AMDGCN_GFX902``  0x02d      ``gfx902``
+     *reserved*                        0x02e      Reserved.
+     *reserved*                        0x02f      Reserved.
+     *reserved*                        0x030      Reserved.
      ================================= ========== =============================
 
 Sections

Modified: llvm/trunk/include/llvm/BinaryFormat/ELF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/ELF.h?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/include/llvm/BinaryFormat/ELF.h (original)
+++ llvm/trunk/include/llvm/BinaryFormat/ELF.h Fri Feb 16 14:33:59 2018
@@ -651,11 +651,70 @@ enum {
 
 // AMDGPU specific e_flags.
 enum : unsigned {
-  // AMDGPU machine architectures.
-  EF_AMDGPU_ARCH_NONE = 0x00000000, // None/unknown.
-  EF_AMDGPU_ARCH_R600 = 0x00000001, // AMD HD2XXX-HD6XXX GPUs.
-  EF_AMDGPU_ARCH_GCN = 0x00000002,  // AMD GCN GFX6+ GPUs.
-  EF_AMDGPU_ARCH = 0x0000000f       // EF_AMDGPU_ARCH_XXX selection mask.
+  // Processor selection mask for EF_AMDGPU_MACH_* values.
+  EF_AMDGPU_MACH = 0x0ff,
+
+  // Not specified processor.
+  EF_AMDGPU_MACH_NONE = 0x000,
+
+  // R600-based processors.
+  EF_AMDGPU_MACH_R600_FIRST = 0x001,
+  EF_AMDGPU_MACH_R600_LAST = 0x010,
+  // Radeon HD 2000/3000 Series (R600).
+  EF_AMDGPU_MACH_R600_R600 = 0x001,
+  EF_AMDGPU_MACH_R600_R630 = 0x002,
+  EF_AMDGPU_MACH_R600_RS880 = 0x003,
+  EF_AMDGPU_MACH_R600_RV670 = 0x004,
+  // Radeon HD 4000 Series (R700).
+  EF_AMDGPU_MACH_R600_RV710 = 0x005,
+  EF_AMDGPU_MACH_R600_RV730 = 0x006,
+  EF_AMDGPU_MACH_R600_RV770 = 0x007,
+  // Radeon HD 5000 Series (Evergreen).
+  EF_AMDGPU_MACH_R600_CEDAR = 0x008,
+  EF_AMDGPU_MACH_R600_CYPRESS = 0x009,
+  EF_AMDGPU_MACH_R600_JUNIPER = 0x00a,
+  EF_AMDGPU_MACH_R600_REDWOOD = 0x00b,
+  EF_AMDGPU_MACH_R600_SUMO = 0x00c,
+  // Radeon HD 6000 Series (Northern Islands).
+  EF_AMDGPU_MACH_R600_BARTS = 0x00d,
+  EF_AMDGPU_MACH_R600_CAICOS = 0x00e,
+  EF_AMDGPU_MACH_R600_CAYMAN = 0x00f,
+  EF_AMDGPU_MACH_R600_TURKS = 0x010,
+
+  // Reserved for R600-based processors.
+  EF_AMDGPU_MACH_R600_RESERVED_FIRST = 0x011,
+  EF_AMDGPU_MACH_R600_RESERVED_LAST = 0x01f,
+
+  // AMDGCN-based processors.
+  EF_AMDGPU_MACH_AMDGCN_FIRST = 0x020,
+  EF_AMDGPU_MACH_AMDGCN_LAST = 0x02d,
+  // AMDGCN GFX6.
+  EF_AMDGPU_MACH_AMDGCN_GFX600 = 0x020,
+  EF_AMDGPU_MACH_AMDGCN_GFX601 = 0x021,
+  // AMDGCN GFX7.
+  EF_AMDGPU_MACH_AMDGCN_GFX700 = 0x022,
+  EF_AMDGPU_MACH_AMDGCN_GFX701 = 0x023,
+  EF_AMDGPU_MACH_AMDGCN_GFX702 = 0x024,
+  EF_AMDGPU_MACH_AMDGCN_GFX703 = 0x025,
+  EF_AMDGPU_MACH_AMDGCN_GFX704 = 0x026,
+  // AMDGCN GFX8.
+  EF_AMDGPU_MACH_AMDGCN_GFX801 = 0x028,
+  EF_AMDGPU_MACH_AMDGCN_GFX802 = 0x029,
+  EF_AMDGPU_MACH_AMDGCN_GFX803 = 0x02a,
+  EF_AMDGPU_MACH_AMDGCN_GFX810 = 0x02b,
+  // AMDGCN GFX9.
+  EF_AMDGPU_MACH_AMDGCN_GFX900 = 0x02c,
+  EF_AMDGPU_MACH_AMDGCN_GFX902 = 0x02d,
+
+  // Reserved for AMDGCN-based processors.
+  EF_AMDGPU_MACH_AMDGCN_RESERVED0 = 0x027,
+  EF_AMDGPU_MACH_AMDGCN_RESERVED1 = 0x02e,
+  EF_AMDGPU_MACH_AMDGCN_RESERVED2 = 0x02f,
+  EF_AMDGPU_MACH_AMDGCN_RESERVED3 = 0x030,
+
+  // Indicates if the xnack target feature is enabled for all code contained in
+  // the object.
+  EF_AMDGPU_XNACK = 0x100,
 };
 
 // ELF Relocation types for AMDGPU

Modified: llvm/trunk/include/llvm/Object/ELFObjectFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFObjectFile.h?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ELFObjectFile.h (original)
+++ llvm/trunk/include/llvm/Object/ELFObjectFile.h Fri Feb 16 14:33:59 2018
@@ -1087,15 +1087,15 @@ template <class ELFT> Triple::ArchType E
     if (!IsLittleEndian)
       return Triple::UnknownArch;
 
-    unsigned EFlags = EF.getHeader()->e_flags;
-    switch (EFlags & ELF::EF_AMDGPU_ARCH) {
-    case ELF::EF_AMDGPU_ARCH_R600:
+    unsigned MACH = EF.getHeader()->e_flags & ELF::EF_AMDGPU_MACH;
+    if (MACH >= ELF::EF_AMDGPU_MACH_R600_FIRST &&
+        MACH <= ELF::EF_AMDGPU_MACH_R600_LAST)
       return Triple::r600;
-    case ELF::EF_AMDGPU_ARCH_GCN:
+    if (MACH >= ELF::EF_AMDGPU_MACH_AMDGCN_FIRST &&
+        MACH <= ELF::EF_AMDGPU_MACH_AMDGCN_LAST)
       return Triple::amdgcn;
-    default:
-      return Triple::UnknownArch;
-    }
+
+    return Triple::UnknownArch;
   }
 
   case ELF::EM_BPF:

Modified: llvm/trunk/lib/ObjectYAML/ELFYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/ELFYAML.cpp?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/lib/ObjectYAML/ELFYAML.cpp (original)
+++ llvm/trunk/lib/ObjectYAML/ELFYAML.cpp Fri Feb 16 14:33:59 2018
@@ -369,8 +369,37 @@ void ScalarBitSetTraits<ELFYAML::ELF_EF>
     BCase(EF_RISCV_RVE);
     break;
   case ELF::EM_AMDGPU:
-    BCaseMask(EF_AMDGPU_ARCH_R600, EF_AMDGPU_ARCH);
-    BCaseMask(EF_AMDGPU_ARCH_GCN, EF_AMDGPU_ARCH);
+    BCaseMask(EF_AMDGPU_MACH_NONE, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_R600, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_R630, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_RS880, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_RV670, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_RV710, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_RV730, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_RV770, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_CEDAR, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_CYPRESS, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_JUNIPER, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_REDWOOD, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_SUMO, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_BARTS, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_CAICOS, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_CAYMAN, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_R600_TURKS, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX600, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX601, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX700, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX701, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX702, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX703, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX704, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX801, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX802, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX803, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX810, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX900, EF_AMDGPU_MACH);
+    BCaseMask(EF_AMDGPU_MACH_AMDGCN_GFX902, EF_AMDGPU_MACH);
+    BCase(EF_AMDGPU_XNACK);
     break;
   case ELF::EM_X86_64:
     break;

Modified: llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp Fri Feb 16 14:33:59 2018
@@ -15,30 +15,6 @@
 
 using namespace llvm;
 
-AMDGPUELFStreamer::AMDGPUELFStreamer(const Triple &T, MCContext &Context,
-                                     std::unique_ptr<MCAsmBackend> MAB,
-                                     raw_pwrite_stream &OS,
-                                     std::unique_ptr<MCCodeEmitter> Emitter)
-    : MCELFStreamer(Context, std::move(MAB), OS, std::move(Emitter)) {
-  unsigned Arch = ELF::EF_AMDGPU_ARCH_NONE;
-  switch (T.getArch()) {
-  case Triple::r600:
-    Arch = ELF::EF_AMDGPU_ARCH_R600;
-    break;
-  case Triple::amdgcn:
-    Arch = ELF::EF_AMDGPU_ARCH_GCN;
-    break;
-  default:
-    break;
-  }
-
-  MCAssembler &MCA = getAssembler();
-  unsigned EFlags = MCA.getELFHeaderEFlags();
-  EFlags &= ~ELF::EF_AMDGPU_ARCH;
-  EFlags |= Arch;
-  MCA.setELFHeaderEFlags(EFlags);
-}
-
 MCELFStreamer *llvm::createAMDGPUELFStreamer(
     const Triple &T, MCContext &Context, std::unique_ptr<MCAsmBackend> MAB,
     raw_pwrite_stream &OS, std::unique_ptr<MCCodeEmitter> Emitter,

Modified: llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h (original)
+++ llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h Fri Feb 16 14:33:59 2018
@@ -27,7 +27,8 @@ class AMDGPUELFStreamer : public MCELFSt
 public:
   AMDGPUELFStreamer(const Triple &T, MCContext &Context,
                     std::unique_ptr<MCAsmBackend> MAB, raw_pwrite_stream &OS,
-                    std::unique_ptr<MCCodeEmitter> Emitter);
+                    std::unique_ptr<MCCodeEmitter> Emitter)
+      : MCELFStreamer(Context, std::move(MAB), OS, std::move(Emitter)) {}
 };
 
 MCELFStreamer *createAMDGPUELFStreamer(const Triple &T, MCContext &Context,

Modified: llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp Fri Feb 16 14:33:59 2018
@@ -76,7 +76,7 @@ static MCTargetStreamer *createAMDGPUAsm
 static MCTargetStreamer * createAMDGPUObjectTargetStreamer(
                                                    MCStreamer &S,
                                                    const MCSubtargetInfo &STI) {
-  return new AMDGPUTargetELFStreamer(S);
+  return new AMDGPUTargetELFStreamer(S, STI);
 }
 
 static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context,
@@ -103,6 +103,8 @@ extern "C" void LLVMInitializeAMDGPUTarg
   // R600 specific registration
   TargetRegistry::RegisterMCCodeEmitter(getTheAMDGPUTarget(),
                                         createR600MCCodeEmitter);
+  TargetRegistry::RegisterObjectTargetStreamer(
+      getTheAMDGPUTarget(), createAMDGPUObjectTargetStreamer);
 
   // GCN specific registration
   TargetRegistry::RegisterMCCodeEmitter(getTheGCNTarget(),

Modified: llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp Fri Feb 16 14:33:59 2018
@@ -39,6 +39,66 @@ using namespace llvm::AMDGPU;
 // AMDGPUTargetStreamer
 //===----------------------------------------------------------------------===//
 
+unsigned AMDGPUTargetStreamer::getMACH(StringRef GPU) const {
+  return llvm::StringSwitch<unsigned>(GPU)
+      // Radeon HD 2000/3000 Series (R600).
+      .Case("r600", ELF::EF_AMDGPU_MACH_R600_R600)
+      .Case("r630", ELF::EF_AMDGPU_MACH_R600_R630)
+      .Case("rs880", ELF::EF_AMDGPU_MACH_R600_RS880)
+      .Case("rv670", ELF::EF_AMDGPU_MACH_R600_RV670)
+      // Radeon HD 4000 Series (R700).
+      .Case("rv710", ELF::EF_AMDGPU_MACH_R600_RV710)
+      .Case("rv730", ELF::EF_AMDGPU_MACH_R600_RV730)
+      .Case("rv770", ELF::EF_AMDGPU_MACH_R600_RV770)
+      // Radeon HD 5000 Series (Evergreen).
+      .Case("cedar", ELF::EF_AMDGPU_MACH_R600_CEDAR)
+      .Case("cypress", ELF::EF_AMDGPU_MACH_R600_CYPRESS)
+      .Case("juniper", ELF::EF_AMDGPU_MACH_R600_JUNIPER)
+      .Case("redwood", ELF::EF_AMDGPU_MACH_R600_REDWOOD)
+      .Case("sumo", ELF::EF_AMDGPU_MACH_R600_SUMO)
+      // Radeon HD 6000 Series (Northern Islands).
+      .Case("barts", ELF::EF_AMDGPU_MACH_R600_BARTS)
+      .Case("caicos", ELF::EF_AMDGPU_MACH_R600_CAICOS)
+      .Case("cayman", ELF::EF_AMDGPU_MACH_R600_CAYMAN)
+      .Case("turks", ELF::EF_AMDGPU_MACH_R600_TURKS)
+      // AMDGCN GFX6.
+      .Case("gfx600", ELF::EF_AMDGPU_MACH_AMDGCN_GFX600)
+      .Case("tahiti", ELF::EF_AMDGPU_MACH_AMDGCN_GFX600)
+      .Case("gfx601", ELF::EF_AMDGPU_MACH_AMDGCN_GFX601)
+      .Case("hainan", ELF::EF_AMDGPU_MACH_AMDGCN_GFX601)
+      .Case("oland", ELF::EF_AMDGPU_MACH_AMDGCN_GFX601)
+      .Case("pitcairn", ELF::EF_AMDGPU_MACH_AMDGCN_GFX601)
+      .Case("verde", ELF::EF_AMDGPU_MACH_AMDGCN_GFX601)
+      // AMDGCN GFX7.
+      .Case("gfx700", ELF::EF_AMDGPU_MACH_AMDGCN_GFX700)
+      .Case("kaveri", ELF::EF_AMDGPU_MACH_AMDGCN_GFX700)
+      .Case("gfx701", ELF::EF_AMDGPU_MACH_AMDGCN_GFX701)
+      .Case("hawaii", ELF::EF_AMDGPU_MACH_AMDGCN_GFX701)
+      .Case("gfx702", ELF::EF_AMDGPU_MACH_AMDGCN_GFX702)
+      .Case("gfx703", ELF::EF_AMDGPU_MACH_AMDGCN_GFX703)
+      .Case("kabini", ELF::EF_AMDGPU_MACH_AMDGCN_GFX703)
+      .Case("mullins", ELF::EF_AMDGPU_MACH_AMDGCN_GFX703)
+      .Case("gfx704", ELF::EF_AMDGPU_MACH_AMDGCN_GFX704)
+      .Case("bonaire", ELF::EF_AMDGPU_MACH_AMDGCN_GFX704)
+      // AMDGCN GFX8.
+      .Case("gfx801", ELF::EF_AMDGPU_MACH_AMDGCN_GFX801)
+      .Case("carrizo", ELF::EF_AMDGPU_MACH_AMDGCN_GFX801)
+      .Case("gfx802", ELF::EF_AMDGPU_MACH_AMDGCN_GFX802)
+      .Case("iceland", ELF::EF_AMDGPU_MACH_AMDGCN_GFX802)
+      .Case("tonga", ELF::EF_AMDGPU_MACH_AMDGCN_GFX802)
+      .Case("gfx803", ELF::EF_AMDGPU_MACH_AMDGCN_GFX803)
+      .Case("fiji", ELF::EF_AMDGPU_MACH_AMDGCN_GFX803)
+      .Case("polaris10", ELF::EF_AMDGPU_MACH_AMDGCN_GFX803)
+      .Case("polaris11", ELF::EF_AMDGPU_MACH_AMDGCN_GFX803)
+      .Case("gfx810", ELF::EF_AMDGPU_MACH_AMDGCN_GFX810)
+      .Case("stoney", ELF::EF_AMDGPU_MACH_AMDGCN_GFX810)
+      // AMDGCN GFX9.
+      .Case("gfx900", ELF::EF_AMDGPU_MACH_AMDGCN_GFX900)
+      .Case("gfx902", ELF::EF_AMDGPU_MACH_AMDGCN_GFX902)
+      // Not specified processor.
+      .Default(ELF::EF_AMDGPU_MACH_NONE);
+}
+
 bool AMDGPUTargetStreamer::EmitHSAMetadata(StringRef HSAMetadataString) {
   HSAMD::Metadata HSAMetadata;
   if (HSAMD::fromString(HSAMetadataString, HSAMetadata))
@@ -122,8 +182,21 @@ bool AMDGPUTargetAsmStreamer::EmitPALMet
 // AMDGPUTargetELFStreamer
 //===----------------------------------------------------------------------===//
 
-AMDGPUTargetELFStreamer::AMDGPUTargetELFStreamer(MCStreamer &S)
-    : AMDGPUTargetStreamer(S), Streamer(S) {}
+AMDGPUTargetELFStreamer::AMDGPUTargetELFStreamer(
+    MCStreamer &S, const MCSubtargetInfo &STI)
+    : AMDGPUTargetStreamer(S), STI(STI), Streamer(S) {
+  MCAssembler &MCA = getStreamer().getAssembler();
+  unsigned EFlags = MCA.getELFHeaderEFlags();
+
+  EFlags &= ~ELF::EF_AMDGPU_MACH;
+  EFlags |= getMACH(STI.getCPU());
+
+  EFlags &= ~ELF::EF_AMDGPU_XNACK;
+  if (AMDGPU::hasXNACK(STI))
+    EFlags |= ELF::EF_AMDGPU_XNACK;
+
+  MCA.setELFHeaderEFlags(EFlags);
+}
 
 MCELFStreamer &AMDGPUTargetELFStreamer::getStreamer() {
   return static_cast<MCELFStreamer &>(Streamer);

Modified: llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h (original)
+++ llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h Fri Feb 16 14:33:59 2018
@@ -30,6 +30,9 @@ class AMDGPUTargetStreamer : public MCTa
 protected:
   MCContext &getContext() const { return Streamer.getContext(); }
 
+  /// \returns Equivalent EF_AMDGPU_MACH_* value for given \p GPU name.
+  unsigned getMACH(StringRef GPU) const;
+
 public:
   AMDGPUTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
 
@@ -84,13 +87,14 @@ public:
 };
 
 class AMDGPUTargetELFStreamer final : public AMDGPUTargetStreamer {
+  const MCSubtargetInfo &STI;
   MCStreamer &Streamer;
 
   void EmitAMDGPUNote(const MCExpr *DescSize, unsigned NoteType,
                       function_ref<void(MCELFStreamer &)> EmitDesc);
 
 public:
-  AMDGPUTargetELFStreamer(MCStreamer &S);
+  AMDGPUTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI);
 
   MCELFStreamer &getStreamer();
 

Added: llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-mach.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-mach.ll?rev=325399&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-mach.ll (added)
+++ llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-mach.ll Fri Feb 16 14:33:59 2018
@@ -0,0 +1,88 @@
+; RUN: llc -filetype=obj -march=r600 -mcpu=r600 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,R600 %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=r630 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,R630 %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=rs880 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,RS880 %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=rv670 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,RV670 %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=rv710 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,RV710 %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=rv730 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,RV730 %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=rv770 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,RV770 %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=cedar < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,CEDAR %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=cypress < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,CYPRESS %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=juniper < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,JUNIPER %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=redwood < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,REDWOOD %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=sumo < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,SUMO %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=barts < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,BARTS %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=caicos < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,CAICOS %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=cayman < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,CAYMAN %s
+; RUN: llc -filetype=obj -march=r600 -mcpu=turks < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-R600,TURKS %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx600 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX600 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=tahiti < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX600 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx601 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX601 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=hainan < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX601 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=oland < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX601 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=pitcairn < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX601 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=verde < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX601 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx700 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX700 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=kaveri < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX700 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx701 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX701 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=hawaii < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX701 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx702 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX702 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx703 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX703 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=kabini < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX703 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=mullins < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX703 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx704 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX704 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=bonaire < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX704 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX801 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=carrizo < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX801 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx802 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX802 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=iceland < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX802 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=tonga < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX802 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx803 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX803 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=fiji < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX803 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=polaris10 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX803 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=polaris11 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX803 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx810 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX810 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=stoney < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX810 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx900 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX900 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx902 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=ALL,ARCH-GCN,GFX902 %s
+
+; ARCH-R600: Arch: r600
+; ARCH-GCN:  Arch: amdgcn
+
+; ALL:         Flags [
+; R600:          EF_AMDGPU_MACH_R600_R600     (0x1)
+; R630:          EF_AMDGPU_MACH_R600_R630     (0x2)
+; RS880:         EF_AMDGPU_MACH_R600_RS880    (0x3)
+; RV670:         EF_AMDGPU_MACH_R600_RV670    (0x4)
+; RV710:         EF_AMDGPU_MACH_R600_RV710    (0x5)
+; RV730:         EF_AMDGPU_MACH_R600_RV730    (0x6)
+; RV770:         EF_AMDGPU_MACH_R600_RV770    (0x7)
+; CEDAR:         EF_AMDGPU_MACH_R600_CEDAR    (0x8)
+; CYPRESS:       EF_AMDGPU_MACH_R600_CYPRESS  (0x9)
+; JUNIPER:       EF_AMDGPU_MACH_R600_JUNIPER  (0xA)
+; REDWOOD:       EF_AMDGPU_MACH_R600_REDWOOD  (0xB)
+; SUMO:          EF_AMDGPU_MACH_R600_SUMO     (0xC)
+; BARTS:         EF_AMDGPU_MACH_R600_BARTS    (0xD)
+; CAICOS:        EF_AMDGPU_MACH_R600_CAICOS   (0xE)
+; CAYMAN:        EF_AMDGPU_MACH_R600_CAYMAN   (0xF)
+; TURKS:         EF_AMDGPU_MACH_R600_TURKS    (0x10)
+; GFX600:        EF_AMDGPU_MACH_AMDGCN_GFX600 (0x20)
+; GFX601:        EF_AMDGPU_MACH_AMDGCN_GFX601 (0x21)
+; GFX700:        EF_AMDGPU_MACH_AMDGCN_GFX700 (0x22)
+; GFX701:        EF_AMDGPU_MACH_AMDGCN_GFX701 (0x23)
+; GFX702:        EF_AMDGPU_MACH_AMDGCN_GFX702 (0x24)
+; GFX703:        EF_AMDGPU_MACH_AMDGCN_GFX703 (0x25)
+; GFX704:        EF_AMDGPU_MACH_AMDGCN_GFX704 (0x26)
+; GFX801:        EF_AMDGPU_MACH_AMDGCN_GFX801 (0x28)
+; GFX801-NEXT:   EF_AMDGPU_XNACK              (0x100)
+; GFX802:        EF_AMDGPU_MACH_AMDGCN_GFX802 (0x29)
+; GFX803:        EF_AMDGPU_MACH_AMDGCN_GFX803 (0x2A)
+; GFX810:        EF_AMDGPU_MACH_AMDGCN_GFX810 (0x2B)
+; GFX810-NEXT:   EF_AMDGPU_XNACK              (0x100)
+; GFX900:        EF_AMDGPU_MACH_AMDGCN_GFX900 (0x2C)
+; GFX902:        EF_AMDGPU_MACH_AMDGCN_GFX902 (0x2D)
+; GFX902-NEXT:   EF_AMDGPU_XNACK              (0x100)
+; ALL:         ]
+
+define amdgpu_kernel void @elf_header() {
+  ret void
+}

Added: llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-xnack.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-xnack.ll?rev=325399&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-xnack.ll (added)
+++ llvm/trunk/test/CodeGen/AMDGPU/elf-header-flags-xnack.ll Fri Feb 16 14:33:59 2018
@@ -0,0 +1,15 @@
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx801 -mattr=-xnack < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=NO-XNACK-GFX801 %s
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx802 -mattr=+xnack < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=XNACK-GFX802 %s
+
+; NO-XNACK-GFX801:      Flags [
+; NO-XNACK-GFX801-NEXT:   EF_AMDGPU_MACH_AMDGCN_GFX801 (0x28)
+; NO-XNACK-GFX801-NEXT: ]
+
+; XNACK-GFX802:      Flags [
+; XNACK-GFX802-NEXT:   EF_AMDGPU_MACH_AMDGCN_GFX802 (0x29)
+; XNACK-GFX802-NEXT:   EF_AMDGPU_XNACK              (0x100)
+; XNACK-GFX802-NEXT: ]
+
+define amdgpu_kernel void @elf_header() {
+  ret void
+}

Added: llvm/trunk/test/CodeGen/AMDGPU/elf-header-osabi.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/elf-header-osabi.ll?rev=325399&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/elf-header-osabi.ll (added)
+++ llvm/trunk/test/CodeGen/AMDGPU/elf-header-osabi.ll Fri Feb 16 14:33:59 2018
@@ -0,0 +1,21 @@
+; RUN: llc -filetype=obj -march=amdgcn -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=NONE %s
+; RUN: llc -filetype=obj -mtriple=amdgcn-amd- -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=NONE %s
+; RUN: llc -filetype=obj -mtriple=amdgcn-amd-unknown -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=NONE %s
+; RUN: llc -filetype=obj -mtriple=amdgcn--amdhsa -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=HSA %s
+; RUN: llc -filetype=obj -mtriple=amdgcn-amd-amdhsa -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=HSA %s
+; RUN: llc -filetype=obj -mtriple=amdgcn-unknown-amdhsa -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=HSA %s
+; RUN: llc -filetype=obj -mtriple=amdgcn--amdpal -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=PAL %s
+; RUN: llc -filetype=obj -mtriple=amdgcn-amd-amdpal -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=PAL %s
+; RUN: llc -filetype=obj -mtriple=amdgcn-unknown-amdpal -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=PAL %s
+; RUN: llc -filetype=obj -mtriple=amdgcn--mesa3d -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=MESA3D %s
+; RUN: llc -filetype=obj -mtriple=amdgcn-amd-mesa3d -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=MESA3D %s
+; RUN: llc -filetype=obj -mtriple=amdgcn-unknown-mesa3d -mcpu=gfx801 < %s | llvm-readobj -file-headers - | FileCheck --check-prefixes=MESA3D %s
+
+; NONE:   OS/ABI: SystemV       (0x0)
+; HSA:    OS/ABI: AMDGPU_HSA    (0x40)
+; PAL:    OS/ABI: AMDGPU_PAL    (0x41)
+; MESA3D: OS/ABI: AMDGPU_MESA3D (0x42)
+
+define amdgpu_kernel void @elf_header() {
+  ret void
+}

Removed: llvm/trunk/test/CodeGen/AMDGPU/elf-header.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/elf-header.ll?rev=325398&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/elf-header.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/elf-header.ll (removed)
@@ -1,49 +0,0 @@
-; RUN: llc -march=r600 -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=R600 --check-prefix=R600-OSABI-NONE %s
-; RUN: llc -mtriple=r600-- -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=R600 --check-prefix=R600-OSABI-NONE %s
-; RUN: llc -mtriple=r600-amd- -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=R600 --check-prefix=R600-OSABI-NONE %s
-; RUN: llc -mtriple=r600-amd-unknown -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=R600 --check-prefix=R600-OSABI-NONE %s
-; RUN: llc -mtriple=r600-unknown-unknown -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=R600 --check-prefix=R600-OSABI-NONE %s
-
-; RUN: llc -march=amdgcn -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-NONE %s
-; RUN: llc -mtriple=amdgcn-- -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-NONE %s
-; RUN: llc -mtriple=amdgcn-amd- -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-NONE %s
-; RUN: llc -mtriple=amdgcn-amd-unknown -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-NONE %s
-; RUN: llc -mtriple=amdgcn-unknown-unknown -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-NONE %s
-
-; RUN: llc -mtriple=amdgcn--amdhsa -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-HSA %s
-; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-HSA %s
-; RUN: llc -mtriple=amdgcn-unknown-amdhsa -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-HSA %s
-
-; RUN: llc -mtriple=amdgcn--amdpal -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-PAL %s
-; RUN: llc -mtriple=amdgcn-amd-amdpal -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-PAL %s
-; RUN: llc -mtriple=amdgcn-unknown-amdpal -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-PAL %s
-
-; RUN: llc -mtriple=amdgcn--mesa3d -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-MESA3D %s
-; RUN: llc -mtriple=amdgcn-amd-mesa3d -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-MESA3D %s
-; RUN: llc -mtriple=amdgcn-unknown-mesa3d -filetype=obj < %s | llvm-readobj -file-headers - | FileCheck --check-prefix=GCN --check-prefix=GCN-OSABI-MESA3D %s
-
-; R600: Format: ELF32-amdgpu
-; R600: Arch: r600
-; R600: AddressSize: 32bit
-; GCN:  Format: ELF64-amdgpu
-; GCN:  Arch: amdgcn
-; GCN:  AddressSize: 64bit
-
-; R600-OSABI-NONE:  OS/ABI: SystemV (0x0)
-; GCN-OSABI-NONE:   OS/ABI: SystemV (0x0)
-; GCN-OSABI-HSA:    OS/ABI: AMDGPU_HSA (0x40)
-; GCN-OSABI-PAL:    OS/ABI: AMDGPU_PAL (0x41)
-; GCN-OSABI-MESA3D: OS/ABI: AMDGPU_MESA3D (0x42)
-
-; R600: Machine: EM_AMDGPU (0xE0)
-; R600: Flags [ (0x1)
-; R600:   EF_AMDGPU_ARCH_R600 (0x1)
-; R600: ]
-; GCN:  Machine: EM_AMDGPU (0xE0)
-; GCN:  Flags [ (0x2)
-; GCN:    EF_AMDGPU_ARCH_GCN (0x2)
-; GCN:  ]
-
-define amdgpu_kernel void @elf_header() {
-  ret void
-}

Added: llvm/trunk/test/Object/AMDGPU/elf-header-flags-mach.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/AMDGPU/elf-header-flags-mach.yaml?rev=325399&view=auto
==============================================================================
--- llvm/trunk/test/Object/AMDGPU/elf-header-flags-mach.yaml (added)
+++ llvm/trunk/test/Object/AMDGPU/elf-header-flags-mach.yaml Fri Feb 16 14:33:59 2018
@@ -0,0 +1,468 @@
+# RUN: yaml2obj -docnum=1 %s > %t.o.1
+# RUN: llvm-readobj -s -file-headers %t.o.1 | FileCheck --check-prefixes=ELF-ALL,ELF-R600 %s
+# RUN: obj2yaml %t.o.1 | FileCheck --check-prefixes=YAML-R600 %s
+# RUN: yaml2obj -docnum=2 %s > %t.o.2
+# RUN: llvm-readobj -s -file-headers %t.o.2 | FileCheck --check-prefixes=ELF-ALL,ELF-R630 %s
+# RUN: obj2yaml %t.o.2 | FileCheck --check-prefixes=YAML-R630 %s
+# RUN: yaml2obj -docnum=3 %s > %t.o.3
+# RUN: llvm-readobj -s -file-headers %t.o.3 | FileCheck --check-prefixes=ELF-ALL,ELF-RS880 %s
+# RUN: obj2yaml %t.o.3 | FileCheck --check-prefixes=YAML-RS880 %s
+# RUN: yaml2obj -docnum=4 %s > %t.o.4
+# RUN: llvm-readobj -s -file-headers %t.o.4 | FileCheck --check-prefixes=ELF-ALL,ELF-RV670 %s
+# RUN: obj2yaml %t.o.4 | FileCheck --check-prefixes=YAML-RV670 %s
+# RUN: yaml2obj -docnum=5 %s > %t.o.5
+# RUN: llvm-readobj -s -file-headers %t.o.5 | FileCheck --check-prefixes=ELF-ALL,ELF-RV710 %s
+# RUN: obj2yaml %t.o.5 | FileCheck --check-prefixes=YAML-RV710 %s
+# RUN: yaml2obj -docnum=6 %s > %t.o.6
+# RUN: llvm-readobj -s -file-headers %t.o.6 | FileCheck --check-prefixes=ELF-ALL,ELF-RV730 %s
+# RUN: obj2yaml %t.o.6 | FileCheck --check-prefixes=YAML-RV730 %s
+# RUN: yaml2obj -docnum=7 %s > %t.o.7
+# RUN: llvm-readobj -s -file-headers %t.o.7 | FileCheck --check-prefixes=ELF-ALL,ELF-RV770 %s
+# RUN: obj2yaml %t.o.7 | FileCheck --check-prefixes=YAML-RV770 %s
+# RUN: yaml2obj -docnum=8 %s > %t.o.8
+# RUN: llvm-readobj -s -file-headers %t.o.8 | FileCheck --check-prefixes=ELF-ALL,ELF-CEDAR %s
+# RUN: obj2yaml %t.o.8 | FileCheck --check-prefixes=YAML-CEDAR %s
+# RUN: yaml2obj -docnum=9 %s > %t.o.9
+# RUN: llvm-readobj -s -file-headers %t.o.9 | FileCheck --check-prefixes=ELF-ALL,ELF-CYPRESS %s
+# RUN: obj2yaml %t.o.9 | FileCheck --check-prefixes=YAML-CYPRESS %s
+# RUN: yaml2obj -docnum=10 %s > %t.o.10
+# RUN: llvm-readobj -s -file-headers %t.o.10 | FileCheck --check-prefixes=ELF-ALL,ELF-JUNIPER %s
+# RUN: obj2yaml %t.o.10 | FileCheck --check-prefixes=YAML-JUNIPER %s
+# RUN: yaml2obj -docnum=11 %s > %t.o.11
+# RUN: llvm-readobj -s -file-headers %t.o.11 | FileCheck --check-prefixes=ELF-ALL,ELF-REDWOOD %s
+# RUN: obj2yaml %t.o.11 | FileCheck --check-prefixes=YAML-REDWOOD %s
+# RUN: yaml2obj -docnum=12 %s > %t.o.12
+# RUN: llvm-readobj -s -file-headers %t.o.12 | FileCheck --check-prefixes=ELF-ALL,ELF-SUMO %s
+# RUN: obj2yaml %t.o.12 | FileCheck --check-prefixes=YAML-SUMO %s
+# RUN: yaml2obj -docnum=13 %s > %t.o.13
+# RUN: llvm-readobj -s -file-headers %t.o.13 | FileCheck --check-prefixes=ELF-ALL,ELF-BARTS %s
+# RUN: obj2yaml %t.o.13 | FileCheck --check-prefixes=YAML-BARTS %s
+# RUN: yaml2obj -docnum=14 %s > %t.o.14
+# RUN: llvm-readobj -s -file-headers %t.o.14 | FileCheck --check-prefixes=ELF-ALL,ELF-CAICOS %s
+# RUN: obj2yaml %t.o.14 | FileCheck --check-prefixes=YAML-CAICOS %s
+# RUN: yaml2obj -docnum=15 %s > %t.o.15
+# RUN: llvm-readobj -s -file-headers %t.o.15 | FileCheck --check-prefixes=ELF-ALL,ELF-CAYMAN %s
+# RUN: obj2yaml %t.o.15 | FileCheck --check-prefixes=YAML-CAYMAN %s
+# RUN: yaml2obj -docnum=16 %s > %t.o.16
+# RUN: llvm-readobj -s -file-headers %t.o.16 | FileCheck --check-prefixes=ELF-ALL,ELF-TURKS %s
+# RUN: obj2yaml %t.o.16 | FileCheck --check-prefixes=YAML-TURKS %s
+# RUN: yaml2obj -docnum=17 %s > %t.o.17
+# RUN: llvm-readobj -s -file-headers %t.o.17 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX600 %s
+# RUN: obj2yaml %t.o.17 | FileCheck --check-prefixes=YAML-GFX600 %s
+# RUN: yaml2obj -docnum=18 %s > %t.o.18
+# RUN: llvm-readobj -s -file-headers %t.o.18 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX601 %s
+# RUN: obj2yaml %t.o.18 | FileCheck --check-prefixes=YAML-GFX601 %s
+# RUN: yaml2obj -docnum=19 %s > %t.o.19
+# RUN: llvm-readobj -s -file-headers %t.o.19 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX700 %s
+# RUN: obj2yaml %t.o.19 | FileCheck --check-prefixes=YAML-GFX700 %s
+# RUN: yaml2obj -docnum=20 %s > %t.o.20
+# RUN: llvm-readobj -s -file-headers %t.o.20 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX701 %s
+# RUN: obj2yaml %t.o.20 | FileCheck --check-prefixes=YAML-GFX701 %s
+# RUN: yaml2obj -docnum=21 %s > %t.o.21
+# RUN: llvm-readobj -s -file-headers %t.o.21 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX702 %s
+# RUN: obj2yaml %t.o.21 | FileCheck --check-prefixes=YAML-GFX702 %s
+# RUN: yaml2obj -docnum=22 %s > %t.o.22
+# RUN: llvm-readobj -s -file-headers %t.o.22 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX703 %s
+# RUN: obj2yaml %t.o.22 | FileCheck --check-prefixes=YAML-GFX703 %s
+# RUN: yaml2obj -docnum=23 %s > %t.o.23
+# RUN: llvm-readobj -s -file-headers %t.o.23 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX704 %s
+# RUN: obj2yaml %t.o.23 | FileCheck --check-prefixes=YAML-GFX704 %s
+# RUN: yaml2obj -docnum=24 %s > %t.o.24
+# RUN: llvm-readobj -s -file-headers %t.o.24 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX801 %s
+# RUN: obj2yaml %t.o.24 | FileCheck --check-prefixes=YAML-GFX801 %s
+# RUN: yaml2obj -docnum=25 %s > %t.o.25
+# RUN: llvm-readobj -s -file-headers %t.o.25 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX802 %s
+# RUN: obj2yaml %t.o.25 | FileCheck --check-prefixes=YAML-GFX802 %s
+# RUN: yaml2obj -docnum=26 %s > %t.o.26
+# RUN: llvm-readobj -s -file-headers %t.o.26 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX803 %s
+# RUN: obj2yaml %t.o.26 | FileCheck --check-prefixes=YAML-GFX803 %s
+# RUN: yaml2obj -docnum=27 %s > %t.o.27
+# RUN: llvm-readobj -s -file-headers %t.o.27 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX810 %s
+# RUN: obj2yaml %t.o.27 | FileCheck --check-prefixes=YAML-GFX810 %s
+# RUN: yaml2obj -docnum=28 %s > %t.o.28
+# RUN: llvm-readobj -s -file-headers %t.o.28 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX900 %s
+# RUN: obj2yaml %t.o.28 | FileCheck --check-prefixes=YAML-GFX900 %s
+# RUN: yaml2obj -docnum=29 %s > %t.o.29
+# RUN: llvm-readobj -s -file-headers %t.o.29 | FileCheck --check-prefixes=ELF-ALL,ELF-GFX902 %s
+# RUN: obj2yaml %t.o.29 | FileCheck --check-prefixes=YAML-GFX902 %s
+
+# ELF-ALL:     Flags [
+# ELF-R600:      EF_AMDGPU_MACH_R600_R600     (0x1)
+# ELF-R630:      EF_AMDGPU_MACH_R600_R630     (0x2)
+# ELF-RS880:     EF_AMDGPU_MACH_R600_RS880    (0x3)
+# ELF-RV670:     EF_AMDGPU_MACH_R600_RV670    (0x4)
+# ELF-RV710:     EF_AMDGPU_MACH_R600_RV710    (0x5)
+# ELF-RV730:     EF_AMDGPU_MACH_R600_RV730    (0x6)
+# ELF-RV770:     EF_AMDGPU_MACH_R600_RV770    (0x7)
+# ELF-CEDAR:     EF_AMDGPU_MACH_R600_CEDAR    (0x8)
+# ELF-CYPRESS:   EF_AMDGPU_MACH_R600_CYPRESS  (0x9)
+# ELF-JUNIPER:   EF_AMDGPU_MACH_R600_JUNIPER  (0xA)
+# ELF-REDWOOD:   EF_AMDGPU_MACH_R600_REDWOOD  (0xB)
+# ELF-SUMO:      EF_AMDGPU_MACH_R600_SUMO     (0xC)
+# ELF-BARTS:     EF_AMDGPU_MACH_R600_BARTS    (0xD)
+# ELF-CAICOS:    EF_AMDGPU_MACH_R600_CAICOS   (0xE)
+# ELF-CAYMAN:    EF_AMDGPU_MACH_R600_CAYMAN   (0xF)
+# ELF-TURKS:     EF_AMDGPU_MACH_R600_TURKS    (0x10)
+# ELF-GFX600:    EF_AMDGPU_MACH_AMDGCN_GFX600 (0x20)
+# ELF-GFX601:    EF_AMDGPU_MACH_AMDGCN_GFX601 (0x21)
+# ELF-GFX700:    EF_AMDGPU_MACH_AMDGCN_GFX700 (0x22)
+# ELF-GFX701:    EF_AMDGPU_MACH_AMDGCN_GFX701 (0x23)
+# ELF-GFX702:    EF_AMDGPU_MACH_AMDGCN_GFX702 (0x24)
+# ELF-GFX703:    EF_AMDGPU_MACH_AMDGCN_GFX703 (0x25)
+# ELF-GFX704:    EF_AMDGPU_MACH_AMDGCN_GFX704 (0x26)
+# ELF-GFX801:    EF_AMDGPU_MACH_AMDGCN_GFX801 (0x28)
+# ELF-GFX802:    EF_AMDGPU_MACH_AMDGCN_GFX802 (0x29)
+# ELF-GFX803:    EF_AMDGPU_MACH_AMDGCN_GFX803 (0x2A)
+# ELF-GFX810:    EF_AMDGPU_MACH_AMDGCN_GFX810 (0x2B)
+# ELF-GFX900:    EF_AMDGPU_MACH_AMDGCN_GFX900 (0x2C)
+# ELF-GFX902:    EF_AMDGPU_MACH_AMDGCN_GFX902 (0x2D)
+# ELF-ALL:     ]
+
+# YAML-R600:    Flags: [ EF_AMDGPU_MACH_R600_R600 ]
+# YAML-R630:    Flags: [ EF_AMDGPU_MACH_R600_R630 ]
+# YAML-RS880:   Flags: [ EF_AMDGPU_MACH_R600_RS880 ]
+# YAML-RV670:   Flags: [ EF_AMDGPU_MACH_R600_RV670 ]
+# YAML-RV710:   Flags: [ EF_AMDGPU_MACH_R600_RV710 ]
+# YAML-RV730:   Flags: [ EF_AMDGPU_MACH_R600_RV730 ]
+# YAML-RV770:   Flags: [ EF_AMDGPU_MACH_R600_RV770 ]
+# YAML-CEDAR:   Flags: [ EF_AMDGPU_MACH_R600_CEDAR ]
+# YAML-CYPRESS: Flags: [ EF_AMDGPU_MACH_R600_CYPRESS ]
+# YAML-JUNIPER: Flags: [ EF_AMDGPU_MACH_R600_JUNIPER ]
+# YAML-REDWOOD: Flags: [ EF_AMDGPU_MACH_R600_REDWOOD ]
+# YAML-SUMO:    Flags: [ EF_AMDGPU_MACH_R600_SUMO ]
+# YAML-BARTS:   Flags: [ EF_AMDGPU_MACH_R600_BARTS ]
+# YAML-CAICOS:  Flags: [ EF_AMDGPU_MACH_R600_CAICOS ]
+# YAML-CAYMAN:  Flags: [ EF_AMDGPU_MACH_R600_CAYMAN ]
+# YAML-TURKS:   Flags: [ EF_AMDGPU_MACH_R600_TURKS ]
+# YAML-GFX600:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX600 ]
+# YAML-GFX601:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX601 ]
+# YAML-GFX700:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX700 ]
+# YAML-GFX701:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX701 ]
+# YAML-GFX702:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX702 ]
+# YAML-GFX703:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX703 ]
+# YAML-GFX704:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX704 ]
+# YAML-GFX801:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX801 ]
+# YAML-GFX802:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX802 ]
+# YAML-GFX803:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX803 ]
+# YAML-GFX810:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX810 ]
+# YAML-GFX900:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX900 ]
+# YAML-GFX902:  Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX902 ]
+
+# Doc1
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_R600 ]
+...
+
+# Doc2
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_R630 ]
+...
+
+# Doc3
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_RS880 ]
+...
+
+# Doc4
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_RV670 ]
+...
+
+# Doc5
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_RV710 ]
+...
+
+# Doc6
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_RV730 ]
+...
+
+# Doc7
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_RV770 ]
+...
+
+# Doc8
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_CEDAR ]
+...
+
+# Doc9
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_CYPRESS ]
+...
+
+# Doc10
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_JUNIPER ]
+...
+
+# Doc11
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_REDWOOD ]
+...
+
+# Doc12
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_SUMO ]
+...
+
+# Doc13
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_BARTS ]
+...
+
+# Doc14
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_CAICOS ]
+...
+
+# Doc15
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_CAYMAN ]
+...
+
+# Doc16
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_R600_TURKS ]
+...
+
+# Doc17
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX600 ]
+...
+
+# Doc18
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX601 ]
+...
+
+# Doc19
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX700 ]
+...
+
+# Doc20
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX701 ]
+...
+
+# Doc21
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX702 ]
+...
+
+# Doc22
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX703 ]
+...
+
+# Doc23
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX704 ]
+...
+
+# Doc24
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX801 ]
+...
+
+# Doc25
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX802 ]
+...
+
+# Doc26
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX803 ]
+...
+
+# Doc27
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX810 ]
+...
+
+# Doc28
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX900 ]
+...
+
+# Doc29
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX902 ]
+...

Added: llvm/trunk/test/Object/AMDGPU/elf-header-flags-xnack.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/AMDGPU/elf-header-flags-xnack.yaml?rev=325399&view=auto
==============================================================================
--- llvm/trunk/test/Object/AMDGPU/elf-header-flags-xnack.yaml (added)
+++ llvm/trunk/test/Object/AMDGPU/elf-header-flags-xnack.yaml Fri Feb 16 14:33:59 2018
@@ -0,0 +1,37 @@
+# RUN: yaml2obj -docnum=1 %s > %t.o.1
+# RUN: llvm-readobj -s -file-headers %t.o.1 | FileCheck --check-prefixes=ELF-ALL,ELF-XNACK-NONE %s
+# RUN: obj2yaml %t.o.1 | FileCheck --check-prefixes=YAML-XNACK-NONE %s
+# RUN: yaml2obj -docnum=2 %s > %t.o.2
+# RUN: llvm-readobj -s -file-headers %t.o.2 | FileCheck --check-prefixes=ELF-ALL,ELF-XNACK-GFX801 %s
+# RUN: obj2yaml %t.o.2 | FileCheck --check-prefixes=YAML-XNACK-GFX801 %s
+
+# ELF-ALL:          Flags [
+# ELF-XNACK-NONE:     EF_AMDGPU_XNACK              (0x100)
+# ELF-XNACK-GFX801:   EF_AMDGPU_MACH_AMDGCN_GFX801 (0x28)
+# ELF-XNACK-GFX801:   EF_AMDGPU_XNACK              (0x100)
+# ELF-ALL:          ]
+
+# YAML-XNACK-NONE:   Flags: [ EF_AMDGPU_MACH_NONE, EF_AMDGPU_XNACK ]
+# YAML-XNACK-GFX801: Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX801, EF_AMDGPU_XNACK ]
+
+# Doc1
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_XNACK ]
+...
+
+# Doc2
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_NONE
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ EF_AMDGPU_MACH_AMDGCN_GFX801, EF_AMDGPU_XNACK ]
+...

Added: llvm/trunk/test/Object/AMDGPU/elf-header-osabi.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/AMDGPU/elf-header-osabi.yaml?rev=325399&view=auto
==============================================================================
--- llvm/trunk/test/Object/AMDGPU/elf-header-osabi.yaml (added)
+++ llvm/trunk/test/Object/AMDGPU/elf-header-osabi.yaml Fri Feb 16 14:33:59 2018
@@ -0,0 +1,50 @@
+# RUN: yaml2obj -docnum=1 %s > %t.o.1
+# RUN: llvm-readobj -s -file-headers %t.o.1 | FileCheck --check-prefixes=ELF-HSA %s
+# RUN: obj2yaml %t.o.1 | FileCheck --check-prefixes=YAML-HSA %s
+# RUN: yaml2obj -docnum=2 %s > %t.o.2
+# RUN: llvm-readobj -s -file-headers %t.o.2 | FileCheck --check-prefixes=ELF-PAL %s
+# RUN: obj2yaml %t.o.2 | FileCheck --check-prefixes=YAML-PAL %s
+# RUN: yaml2obj -docnum=3 %s > %t.o.3
+# RUN: llvm-readobj -s -file-headers %t.o.3 | FileCheck --check-prefixes=ELF-MESA3D %s
+# RUN: obj2yaml %t.o.3 | FileCheck --check-prefixes=YAML-MESA3D %s
+
+# ELF-HSA:    OS/ABI: AMDGPU_HSA    (0x40)
+# ELF-PAL:    OS/ABI: AMDGPU_PAL    (0x41)
+# ELF-MESA3D: OS/ABI: AMDGPU_MESA3D (0x42)
+
+# YAML-HSA:    OSABI: ELFOSABI_AMDGPU_HSA
+# YAML-PAL:    OSABI: ELFOSABI_AMDGPU_PAL
+# YAML-MESA3D: OSABI: ELFOSABI_AMDGPU_MESA3D
+
+# Doc1
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_AMDGPU_HSA
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ ]
+...
+
+# Doc2
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_AMDGPU_PAL
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ ]
+...
+
+# Doc3
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  OSABI:   ELFOSABI_AMDGPU_MESA3D
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  Flags:   [ ]
+...

Removed: llvm/trunk/test/Object/AMDGPU/elf32-r600-definitions.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/AMDGPU/elf32-r600-definitions.yaml?rev=325398&view=auto
==============================================================================
--- llvm/trunk/test/Object/AMDGPU/elf32-r600-definitions.yaml (original)
+++ llvm/trunk/test/Object/AMDGPU/elf32-r600-definitions.yaml (removed)
@@ -1,34 +0,0 @@
-# RUN: yaml2obj %s > %t.o
-# RUN: llvm-readobj -s -file-headers %t.o | FileCheck --check-prefix=ELF %s
-# RUN: obj2yaml %t.o | FileCheck --check-prefix=YAML %s
-
-# ELF: Format: ELF32-amdgpu
-# ELF: Arch: r600
-# ELF: ElfHeader {
-# ELF:   Ident {
-# ELF:     OS/ABI: AMDGPU_HSA (0x40)
-# ELF:     ABIVersion: 0
-# ELF:   }
-# ELF:   Machine: EM_AMDGPU (0xE0)
-# ELF:   Flags [ (0x1)
-# ELF:     EF_AMDGPU_ARCH_R600 (0x1)
-# ELF:   ]
-# ELF: }
-
-# YAML: FileHeader
-# YAML:   Class:   ELFCLASS32
-# YAML:   Data:    ELFDATA2LSB
-# YAML:   OSABI:   ELFOSABI_AMDGPU_HSA
-# YAML:   Type:    ET_REL
-# YAML:   Machine: EM_AMDGPU
-# YAML:   Flags:   [ EF_AMDGPU_ARCH_R600 ]
-
---- !ELF
-FileHeader:
-  Class:   ELFCLASS32
-  Data:    ELFDATA2LSB
-  OSABI:   ELFOSABI_AMDGPU_HSA
-  Type:    ET_REL
-  Machine: EM_AMDGPU
-  Flags:   [ EF_AMDGPU_ARCH_R600 ]
-...

Removed: llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdhsa-definitions.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdhsa-definitions.yaml?rev=325398&view=auto
==============================================================================
--- llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdhsa-definitions.yaml (original)
+++ llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdhsa-definitions.yaml (removed)
@@ -1,34 +0,0 @@
-# RUN: yaml2obj %s > %t.o
-# RUN: llvm-readobj -s -file-headers %t.o | FileCheck --check-prefix=ELF %s
-# RUN: obj2yaml %t.o | FileCheck --check-prefix=YAML %s
-
-# ELF: Format: ELF64-amdgpu
-# ELF: Arch: amdgcn
-# ELF: ElfHeader {
-# ELF:   Ident {
-# ELF:     OS/ABI: AMDGPU_HSA (0x40)
-# ELF:     ABIVersion: 0
-# ELF:   }
-# ELF:   Machine: EM_AMDGPU (0xE0)
-# ELF:   Flags [ (0x2)
-# ELF:     EF_AMDGPU_ARCH_GCN (0x2)
-# ELF:   ]
-# ELF: }
-
-# YAML: FileHeader
-# YAML:   Class:   ELFCLASS64
-# YAML:   Data:    ELFDATA2LSB
-# YAML:   OSABI:   ELFOSABI_AMDGPU_HSA
-# YAML:   Type:    ET_REL
-# YAML:   Machine: EM_AMDGPU
-# YAML:   Flags:   [ EF_AMDGPU_ARCH_GCN ]
-
---- !ELF
-FileHeader:
-  Class:   ELFCLASS64
-  Data:    ELFDATA2LSB
-  OSABI:   ELFOSABI_AMDGPU_HSA
-  Type:    ET_REL
-  Machine: EM_AMDGPU
-  Flags:   [ EF_AMDGPU_ARCH_GCN ]
-...

Removed: llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdpal-definitions.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdpal-definitions.yaml?rev=325398&view=auto
==============================================================================
--- llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdpal-definitions.yaml (original)
+++ llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-amdpal-definitions.yaml (removed)
@@ -1,34 +0,0 @@
-# RUN: yaml2obj %s > %t.o
-# RUN: llvm-readobj -s -file-headers %t.o | FileCheck --check-prefix=ELF %s
-# RUN: obj2yaml %t.o | FileCheck --check-prefix=YAML %s
-
-# ELF: Format: ELF64-amdgpu
-# ELF: Arch: amdgcn
-# ELF: ElfHeader {
-# ELF:   Ident {
-# ELF:     OS/ABI: AMDGPU_PAL (0x41)
-# ELF:     ABIVersion: 0
-# ELF:   }
-# ELF:   Machine: EM_AMDGPU (0xE0)
-# ELF:   Flags [ (0x2)
-# ELF:     EF_AMDGPU_ARCH_GCN (0x2)
-# ELF:   ]
-# ELF: }
-
-# YAML: FileHeader
-# YAML:   Class:   ELFCLASS64
-# YAML:   Data:    ELFDATA2LSB
-# YAML:   OSABI:   ELFOSABI_AMDGPU_PAL
-# YAML:   Type:    ET_REL
-# YAML:   Machine: EM_AMDGPU
-# YAML:   Flags:   [ EF_AMDGPU_ARCH_GCN ]
-
---- !ELF
-FileHeader:
-  Class:   ELFCLASS64
-  Data:    ELFDATA2LSB
-  OSABI:   ELFOSABI_AMDGPU_PAL
-  Type:    ET_REL
-  Machine: EM_AMDGPU
-  Flags:   [ EF_AMDGPU_ARCH_GCN ]
-...

Removed: llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml?rev=325398&view=auto
==============================================================================
--- llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml (original)
+++ llvm/trunk/test/Object/AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml (removed)
@@ -1,34 +0,0 @@
-# RUN: yaml2obj %s > %t.o
-# RUN: llvm-readobj -s -file-headers %t.o | FileCheck --check-prefix=ELF %s
-# RUN: obj2yaml %t.o | FileCheck --check-prefix=YAML %s
-
-# ELF: Format: ELF64-amdgpu
-# ELF: Arch: amdgcn
-# ELF: ElfHeader {
-# ELF:   Ident {
-# ELF:     OS/ABI: AMDGPU_MESA3D (0x42)
-# ELF:     ABIVersion: 0
-# ELF:   }
-# ELF:   Machine: EM_AMDGPU (0xE0)
-# ELF:   Flags [ (0x2)
-# ELF:     EF_AMDGPU_ARCH_GCN (0x2)
-# ELF:   ]
-# ELF: }
-
-# YAML: FileHeader
-# YAML:   Class:   ELFCLASS64
-# YAML:   Data:    ELFDATA2LSB
-# YAML:   OSABI:   ELFOSABI_AMDGPU_MESA3D
-# YAML:   Type:    ET_REL
-# YAML:   Machine: EM_AMDGPU
-# YAML:   Flags:   [ EF_AMDGPU_ARCH_GCN ]
-
---- !ELF
-FileHeader:
-  Class:   ELFCLASS64
-  Data:    ELFDATA2LSB
-  OSABI:   ELFOSABI_AMDGPU_MESA3D
-  Type:    ET_REL
-  Machine: EM_AMDGPU
-  Flags:   [ EF_AMDGPU_ARCH_GCN ]
-...

Modified: llvm/trunk/tools/llvm-readobj/ELFDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=325399&r1=325398&r2=325399&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/ELFDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/ELFDumper.cpp Fri Feb 16 14:33:59 2018
@@ -1260,9 +1260,37 @@ static const EnumEntry<unsigned> ElfHead
 };
 
 static const EnumEntry<unsigned> ElfHeaderAMDGPUFlags[] = {
-  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_ARCH_NONE),
-  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_ARCH_R600),
-  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_ARCH_GCN)
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_NONE),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_R600),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_R630),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RS880),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV670),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV710),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV730),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_RV770),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CEDAR),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CYPRESS),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_JUNIPER),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_REDWOOD),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_SUMO),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_BARTS),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CAICOS),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_CAYMAN),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_TURKS),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX600),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX601),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX700),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX701),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX702),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX703),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX704),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX801),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX802),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX803),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX810),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX900),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_AMDGCN_GFX902),
+  LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_XNACK)
 };
 
 static const EnumEntry<unsigned> ElfHeaderRISCVFlags[] = {
@@ -3727,7 +3755,7 @@ template <class ELFT> void LLVMStyle<ELF
                    unsigned(ELF::EF_MIPS_MACH));
     else if (e->e_machine == EM_AMDGPU)
       W.printFlags("Flags", e->e_flags, makeArrayRef(ElfHeaderAMDGPUFlags),
-                   unsigned(ELF::EF_AMDGPU_ARCH));
+                   unsigned(ELF::EF_AMDGPU_MACH));
     else if (e->e_machine == EM_RISCV)
       W.printFlags("Flags", e->e_flags, makeArrayRef(ElfHeaderRISCVFlags));
     else




More information about the llvm-commits mailing list