make asmprinter optional, even though passing in null will cause things to explode...
authorChris Lattner <sabre@nondot.org>
Tue, 20 Jul 2010 22:45:33 +0000 (22:45 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 20 Jul 2010 22:45:33 +0000 (22:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108955 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86MCInstLower.cpp
lib/Target/X86/X86MCInstLower.h

index d3933a79c0e4013baa1338bb8deea39869dbcfd0..a37b08f76ad6f6096f4b44674c8852b7734a995c 100644 (file)
 #include "llvm/Type.h"
 using namespace llvm;
 
-X86MCInstLower::X86MCInstLower(MCContext &ctx, Mangler *mang,
-                               const MachineFunction &mf,
-                               X86AsmPrinter &asmprinter)
-: Ctx(ctx), Mang(mang), MF(mf), TM(mf.getTarget()), MAI(*TM.getMCAsmInfo()),
-  AsmPrinter(asmprinter) {}
+X86MCInstLower::X86MCInstLower(Mangler *mang, const MachineFunction &mf,
+                               X86AsmPrinter *asmprinter)
+: Ctx(mf.getContext()), Mang(mang), MF(mf), TM(mf.getTarget()),
+  MAI(*TM.getMCAsmInfo()), AsmPrinter(asmprinter) {}
 
 MachineModuleInfoMachO &X86MCInstLower::getMachOMMI() const {
   return MF.getMMI().getObjFileInfo<MachineModuleInfoMachO>();
@@ -182,7 +181,7 @@ MCOperand X86MCInstLower::LowerSymbolOperand(const MachineOperand &MO,
       // local labels. This is only safe when the symbols are in the same
       // section so we are restricting it to jumptable references.
       MCSymbol *Label = Ctx.CreateTempSymbol();
-      AsmPrinter.OutStreamer.EmitAssignment(Label, Expr);
+      AsmPrinter->OutStreamer.EmitAssignment(Label, Expr);
       Expr = MCSymbolRefExpr::Create(Label, Ctx);
     }
     break;
@@ -327,14 +326,14 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
       MCOp = LowerSymbolOperand(MO, GetSymbolFromOperand(MO));
       break;
     case MachineOperand::MO_JumpTableIndex:
-      MCOp = LowerSymbolOperand(MO, AsmPrinter.GetJTISymbol(MO.getIndex()));
+      MCOp = LowerSymbolOperand(MO, AsmPrinter->GetJTISymbol(MO.getIndex()));
       break;
     case MachineOperand::MO_ConstantPoolIndex:
-      MCOp = LowerSymbolOperand(MO, AsmPrinter.GetCPISymbol(MO.getIndex()));
+      MCOp = LowerSymbolOperand(MO, AsmPrinter->GetCPISymbol(MO.getIndex()));
       break;
     case MachineOperand::MO_BlockAddress:
       MCOp = LowerSymbolOperand(MO,
-                        AsmPrinter.GetBlockAddressSymbol(MO.getBlockAddress()));
+                       AsmPrinter->GetBlockAddressSymbol(MO.getBlockAddress()));
       break;
     }
     
@@ -505,7 +504,7 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
 
 
 void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) {
-  X86MCInstLower MCInstLowering(OutContext, Mang, *MF, *this);
+  X86MCInstLower MCInstLowering(Mang, *MF, this);
   switch (MI->getOpcode()) {
   case TargetOpcode::DBG_VALUE:
     if (isVerbose() && OutStreamer.hasRawTextSupport()) {
index a1b826d03db0096f8ce39d989911750238f27893..0d493c4b47eb3a0ec5e211f92a26ce25207b17a2 100644 (file)
@@ -34,10 +34,12 @@ class LLVM_LIBRARY_VISIBILITY X86MCInstLower {
   const TargetMachine &TM;
   const MCAsmInfo &MAI;
 
-  X86AsmPrinter &AsmPrinter;
+  /// AsmPrinter - This is the asmprinter when emission is actually happening,
+  /// or null if an instruction is being lowered for some other reason.
+  X86AsmPrinter *AsmPrinter;
 public:
-  X86MCInstLower(MCContext &ctx, Mangler *mang, const MachineFunction &MF,
-                 X86AsmPrinter &asmprinter);
+  X86MCInstLower(Mangler *mang, const MachineFunction &MF,
+                 X86AsmPrinter *asmprinter);
   
   void Lower(const MachineInstr *MI, MCInst &OutMI) const;