summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86ISelLowering.cpp
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2016-04-14 01:10:42 +0000
committerMatthias Braun <matze@braunis.de>2016-04-14 01:10:42 +0000
commit46b0f03e12614c3e67bbf16a6e278105f4edd01f (patch)
tree0bcc58f9aba1377eafb7d9f07c1c99f1dff89196 /llvm/lib/Target/X86/X86ISelLowering.cpp
parent72e50fe4acbb60edd70e0526b57feebf1f411d6f (diff)
downloadbcm5719-llvm-46b0f03e12614c3e67bbf16a6e278105f4edd01f.tar.gz
bcm5719-llvm-46b0f03e12614c3e67bbf16a6e278105f4edd01f.zip
TargetLowering: Factor out common code for tail call eligibility checking; NFC
llvm-svn: 266270
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp24
1 files changed, 3 insertions, 21 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 7cf909f1039..fcd7f0777f9 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -3849,27 +3849,9 @@ bool X86TargetLowering::IsEligibleForTailCallOptimization(
}
}
- // Parameters passed in callee saved registers must have the same value in
- // caller and callee.
- for (unsigned I = 0, E = ArgLocs.size(); I != E; ++I) {
- const CCValAssign &ArgLoc = ArgLocs[I];
- if (!ArgLoc.isRegLoc())
- continue;
- unsigned Reg = ArgLoc.getLocReg();
- // Only look at callee saved registers.
- if (MachineOperand::clobbersPhysReg(CallerPreserved, Reg))
- continue;
- // Check that we pass the value used for the caller.
- // (We look for a CopyFromReg reading a virtual register that is used
- // for the function live-in value of register Reg)
- SDValue Value = OutVals[I];
- if (Value->getOpcode() != ISD::CopyFromReg)
- return false;
- unsigned ArgReg = cast<RegisterSDNode>(Value->getOperand(1))->getReg();
- const MachineRegisterInfo &MRI = MF.getRegInfo();
- if (MRI.getLiveInPhysReg(ArgReg) != Reg)
- return false;
- }
+ const MachineRegisterInfo &MRI = MF.getRegInfo();
+ if (!parametersInCSRMatch(MRI, CallerPreserved, ArgLocs, OutVals))
+ return false;
}
bool CalleeWillPop =
OpenPOWER on IntegriCloud