diff --git a/lib/Transforms/Scalar/LoopUnswitch.cpp b/lib/Transforms/Scalar/LoopUnswitch.cpp index a563c7a9ee9..436e6a5786c 100644 --- a/lib/Transforms/Scalar/LoopUnswitch.cpp +++ b/lib/Transforms/Scalar/LoopUnswitch.cpp @@ -430,9 +430,6 @@ bool LoopUnswitch::UnswitchIfProfitable(Value *LoopCond, Constant *Val){ 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 @@ bool LoopUnswitch::UnswitchIfProfitable(Value *LoopCond, Constant *Val){ // 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