Skip to content

Commit 07417dd

Browse files
committed
UEFI backend for x86_64
1 parent dbae717 commit 07417dd

File tree

11 files changed

+88
-28
lines changed

11 files changed

+88
-28
lines changed

llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -444,16 +444,14 @@ static MCAsmInfo *createX86MCAsmInfo(const MCRegisterInfo &MRI,
444444
// Force the use of an ELF container.
445445
MAI = new X86ELFMCAsmInfo(TheTriple);
446446
} else if (TheTriple.isWindowsMSVCEnvironment() ||
447-
TheTriple.isWindowsCoreCLREnvironment()) {
447+
TheTriple.isWindowsCoreCLREnvironment() || TheTriple.isUEFI()) {
448448
if (Options.getAssemblyLanguage().equals_insensitive("masm"))
449449
MAI = new X86MCAsmInfoMicrosoftMASM(TheTriple);
450450
else
451451
MAI = new X86MCAsmInfoMicrosoft(TheTriple);
452452
} else if (TheTriple.isOSCygMing() ||
453453
TheTriple.isWindowsItaniumEnvironment()) {
454454
MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
455-
} else if (TheTriple.isUEFI()) {
456-
MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
457455
} else {
458456
// The default is ELF.
459457
MAI = new X86ELFMCAsmInfo(TheTriple);

llvm/lib/Target/X86/X86CallingConv.td

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,13 +488,24 @@ def RetCC_X86_64 : CallingConv<[
488488
CCIfSubtarget<"isTargetWin64()", CCIfRegCallv4<CCDelegateTo<RetCC_X86_Win64_RegCallv4>>>>,
489489

490490
CCIfCC<"CallingConv::X86_RegCall",
491-
CCIfSubtarget<"isTargetWin64()",
491+
CCIfSubtarget<"isTargetUEFI64()", CCIfRegCallv4<CCDelegateTo<RetCC_X86_Win64_RegCallv4>>>>,
492+
493+
CCIfCC<"CallingConv::X86_RegCall",
494+
CCIfSubtarget<"isTargetWin64()",
492495
CCDelegateTo<RetCC_X86_Win64_RegCall>>>,
496+
497+
CCIfCC<"CallingConv::X86_RegCall",
498+
CCIfSubtarget<"isTargetUEFI64()",
499+
CCDelegateTo<RetCC_X86_Win64_RegCall>>>,
500+
493501
CCIfCC<"CallingConv::X86_RegCall", CCDelegateTo<RetCC_X86_SysV64_RegCall>>,
494502

495503
// Mingw64 and native Win64 use Win64 CC
496504
CCIfSubtarget<"isTargetWin64()", CCDelegateTo<RetCC_X86_Win64_C>>,
497505

506+
// UEFI64 uses Win64 CC
507+
CCIfSubtarget<"isTargetUEFI64()", CCDelegateTo<RetCC_X86_Win64_C>>,
508+
498509
// Otherwise, drop to normal X86-64 CC
499510
CCDelegateTo<RetCC_X86_64_C>
500511
]>;
@@ -1079,6 +1090,10 @@ def CC_X86_64 : CallingConv<[
10791090
CCIfSubtarget<"isTargetWin64()", CCIfRegCallv4<CCDelegateTo<CC_X86_Win64_RegCallv4>>>>,
10801091
CCIfCC<"CallingConv::X86_RegCall",
10811092
CCIfSubtarget<"isTargetWin64()", CCDelegateTo<CC_X86_Win64_RegCall>>>,
1093+
CCIfCC<"CallingConv::X86_RegCall",
1094+
CCIfSubtarget<"isTargetUEFI64()", CCIfRegCallv4<CCDelegateTo<CC_X86_Win64_RegCallv4>>>>,
1095+
CCIfCC<"CallingConv::X86_RegCall",
1096+
CCIfSubtarget<"isTargetUEFI64()", CCDelegateTo<CC_X86_Win64_RegCall>>>,
10821097
CCIfCC<"CallingConv::X86_RegCall", CCDelegateTo<CC_X86_SysV64_RegCall>>,
10831098
CCIfCC<"CallingConv::PreserveNone", CCDelegateTo<CC_X86_64_Preserve_None>>,
10841099
CCIfCC<"CallingConv::X86_INTR", CCCustom<"CC_X86_Intr">>,

llvm/lib/Target/X86/X86FrameLowering.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,11 +1533,16 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF,
15331533
MachineBasicBlock &MBB) const {
15341534
assert(&STI == &MF.getSubtarget<X86Subtarget>() &&
15351535
"MF used frame lowering for wrong subtarget");
1536+
15361537
MachineBasicBlock::iterator MBBI = MBB.begin();
15371538
MachineFrameInfo &MFI = MF.getFrameInfo();
15381539
const Function &Fn = MF.getFunction();
1540+
15391541
X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
15401542
uint64_t MaxAlign = calculateMaxStackAlign(MF); // Desired stack alignment.
1543+
1544+
// errs() << "********** MaxAlign size " << MaxAlign;
1545+
15411546
uint64_t StackSize = MFI.getStackSize(); // Number of bytes to allocate.
15421547
bool IsFunclet = MBB.isEHFuncletEntry();
15431548
EHPersonality Personality = EHPersonality::Unknown;
@@ -1548,6 +1553,12 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF,
15481553
bool IsClrFunclet = IsFunclet && FnHasClrFunclet;
15491554
bool HasFP = hasFP(MF);
15501555
bool IsWin64Prologue = isWin64Prologue(MF);
1556+
1557+
// if(IsWin64Prologue) {
1558+
// errs() << "********** IsWin64Prologue TRUE ";
1559+
// } else {
1560+
// errs() << "********** IsWin64Prologue FALSE FALSE FALSE ";
1561+
// }
15511562
bool NeedsWin64CFI = IsWin64Prologue && Fn.needsUnwindTableEntry();
15521563
// FIXME: Emit FPO data for EH funclets.
15531564
bool NeedsWinFPO = !IsFunclet && STI.isTargetWin32() &&
@@ -1671,6 +1682,12 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF,
16711682
// pointer, calls, or dynamic alloca then we do not need to adjust the
16721683
// stack pointer (we fit in the Red Zone). We also check that we don't
16731684
// push and pop from the stack.
1685+
1686+
// if (has128ByteRedZone(MF)) {
1687+
// errs() << "********** has128ByteRedZone TRUE ";
1688+
// } else {
1689+
// errs() << "********** has128ByteRedZone FALSE FALSE FALSE ";
1690+
// }
16741691
if (has128ByteRedZone(MF) && !TRI->hasStackRealignment(MF) &&
16751692
!MFI.hasVarSizedObjects() && // No dynamic alloca.
16761693
!MFI.adjustsStack() && // No calls.
@@ -1679,6 +1696,7 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF,
16791696
!MF.shouldSplitStack()) { // Regular stack
16801697
uint64_t MinSize =
16811698
X86FI->getCalleeSavedFrameSize() - X86FI->getTCReturnAddrDelta();
1699+
16821700
if (HasFP)
16831701
MinSize += SlotSize;
16841702
X86FI->setUsesRedZone(MinSize > 0 || StackSize > 0);
@@ -1894,7 +1912,9 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF,
18941912
Opc == X86::PUSH2 || Opc == X86::PUSH2P;
18951913
};
18961914

1915+
// uint64_t cont3 = 1;
18971916
while (IsCSPush(MBBI)) {
1917+
// llvm::outs() << "\n*********** cont3 " << cont3++;
18981918
PushedRegs = true;
18991919
Register Reg = MBBI->getOperand(0).getReg();
19001920
LastCSPush = MBBI;

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
578578
// FIXME - use subtarget debug flags
579579
if (!Subtarget.isTargetDarwin() && !Subtarget.isTargetELF() &&
580580
!Subtarget.isTargetCygMing() && !Subtarget.isTargetWin64() &&
581+
!Subtarget.isTargetUEFI64() &&
581582
TM.Options.ExceptionModel != ExceptionHandling::SjLj) {
582583
setOperationAction(ISD::EH_LABEL, MVT::Other, Expand);
583584
}
@@ -2543,7 +2544,7 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
25432544
setOperationAction(ISD::FSINCOS, MVT::f32, Custom);
25442545
}
25452546

2546-
if (Subtarget.isTargetWin64()) {
2547+
if (Subtarget.isTargetWin64() || Subtarget.isTargetUEFI64()) {
25472548
setOperationAction(ISD::SDIV, MVT::i128, Custom);
25482549
setOperationAction(ISD::UDIV, MVT::i128, Custom);
25492550
setOperationAction(ISD::SREM, MVT::i128, Custom);
@@ -19656,7 +19657,8 @@ SDValue X86TargetLowering::LowerSINT_TO_FP(SDValue Op,
1965619657
else if (isLegalConversion(SrcVT, true, Subtarget))
1965719658
return Op;
1965819659

19659-
if (Subtarget.isTargetWin64() && SrcVT == MVT::i128)
19660+
if ((Subtarget.isTargetWin64() || Subtarget.isTargetUEFI64()) &&
19661+
SrcVT == MVT::i128)
1966019662
return LowerWin64_INT128_TO_FP(Op, DAG);
1966119663

1966219664
if (SDValue Extract = vectorizeExtractedCast(Op, dl, DAG, Subtarget))
@@ -20163,7 +20165,8 @@ SDValue X86TargetLowering::LowerUINT_TO_FP(SDValue Op,
2016320165
if (DstVT.isVector())
2016420166
return lowerUINT_TO_FP_vec(Op, dl, DAG, Subtarget);
2016520167

20166-
if (Subtarget.isTargetWin64() && SrcVT == MVT::i128)
20168+
if ((Subtarget.isTargetWin64() || Subtarget.isTargetUEFI64()) &&
20169+
SrcVT == MVT::i128)
2016720170
return LowerWin64_INT128_TO_FP(Op, DAG);
2016820171

2016920172
if (SDValue Extract = vectorizeExtractedCast(Op, dl, DAG, Subtarget))
@@ -27880,7 +27883,6 @@ Register X86TargetLowering::getRegisterByName(const char* RegName, LLT VT,
2788027883
.Case("r14", X86::R14)
2788127884
.Case("r15", X86::R15)
2788227885
.Default(0);
27883-
2788427886
if (Reg == X86::EBP || Reg == X86::RBP) {
2788527887
if (!TFI.hasFP(MF))
2788627888
report_fatal_error("register " + StringRef(RegName) +
@@ -27924,7 +27926,7 @@ Register X86TargetLowering::getExceptionSelectorRegister(
2792427926
}
2792527927

2792627928
bool X86TargetLowering::needsFixedCatchObjects() const {
27927-
return Subtarget.isTargetWin64();
27929+
return Subtarget.isTargetWin64() || Subtarget.isTargetUEFI64();
2792827930
}
2792927931

2793027932
SDValue X86TargetLowering::LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const {
@@ -29515,7 +29517,8 @@ static SDValue LowerMULO(SDValue Op, const X86Subtarget &Subtarget,
2951529517
}
2951629518

2951729519
SDValue X86TargetLowering::LowerWin64_i128OP(SDValue Op, SelectionDAG &DAG) const {
29518-
assert(Subtarget.isTargetWin64() && "Unexpected target");
29520+
assert((Subtarget.isTargetWin64() || Subtarget.isTargetUEFI64()) &&
29521+
"Unexpected target");
2951929522
EVT VT = Op.getValueType();
2952029523
assert(VT.isInteger() && VT.getSizeInBits() == 128 &&
2952129524
"Unexpected return type for lowering");
@@ -29582,7 +29585,8 @@ SDValue X86TargetLowering::LowerWin64_i128OP(SDValue Op, SelectionDAG &DAG) cons
2958229585
SDValue X86TargetLowering::LowerWin64_FP_TO_INT128(SDValue Op,
2958329586
SelectionDAG &DAG,
2958429587
SDValue &Chain) const {
29585-
assert(Subtarget.isTargetWin64() && "Unexpected target");
29588+
assert((Subtarget.isTargetWin64() || Subtarget.isTargetUEFI64()) &&
29589+
"Unexpected target");
2958629590
EVT VT = Op.getValueType();
2958729591
bool IsStrict = Op->isStrictFPOpcode();
2958829592

@@ -29615,7 +29619,8 @@ SDValue X86TargetLowering::LowerWin64_FP_TO_INT128(SDValue Op,
2961529619

2961629620
SDValue X86TargetLowering::LowerWin64_INT128_TO_FP(SDValue Op,
2961729621
SelectionDAG &DAG) const {
29618-
assert(Subtarget.isTargetWin64() && "Unexpected target");
29622+
assert((Subtarget.isTargetWin64() || Subtarget.isTargetUEFI64()) &&
29623+
"Unexpected target");
2961929624
EVT VT = Op.getValueType();
2962029625
bool IsStrict = Op->isStrictFPOpcode();
2962129626

@@ -33861,7 +33866,8 @@ void X86TargetLowering::ReplaceNodeResults(SDNode *N,
3386133866
return;
3386233867
}
3386333868

33864-
if (VT == MVT::i128 && Subtarget.isTargetWin64()) {
33869+
if (VT == MVT::i128 &&
33870+
(Subtarget.isTargetWin64() || Subtarget.isTargetUEFI64())) {
3386533871
SDValue Chain;
3386633872
SDValue V = LowerWin64_FP_TO_INT128(SDValue(N, 0), DAG, Chain);
3386733873
Results.push_back(V);
@@ -37136,6 +37142,8 @@ X86TargetLowering::EmitSjLjDispatchBlock(MachineInstr &MI,
3713637142
// N.B. the order the invoke BBs are processed in doesn't matter here.
3713737143
SmallVector<MachineBasicBlock *, 64> MBBLPads;
3713837144
const MCPhysReg *SavedRegs = MF->getRegInfo().getCalleeSavedRegs();
37145+
// llvm::outs() << "Callee saved regs from isellowering " <<
37146+
// SavedRegs->
3713937147
for (MachineBasicBlock *MBB : InvokeBBs) {
3714037148
// Remove the landing pad successor from the invoke block and replace it
3714137149
// with the new dispatch block.
@@ -60753,8 +60761,8 @@ bool X86TargetLowering::hasStackProbeSymbol(const MachineFunction &MF) const {
6075360761
/// Returns true if stack probing through inline assembly is requested.
6075460762
bool X86TargetLowering::hasInlineStackProbe(const MachineFunction &MF) const {
6075560763

60756-
// No inline stack probe for Windows, they have their own mechanism.
60757-
if (Subtarget.isOSWindows() ||
60764+
// No inline stack probe for Windows and UEFI, they have their own mechanism.
60765+
if (Subtarget.isOSWindows() || Subtarget.isUEFI() ||
6075860766
MF.getFunction().hasFnAttribute("no-stack-arg-probe"))
6075960767
return false;
6076060768

@@ -60778,9 +60786,10 @@ X86TargetLowering::getStackProbeSymbolName(const MachineFunction &MF) const {
6077860786
if (MF.getFunction().hasFnAttribute("probe-stack"))
6077960787
return MF.getFunction().getFnAttribute("probe-stack").getValueAsString();
6078060788

60781-
// Generally, if we aren't on Windows, the platform ABI does not include
60782-
// support for stack probes, so don't emit them.
60783-
if (!Subtarget.isOSWindows() || Subtarget.isTargetMachO() ||
60789+
// Generally, if we aren't on Windows or UEFI, the platform ABI does not
60790+
// include support for stack probes, so don't emit them.
60791+
if (!(Subtarget.isOSWindows() || Subtarget.isUEFI()) ||
60792+
Subtarget.isTargetMachO() ||
6078460793
MF.getFunction().hasFnAttribute("no-stack-arg-probe"))
6078560794
return "";
6078660795

llvm/lib/Target/X86/X86RegisterInfo.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ X86RegisterInfo::X86RegisterInfo(const Triple &TT)
6060
// Cache some information.
6161
Is64Bit = TT.isArch64Bit();
6262
IsWin64 = Is64Bit && TT.isOSWindows();
63+
IsUEFI64 = Is64Bit && TT.isUEFI();
6364

6465
// Use a callee-saved register as the base pointer. These registers must
6566
// not conflict with any ABI requirements. For example, in 32-bit mode PIC
@@ -242,7 +243,7 @@ bool X86RegisterInfo::shouldRewriteCopySrc(const TargetRegisterClass *DefRC,
242243
const TargetRegisterClass *
243244
X86RegisterInfo::getGPRsForTailCall(const MachineFunction &MF) const {
244245
const Function &F = MF.getFunction();
245-
if (IsWin64 || (F.getCallingConv() == CallingConv::Win64))
246+
if (IsWin64 || IsUEFI64 || (F.getCallingConv() == CallingConv::Win64))
246247
return &X86::GR64_TCW64RegClass;
247248
else if (Is64Bit)
248249
return &X86::GR64_TCRegClass;
@@ -344,7 +345,7 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
344345
}
345346
case CallingConv::X86_RegCall:
346347
if (Is64Bit) {
347-
if (IsWin64) {
348+
if (IsWin64 || IsUEFI64) {
348349
return (HasSSE ? CSR_Win64_RegCall_SaveList :
349350
CSR_Win64_RegCall_NoSSE_SaveList);
350351
} else {
@@ -404,7 +405,7 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
404405
return IsWin64 ? CSR_Win64_SwiftError_SaveList
405406
: CSR_64_SwiftError_SaveList;
406407

407-
if (IsWin64)
408+
if (IsWin64 || IsUEFI64)
408409
return HasSSE ? CSR_Win64_SaveList : CSR_Win64_NoSSE_SaveList;
409410
if (CallsEHReturn)
410411
return CSR_64EHRet_SaveList;
@@ -471,7 +472,7 @@ X86RegisterInfo::getCallPreservedMask(const MachineFunction &MF,
471472
}
472473
case CallingConv::X86_RegCall:
473474
if (Is64Bit) {
474-
if (IsWin64) {
475+
if (IsWin64 || IsUEFI64) {
475476
return (HasSSE ? CSR_Win64_RegCall_RegMask :
476477
CSR_Win64_RegCall_NoSSE_RegMask);
477478
} else {
@@ -529,7 +530,7 @@ X86RegisterInfo::getCallPreservedMask(const MachineFunction &MF,
529530
if (IsSwiftCC)
530531
return IsWin64 ? CSR_Win64_SwiftError_RegMask : CSR_64_SwiftError_RegMask;
531532

532-
return IsWin64 ? CSR_Win64_RegMask : CSR_64_RegMask;
533+
return (IsWin64 || IsUEFI64) ? CSR_Win64_RegMask : CSR_64_RegMask;
533534
}
534535

535536
return CSR_32_RegMask;

llvm/lib/Target/X86/X86RegisterInfo.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,14 @@ class X86RegisterInfo final : public X86GenRegisterInfo {
2727
///
2828
bool Is64Bit;
2929

30-
/// IsWin64 - Is the target on of win64 flavours
30+
/// IsWin64 - Is the target one of win64 flavours
3131
///
3232
bool IsWin64;
3333

34+
/// IsUEFI64 - Is this UEFI 64 bit target
35+
///
36+
bool IsUEFI64;
37+
3438
/// SlotSize - Stack slot size in bytes.
3539
///
3640
unsigned SlotSize;

llvm/lib/Target/X86/X86Subtarget.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,11 @@ class X86Subtarget final : public X86GenSubtargetInfo {
321321

322322
bool isOSWindows() const { return TargetTriple.isOSWindows(); }
323323

324-
bool isTargetWin64() const { return Is64Bit && isOSWindows(); }
324+
bool isUEFI() const { return TargetTriple.isUEFI(); }
325+
326+
bool isTargetUEFI64() const { return Is64Bit && isUEFI(); }
327+
328+
bool isTargetWin64() const { return Is64Bit && (isOSWindows() || isUEFI()); }
325329

326330
bool isTargetWin32() const { return !Is64Bit && isOSWindows(); }
327331

@@ -335,8 +339,11 @@ class X86Subtarget final : public X86GenSubtargetInfo {
335339
bool isPositionIndependent() const;
336340

337341
bool isCallingConvWin64(CallingConv::ID CC) const {
342+
// llvm::outs() << "\nIn isCallingConvWin64 check calling
343+
// convention******************* ";
338344
switch (CC) {
339-
// On Win64, all these conventions just use the default convention.
345+
// On Win64 and UEFI64, all these conventions just use the default
346+
// convention.
340347
case CallingConv::C:
341348
case CallingConv::Fast:
342349
case CallingConv::Tail:
@@ -347,9 +354,11 @@ class X86Subtarget final : public X86GenSubtargetInfo {
347354
case CallingConv::X86_ThisCall:
348355
case CallingConv::X86_VectorCall:
349356
case CallingConv::Intel_OCL_BI:
350-
return isTargetWin64();
357+
return isTargetWin64() || isTargetUEFI64();
351358
// This convention allows using the Win64 convention on other targets.
352359
case CallingConv::Win64:
360+
// llvm::outs() << "\nReturning true for Win64 calling
361+
// convention******************* ";
353362
return true;
354363
// This convention allows using the SysV convention on Windows targets.
355364
case CallingConv::X86_64_SysV:

llvm/lib/Target/X86/X86TargetMachine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ void X86PassConfig::addIRPasses() {
484484

485485
// Add Control Flow Guard checks.
486486
const Triple &TT = TM->getTargetTriple();
487-
if (TT.isOSWindows()) {
487+
if (TT.isOSWindows() || TT.isUEFI()) {
488488
if (TT.getArch() == Triple::x86_64) {
489489
addPass(createCFGuardDispatchPass());
490490
} else {

llvm/test/CodeGen/X86/mangle-question-mark.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
; RUN: llc -mtriple i686-pc-win32 < %s | FileCheck %s --check-prefix=COFF
44
; RUN: llc -mtriple x86_64-pc-win32 < %s | FileCheck %s --check-prefix=COFF64
5+
; RUN: llc -mtriple x86_64-unknown-uefi < %s | FileCheck %s --check-prefix=COFF64
56
; RUN: llc -mtriple i686-linux-gnu < %s | FileCheck %s --check-prefix=ELF
67
; RUN: llc -mtriple i686-apple-darwin < %s | FileCheck %s --check-prefix=MACHO
78

llvm/test/CodeGen/X86/sse-regcall.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22
; RUN: llc < %s -mtriple=i386-pc-win32 -mattr=+sse | FileCheck --check-prefix=WIN32 %s
33
; RUN: llc < %s -mtriple=x86_64-win32 -mattr=+sse | FileCheck --check-prefix=WIN64 %s
4+
; RUN: llc < %s -mtriple=x86_64-unknown-uefi -mattr=+sse | FileCheck --check-prefix=WIN64 %s
45
; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=+sse | FileCheck --check-prefix=LINUXOSX %s
56

67
; Test regcall when receiving/returning i1

llvm/test/CodeGen/X86/win32-preemption.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
; RUN: -relocation-model=pic < %s | FileCheck --check-prefix=COFF %s
55
; RUN: llc -mtriple x86_64-pc-win32 \
66
; RUN: -relocation-model=dynamic-no-pic < %s | FileCheck --check-prefix=COFF %s
7+
; RUN: llc -mtriple x86_64-unknown-uefi \
8+
; RUN: -relocation-model=dynamic-no-pic < %s | FileCheck --check-prefix=COFF %s
79

810

911
; 32 bits

0 commit comments

Comments
 (0)