X86: VZeroUpperInserter: shortcut should not trigger if we have any function live-ins.

llvm-svn: 225419
This commit is contained in:
Matthias Braun 2015-01-08 00:33:48 +00:00
parent 1a4d078583
commit ada0adf396
1 changed files with 12 additions and 8 deletions

View File

@ -254,18 +254,22 @@ bool VZeroUpperInserter::runOnMachineFunction(MachineFunction &MF) {
MachineRegisterInfo &MRI = MF.getRegInfo();
EverMadeChange = false;
bool FnHasLiveInYmm = checkFnHasLiveInYmm(MRI);
// Fast check: if the function doesn't use any ymm registers, we don't need
// to insert any VZEROUPPER instructions. This is constant-time, so it is
// cheap in the common case of no ymm use.
bool YMMUsed = false;
bool YMMUsed = FnHasLiveInYmm;
if (!YMMUsed) {
const TargetRegisterClass *RC = &X86::VR256RegClass;
for (TargetRegisterClass::iterator i = RC->begin(), e = RC->end();
i != e; i++) {
for (TargetRegisterClass::iterator i = RC->begin(), e = RC->end(); i != e;
i++) {
if (!MRI.reg_nodbg_empty(*i)) {
YMMUsed = true;
break;
}
}
}
if (!YMMUsed) {
return false;
}
@ -282,7 +286,7 @@ bool VZeroUpperInserter::runOnMachineFunction(MachineFunction &MF) {
// If any YMM regs are live in to this function, add the entry block to the
// DirtySuccessors list
if (checkFnHasLiveInYmm(MRI))
if (FnHasLiveInYmm)
addDirtySuccessor(MF.front());
// Re-visit all blocks that are successors of EXITS_DIRTY bsocks. Add