[llvm-objdump][AMDGPU] Pass ELF ABIVersion through disassembler (#78907)
Admittedly, its a bit ugly to pass the ABIVersion through onSymbolStart but I'm not sure what a better place for it would be.
This commit is contained in:
parent
bed3608c22
commit
4eb0810922
@ -217,6 +217,9 @@ public:
|
||||
|
||||
const MCSubtargetInfo& getSubtargetInfo() const { return STI; }
|
||||
|
||||
/// ELF-specific, set the ABI version from the object header.
|
||||
virtual void setABIVersion(unsigned Version) {}
|
||||
|
||||
// Marked mutable because we cache it inside the disassembler, rather than
|
||||
// having to pass it around as an argument through all the autogenerated code.
|
||||
mutable raw_ostream *CommentStream = nullptr;
|
||||
|
||||
@ -103,6 +103,8 @@ public:
|
||||
|
||||
virtual uint16_t getEMachine() const = 0;
|
||||
|
||||
virtual uint8_t getEIdentABIVersion() const = 0;
|
||||
|
||||
std::vector<ELFPltEntry> getPltEntries() const;
|
||||
|
||||
/// Returns a vector containing a symbol version for each dynamic symbol.
|
||||
@ -251,6 +253,7 @@ ELFObjectFileBase::symbols() const {
|
||||
template <class ELFT> class ELFObjectFile : public ELFObjectFileBase {
|
||||
uint16_t getEMachine() const override;
|
||||
uint16_t getEType() const override;
|
||||
uint8_t getEIdentABIVersion() const override;
|
||||
uint64_t getSymbolSize(DataRefImpl Sym) const override;
|
||||
|
||||
public:
|
||||
@ -645,6 +648,10 @@ template <class ELFT> uint16_t ELFObjectFile<ELFT>::getEType() const {
|
||||
return EF.getHeader().e_type;
|
||||
}
|
||||
|
||||
template <class ELFT> uint8_t ELFObjectFile<ELFT>::getEIdentABIVersion() const {
|
||||
return EF.getHeader().e_ident[ELF::EI_ABIVERSION];
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
uint64_t ELFObjectFile<ELFT>::getSymbolSize(DataRefImpl Sym) const {
|
||||
Expected<const Elf_Sym *> SymOrErr = getSymbol(Sym);
|
||||
|
||||
@ -47,12 +47,17 @@ using DecodeStatus = llvm::MCDisassembler::DecodeStatus;
|
||||
AMDGPUDisassembler::AMDGPUDisassembler(const MCSubtargetInfo &STI,
|
||||
MCContext &Ctx, MCInstrInfo const *MCII)
|
||||
: MCDisassembler(STI, Ctx), MCII(MCII), MRI(*Ctx.getRegisterInfo()),
|
||||
MAI(*Ctx.getAsmInfo()), TargetMaxInstBytes(MAI.getMaxInstLength(&STI)) {
|
||||
MAI(*Ctx.getAsmInfo()), TargetMaxInstBytes(MAI.getMaxInstLength(&STI)),
|
||||
CodeObjectVersion(AMDGPU::getDefaultAMDHSACodeObjectVersion()) {
|
||||
// ToDo: AMDGPUDisassembler supports only VI ISA.
|
||||
if (!STI.hasFeature(AMDGPU::FeatureGCN3Encoding) && !isGFX10Plus())
|
||||
report_fatal_error("Disassembly not yet supported for subtarget");
|
||||
}
|
||||
|
||||
void AMDGPUDisassembler::setABIVersion(unsigned Version) {
|
||||
CodeObjectVersion = AMDGPU::getAMDHSACodeObjectVersion(Version);
|
||||
}
|
||||
|
||||
inline static MCDisassembler::DecodeStatus
|
||||
addOperand(MCInst &Inst, const MCOperand& Opnd) {
|
||||
Inst.addOperand(Opnd);
|
||||
@ -2202,8 +2207,7 @@ AMDGPUDisassembler::decodeKernelDescriptorDirective(
|
||||
KERNEL_CODE_PROPERTY_ENABLE_WAVEFRONT_SIZE32);
|
||||
}
|
||||
|
||||
// FIXME: We should be looking at the ELF header ABI version for this.
|
||||
if (AMDGPU::getDefaultAMDHSACodeObjectVersion() >= AMDGPU::AMDHSA_COV5)
|
||||
if (CodeObjectVersion >= AMDGPU::AMDHSA_COV5)
|
||||
PRINT_DIRECTIVE(".amdhsa_uses_dynamic_stack",
|
||||
KERNEL_CODE_PROPERTY_USES_DYNAMIC_STACK);
|
||||
|
||||
|
||||
@ -100,12 +100,15 @@ private:
|
||||
mutable uint64_t Literal64;
|
||||
mutable bool HasLiteral;
|
||||
mutable std::optional<bool> EnableWavefrontSize32;
|
||||
unsigned CodeObjectVersion;
|
||||
|
||||
public:
|
||||
AMDGPUDisassembler(const MCSubtargetInfo &STI, MCContext &Ctx,
|
||||
MCInstrInfo const *MCII);
|
||||
~AMDGPUDisassembler() override = default;
|
||||
|
||||
void setABIVersion(unsigned Version) override;
|
||||
|
||||
DecodeStatus getInstruction(MCInst &MI, uint64_t &Size,
|
||||
ArrayRef<uint8_t> Bytes, uint64_t Address,
|
||||
raw_ostream &CS) const override;
|
||||
|
||||
@ -175,6 +175,17 @@ unsigned getDefaultAMDHSACodeObjectVersion() {
|
||||
return DefaultAMDHSACodeObjectVersion;
|
||||
}
|
||||
|
||||
unsigned getAMDHSACodeObjectVersion(unsigned ABIVersion) {
|
||||
switch (ABIVersion) {
|
||||
case ELF::ELFABIVERSION_AMDGPU_HSA_V4:
|
||||
return 4;
|
||||
case ELF::ELFABIVERSION_AMDGPU_HSA_V5:
|
||||
return 5;
|
||||
default:
|
||||
return getDefaultAMDHSACodeObjectVersion();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t getELFABIVersion(const Triple &T, unsigned CodeObjectVersion) {
|
||||
if (T.getOS() != Triple::AMDHSA)
|
||||
return 0;
|
||||
|
||||
@ -50,12 +50,15 @@ bool isHsaAbi(const MCSubtargetInfo &STI);
|
||||
/// \returns Code object version from the IR module flag.
|
||||
unsigned getAMDHSACodeObjectVersion(const Module &M);
|
||||
|
||||
/// \returns Code object version from ELF's e_ident[EI_ABIVERSION].
|
||||
unsigned getAMDHSACodeObjectVersion(unsigned ABIVersion);
|
||||
|
||||
/// \returns The default HSA code object version. This should only be used when
|
||||
/// we lack a more accurate CodeObjectVersion value (e.g. from the IR module
|
||||
/// flag or a .amdhsa_code_object_version directive)
|
||||
unsigned getDefaultAMDHSACodeObjectVersion();
|
||||
|
||||
/// \returns ABIVersion suitable for use in ELF's e_ident[ABIVERSION]. \param
|
||||
/// \returns ABIVersion suitable for use in ELF's e_ident[EI_ABIVERSION]. \param
|
||||
/// CodeObjectVersion is a value returned by getAMDHSACodeObjectVersion().
|
||||
uint8_t getELFABIVersion(const Triple &OS, unsigned CodeObjectVersion);
|
||||
|
||||
|
||||
21
llvm/test/tools/llvm-objdump/ELF/AMDGPU/kd-cov5.s
Normal file
21
llvm/test/tools/llvm-objdump/ELF/AMDGPU/kd-cov5.s
Normal file
@ -0,0 +1,21 @@
|
||||
; RUN: sed 's/CODE_OBJECT_VERSION/5/g' %s \
|
||||
; RUN: | llvm-mc --triple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=-xnack,+wavefrontsize32,-wavefrontsize64 -filetype=obj > %t.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd %t.o | FileCheck %s --check-prefixes=COV5,CHECK
|
||||
|
||||
; RUN: sed 's/CODE_OBJECT_VERSION/4/g' %s \
|
||||
; RUN: | llvm-mc --triple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=-xnack,+wavefrontsize32,-wavefrontsize64 -filetype=obj > %t.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd %t.o | FileCheck %s --check-prefixes=COV4,CHECK
|
||||
|
||||
;; Verify that .amdhsa_uses_dynamic_stack is only printed on COV5+.
|
||||
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
; COV5: .amdhsa_uses_dynamic_stack 0
|
||||
; COV4-NOT: .amdhsa_uses_dynamic_stack
|
||||
; CHECK: .end_amdhsa_kernel
|
||||
|
||||
.amdhsa_code_object_version CODE_OBJECT_VERSION
|
||||
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
.end_amdhsa_kernel
|
||||
@ -4,7 +4,8 @@
|
||||
|
||||
;--- 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack,+wavefrontsize32,-wavefrontsize64 -filetype=obj -mcpu=gfx1010 < 1.s > 1.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee 1-disasm.s | FileCheck 1.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 1-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee -a 1-disasm.s | FileCheck 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack,+wavefrontsize32,-wavefrontsize64 -filetype=obj -mcpu=gfx1010 < 1-disasm.s > 1-disasm.o
|
||||
; RUN: cmp 1.o 1-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -50,6 +51,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 1
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
@ -58,7 +60,8 @@
|
||||
|
||||
;--- 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack,+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1010 < 2.s > 2.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee 2-disasm.s | FileCheck 2.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 2-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee -a 2-disasm.s | FileCheck 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack,+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1010 < 2-disasm.s > 2-disasm.o
|
||||
; RUN: cmp 2.o 2-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -104,6 +107,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
@ -112,7 +116,8 @@
|
||||
|
||||
;--- 3.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack,+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1010 < 3.s > 3.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee 3-disasm.s | FileCheck 3.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 3-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee -a 3-disasm.s | FileCheck 3.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack,+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1010 < 3-disasm.s > 3-disasm.o
|
||||
; RUN: cmp 3.o 3-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -158,6 +163,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
@ -166,7 +172,8 @@
|
||||
|
||||
;--- 4.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack,+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1010 < 4.s > 4.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 4.o | tail -n +7 | tee 4-disasm.s | FileCheck 4.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 4-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 4.o | tail -n +7 | tee -a 4-disasm.s | FileCheck 4.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack,+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1010 < 4-disasm.s > 4-disasm.o
|
||||
; RUN: cmp 4.o 4-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -212,6 +219,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
|
||||
@ -4,7 +4,8 @@
|
||||
|
||||
;--- 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize32,-wavefrontsize64 -filetype=obj -mcpu=gfx1100 < 1.s > 1.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee 1-disasm.s | FileCheck 1.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 1-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee -a 1-disasm.s | FileCheck 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize32,-wavefrontsize64 -filetype=obj -mcpu=gfx1100 < 1-disasm.s > 1-disasm.o
|
||||
; RUN: cmp 1.o 1-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -51,6 +52,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 1
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
@ -59,7 +61,8 @@
|
||||
|
||||
;--- 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1100 < 2.s > 2.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee 2-disasm.s | FileCheck 2.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 2-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee -a 2-disasm.s | FileCheck 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1100 < 2-disasm.s > 2-disasm.o
|
||||
; RUN: cmp 2.o 2-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -106,6 +109,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
@ -114,7 +118,8 @@
|
||||
|
||||
;--- 3.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1100 < 3.s > 3.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee 3-disasm.s | FileCheck 3.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 3-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee -a 3-disasm.s | FileCheck 3.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1100 < 3-disasm.s > 3-disasm.o
|
||||
; RUN: cmp 3.o 3-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -161,6 +166,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
@ -169,7 +175,8 @@
|
||||
|
||||
;--- 4.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1100 < 4.s > 4.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 4.o | tail -n +7 | tee 4-disasm.s | FileCheck 4.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 4-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 4.o | tail -n +7 | tee -a 4-disasm.s | FileCheck 4.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize64,-wavefrontsize32 -filetype=obj -mcpu=gfx1100 < 4-disasm.s > 4-disasm.o
|
||||
; RUN: cmp 4.o 4-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -216,6 +223,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
|
||||
@ -4,7 +4,8 @@
|
||||
|
||||
;--- 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize32,-wavefrontsize64 -filetype=obj -mcpu=gfx1200 < 1.s > 1.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee 1-disasm.s | FileCheck 1.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 1-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee -a 1-disasm.s | FileCheck 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=+wavefrontsize32,-wavefrontsize64 -filetype=obj -mcpu=gfx1200 < 1-disasm.s > 1-disasm.o
|
||||
; RUN: cmp 1.o 1-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -48,6 +49,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 1
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
@ -56,7 +58,8 @@
|
||||
|
||||
;--- 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-wavefrontsize32,+wavefrontsize64 -filetype=obj -mcpu=gfx1200 < 2.s > 2.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee 2-disasm.s | FileCheck 2.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 2-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee -a 2-disasm.s | FileCheck 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-wavefrontsize32,+wavefrontsize64 -filetype=obj -mcpu=gfx1200 < 2-disasm.s > 2-disasm.o
|
||||
; RUN: cmp 2.o 2-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -100,6 +103,7 @@
|
||||
; CHECK-NEXT: .amdhsa_wavefront_size32 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 32
|
||||
|
||||
@ -4,7 +4,8 @@
|
||||
|
||||
;--- 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx90a < 1.s > 1.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee 1-disasm.s | FileCheck 1.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 1-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee -a 1-disasm.s | FileCheck 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx90a < 1-disasm.s > 1-disasm.o
|
||||
; RUN: cmp 1.o 1-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -47,6 +48,7 @@
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_private_segment_size 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 0
|
||||
.amdhsa_next_free_sgpr 0
|
||||
@ -55,7 +57,8 @@
|
||||
|
||||
;--- 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx90a < 2.s > 2.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee 2-disasm.s | FileCheck 2.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 2-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee -a 2-disasm.s | FileCheck 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx90a < 2-disasm.s > 2-disasm.o
|
||||
; RUN: cmp 2.o 2-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -98,6 +101,7 @@
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_private_segment_size 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 0
|
||||
@ -106,7 +110,8 @@
|
||||
|
||||
;--- 3.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx90a < 3.s > 3.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee 3-disasm.s | FileCheck 3.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 3-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee -a 3-disasm.s | FileCheck 3.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx90a < 3-disasm.s > 3-disasm.o
|
||||
; RUN: cmp 3.o 3-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -151,6 +156,7 @@
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_kernarg_preload_length 2
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_kernarg_preload_offset 1
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 0
|
||||
|
||||
@ -5,7 +5,8 @@
|
||||
;--- 1.s
|
||||
;; Only set next_free_sgpr.
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 1.s > 1.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee 1-disasm.s | FileCheck 1.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 1-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee -a 1-disasm.s | FileCheck 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 1-disasm.s > 1-disasm.o
|
||||
; RUN: cmp 1.o 1-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -46,6 +47,7 @@
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_private_segment_size 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 0
|
||||
.amdhsa_next_free_sgpr 42
|
||||
@ -57,7 +59,8 @@
|
||||
;--- 2.s
|
||||
;; Only set other directives.
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 2.s > 2.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee 2-disasm.s | FileCheck 2.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 2-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee -a 2-disasm.s | FileCheck 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 2-disasm.s > 2-disasm.o
|
||||
; RUN: cmp 2.o 2-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -98,6 +101,7 @@
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_private_segment_size 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 0
|
||||
.amdhsa_next_free_sgpr 0
|
||||
@ -109,7 +113,8 @@
|
||||
;--- 3.s
|
||||
;; Set all affecting directives.
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 3.s > 3.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee 3-disasm.s | FileCheck 3.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 3-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee -a 3-disasm.s | FileCheck 3.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 3-disasm.s > 3-disasm.o
|
||||
; RUN: cmp 3.o 3-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -150,6 +155,7 @@
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_private_segment_size 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 0
|
||||
.amdhsa_next_free_sgpr 35
|
||||
|
||||
@ -4,7 +4,8 @@
|
||||
|
||||
;--- 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 1.s > 1.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee 1-disasm.s | FileCheck 1.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 1-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 1.o | tail -n +7 | tee -a 1-disasm.s | FileCheck 1.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 1-disasm.s > 1-disasm.o
|
||||
; RUN: cmp 1.o 1-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -45,6 +46,7 @@
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_private_segment_size 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 23
|
||||
.amdhsa_next_free_sgpr 0
|
||||
@ -52,7 +54,8 @@
|
||||
|
||||
;--- 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 2.s > 2.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee 2-disasm.s | FileCheck 2.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 2-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 2.o | tail -n +7 | tee -a 2-disasm.s | FileCheck 2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 2-disasm.s > 2-disasm.o
|
||||
; RUN: cmp 2.o 2-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -93,6 +96,7 @@
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_private_segment_size 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 14
|
||||
.amdhsa_next_free_sgpr 0
|
||||
@ -100,7 +104,8 @@
|
||||
|
||||
;--- 3.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 3.s > 3.o
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee 3-disasm.s | FileCheck 3.s
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > 3-disasm.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=kernel.kd 3.o | tail -n +7 | tee -a 3-disasm.s | FileCheck 3.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mattr=-xnack -filetype=obj -mcpu=gfx908 < 3-disasm.s > 3-disasm.o
|
||||
; RUN: cmp 3.o 3-disasm.o
|
||||
; CHECK: .amdhsa_kernel kernel
|
||||
@ -141,6 +146,7 @@
|
||||
; CHECK-NEXT: .amdhsa_user_sgpr_private_segment_size 0
|
||||
; CHECK-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; CHECK-NEXT: .end_amdhsa_kernel
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel kernel
|
||||
.amdhsa_next_free_vgpr 32
|
||||
.amdhsa_next_free_sgpr 0
|
||||
|
||||
@ -65,6 +65,7 @@
|
||||
; OBJDUMP-NEXT: .amdhsa_uses_dynamic_stack 0
|
||||
; OBJDUMP-NEXT: .end_amdhsa_kernel
|
||||
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel my_kernel
|
||||
.amdhsa_group_segment_fixed_size 0
|
||||
.amdhsa_private_segment_fixed_size 0
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
;; Entirely zeroed kernel descriptor (for GFX9).
|
||||
|
||||
; RUN: llvm-mc %s --triple=amdgcn-amd-amdhsa -mcpu=gfx908 -mattr=-xnack -filetype=obj -o %t1
|
||||
; RUN: llvm-objdump --disassemble-symbols=my_kernel.kd %t1 \
|
||||
; RUN: | tail -n +7 | llvm-mc --triple=amdgcn-amd-amdhsa -mcpu=gfx908 -mattr=-xnack -filetype=obj -o %t2
|
||||
; RUN: echo '.amdhsa_code_object_version 5' > %t2.s
|
||||
; RUN: llvm-objdump --disassemble-symbols=my_kernel.kd %t1 | tail -n +7 >> %t2.s
|
||||
; RUN: llvm-mc --triple=amdgcn-amd-amdhsa -mcpu=gfx908 -mattr=-xnack -filetype=obj -o %t2 %t2.s
|
||||
; RUN: diff %t1 %t2
|
||||
|
||||
; RUN: llvm-objdump -s -j .text %t1 | FileCheck --check-prefix=OBJDUMP %s
|
||||
@ -15,6 +16,7 @@
|
||||
;; This file and kd-zeroed-raw.s produce the same output for the kernel
|
||||
;; descriptor - a block of 64 zeroed bytes.
|
||||
|
||||
.amdhsa_code_object_version 5
|
||||
.amdhsa_kernel my_kernel
|
||||
.amdhsa_group_segment_fixed_size 0
|
||||
.amdhsa_private_segment_fixed_size 0
|
||||
|
||||
@ -913,6 +913,9 @@ DisassemblerTarget::DisassemblerTarget(const Target *TheTarget, ObjectFile &Obj,
|
||||
if (!DisAsm)
|
||||
reportError(Obj.getFileName(), "no disassembler for target " + TripleName);
|
||||
|
||||
if (auto *ELFObj = dyn_cast<ELFObjectFileBase>(&Obj))
|
||||
DisAsm->setABIVersion(ELFObj->getEIdentABIVersion());
|
||||
|
||||
InstrAnalysis.reset(TheTarget->createMCInstrAnalysis(InstrInfo.get()));
|
||||
|
||||
int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user