@@ -301,8 +301,9 @@ bool X86ExpandPseudo::expandMI(MachineBasicBlock &MBB,
301
301
X86FL->emitSPUpdate (MBB, MBBI, DL, Offset, /* InEpilogue=*/ true );
302
302
}
303
303
304
+ // Use this predicate to set REX prefix for X86_64 targets.
305
+ bool IsX64 = STI->isTargetWin64 () || STI->isTargetUEFI64 ();
304
306
// Jump to label or value in register.
305
- bool IsWin64 = STI->isTargetWin64 ();
306
307
if (Opcode == X86::TCRETURNdi || Opcode == X86::TCRETURNdicc ||
307
308
Opcode == X86::TCRETURNdi64 || Opcode == X86::TCRETURNdi64cc) {
308
309
unsigned Op;
@@ -341,18 +342,18 @@ bool X86ExpandPseudo::expandMI(MachineBasicBlock &MBB,
341
342
} else if (Opcode == X86::TCRETURNmi || Opcode == X86::TCRETURNmi64) {
342
343
unsigned Op = (Opcode == X86::TCRETURNmi)
343
344
? X86::TAILJMPm
344
- : (IsWin64 ? X86::TAILJMPm64_REX : X86::TAILJMPm64);
345
+ : (IsX64 ? X86::TAILJMPm64_REX : X86::TAILJMPm64);
345
346
MachineInstrBuilder MIB = BuildMI (MBB, MBBI, DL, TII->get (Op));
346
347
for (unsigned i = 0 ; i != X86::AddrNumOperands; ++i)
347
348
MIB.add (MBBI->getOperand (i));
348
349
} else if ((Opcode == X86::TCRETURNri64) ||
349
350
(Opcode == X86::TCRETURNri64_ImpCall)) {
350
351
JumpTarget.setIsKill ();
351
352
BuildMI (MBB, MBBI, DL,
352
- TII->get (IsWin64 ? X86::TAILJMPr64_REX : X86::TAILJMPr64))
353
+ TII->get (IsX64 ? X86::TAILJMPr64_REX : X86::TAILJMPr64))
353
354
.add (JumpTarget);
354
355
} else {
355
- assert (!IsWin64 && " Win64 requires REX for indirect jumps." );
356
+ assert (!IsX64 && " Win64 and UEFI64 require REX for indirect jumps." );
356
357
JumpTarget.setIsKill ();
357
358
BuildMI (MBB, MBBI, DL, TII->get (X86::TAILJMPr))
358
359
.add (JumpTarget);
0 commit comments