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