Owen Anderson
0e26c5897a
Force postdom to be linked into opt and bugpoint, even though it is no longer used by any passes.
...
llvm-svn: 51686
2008-05-29 17:00:13 +00:00
Dan Gohman
29f4f83a1c
Fix a word-o and add an explicit keyword.
...
llvm-svn: 51610
2008-05-27 20:41:18 +00:00
Nick Lewycky
744dad8004
"ret (constexpr)" can't be folded into a Constant. Add a method to
...
Analysis/ConstantFolding to fold ConstantExpr's, then make instcombine use it
to try to use targetdata to fold constant expressions on void instructions.
Also extend the icmp(inttoptr, inttoptr) folding to handle the case where
int size != ptr size.
llvm-svn: 51559
2008-05-25 20:56:15 +00:00
Chris Lattner
5c3ce73720
Add a bool to isEdgeFeasible that tells it whether to treat unknown
...
value as undef or untracked.
llvm-svn: 51295
2008-05-20 03:39:39 +00:00
Gabor Greif
d61f20217a
API change for {BinaryOperator|CmpInst|CastInst}::create*() --> Create. Legacy interfaces will be in place for some time. (Merge from use-diet branch.)
...
llvm-svn: 51200
2008-05-16 19:29:10 +00:00
Dan Gohman
766d1c1aee
Move RemoveFromVector out of the global namespace.
...
llvm-svn: 51090
2008-05-14 01:02:49 +00:00
Dan Gohman
4dc39991f8
Split the loop unroll mechanism logic out into a utility function.
...
Patch by Matthijs Kooijman!
llvm-svn: 51083
2008-05-14 00:24:14 +00:00
Eric Christopher
4b7ff26ffd
Make this function public.
...
llvm-svn: 51077
2008-05-13 22:51:04 +00:00
Chris Lattner
f459fcde61
Add a new SparsePropagation analysis utility, which allows you to do
...
SCCP like sparse lattice analysis with relative ease. Just pick your
lattice function and implement the transfer function and you're good.
Just make sure you don't break monotonicity ;-)
llvm-svn: 50961
2008-05-12 01:12:24 +00:00
Chris Lattner
3ee18d7c51
Add a new LibCallAliasAnalysis pass, which is parameterized
...
by an instance of LibCallInfo to provide mod/ref info of
standard library functions. This is powerful enough to
say that 'sqrt' is readonly except that it modifies errno,
or that "printf doesn't store to memory unless the %n
constraint is present" etc.
llvm-svn: 50827
2008-05-07 19:53:05 +00:00
Chris Lattner
e70ff7b21c
Add a new interface for describing the behavior of library calls. This
...
Currently is sufficient to describe mod/ref behavior but will hopefully
eventually be extended for other purposes.
This isn't used by anything yet.
llvm-svn: 50820
2008-05-07 18:21:13 +00:00
Dan Gohman
a84b75df17
Remove uses of llvm/System/IncludeFile.h that are no longer needed.
...
llvm-svn: 50695
2008-05-06 01:32:53 +00:00
Devang Patel
0206af99dc
Remove unused function.
...
llvm-svn: 50664
2008-05-05 19:44:16 +00:00
Evan Cheng
d9353009b7
Fix more -Wshorten-64-to-32 warnings.
...
llvm-svn: 50659
2008-05-05 18:30:58 +00:00
Owen Anderson
611b415d12
Fix PR1098 by correcting the postdominators analysis.
...
Patch by Florian Brandner.
llvm-svn: 50628
2008-05-04 21:07:35 +00:00
Torok Edwin
d016bb2685
Implement destructor for PostDominatorTree to eliminate a memory leak.
...
llvm-svn: 50607
2008-05-03 20:25:26 +00:00
Nick Lewycky
1f831c0f57
Remove 'unwinds to' support from mainline. This patch undoes r47802 r47989
...
r48047 r48084 r48085 r48086 r48088 r48096 r48099 r48109 and r48123.
llvm-svn: 50265
2008-04-25 16:53:59 +00:00
Owen Anderson
030428b435
Major repairs to the post-dominators implementation. Patch from Florian Brandner!
...
llvm-svn: 49768
2008-04-16 04:21:16 +00:00
Dan Gohman
14dce3e51c
Teach AliasSetTracker about VAArgInst.
...
llvm-svn: 49674
2008-04-14 18:34:50 +00:00
Chris Lattner
f63bdaf0b5
add a new CallGraphNode::removeCallEdgeFor method, tidy some comments.
...
llvm-svn: 49617
2008-04-13 19:41:25 +00:00
Owen Anderson
93ab00f1d9
Make GVN more memory efficient, particularly on code that contains a large number of
...
allocations, which GVN can't optimize anyways.
llvm-svn: 49329
2008-04-07 09:59:07 +00:00
Dan Gohman
2b96ce84aa
Add explicit keywords.
...
llvm-svn: 48801
2008-03-25 22:06:05 +00:00
Dan Gohman
a363ba510c
Don't include <map> in Pass.h, which doesn't need it. This requires
...
adding <map> to many files that actually do need it.
llvm-svn: 48667
2008-03-21 23:51:57 +00:00
Devang Patel
5e8cbbea65
PassInfo keep tracks whether a pass is an analysis pass or not.
...
llvm-svn: 48554
2008-03-19 21:56:59 +00:00
Devang Patel
38f181fa8c
Do not use virtual function to identify an analysis pass.
...
llvm-svn: 48520
2008-03-19 00:48:41 +00:00
Dale Johannesen
4d0221c45b
Get rid of compilation warnings. Per Devang.
...
llvm-svn: 48478
2008-03-18 01:52:17 +00:00
Devang Patel
811ca3ddba
Identify Analysis pass.
...
Do not run analysis pass again if analysis info is still available.
This fixes PR1441.
llvm-svn: 48476
2008-03-18 00:39:19 +00:00
Dan Gohman
9ca724cee0
Move the PMStack class out of Pass.h and into PassManagers.h.
...
llvm-svn: 48367
2008-03-14 18:14:29 +00:00
Nick Lewycky
50c8d20ca2
Update the block cloner which fixes bugpoint on code using unwind_to (phew!)
...
and also update the cloning interface's major user, the loop optimizations.
llvm-svn: 48088
2008-03-09 05:24:34 +00:00
Dan Gohman
0cfccf801d
Add -analyze support to postdomtree.
...
llvm-svn: 47680
2008-02-27 18:38:29 +00:00
Anton Korobeynikov
0c5e186924
Unbreak build with gcc 4.3: provide missed includes and silence most annoying warnings.
...
llvm-svn: 47367
2008-02-20 11:08:44 +00:00
Nick Lewycky
0b6cdd1eff
Add 'umax' similar to 'smax' SCEV. Closes PR2003.
...
Parse reversed smax and umax as smin and umin and express them with negative
or binary-not SCEVs (which are really just subtract under the hood).
Parse 'xor %x, -1' as (-1 - %x).
Remove dead code (ConstantInt::get always returns a ConstantInt).
Don't use getIntegerSCEV(-1, Ty). The first value is an int, then it gets
passed into a uint64_t. Instead, create the -1 directly from
ConstantInt::getAllOnesValue().
llvm-svn: 47360
2008-02-20 06:48:22 +00:00
Owen Anderson
274aa2846e
Re-apply the patch to improve the optimizations of memcpy's, with several
...
bugs fixed. This now passes PPC bootstrap.
llvm-svn: 47026
2008-02-12 21:15:18 +00:00
Wojciech Matyjewicz
76c2b22ee4
Fix PR1798 - an error in the evaluation of SCEVAddRecExpr at an
...
arbitrary iteration.
The patch:
1) changes SCEVSDivExpr into SCEVUDivExpr,
2) replaces PartialFact() function with BinomialCoefficient(); the
computations (essentially, the division) in BinomialCoefficient() are
performed with the apprioprate bitwidth necessary to avoid overflow;
unsigned division is used instead of the signed one.
Computations in BinomialCoefficient() require support from the code
generator for APInts. Currently, we use a hack rounding up the
neccessary bitwidth to the nearest power of 2. The hack is easy to turn
off in future.
One remaining issue: we assume the divisor of the binomial coefficient
formula can be computed accurately using 16 bits. It means we can handle
AddRecs of length up to 9. In future, we should use APInts to evaluate
the divisor.
Thanks to Nicholas for cooperation!
llvm-svn: 46955
2008-02-11 11:03:14 +00:00
Wojciech Matyjewicz
2e45476439
Add a check if the initial value of the induction variable is 0 (the method comment says it should be).
...
llvm-svn: 46907
2008-02-09 18:06:58 +00:00
Dan Gohman
562ed58408
Avoid unnecessarily casting away const, fixing a FIXME.
...
llvm-svn: 46591
2008-01-31 01:05:10 +00:00
Dan Gohman
6f9748b626
Add comments describing what the loop depth values mean. Also, make a
...
minor simplification to the loop depth calculation code.
llvm-svn: 46511
2008-01-29 12:12:40 +00:00
Chris Lattner
201be5f41e
Move typedef of loop to top of the file where it is more obvious.
...
llvm-svn: 45857
2008-01-11 06:29:42 +00:00
Chris Lattner
b9232a8374
Fix 80 col violations
...
llvm-svn: 45856
2008-01-11 06:27:42 +00:00
Wojciech Matyjewicz
2502769cf3
fix typo
...
llvm-svn: 45595
2008-01-04 20:04:08 +00:00
Chris Lattner
e0b1ee937a
Don't attribute in file headers anymore. See llvmdev for the
...
discussion of this change. Boy are my fingers tired. ;-)
llvm-svn: 45411
2007-12-29 19:59:42 +00:00
Chris Lattner
5ca42cd342
Fix PR1850 by removing an unsafe transformation from VMCore/ConstantFold.cpp.
...
Reimplement the xform in Analysis/ConstantFolding.cpp where we can use
targetdata to validate that it is safe. While I'm in there, fix some const
correctness issues and generalize the interface to the "operand folder".
llvm-svn: 44817
2007-12-10 22:53:04 +00:00
Owen Anderson
e3de18ac1d
Fix several cache coherence bugs in MemDep/GVN that were found. Also add some (disabled) debugging code
...
to make such problems easier to diagnose in the future, written by Duncan Sands.
llvm-svn: 44695
2007-12-08 01:37:09 +00:00
Duncan Sands
14f11d6836
Integrate the readonly/readnone logic more deeply
...
into alias analysis. This meant updating the API
which now has versions of the getModRefBehavior,
doesNotAccessMemory and onlyReadsMemory methods
which take a callsite parameter. These should be
used unless the callsite is not known, since in
general they can do a better job than the versions
that take a function. Also, users should no longer
call the version of getModRefBehavior that takes
both a function and a callsite. To reduce the
chance of misuse it is now protected.
llvm-svn: 44487
2007-12-01 07:51:45 +00:00
Owen Anderson
37a1ebc6a3
Fixes for MachineLoopInfo, mostly from Evan. With these, it should be almost useable!
...
llvm-svn: 44480
2007-12-01 03:01:39 +00:00
Owen Anderson
2b9b50b985
Add MachineLoopInfo. This is not yet tested.
...
llvm-svn: 44384
2007-11-27 22:47:08 +00:00
Owen Anderson
43d4a82d4b
Make LoopInfoBase more generic, in preparation for having MachineLoopInfo. This involves a small interface change.
...
llvm-svn: 44348
2007-11-27 03:43:35 +00:00
Owen Anderson
67929e6873
Add accessor for getting the underlying templated type. This is necessary for templated LoopInfo.
...
llvm-svn: 44347
2007-11-27 03:33:40 +00:00
Anton Korobeynikov
14246a2eba
Remove another leak. Due to some reason AliasSetTracker didn't had any dtor...
...
llvm-svn: 44320
2007-11-25 23:52:02 +00:00
Nick Lewycky
1536b3f230
Add new SCEV, SCEVSMax. This allows LLVM to analyze do-while loops.
...
llvm-svn: 44319
2007-11-25 22:41:31 +00:00
Anton Korobeynikov
b7ee8cdcba
Remove a leak. Destroy LoopInfoBase object. releaseMemory() is actually called in its dtor.
...
llvm-svn: 44317
2007-11-25 18:41:39 +00:00
Dan Gohman
27ac53cc23
Remove meaningless qualifiers from return types, avoiding compiler warnings.
...
llvm-svn: 44240
2007-11-19 20:46:23 +00:00
Dan Gohman
760d574313
Add explicit keywords.
...
llvm-svn: 44234
2007-11-19 15:30:20 +00:00
Anton Korobeynikov
c9ab2516fa
Reverted r44163 per request
...
llvm-svn: 44177
2007-11-15 18:33:16 +00:00
Nick Lewycky
6690b9499b
Fix handling of overflow in loop calculation by adding new UDiv SCEV. This SCEV
...
is disabled in the sense that it will refuse to create one from a UDiv
instruction, until the code is better tested.
llvm-svn: 44163
2007-11-15 06:30:50 +00:00
Owen Anderson
b88ac41e0e
More templatization.
...
llvm-svn: 44158
2007-11-15 05:00:15 +00:00
Owen Anderson
7b92dab615
Start the process of making MachineLoopInfo possible by templating Loop.
...
llvm-svn: 44097
2007-11-14 02:33:58 +00:00
Owen Anderson
e6b623ba1c
VAArgInst does, in fact, read memory.
...
llvm-svn: 43633
2007-11-02 04:01:21 +00:00
Owen Anderson
4314cf9d58
Some fixes to get MachineDomTree working better.
...
llvm-svn: 43541
2007-10-31 03:30:14 +00:00
Dan Gohman
65be3b6502
Add explicit keywords.
...
llvm-svn: 43464
2007-10-29 19:52:04 +00:00
Owen Anderson
229333c94b
Add a first attempt at dominator information for MBB's. Use with caution: this has been tested to compile. It has not yet been confirmed to generate correct analysis.
...
llvm-svn: 43438
2007-10-29 04:50:50 +00:00
Owen Anderson
dc3329dbf7
Make it possible for DomTreeBase to be constructed from MachineFunction's as well as just Function's.
...
llvm-svn: 43321
2007-10-25 00:16:57 +00:00
Owen Anderson
52b33065a4
Make DomTreeBase not a FunctionPass.
...
llvm-svn: 43263
2007-10-23 21:42:49 +00:00
Owen Anderson
962303b4ef
Unbreak the build. Forgot to commit this file.
...
llvm-svn: 43260
2007-10-23 21:04:37 +00:00
Owen Anderson
33b9693ab8
Make DomTree and PostDomTree thin wrappers around DomTreeBase, rather than inheriting from it.
...
llvm-svn: 43259
2007-10-23 20:58:37 +00:00
Dan Gohman
68fc6d7395
Move the SCEV object factors from being static members of the individual
...
SCEV subclasses to being non-static member functions of the ScalarEvolution
class.
llvm-svn: 43224
2007-10-22 18:31:58 +00:00
Owen Anderson
4b407757d0
Move Split<...>() into DomTreeBase. This should make the #include's of DominatorInternals.h
...
in CodeExtractor and LoopSimplify unnecessary.
Hartmut, could you confirm that this fixes the issues you were seeing?
llvm-svn: 43115
2007-10-18 05:13:52 +00:00
Hartmut Kaiser
ed12f66488
Updated VC++ build system.
...
Silenced some VC warnings.
I'm getting linker errors, though: unresolved externals:
llvm::Split<class llvm::BasicBlock *,struct llvm::GraphTraits<class llvm::BasicBlock *> >(class llvm::DominatorTreeBase<class llvm::BasicBlock> &,class llvm::BasicBlock *)
and
llvm::Split<struct llvm::Inverse<class llvm::BasicBlock *>,struct llvm::GraphTraits<struct llvm::Inverse<class llvm::BasicBlock *> > >(class llvm::DominatorTreeBase<class llvm::BasicBlock> &,class llvm::BasicBlock *)
Where are these defined?
llvm-svn: 43073
2007-10-17 14:56:40 +00:00
Owen Anderson
1235d1218b
Move splitBlock into DomTreeBase from DomTree.
...
llvm-svn: 43059
2007-10-17 02:03:17 +00:00
Owen Anderson
315471786b
Fix some formatting.
...
llvm-svn: 43049
2007-10-16 22:59:15 +00:00
Owen Anderson
43fefb53a6
Template DominatorTreeBase by node type. This is the next major step towards
...
having dominator information on MBB's.
llvm-svn: 43036
2007-10-16 19:59:25 +00:00
Owen Anderson
ffcd82d1ed
Begin the process of allowing DomTree on MBB's. Step One: template DomTreeNode by making it a typedef of a templated DomTreeNodeBase.
...
llvm-svn: 42743
2007-10-08 07:44:39 +00:00
Owen Anderson
cb51170957
Completely merge the implementation details of DomTree and PostDomTree.
...
Also, add a FIXME for a bug in PostDomTree calculation I noticed while writing this,
llvm-svn: 42593
2007-10-03 21:25:45 +00:00
Owen Anderson
91e23d710c
Factor some code from the DomTree and PostDomTree calculate methods up into
...
each one's runOnFunction method.
llvm-svn: 42563
2007-10-03 03:20:17 +00:00
Dan Gohman
50ba8a297c
Add empty() member functions to a few container-like classes.
...
llvm-svn: 42487
2007-10-01 16:01:23 +00:00
Owen Anderson
09ba812a80
Template-ize more of the DomTree internal implementation details. Only the calculate() methods for DomTree and PostDomTree remain to be merged/template-ized.
...
llvm-svn: 42476
2007-09-30 04:17:16 +00:00
Duncan Sands
4358ea12f8
Add newline at end of file.
...
llvm-svn: 42470
2007-09-29 16:38:37 +00:00
Owen Anderson
a533c458f5
Have PostDomTree use the newly templated DFSPass.
...
llvm-svn: 42427
2007-09-28 01:23:47 +00:00
Owen Anderson
e529f66979
Convert DFSPass into a templated friend function, in preparation for making it common to DomTree and PostDomTree.
...
llvm-svn: 42420
2007-09-27 23:23:00 +00:00
Owen Anderson
a0a11ee8b9
Merge significant portions of the DomTree and PostDomTree implementations.
...
The two remaining unmerged parts are DFSPass, and the Calculate().
llvm-svn: 42255
2007-09-24 02:29:29 +00:00
Owen Anderson
bc099e74d8
Factor the calculation details for PostDomTree out of PostDominators.cpp and
...
into a separate header file.
Next step: merging PostDominatorCalculation.h with DominatorCalculation.h.
llvm-svn: 42251
2007-09-23 22:21:00 +00:00
Owen Anderson
677db80624
Move DFSPass back down into DominatorTree. I need to figure out what the difference is between it
...
and the PostDomTree version first.
llvm-svn: 42250
2007-09-23 22:16:38 +00:00
Owen Anderson
de1937fcee
Factor the dominator tree calculation details out into DominatorCalculation.h. This
...
change is not useful in and of itself, but it lays the groundwork for combining
the dominator and postdominator implementations.
Also, factor a few methods that are common to DominatorTree and PostDominatorTree
into DominatorTreeBase. Again, this will make merging the two calculation methods
simpler in the future.
llvm-svn: 42248
2007-09-23 21:31:44 +00:00
Owen Anderson
5454d4cbc9
Add a flag to mark a dirty cache entry. This is not yet used, but will eventually
...
help non-local memdep caching.
llvm-svn: 42137
2007-09-19 16:13:57 +00:00
Devang Patel
e92ff0baef
No need to hardcode SmallVector size.
...
llvm-svn: 41228
2007-08-21 16:39:43 +00:00
Devang Patel
f06e667e9c
Use SmallVector instead of std::vector.
...
llvm-svn: 41207
2007-08-21 00:31:24 +00:00
Anton Korobeynikov
4e15adaf04
- Use correct header for SCEV inside LoopPass.cpp
...
- Move SCEVExpander::expand() out-of-line workarounding possible toolchain bug
llvm-svn: 41197
2007-08-20 21:17:26 +00:00
Nick Lewycky
068c7d20e2
Simplify.
...
llvm-svn: 41167
2007-08-18 14:46:55 +00:00
Devang Patel
fded73828f
When one branch of condition is eliminated then head of the other
...
branch is not necessary immediate dominators of merge blcok in all cases.
llvm-svn: 41144
2007-08-17 21:59:16 +00:00
Owen Anderson
03cbda804e
Cache non-local memory dependence analysis. This is a significant compile
...
time performance win in most cases.
llvm-svn: 41126
2007-08-16 21:27:05 +00:00
Devang Patel
35c1c452b0
No need to use iterator to erase basic block.
...
llvm-svn: 41074
2007-08-14 16:53:24 +00:00
Devang Patel
993388b1ee
Add methods to erase basic block entry.
...
llvm-svn: 41052
2007-08-13 22:10:29 +00:00
Reid Spencer
8c5c7c8453
Change casts from old style to new style. This helps document the details
...
better, gives the compiler a chance to validate the cast and reduces warnings
if the user turns on -Wold-style-cast option.
llvm-svn: 41033
2007-08-12 08:12:35 +00:00
Owen Anderson
3eba1e8f5c
Make NonLocal and None const in the right way. :-)
...
llvm-svn: 40961
2007-08-09 04:42:44 +00:00
Owen Anderson
24f6b332cb
Add one more comment.
...
llvm-svn: 40949
2007-08-08 21:54:33 +00:00
Owen Anderson
f4aec9115f
Cleanup and comment-ize the memdep header.
...
llvm-svn: 40948
2007-08-08 21:53:20 +00:00
Owen Anderson
f988c3ee5c
Change the None and NonLocal markers in memdep to be const.
...
llvm-svn: 40946
2007-08-08 21:39:39 +00:00
Chris Lattner
65d638a918
reimplement dfs number computation to be significantly faster. This speeds up
...
natural loop canonicalization (which does many cfg xforms) by 4.3x, for
example. This also fixes a bug in postdom dfnumber computation.
llvm-svn: 40920
2007-08-08 05:51:24 +00:00
Owen Anderson
d0c7aad800
Get rid of unnecessary #include.
...
llvm-svn: 40885
2007-08-07 00:38:16 +00:00
Owen Anderson
22d94da65b
Clean up a bunch of caching stuff in memdep. This reduces the time to run GVN
...
on 403.gcc from ~15s to ~10s.
llvm-svn: 40884
2007-08-07 00:33:45 +00:00