blob: a3301d7516a54ae0280ee6a3962da5ad26b8c8ee [file] [log] [blame]
Eugene Zelenko52889212017-08-01 21:20:10 +00001//===- HexagonAsmPrinter.h - Print machine code to an Hexagon .s file -----===//
Evandro Menezes5cee6212012-04-12 17:55:53 +00002//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Evandro Menezes5cee6212012-04-12 17:55:53 +00006//
7//===----------------------------------------------------------------------===//
8//
9// Hexagon Assembly printer class.
10//
11//===----------------------------------------------------------------------===//
12
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000013#ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H
14#define LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H
Evandro Menezes5cee6212012-04-12 17:55:53 +000015
16#include "Hexagon.h"
Eugene Zelenko52889212017-08-01 21:20:10 +000017#include "HexagonSubtarget.h"
Evandro Menezes5cee6212012-04-12 17:55:53 +000018#include "llvm/CodeGen/AsmPrinter.h"
Eugene Zelenko52889212017-08-01 21:20:10 +000019#include "llvm/CodeGen/MachineFunction.h"
Krzysztof Parzyszek0831f572018-04-02 15:06:55 +000020#include "llvm/MC/MCStreamer.h"
21#include <utility>
Evandro Menezes5cee6212012-04-12 17:55:53 +000022
23namespace llvm {
Eugene Zelenko52889212017-08-01 21:20:10 +000024
25class MachineInstr;
26class MCInst;
27class raw_ostream;
28class TargetMachine;
29
Evandro Menezes5cee6212012-04-12 17:55:53 +000030 class HexagonAsmPrinter : public AsmPrinter {
Eugene Zelenko52889212017-08-01 21:20:10 +000031 const HexagonSubtarget *Subtarget = nullptr;
Evandro Menezes5cee6212012-04-12 17:55:53 +000032
33 public:
David Blaikie94598322015-01-18 20:29:04 +000034 explicit HexagonAsmPrinter(TargetMachine &TM,
Krzysztof Parzyszek0831f572018-04-02 15:06:55 +000035 std::unique_ptr<MCStreamer> Streamer)
36 : AsmPrinter(TM, std::move(Streamer)) {}
Evandro Menezes5cee6212012-04-12 17:55:53 +000037
Eric Christopher8f276db2015-02-03 06:40:22 +000038 bool runOnMachineFunction(MachineFunction &Fn) override {
39 Subtarget = &Fn.getSubtarget<HexagonSubtarget>();
40 return AsmPrinter::runOnMachineFunction(Fn);
41 }
42
Mehdi Amini117296c2016-10-01 02:56:57 +000043 StringRef getPassName() const override {
Evandro Menezes5cee6212012-04-12 17:55:53 +000044 return "Hexagon Assembly Printer";
45 }
46
Krzysztof Parzyszek0831f572018-04-02 15:06:55 +000047 bool isBlockOnlyReachableByFallthrough(const MachineBasicBlock *MBB)
48 const override;
Evandro Menezes5cee6212012-04-12 17:55:53 +000049
Craig Topper906c2cd2014-04-29 07:58:16 +000050 void EmitInstruction(const MachineInstr *MI) override;
Krzysztof Parzyszek0831f572018-04-02 15:06:55 +000051 void HexagonProcessInstruction(MCInst &Inst, const MachineInstr &MBB);
Krzysztof Parzyszek372bd802015-12-15 17:05:45 +000052
Evandro Menezes5cee6212012-04-12 17:55:53 +000053 void printOperand(const MachineInstr *MI, unsigned OpNo, raw_ostream &O);
54 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
Nick Desaulniers5277b3f2019-04-10 16:38:43 +000055 const char *ExtraCode, raw_ostream &OS) override;
Evandro Menezes5cee6212012-04-12 17:55:53 +000056 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
Nick Desaulniers5277b3f2019-04-10 16:38:43 +000057 const char *ExtraCode, raw_ostream &OS) override;
Evandro Menezes5cee6212012-04-12 17:55:53 +000058 };
59
Eugene Zelenko52889212017-08-01 21:20:10 +000060} // end namespace llvm
Evandro Menezes5cee6212012-04-12 17:55:53 +000061
Eugene Zelenko52889212017-08-01 21:20:10 +000062#endif // LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H