1 //===- HexagonAsmPrinter.h - Print machine code to an Hexagon .s file -----===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // Hexagon Assembly printer class.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H
14 #define LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H
17 #include "HexagonSubtarget.h"
18 #include "llvm/CodeGen/AsmPrinter.h"
19 #include "llvm/CodeGen/MachineFunction.h"
20 #include "llvm/MC/MCStreamer.h"
30 class HexagonAsmPrinter
: public AsmPrinter
{
31 const HexagonSubtarget
*Subtarget
= nullptr;
34 explicit HexagonAsmPrinter(TargetMachine
&TM
,
35 std::unique_ptr
<MCStreamer
> Streamer
)
36 : AsmPrinter(TM
, std::move(Streamer
)) {}
38 bool runOnMachineFunction(MachineFunction
&Fn
) override
{
39 Subtarget
= &Fn
.getSubtarget
<HexagonSubtarget
>();
40 return AsmPrinter::runOnMachineFunction(Fn
);
43 StringRef
getPassName() const override
{
44 return "Hexagon Assembly Printer";
47 bool isBlockOnlyReachableByFallthrough(const MachineBasicBlock
*MBB
)
50 void EmitInstruction(const MachineInstr
*MI
) override
;
51 void HexagonProcessInstruction(MCInst
&Inst
, const MachineInstr
&MBB
);
53 void printOperand(const MachineInstr
*MI
, unsigned OpNo
, raw_ostream
&O
);
54 bool PrintAsmOperand(const MachineInstr
*MI
, unsigned OpNo
,
55 unsigned AsmVariant
, const char *ExtraCode
,
56 raw_ostream
&OS
) override
;
57 bool PrintAsmMemoryOperand(const MachineInstr
*MI
, unsigned OpNo
,
58 unsigned AsmVariant
, const char *ExtraCode
,
59 raw_ostream
&OS
) override
;
62 } // end namespace llvm
64 #endif // LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H