[llvm-commits] [llvm] r81627 - in /llvm/trunk/lib/Target/X86/AsmPrinter: X86ATTAsmPrinter.h X86MCInstLower.cpp X86MCInstLower.h

Chris Lattner sabre at nondot.org
Sat Sep 12 13:34:57 PDT 2009


Author: lattner
Date: Sat Sep 12 15:34:57 2009
New Revision: 81627

URL: http://llvm.org/viewvc/llvm-project?rev=81627&view=rev
Log:
split MachineInstr -> MCInst lowering into its own class (not
being embedded into X86ATTAsmPrinter).  This still depends heavily
on X86ATTAsmPrinter, but this is a step in the right direction.

Added:
    llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.h
Modified:
    llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h
    llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp

Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h?rev=81627&r1=81626&r2=81627&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h (original)
+++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h Sat Sep 12 15:34:57 2009
@@ -45,6 +45,8 @@
   virtual const char *getPassName() const {
     return "X86 AT&T-Style Assembly Printer";
   }
+  
+  const X86Subtarget &getSubtarget() const { return *Subtarget; }
 
   void getAnalysisUsage(AnalysisUsage &AU) const {
     AU.setPreservesAll();
@@ -64,12 +66,6 @@
   
   // New MCInst printing stuff.
   void printInstruction(const MCInst *MI);
-  MCSymbol *GetPICBaseSymbol();
-  MCSymbol *GetGlobalAddressSymbol(const MachineOperand &MO);
-  MCSymbol *GetExternalSymbolSymbol(const MachineOperand &MO);
-  MCSymbol *GetJumpTableSymbol(const MachineOperand &MO);
-  MCSymbol *GetConstantPoolIndexSymbol(const MachineOperand &MO);
-  MCOperand LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym);
 
 
   virtual void printMCInst(const MCInst *MI) { printInstruction(MI); }

Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp?rev=81627&r1=81626&r2=81627&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp (original)
+++ llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp Sat Sep 12 15:34:57 2009
@@ -12,7 +12,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-
+#include "X86MCInstLower.h"
 #include "X86ATTAsmPrinter.h"
 #include "X86MCAsmInfo.h"
 #include "llvm/MC/MCContext.h"
@@ -24,24 +24,32 @@
 #include "llvm/ADT/SmallString.h"
 using namespace llvm;
 
