| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
element types, even though the element extraction code does. It is surprising
that this bug has been here for so long. Fixes <rdar://problem/10318778>.
llvm-svn: 142740
|
| |
|
|
|
|
| |
elimination on them too.
llvm-svn: 142735
|
| |
|
|
|
|
| |
Patch by Pranav Bhandarkar!
llvm-svn: 142556
|
| |
|
|
|
|
|
| |
tag on objc_retainBlock calls, which indicates that they may be
optimized away. rdar://10211286.
llvm-svn: 142298
|
| |
|
|
|
|
|
| |
possibility that it will span multiple CFG diamonds/triangles which
could have different controlling predicates. rdar://10282956
llvm-svn: 142222
|
| |
|
|
|
|
|
| |
Some code want to check that *any* call within a function has the 'returns
twice' attribute, not just that the current function has one.
llvm-svn: 142221
|
| |
|
|
|
|
|
| |
obsolete. Check the attribute instead.
<rdar://problem/8031714>
llvm-svn: 142212
|
| |
|
|
| |
llvm-svn: 142204
|
| |
|
|
|
|
| |
There is no reason to have simple IR level pass in lib/Target.
llvm-svn: 142200
|
| |
|
|
|
|
| |
on the memcpy call will pull up other unrelated stuff. Fixes PR11142.
llvm-svn: 142150
|
| |
|
|
|
|
| |
use can't be dominated, saving one domtree lookup.
llvm-svn: 142066
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
I rewrote the algorithm a while back so it doesn't require map lookup,
but neglected to change the data structure. This was caught by
llvm-gcc self host, not because there's anything special about
llvm-gcc, but because it is the only test for nondeterminism we
currently have. Unit tests don't work well for everything; we should
always try to have a nondeterminism stress test running.
Fixes PR11133: llvm-gcc self host .o mismatch after enable-iv-rewrite=false
llvm-svn: 142036
|
| |
|
|
|
|
| |
Someone more familiar with LSR should double-check that the extra cast is actually doing the right thing in the overflow cases; I'm not completely confident that's that case.
llvm-svn: 141916
|
| |
|
|
|
|
|
|
| |
dependency which cannot be calculated and a path reaching the entry point of the function. This patch introduces isNonFuncLocal, which replaces isUnknown in some cases.
Patch by Xiaoyi Guo.
llvm-svn: 141896
|
| |
|
|
|
|
| |
Based on patch by Ahmed Charles.
llvm-svn: 141820
|
| |
|
|
| |
llvm-svn: 141750
|
| |
|
|
|
|
|
|
| |
would have never worked, since the element type of a vector type is never a
vector type. Also fix the conditional to be more direct in checking whether
EltTy is a vector type.
llvm-svn: 141713
|
| |
|
|
|
|
|
| |
lowering of NEON code. It provides little-to-no benefit now and only introduces
additional complexity.
llvm-svn: 141646
|
| |
|
|
|
|
|
| |
I'm not sure we will need it in the long run, but the option is
currently useful for checking if the output of LSR is "clean".
llvm-svn: 141634
|
| |
|
|
|
|
|
|
|
|
|
| |
IVs.
Indvars previously chose randomly between congruent IVs. Now it will
bias the decision toward IVs that SCEVExpander likes to create. This
was not done to fix any problem, it's just a welcome side effect of
factoring code.
llvm-svn: 141633
|
| |
|
|
|
|
| |
Fixes rdar://problem/5064068
llvm-svn: 141442
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
switch (n) {
case 27:
do_something(x);
...
}
the call do_something(x) will be replaced with do_something(27). In
gcc-as-one-big-file this results in the removal of about 500 lines of
bitcode (about 0.02%), so has about 1/10 of the effect of propagating
branch conditions.
llvm-svn: 141360
|
| |
|
|
|
|
| |
with this patch.
llvm-svn: 141333
|
| |
|
|
|
|
| |
While I'm here, fix the related issue with strncmp, add some actual tests for strcmp and strncmp, and start using StringRef::compare for constant folding instead of using strcmp/strncmp so that the optimized IR isn't dependent on the host's implementation of strcmp.
llvm-svn: 141227
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
branch "br i1 %x, label %if_true, label %if_false" then it replaces
"%x" with "true" in places only reachable via the %if_true arm, and
with "false" in places only reachable via the %if_false arm. Except
that actually it doesn't: if value numbering shows that %y is equal
to %x then, yes, %y will be turned into true/false in this way, but
any occurrences of %x itself are not transformed. Fix this. What's
more, it's often the case that %x is an equality comparison such as
"%x = icmp eq %A, 0", in which case every occurrence of %A that is
only reachable via the %if_true arm can be replaced with 0. Implement
this and a few other variations on this theme. This reduces the number
of lines of LLVM IR in "GCC as one big file" by 0.2%. It has a bigger
impact on Ada code, typically reducing the number of lines of bitcode
by around 0.4% by removing repeated compiler generated checks. Passes
the LLVM nightly testsuite and the Ada ACATS testsuite.
llvm-svn: 141177
|
| |
|
|
|
|
|
|
| |
it's OK for the false/true destination to have multiple
predecessors as long as the extra ones are dominated by
the branch destination.
llvm-svn: 141176
|
| |
|
|
|
|
|
|
| |
This handles the case in which LSR rewrites an IV user that is a phi and
splits critical edges originating from a switch.
Fixes <rdar://problem/6453893> LSR is not splitting edges "nicely"
llvm-svn: 141059
|
| |
|
|
|
|
|
|
|
|
| |
We want heuristics to be based on accurate data, but more importantly
we don't want llvm to behave randomly. A benign trunc inserted by an
upstream pass should not cause a wild swings in optimization
level. See PR11034. It's a general problem with threshold-based
heuristics, but we can make it less bad.
llvm-svn: 140919
|
| |
|
|
| |
llvm-svn: 140821
|
| |
|
|
|
|
|
| |
handle the case where the retain is in a different basic block.
rdar://10210274.
llvm-svn: 140815
|
| |
|
|
|
|
|
| |
objc_retainBlock call is potentially responsible for copying
the block to the heap to extend its lifetime. rdar://10209613.
llvm-svn: 140814
|
| |
|
|
| |
llvm-svn: 140769
|
| |
|
|
|
|
|
|
| |
Rewriting the entire loop nest now requires -enable-lsr-nested.
See PR11035 for some performance data.
A few unit tests specifically test nested LSR, and are now under a flag.
llvm-svn: 140762
|
| |
|
|
| |
llvm-svn: 140670
|
| |
|
|
|
|
|
|
| |
to be uniqued, without any benefit.
If someone prefers %tmp42 to %42, run instnamer.
llvm-svn: 140634
|
| |
|
|
|
|
|
| |
split landingpad instructions into a PHI node.
PR11016
llvm-svn: 140592
|
| |
|
|
|
|
|
| |
Disabling aggressive LSR saves compilation time, and with the new
indvars behavior usually improves performance.
llvm-svn: 140590
|
| |
|
|
|
|
| |
previous checkin.
llvm-svn: 140583
|
| |
|
|
|
|
|
|
| |
The minor bug heuristic was noticed by inspection. I added the
isLoser/isValid helpers because they will become more
important with subsequent checkins.
llvm-svn: 140580
|
| |
|
|
|
|
|
| |
No test case. Noticed by inspection and I doubt it ever affects the
outcome of the overall heuristic, let alone final codegen.
llvm-svn: 140431
|
| |
|
|
| |
llvm-svn: 140327
|
| |
|
|
|
|
|
|
| |
SCCPSolver::ResolvedUndefsIn. If we do, we can end up in a situation where a function is resolved to return a constant, but the caller is marked overdefined, which confuses the code later.
<rdar://problem/9956541> (again).
llvm-svn: 140210
|
| |
|
|
| |
llvm-svn: 139842
|
| |
|
|
|
|
| |
which could theoretically throw.
llvm-svn: 139710
|
| |
|
|
|
|
| |
in memory relevant to the optimizer. rdar://10050579.
llvm-svn: 139708
|
| |
|
|
|
|
| |
PR10920.
llvm-svn: 139583
|
| |
|
|
| |
llvm-svn: 139579
|
| |
|
|
| |
llvm-svn: 139574
|
| |
|
|
| |
llvm-svn: 139571
|
| |
|
|
| |
llvm-svn: 139565
|