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 | |
| 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')
| -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; } |