-MCSymbol *X86ATTAsmPrinter::GetPICBaseSymbol() {
+
+const X86Subtarget &X86MCInstLower::getSubtarget() const {
+  return AsmPrinter.getSubtarget();
+}
+
+
+MCSymbol *X86MCInstLower::GetPICBaseSymbol() const {
   // FIXME: the actual label generated doesn't matter here!  Just mangle in
   // something unique (the function number) with Private prefix.
   SmallString<60> Name;
   
-  if (Subtarget->isTargetDarwin()) {
-    raw_svector_ostream(Name) << 'L' << getFunctionNumber() << "$pb";
+  if (getSubtarget().isTargetDarwin()) {
+    raw_svector_ostream(Name) << 'L' << AsmPrinter.getFunctionNumber() << "$pb";
   } else {
-    assert(Subtarget->isTargetELF() && "Don't know how to print PIC label!");
-    raw_svector_ostream(Name) << ".Lllvm$" << getFunctionNumber()<<".$piclabel";
+    assert(getSubtarget().isTargetELF() && "Don't know how to print PIC label!");
+    raw_svector_ostream(Name) << ".Lllvm$" << AsmPrinter.getFunctionNumber()
+       << ".$piclabel";
   }
-  return OutContext.GetOrCreateSymbol(Name.str());
+  return Ctx.GetOrCreateSymbol(Name.str());
 }
 
 
 /// LowerGlobalAddressOperand - Lower an MO_GlobalAddress operand to an
 /// MCOperand.
-MCSymbol *X86ATTAsmPrinter::GetGlobalAddressSymbol(const MachineOperand &MO) {
+MCSymbol *X86MCInstLower::
+GetGlobalAddressSymbol(const MachineOperand &MO) const {
   const GlobalValue *GV = MO.getGlobal();
   
   bool isImplicitlyPrivate = false;
@@ -54,8 +62,8 @@
   SmallString<128> Name;
   Mang->getNameWithPrefix(Name, GV, isImplicitlyPrivate);
   
-  if (Subtarget->isTargetCygMing())
-    DecorateCygMingName(Name, GV);
+  if (getSubtarget().isTargetCygMing())
+    AsmPrinter.DecorateCygMingName(Name, GV);
   
   switch (MO.getTargetFlags()) {
   default: llvm_unreachable("Unknown target flag on GV operand");
@@ -72,35 +80,34 @@
   case X86II::MO_DARWIN_NONLAZY:
   case X86II::MO_DARWIN_NONLAZY_PIC_BASE: {
     Name += "$non_lazy_ptr";
-    MCSymbol *Sym = OutContext.GetOrCreateSymbol(Name.str());
-    MCSymbol *&StubSym = GVStubs[Sym];
+    MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name.str());
+    MCSymbol *&StubSym = AsmPrinter.GVStubs[Sym];
     if (StubSym == 0) {
       Name.clear();
       Mang->getNameWithPrefix(Name, GV, false);
-      StubSym = OutContext.GetOrCreateSymbol(Name.str());
+      StubSym = Ctx.GetOrCreateSymbol(Name.str());
     }
     return Sym;
-    
   }
   case X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE: {
     Name += "$non_lazy_ptr";
-    MCSymbol *Sym = OutContext.GetOrCreateSymbol(Name.str());
-    MCSymbol *&StubSym = HiddenGVStubs[Sym];
+    MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name.str());
+    MCSymbol *&StubSym = AsmPrinter.HiddenGVStubs[Sym];
     if (StubSym == 0) {
       Name.clear();
       Mang->getNameWithPrefix(Name, GV, false);
-      StubSym = OutContext.GetOrCreateSymbol(Name.str());
+      StubSym = Ctx.GetOrCreateSymbol(Name.str());
     }
     return Sym;
   }
   case X86II::MO_DARWIN_STUB: {
     Name += "$stub";
-    MCSymbol *Sym = OutContext.GetOrCreateSymbol(Name.str());
-    MCSymbol *&StubSym = FnStubs[Sym];
+    MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name.str());
+    MCSymbol *&StubSym = AsmPrinter.FnStubs[Sym];
     if (StubSym == 0) {
       Name.clear();
       Mang->getNameWithPrefix(Name, GV, false);
-      StubSym = OutContext.GetOrCreateSymbol(Name.str());
+      StubSym = Ctx.GetOrCreateSymbol(Name.str());
     }
     return Sym;
   }
@@ -116,12 +123,13 @@
   case X86II::MO_PLT:       Name += "@PLT";       break;
   }
   
-  return OutContext.GetOrCreateSymbol(Name.str());
+  return Ctx.GetOrCreateSymbol(Name.str());
 }
 
-MCSymbol *X86ATTAsmPrinter::GetExternalSymbolSymbol(const MachineOperand &MO) {
+MCSymbol *X86MCInstLower::
+GetExternalSymbolSymbol(const MachineOperand &MO) const {
   SmallString<128> Name;
-  Name += MAI->getGlobalPrefix();
+  Name += AsmPrinter.MAI->getGlobalPrefix();
   Name += MO.getSymbolName();
   
   switch (MO.getTargetFlags()) {
@@ -138,11 +146,11 @@
   }
   case X86II::MO_DARWIN_STUB: {
     Name += "$stub";
-    MCSymbol *Sym = OutContext.GetOrCreateSymbol(Name.str());
-    MCSymbol *&StubSym = FnStubs[Sym];
+    MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name.str());
+    MCSymbol *&StubSym = AsmPrinter.FnStubs[Sym];
     if (StubSym == 0) {
       Name.erase(Name.end()-5, Name.end());
-      StubSym = OutContext.GetOrCreateSymbol(Name.str());
+      StubSym = Ctx.GetOrCreateSymbol(Name.str());
     }
     return Sym;
   }
@@ -158,13 +166,13 @@
   case X86II::MO_PLT:       Name += "@PLT";       break;
   }
   
-  return OutContext.GetOrCreateSymbol(Name.str());
+  return Ctx.GetOrCreateSymbol(Name.str());
 }
 
