1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

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 82a2b4ceec
commit 1a761c5db4

View File

@ -254,16 +254,20 @@ 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;
const TargetRegisterClass *RC = &X86::VR256RegClass;
for (TargetRegisterClass::iterator i = RC->begin(), e = RC->end();
i != e; i++) {
if (!MRI.reg_nodbg_empty(*i)) {
YMMUsed = true;
break;
bool YMMUsed = FnHasLiveInYmm;
if (!YMMUsed) {
const TargetRegisterClass *RC = &X86::VR256RegClass;
for (TargetRegisterClass::iterator i = RC->begin(), e = RC->end(); i != e;
i++) {
if (!MRI.reg_nodbg_empty(*i)) {
YMMUsed = true;
break;
}
}
}
if (!YMMUsed) {
@ -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