f785676f2a
all of the features in the current working draft of the upcoming C++ standard, provisionally named C++1y. The code generator's performance is greatly increased, and the loop auto-vectorizer is now enabled at -Os and -O2 in addition to -O3. The PowerPC backend has made several major improvements to code generation quality and compile time, and the X86, SPARC, ARM32, Aarch64 and SystemZ backends have all seen major feature work. Release notes for llvm and clang can be found here: <http://llvm.org/releases/3.4/docs/ReleaseNotes.html> <http://llvm.org/releases/3.4/tools/clang/docs/ReleaseNotes.html> MFC after: 1 month
112 lines
3.8 KiB
C++
112 lines
3.8 KiB
C++
//===-- MipsAsmPrinter.h - Mips LLVM Assembly Printer ----------*- C++ -*--===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Mips Assembly printer class.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef MIPSASMPRINTER_H
|
|
#define MIPSASMPRINTER_H
|
|
|
|
#include "MipsMCInstLower.h"
|
|
#include "MipsMachineFunction.h"
|
|
#include "MipsSubtarget.h"
|
|
#include "llvm/CodeGen/AsmPrinter.h"
|
|
#include "llvm/Support/Compiler.h"
|
|
#include "llvm/Target/TargetMachine.h"
|
|
|
|
namespace llvm {
|
|
class MCStreamer;
|
|
class MachineInstr;
|
|
class MachineBasicBlock;
|
|
class MipsTargetStreamer;
|
|
class Module;
|
|
class raw_ostream;
|
|
|
|
class LLVM_LIBRARY_VISIBILITY MipsAsmPrinter : public AsmPrinter {
|
|
MipsTargetStreamer &getTargetStreamer();
|
|
|
|
void EmitInstrWithMacroNoAT(const MachineInstr *MI);
|
|
|
|
private:
|
|
// tblgen'erated function.
|
|
bool emitPseudoExpansionLowering(MCStreamer &OutStreamer,
|
|
const MachineInstr *MI);
|
|
|
|
// lowerOperand - Convert a MachineOperand into the equivalent MCOperand.
|
|
bool lowerOperand(const MachineOperand &MO, MCOperand &MCOp);
|
|
|
|
/// MCP - Keep a pointer to constantpool entries of the current
|
|
/// MachineFunction.
|
|
const MachineConstantPool *MCP;
|
|
|
|
/// InConstantPool - Maintain state when emitting a sequence of constant
|
|
/// pool entries so we can properly mark them as data regions.
|
|
bool InConstantPool;
|
|
|
|
bool UsingConstantPools;
|
|
|
|
public:
|
|
|
|
const MipsSubtarget *Subtarget;
|
|
const MipsFunctionInfo *MipsFI;
|
|
MipsMCInstLower MCInstLowering;
|
|
|
|
explicit MipsAsmPrinter(TargetMachine &TM, MCStreamer &Streamer)
|
|
: AsmPrinter(TM, Streamer), MCP(0), InConstantPool(false),
|
|
MCInstLowering(*this) {
|
|
Subtarget = &TM.getSubtarget<MipsSubtarget>();
|
|
UsingConstantPools =
|
|
(Subtarget->inMips16Mode() && Subtarget->useConstantIslands());
|
|
}
|
|
|
|
virtual const char *getPassName() const {
|
|
return "Mips Assembly Printer";
|
|
}
|
|
|
|
virtual bool runOnMachineFunction(MachineFunction &MF);
|
|
|
|
virtual void EmitConstantPool() LLVM_OVERRIDE {
|
|
if (!UsingConstantPools)
|
|
AsmPrinter::EmitConstantPool();
|
|
// we emit constant pools customly!
|
|
}
|
|
|
|
void EmitInstruction(const MachineInstr *MI);
|
|
void printSavedRegsBitmask(raw_ostream &O);
|
|
void printHex32(unsigned int Value, raw_ostream &O);
|
|
void emitFrameDirective();
|
|
const char *getCurrentABIString() const;
|
|
virtual void EmitFunctionEntryLabel();
|
|
virtual void EmitFunctionBodyStart();
|
|
virtual void EmitFunctionBodyEnd();
|
|
virtual bool isBlockOnlyReachableByFallthrough(const MachineBasicBlock*
|
|
MBB) const;
|
|
bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
|
|
unsigned AsmVariant, const char *ExtraCode,
|
|
raw_ostream &O);
|
|
bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum,
|
|
unsigned AsmVariant, const char *ExtraCode,
|
|
raw_ostream &O);
|
|
void printOperand(const MachineInstr *MI, int opNum, raw_ostream &O);
|
|
void printUnsignedImm(const MachineInstr *MI, int opNum, raw_ostream &O);
|
|
void printUnsignedImm8(const MachineInstr *MI, int opNum, raw_ostream &O);
|
|
void printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &O);
|
|
void printMemOperandEA(const MachineInstr *MI, int opNum, raw_ostream &O);
|
|
void printFCCOperand(const MachineInstr *MI, int opNum, raw_ostream &O,
|
|
const char *Modifier = 0);
|
|
void EmitStartOfAsmFile(Module &M);
|
|
void EmitEndOfAsmFile(Module &M);
|
|
void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS);
|
|
};
|
|
}
|
|
|
|
#endif
|
|
|