History log of /llvm-project/llvm/lib/Transforms/Scalar/LoopPredication.cpp (Results 101 – 106 of 106)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 6780ba65 19-May-2017 Artur Pilipenko <apilipenko@azulsystems.com>

[LoopPredication] NFC. Extract LoopPredication::expandCheck helper

llvm-svn: 303426


# aab28666 19-May-2017 Artur Pilipenko <apilipenko@azulsystems.com>

[LoopPredication] NFC. Extract CanExpand helper lambda

llvm-svn: 303425


# 46c4e0a4 19-May-2017 Artur Pilipenko <apilipenko@azulsystems.com>

[LoopPredication] NFC. Add an early exit if there is no guards in the loop

llvm-svn: 303424


Revision tags: llvmorg-4.0.1-rc1, llvmorg-4.0.0, llvmorg-4.0.0-rc4, llvmorg-4.0.0-rc3
# 0860bfc6 27-Feb-2017 Artur Pilipenko <apilipenko@azulsystems.com>

Loop predication expand both sides of the widened condition

This is a fix for a loop predication bug which resulted in malformed IR generation.

Loop invariant side of the widened condition is not g

Loop predication expand both sides of the widened condition

This is a fix for a loop predication bug which resulted in malformed IR generation.

Loop invariant side of the widened condition is not guaranteed to be available in the preheader as is, so we need to expand it as well. See added unsigned_loop_0_to_n_hoist_length test for example.

Reviewed By: sanjoy, mkazantsev

Differential Revision: https://reviews.llvm.org/D30099

llvm-svn: 296345

show more ...


Revision tags: llvmorg-4.0.0-rc2
# 2cbaded5 01-Feb-2017 Artur Pilipenko <apilipenko@azulsystems.com>

[LoopPredication] Add a new line to debug output in LoopPredication pass

llvm-svn: 293762


# 8fb3d57e 25-Jan-2017 Artur Pilipenko <apilipenko@azulsystems.com>

[Guards] Introduce loop-predication pass

This patch introduces guard based loop predication optimization. The new LoopPredication pass tries to convert loop variant range checks to loop invariant by

[Guards] Introduce loop-predication pass

This patch introduces guard based loop predication optimization. The new LoopPredication pass tries to convert loop variant range checks to loop invariant by widening checks across loop iterations. For example, it will convert

for (i = 0; i < n; i++) {
guard(i < len);
...
}

to

for (i = 0; i < n; i++) {
guard(n - 1 < len);
...
}

After this transformation the condition of the guard is loop invariant, so loop-unswitch can later unswitch the loop by this condition which basically predicates the loop by the widened condition:

if (n - 1 < len)
for (i = 0; i < n; i++) {
...
}
else
deoptimize

This patch relies on an NFC change to make ScalarEvolution::isMonotonicPredicate public (revision 293062).

Reviewed By: sanjoy

Differential Revision: https://reviews.llvm.org/D29034

llvm-svn: 293064

show more ...


12345