Commit Graph

44683 Commits

Author SHA1 Message Date
Owen Anderson
89778462c0 Re-convert several of LazyValueInfo's internal maps to Dense{Map|Set}, and fix the issue in
hasBlockValue() that was causing iterator invalidations.  Many thanks to Dimitry Andric for
tracking down those invalidations!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122906 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 21:15:29 +00:00
Chris Lattner
54c6d6f42d fix some -Wself-assign warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122893 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 18:41:05 +00:00
Cameron Zwarich
073057f0d0 Add some more statistics to CodeGenPrepare.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122891 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 17:47:38 +00:00
Wesley Peck
3d2148f5ac Commit 122778 broke DWARF debug output when using the MBlaze backend. Fixed by overriding TargetFrameInfo::getFrameIndexOffset to take into account the new frame index information.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122889 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 17:34:20 +00:00
Cameron Zwarich
31ff1333e0 Add some stats to CodeGenPrepare to make it easier to speed it up without
regressing code quality.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122887 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 17:27:27 +00:00
Michael J. Spencer
7fd682aaf2 Support/PathV2: Implement remove_all.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122884 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 16:39:38 +00:00
Michael J. Spencer
277fa1047b Support/Windows/PathV2: Make directory iteration ignore . and ..
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122883 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 16:39:30 +00:00
Michael J. Spencer
abce07328c Support/Windows/PathV2: Fix remove to handle both files and directories.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122882 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 16:39:22 +00:00
Michael J. Spencer
5bcdc7f7c4 Support/PathV2: Implement directory_entry::status.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122881 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 16:39:13 +00:00
Michael J. Spencer
da7c1cab8c Support/PathV2: Implement directory iteration on POSIX.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122879 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 16:38:57 +00:00
Cameron Zwarich
1901925b78 Use pop_back_val instead of back followed by pop_back.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122876 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 16:08:47 +00:00
Cameron Zwarich
08602ab1b4 Use a worklist for later iterations just like ordinary instsimplify. The next
step is to only process instructions in subloops if they have been modified by
an earlier simplification.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122869 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 05:47:47 +00:00
Cameron Zwarich
e389ab16f3 Change LoopInstSimplify back to a LoopPass. It revisits subloops rather than
skipping them, but it should probably use a worklist and only revisit those
instructions in subloops that have actually changed. It should probably also
use a worklist after the first iteration like instsimplify now does. Regardless,
it's only 0.3% of opt -O2 time on 403.gcc if it replaces the instcombine placed
in the middle of the loop passes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122868 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-05 05:15:53 +00:00
Eric Christopher
2d31d14bac Remove TODO, these appear to be implemented.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122849 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 22:31:50 +00:00
Owen Anderson
2cf7537dc6 Don't bother value numbering instructions with void types in GVN. In theory this should allow us to insert
fewer things into the value numbering maps, but any speedup is beneath the noise threshold on my machine
on 403.gcc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122844 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 22:15:21 +00:00
Jakob Stoklund Olesen
631ee4b89f Use the EdgeBundles analysis in X86FloatingPoint instead of recomputing CFG
bundles in the pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122833 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 21:10:11 +00:00
Jakob Stoklund Olesen
8dd070edc2 Turn the EdgeBundles class into a stand-alone machine CFG analysis pass.
The analysis will be needed by both the greedy register allocator and the
X86FloatingPoint pass. It only needs to be computed once when the CFG doesn't
change.

This pass is very fast, usually showing up as 0.0% wall time.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122832 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 21:10:05 +00:00
Dale Johannesen
1e08cd1eae Eliminate a warning compiling with llvm-gcc. (IMO the
warning is overzealous but gcc is what it is.)



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122829 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 19:31:24 +00:00
Owen Anderson
b1602abe63 Complete the NumberTable --> LeaderTable rename.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122828 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 19:29:46 +00:00
Owen Anderson
a0709acd6f Fix typo in a comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122827 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 19:25:18 +00:00
Owen Anderson
465942d008 Prune #include's.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122826 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 19:24:57 +00:00
Owen Anderson
7a75d6108e Clarify terminology, settling on referring to what was the "number table" as the "leader table", and
rename methods to make it much more clear what they're doing.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122823 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 19:13:25 +00:00
Owen Anderson
680ac4ff4e When removing a value from GVN's leaders list, don't drop the Next pointer in a corner case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122822 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 19:10:54 +00:00
Dale Johannesen
c84e3c0c03 Improve the accuracy of the inlining heuristic looking for the
case where a static caller is itself inlined everywhere else, and
thus may go away if it doesn't get too big due to inlining other
things into it.  If there are references to the caller other than
calls, it will not be removed; account for this.
This results in same-day completion of the case in PR8853.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122821 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 19:01:54 +00:00
Owen Anderson
c2146a6abc Branch instructions don't produce values, so there's no need to generate a value number for them. This
avoids adding them to the various value numbering tables, resulting in a minor (~3%) speedup for GVN
on 40.gcc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122819 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 18:54:18 +00:00
Owen Anderson
2802c7536f Remove commented out code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122817 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 18:22:08 +00:00
Cameron Zwarich
64573aecb6 Switch to the new style of asterisk placement.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122815 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 18:19:19 +00:00
Chris Lattner
43b40a4620 fix an off-by-one bug that caused a crash analyzing
ashr's with huge shift amounts, PR8896


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122814 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 18:19:15 +00:00
Cameron Zwarich
26db45818a Switch to path halving from path compression for a small speedup. This also
makes getLeader() nonrecursive.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122811 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 16:24:51 +00:00
Duncan Sands
c449a224bb These methods should be "const"; make them so.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122809 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 12:52:29 +00:00
Chris Lattner
e41d3c015c Teach loop-idiom to turn a loop containing a memset into a larger memset
when safe.

