AMDGPUTargetObjectFile.h revision 292915
1//===-- AMDGPUTargetObjectFile.h - AMDGPU  Object Info ----*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9///
10/// \file
11/// \brief This file declares the AMDGPU-specific subclass of
12/// TargetLoweringObjectFile.
13///
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUTARGETOBJECTFILE_H
17#define LLVM_LIB_TARGET_AMDGPU_AMDGPUTARGETOBJECTFILE_H
18
19#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
20#include "llvm/Target/TargetMachine.h"
21
22namespace llvm {
23
24class AMDGPUTargetObjectFile : public TargetLoweringObjectFileELF {
25  public:
26    MCSection *SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
27                                      Mangler &Mang,
28                                      const TargetMachine &TM) const override;
29};
30
31class AMDGPUHSATargetObjectFile final : public AMDGPUTargetObjectFile {
32private:
33  MCSection *DataGlobalAgentSection;
34  MCSection *DataGlobalProgramSection;
35  MCSection *RodataReadonlyAgentSection;
36
37  bool isAgentAllocationSection(const char *SectionName) const;
38  bool isAgentAllocation(const GlobalValue *GV) const;
39  bool isProgramAllocation(const GlobalValue *GV) const;
40
41public:
42  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
43
44  MCSection *SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
45                                    Mangler &Mang,
46                                    const TargetMachine &TM) const override;
47};
48
49} // end namespace llvm
50
51#endif
52