-MCSymbol *X86ATTAsmPrinter::GetJumpTableSymbol(const MachineOperand &MO) {
+MCSymbol *X86MCInstLower::GetJumpTableSymbol(const MachineOperand &MO) const {
   SmallString<256> Name;
-  raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix() << "JTI"
-    << getFunctionNumber() << '_' << MO.getIndex();
+  raw_svector_ostream(Name) << AsmPrinter.MAI->getPrivateGlobalPrefix() << "JTI"
+    << AsmPrinter.getFunctionNumber() << '_' << MO.getIndex();
   
   switch (MO.getTargetFlags()) {
   default:
@@ -187,15 +195,15 @@
   }
   
   // Create a symbol for the name.
-  return OutContext.GetOrCreateSymbol(Name.str());
+  return Ctx.GetOrCreateSymbol(Name.str());
 }
 
 
-MCSymbol *X86ATTAsmPrinter::
-GetConstantPoolIndexSymbol(const MachineOperand &MO) {
+MCSymbol *X86MCInstLower::
+GetConstantPoolIndexSymbol(const MachineOperand &MO) const {
   SmallString<256> Name;
-  raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix() << "CPI"
-  << getFunctionNumber() << '_' << MO.getIndex();
+  raw_svector_ostream(Name) << AsmPrinter.MAI->getPrivateGlobalPrefix() << "CPI"
+    << AsmPrinter.getFunctionNumber() << '_' << MO.getIndex();
   
   switch (MO.getTargetFlags()) {
   default:
@@ -218,14 +226,14 @@
   }
   
   // Create a symbol for the name.
-  return OutContext.GetOrCreateSymbol(Name.str());
+  return Ctx.GetOrCreateSymbol(Name.str());
 }
 
-MCOperand X86ATTAsmPrinter::LowerSymbolOperand(const MachineOperand &MO,
-                                               MCSymbol *Sym) {
+MCOperand X86MCInstLower::LowerSymbolOperand(const MachineOperand &MO,
+                                             MCSymbol *Sym) const {
   // FIXME: We would like an efficient form for this, so we don't have to do a
   // lot of extra uniquing.
-  const MCExpr *Expr = MCSymbolRefExpr::Create(Sym, OutContext);
+  const MCExpr *Expr = MCSymbolRefExpr::Create(Sym, Ctx);
   
   switch (MO.getTargetFlags()) {
   default: llvm_unreachable("Unknown target flag on GV operand");
@@ -251,8 +259,8 @@
     // Subtract the pic base.
     Expr = MCBinaryExpr::CreateSub(Expr, 
                                    MCSymbolRefExpr::Create(GetPICBaseSymbol(),
-                                                           OutContext),
-                                   OutContext);
+                                                           Ctx),
+                                   Ctx);
     break;
   case X86II::MO_GOT_ABSOLUTE_ADDRESS: {
     // For this, we want to print something like:
@@ -260,24 +268,25 @@
     // However, we can't generate a ".", so just emit a new label here and refer
     // to it.  We know that this operand flag occurs at most once per function.
     SmallString<64> Name;
-    raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix() << "picbaseref"
-      << getFunctionNumber();
-    MCSymbol *DotSym = OutContext.GetOrCreateSymbol(Name.str());
-    OutStreamer.EmitLabel(DotSym);
+    raw_svector_ostream(Name) << AsmPrinter.MAI->getPrivateGlobalPrefix()
+      << "picbaseref" << AsmPrinter.getFunctionNumber();
+    MCSymbol *DotSym = Ctx.GetOrCreateSymbol(Name.str());
+// FIXME: This instruction should be lowered before we get here...    
+    AsmPrinter.OutStreamer.EmitLabel(DotSym);
 
-    const MCExpr *DotExpr = MCSymbolRefExpr::Create(DotSym, OutContext);
+    const MCExpr *DotExpr = MCSymbolRefExpr::Create(DotSym, Ctx);
     const MCExpr *PICBase = MCSymbolRefExpr::Create(GetPICBaseSymbol(),
-                                                    OutContext);
-    DotExpr = MCBinaryExpr::CreateSub(DotExpr, PICBase, OutContext);
-    Expr = MCBinaryExpr::CreateAdd(Expr, DotExpr, OutContext);
+                                                    Ctx);
+    DotExpr = MCBinaryExpr::CreateSub(DotExpr, PICBase, Ctx);
+    Expr = MCBinaryExpr::CreateAdd(Expr, DotExpr, Ctx);
     break;      
   }
   }
   
   if (!MO.isJTI() && MO.getOffset())
-    Expr = MCBinaryExpr::CreateAdd(Expr, MCConstantExpr::Create(MO.getOffset(),
-                                                                OutContext),
-                                   OutContext);
+    Expr = MCBinaryExpr::CreateAdd(Expr,
+                                   MCConstantExpr::Create(MO.getOffset(), Ctx),
+                                   Ctx);
   return MCOperand::CreateExpr(Expr);
 }
 
