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 | 908bafe6fa28c077195aa3a2eeace7f3de41ae4c (patch) | |
tree | 1c7af56f39a27b17f8cfb21eecc7acb9ccd648c9 /lib | |
parent | 20813e01e76e71c0400165b7fb8b2e412d18c0a2 (diff) |
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')
-rw-r--r-- | lib/Target/X86/X86MCInstLower.cpp | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/lib/Target/X86/X86MCInstLower.cpp b/lib/Target/X86/X86MCInstLower.cpp index a37b08f76a..3eb12a969c 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; } |