diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp --- a/llvm/lib/Target/X86/X86FastISel.cpp +++ b/llvm/lib/Target/X86/X86FastISel.cpp @@ -3483,9 +3483,10 @@ MachineInstrBuilder MIB; if (CalleeOp) { // Register-indirect call. - unsigned CallOpc = Is64Bit ? X86::CALL64r : X86::CALL32r; + unsigned CallOpc = + TLI.getPointerTy(DL) == MVT::i64 ? X86::CALL64r : X86::CALL32r; MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(CallOpc)) - .addReg(CalleeOp); + .addReg(CalleeOp); } else { // Direct call. assert(GV && "Not a direct call"); diff --git a/llvm/test/CodeGen/X86/pic.ll b/llvm/test/CodeGen/X86/pic.ll --- a/llvm/test/CodeGen/X86/pic.ll +++ b/llvm/test/CodeGen/X86/pic.ll @@ -100,7 +100,7 @@ ; CHECK-I686: calll * ; CHECK-X32: callq afoo@PLT ; CHECK-X32: movl pfoo@GOTPCREL(%rip), -; CHECK-X32: callq * +; CHECK-X32: call{{l|q}} * } declare void(...)* @afoo(...)