If "optimize for size" attribute is set then block non-trivial loop unswitches but allow trivial loop unswitches.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63670 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/LoopUnswitch.cpp b/lib/Transforms/Scalar/LoopUnswitch.cpp
index a563c7a..436e6a5 100644
--- a/lib/Transforms/Scalar/LoopUnswitch.cpp
+++ b/lib/Transforms/Scalar/LoopUnswitch.cpp
@@ -430,9 +430,6 @@
   initLoopData();
   Function *F = loopHeader->getParent();
 
-  // Do not unswitch if the function is optimized for size.
-  if (!F->isDeclaration() && F->hasFnAttr(Attribute::OptimizeForSize))
-    return false;
 
   // Check to see if it would be profitable to unswitch current loop.
   unsigned Cost = getLoopUnswitchCost(LoopCond);
@@ -440,6 +437,8 @@
   // Do not do non-trivial unswitch while optimizing for size.
   if (Cost && OptimizeForSize)
     return false;
+  if (Cost && !F->isDeclaration() && F->hasFnAttr(Attribute::OptimizeForSize))
+    return false;
 
   if (Cost > Threshold) {
     // FIXME: this should estimate growth by the amount of code shared by the