History log of /llvm-project/llvm/lib/Transforms/Scalar/JumpThreading.cpp (Results 551 – 567 of 567)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 5148a4ba 20-May-2008 Matthijs Kooijman <matthijs@stdin.nl>

Fix typo.

llvm-svn: 51303


# d78c400b 13-May-2008 Dan Gohman <gohman@apple.com>

Clean up the use of static and anonymous namespaces. This turned up
several things that were neither in an anonymous namespace nor static
but not intended to be global.

llvm-svn: 51017


# e7f0afe1 09-May-2008 Chris Lattner <sabre@nondot.org>

restore doxygen comment.

llvm-svn: 50881


# 829046b0 08-May-2008 Gordon Henriksen <gordonhenriksen@mac.com>

Improve pass documentation and comments.

Patch by Matthijs Kooijman!

llvm-svn: 50861


# de68fabb 06-May-2008 Chris Lattner <sabre@nondot.org>

fix typo Duncan noticed

llvm-svn: 50699


# 8ed8e3d0 05-May-2008 Chris Lattner <sabre@nondot.org>

Fix a crash when threading a block that includes a MRV call result.
DemoteRegToStack doesn't work with MRVs yet, because it relies on the
ability to load/store things.

This fixes PR2285.

llvm-svn:

Fix a crash when threading a block that includes a MRV call result.
DemoteRegToStack doesn't work with MRVs yet, because it relies on the
ability to load/store things.

This fixes PR2285.

llvm-svn: 50667

show more ...


# f7de5284 25-Apr-2008 Chris Lattner <sabre@nondot.org>

Don't infininitely thread branches when a threaded edge
goes back to the block, e.g.:

Threading edge through bool from 'bb37.us.thread3829' to 'bb37.us' with cost: 1, across block:

bb37.us: ; pr

Don't infininitely thread branches when a threaded edge
goes back to the block, e.g.:

Threading edge through bool from 'bb37.us.thread3829' to 'bb37.us' with cost: 1, across block:

