summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/GVN.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Revert r97245 which seems to be causing performance problems.Bob Wilson2010-02-281-6/+5
| | | | llvm-svn: 97366
* Move the EnableFullLoadPRE flag from a separate command-line option to anBob Wilson2010-02-261-5/+6
| | | | | | argument of createGVNPass and set it automatically for -O3. llvm-svn: 97245
* Remove unused "NoPRE" parameter in GVN and createGVNPass().Bob Wilson2010-02-261-5/+4
| | | | llvm-svn: 97235
* Reapply r97010, the speculative revert failed.Daniel Dunbar2010-02-241-6/+1
| | | | llvm-svn: 97036
* Speculatively revert r97010, "Add an argument to PHITranslateValue to specifyDaniel Dunbar2010-02-241-1/+6
| | | | | | the DominatorTree. ...", in hopes of restoring poor old PPC bootstrap. llvm-svn: 97027
* Add an argument to PHITranslateValue to specify the DominatorTree. If thisBob Wilson2010-02-241-6/+1
| | | | | | | | | | | | | | | | | | | | argument is non-null, pass it along to PHITranslateSubExpr so that it can prefer using existing values that dominate the PredBB, instead of just blindly picking the first equivalent value that it finds on a uselist. Also when the DominatorTree is specified, have PHITranslateValue filter out any result that does not dominate the PredBB. This is basically just refactoring the check that used to be in GetAvailablePHITranslatedSubExpr and also in GVN. Despite my initial expectations, this change does not affect the results of GVN for any testcases that I could find, but it should help compile time. Before this change, if PHITranslateSubExpr picked a value that does not dominate, PHITranslateWithInsertion would then insert a new value, which GVN would later determine to be redundant and would replace. By picking a good value to begin with, we save GVN the extra work of inserting and then replacing a new value. llvm-svn: 97010
* Update memdep when load PRE inserts a new load, and add some debug output.Bob Wilson2010-02-231-0/+2
| | | | | | I don't have a small testcase for this. llvm-svn: 96890
* Erase deleted instructions from GVN's ValueTable. This fixes assertionBob Wilson2010-02-221-0/+7
| | | | | | failures from ValueTable::verifyRemoved() when using -debug. llvm-svn: 96805
* Rename SuccessorNumber to GetSuccessorNumber.Bob Wilson2010-02-161-2/+2
| | | | llvm-svn: 96387
* Split critical edges as needed for load PRE.Bob Wilson2010-02-161-8/+30
| | | | llvm-svn: 96378
* Refactor to share code to find the position of a basic block successor in theBob Wilson2010-02-161-8/+1
| | | | | | terminator's list of successors. llvm-svn: 96377
* There are two ways of checking for a given type, for example isa<PointerType>(T)Duncan Sands2010-02-161-24/+24
| | | | | | | and T->isPointerTy(). Convert most instances of the first form to the second form. Requested by Chris. llvm-svn: 96344
* Ignore dbg info intrinsics.Devang Patel2010-02-111-0/+4
| | | | llvm-svn: 95828
* Fix some comment typos.Bob Wilson2010-02-031-3/+3
| | | | llvm-svn: 95170
* Add an option to GVN to remove all partially redundant loads. This is currentlyBob Wilson2010-02-011-80/+107
| | | | | | | | | disabled by default. This divides the existing load PRE code into 2 phases: first it checks that it is safe to move the load to each of the predecessors where it is unavailable, and then if it is safe, the code is changed to move the load. Radar 7571861. llvm-svn: 95007
* Check alignment of loads when deciding whether it is safe to execute themBob Wilson2010-01-301-1/+2
| | | | | | | unconditionally. Besides checking the offset, also check that the underlying object is aligned as much as the load itself. llvm-svn: 94875
* Improve isSafeToLoadUnconditionally to recognize that GEPs with constantBob Wilson2010-01-291-1/+2
| | | | | | | indices are safe if the result is known to be within the bounds of the underlying object. llvm-svn: 94829
* Remove check for an impossible condition: the condition of the while loop hasBob Wilson2010-01-251-2/+0
| | | | | | already checked that TmpBB->getSinglePredecessor() is non-null. llvm-svn: 94451
* Convert some of the dynamic opcode lookups into static ones.Owen Anderson2010-01-171-59/+40
| | | | llvm-svn: 93693
* Use do+while instead of while for loops which obviously have aDan Gohman2010-01-051-2/+2
| | | | | | non-zero trip count. Use SmallVector's pop_back_val(). llvm-svn: 92734
* Change errs() to dbgs().David Greene2010-01-051-20/+20
| | | | llvm-svn: 92613
* split code that doesn't need to be templated out of IRBuilder into a newChris Lattner2009-12-281-0/+1
| | | | | | | non-templated IRBuilderBase class. Move that large CreateGlobalString out of line, eliminating the need to #include GlobalVariable.h in IRBuilder.h llvm-svn: 92227
* The phi translated pointer can be computed when returning a partially cached ↵Chris Lattner2009-12-221-1/+1
| | | | | | | | | | result instead of stored. This reduces memdep memory usage, and also eliminates a bunch of weakvh's. This speeds up gvn on gcc.c-torture/20001226-1.c from 23.9s to 8.45s (2.8x) on a different machine than earlier. llvm-svn: 91885
* Add a fastpath to Load GVN to special case when we have exactly one dominatingChris Lattner2009-12-211-2/+10
| | | | | | | | | | | load to avoid even messing around with SSAUpdate at all. In this case (which is very common, we can just use the input value directly). This speeds up GVN time on gcc.c-torture/20001226-1.c from 36.4s to 16.3s, which still isn't great, but substantially better and this is a simple speedup that applies to lots of different cases. llvm-svn: 91851
* refactor some code out to a new helper method.Chris Lattner2009-12-211-22/+27
| | | | llvm-svn: 91849
* Eliminte unnecessary uses of <cstdio>.Dan Gohman2009-12-181-4/+3
| | | | llvm-svn: 91666
* Remove isPod() from DenseMapInfo, splitting it out to its ownChris Lattner2009-12-151-1/+4
| | | | | | | | isPodLike type trait. This is a generally useful type trait for more than just DenseMap, and we really care about whether something acts like a pod, not whether it really is a pod. llvm-svn: 91421
* Fix PR5744, a case where we were getting the pointer size instead of theChris Lattner2009-12-101-1/+1
| | | | | | | | value size. This only manifested when memdep inprecisely returns clobber, which is do to a caching issue in the PR5744 testcase. We can 'efficiently emulate' this by using '-no-aa' llvm-svn: 91004
* allow this to build when the #if 0's are enabled. No functionality change.Chris Lattner2009-12-101-6/+2
| | | | llvm-svn: 90999
* fix hte last remaining known (by me) phi translation bug. When we reanalyzeChris Lattner2009-12-091-6/+9
| | | | | | | clobbers to forward pieces of large stores to small loads, we need to consider the properly phi translated pointer in the store block. llvm-svn: 90978
* change GetStoreValueForLoad to use IRBuilder, which is cleaner andChris Lattner2009-12-091-7/+7
| | | | | | implicitly constant folds. llvm-svn: 90977
* change AnalyzeLoadFromClobberingMemInst/AnalyzeLoadFromClobberingStoreChris Lattner2009-12-091-13/+22
| | | | | | to require the load ty/ptr to be passed in, no functionality change. llvm-svn: 90960
* change AnalyzeLoadFromClobberingWrite and clients to pass in type Chris Lattner2009-12-091-10/+12
| | | | | | and pointer instead of the load. No functionality change. llvm-svn: 90959
* change NonLocalDepEntry from being a typedef for an std::pair to be itsChris Lattner2009-12-091-10/+10
| | | | | | own small class. No functionality change. llvm-svn: 90956
* add some aborts to #if 0's.Chris Lattner2009-12-091-0/+2
| | | | llvm-svn: 90929
* Switch GVN and memdep to use PHITransAddr, which correctly handlesChris Lattner2009-12-091-17/+22
| | | | | | | | | | | | | | | | | | | | | | | phi translation of complex expressions like &A[i+1]. This has the following benefits: 1. The phi translation logic is all contained in its own class with a strong interface and verification that it is self consistent. 2. The logic is more correct than before. Previously, if intermediate expressions got PHI translated, we'd miss the update and scan for the wrong pointers in predecessor blocks. @phi_trans2 is a testcase for this. 3. We have a lot less code in memdep. We can handle phi translation across blocks of things like @phi_trans3, which is pretty insane :). This patch should fix the miscompiles of 255.vortex, and I tested it with a bootstrap of llvm-gcc, llvm-test and dejagnu of course. llvm-svn: 90926
* constant fold loads from memcpy's from global constants. This is importantChris Lattner2009-12-061-6/+46
| | | | | | | because clang lowers nontrivial automatic struct/array inits to memcpy from a global array. llvm-svn: 90698
* add support for forwarding mem intrinsic values to non-local loads.Chris Lattner2009-12-061-33/+71
| | | | llvm-svn: 90697
* Handle forwarding local memsets to loads. For example, we optimize this:Chris Lattner2009-12-061-43/+136
| | | | | | | | | | | short x(short *A) { memset(A, 1, sizeof(*A)*100); return A[42]; } to 'return 257' instead of doing the load. llvm-svn: 90695
* Fix this crasher, and add a FIXME for a missed optimization.Owen Anderson2009-12-031-0/+10
| | | | llvm-svn: 90408
* Cleanup/remove some parts of the lifetime region handling code in memdep and ↵Owen Anderson2009-12-021-8/+6
| | | | | | | | GVN, per Chris' comments. Adjust testcases to match. llvm-svn: 90304
* factor some code better.Chris Lattner2009-12-021-10/+10
| | | | llvm-svn: 90299
* reenable load address insertion in load pre. This allows us toChris Lattner2009-11-281-11/+19
| | | | | | | | | | | | | handle cases like this: void test(int N, double* G) { long j; for (j = 1; j < N - 1; j++) G[j+1] = G[j] + G[j+1]; } where G[1] isn't live into the loop. llvm-svn: 90041
* Enhance InsertPHITranslatedPointer to be able to return a list of newlyChris Lattner2009-11-281-1/+3
| | | | | | inserted instructions. No functionality change until someone starts using it. llvm-svn: 90039
* disable value insertion for now, I need to figure out howChris Lattner2009-11-271-1/+7
| | | | | | | to inform GVN about the newly inserted values. This fixes PR5631. llvm-svn: 90022
* Rework InsertPHITranslatedPointer to handle the recursive case, this Chris Lattner2009-11-271-24/+14
| | | | | | | fixes PR5630 and sets the stage for the next phase of goodness (testcase pending). llvm-svn: 90019
* teach GVN's load PRE to insert computations of the address in predecessorsChris Lattner2009-11-271-18/+26
| | | | | | | where it is not available. It's unclear how to get this inserted computation into GVN's scalar availability sets, Owen, help? :) llvm-svn: 89997
* Fix phi translation in load PRE to agree with the phi Chris Lattner2009-11-271-2/+8
| | | | | | | translation done by memdep, and reenable gep translation again. llvm-svn: 89992
* Add an option for running GVN with redundant load processing disabled.Dan Gohman2009-11-141-9/+23
| | | | llvm-svn: 88742
* Fix DenseMap iterator constness.Jeffrey Yasskin2009-11-101-4/+4
| | | | | | | | | | | | | | | | | | | This patch forbids implicit conversion of DenseMap::const_iterator to DenseMap::iterator which was possible because DenseMapIterator inherited (publicly) from DenseMapConstIterator. Conversion the other way around is now allowed as one may expect. The template DenseMapConstIterator is removed and the template parameter IsConst which specifies whether the iterator is constant is added to DenseMapIterator. Actually IsConst parameter is not necessary since the constness can be determined from KeyT but this is not relevant to the fix and can be addressed later. Patch by Victor Zverovich! llvm-svn: 86636
OpenPOWER on IntegriCloud