1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

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

llvm-svn: 325399
This commit is contained in:
Konstantin Zhuravlyov 2018-02-16 22:33:59 +00:00
parent eae6de7a63
commit 65fd4d6316
21 changed files with 942 additions and 273 deletions

View File

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

View File

@ -651,11 +651,70 @@ enum {
// AMDGPU specific e_flags. // AMDGPU specific e_flags.
enum : unsigned { enum : unsigned {
// AMDGPU machine architectures. // Processor selection mask for EF_AMDGPU_MACH_* values.
EF_AMDGPU_ARCH_NONE = 0x00000000, // None/unknown. EF_AMDGPU_MACH = 0x0ff,
EF_AMDGPU_ARCH_R600 = 0x00000001, // AMD HD2XXX-HD6XXX GPUs.
EF_AMDGPU_ARCH_GCN = 0x00000002, // AMD GCN GFX6+ GPUs. // Not specified processor.
EF_AMDGPU_ARCH = 0x0000000f // EF_AMDGPU_ARCH_XXX selection mask. 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 // ELF Relocation types for AMDGPU

View File

@ -1087,15 +1087,15 @@ template <class ELFT> Triple::ArchType ELFObjectFile<ELFT>::getArch() const {
if (!IsLittleEndian) if (!IsLittleEndian)
return Triple::UnknownArch; return Triple::UnknownArch;
unsigned EFlags = EF.getHeader()->e_flags; unsigned MACH = EF.getHeader()->e_flags & ELF::EF_AMDGPU_MACH;
switch (EFlags & ELF::EF_AMDGPU_ARCH) { if (MACH >= ELF::EF_AMDGPU_MACH_R600_FIRST &&
case ELF::EF_AMDGPU_ARCH_R600: MACH <= ELF::EF_AMDGPU_MACH_R600_LAST)
return Triple::r600; 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; return Triple::amdgcn;
default:
return Triple::UnknownArch; return Triple::UnknownArch;
}
} }
case ELF::EM_BPF: case ELF::EM_BPF:

View File

@ -369,8 +369,37 @@ void ScalarBitSetTraits<ELFYAML::ELF_EF>::bitset(IO &IO,
BCase(EF_RISCV_RVE); BCase(EF_RISCV_RVE);
break; break;
case ELF::EM_AMDGPU: case ELF::EM_AMDGPU:
BCaseMask(EF_AMDGPU_ARCH_R600, EF_AMDGPU_ARCH); BCaseMask(EF_AMDGPU_MACH_NONE, EF_AMDGPU_MACH);
BCaseMask(EF_AMDGPU_ARCH_GCN, EF_AMDGPU_ARCH); 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; break;
case ELF::EM_X86_64: case ELF::EM_X86_64:
break; break;

View File

@ -15,30 +15,6 @@
using namespace llvm; 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( MCELFStreamer *llvm::createAMDGPUELFStreamer(
const Triple &T, MCContext &Context, std::unique_ptr<MCAsmBackend> MAB, const Triple &T, MCContext &Context, std::unique_ptr<MCAsmBackend> MAB,
raw_pwrite_stream &OS, std::unique_ptr<MCCodeEmitter> Emitter, raw_pwrite_stream &OS, std::unique_ptr<MCCodeEmitter> Emitter,

View File

@ -27,7 +27,8 @@ class AMDGPUELFStreamer : public MCELFStreamer {
public: public:
AMDGPUELFStreamer(const Triple &T, MCContext &Context, AMDGPUELFStreamer(const Triple &T, MCContext &Context,
std::unique_ptr<MCAsmBackend> MAB, raw_pwrite_stream &OS, 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, MCELFStreamer *createAMDGPUELFStreamer(const Triple &T, MCContext &Context,

View File

@ -76,7 +76,7 @@ static MCTargetStreamer *createAMDGPUAsmTargetStreamer(MCStreamer &S,
static MCTargetStreamer * createAMDGPUObjectTargetStreamer( static MCTargetStreamer * createAMDGPUObjectTargetStreamer(
MCStreamer &S, MCStreamer &S,
const MCSubtargetInfo &STI) { const MCSubtargetInfo &STI) {
return new AMDGPUTargetELFStreamer(S); return new AMDGPUTargetELFStreamer(S, STI);
} }
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context, static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context,
@ -103,6 +103,8 @@ extern "C" void LLVMInitializeAMDGPUTargetMC() {
// R600 specific registration // R600 specific registration
TargetRegistry::RegisterMCCodeEmitter(getTheAMDGPUTarget(), TargetRegistry::RegisterMCCodeEmitter(getTheAMDGPUTarget(),
createR600MCCodeEmitter); createR600MCCodeEmitter);
TargetRegistry::RegisterObjectTargetStreamer(
getTheAMDGPUTarget(), createAMDGPUObjectTargetStreamer);
// GCN specific registration // GCN specific registration
TargetRegistry::RegisterMCCodeEmitter(getTheGCNTarget(), TargetRegistry::RegisterMCCodeEmitter(getTheGCNTarget(),

View File

@ -39,6 +39,66 @@ using namespace llvm::AMDGPU;
// AMDGPUTargetStreamer // 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) { bool AMDGPUTargetStreamer::EmitHSAMetadata(StringRef HSAMetadataString) {
HSAMD::Metadata HSAMetadata; HSAMD::Metadata HSAMetadata;
if (HSAMD::fromString(HSAMetadataString, HSAMetadata)) if (HSAMD::fromString(HSAMetadataString, HSAMetadata))
@ -122,8 +182,21 @@ bool AMDGPUTargetAsmStreamer::EmitPALMetadata(
// AMDGPUTargetELFStreamer // AMDGPUTargetELFStreamer
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
AMDGPUTargetELFStreamer::AMDGPUTargetELFStreamer(MCStreamer &S) AMDGPUTargetELFStreamer::AMDGPUTargetELFStreamer(
: AMDGPUTargetStreamer(S), Streamer(S) {} 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() { MCELFStreamer &AMDGPUTargetELFStreamer::getStreamer() {
return static_cast<MCELFStreamer &>(Streamer); return static_cast<MCELFStreamer &>(Streamer);

View File

@ -30,6 +30,9 @@ class AMDGPUTargetStreamer : public MCTargetStreamer {
protected: protected:
MCContext &getContext() const { return Streamer.getContext(); } MCContext &getContext() const { return Streamer.getContext(); }
/// \returns Equivalent EF_AMDGPU_MACH_* value for given \p GPU name.
unsigned getMACH(StringRef GPU) const;
public: public:
AMDGPUTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {} AMDGPUTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
@ -84,13 +87,14 @@ public:
}; };
class AMDGPUTargetELFStreamer final : public AMDGPUTargetStreamer { class AMDGPUTargetELFStreamer final : public AMDGPUTargetStreamer {
const MCSubtargetInfo &STI;
MCStreamer &Streamer; MCStreamer &Streamer;
void EmitAMDGPUNote(const MCExpr *DescSize, unsigned NoteType, void EmitAMDGPUNote(const MCExpr *DescSize, unsigned NoteType,
function_ref<void(MCELFStreamer &)> EmitDesc); function_ref<void(MCELFStreamer &)> EmitDesc);
public: public:
AMDGPUTargetELFStreamer(MCStreamer &S); AMDGPUTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI);
MCELFStreamer &getStreamer(); MCELFStreamer &getStreamer();

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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 ]
...

View File

@ -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 ]
...

View File

@ -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: [ ]
...

View File

@ -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 ]
...

View File

@ -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 ]
...

View File

@ -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 ]
...

View File

@ -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 ]
...

View File

@ -1260,9 +1260,37 @@ static const EnumEntry<unsigned> ElfHeaderMipsFlags[] = {
}; };
static const EnumEntry<unsigned> ElfHeaderAMDGPUFlags[] = { static const EnumEntry<unsigned> ElfHeaderAMDGPUFlags[] = {
LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_ARCH_NONE), LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_NONE),
LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_ARCH_R600), LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_MACH_R600_R600),
LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_ARCH_GCN) 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[] = { static const EnumEntry<unsigned> ElfHeaderRISCVFlags[] = {
@ -3727,7 +3755,7 @@ template <class ELFT> void LLVMStyle<ELFT>::printFileHeaders(const ELFO *Obj) {
unsigned(ELF::EF_MIPS_MACH)); unsigned(ELF::EF_MIPS_MACH));
else if (e->e_machine == EM_AMDGPU) else if (e->e_machine == EM_AMDGPU)
W.printFlags("Flags", e->e_flags, makeArrayRef(ElfHeaderAMDGPUFlags), 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) else if (e->e_machine == EM_RISCV)
W.printFlags("Flags", e->e_flags, makeArrayRef(ElfHeaderRISCVFlags)); W.printFlags("Flags", e->e_flags, makeArrayRef(ElfHeaderRISCVFlags));
else else