aboutsummaryrefslogtreecommitdiffstats
path: root/test/Transforms/GVN
Commit message (Collapse)AuthorAgeFilesLines
* Move the re-sort of invalidated NonLocalPointerDeps cache earlierChris Lattner2009-07-131-0/+67
| | | | | | | | | | | | so that all code paths get it. PR4256 was about a case where the phi translation loop would find all preds in the Visited cache, so it could get by without re-sorting the NonLocalPointerDeps cache. Fix this by resorting it earlier, there is no reason not to do this. This patch inspired by Jakub Staszak's patch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75476 91177308-0d34-0410-b5e6-96231b3b80d8
* This fixes a bug introduced in 72661, which canDale Johannesen2009-06-172-4/+77
| | | | | | | | | | | | | | | | | move loads back past a check that the load address is valid, see new testcase. The test that went in with 72661 has exactly this case, except that the conditional it's moving past is checking something else; I've settled for changing that test to reference a global, not a pointer. It may be possible to scan all the tests you pass and make sure none of them are checking any component of the address, but it's not trivial and I'm not trying to do that here. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73632 91177308-0d34-0410-b5e6-96231b3b80d8
* Be more aggressive in doing LoadPRE by tracing backwards when a block only hasOwen Anderson2009-05-311-0/+32
| | | | | | | | | a single predecessor. Patch by Jakub Staszak. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72661 91177308-0d34-0410-b5e6-96231b3b80d8
* make memdep use the getModRefInfo method for stores instead of theChris Lattner2009-05-251-0/+13
| | | | | | | | low-level alias() method, allowing it to reason more aggressively about pointers into constant memory. PR4189 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72403 91177308-0d34-0410-b5e6-96231b3b80d8
* Reapply r68211, with the miscompilations it caused fixed.Owen Anderson2009-04-011-0/+52
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68262 91177308-0d34-0410-b5e6-96231b3b80d8
* Revert r68172. It caused regressions inDan Gohman2009-04-011-52/+0
| | | | | | | | | Applications/Burg/burg Applications/ClamAV/clamscan and many other tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68211 91177308-0d34-0410-b5e6-96231b3b80d8
* Enhance GVN to propagate simple conditionals. This fixes PR3921.Owen Anderson2009-04-011-0/+52
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68172 91177308-0d34-0410-b5e6-96231b3b80d8
* Do not attempt to do parial redundancy elimination on void values.John Criswell2009-03-101-0/+82
| | | | | | | | Also fixed a punctuation error in the header comment. This fixes PR3775. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66542 91177308-0d34-0410-b5e6-96231b3b80d8
* Skip DbgInfoIntrinsic.Devang Patel2009-03-061-0/+66
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66244 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a test for r61358, which I forgot to add way back when.Owen Anderson2009-02-181-0/+193
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64904 91177308-0d34-0410-b5e6-96231b3b80d8
* fix two more cases where we could let the NLPDI cache get unsorted.Chris Lattner2009-01-231-0/+100
| | | | | | | With this, sqlite3 now passes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62839 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix PR3358, a really nasty bug where recursive phi translated Chris Lattner2009-01-221-0/+55
| | | | | | | | | analyses could be run without the caches properly sorted. This can fix all sorts of weirdness. Many thanks to Bill for coming up with the 'issorted' verification idea. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62757 91177308-0d34-0410-b5e6-96231b3b80d8
* fix PR3217: fully cached queries need to be verified against the Chris Lattner2008-12-161-0/+28
| | | | | | | | | visited set before they are used. If used, their blocks need to be added to the visited set so that subsequent queries don't use conflicting pointer values in the cache result blocks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61080 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a testcase for GCC PR 23455, which lpre handles now. Add someChris Lattner2008-12-152-1/+40
| | | | | | | comments about why we're not getting other cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61032 91177308-0d34-0410-b5e6-96231b3b80d8
* gvn now hoists this load out of the hot non-call path.Chris Lattner2008-12-151-0/+54
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61028 91177308-0d34-0410-b5e6-96231b3b80d8
* Adjust testcase to make it more stable across visitation order changes,Chris Lattner2008-12-151-1/+1
| | | | | | | unbreaking it after r61024. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61025 91177308-0d34-0410-b5e6-96231b3b80d8
* make GVN try to rename inputs to the resultant replaced values, whichChris Lattner2008-12-158-13/+13
| | | | | | | | cleans up the generated code a bit. This should have the added benefit of not randomly renaming functions/globals like my previous patch did. :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61023 91177308-0d34-0410-b5e6-96231b3b80d8
* Implement initial support for PHI translation in memdep. This means thatChris Lattner2008-12-153-0/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | memdep keeps track of how PHIs affect the pointer in dep queries, which allows it to eliminate the load in cases like rle-phi-translate.ll, which basically end up being: BB1: X = load P br BB3 BB2: Y = load Q br BB3 BB3: R = phi [P] [Q] load R turning "load R" into a phi of X/Y. In addition to additional exposed opportunities, this makes memdep safe in many cases that it wasn't before (which is required for load PRE) and also makes it substantially more efficient. For example, consider: bb1: // has many predecessors. P = some_operator() load P In this example, previously memdep would scan all the predecessors of BB1 to see if they had something that would mustalias P. In some cases (e.g. test/Transforms/GVN/rle-must-alias.ll) it would actually find them and end up eliminating something. In many other cases though, it would scan and not find anything useful. MemDep now stops at a block if the pointer is defined in that block and cannot be phi translated to predecessors. This causes it to miss the (rare) cases like rle-must-alias.ll, but makes it faster by not scanning tons of stuff that is unlikely to be useful. For example, this speeds up GVN as a whole from 3.928s to 2.448s (60%)!. IMO, scalar GVN should be enhanced to simplify the rle-must-alias pointer base anyway, which would allow the loads to be eliminated. In the future, this should be enhanced to phi translate through geps and bitcasts as well (as indicated by FIXMEs) making memdep even more powerful. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61022 91177308-0d34-0410-b5e6-96231b3b80d8
* another random testcase that shouldn't crash gvn and isChris Lattner2008-12-141-0/+18
| | | | | | | good for coverage with future changes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61011 91177308-0d34-0410-b5e6-96231b3b80d8
* RLE isn't smart enough to eliminate this safely yet.Chris Lattner2008-12-131-0/+21
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60994 91177308-0d34-0410-b5e6-96231b3b80d8
* rename some tests to be more uniform in naming convention.Chris Lattner2008-12-138-0/+0
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60988 91177308-0d34-0410-b5e6-96231b3b80d8
* gvn should never crash on this.Chris Lattner2008-12-131-0/+35
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60987 91177308-0d34-0410-b5e6-96231b3b80d8
* Temporarily revert r60973. It's inexplicably causing a failure when ↵Bill Wendling2008-12-136-7/+7
| | | | | | | | | | | | | | | | | | | | | | | self-hosting LLVM: llvm[2]: Linking Release executable opt (without symbols) ... Undefined symbols: "llvm::APFloat::IEEEsingle", referenced from: __ZN4llvm7APFloat10IEEEsingleE$non_lazy_ptr in libLLVMCore.a(Constants.o) __ZN4llvm7APFloat10IEEEsingleE$non_lazy_ptr in libLLVMCore.a(AsmWriter.o) __ZN4llvm7APFloat10IEEEsingleE$non_lazy_ptr in libLLVMCore.a(ConstantFold.o) "llvm::APFloat::IEEEdouble", referenced from: __ZN4llvm7APFloat10IEEEdoubleE$non_lazy_ptr in libLLVMCore.a(Constants.o) __ZN4llvm7APFloat10IEEEdoubleE$non_lazy_ptr in libLLVMCore.a(AsmWriter.o) __ZN4llvm7APFloat10IEEEdoubleE$non_lazy_ptr in libLLVMCore.a(ConstantFold.o) ld: symbol(s) not found This is in release mode. To replicate, compile llvm and llvm-gcc in optimized mode. Then build llvm, in optimized mode, with the newly created compiler. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60977 91177308-0d34-0410-b5e6-96231b3b80d8
* make RLE preserve the name of the load that it replaces. This is justChris Lattner2008-12-136-7/+7
| | | | | | | a pretification of the IR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60973 91177308-0d34-0410-b5e6-96231b3b80d8
* loosen up an assertion that isn't valid when called fromChris Lattner2008-12-091-0/+26
| | | | | | | | invalidateCachedPointerInfo. Thanks to Bill for sending me a testcase. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60805 91177308-0d34-0410-b5e6-96231b3b80d8
* Teach BasicAA::getModRefInfo(CallSite, CallSite) someChris Lattner2008-12-091-0/+29
| | | | | | | | | | | | | | | | | | | | | | | tricks based on readnone/readonly functions. Teach memdep to look past readonly calls when analyzing deps for a readonly call. This allows elimination of a few more calls from 403.gcc: before: 63 gvn - Number of instructions PRE'd 153986 gvn - Number of instructions deleted 50069 gvn - Number of loads deleted after: 63 gvn - Number of instructions PRE'd 153991 gvn - Number of instructions deleted 50069 gvn - Number of loads deleted 5 calls isn't much, but this adds plumbing for the next change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60794 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix test/Transforms/GVN/pre-load.llChris Lattner2008-12-051-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60594 91177308-0d34-0410-b5e6-96231b3b80d8
* Implement PRE of loads in the GVN pass with a pretty cheap and Chris Lattner2008-12-021-0/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | straight-forward implementation. This does not require any extra alias analysis queries beyond what we already do for non-local loads. Some programs really really like load PRE. For example, SPASS triggers this ~1000 times, ~300 times in 255.vortex, and ~1500 times on 403.gcc. The biggest limitation to the implementation is that it does not split critical edges. This is a huge killer on many programs and should be addressed after the initial patch is enabled by default. The implementation of this should incidentally speed up rejection of non-local loads because it avoids creating the repl densemap in cases when it won't be used for fully redundant loads. This is currently disabled by default. Before I turn this on, I need to fix a couple of miscompilations in the testsuite, look at compile time performance numbers, and look at perf impact. This is pretty close to ready though. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60408 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a test for my previous PRE fix.Owen Anderson2008-12-021-0/+27
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60394 91177308-0d34-0410-b5e6-96231b3b80d8
* testcase for my previous commit.Chris Lattner2008-12-011-0/+42
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60315 91177308-0d34-0410-b5e6-96231b3b80d8
* don't require GVN to work on dead values, just make the Chris Lattner2008-11-291-5/+4
| | | | | | | test return the loaded value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60252 91177308-0d34-0410-b5e6-96231b3b80d8
* A better fix for PR2503 that doesn't pessimize GVN in the presence of ↵Owen Anderson2008-07-021-0/+36
| | | | | | unreachable blocks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53032 91177308-0d34-0410-b5e6-96231b3b80d8
* Use the -enable-pre flag so this test doesn't fail.Owen Anderson2008-06-261-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52784 91177308-0d34-0410-b5e6-96231b3b80d8
* Add local PRE to GVN. This only operates in cases where it would not ↵Owen Anderson2008-06-181-0/+18
| | | | | | | | | increase code size, namely when the instantiated expression would only need to be created in one predecessor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52471 91177308-0d34-0410-b5e6-96231b3b80d8
* sabre brings to my attention that the 'tr' suffix is also obsoleteGabor Greif2008-05-201-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51349 91177308-0d34-0410-b5e6-96231b3b80d8
* Rename the last test with .llx extension to .ll, resolve duplicate test by ↵Gabor Greif2008-05-201-1/+1
| | | | | | renaming to isnan2. Now that no test has llx ending there is no need to search for them from dg.exp too. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51328 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a testcase for non-local CSE of read-only calls.Owen Anderson2008-05-131-0/+49
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51025 91177308-0d34-0410-b5e6-96231b3b80d8
* Add testcase for PR2213.Owen Anderson2008-04-111-0/+12
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49517 91177308-0d34-0410-b5e6-96231b3b80d8
* Factor a bunch of functionality related to memcpy and memset transforms out of Owen Anderson2008-04-096-257/+0
| | | | | | | GVN and into its own pass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49419 91177308-0d34-0410-b5e6-96231b3b80d8
* add a testcase for forming memset from noncontiguous stores.Chris Lattner2008-03-292-1/+100
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48938 91177308-0d34-0410-b5e6-96231b3b80d8
* apparently tclsh doesn't lex like bash. Weird.Chris Lattner2008-03-241-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48732 91177308-0d34-0410-b5e6-96231b3b80d8
* pass the option so this test tests the right thing.Chris Lattner2008-03-241-2/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48731 91177308-0d34-0410-b5e6-96231b3b80d8
* Use normal naming convention for test.Owen Anderson2008-03-221-0/+0
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48693 91177308-0d34-0410-b5e6-96231b3b80d8
* implement an initial hack at a straight-line store -> memset optimization.Chris Lattner2008-03-221-0/+55
| | | | | | | | | | This fires dozens of times across spec and multisource, but I don't know if it actually speeds stuff up. Hopefully the testers will show something nice :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48680 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix a bug in GVN that Duncan noticed, where we potentially need to insert a Owen Anderson2008-03-131-0/+19
| | | | | | | pointer bitcast when performing return slot optimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48343 91177308-0d34-0410-b5e6-96231b3b80d8
* Improve the return slot optimization to be both more aggressive (not limited ↵Owen Anderson2008-03-121-2/+4
| | | | | | | | | | to sret parameters), and safer (when the passed pointer might be invalid). Thanks to Duncan and Chris for the idea behind this, and extra thanks to Duncan for helping me work out the trap-safety. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48280 91177308-0d34-0410-b5e6-96231b3b80d8
* Add PR number to testcase.Owen Anderson2008-02-261-0/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47640 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix an issue where GVN had the sizes of the two memcpy's reverse, resultingOwen Anderson2008-02-261-0/+45
| | | | | | | in an invalid transformation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47639 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix an issue where GVN was performing the return slot optimization when it wasOwen Anderson2008-02-251-0/+32
| | | | | | | | not safe. This is fixed by more aggressively checking that the return slot is not used elsewhere in the function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47544 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix an issue where GVN would try to use an instruction before its definition ↵Owen Anderson2008-02-252-1/+26
| | | | | | when performing return slot optimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47541 91177308-0d34-0410-b5e6-96231b3b80d8