@@ -271,12 +271,13 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
271
271
assert (MF && " MachineFunction required" );
272
272
273
273
const X86Subtarget &Subtarget = MF->getSubtarget <X86Subtarget>();
274
+ const Function *F = MF->getFunction ();
274
275
bool HasSSE = Subtarget.hasSSE1 ();
275
276
bool HasAVX = Subtarget.hasAVX ();
276
277
bool HasAVX512 = Subtarget.hasAVX512 ();
277
278
bool CallsEHReturn = MF->callsEHReturn ();
278
279
279
- CallingConv::ID CC = MF-> getFunction () ->getCallingConv ();
280
+ CallingConv::ID CC = F ->getCallingConv ();
280
281
281
282
// If attribute NoCallerSavedRegisters exists then we set X86_INTR calling
282
283
// convention because it has the CSR list.
@@ -365,22 +366,20 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
365
366
}
366
367
367
368
if (Is64Bit) {
368
- if (IsWin64) {
369
- if (!HasSSE)
370
- return CSR_Win64_NoSSE_SaveList;
371
- return CSR_Win64_SaveList;
372
- }
369
+ bool IsSwiftCC = Subtarget.getTargetLowering ()->supportSwiftError () &&
370
+ F->getAttributes ().hasAttrSomewhere (Attribute::SwiftError);
371
+ if (IsSwiftCC)
372
+ return IsWin64 ? CSR_Win64_SwiftError_SaveList
373
+ : CSR_64_SwiftError_SaveList;
374
+
375
+ if (IsWin64)
376
+ return HasSSE ? CSR_Win64_SaveList : CSR_Win64_NoSSE_SaveList;
373
377
if (CallsEHReturn)
374
378
return CSR_64EHRet_SaveList;
375
- if (Subtarget.getTargetLowering ()->supportSwiftError () &&
376
- MF->getFunction ()->getAttributes ().hasAttrSomewhere (
377
- Attribute::SwiftError))
378
- return CSR_64_SwiftError_SaveList;
379
379
return CSR_64_SaveList;
380
380
}
381
- if (CallsEHReturn)
382
- return CSR_32EHRet_SaveList;
383
- return CSR_32_SaveList;
381
+
382
+ return CallsEHReturn ? CSR_32EHRet_SaveList : CSR_32_SaveList;
384
383
}
385
384
386
385
const MCPhysReg *X86RegisterInfo::getCalleeSavedRegsViaCopy (
@@ -479,14 +478,14 @@ X86RegisterInfo::getCallPreservedMask(const MachineFunction &MF,
479
478
// Unlike getCalleeSavedRegs(), we don't have MMI so we can't check
480
479
// callsEHReturn().
481
480
if (Is64Bit) {
482
- if (IsWin64)
483
- return CSR_Win64_RegMask;
484
- if (Subtarget.getTargetLowering ()->supportSwiftError () &&
485
- MF.getFunction ()->getAttributes ().hasAttrSomewhere (
486
- Attribute::SwiftError))
487
- return CSR_64_SwiftError_RegMask;
488
- return CSR_64_RegMask;
481
+ const Function *F = MF.getFunction ();
482
+ bool IsSwiftCC = Subtarget.getTargetLowering ()->supportSwiftError () &&
483
+ F->getAttributes ().hasAttrSomewhere (Attribute::SwiftError);
484
+ if (IsSwiftCC)
485
+ return IsWin64 ? CSR_Win64_SwiftError_RegMask : CSR_64_SwiftError_RegMask;
486
+ return IsWin64 ? CSR_Win64_RegMask : CSR_64_RegMask;
489
487
}
488
+
490
489
return CSR_32_RegMask;
491
490
}
492
491
0 commit comments