1234285Sdim//===-- HexagonTargetAsmInfo.h - Hexagon asm properties --------*- C++ -*--===//
2234285Sdim//
3234285Sdim//                     The LLVM Compiler Infrastructure
4234285Sdim//
5234285Sdim// This file is distributed under the University of Illinois Open Source
6234285Sdim// License. See LICENSE.TXT for details.
7234285Sdim//
8234285Sdim//===----------------------------------------------------------------------===//
9234285Sdim
10234285Sdim#ifndef HexagonTARGETOBJECTFILE_H
11234285Sdim#define HexagonTARGETOBJECTFILE_H
12234285Sdim
13234285Sdim#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
14234285Sdim#include "llvm/MC/MCSectionELF.h"
15234285Sdim
16234285Sdimnamespace llvm {
17234285Sdim
18234285Sdim  class HexagonTargetObjectFile : public TargetLoweringObjectFileELF {
19234285Sdim    const MCSectionELF *SmallDataSection;
20234285Sdim    const MCSectionELF *SmallBSSSection;
21234285Sdim  public:
22234285Sdim    virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
23234285Sdim
24234285Sdim    /// IsGlobalInSmallSection - Return true if this global address should be
25234285Sdim    /// placed into small data/bss section.
26234285Sdim    bool IsGlobalInSmallSection(const GlobalValue *GV,
27234285Sdim                                const TargetMachine &TM,
28234285Sdim                                SectionKind Kind) const;
29234285Sdim    bool IsGlobalInSmallSection(const GlobalValue *GV,
30234285Sdim                                const TargetMachine &TM) const;
31234285Sdim
32263509Sdim    bool IsSmallDataEnabled () const;
33234285Sdim    const MCSection* SelectSectionForGlobal(const GlobalValue *GV,
34234285Sdim                                            SectionKind Kind,
35234285Sdim                                            Mangler *Mang,
36234285Sdim                                            const TargetMachine &TM) const;
37234285Sdim  };
38234285Sdim
39234285Sdim} // namespace llvm
40234285Sdim
41234285Sdim#endif
42