delete the fixme too! :)
[oota-llvm.git] / lib / Target / X86 / X86CodeEmitter.cpp
index 6367623a01a05524a94afeaac86b330274a0d338..5ce6f3c4a19af5c98d120063429b3c2d7854682f 100644 (file)
@@ -324,37 +324,27 @@ void Emitter<CodeEmitter>::emitDisplacementField(const MachineOperand *RelocOp,
 
   // Otherwise, this is something that requires a relocation.  Emit it as such
   // now.
+  unsigned RelocType = Is64BitMode ?
+    (IsPCRel ? X86::reloc_pcrel_word : X86::reloc_absolute_word_sext)
+    : (IsPIC ? X86::reloc_picrel_word : X86::reloc_absolute_word);
   if (RelocOp->isGlobal()) {
     // In 64-bit static small code model, we could potentially emit absolute.
     // But it's probably not beneficial. If the MCE supports using RIP directly
     // do it, otherwise fallback to absolute (this is determined by IsPCRel). 
     //  89 05 00 00 00 00     mov    %eax,0(%rip)  # PC-relative
     //  89 04 25 00 00 00 00  mov    %eax,0x0      # Absolute
-    unsigned rt = Is64BitMode ?
-      (IsPCRel ? X86::reloc_pcrel_word : X86::reloc_absolute_word_sext)
-      : (IsPIC ? X86::reloc_picrel_word : X86::reloc_absolute_word);
     bool NeedStub = isa<Function>(RelocOp->getGlobal());
     bool Indirect = gvNeedsNonLazyPtr(*RelocOp, TM);
-    emitGlobalAddress(RelocOp->getGlobal(), rt, RelocOp->getOffset(),
+    emitGlobalAddress(RelocOp->getGlobal(), RelocType, RelocOp->getOffset(),
                       Adj, NeedStub, Indirect);
   } else if (RelocOp->isSymbol()) {
-    unsigned rt = Is64BitMode ?
-      (IsPCRel ? X86::reloc_pcrel_word : X86::reloc_absolute_word_sext)
-      : (IsPCRel ? X86::reloc_picrel_word : X86::reloc_absolute_word);
-    emitExternalSymbolAddress(RelocOp->getSymbolName(), rt);
+    emitExternalSymbolAddress(RelocOp->getSymbolName(), RelocType);
   } else if (RelocOp->isCPI()) {
-    unsigned rt = Is64BitMode ?
-      (IsPCRel ? X86::reloc_pcrel_word : X86::reloc_absolute_word_sext)
-      : (IsPCRel ? X86::reloc_picrel_word : X86::reloc_absolute_word);
-    emitConstPoolAddress(RelocOp->getIndex(), rt,
+    emitConstPoolAddress(RelocOp->getIndex(), RelocType,
                          RelocOp->getOffset(), Adj);
-  } else if (RelocOp->isJTI()) {
-    unsigned rt = Is64BitMode ?
-      (IsPCRel ? X86::reloc_pcrel_word : X86::reloc_absolute_word_sext)
-      : (IsPCRel ? X86::reloc_picrel_word : X86::reloc_absolute_word);
-    emitJumpTableAddress(RelocOp->getIndex(), rt, Adj);
   } else {
-    llvm_unreachable("Unknown value to relocate!");
+    assert(RelocOp->isJTI() && "Unexpected machine operand!");
+    emitJumpTableAddress(RelocOp->getIndex(), RelocType, Adj);
   }
 }
 
@@ -602,6 +592,7 @@ void Emitter<CodeEmitter>::emitInstruction(const MachineInstr &MI,
       break;
     case TargetInstrInfo::DBG_LABEL:
     case TargetInstrInfo::EH_LABEL:
+    case TargetInstrInfo::GC_LABEL:
       MCE.emitLabel(MI.getOperand(0).getImm());
       break;
     case TargetInstrInfo::IMPLICIT_DEF:
@@ -1101,7 +1092,7 @@ public:
 
     if (!OK) {
       errs() << "couldn't convert inst '";
-      MI.print(errs());
+      MI.dump();
       errs() << "' to machine instr:\n";
       Instr->dump();
     }