]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / Hexagon / HexagonTargetObjectFile.h
1 //===-- HexagonTargetObjectFile.h -----------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGONTARGETOBJECTFILE_H
10 #define LLVM_LIB_TARGET_HEXAGON_HEXAGONTARGETOBJECTFILE_H
11
12 #include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
13 #include "llvm/MC/MCSectionELF.h"
14
15 namespace llvm {
16
17   class HexagonTargetObjectFile : public TargetLoweringObjectFileELF {
18   public:
19     void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
20
21     MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
22                                       const TargetMachine &TM) const override;
23
24     MCSection *getExplicitSectionGlobal(const GlobalObject *GO,
25                                         SectionKind Kind,
26                                         const TargetMachine &TM) const override;
27
28     bool isGlobalInSmallSection(const GlobalObject *GO,
29                                 const TargetMachine &TM) const;
30
31     bool isSmallDataEnabled(const TargetMachine &TM) const;
32
33     unsigned getSmallDataSize() const;
34
35     bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference,
36                                              const Function &F) const override;
37
38     const Function *getLutUsedFunction(const GlobalObject *GO) const;
39
40   private:
41     MCSectionELF *SmallDataSection;
42     MCSectionELF *SmallBSSSection;
43
44     unsigned getSmallestAddressableSize(const Type *Ty, const GlobalValue *GV,
45         const TargetMachine &TM) const;
46
47     MCSection *selectSmallSectionForGlobal(const GlobalObject *GO,
48                                            SectionKind Kind,
49                                            const TargetMachine &TM) const;
50
51     MCSection *selectSectionForLookupTable(const GlobalObject *GO,
52                                            const TargetMachine &TM,
53                                            const Function *Fn) const;
54   };
55
56 } // namespace llvm
57
58 #endif