Micah Villmow
cdfe20b97f
Move TargetData to DataLayout.
...
llvm-svn: 165402
2012-10-08 16:38:25 +00:00
Nick Lewycky
42bca056e0
Don't forget that strcpy and friends return a pointer to the destination, so
...
it's not a dead store if that pointer is used. Whoops!
llvm-svn: 164583
2012-09-25 01:55:59 +00:00
Nick Lewycky
627d217727
Remove unused name of variable to quiet a warning. Also canonicalize a
...
declaration to use the same form as in the rest of the file. No functionality
change.
llvm-svn: 164576
2012-09-24 23:47:23 +00:00
Nick Lewycky
9f4729d331
Teach DSE that strcpy, strncpy, strcat and strncat are all stores which may be
...
dead.
llvm-svn: 164561
2012-09-24 22:09:10 +00:00
Nick Lewycky
135ac9ac89
Move all the calls to AA.getTargetLibraryInfo() to using a TLI member variable.
...
No functionality change.
llvm-svn: 164560
2012-09-24 22:07:09 +00:00
Benjamin Kramer
2b11eb0729
DSE: Poking holes into a SetVector is expensive, avoid it if possible.
...
llvm-svn: 163480
2012-09-09 16:44:05 +00:00
Benjamin Kramer
8bcc971174
Make MemoryBuiltins aware of TargetLibraryInfo.
...
This disables malloc-specific optimization when -fno-builtin (or -ffreestanding)
is specified. This has been a problem for a long time but became more severe
with the recent memory builtin improvements.
Since the memory builtin functions are used everywhere, this required passing
TLI in many places. This means that functions that now have an optional TLI
argument, like RecursivelyDeleteTriviallyDeadFunctions, won't remove dead
mallocs anymore if the TLI argument is missing. I've updated most passes to do
the right thing.
Fixes PR13694 and probably others.
llvm-svn: 162841
2012-08-29 15:32:21 +00:00
Craig Topper
2a40418a99
Change greater than to greater than or equal so that an identical sized store to the same offset is treated as completing overwriting.
...
llvm-svn: 161857
2012-08-14 07:32:05 +00:00
Eli Friedman
08ec0a8122
isAllocLikeFn is allowed to return true for functions which read memory; make
...
sure we account for that correctly in DeadStoreElimination. Fixes a regression
from r158919. PR13547.
llvm-svn: 161468
2012-08-08 02:17:32 +00:00
Nadav Rotem
465834c85f
Clean whitespaces.
...
llvm-svn: 160668
2012-07-24 10:51:42 +00:00
Nuno Lopes
55fff83422
refactor the MemoryBuiltin analysis:
...
- provide more extensive set of functions to detect library allocation functions (e.g., malloc, calloc, strdup, etc)
- provide an API to compute the size and offset of an object pointed by
Move a few clients (GVN, AA, instcombine, ...) to the new API.
This implementation is a lot more aggressive than each of the custom implementations being replaced.
Patch reviewed by Nick Lewycky and Chandler Carruth, thanks.
llvm-svn: 158919
2012-06-21 15:45:28 +00:00
Evan Cheng
773b2cd63c
It's not deterministic to iterate over SmallPtrSet. Replace it with SmallSetVector. Patch by Daniel Reynaud. rdar://11671029
...
llvm-svn: 158594
2012-06-16 04:28:11 +00:00
Dan Gohman
ed7c24e2d9
Teach DeadStoreElimination to eliminate exit-block stores with phi addresses.
...
llvm-svn: 156558
2012-05-10 18:57:38 +00:00
Nuno Lopes
300d629924
teach DSE and isInstructionTriviallyDead() about calloc
...
llvm-svn: 156553
2012-05-10 17:14:00 +00:00
Pete Cooper
39b5255df4
Reverted r152620 - DSE: Shorten memset when a later store overwrites the start of it. There were all sorts of buildbot issues
...
llvm-svn: 151621
2012-02-28 05:06:24 +00:00
Pete Cooper
f3862f91de
DSE: Shorten memset when a later store overwrites the start of it
...
llvm-svn: 151620
2012-02-28 04:27:10 +00:00
Craig Topper
a2886c21d9
Convert assert(0) to llvm_unreachable
...
llvm-svn: 149967
2012-02-07 05:05:23 +00:00
Nick Lewycky
fe970725cc
Fix infinite loop in DSE when deleting a free in a reachable loop that's also
...
trivially infinite.
llvm-svn: 146197
2011-12-08 22:36:35 +00:00
Pete Cooper
e03fe83d98
Fixed deadstoreelimination bug where negative indices were incorrectly causing the optimisation to occur
...
Turns out long long + unsigned long long is unsigned. Doh!
Fixes http://llvm.org/bugs/show_bug.cgi?id=11455
llvm-svn: 145731
2011-12-03 00:04:30 +00:00
Nick Lewycky
c7f1e7993c
Merge isObjectPointerWithTrustworthySize with getPointerSize. Use it when
...
looking at the size of the pointee. Fixes PR11390!
llvm-svn: 144773
2011-11-16 03:49:48 +00:00
Pete Cooper
a4237c380e
Fixed bug in DeadStoreElimination commit r144239
...
Size of data being pointed to wasn't always being checked so some small writes were killing big writes
Fixes <rdar://problem/10426753>
llvm-svn: 144312
2011-11-10 20:22:08 +00:00
Pete Cooper
856977cb15
DeadStoreElimination can now trim the size of a store if the end of the store is dead.
...
Currently checks alignment and killing stores on a power of 2 boundary as this is likely
to trim the size of the earlier store without breaking large vector stores into scalar ones.
Fixes <rdar://problem/10140300>
llvm-svn: 144239
2011-11-09 23:07:35 +00:00
Nick Lewycky
f2905afe62
Do simple cross-block DSE when we encounter a free statement. Fixes PR11240.
...
llvm-svn: 143808
2011-11-05 10:48:42 +00:00
Daniel Dunbar
e6d40de414
Speculatively revert "DeadStoreElimination can now trim the size of a store if
...
the end of it is dead.", which appears to break bootstrapping LLVM.
llvm-svn: 143668
2011-11-04 00:48:26 +00:00
Pete Cooper
8a95aedb5d
DeadStoreElimination can now trim the size of a store if the end of it is dead.
...
Only currently done if the later store is writing to a power of 2 address or
has the same alignment as the earlier store as then its likely to not break up
large stores into smaller ones
Fixes <rdar://problem/10140300>
llvm-svn: 143630
2011-11-03 18:01:56 +00:00
Nick Lewycky
32f8051d66
A non-escaping malloc in the entry block is not unlike an alloca. Do dead-store
...
elimination on them too.
llvm-svn: 142735
2011-10-22 21:59:35 +00:00
Eli Friedman
c1702c8f22
Enhance the memdep interface so that users can tell the difference between a dependency which cannot be calculated and a path reaching the entry point of the function. This patch introduces isNonFuncLocal, which replaces isUnknown in some cases.
...
Patch by Xiaoyi Guo.
llvm-svn: 141896
2011-10-13 22:14:57 +00:00
Eli Friedman
72a93e5e9b
Add comment to clarify the behavior of a helper in DSE.
...
llvm-svn: 139571
2011-09-13 01:28:59 +00:00
Owen Anderson
58704ee442
Try again at r138809 (make DSE more aggressive in removing dead stores at the end of a function), now with less deleting stores before memcpy's.
...
llvm-svn: 139150
2011-09-06 18:14:09 +00:00
Owen Anderson
e316e5b2ad
Speculatively revert r138809 in an attempt to fix DragonEgg.
...
llvm-svn: 138829
2011-08-30 21:11:06 +00:00
Owen Anderson
d708ec4c6a
When walking backwards to eliminate final stores to allocas at the end of a function, encountering an unrelated store should not cause us to give up like encountering a load does.
...
llvm-svn: 138809
2011-08-30 18:51:55 +00:00
Eli Friedman
9a468153e1
Atomic load/store handling for the passes using memdep (GVN, DSE, memcpyopt).
...
llvm-svn: 137888
2011-08-17 22:22:24 +00:00
Eli Friedman
89b694b096
Misc mid-level changes for new 'fence' instruction.
...
llvm-svn: 136205
2011-07-27 01:08:30 +00:00
Chris Lattner
229907cd11
land David Blaikie's patch to de-constify Type, with a few tweaks.
...
llvm-svn: 135375
2011-07-18 04:54:35 +00:00
Eli Friedman
7d58bc7bc0
Add "unknown" results for memdep, which mean "I don't know whether a dependence for the given instruction exists in the given block". This cleans up all the existing hacks in memdep which represent this concept by returning clobber with various unrelated instructions.
...
llvm-svn: 133031
2011-06-15 00:47:34 +00:00
Chris Lattner
0ab5e2cded
Fix a ton of comment typos found by codespell. Patch by
...
Luis Felipe Strano Moraes!
llvm-svn: 129558
2011-04-15 05:18:47 +00:00
Bill Wendling
5034159c5f
* The DSE code that tested for overlapping needed to take into account the fact
...
that one of the numbers is signed while the other is unsigned. This could lead
to a wrong result when the signed was promoted to an unsigned int.
* Add the data layout line to the testcase so that it will test the appropriate
thing.
Patch by David Terei!
llvm-svn: 128577
2011-03-30 21:37:19 +00:00
Benjamin Kramer
e41395ac24
DSE: Remove an early exit optimization that depended on the ordering of a SmallPtrSet.
...
Fixes PR9569 and will hopefully make selfhost on ASLR-enabled systems more deterministic.
llvm-svn: 128482
2011-03-29 20:28:57 +00:00
Bill Wendling
b5139920d6
Simplification noticed by Frits.
...
llvm-svn: 128333
2011-03-26 09:32:07 +00:00
Bill Wendling
19f33b9393
Rework the logic that determines if a store completely overlaps an ealier store.
...
There are two ways that a later store can comletely overlap a previous store:
1. They both start at the same offset, but the earlier store's size is <= the
later's size, or
2. The earlier store's offset is > the later's offset, but it's offset + size
doesn't extend past the later's offset + size.
llvm-svn: 128332
2011-03-26 08:02:59 +00:00
Bill Wendling
db40b5c899
PR9561: A store with a negative offset (via GEP) could erroniously say that it
...
completely overlaps a previous store, thus mistakenly deleting that store. Check
for this condition.
llvm-svn: 128319
2011-03-26 01:20:37 +00:00
Dan Gohman
0f124e1987
Give GetUnderlyingObject a TargetData, to keep it in sync
...
with BasicAA's DecomposeGEPExpression, which recently began
using a TargetData. This fixes PR8968, though the testcase
is awkward to reduce.
Also, update several off GetUnderlyingObject's users
which happen to have a TargetData handy to pass it in.
llvm-svn: 124134
2011-01-24 18:53:32 +00:00
Cameron Zwarich
b703654edc
Remove code for updating dominance frontiers and some outdated references to
...
dominance and post-dominance frontiers.
llvm-svn: 123725
2011-01-18 04:11:31 +00:00
Dan Gohman
a4fcd2418d
Move Value::getUnderlyingObject to be a standalone
...
function so that it can live in Analysis instead of
VMCore.
llvm-svn: 121885
2010-12-15 20:02:24 +00:00
Chris Lattner
4dc53e37d9
Use a stronger predicate here, pointed out by Duncan
...
llvm-svn: 121040
2010-12-06 21:48:10 +00:00
Chris Lattner
ca335e38cf
add some DEBUG statements.
...
llvm-svn: 121038
2010-12-06 21:13:51 +00:00
Chris Lattner
94fbdf3814
Fix PR8728, a miscompilation I recently introduced. When optimizing
...
memcpy's like:
memcpy(A, B)
memcpy(A, C)
we cannot delete the first memcpy as dead if A and C might be aliases.
If so, we actually get:
memcpy(A, B)
memcpy(A, A)
which is not correct to transform into:
memcpy(A, A)
This patch was heavily influenced by Jakub Staszak's patch in PR8728, thanks
Jakub!
llvm-svn: 120974
2010-12-06 01:48:06 +00:00
Chris Lattner
903add84d9
Enhance DSE to handle the variable index case in PR8657.
...
llvm-svn: 120498
2010-11-30 23:43:23 +00:00
Chris Lattner
c0f3379ae0
teach DSE to use GetPointerBaseWithConstantOffset to analyze
...
may-aliasing stores that partially overlap with different base
pointers. This implements PR6043 and the non-variable part of
PR8657
llvm-svn: 120485
2010-11-30 23:05:20 +00:00
Chris Lattner
6712251f41
Make DeleteDeadInstruction be a static function, move some code around.
...
llvm-svn: 120471
2010-11-30 21:58:14 +00:00