blob: 4b8865672cf489f3b0cc5635c3957a3300c19eba [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//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Hexagon Assembly printer class.
11//
12//===----------------------------------------------------------------------===//
13
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000014#ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H
15#define LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H
Evandro Menezes5cee6212012-04-12 17:55:53 +000016
17#include "Hexagon.h"
Eugene Zelenko52889212017-08-01 21:20:10 +000018#include "HexagonSubtarget.h"
Evandro Menezes5cee6212012-04-12 17:55:53 +000019#include "llvm/CodeGen/AsmPrinter.h"
Eugene Zelenko52889212017-08-01 21:20:10 +000020#include "llvm/CodeGen/MachineFunction.h"
21#include <memory>
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,
35 std::unique_ptr<MCStreamer> Streamer);
Evandro Menezes5cee6212012-04-12 17:55:53 +000036
Eric Christopher8f276db2015-02-03 06:40:22 +000037 bool runOnMachineFunction(MachineFunction &Fn) override {
38 Subtarget = &Fn.getSubtarget<HexagonSubtarget>();
39 return AsmPrinter::runOnMachineFunction(Fn);
40 }
41
Mehdi Amini117296c2016-10-01 02:56:57 +000042 StringRef getPassName() const override {
Evandro Menezes5cee6212012-04-12 17:55:53 +000043 return "Hexagon Assembly Printer";
44 }
45
Craig Topper906c2cd2014-04-29 07:58:16 +000046 bool isBlockOnlyReachableByFallthrough(
47 const MachineBasicBlock *MBB) const override;
Evandro Menezes5cee6212012-04-12 17:55:53 +000048
Craig Topper906c2cd2014-04-29 07:58:16 +000049 void EmitInstruction(const MachineInstr *MI) override;
Evandro Menezes5cee6212012-04-12 17:55:53 +000050
Krzysztof Parzyszek372bd802015-12-15 17:05:45 +000051 void HexagonProcessInstruction(MCInst &Inst,
52 const MachineInstr &MBB);
53
Evandro Menezes5cee6212012-04-12 17:55:53 +000054 void printOperand(const MachineInstr *MI, unsigned OpNo, raw_ostream &O);
55 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
56 unsigned AsmVariant, const char *ExtraCode,
Craig Topper906c2cd2014-04-29 07:58:16 +000057 raw_ostream &OS) override;
Evandro Menezes5cee6212012-04-12 17:55:53 +000058 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
59 unsigned AsmVariant, const char *ExtraCode,
Craig Topper906c2cd2014-04-29 07:58:16 +000060 raw_ostream &OS) override;
Evandro Menezes5cee6212012-04-12 17:55:53 +000061
Evandro Menezes5cee6212012-04-12 17:55:53 +000062 static const char *getRegisterName(unsigned RegNo);
Evandro Menezes5cee6212012-04-12 17:55:53 +000063 };
64
Eugene Zelenko52889212017-08-01 21:20:10 +000065} // end namespace llvm
Evandro Menezes5cee6212012-04-12 17:55:53 +000066
Eugene Zelenko52889212017-08-01 21:20:10 +000067#endif // LLVM_LIB_TARGET_HEXAGON_HEXAGONASMPRINTER_H