LLVM 22.0.0git
ARCAsmPrinter.cpp
Go to the documentation of this file.
1//===- ARCAsmPrinter.cpp - ARC LLVM assembly writer -------------*- C++ -*-===//
2//
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
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains a printer that converts from our internal representation
10// of machine-dependent LLVM code to GNU format ARC assembly language.
11//
12//===----------------------------------------------------------------------===//
13
14#include "ARC.h"
15#include "ARCMCInstLower.h"
16#include "ARCSubtarget.h"
17#include "ARCTargetMachine.h"
22#include "llvm/MC/MCAsmInfo.h"
23#include "llvm/MC/MCInst.h"
24#include "llvm/MC/MCStreamer.h"
27
28using namespace llvm;
29
30#define DEBUG_TYPE "asm-printer"
31
32namespace {
33
34class ARCAsmPrinter : public AsmPrinter {
35 ARCMCInstLower MCInstLowering;
36
37public:
38 static char ID;
39
40 explicit ARCAsmPrinter(TargetMachine &TM,
41 std::unique_ptr<MCStreamer> Streamer)
42 : AsmPrinter(TM, std::move(Streamer), ID),
43 MCInstLowering(&OutContext, *this) {}
44
45 StringRef getPassName() const override { return "ARC Assembly Printer"; }
46 void emitInstruction(const MachineInstr *MI) override;
47
48 bool runOnMachineFunction(MachineFunction &MF) override;
49};
50
51} // end anonymous namespace
52
53void ARCAsmPrinter::emitInstruction(const MachineInstr *MI) {
54 ARC_MC::verifyInstructionPredicates(MI->getOpcode(),
55 getSubtargetInfo().getFeatureBits());
56
57 SmallString<128> Str;
58 raw_svector_ostream O(Str);
59
60 switch (MI->getOpcode()) {
61 case ARC::DBG_VALUE:
62 llvm_unreachable("Should be handled target independently");
63 break;
64 }
65
66 MCInst TmpInst;
67 MCInstLowering.Lower(MI, TmpInst);
68 EmitToStreamer(*OutStreamer, TmpInst);
69}
70
71bool ARCAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
72 // Functions are 4-byte aligned.
75}
76
77char ARCAsmPrinter::ID = 0;
78
79INITIALIZE_PASS(ARCAsmPrinter, "arc-asm-printer", "ARC Assmebly Printer", false,
80 false)
81
82// Force static initialization.
83extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeARCAsmPrinter() {
85}
This file contains the declaration of the ARCInstPrinter class, which is used to print ARC MCInst to ...
#define LLVM_EXTERNAL_VISIBILITY
Definition Compiler.h:132
IRTranslator LLVM IR MI
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
Definition PassSupport.h:56
static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")
This class is used to lower an MachineInstr into an MCInst.
void Lower(const MachineInstr *MI, MCInst &OutMI) const
This class is intended to be used as a driving class for all asm writers.
Definition AsmPrinter.h:90
bool runOnMachineFunction(MachineFunction &MF) override
Emit the specified function out to the OutStreamer.
Definition AsmPrinter.h:452
void ensureAlignment(Align A)
ensureAlignment - Make sure the function is at least A bytes aligned.
Representation of each machine instruction.
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
Primary interface to the complete machine description for the target machine.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition CallingConv.h:24
This is an optimization pass for GlobalISel generic memory operations.
Target & getTheARCTarget()
RegisterAsmPrinter - Helper template for registering a target specific assembly printer,...