bb37.us: ; preds = %bb37.us.thread3829, %bb37.us, %bb33
%D1361.1.us = phi i32 [ %tmp36, %bb33 ], [ %D1361.1.us, %bb37.us ], [ 0, %bb37.us.thread3829 ] ; <i32> [#uses=2]
%tmp39.us = icmp eq i32 %D1361.1.us, 0 ; <i1> [#uses=1]
br i1 %tmp39.us, label %bb37.us, label %bb42.us

llvm-svn: 50251

show more ...


# 37e9c187 22-Apr-2008 Chris Lattner <sabre@nondot.org>

Start doing the significantly useful part of jump threading: handle cases
where a comparison has a phi input and that phi is a constant. For example,
stuff like:

Threading edge through bool from

Start doing the significantly useful part of jump threading: handle cases
where a comparison has a phi input and that phi is a constant. For example,
stuff like:

Threading edge through bool from 'bb2149' to 'bb2231' with cost: 1, across block:
bb2237: ; preds = %bb2231, %bb2149
%tmp2328.rle = phi i32 [ %tmp2232, %bb2231 ], [ %tmp2232439, %bb2149 ] ; <i32> [#uses=2]
%done.0 = phi i32 [ %done.2, %bb2231 ], [ 0, %bb2149 ] ; <i32> [#uses=1]
%tmp2239 = icmp eq i32 %done.0, 0 ; <i1> [#uses=1]
br i1 %tmp2239, label %bb2231, label %bb2327

or

bb38.i298: ; preds = %bb33.i295, %bb1693
%tmp39.i296.rle = phi %struct.ibox* [ null, %bb1693 ], [ %tmp39.i296.rle1109, %bb33.i295 ] ; <%struct.ibox*> [#uses=2]
%minspan.1.i291.reg2mem.1 = phi i32 [ 32000, %bb1693 ], [ %minspan.0.i288, %bb33.i295 ] ; <i32> [#uses=1]
%tmp40.i297 = icmp eq %struct.ibox* %tmp39.i296.rle, null ; <i1> [#uses=1]
br i1 %tmp40.i297, label %implfeeds.exit311, label %bb43.i301

This triggers thousands of times in spec.

llvm-svn: 50110

show more ...


# d5425e8f 22-Apr-2008 Chris Lattner <sabre@nondot.org>

Dig through multiple levels of AND to thread jumps if needed.

llvm-svn: 50106


# 3df4c15d 22-Apr-2008 Chris Lattner <sabre@nondot.org>

Teach jump threading to thread through blocks like:

br (and X, phi(Y, Z, false)), label L1, label L2

This triggers once on 252.eon and 6 times on 176.gcc. Blocks
in question often look like thi

Teach jump threading to thread through blocks like:

br (and X, phi(Y, Z, false)), label L1, label L2

This triggers once on 252.eon and 6 times on 176.gcc. Blocks
in question often look like this:

bb262: ; preds = %bb261, %bb248
%iftmp.251.0 = phi i1 [ true, %bb261 ], [ false, %bb248 ] ; <i1> [#uses=4]
%tmp270 = icmp eq %struct.rtx_def* %tmp.0.i, null ; <i1> [#uses=1]
%bothcond = or i1 %iftmp.251.0, %tmp270 ; <i1> [#uses=1]
br i1 %bothcond, label %bb288, label %bb273

In this case, it is clear that it doesn't matter if tmp.0.i is null when coming from bb261. When coming from bb248, it is all that matters.


Another random example:

check_asm_operands.exit: ; preds = %check_asm_operands.exit.thr_comm, %bb30.i, %bb12.i, %bb6.i413
%tmp.0.i420 = phi i1 [ true, %bb6.i413 ], [ true, %bb12.i ], [ true, %bb30.i ], [ false, %check_asm_operands.exit.thr_comm ; <i1> [#uses=1]
call void @llvm.stackrestore( i8* %savedstack ) nounwind
%tmp4389 = icmp eq i32 %added_sets_1.0, 0 ; <i1> [#uses=1]
%tmp4394 = icmp eq i32 %added_sets_2.0, 0 ; <i1> [#uses=1]
%bothcond80 = and i1 %tmp4389, %tmp4394 ; <i1> [#uses=1]
%bothcond81 = and i1 %bothcond80, %tmp.0.i420 ; <i1> [#uses=1]
br i1 %bothcond81, label %bb4398, label %bb4397

Here is the case from 252.eon:

bb290.i.i: ; preds = %bb23.i57.i.i, %bb8.i39.i.i, %bb100.i.i, %bb100.i.i, %bb85.i.i110
%myEOF.1.i.i = phi i1 [ true, %bb100.i.i ], [ true, %bb100.i.i ], [ true, %bb85.i.i110 ], [ true, %bb8.i39.i.i ], [ false, %bb23.i57.i.i ] ; <i1> [#uses=2]
%i.4.i.i = phi i32 [ %i.1.i.i, %bb85.i.i110 ], [ %i.0.i.i, %bb100.i.i ], [ %i.0.i.i, %bb100.i.i ], [ %i.3.i.i, %bb8.i39.i.i ], [ %i.3.i.i, %bb23.i57.i.i ] ; <i32> [#uses=3]
%tmp292.i.i = load i8* %tmp16.i.i100, align 1 ; <i8> [#uses=1]
%tmp293.not.i.i = icmp ne i8 %tmp292.i.i, 0 ; <i1> [#uses=1]
%bothcond.i.i = and i1 %tmp293.not.i.i, %myEOF.1.i.i ; <i1> [#uses=1]
br i1 %bothcond.i.i, label %bb202.i.i, label %bb301.i.i
Factoring out 3 common predecessors.

On the path from any blocks other than bb23.i57.i.i, the load and compare
are dead.

llvm-svn: 50096

show more ...


# e369c35a 22-Apr-2008 Chris Lattner <sabre@nondot.org>

refactor some code, no functionality change.

llvm-svn: 50094


# bab7bec9 21-Apr-2008 Chris Lattner <sabre@nondot.org>

fix grammar-o, thanks to Duncan for noticing.

llvm-svn: 50047


# f6236cc2 21-Apr-2008 Chris Lattner <sabre@nondot.org>

Use the new SplitBlockPredecessors to implement a todo.

llvm-svn: 50022


# ff1c6e38 20-Apr-2008 Chris Lattner <sabre@nondot.org>

finish the first cut of a jump threading pass implementation.

llvm-svn: 50006


# 9c1f1a82 20-Apr-2008 Chris Lattner <sabre@nondot.org>

we can only thread blocks when there is a pred we can determine the succ of.

llvm-svn: 50003


# 2115722f 20-Apr-2008 Chris Lattner <sabre@nondot.org>

improve comments, infrastructure, and add some validity checks for threading.
Add a cost function.

llvm-svn: 50002


# b3b6007c 20-Apr-2008 Chris Lattner <sabre@nondot.org>

Add a new Jump Threading pass, which will handle cases
such as those in PR2235. Right now the pass is not very
effective. :)

llvm-svn: 50000


1...<<212223