@@ -303,51 +312,9 @@
 }
 
 
-void X86ATTAsmPrinter::
-printInstructionThroughMCStreamer(const MachineInstr *MI) {
-  MCInst TmpInst;
-  switch (MI->getOpcode()) {
-  case TargetInstrInfo::DBG_LABEL:
-  case TargetInstrInfo::EH_LABEL:
-  case TargetInstrInfo::GC_LABEL:
-    printLabel(MI);
-    return;
-  case TargetInstrInfo::INLINEASM:
-    O << '\t';
-    printInlineAsm(MI);
-    return;
-  case TargetInstrInfo::IMPLICIT_DEF:
-    printImplicitDef(MI);
-    return;
-  case X86::MOVPC32r: {
-    // This is a pseudo op for a two instruction sequence with a label, which
-    // looks like:
-    //     call "L1$pb"
-    // "L1$pb":
-    //     popl %esi
-    
-    // Emit the call.
-    MCSymbol *PICBase = GetPICBaseSymbol();
-    TmpInst.setOpcode(X86::CALLpcrel32);
-    // FIXME: We would like an efficient form for this, so we don't have to do a
-    // lot of extra uniquing.
-    TmpInst.addOperand(MCOperand::CreateExpr(MCSymbolRefExpr::Create(PICBase,
-                                                                 OutContext)));
-    printInstruction(&TmpInst);
-    O << '\n';
-    
-    // Emit the label.
-    OutStreamer.EmitLabel(PICBase);
-    
-    // popl $reg
-    TmpInst.setOpcode(X86::POP32r);
-    TmpInst.getOperand(0) = MCOperand::CreateReg(MI->getOperand(0).getReg());
-    printInstruction(&TmpInst);
-    return;
-    }
-  }
-  
-  TmpInst.setOpcode(MI->getOpcode());
+
+void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
+  OutMI.setOpcode(MI->getOpcode());
   
   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
     const MachineOperand &MO = MI->getOperand(i);
@@ -355,9 +322,8 @@
     MCOperand MCOp;
     switch (MO.getType()) {
     default:
-      O.flush();
-      errs() << "Cannot lower operand #" << i << " of :" << *MI;
-      llvm_unreachable("Unimp");
+      MI->dump();
+      llvm_unreachable("unknown operand type");
     case MachineOperand::MO_Register:
       MCOp = MCOperand::CreateReg(MO.getReg());
       break;
@@ -365,7 +331,8 @@
       MCOp = MCOperand::CreateImm(MO.getImm());
       break;
     case MachineOperand::MO_MachineBasicBlock:
-      MCOp = MCOperand::CreateMBBLabel(getFunctionNumber(), 
+// FIXME: Kill MBBLabel operand type!
+      MCOp = MCOperand::CreateMBBLabel(AsmPrinter.getFunctionNumber(), 
                                        MO.getMBB()->getNumber());
       break;
     case MachineOperand::MO_GlobalAddress:
@@ -382,63 +349,115 @@
       break;
     }
     
-    TmpInst.addOperand(MCOp);
+    OutMI.addOperand(MCOp);
   }
   
   // Handle a few special cases to eliminate operand modifiers.
-  switch (TmpInst.getOpcode()) {
+  switch (OutMI.getOpcode()) {
   case X86::LEA64_32r: // Handle 'subreg rewriting' for the lea64_32mem operand.
-    lower_lea64_32mem(&TmpInst, 1);
+    lower_lea64_32mem(&OutMI, 1);
     break;
   case X86::MOV16r0:
-    TmpInst.setOpcode(X86::MOV32r0);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOV32r0);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVZX16rr8:
-    TmpInst.setOpcode(X86::MOVZX32rr8);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOVZX32rr8);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVZX16rm8:
-    TmpInst.setOpcode(X86::MOVZX32rm8);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOVZX32rm8);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVSX16rr8:
-    TmpInst.setOpcode(X86::MOVSX32rr8);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOVSX32rr8);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVSX16rm8:
-    TmpInst.setOpcode(X86::MOVSX32rm8);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOVSX32rm8);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVZX64rr32:
-    TmpInst.setOpcode(X86::MOV32rr);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOV32rr);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVZX64rm32:
-    TmpInst.setOpcode(X86::MOV32rm);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOV32rm);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOV64ri64i32:
-    TmpInst.setOpcode(X86::MOV32ri);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOV32ri);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVZX64rr8:
-    TmpInst.setOpcode(X86::MOVZX32rr8);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOVZX32rr8);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVZX64rm8:
-    TmpInst.setOpcode(X86::MOVZX32rm8);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOVZX32rm8);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVZX64rr16:
-    TmpInst.setOpcode(X86::MOVZX32rr16);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOVZX32rr16);
+    lower_subreg32(&OutMI, 0);
     break;
   case X86::MOVZX64rm16:
