- Nov 14, 2010
-
-
Duncan Sands authored
it to get better phi node simplification. llvm-svn: 119055
-
Duncan Sands authored
offload the work to hasConstantValue rather than do something more complicated (such handling mutually recursive phis) because (1) it is not clear it is worth it; and (2) if it is worth it, maybe such logic would be better placed in hasConstantValue. Adjust some GVN tests which are now cleaned up much further (eg: all phi nodes are removed). llvm-svn: 119043
-
- Nov 13, 2010
-
-
Duncan Sands authored
SimplifyAssociativeOrCommutative) "(A op C1) op C2" -> "A op (C1 op C2)", which previously was only done if C1 and C2 were constants, to occur whenever "C1 op C2" simplifies (a la InstructionSimplify). Since the simplifying operand combination can no longer be assumed to be the right-hand terms, consider all of the possible permutations. When compiling "gcc as one big file", transform 2 (i.e. using right-hand operands) fires about 4000 times but it has to be said that most of the time the simplifying operands are both constants. Transforms 3, 4 and 5 each fired once. Transform 6, which is an existing transform that I didn't change, never fired. With this change, the testcase is now optimized perfectly with one run of instcombine (previously it required instcombine + reassociate + instcombine, and it may just have been luck that this worked). llvm-svn: 119002
-
- Nov 12, 2010
-
-
Duncan Sands authored
"%z = %x and %y". If GVN can prove that %y equals %x, then it turns this into "%z = %x and %x". With the new code, %z will be replaced with %x everywhere (and then deleted). Previously %z would be value numbered too, which is a waste of time. Also, while a clever value numbering algorithm would give %z the same value number as %x, our current one doesn't do so (at least I don't think it does). The new logic has an essentially equivalent effect to what you would get if %z was given the same value number as %x, i.e. it should make value numbering smarter. While there, get hold of target data once at the start rather than a gazillion times all over the place. llvm-svn: 118923
-
Dan Gohman authored
one store dead. This is especially noticeable in SingleSource/Benchmarks/Shootout/objinst. llvm-svn: 118875
-
- Nov 11, 2010
-
-
Dan Gohman authored
and vaarg instructions. llvm-svn: 118845
-
Dan Gohman authored
testing for dereferenceable pointers into a helper function, isDereferenceablePointer. Teach it how to reason about GEPs with simple non-zero indices. Also eliminate ArgumentPromtion's IsAlwaysValidPointer, which didn't check for weak externals or out of range gep indices. llvm-svn: 118840
-
Dan Gohman authored
llvm-svn: 118804
-
Dan Gohman authored
llvm-svn: 118788
-
Dan Gohman authored
execute. Make Sink's predicate more precise. llvm-svn: 118787
-
- Nov 10, 2010
-
-
Dan Gohman authored
references. For example, this allows gvn to eliminate the load in this example: void foo(int n, int* p, int *q) { p[0] = 0; p[1] = 1; if (n) { *q = p[0]; } } llvm-svn: 118714
-
Dan Gohman authored
instructions instead of hard-coding operand numbers. llvm-svn: 118698
-
Dan Gohman authored
it, and to be consistent. llvm-svn: 118692
-
Dan Gohman authored
arbitrary memory into a helper function, and adjust some comments. llvm-svn: 118687
-
Dale Johannesen authored
order to reduce ((x<<30)>>24) to x<<6, check the correct bits. PR 8547. llvm-svn: 118665
-
Dan Gohman authored
chaining and simplify FunctionAttrs' GetModRefBehavior logic. llvm-svn: 118660
-
- Nov 09, 2010
-
-
Dan Gohman authored
llvm-svn: 118627
-
Dan Gohman authored
memory. This isn't a real improvement with present day AliasAnalysis implementations; it's mainly for consistency. llvm-svn: 118624
-
Dan Gohman authored
llvm-svn: 118618
-
Dan Gohman authored
llvm-svn: 118617
-
- Nov 08, 2010
-
-
Dan Gohman authored
llvm-svn: 118430
-
Dan Gohman authored
llvm-svn: 118417
-
Dan Gohman authored
to optionally look for constant or local (alloca) memory. Teach BasicAliasAnalysis::pointsToConstantMemory to look through Select and Phi nodes, and to support looking for local memory. Remove FunctionAttrs' PointsToLocalOrConstantMemory function, now that AliasAnalysis knows all the tricks that it knew. llvm-svn: 118412
-
Dan Gohman authored
knows about intrinsic functions. llvm-svn: 118410
-
- Nov 03, 2010
-
-
Duncan Sands authored
the code more self-documenting. llvm-svn: 118171
-
Jakob Stoklund Olesen authored
threshold given to createFunctionInliningPass(). Both opt -O3 and clang would silently ignore the -inline-threshold option. llvm-svn: 118117
-
- Nov 01, 2010
-
-
Owen Anderson authored
bits are zero, not that the current low bits are zero. Fixes <rdar://problem/8606771>. llvm-svn: 117953
-
- Oct 30, 2010
-
-
Duncan Sands authored
it claiming not to have side-effects is no longer needed. llvm-svn: 117789
-
Duncan Sands authored
consider it to be readonly. In fact, don't even consider it to be readonly if it does a volatile load from an AllocaInst either (it is debatable as to whether readonly would be correct or not in this case; play safe for the moment). This fixes PR8279. llvm-svn: 117783
-
Bob Wilson authored
llvm-svn: 117728
-
Bob Wilson authored
llvm-svn: 117727
-
Bob Wilson authored
llvm-svn: 117722
-
Bob Wilson authored
This code had previously used 2*N, where N is the mask length, to represent undef. That is not safe because the shufflevector operands may have more than N elements -- they don't have to match the result type. llvm-svn: 117721
-
Bob Wilson authored
Allow splats even if they don't match either of the original shuffles, possibly due to undef entries in the shuffles masks. Radar 8597790. Also fix some 80-column violations. llvm-svn: 117719
-
- Oct 29, 2010
-
-
Owen Anderson authored
Give up on doing in-line instruction simplification during correlated value propagation. Instruction simplification needs to be guaranteed never to be run on an unreachable block. However, earlier block simplifications may have changed the CFG to make block that were reachable when we began our iteration unreachable by the time we try to simplify them. (Note that this also means that our depth-first iterators were potentially being invalidated). This should not have a large impact on code quality, since later runs of instcombine should pick up these simplifications. Fixes PR8506. llvm-svn: 117709
-
John Thompson authored
Inline asm multiple alternative constraints development phase 2 - improved basic logic, added initial platform support. llvm-svn: 117667
-
- Oct 28, 2010
-
-
Dale Johannesen authored
llvm-svn: 117510
-
- Oct 25, 2010
-
-
Dan Gohman authored
from stores when folding in bitcasts. llvm-svn: 117265
-
- Oct 24, 2010
-
-
Duncan Sands authored
it isn't unreachable and should not be zapped. The check for the entry block was missing in one case: a block containing a unwind instruction. While there, do some small cleanups: "M" is not a great name for a Function* (it would be more appropriate for a Module*), change it to "Fn"; use Fn in more places. llvm-svn: 117224
-
- Oct 23, 2010
-
-
Benjamin Kramer authored
llvm-svn: 117213
-