Check for empty YMM use-def lists in X86VZeroUpper.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 17 Oct 2012 17:52:35 +0000 (17:52 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 17 Oct 2012 17:52:35 +0000 (17:52 +0000)
The previous MRI.isPhysRegUsed(YMM0) would also return true when the
function contains a call to a function that may clobber YMM0. That's
most of them.

Checking the use-def chains allows us to skip functions that don't
explicitly mention YMM registers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166110 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86VZeroUpper.cpp

index 449eed3d8d5d8a4d5b00db5956ee4cb4badf0a7d..c4a58874a414bcd7b7be02cde8004d888122deff 100644 (file)
@@ -147,7 +147,7 @@ bool VZeroUpperInserter::runOnMachineFunction(MachineFunction &MF) {
   const TargetRegisterClass *RC = &X86::VR256RegClass;
   for (TargetRegisterClass::iterator i = RC->begin(), e = RC->end();
        i != e; i++) {
-    if (MRI.isPhysRegUsed(*i)) {
+    if (!MRI.reg_nodbg_empty(*i)) {
       YMMUsed = true;
       break;
     }