1*ec259036SIlia Diachkov //===-- SPIRVTargetObjectFile.h - SPIRV Object Info -------------*- C++ -*-===//
2*ec259036SIlia Diachkov //
3*ec259036SIlia Diachkov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*ec259036SIlia Diachkov // See https://llvm.org/LICENSE.txt for license information.
5*ec259036SIlia Diachkov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*ec259036SIlia Diachkov //
7*ec259036SIlia Diachkov //===----------------------------------------------------------------------===//
8*ec259036SIlia Diachkov 
9*ec259036SIlia Diachkov #ifndef LLVM_LIB_TARGET_SPIRV_SPIRVTARGETOBJECTFILE_H
10*ec259036SIlia Diachkov #define LLVM_LIB_TARGET_SPIRV_SPIRVTARGETOBJECTFILE_H
11*ec259036SIlia Diachkov 
12*ec259036SIlia Diachkov #include "llvm/MC/MCSection.h"
13*ec259036SIlia Diachkov #include "llvm/MC/SectionKind.h"
14*ec259036SIlia Diachkov #include "llvm/Target/TargetLoweringObjectFile.h"
15*ec259036SIlia Diachkov 
16*ec259036SIlia Diachkov namespace llvm {
17*ec259036SIlia Diachkov 
18*ec259036SIlia Diachkov class SPIRVTargetObjectFile : public TargetLoweringObjectFile {
19*ec259036SIlia Diachkov public:
20*ec259036SIlia Diachkov   ~SPIRVTargetObjectFile() override;
21*ec259036SIlia Diachkov 
Initialize(MCContext & ctx,const TargetMachine & TM)22*ec259036SIlia Diachkov   void Initialize(MCContext &ctx, const TargetMachine &TM) override {
23*ec259036SIlia Diachkov     TargetLoweringObjectFile::Initialize(ctx, TM);
24*ec259036SIlia Diachkov   }
25*ec259036SIlia Diachkov   // All words in a SPIR-V module (excepting the first 5 ones) are a linear
26*ec259036SIlia Diachkov   // sequence of instructions in a specific order. We put all the instructions
27*ec259036SIlia Diachkov   // in the single text section.
getSectionForConstant(const DataLayout & DL,SectionKind Kind,const Constant * C,Align & Alignment)28*ec259036SIlia Diachkov   MCSection *getSectionForConstant(const DataLayout &DL, SectionKind Kind,
29*ec259036SIlia Diachkov                                    const Constant *C,
30*ec259036SIlia Diachkov                                    Align &Alignment) const override {
31*ec259036SIlia Diachkov     return TextSection;
32*ec259036SIlia Diachkov   }
getExplicitSectionGlobal(const GlobalObject * GO,SectionKind Kind,const TargetMachine & TM)33*ec259036SIlia Diachkov   MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind,
34*ec259036SIlia Diachkov                                       const TargetMachine &TM) const override {
35*ec259036SIlia Diachkov     return TextSection;
36*ec259036SIlia Diachkov   }
SelectSectionForGlobal(const GlobalObject * GO,SectionKind Kind,const TargetMachine & TM)37*ec259036SIlia Diachkov   MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
38*ec259036SIlia Diachkov                                     const TargetMachine &TM) const override {
39*ec259036SIlia Diachkov     return TextSection;
40*ec259036SIlia Diachkov   }
41*ec259036SIlia Diachkov };
42*ec259036SIlia Diachkov 
43*ec259036SIlia Diachkov } // end namespace llvm
44*ec259036SIlia Diachkov 
45*ec259036SIlia Diachkov #endif // LLVM_LIB_TARGET_SPIRV_SPIRVTARGETOBJECTFILE_H
46