1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-01 16:33:37 +01:00
Commit Graph

104 Commits

Author SHA1 Message Date
Chris Lattner
7066a138ff fix PR5698
llvm-svn: 90708
2009-12-06 17:17:23 +00:00
Chris Lattner
7c0c90df97 fix PR5640 by tracking whether a block is the header of a loop more
precisely, which prevents us from infinitely peeling the loop.

llvm-svn: 90211
2009-12-01 06:04:43 +00:00
Chris Lattner
15cd19dddb make PRE of loads preserve the alignment of the moved load instruction.
llvm-svn: 88865
2009-11-15 19:58:31 +00:00
Chris Lattner
59f69de88f fix a bug handling 'not x' when x is undef.
llvm-svn: 88864
2009-11-15 19:57:43 +00:00
Chris Lattner
01fddcec53 use getPredicateOnEdge to fold comparisons through PHI nodes,
which implements GCC PR18046.  This also gets us 360 more
jump threads on 176.gcc.

llvm-svn: 86953
2009-11-12 05:24:05 +00:00
Chris Lattner
3e63fb7318 various fixes to the lattice transfer functions.
llvm-svn: 86952
2009-11-12 04:57:13 +00:00
Chris Lattner
c1619b4fe9 switch jump threading to use getPredicateOnEdge in one place
making the new LVI stuff smart enough to subsume some special
cases in the old code.  Disable them when LVI is around, the
testcase still passes.

llvm-svn: 86951
2009-11-12 04:37:50 +00:00
Chris Lattner
68f3b53ddc with the new code we can thread non-instruction values. This
allows us to handle the test10 testcase.

llvm-svn: 86924
2009-11-12 01:41:34 +00:00
Chris Lattner
ea8b237a74 this argument can be an arbitrary value, it doesn't need to be an instruction.
llvm-svn: 86923
2009-11-12 01:37:43 +00:00
Chris Lattner
b5bb115ece expose edge information and switch j-t to use it.
llvm-svn: 86920
2009-11-12 01:29:10 +00:00
Chris Lattner
73b7ed2d9c pass TD into a SimplifyCmpInst call. Add another case that
uses LVI info when -enable-jump-threading-lvi is passed.

llvm-svn: 86886
2009-11-11 22:31:38 +00:00
Chris Lattner
b45381c3f0 stub out some LazyValueInfo interfaces, and have JumpThreading
start using them in a trivial way when -enable-jump-threading-lvi
is passed.  enable-jump-threading-lvi will be my playground for 
awhile.

llvm-svn: 86789
2009-11-11 02:08:33 +00:00
Chris Lattner
c1709a798a add a fixme
llvm-svn: 86766
2009-11-11 00:21:58 +00:00
Chris Lattner
f66a81aecd implement a TODO by teaching jump threading about "xor x, 1".
llvm-svn: 86739
2009-11-10 22:39:16 +00:00
Chris Lattner
ec4264fbb0 move some generally useful functions out of jump threading
into libanalysis and transformutils.

llvm-svn: 86735
2009-11-10 22:26:15 +00:00
Chris Lattner
f48b199c43 improve comment.
llvm-svn: 86723
2009-11-10 21:45:09 +00:00
Chris Lattner
fca84b3dff Make jump threading eliminate blocks that just contain phi nodes,
debug intrinsics, and an unconditional branch when possible.  This
reuses the TryToSimplifyUncondBranchFromEmptyBlock function split
out of simplifycfg.

llvm-svn: 86722
2009-11-10 21:40:01 +00:00
Chris Lattner
f3fc70a936 make jump threading recursively simplify expressions instead of doing it
just one level deep.  On the testcase we go from getting this:

