MC: Switch MCFixup to just hold an MCExpr pointer instead of index into the
MCInst it came from.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95767 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/X86/X86CodeEmitter.cpp b/lib/Target/X86/X86CodeEmitter.cpp
index ae03564..f0bceb1 100644
--- a/lib/Target/X86/X86CodeEmitter.cpp
+++ b/lib/Target/X86/X86CodeEmitter.cpp
@@ -878,12 +878,14 @@
 namespace {
 class MCSingleInstructionCodeEmitter : public MachineCodeEmitter {
   uint8_t Data[256];
+  const MCInst *CurrentInst;
   SmallVectorImpl<MCFixup> *FixupList;
 
 public:
-  MCSingleInstructionCodeEmitter() { reset(0); }
+  MCSingleInstructionCodeEmitter() { reset(0, 0); }
 
-  void reset(SmallVectorImpl<MCFixup> *Fixups) {
+  void reset(const MCInst *Inst, SmallVectorImpl<MCFixup> *Fixups) {
+    CurrentInst = Inst;
     FixupList = Fixups;
     BufferBegin = Data;
     BufferEnd = array_endof(Data);
@@ -915,7 +917,9 @@
       OpIndex = MR.getJumpTableIndex();
     }
 
-    FixupList->push_back(MCFixup::Create(Offset, OpIndex,
+    MCOperand Op = CurrentInst->getOperand(OpIndex);
+    assert(Op.isExpr() && "FIXME: Not yet implemented!");
+    FixupList->push_back(MCFixup::Create(Offset, Op.getExpr(),
                                      MCFixupKind(FirstTargetFixupKind + Kind)));
   }
   virtual void setModuleInfo(MachineModuleInfo* Info) {}
@@ -1163,7 +1167,7 @@
       Instr->dump();
     }
 
-    InstrEmitter->reset(&Fixups);
+    InstrEmitter->reset(&MI, &Fixups);
     if (OK)
       Emit->emitInstruction(*Instr, &Desc);
     OS << InstrEmitter->str();