diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2015-12-10 02:13:01 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2015-12-10 02:13:01 +0000 |
commit | c93fc11f36c5d9c85c471bb36367d30885a56087 (patch) | |
tree | 1e26a1d42b1cf42d9c8bfee59798a316eac4ed34 /llvm/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h | |
parent | b3c3bda512712feb662ae03758dfb6fc0c05fe20 (diff) | |
download | llvm-c93fc11f36c5d9c85c471bb36367d30885a56087.zip llvm-c93fc11f36c5d9c85c471bb36367d30885a56087.tar.gz llvm-c93fc11f36c5d9c85c471bb36367d30885a56087.tar.bz2 |
AMDGPU/SI: Emit constant arrays in the .text section
Summary:
This allows us to remove the END_OF_TEXT_LABEL hack we had been using
and simplifies the fixups used to compute the address of constant
arrays.
Reviewers: arsenm
Subscribers: arsenm, llvm-commits
Differential Revision: http://reviews.llvm.org/D15257
llvm-svn: 255204
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h b/llvm/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h new file mode 100644 index 0000000..921341e --- /dev/null +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h @@ -0,0 +1,51 @@ +//===-- AMDGPUTargetObjectFile.h - AMDGPU Object Info ----*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// \brief This file declares the AMDGPU-specific subclass of +/// TargetLoweringObjectFile. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUTARGETOBJECTFILE_H +#define LLVM_LIB_TARGET_AMDGPU_AMDGPUTARGETOBJECTFILE_H + +#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" +#include "llvm/Target/TargetMachine.h" + +namespace llvm { + +class AMDGPUTargetObjectFile : public TargetLoweringObjectFileELF { + public: + MCSection *SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, + Mangler &Mang, + const TargetMachine &TM) const override; +}; + +class AMDGPUHSATargetObjectFile final : public AMDGPUTargetObjectFile { +private: + MCSection *DataGlobalAgentSection; + MCSection *DataGlobalProgramSection; + MCSection *RodataReadonlyAgentSection; + + bool isAgentAllocationSection(const char *SectionName) const; + bool isAgentAllocation(const GlobalValue *GV) const; + bool isProgramAllocation(const GlobalValue *GV) const; + +public: + void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + + MCSection *SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, + Mangler &Mang, + const TargetMachine &TM) const override; +}; + +} // end namespace llvm + +#endif |