F1:                                               ; preds = %T2
  %F = and i1 true, %cond                         ; <i1> [#uses=1]
  br i1 %F, label %X, label %Y

to a fully threaded:

F1:                                               ; preds = %T2
  br label %Y


This changes gets us to the point where we're forming (too many) switch 
instructions on doug's strswitch testcase.

llvm-svn: 86646
2009-11-10 01:57:31 +00:00
Chris Lattner
a087a1ca04 don't invalidate PN, rewrite of this code is in progress anyway.
llvm-svn: 86639
2009-11-10 01:19:06 +00:00
Chris Lattner
a279728372 add a new SimplifyInstruction API, which is like ConstantFoldInstruction,
except that the result may not be a constant.  Switch jump threading to 
use it so that it gets things like (X & 0) -> 0, which occur when phi preds
are deleted and the remaining phi pred was a zero.

llvm-svn: 86637
2009-11-10 01:08:51 +00:00
Chris Lattner
25700676d4 rename SimplifyCompare -> SimplifyCmpInst and split it into
Simplify[IF]Cmp pieces.  Add some predicates to CmpInst to 
determine whether a predicate is fp or int.

llvm-svn: 86624
2009-11-09 23:28:39 +00:00
Chris Lattner
29db7d6abe use instructionsimplify instead of a weak clone of ad-hoc folding stuff.
llvm-svn: 86616
2009-11-09 23:00:14 +00:00
Chris Lattner
8cb0f89bbd stub out a new form of BasicBlock::RemovePredecessorAndSimplify which
simplifies instruction users of PHIs when the phi is eliminated.  This
will be moved to transforms/utils after some other refactoring.

llvm-svn: 86603
2009-11-09 22:32:36 +00:00
Chris Lattner
fe6b17a13a comment typos pointed out by Duncan
llvm-svn: 86497
2009-11-09 00:41:49 +00:00
Chris Lattner
3482ad7de0 reapply 86289, 86278, 86270, 86267, 86266 & 86264 plus a fix
(making pred factoring only happen if threading is guaranteed
to be successful).

This now survives an X86-64 bootstrap of llvm-gcc.

llvm-svn: 86355
2009-11-07 08:05:03 +00:00
Devang Patel
84b2af870e Revert following patches to fix llvmgcc bootstrap.
86289, 86278, 86270, 86267, 86266 & 86264
Chris, please take a look.

llvm-svn: 86321
2009-11-07 01:32:59 +00:00
Jeffrey Yasskin
66008446d5 Avoid "ambiguous 'else'" warning from gcc.
llvm-svn: 86314
2009-11-07 00:26:47 +00:00
Chris Lattner
411461dd99 Fix a bug where we'd call SplitBlockPredecessors with a pred in the
set only once even if it has multiple edges to BB.

llvm-svn: 86299
2009-11-06 23:19:58 +00:00
Eli Friedman
98daf610fb Remove function left over from other jump threading cleanup.
llvm-svn: 86289
2009-11-06 21:24:57 +00:00
Chris Lattner
93a3e74486 Fix a problem discovered on self host.
llvm-svn: 86278
2009-11-06 19:21:48 +00:00
Chris Lattner
17dc911808 remove more code subsumed by r86264
llvm-svn: 86270
2009-11-06 18:24:32 +00:00
Chris Lattner
8b677402d3 eliminate some more code subsumed by r86264
llvm-svn: 86267
2009-11-06 18:22:54 +00:00
Chris Lattner
79534a05af remove now redundant code, r86264 handles this case.
llvm-svn: 86266
2009-11-06 18:20:58 +00:00
Chris Lattner
b688868418 Extend jump threading to support much more general threading
predicates.  This allows us to jump thread things like:

_ZN12StringSwitchI5ColorE4CaseILj7EEERS1_RAT__KcRKS0_.exit119:
  %tmp1.i24166 = phi i8 [ 1, %bb5.i117 ], [ %tmp1.i24165, %_Z....exit ], [ %tmp1.i24165, %bb4.i114 ] 
  %toBoolnot.i87 = icmp eq i8 %tmp1.i24166, 0     ; <i1> [#uses=1]
  %tmp4.i90 = icmp eq i32 %tmp2.i, 6              ; <i1> [#uses=1]
  %or.cond173 = and i1 %toBoolnot.i87, %tmp4.i90  ; <i1> [#uses=1]
  br i1 %or.cond173, label %bb4.i96, label %_ZN12...

Where it is "obvious" that when coming from %bb5.i117 that the 'and' is always 
false.  This triggers a surprisingly high number of times in the testsuite, 
and gets us closer to generating good code for doug's strswitch testcase.

This also make a bunch of other code in jump threading redundant, I'll rip
out in the next patch.  This survived an enable-checking llvm-gcc bootstrap.

llvm-svn: 86264
2009-11-06 18:15:14 +00:00
Chris Lattner
903ae55e1c remove a bunch of extraneous LLVMContext arguments
from various APIs, addressing PR5325.

llvm-svn: 86231
2009-11-06 04:27:31 +00:00
Chris Lattner
a003aee613 improve DSE when TargetData is not around, based on work by
Hans Wennborg!

llvm-svn: 86067
2009-11-04 23:20:12 +00:00
Chris Lattner
8ae883b5f0 when folding duplicate conditions, delete the
now-probably-dead instruction tree feeding it.

llvm-svn: 83778
2009-10-11 18:39:58 +00:00
Chris Lattner
1832a32b78 implement a transformation in jump threading that is currently
done by condprop, but do it in a much more general form.  The
basic idea is that we can do a limited form of tail duplication
in the case when we have a branch on a phi.  Moving the branch
up in to the predecessor block makes instruction selection
much easier and encourages chained jump threadings.

llvm-svn: 83759
2009-10-11 07:24:57 +00:00
Chris Lattner
562cc63c29 restructure some code, no functionality change.
llvm-svn: 83756
2009-10-11 04:40:21 +00:00
Chris Lattner
b4e9fb6967 factor some code better and move a function, no functionality change.
llvm-svn: 83755
2009-10-11 04:33:43 +00:00
Chris Lattner
525c0272aa make jump threading on a phi with undef inputs happen.
llvm-svn: 83754
2009-10-11 04:18:15 +00:00
Chris Lattner
75e5de9243 Change jump threading to use the new SSAUpdater class instead of
DemoteRegToStack.  This makes it more efficient (because it isn't
creating a ton of load/stores that are eventually removed by a later
mem2reg), and more slightly more effective (because those load/stores
don't get in the way of threading).

llvm-svn: 83706
2009-10-10 09:05:58 +00:00
Nick Lewycky
d21c325f09 Instruction::clone does not need to take an LLVMContext&. Remove that and
update all the callers.

llvm-svn: 82889
2009-09-27 07:38:41 +00:00
Chris Lattner
5f54c5bd1c eliminate VISIBILITY_HIDDEN from Transforms/Scalar. PR4861
llvm-svn: 80766
2009-09-02 06:11:42 +00:00
Owen Anderson
9df206d02d Push LLVMContexts through the IntegerType APIs.
llvm-svn: 78948
2009-08-13 21:58:54 +00:00
Owen Anderson
d0e6352c97 Move getTrue() and getFalse() to 2.5-like APIs.
llvm-svn: 77685
2009-07-31 17:39:07 +00:00
Owen Anderson
93ccaf5c60 Move more code back to 2.5 APIs.
llvm-svn: 77635
2009-07-30 23:03:37 +00:00
Owen Anderson
0ce2151b36 Move ConstantExpr to 2.5 API.
llvm-svn: 77494
2009-07-29 18:55:55 +00:00
Daniel Dunbar
4a36d5dcfd Remove Value::getName{Start,End}, the last of the old Name APIs.
llvm-svn: 77152
2009-07-26 09:48:23 +00:00
Daniel Dunbar
75a66c519b Eliminate some uses of DOUT, cerr, and getNameStart().
llvm-svn: 77145
2009-07-26 07:49:05 +00:00