From 43a1161379f7b91b68a249aed23425518aa4b68d Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Tue, 3 Feb 2009 22:04:27 +0000 Subject: If "optimize for size" attribute is set then block non-trivial loop unswitches but allow trivial loop unswitches. llvm-svn: 63670 --- llvm/lib/Transforms/Scalar/LoopUnswitch.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Transforms/Scalar/LoopUnswitch.cpp') diff --git a/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp index a563c7a9ee9..436e6a5786c 100644 --- a/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp +++ b/llvm/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 -- cgit v1.2.3