add some rough support for making mcinst lowering work without an
authorChris Lattner <sabre@nondot.org>
Wed, 21 Jul 2010 23:03:35 +0000 (23:03 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 21 Jul 2010 23:03:35 +0000 (23:03 +0000)
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

lib/Target/X86/X86MCInstLower.cpp

index a37b08f76ad6f6096f4b44674c8852b7734a995c..3eb12a969c7a97a027222ff091a1b57619cf4e8f 100644 (file)
@@ -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;
     }