@@ -301,8 +301,9 @@ bool X86ExpandPseudo::expandMI(MachineBasicBlock &MBB,
301301 X86FL->emitSPUpdate (MBB, MBBI, DL, Offset, /* InEpilogue=*/ true );
302302 }
303303
304+ // Use this predicate to set REX prefix for X86_64 targets.
305+ bool IsX64 = STI->isTargetWin64 () || STI->isTargetUEFI64 ();
304306 // Jump to label or value in register.
305- bool IsWin64 = STI->isTargetWin64 ();
306307 if (Opcode == X86::TCRETURNdi || Opcode == X86::TCRETURNdicc ||
307308 Opcode == X86::TCRETURNdi64 || Opcode == X86::TCRETURNdi64cc) {
308309 unsigned Op;
@@ -341,18 +342,18 @@ bool X86ExpandPseudo::expandMI(MachineBasicBlock &MBB,
341342 } else if (Opcode == X86::TCRETURNmi || Opcode == X86::TCRETURNmi64) {
342343 unsigned Op = (Opcode == X86::TCRETURNmi)
343344 ? X86::TAILJMPm
344- : (IsWin64 ? X86::TAILJMPm64_REX : X86::TAILJMPm64);
345+ : (IsX64 ? X86::TAILJMPm64_REX : X86::TAILJMPm64);
345346 MachineInstrBuilder MIB = BuildMI (MBB, MBBI, DL, TII->get (Op));
346347 for (unsigned i = 0 ; i != X86::AddrNumOperands; ++i)
347348 MIB.add (MBBI->getOperand (i));
348349 } else if ((Opcode == X86::TCRETURNri64) ||
349350 (Opcode == X86::TCRETURNri64_ImpCall)) {
350351 JumpTarget.setIsKill ();
351352 BuildMI (MBB, MBBI, DL,
352- TII->get (IsWin64 ? X86::TAILJMPr64_REX : X86::TAILJMPr64))
353+ TII->get (IsX64 ? X86::TAILJMPr64_REX : X86::TAILJMPr64))
353354 .add (JumpTarget);
354355 } else {
355- assert (!IsWin64 && " Win64 requires REX for indirect jumps." );
356+ assert (!IsX64 && " Win64 and UEFI64 require REX for indirect jumps." );
356357 JumpTarget.setIsKill ();
357358 BuildMI (MBB, MBBI, DL, TII->get (X86::TAILJMPr))
358359 .add (JumpTarget);
0 commit comments