diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-07-21 23:03:35 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-07-21 23:03:35 +0000 | 
| commit | 5c91a5e7473c14d6ea3ad16dfcf4a80e991a53f8 (patch) | |
| tree | 5ca85702c734062a399b328646460c6c25e54b6c /llvm/lib/Target/X86/X86MCInstLower.cpp | |
| parent | 7ca8fb4795bff93e51f7414cee0b7bb165bd0e94 (diff) | |
| download | bcm5719-llvm-5c91a5e7473c14d6ea3ad16dfcf4a80e991a53f8.tar.gz bcm5719-llvm-5c91a5e7473c14d6ea3ad16dfcf4a80e991a53f8.zip | |
add some rough support for making mcinst lowering work without an
asmprinter or mangler around.  This is option #B for killing off 
X86InstrInfo::GetInstSizeInBytes.  Option #A (killing 
"needsexactsize") was sent for consideration to llvmdev.
llvm-svn: 109056
Diffstat (limited to 'llvm/lib/Target/X86/X86MCInstLower.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86MCInstLower.cpp | 28 | 
1 files changed, 23 insertions, 5 deletions
| diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index a37b08f76ad..3eb12a969c7 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -320,20 +320,38 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {                         MO.getMBB()->getSymbol(), Ctx));        break;      case MachineOperand::MO_GlobalAddress: -      MCOp = LowerSymbolOperand(MO, GetSymbolFromOperand(MO)); +      // If we don't have an asmprinter, we're converting to MCInst to get +      // instruction sizes, which doesn't need precise value information for +      // symbols, just lower to a 0 immediate. +      if (AsmPrinter != 0) +        MCOp = LowerSymbolOperand(MO, GetSymbolFromOperand(MO)); +      else +        MCOp = MCOperand::CreateImm(0);        break;      case MachineOperand::MO_ExternalSymbol: -      MCOp = LowerSymbolOperand(MO, GetSymbolFromOperand(MO)); +      if (AsmPrinter != 0) +        MCOp = LowerSymbolOperand(MO, GetSymbolFromOperand(MO)); +      else +        MCOp = MCOperand::CreateImm(0);        break;      case MachineOperand::MO_JumpTableIndex: -      MCOp = LowerSymbolOperand(MO, AsmPrinter->GetJTISymbol(MO.getIndex())); +      if (AsmPrinter != 0) +        MCOp = LowerSymbolOperand(MO, AsmPrinter->GetJTISymbol(MO.getIndex())); +      else +        MCOp = MCOperand::CreateImm(0);        break;      case MachineOperand::MO_ConstantPoolIndex: -      MCOp = LowerSymbolOperand(MO, AsmPrinter->GetCPISymbol(MO.getIndex())); +      if (AsmPrinter != 0) +        MCOp = LowerSymbolOperand(MO, AsmPrinter->GetCPISymbol(MO.getIndex())); +      else +        MCOp = MCOperand::CreateImm(0);        break;      case MachineOperand::MO_BlockAddress: -      MCOp = LowerSymbolOperand(MO, +      if (AsmPrinter != 0) +        MCOp = LowerSymbolOperand(MO,                         AsmPrinter->GetBlockAddressSymbol(MO.getBlockAddress())); +      else +        MCOp = MCOperand::CreateImm(0);        break;      } | 

