aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/X86/X86MCInstLower.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-07-21 23:03:35 +0000
committerChris Lattner <sabre@nondot.org>2010-07-21 23:03:35 +0000
commit908bafe6fa28c077195aa3a2eeace7f3de41ae4c (patch)
tree1c7af56f39a27b17f8cfb21eecc7acb9ccd648c9 /lib/Target/X86/X86MCInstLower.cpp
parent20813e01e76e71c0400165b7fb8b2e412d18c0a2 (diff)
downloadexternal_llvm-908bafe6fa28c077195aa3a2eeace7f3de41ae4c.zip
external_llvm-908bafe6fa28c077195aa3a2eeace7f3de41ae4c.tar.gz
external_llvm-908bafe6fa28c077195aa3a2eeace7f3de41ae4c.tar.bz2
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109056 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86MCInstLower.cpp')
-rw-r--r--lib/Target/X86/X86MCInstLower.cpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/lib/Target/X86/X86MCInstLower.cpp b/lib/Target/X86/X86MCInstLower.cpp
index a37b08f..3eb12a9 100644
--- a/lib/Target/X86/X86MCInstLower.cpp
+++ b/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;
}