xref: /llvm-project/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVAsmBackend.cpp (revision 6e93e37fe917833ad2d4d09ceda150ffe755b03e)
16c69427eSIlia Diachkov //===-- SPIRVAsmBackend.cpp - SPIR-V Assembler Backend ---------*- C++ -*--===//
26c69427eSIlia Diachkov //
36c69427eSIlia Diachkov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
46c69427eSIlia Diachkov // See https://llvm.org/LICENSE.txt for license information.
56c69427eSIlia Diachkov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66c69427eSIlia Diachkov //
76c69427eSIlia Diachkov //===----------------------------------------------------------------------===//
86c69427eSIlia Diachkov 
96c69427eSIlia Diachkov #include "MCTargetDesc/SPIRVMCTargetDesc.h"
106c69427eSIlia Diachkov #include "llvm/MC/MCAsmBackend.h"
116c69427eSIlia Diachkov #include "llvm/MC/MCAssembler.h"
126c69427eSIlia Diachkov #include "llvm/MC/MCObjectWriter.h"
136c69427eSIlia Diachkov #include "llvm/Support/EndianStream.h"
146c69427eSIlia Diachkov 
156c69427eSIlia Diachkov using namespace llvm;
166c69427eSIlia Diachkov 
176c69427eSIlia Diachkov namespace {
186c69427eSIlia Diachkov 
196c69427eSIlia Diachkov class SPIRVAsmBackend : public MCAsmBackend {
206c69427eSIlia Diachkov public:
SPIRVAsmBackend(llvm::endianness Endian)21a9d50568SKazu Hirata   SPIRVAsmBackend(llvm::endianness Endian) : MCAsmBackend(Endian) {}
226c69427eSIlia Diachkov 
applyFixup(const MCAssembler & Asm,const MCFixup & Fixup,const MCValue & Target,MutableArrayRef<char> Data,uint64_t Value,bool IsResolved,const MCSubtargetInfo * STI) const236c69427eSIlia Diachkov   void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
246c69427eSIlia Diachkov                   const MCValue &Target, MutableArrayRef<char> Data,
256c69427eSIlia Diachkov                   uint64_t Value, bool IsResolved,
266c69427eSIlia Diachkov                   const MCSubtargetInfo *STI) const override {}
276c69427eSIlia Diachkov 
286c69427eSIlia Diachkov   std::unique_ptr<MCObjectTargetWriter>
createObjectTargetWriter() const296c69427eSIlia Diachkov   createObjectTargetWriter() const override {
306c69427eSIlia Diachkov     return createSPIRVObjectTargetWriter();
316c69427eSIlia Diachkov   }
326c69427eSIlia Diachkov 
getNumFixupKinds() const336c69427eSIlia Diachkov   unsigned getNumFixupKinds() const override { return 1; }
346c69427eSIlia Diachkov 
mayNeedRelaxation(const MCInst & Inst,const MCSubtargetInfo & STI) const356c69427eSIlia Diachkov   bool mayNeedRelaxation(const MCInst &Inst,
366c69427eSIlia Diachkov                          const MCSubtargetInfo &STI) const override {
376c69427eSIlia Diachkov     return false;
386c69427eSIlia Diachkov   }
396c69427eSIlia Diachkov 
relaxInstruction(MCInst & Inst,const MCSubtargetInfo & STI) const406c69427eSIlia Diachkov   void relaxInstruction(MCInst &Inst,
416c69427eSIlia Diachkov                         const MCSubtargetInfo &STI) const override {}
426c69427eSIlia Diachkov 
writeNopData(raw_ostream & OS,uint64_t Count,const MCSubtargetInfo * STI) const436c69427eSIlia Diachkov   bool writeNopData(raw_ostream &OS, uint64_t Count,
446c69427eSIlia Diachkov                     const MCSubtargetInfo *STI) const override {
456c69427eSIlia Diachkov     return false;
466c69427eSIlia Diachkov   }
476c69427eSIlia Diachkov };
486c69427eSIlia Diachkov 
496c69427eSIlia Diachkov } // end anonymous namespace
506c69427eSIlia Diachkov 
createSPIRVAsmBackend(const Target & T,const MCSubtargetInfo & STI,const MCRegisterInfo & MRI,const MCTargetOptions &)516c69427eSIlia Diachkov MCAsmBackend *llvm::createSPIRVAsmBackend(const Target &T,
526c69427eSIlia Diachkov                                           const MCSubtargetInfo &STI,
536c69427eSIlia Diachkov                                           const MCRegisterInfo &MRI,
546c69427eSIlia Diachkov                                           const MCTargetOptions &) {
55*4a0ccfa8SKazu Hirata   return new SPIRVAsmBackend(llvm::endianness::little);
566c69427eSIlia Diachkov }
57