mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-21 03:32:29 +00:00
wire up skeletal support for having llc print instructions
through mcinst lowering -> mcinstprinter, when llc is passed the -enable-arm-mcinst-printer flag. Currently this is very "aborty". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84530 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
59d5aac0b4
commit
97f0693744
lib/Target/ARM/AsmPrinter
@ -1,3 +1,5 @@
|
||||
//===-- ARMAsmPrinter.cpp - Print machine code to an ARM .s file ----------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
@ -13,11 +15,12 @@
|
||||
#define DEBUG_TYPE "asm-printer"
|
||||
#include "ARM.h"
|
||||
#include "ARMBuildAttrs.h"
|
||||
#include "ARMTargetMachine.h"
|
||||
#include "ARMAddressingModes.h"
|
||||
#include "ARMConstantPoolValue.h"
|
||||
#include "ARMMachineFunctionInfo.h"
|
||||
#include "ARMInstPrinter.h"
|
||||
#include "ARMMachineFunctionInfo.h"
|
||||
#include "ARMMCInstLower.h"
|
||||
#include "ARMTargetMachine.h"
|
||||
#include "llvm/Constants.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/Assembly/Writer.h"
|
||||
@ -28,6 +31,7 @@
|
||||
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCInst.h"
|
||||
#include "llvm/MC/MCSectionMachO.h"
|
||||
#include "llvm/MC/MCStreamer.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
@ -40,15 +44,20 @@
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/ADT/StringSet.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/FormattedStream.h"
|
||||
#include "llvm/Support/Mangler.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Support/FormattedStream.h"
|
||||
#include <cctype>
|
||||
using namespace llvm;
|
||||
|
||||
STATISTIC(EmittedInsts, "Number of machine instrs printed");
|
||||
|
||||
static cl::opt<bool>
|
||||
EnableMCInst("enable-arm-mcinst-printer", cl::Hidden,
|
||||
cl::desc("enable experimental asmprinter gunk in the arm backend"));
|
||||
|
||||
namespace {
|
||||
class ARMAsmPrinter : public AsmPrinter {
|
||||
|
||||
@ -77,7 +86,10 @@ namespace {
|
||||
|
||||
void printMCInst(const MCInst *MI) {
|
||||
ARMInstPrinter(O, *MAI).printInstruction(MI);
|
||||
}
|
||||
}
|
||||
|
||||
void printInstructionThroughMCStreamer(const MachineInstr *MI);
|
||||
|
||||
|
||||
void printOperand(const MachineInstr *MI, int OpNum,
|
||||
const char *Modifier = 0);
|
||||
@ -276,14 +288,13 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
||||
for (MachineFunction::const_iterator I = MF.begin(), E = MF.end();
|
||||
I != E; ++I) {
|
||||
// Print a label for the basic block.
|
||||
if (I != MF.begin()) {
|
||||
if (I != MF.begin())
|
||||
EmitBasicBlockStart(I);
|
||||
}
|
||||
|
||||
// Print the assembly for the instruction.
|
||||
for (MachineBasicBlock::const_iterator II = I->begin(), E = I->end();
|
||||
II != E; ++II) {
|
||||
// Print the assembly for the instruction.
|
||||
II != E; ++II)
|
||||
printMachineInstruction(II);
|
||||
}
|
||||
}
|
||||
|
||||
if (MAI->hasDotTypeDotSizeDirective())
|
||||
@ -1026,7 +1037,13 @@ void ARMAsmPrinter::printMachineInstruction(const MachineInstr *MI) {
|
||||
|
||||
// Call the autogenerated instruction printer routines.
|
||||
processDebugLoc(MI, true);
|
||||
printInstruction(MI);
|
||||
|
||||
if (EnableMCInst) {
|
||||
printInstructionThroughMCStreamer(MI);
|
||||
} else {
|
||||
printInstruction(MI);
|
||||
}
|
||||
|
||||
if (VerboseAsm && !MI->getDebugLoc().isUnknown())
|
||||
EmitComments(*MI);
|
||||
O << '\n';
|
||||
@ -1291,3 +1308,32 @@ extern "C" void LLVMInitializeARMAsmPrinter() {
|
||||
RegisterAsmPrinter<ARMAsmPrinter> X(TheARMTarget);
|
||||
RegisterAsmPrinter<ARMAsmPrinter> Y(TheThumbTarget);
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void ARMAsmPrinter::printInstructionThroughMCStreamer(const MachineInstr *MI) {
|
||||
ARMMCInstLower MCInstLowering(OutContext, Mang);
|
||||
switch (MI->getOpcode()) {
|
||||
case TargetInstrInfo::DBG_LABEL:
|
||||
case TargetInstrInfo::EH_LABEL:
|
||||
case TargetInstrInfo::GC_LABEL:
|
||||
printLabel(MI);
|
||||
return;
|
||||
case TargetInstrInfo::KILL:
|
||||
return;
|
||||
case TargetInstrInfo::INLINEASM:
|
||||
O << '\t';
|
||||
printInlineAsm(MI);
|
||||
return;
|
||||
case TargetInstrInfo::IMPLICIT_DEF:
|
||||
printImplicitDef(MI);
|
||||
return;
|
||||
default: break;
|
||||
}
|
||||
|
||||
MCInst TmpInst;
|
||||
MCInstLowering.Lower(MI, TmpInst);
|
||||
|
||||
printMCInst(&TmpInst);
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
include_directories( ${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/.. )
|
||||
|
||||
add_llvm_library(LLVMARMAsmPrinter
|
||||
ARMInstPrinter.cpp
|
||||
ARMAsmPrinter.cpp
|
||||
ARMInstPrinter.cpp
|
||||
ARMMCInstLower.cpp
|
||||
)
|
||||
add_dependencies(LLVMARMAsmPrinter ARMCodeGenTable_gen)
|
||||
|
Loading…
x
Reference in New Issue
Block a user