-    TmpInst.setOpcode(X86::MOVZX32rm16);
-    lower_subreg32(&TmpInst, 0);
+    OutMI.setOpcode(X86::MOVZX32rm16);
+    lower_subreg32(&OutMI, 0);
     break;
   }
+}
+
+
+
+void X86ATTAsmPrinter::
+printInstructionThroughMCStreamer(const MachineInstr *MI) {
+  X86MCInstLower MCInstLowering(OutContext, Mang, *this);
+  switch (MI->getOpcode()) {
+  case TargetInstrInfo::DBG_LABEL:
+  case TargetInstrInfo::EH_LABEL:
+  case TargetInstrInfo::GC_LABEL:
+    printLabel(MI);
+    return;
+  case TargetInstrInfo::INLINEASM:
+    O << '\t';
+    printInlineAsm(MI);
+    return;
+  case TargetInstrInfo::IMPLICIT_DEF:
+    printImplicitDef(MI);
+    return;
+  case X86::MOVPC32r: {
+    MCInst TmpInst;
+    // This is a pseudo op for a two instruction sequence with a label, which
+    // looks like:
+    //     call "L1$pb"
+    // "L1$pb":
+    //     popl %esi
+    
+    // Emit the call.
+    MCSymbol *PICBase = MCInstLowering.GetPICBaseSymbol();
+    TmpInst.setOpcode(X86::CALLpcrel32);
+    // FIXME: We would like an efficient form for this, so we don't have to do a
+    // lot of extra uniquing.
+    TmpInst.addOperand(MCOperand::CreateExpr(MCSymbolRefExpr::Create(PICBase,
+                                                                 OutContext)));
+    printInstruction(&TmpInst);
+    O << '\n';
+    
+    // Emit the label.
+    OutStreamer.EmitLabel(PICBase);
+    
+    // popl $reg
+    TmpInst.setOpcode(X86::POP32r);
+    TmpInst.getOperand(0) = MCOperand::CreateReg(MI->getOperand(0).getReg());
+    printInstruction(&TmpInst);
+    return;
+    }
+  }
+  
+  MCInst TmpInst;
+  MCInstLowering.Lower(MI, TmpInst);
+  
   
   printInstruction(&TmpInst);
 }

Added: llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.h?rev=81627&view=auto

==============================================================================
--- llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.h (added)
+++ llvm/trunk/lib/Target/X86/AsmPrinter/X86MCInstLower.h Sat Sep 12 15:34:57 2009
@@ -0,0 +1,49 @@
+//===-- X86MCInstLower.h - Lower MachineInstr to MCInst -------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef X86_MCINSTLOWER_H
+#define X86_MCINSTLOWER_H
+
+
+namespace llvm {
+  class MCContext;
+  class MCInst;
+  class MCOperand;
+  class MCSymbol;
+  class MachineInstr;
+  class MachineOperand;
+  class Mangler;
+  class X86ATTAsmPrinter;
+  class X86Subtarget;
+  
+class X86MCInstLower {
+  MCContext &Ctx;
+  Mangler *Mang;
+  X86ATTAsmPrinter &AsmPrinter;
+public:
+  X86MCInstLower(MCContext &ctx, Mangler *mang, X86ATTAsmPrinter &asmprinter)
+    : Ctx(ctx), Mang(mang), AsmPrinter(asmprinter) {}
+  
+  void Lower(const MachineInstr *MI, MCInst &OutMI) const;
+
+  MCSymbol *GetPICBaseSymbol() const;
+
+private:
+  const X86Subtarget &getSubtarget() const;
+  
+  MCSymbol *GetGlobalAddressSymbol(const MachineOperand &MO) const;
+  MCSymbol *GetExternalSymbolSymbol(const MachineOperand &MO) const;
+  MCSymbol *GetJumpTableSymbol(const MachineOperand &MO) const;
+  MCSymbol *GetConstantPoolIndexSymbol(const MachineOperand &MO) const;
+  MCOperand LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym) const;
+};
+
+}
+
+#endif





More information about the llvm-commits mailing list