181ad6265SDimitry Andric //===- LoongArchAsmPrinter.h - LoongArch LLVM Assembly Printer -*- C++ -*--===// 281ad6265SDimitry Andric // 381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681ad6265SDimitry Andric // 781ad6265SDimitry Andric //===----------------------------------------------------------------------===// 881ad6265SDimitry Andric // 981ad6265SDimitry Andric // LoongArch Assembly printer class. 1081ad6265SDimitry Andric // 1181ad6265SDimitry Andric //===----------------------------------------------------------------------===// 1281ad6265SDimitry Andric 1381ad6265SDimitry Andric #ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHASMPRINTER_H 1481ad6265SDimitry Andric #define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHASMPRINTER_H 1581ad6265SDimitry Andric 1681ad6265SDimitry Andric #include "LoongArchSubtarget.h" 1781ad6265SDimitry Andric #include "llvm/CodeGen/AsmPrinter.h" 1881ad6265SDimitry Andric #include "llvm/MC/MCStreamer.h" 1981ad6265SDimitry Andric #include "llvm/Support/Compiler.h" 2081ad6265SDimitry Andric 2181ad6265SDimitry Andric namespace llvm { 2281ad6265SDimitry Andric 2381ad6265SDimitry Andric class LLVM_LIBRARY_VISIBILITY LoongArchAsmPrinter : public AsmPrinter { 2481ad6265SDimitry Andric const MCSubtargetInfo *STI; 2581ad6265SDimitry Andric 2681ad6265SDimitry Andric public: LoongArchAsmPrinter(TargetMachine & TM,std::unique_ptr<MCStreamer> Streamer)2781ad6265SDimitry Andric explicit LoongArchAsmPrinter(TargetMachine &TM, 2881ad6265SDimitry Andric std::unique_ptr<MCStreamer> Streamer) 2981ad6265SDimitry Andric : AsmPrinter(TM, std::move(Streamer)), STI(TM.getMCSubtargetInfo()) {} 3081ad6265SDimitry Andric getPassName()3181ad6265SDimitry Andric StringRef getPassName() const override { 3281ad6265SDimitry Andric return "LoongArch Assembly Printer"; 3381ad6265SDimitry Andric } 3481ad6265SDimitry Andric 3581ad6265SDimitry Andric bool runOnMachineFunction(MachineFunction &MF) override; 3681ad6265SDimitry Andric 3781ad6265SDimitry Andric void emitInstruction(const MachineInstr *MI) override; 3881ad6265SDimitry Andric 39bdd1243dSDimitry Andric bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 40bdd1243dSDimitry Andric const char *ExtraCode, raw_ostream &OS) override; 41bdd1243dSDimitry Andric bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, 42bdd1243dSDimitry Andric const char *ExtraCode, raw_ostream &OS) override; 43bdd1243dSDimitry Andric 44*06c3fb27SDimitry Andric void LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI); 45*06c3fb27SDimitry Andric void LowerPATCHABLE_FUNCTION_EXIT(const MachineInstr &MI); 46*06c3fb27SDimitry Andric void LowerPATCHABLE_TAIL_CALL(const MachineInstr &MI); 47*06c3fb27SDimitry Andric void emitSled(const MachineInstr &MI, SledKind Kind); 48*06c3fb27SDimitry Andric 4981ad6265SDimitry Andric // tblgen'erated function. 5081ad6265SDimitry Andric bool emitPseudoExpansionLowering(MCStreamer &OutStreamer, 5181ad6265SDimitry Andric const MachineInstr *MI); 52753f127fSDimitry Andric // Wrapper needed for tblgenned pseudo lowering. lowerOperand(const MachineOperand & MO,MCOperand & MCOp)53753f127fSDimitry Andric bool lowerOperand(const MachineOperand &MO, MCOperand &MCOp) const { 54753f127fSDimitry Andric return lowerLoongArchMachineOperandToMCOperand(MO, MCOp, *this); 55753f127fSDimitry Andric } 5681ad6265SDimitry Andric }; 5781ad6265SDimitry Andric 5881ad6265SDimitry Andric } // end namespace llvm 5981ad6265SDimitry Andric 6081ad6265SDimitry Andric #endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHASMPRINTER_H 61