git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108950
91177308-0d34-0410-b5e6-
96231b3b80d8
using namespace llvm;
X86MCInstLower::X86MCInstLower(MCContext &ctx, Mangler *mang,
using namespace llvm;
X86MCInstLower::X86MCInstLower(MCContext &ctx, Mangler *mang,
- X86AsmPrinter &asmprinter)
-: Ctx(ctx), Mang(mang), AsmPrinter(asmprinter), MF(*AsmPrinter.MF) {}
+ X86AsmPrinter &asmprinter,
+ const TargetMachine &tm)
+: Ctx(ctx), Mang(mang), AsmPrinter(asmprinter), MF(*AsmPrinter.MF),
+ TM(tm), MAI(*TM.getMCAsmInfo()) {}
MachineModuleInfoMachO &X86MCInstLower::getMachOMMI() const {
return MF.getMMI().getObjFileInfo<MachineModuleInfoMachO>();
MachineModuleInfoMachO &X86MCInstLower::getMachOMMI() const {
return MF.getMMI().getObjFileInfo<MachineModuleInfoMachO>();
MCSymbol *X86MCInstLower::GetPICBaseSymbol() const {
MCSymbol *X86MCInstLower::GetPICBaseSymbol() const {
- const TargetLowering *TLI = AsmPrinter.TM.getTargetLowering();
- return static_cast<const X86TargetLowering*>(TLI)->
+ return static_cast<const X86TargetLowering*>(TM.getTargetLowering())->
getPICBaseSymbol(&MF, Ctx);
}
getPICBaseSymbol(&MF, Ctx);
}
if (!MO.isGlobal()) {
assert(MO.isSymbol());
if (!MO.isGlobal()) {
assert(MO.isSymbol());
- Name += AsmPrinter.MAI->getGlobalPrefix();
+ Name += MAI.getGlobalPrefix();
Name += MO.getSymbolName();
} else {
const GlobalValue *GV = MO.getGlobal();
Name += MO.getSymbolName();
} else {
const GlobalValue *GV = MO.getGlobal();
Expr = MCBinaryExpr::CreateSub(Expr,
MCSymbolRefExpr::Create(GetPICBaseSymbol(), Ctx),
Ctx);
Expr = MCBinaryExpr::CreateSub(Expr,
MCSymbolRefExpr::Create(GetPICBaseSymbol(), Ctx),
Ctx);
- if (MO.isJTI() && AsmPrinter.MAI->hasSetDirective()) {
+ if (MO.isJTI() && MAI.hasSetDirective()) {
// If .set directive is supported, use it to reduce the number of
// relocations the assembler will generate for differences between
// local labels. This is only safe when the symbols are in the same
// If .set directive is supported, use it to reduce the number of
// relocations the assembler will generate for differences between
// local labels. This is only safe when the symbols are in the same
void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) {
void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) {
- X86MCInstLower MCInstLowering(OutContext, Mang, *this);
+ X86MCInstLower MCInstLowering(OutContext, Mang, *this, TM);
switch (MI->getOpcode()) {
case TargetOpcode::DBG_VALUE:
if (isVerbose() && OutStreamer.hasRawTextSupport()) {
switch (MI->getOpcode()) {
case TargetOpcode::DBG_VALUE:
if (isVerbose() && OutStreamer.hasRawTextSupport()) {
#include "llvm/Support/Compiler.h"
namespace llvm {
#include "llvm/Support/Compiler.h"
namespace llvm {
class MCContext;
class MCInst;
class MCOperand;
class MCContext;
class MCInst;
class MCOperand;
class MachineModuleInfoMachO;
class MachineOperand;
class Mangler;
class MachineModuleInfoMachO;
class MachineOperand;
class Mangler;
class X86AsmPrinter;
/// X86MCInstLower - This class is used to lower an MachineInstr into an MCInst.
class X86AsmPrinter;
/// X86MCInstLower - This class is used to lower an MachineInstr into an MCInst.
Mangler *Mang;
X86AsmPrinter &AsmPrinter;
const MachineFunction &MF;
Mangler *Mang;
X86AsmPrinter &AsmPrinter;
const MachineFunction &MF;
+ const TargetMachine &TM;
+ const MCAsmInfo &MAI;
- X86MCInstLower(MCContext &ctx, Mangler *mang, X86AsmPrinter &asmprinter);
+ X86MCInstLower(MCContext &ctx, Mangler *mang, X86AsmPrinter &asmprinter,
+ const TargetMachine &TM);
void Lower(const MachineInstr *MI, MCInst &OutMI) const;
void Lower(const MachineInstr *MI, MCInst &OutMI) const;