[llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
Chris Lattner
clattner at apple.com
Wed Jun 27 17:52:26 PDT 2007
> If a condition is not inside a loop then the condition is suitable
> to loop unswitch candidate for the loop.
I don't understand, why reject unswitching on these values?
cases like this should be unswitched:
int foo(int arg) {
for (..)
if (arg)
...
}
-Chris
>
> ---
> Diffs of the changes: (+7 -0)
>
> LoopUnswitch.cpp | 7 +++++++
> 1 files changed, 7 insertions(+)
>
>
> Index: llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
> diff -u llvm/lib/Transforms/Scalar/LoopUnswitch.cpp:1.70 llvm/lib/
> Transforms/Scalar/LoopUnswitch.cpp:1.71
> --- llvm/lib/Transforms/Scalar/LoopUnswitch.cpp:1.70 Tue Jun 5
> 19:21:03 2007
> +++ llvm/lib/Transforms/Scalar/LoopUnswitch.cpp Wed Jun 27 19:44:10
> 2007
> @@ -128,6 +128,13 @@
> static Value *FindLIVLoopCondition(Value *Cond, Loop *L, bool
> &Changed) {
> // Constants should be folded, not unswitched on!
> if (isa<Constant>(Cond)) return false;
> +
> + // If cond is not in loop then it is not suitable.
> + if (Instruction *I = dyn_cast<Instruction>(Cond))
> + if (!L->contains(I->getParent()))
> + return 0;
> + if (isa<Argument>(Cond))
> + return 0;
>
> // TODO: Handle: br (VARIANT|INVARIANT).
> // TODO: Hoist simple expressions out of loops.
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list