The testcase is basically this nested loop:
void foo(char *X) {
  for (int i = 0; i != 100; ++i) 
    for (int j = 0; j != 100; ++j)
      X[j+i*100] = 0;
}

which gets turned into a single memset now.  clang -O3 doesn't optimize
this yet though due to a phase ordering issue I haven't analyzed yet.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122806 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 07:46:33 +00:00
Chris Lattner
b7e9ef0ed1 restructure this a bit. Initialize the WeakVH with "I", the
instruction *after* the store.  The store will always be deleted
if the transformation kicks in, so we'd do an N^2 scan of every
loop block.  Whoops.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122805 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 07:27:30 +00:00
Cameron Zwarich
645b1d2f12 Eliminate repeated allocation of a per-BB DenseMap for a 4.6% reduction of time
spent in StrongPHIElimination on 403.gcc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122803 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 06:42:27 +00:00
Cameron Zwarich
95bb00414e Avoid finding loop back edges when we are not splitting critical edges in
CodeGenPrepare (which is the default behavior).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122801 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 04:43:31 +00:00
Owen Anderson
fa3306af82 Clean up a funky pass registration that got passed over when I got rid of static constructors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122795 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 00:55:21 +00:00
Andrew Trick
6018deefe8 Fix the ARM IIC_iCMPsi itinerary and add an important assert.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122794 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 00:32:57 +00:00
Cameron Zwarich
a1cb585384 Address most of Duncan's review comments. Also, make LoopInstSimplify a simple
FunctionPass. It probably doesn't have a reason to be a LoopPass, as it will
probably drop the simple fixed point and either use RPO iteration or Duncan's
approach in instsimplify of only revisiting instructions that have changed.

The next step is to preserve LoopSimplify. This looks like it won't be too hard,
although the pass manager doesn't actually seem to respect when non-loop passes
claim to preserve LCSSA or LoopSimplify. This will have to be fixed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122791 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 00:12:46 +00:00
Chris Lattner
7c90b90f4e use the very-handy getTruncateOrZeroExtend helper function, and
stop setting NSW: signed overflow is possible.  Thanks to Dan
for pointing these out.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122790 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-04 00:06:55 +00:00
Bill Wendling
2c502f915f Formatting changes. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122789 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 23:59:05 +00:00
Owen Anderson
6f96b275b6 Fix comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122788 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 23:51:56 +00:00
Owen Anderson
392249fcf3 Use the new addEscapingValue callback to update GlobalsModRef when GVN adds PHIs of GEPs. For the moment,
have GlobalsModRef handle this conservatively by simply removing the value from its maps.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122787 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 23:51:43 +00:00
Chris Lattner
e508dd4c75 Duncan deftly points out that readnone functions aren't
invalidated by stores, so they can be handled as 'simple'
operations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122785 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 23:38:13 +00:00
Evan Cheng
7158e08b8e Use pushq / popq instead of subq $8, %rsp / addq $8, %rsp to adjust stack in
prologue and epilogue if the adjustment is 8. Similarly, use pushl / popl if
the adjustment is 4 in 32-bit mode.

In the epilogue, takes care to pop to a caller-saved register that's not live
at the exit (either return or tailcall instruction).
rdar://8771137


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122783 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 22:53:22 +00:00
Wesley Peck
b020808f0d Fix more stack layout issues in the MBlaze backend.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122778 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 21:40:26 +00:00
Owen Anderson
ab6acc6ecd Stub out a new updating interface to AliasAnalysis, allowing stateful analyses to be informed when
a pointer value has potentially become escaping.  Implementations can choose to either fall back to
conservative responses for that value, or may recompute their analysis to accomodate the change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122777 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 21:38:41 +00:00
Chris Lattner
895ace08e0 fix rdar://8813415 - a miscompilation of 164.gzip that loop-idiom
exposed.  It turns out to be a latent bug in basicaa, scary.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122772 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 21:03:33 +00:00
Owen Anderson
30f4a559d7 Simplify GVN's value expression structure, allowing the elimination of a lot of
almost-but-not-quite-identical code.  No intended functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122760 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 19:00:11 +00:00
Chris Lattner
10b883b13f stength reduce my previous patch a bit. The only instructions
that are allowed to have metadata operands are intrinsic calls,
and the only ones that take metadata currently return void.
Just reject all void instructions, which should not be value
numbered anyway.  To future proof things, add an assert to the
getHashValue impl for calls to check that metadata operands 
aren't present.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122759 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 18:43:03 +00:00
Chris Lattner
a12ba39a1d fix PR8895: metadata operands don't have a strong use of their
nested values, so they can change and drop to null, which can
change the hash and cause havok.

It turns out that it isn't a good idea to value number stuff
with metadata operands anyway, so... don't.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122758 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 18:28:15 +00:00
Duncan Sands
dc615e41b5 Speed up instsimplify by about 10-15% by not bothering to retry
InstructionSimplify on instructions that didn't change since the
last time round the loop.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122745 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-03 10:50:04 +00:00