summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis
Commit message (Collapse)AuthorAgeFilesLines
* There is no need to add file as context for subroutine type. The subroutine ↵Devang Patel2011-08-181-2/+2
| | | | | | type does not need any context. llvm-svn: 138010
* Revert r137655. There is some question about whether the 'landingpad'Bill Wendling2011-08-171-0/+3
| | | | | | instruction should be marked as potentially reading and/or writing memory. llvm-svn: 137863
* Revert r137781; I agree with Duncan's comment that the situation in question ↵Eli Friedman2011-08-171-5/+4
| | | | | | is clearly impossible given the current structure of the code. llvm-svn: 137853
* Extend the undef ^ undef idiom once more. No testcase: I can't figure out ↵Eli Friedman2011-08-161-4/+5
| | | | | | how to actually trigger the codepath in question at the moment, but it might get exposed in the future. llvm-svn: 137781
* Until now all debug info MDNodes referred to a root MDNode, a compile unit. ↵Devang Patel2011-08-162-71/+122
| | | | | | | | This simplified handling of these needs in dwarf writer. However, one side effect of this is that during link time optimization all these MDNodes are _not_ uniqued. In other words there will be N number of MDNodes describing "int", "char" and all other types, which would suddenly grow when each object file starts using libraries like STL. MDNodes graph structure such that compiler unit keeps track of important MDNodes and update dwarf writer to process mdnodes top-down instead of bottom up. llvm-svn: 137778
* Use the getFirstInsertionPt() method instead of getFirstNonPHI + an 'isa<>'Bill Wendling2011-08-161-5/+2
| | | | | | check for a LandingPadInst. llvm-svn: 137745
* A few places where we want to skip the landingpad instruction for insertion.Bill Wendling2011-08-161-1/+4
| | | | llvm-svn: 137712
* Add a finalize() hook, that'll let DIBuilder construct compile unit lazily.Devang Patel2011-08-151-0/+4
| | | | llvm-svn: 137673
* Add some comments here because the lack of a check for volatile/atomic here ↵Eli Friedman2011-08-151-0/+4
| | | | | | is a bit unusual. llvm-svn: 137662
* Duncan pointed out that the LandingPadInst might read memory. (It might alsoBill Wendling2011-08-151-3/+0
| | | | | | write to memory.) Marking it as such makes some checks for immobility go away. llvm-svn: 137655
* Misc analysis passes that need to be aware of atomic load/store.Eli Friedman2011-08-154-19/+50
| | | | llvm-svn: 137650
* Atomic load/store support in LICM.Eli Friedman2011-08-151-4/+8
| | | | llvm-svn: 137648
* The landingpad instruction isn't loop-invariant.Bill Wendling2011-08-151-0/+3
| | | | llvm-svn: 137628
* Refactor. Global variables are part of compile unit so let CompileUnit ↵Devang Patel2011-08-151-0/+30
| | | | | | create new global variable. llvm-svn: 137621
* Silence a bunch (but not all) "variable written but not read" warningsDuncan Sands2011-08-122-4/+5
| | | | | | when building with assertions disabled. llvm-svn: 137460
* Allow loop unrolling to get known trip counts from ScalarEvolution.Andrew Trick2011-08-111-0/+57
| | | | | | | | | | | | | SCEV unrolling can unroll loops with arbitrary induction variables. It is a prerequisite for -disable-iv-rewrite performance. It is also easily handles loops of arbitrary structure including multiple exits and is generally more robust. This is under a temporary option to avoid affecting default behavior for the next couple of weeks. It is needed so that I can checkin unit tests for updateUnloop. llvm-svn: 137384
* Fix for LoopInfo::updateUnloop. Remove subloop blocks from formerAndrew Trick2011-08-111-16/+29
| | | | | | | | | ancestor loops. I have a unit test that depends on scev-unroll, which unfortunately isn't checked in. But I will check it in when I can. llvm-svn: 137341
* Cleanup. Another thorough review by Nick!Andrew Trick2011-08-111-6/+6
| | | | llvm-svn: 137317
* Reapplying r136844.Andrew Trick2011-08-102-50/+250
| | | | | | | | | | | | | | | | | | | | An algorithm for incrementally updating LoopInfo within a LoopPassManager. The incremental update should be extremely cheap in most cases and can be used in places where it's not feasible to regenerate the entire loop forest. - "Unloop" is a node in the loop tree whose last backedge has been removed. - Perform reverse dataflow on the block inside Unloop to propagate the nearest loop from the block's successors. - For reducible CFG, each block in unloop is visited exactly once. This is because unloop no longer has a backedge and blocks within subloops don't change parents. - Immediate subloops are summarized by the nearest loop reachable from their exits or exits within nested subloops. - At completion the unloop blocks each have a new parent loop, and each immediate subloop has a new parent. llvm-svn: 137276
* Distinguish between two copies of one inlined variable. Take 2.Devang Patel2011-08-101-0/+11
| | | | llvm-svn: 137253
* Cleanup. Added LoopBlocksDFS::perform for simple clients.Andrew Trick2011-08-101-0/+13
| | | | llvm-svn: 137195
* Provide method to print variable's extended name which includes inline location.Devang Patel2011-08-091-1/+37
| | | | llvm-svn: 137095
* Made SCEV's UDiv expressions more canonical. When dividing aAndrew Trick2011-08-061-4/+21
| | | | | | | | | | | | | | | | | | | | | | | recurrence, the initial values low bits can sometimes be ignored. To take advantage of this, added FoldIVUser to IndVarSimplify to fold an IV operand into a udiv/lshr if the operator doesn't affect the result. -indvars -disable-iv-rewrite now transforms i = phi i4 i1 = i0 + 1 idx = i1 >> (2 or more) i4 = i + 4 into i = phi i4 idx = i0 >> ... i4 = i + 4 llvm-svn: 137013
* Temporarily revert r135528 which distinguishes between two copies of oneChandler Carruth2011-08-051-11/+0
| | | | | | | | | | | | | | | | | | | inlined variable, based on the discussion in PR10542. This explodes the runtime of several passes down the pipeline due to a large number of "copies" remaining live across a large function. This only shows up with both debug and opt, but when it does it creates a many-minute compile when self-hosting LLVM+Clang. There are several other cases that show these types of regressions. All of this is tracked in PR10542, and progress is being made on fixing the issue. Once its addressed, the re-instated, but until then this restores the performance for self-hosting and other opt+debug builds. Devang, let me know if this causes any trouble, or impedes fixing it in any way, and thanks for working on this! llvm-svn: 136953
* Fix what seems an obvious typo. Patch by Ivan Krasin. ProblemDuncan Sands2011-08-041-1/+1
| | | | | | reported at http://habrahabr.ru/blogs/compilers/125626/. llvm-svn: 136865
* Reverting r136884 updateUnloop, which crashed a linux builder.Andrew Trick2011-08-042-248/+50
| | | | llvm-svn: 136857
* An algorithm for incrementally updating LoopInfo within aAndrew Trick2011-08-032-50/+248
| | | | | | | | | | | | | | | | | | | LoopPassManager. The incremental update should be extremely cheap in most cases and can be used in places where it's not feasible to regenerate the entire loop forest. - "Unloop" is a node in the loop tree whose last backedge has been removed. - Perform reverse dataflow on the block inside Unloop to propagate the nearest loop from the block's successors. - For reducible CFG, each block in unloop is visited exactly once. This is because unloop no longer has a backedge and blocks within subloops don't change parents. - Immediate subloops are summarized by the nearest loop reachable from their exits or exits within nested subloops. - At completion the unloop blocks each have a new parent loop, and each immediate subloop has a new parent. llvm-svn: 136844
* whitespaceAndrew Trick2011-08-032-31/+31
| | | | llvm-svn: 136843
* Add more constantness in BlockFrequencyInfo.Jakub Staszak2011-08-031-1/+1
| | | | llvm-svn: 136816
* Add this back in for now. There are still a few passes which create unwind ↵Bill Wendling2011-08-031-1/+1
| | | | | | instructions at the moment. llvm-svn: 136756
* Replace the 'UnwindInst' check with a check for 'ResumeInst', which also exitsBill Wendling2011-08-031-1/+1
| | | | | | the function, because the UnwindInst is going away. llvm-svn: 136751
* Use consistent terminology for loop exit/exiting blocks. Name change only.Andrew Trick2011-08-021-9/+9
| | | | llvm-svn: 136677
* Change SmallVector to SmallPtrSet in BranchProbabilityInfo. Handle cases whereJakub Staszak2011-08-011-15/+15
| | | | | | one than one successor goes to the same block. llvm-svn: 136638
* Do not handle cases with >= and <= predicates.Jakub Staszak2011-07-311-7/+0
| | | | llvm-svn: 136588
* Remove untrue comment.Jakub Staszak2011-07-311-3/+0
| | | | llvm-svn: 136587
* Do not handle case where LHS is equal to zero, because InstCombiner always movesJakub Staszak2011-07-311-24/+8
| | | | | | it to RHS anyway. llvm-svn: 136586
* Add Zero Heurestics to BranchProbabilityInfo. If we compare value to zero weJakub Staszak2011-07-311-1/+91
| | | | | | | | | | | | | decide whether condition is likely to be true this way: x == 0 -> false x < 0 -> false x <= 0 -> false x != 0 -> true x > 0 -> true x >= 0 -> true llvm-svn: 136583
* Add more constantness in BranchProbabilityInfo.Jakub Staszak2011-07-291-10/+11
| | | | llvm-svn: 136502
* Remove incEdgeWeight and decEdgeWeight. Set edge weight directly to avoidJakub Staszak2011-07-291-30/+35
| | | | | | rounding errors. llvm-svn: 136456
* Rewrite the CMake build to use explicit dependencies between libraries,Chandler Carruth2011-07-292-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | specified in the same file that the library itself is created. This is more idiomatic for CMake builds, and also allows us to correctly specify dependencies that are missed due to bugs in the GenLibDeps perl script, or change from compiler to compiler. On Linux, this returns CMake to a place where it can relably rebuild several targets of LLVM. I have tried not to change the dependencies from the ones in the current auto-generated file. The only places I've really diverged are in places where I was seeing link failures, and added a dependency. The goal of this patch is not to start changing the dependencies, merely to move them into the correct location, and an explicit form that we can control and change when necessary. This also removes a serialization point in the build because we don't have to scan all the libraries before we begin building various tools. We no longer have a step of the build that regenerates a file inside the source tree. A few other associated cleanups fall out of this. This isn't really finished yet though. After talking to dgregor he urged switching to a single CMake macro to construct libraries with both sources and dependencies in the arguments. Migrating from the two macros to that style will be a follow-up patch. Also, llvm-config is still generated with GenLibDeps.pl, which means it still has slightly buggy dependencies. The internal CMake 'llvm-config-like' macro uses the correct explicitly specified dependencies however. A future patch will switch llvm-config generation (when using CMake) to be based on these deps as well. This may well break Windows. I'm getting a machine set up now to dig into any failures there. If anyone can chime in with problems they see or ideas of how to solve them for Windows, much appreciated. llvm-svn: 136433
* Change LBH_TAKEN_WEIGHT to 124 (from 128). Right now, sum ofJakub Staszak2011-07-281-4/+4
| | | | | | | LBH_TAKEN_WEIGHT + LBH_NONTAKEN_WEIGHT = 128 which in _most_ cases reduce number of rounding errors. llvm-svn: 136428
* Heuristics are in descending priority now. If we use one of them, skip the rest.Jakub Staszak2011-07-281-13/+23
| | | | llvm-svn: 136402
* Add InEdges (edges from header to the loop) in Loop Branch Heuristics, soJakub Staszak2011-07-281-0/+17
| | | | | | | there is no frequency difference whether condition is in the header or in the latch. llvm-svn: 136398
* Use BlockFrequency instead of uint32_t in BlockFrequencyInfo.Jakub Staszak2011-07-271-1/+1
| | | | llvm-svn: 136278
* Explicitly cast narrowing conversions inside {}s that will become errors inJeffrey Yasskin2011-07-271-1/+2
| | | | | | C++0x. llvm-svn: 136211
* Minor simplification.Eli Friedman2011-07-271-2/+2
| | | | llvm-svn: 136202
* Fix AliasSetTracker so that it doesn't make any assumptions about ↵Eli Friedman2011-07-271-51/+46
| | | | | | instructions it doesn't know about (like the atomic instructions I'm adding). llvm-svn: 136198
* SCEV: Added a data structure for storing not-taken info per loopAndrew Trick2011-07-261-127/+212
| | | | | | | exit. Added an interfaces for querying either the loop's exact/max backedge taken count or a specific loop exit's not-taken count. llvm-svn: 136100
* Add helper function for getting true/false constants in a uniformDuncan Sands2011-07-261-34/+48
| | | | | | | way for i1 and vector of i1 types. Use these to make some code more self-documenting. llvm-svn: 136079
* Rename BlockFrequency to BlockFrequencyInfo and MachineBlockFrequency toJakub Staszak2011-07-253-13/+13
| | | | | | MachineBlockFrequencyInfo. llvm-svn: 135937
OpenPOWER on IntegriCloud