Copy segment register when optimizing to MOV8ao8/MOV16ao16/MOV32ao32.
authorCraig Topper <craig.topper@gmail.com>
Thu, 16 Jan 2014 07:57:45 +0000 (07:57 +0000)
committerCraig Topper <craig.topper@gmail.com>
Thu, 16 Jan 2014 07:57:45 +0000 (07:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199365 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86MCInstLower.cpp

index 8b4195f0ee050636f833d84c1a2269976fe2c0f4..8d1348012e385797ca00d8d0390a7ac3c12683c2 100644 (file)
@@ -323,15 +323,16 @@ static void SimplifyShortMoveForm(X86AsmPrinter &Printer, MCInst &Inst,
   if (Absolute &&
       (Inst.getOperand(AddrBase + 0).getReg() != 0 ||
        Inst.getOperand(AddrBase + 2).getReg() != 0 ||
-       Inst.getOperand(AddrBase + 4).getReg() != 0 ||
        Inst.getOperand(AddrBase + 1).getImm() != 1))
     return;
 
   // If so, rewrite the instruction.
   MCOperand Saved = Inst.getOperand(AddrOp);
+  MCOperand Seg = Inst.getOperand(AddrBase + 4);
   Inst = MCInst();
   Inst.setOpcode(Opcode);
   Inst.addOperand(Saved);
+  Inst.addOperand(Seg);
 }
 
 static unsigned getRetOpcode(const X86Subtarget &Subtarget)