History log of /external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
dce4a407a24b04eebc6a376f8e62b41aaa7b071f 29-May-2014 Stephen Hines <srhines@google.com> Update LLVM for 3.5 rebase (r209712).

Change-Id: I149556c940fb7dc92d075273c87ff584f400941f
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
36b56886974eae4f9c5ebc96befd3e7bfe5de338 24-Apr-2014 Stephen Hines <srhines@google.com> Update to LLVM 3.5a.

Change-Id: Ifadecab779f128e62e430c2b4f6ddd84953ed617
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
2999b2f2ccc3a48c834dffe19bb39c67641a3afd 14-Nov-2013 Yunzhong Gao <Yunzhong_Gao@playstation.sony.com> Fixing a heisenbug where the memory dependence analysis behaves differently
with and without -g.

Adding a test case to make sure that the threshold used in the memory
dependence analysis is respected. The test case also checks that debug
intrinsics are not counted towards this threshold.

Differential Revision: http://llvm-reviews.chandlerc.com/D2141



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194646 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
45dec48dc3725a8e5ca5cfdeeed941eea2e456f1 11-Jun-2013 Nick Lewycky <nicholas@mxc.ca> Fix xemacs mode line, don't put them in .cpp files (just header files). No
functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183709 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
453f4f01302f00651aae2fc7658f6e23a2beadb0 15-May-2013 David Blaikie <dblaikie@gmail.com> Use only explicit bool conversion operators

BitVector/SmallBitVector::reference::operator bool remain implicit since
they model more exactly a bool, rather than something else that can be
boolean tested.

The most common (non-buggy) case are where such objects are used as
return expressions in bool-returning functions or as boolean function
arguments. In those cases I've used (& added if necessary) a named
function to provide the equivalent (or sometimes negative, depending on
convenient wording) test.

One behavior change (YAMLParser) was made, though no test case is
included as I'm not sure how to reach that code path. Essentially any
comparison of llvm::yaml::document_iterators would be invalid if neither
iterator was at the end.

This helped uncover a couple of bugs in Clang - test cases provided for
those in a separate commit along with similar changes to `operator bool`
instances in Clang.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181868 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8b9dc21d6f12a0251cdb6116c2297c13d77073d5 06-May-2013 Matt Arsenault <Matthew.Arsenault@amd.com> Fix unchecked uses of DominatorTree in MemoryDependenceAnalysis.

Use unknown results for places where it would be needed

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181176 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d58b50b99b04bcb8199c2b0273618b6a37d61015 17-Apr-2013 Bill Wendling <isanbard@gmail.com> A limit of 500 was still a bit too high for some tests.

PR15000 has a testcase where the time to compile was bordering on 30s. When I
dropped the limit value to 100, it became a much more managable 6s. The compile
time seems to increase in a roughly linear fashion based on increasing the limit
value. (See the runtimes below.)

So, let's lower the limit to 100 so that they can get a more reasonable compile
time.

Limit Value Time
----------- ----
10 0.9744s
20 1.8035s
30 2.3618s
40 2.9814s
50 3.6988s
60 4.5486s
70 4.9314s
80 5.8012s
90 6.4246s
100 7.0852s
110 7.6634s
120 8.3553s
130 9.0552s
140 9.6820s
150 9.8804s
160 10.8901s
170 10.9855s
180 12.0114s
190 12.6816s
200 13.2754s
210 13.9942s
220 13.8097s
230 14.3272s
240 15.7753s
250 15.6673s
260 16.0541s
270 16.7625s
280 17.3823s
290 18.8213s
300 18.6120s
310 20.0333s
320 19.5165s
330 20.2505s
340 20.7068s
350 21.1833s
360 22.9216s
370 22.2152s
380 23.9390s
390 23.4609s
400 24.0426s
410 24.6410s
420 26.5208s
430 27.7155s
440 26.4142s
450 28.5646s
460 27.3494s
470 29.7255s
480 29.4646s
490 30.5001s


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179713 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7d4ff60b55772c731688cd27f9252e31ae964f84 29-Mar-2013 Matt Arsenault <Matthew.Arsenault@amd.com> Fix loop style

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178355 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7f19e5db5f4f730f72c248282b7c00e6cdaf6782 21-Mar-2013 Jakub Staszak <kubastaszak@gmail.com> Remove 'else' after 'return'.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177607 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6178e5f50c0c8be26913cd93238a5035a39cdf37 20-Mar-2013 Jakub Staszak <kubastaszak@gmail.com> Remove trailing spaces.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177584 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
985dac65791b9f6f631bdd51c18fe66592a67469 06-Mar-2013 Shuxin Yang <shuxin.llvm@gmail.com> Memory Dependence Analysis (not mem-dep test) take advantage of "invariant.load" metadata.

The "invariant.load" metadata indicates the memory unit being accessed is immutable.
A load annotated with this metadata can be moved across any store.

As I am not sure if it is legal to move such loads across barrier/fence, this
change dose not allow such transformation.

rdar://11311484

Thank Arnold for code review.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176562 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8eec41fc778e99d42172a7f6de76faa43a6d8847 26-Feb-2013 Kostya Serebryany <kcc@google.com> Unify clang/llvm attributes for asan/tsan/msan (LLVM part)

These are two related changes (one in llvm, one in clang).
LLVM:
- rename address_safety => sanitize_address (the enum value is the same, so we preserve binary compatibility with old bitcode)
- rename thread_safety => sanitize_thread
- rename no_uninitialized_checks -> sanitize_memory

CLANG:
- add __attribute__((no_sanitize_address)) as a synonym for __attribute__((no_address_safety_analysis))
- add __attribute__((no_sanitize_thread))
- add __attribute__((no_sanitize_memory))

for S in address thread memory
If -fsanitize=S is present and __attribute__((no_sanitize_S)) is not
set llvm attribute sanitize_S


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176075 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7bce462c15356229e13d78d14560feaac30a0f5f 13-Feb-2013 Kostya Serebryany <kcc@google.com> [tsan] disable load widening in ThreadSanitizer mode

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175034 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
a070d2a0355c4993240b5206ebc1d517c151331d 31-Jan-2013 Dan Gohman <dan433584@gmail.com> Change GetPointerBaseWithConstantOffset's DataLayout argument from a
reference to a pointer, so that it can handle the case where DataLayout
is not available and behave conservatively.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174024 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0b8c9a80f20772c3793201ab5b251d3520b9cea3 02-Jan-2013 Chandler Carruth <chandlerc@gmail.com> Move all of the header files which are involved in modelling the LLVM IR
into their new header subdirectory: include/llvm/IR. This matches the
directory structure of lib, and begins to correct a long standing point
of file layout clutter in LLVM.

There are still more header files to move here, but I wanted to handle
them in separate commits to make tracking what files make sense at each
layer easier.

The only really questionable files here are the target intrinsic
tablegen files. But that's a battle I'd rather not fight today.

I've updated both CMake and Makefile build systems (I think, and my
tests think, but I may have missed something).

I've also re-sorted the includes throughout the project. I'll be
committing updates to Clang, DragonEgg, and Polly momentarily.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171366 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
831737d329a727f53a1fb0572f7b7a8127208881 30-Dec-2012 Bill Wendling <isanbard@gmail.com> Remove the Function::getFnAttributes method in favor of using the AttributeSet
directly.

This is in preparation for removing the use of the 'Attribute' class as a
collection of attributes. That will shift to the AttributeSet class instead.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171253 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
034b94b17006f51722886b0f2283fb6fb19aca1f 19-Dec-2012 Bill Wendling <isanbard@gmail.com> Rename the 'Attributes' class to 'Attribute'. It's going to represent a single attribute in the future.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170502 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d04a8d4b33ff316ca4cf961e06c9e312eff8e64f 03-Dec-2012 Chandler Carruth <chandlerc@gmail.com> Use the new script to sort the includes of every file under lib.

Sooooo many of these had incorrect or strange main module includes.
I have manually inspected all of these, and fixed the main module
include to be the nearest plausible thing I could find. If you own or
care about any of these source files, I encourage you to take some time
and check that these edits were sensible. I can't have broken anything
(I strictly added headers, and reordered them, never removed), but they
may not be the headers you'd really like to identify as containing the
API being implemented.

Many forward declarations and missing includes were added to a header
files to allow them to parse cleanly when included first. The main
module rule does in fact have its merits. =]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169131 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
b846719663fb7f7847dacf956696ef257ab88d8e 23-Oct-2012 Bill Wendling <isanbard@gmail.com> Ignore unreachable blocks when doing memory dependence analysis on non-local
loads. It's not really profitable and may result in GVN going into an infinite
loop when it hits constructs like this:

%x = gep %some.type %x, ...

Found via an LTO build of LLVM.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166490 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6765834754cbb3cb0f15b4b15e98c5e73fa50066 09-Oct-2012 Bill Wendling <isanbard@gmail.com> Create enums for the different attributes.

We use the enums to query whether an Attributes object has that attribute. The
opaque layer is responsible for knowing where that specific attribute is stored.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165488 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
3574eca1b02600bac4e625297f4ecf745f4c4f32 08-Oct-2012 Micah Villmow <villmow@gmail.com> Move TargetData to DataLayout.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165402 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
2c189061184925c6a8ecbb5a19e648b230a41c0e 26-Sep-2012 Bill Wendling <isanbard@gmail.com> Remove the `hasFnAttr' method from Function.

The hasFnAttr method has been replaced by querying the Attributes explicitly. No
intended functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164725 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
2d5c28da0d14883cd0cd6fcf38d7e28040b634c0 04-Sep-2012 Bob Wilson <bob.wilson@apple.com> Be conservative about allocations that may alias the accessed pointer.

If an allocation has a must-alias relation to the access pointer, we treat it
as a Def. Otherwise, without this check, the code here was just skipping over
the allocation call and ignoring it. I noticed this by inspection and don't
have a specific testcase that it breaks, but it seems like we need to treat
a may-alias allocation as a Clobber.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163127 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
84451a110da981adfff2792c3aee5df322864da6 03-Sep-2012 Bob Wilson <bob.wilson@apple.com> Fix more fallout from r158919, similar to PR13547.

This code used to only handle malloc-like calls, which do not read memory.
r158919 changed it to check isNoAliasFn(), which includes strdup-like and
realloc-like calls, but it was not checking for dependencies on the memory
read by those calls.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163106 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6 29-Aug-2012 Benjamin Kramer <benny.kra@googlemail.com> 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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162841 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8dff60e96a0b3044628511b0e43a59788de56b9d 14-Aug-2012 Nadav Rotem <nrotem@apple.com> MemoryDependenceAnalysis attempts to find the first memory dependency for function calls.
Currently, if GetLocation reports that it did not find a valid pointer (this is the case for volatile load/stores),
we ignore the result. This patch adds code to handle the cases where we did not obtain a valid pointer.

rdar://11872864 PR12899



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161802 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9e72a79ef4a9fcda482ce0b0e1f0bd6a4f16cffd 21-Jun-2012 Nuno Lopes <nunoplopes@sapo.pt> 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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158919 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d9b0b025612992a0b724eeca8bdf10b1d7a5c355 02-Jun-2012 Benjamin Kramer <benny.kra@googlemail.com> Fix typos found by http://github.com/lyda/misspell-check

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157885 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
3a884f5c17ac32e34e7e62b4602a0d73eeda1ce8 14-May-2012 Chad Rosier <mcrosier@apple.com> Move the capture analysis from MemoryDependencyAnalysis to a more general place
so that it can be reused in MemCpyOptimizer. This analysis is needed to remove
an unnecessary memcpy when returning a struct into a local variable.
rdar://11341081
PR12686


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156776 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
774394c68abc88a0d49f207abc1d4da9bd0675b8 12-May-2012 Chad Rosier <mcrosier@apple.com> Hoist simpler checks above llvm::PointerMayBeCaptured. No functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156687 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5465c9422f3d755f42c49fa1f635962412470e96 26-Feb-2012 Rafael Espindola <rafael.espindola@gmail.com> Don't call dominates on unreachable instructions. Should fix the dragonegg
build. Testcase is still reducing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151474 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0ca032b03dc3a862670461651b3a950d1f14991b 06-Feb-2012 Kostya Serebryany <kcc@google.com> The patch resolves the conflict between AddressSanitizer and load widening (GVN).
The problem initially reported by Mozilla folks (http://code.google.com/p/address-sanitizer/issues/detail?id=20),
but it also prevents us from enabling LLVM bootstrap with AddressSanitizer.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149925 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4d6ccb5f68cd7c6418a209f1fa4dbade569e4493 20-Jan-2012 David Blaikie <dblaikie@gmail.com> More dead code removal (using -Wunreachable-code)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148578 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
b48a18903a5769f0ecb295db069252576b1388b0 29-Dec-2011 Nick Lewycky <nicholas@mxc.ca> Change CaptureTracking to pass a Use* instead of a Value* when a value is
captured. This allows the tracker to look at the specific use, which may be
especially interesting for function calls.

Use this to fix 'nocapture' deduction in FunctionAttrs. The existing one does
not iterate until a fixpoint and does not guarantee that it produces the same
result regardless of iteration order. The new implementation builds up a graph
of how arguments are passed from function to function, and uses a bottom-up walk
on the argument-SCCs to assign nocapture. This gets us nocapture more often, and
does so rather efficiently and independent of iteration order.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147327 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9f47fb66370e5513bb9f737923e8cb476088acec 21-Nov-2011 Nick Lewycky <nicholas@mxc.ca> Fix crasher in GVN due to my recent capture tracking changes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145047 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7912ef97ffde3ab3334143ddfb4cafdf04e2ebfc 20-Nov-2011 Nick Lewycky <nicholas@mxc.ca> Less template, more virtual! Refactoring suggested by Chris in code review.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145014 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
173862e5468fbcf4b022b9088d2c81b25c2d60c5 20-Nov-2011 Nick Lewycky <nicholas@mxc.ca> Refactor code to use new attribute getters on CallSite for NoCapture and ByVal.
Suggested in code review by Eli.

That code in InstCombine looks kinda suspicious.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145013 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
88990248d3bfb2f265fcf27f8a032ac0eb14d09f 14-Nov-2011 Nick Lewycky <nicholas@mxc.ca> Refactor capture tracking (which already had a couple flags for whether returns
and stores capture) to permit the caller to see each capture point and decide
whether to continue looking.

Use this inside memdep to do an analysis that basicaa won't do. This lets us
solve another devirtualization case, fixing PR8908!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144580 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
b414142036012dd9432c4e8c5fef09d4d49fcc22 14-Oct-2011 Eli Friedman <eli.friedman@gmail.com> 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.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141896 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
667ccf231b57857ea9e36f1d93bd895242d58284 15-Aug-2011 Eli Friedman <eli.friedman@gmail.com> Misc analysis passes that need to be aware of atomic load/store.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137650 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
db125cfaf57cc83e7dd7453de2d509bc8efd0e5e 18-Jul-2011 Chris Lattner <sabre@nondot.org> land David Blaikie's patch to de-constify Type, with a few tweaks.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135375 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
992205ac71e214562beffd1e84716f0f7ccb3bd9 16-Jun-2011 Eli Friedman <eli.friedman@gmail.com> Add a limit to the number of instructions memdep will scan in a single block. This prevents (at least in some cases) O(N^2) runtime in passes like DSE.

The limit in this patch is probably too high, but it is enough to stop DSE from going completely insane on a testcase I have (which has a single block with around 50,000 non-aliasing stores in it).

rdar://9471075



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133111 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
a990e071f2f29ba326b97a4288207a2c406c5b66 15-Jun-2011 Eli Friedman <eli.friedman@gmail.com> 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.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133031 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
a3351a0e5db0b5b2c53920f2f15d3e862fecfad3 04-Jun-2011 Dan Gohman <gohman@apple.com> Disable the main feature of 130180, the elimination of loads that are
redundant with partially-aliasing loads.

When computing what portion of a clobbering load value is needed,
it doesn't consider phi-translation which may have occurred
between the clobbing load and the redundant load.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132631 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7c6a5a2c397bb3759ed5df80a2ff9a4fdf17675a 02-Jun-2011 Eli Friedman <eli.friedman@gmail.com> When marking a block as being unanalyzable, use "Clobber" on the terminator instead of the first instruction in the block. This is a bit of a hack; "Clobber" isn't really the right marking in the first place. memdep doesn't really have any way of properly expressing "unanalyzable" at the moment. Using it on the terminator is much less ambiguous than using it on an arbitrary instruction, though.

In the given testcase, the "Clobber" was pointing to a load, and GVN was incorrectly assuming that meant that the "Clobber" load overlapped the load being analyzed (when they are actually unrelated).

The included testcase tests both this commit and r132434.

Part two of rdar://9429882. (r132434 was mislabeled.)



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132442 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
fc09797426894602355d248edb174676ec7fd560 02-Jun-2011 Eli Friedman <eli.friedman@gmail.com> In MemoryDependenceAnalysis::getNonLocalPointerDepFromBB, if a given block is is deemed unanalyzable (and we execute one of the "goto PredTranslationFailure" statements), make sure we don't put information about the predecessors of that block into the returned data structures; this can lead to, among other things, extraneous results (which will confuse passes using memdep). Fixes an assert in GVN compiling ruby. Part of rdar://problem/9521954 .

Testcase coming up soon.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132434 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
e1edb17bc3c606dd2e9c4e1b55da8e13817e5e09 17-May-2011 Owen Anderson <resistor@mac.com> @llvm.lifetime.begin acts as a load, not @llvm.lifetime.end.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131437 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4034e14985af013f71f7884fa275415a3be27778 28-Apr-2011 Chris Lattner <sabre@nondot.org> teach GVN to widen integer loads when they are overaligned, when doing an
wider load would allow elimination of subsequent loads, and when the wider
load is still a native integer type. This eliminates a ton of loads on
various benchmarks involving struct fields, though it is somewhat hobbled
by clang not being very aggressive about field alignment.

This is yet another step along the way towards resolving PR6627.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130390 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
cb5fd743a95898ddefd75b6d104f5e91c0d50b23 27-Apr-2011 Chris Lattner <sabre@nondot.org> Enhance memdep to return clobber relation between noalias loads when
an earlier load could be widened to encompass a later load. For example,
if we see:

X = load i8* P, align 4
Y = load i8* (P+3), align 1

and we have a 32-bit native integer type, we can widen the former load
to i32 which then makes the second load redundant. GVN can't actually
do anything with this load/load relation yet, so this isn't testable, but
it is the next step to resolving PR6627, and a fairly general class of
"merge neighboring loads" missed optimizations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130250 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d5c7f7cb5e15a7382cd163cb191db898510226c8 26-Apr-2011 Chris Lattner <sabre@nondot.org> use AA::isMustAlias to simplify some calls.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130248 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
130131ea7871c8774e79116f5c845fff37f143c5 26-Apr-2011 Chris Lattner <sabre@nondot.org> remove support for llvm.invariant.end from memdep. It is a
work-in-progress that is not progressing, and it has issues.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130247 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1f821512fc1441480b3355305e0da5267073fe1c 26-Apr-2011 Chris Lattner <sabre@nondot.org> Enhance MemDep: When alias analysis returns a partial alias result,
return it as a clobber. This allows GVN to do smart things.

Enhance GVN to be smart about the case when a small load is clobbered
by a larger overlapping load. In this case, forward the value. This
allows us to compile stuff like this:

int test(void *P) {
int tmp = *(unsigned int*)P;
return tmp+*((unsigned char*)P+1);
}

into:

_test: ## @test
movl (%rdi), %ecx
movzbl %ch, %eax
addl %ecx, %eax
ret

which has one load. We already handled the case where the smaller
load was from a must-aliased base pointer.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130180 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
bd1801b5553c8be3960255a92738464e0010b6f6 24-Jan-2011 Dan Gohman <gohman@apple.com> 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124134 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f7624bc6dd57d5b4deea7c336c3e3aec67f38c9b 11-Jan-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Revert r123207: "Turn on memdep's verifyRemoved() in an attempt to smoke out the cause of our gcc bootstrap miscompare."

It didn't.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123215 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
121704d738f9de8aaf04b144dcf493130fbfee3d 11-Jan-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Turn on memdep's verifyRemoved() in an attempt to smoke out the cause of our gcc bootstrap miscompare.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123207 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8e68c3873549ca31533e2e3e40dda3a43cb79566 23-Dec-2010 Jeffrey Yasskin <jyasskin@google.com> Change all self assignments X=X to (void)X, so that we can turn on a
new gcc warning that complains on self-assignments and
self-initializations.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122458 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5034dd318a9dfa0dc45a3ac01e58e60f2aa2498d 15-Dec-2010 Dan Gohman <gohman@apple.com> Move Value::getUnderlyingObject to be a standalone
function so that it can live in Analysis instead of
VMCore.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121885 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
2cd195291722ad0153125a6c032c96e361d8c48e 13-Dec-2010 Dan Gohman <gohman@apple.com> Update memdep to handle PartialAlias as MayAlias.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121723 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
12bf43bc4f86602a5677d5e1662cb4e40562351b 30-Nov-2010 Chris Lattner <sabre@nondot.org> strength reduce this.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120381 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
dd061b28548434579e8547aa7aed83f78741ae6f 21-Nov-2010 Benjamin Kramer <benny.kra@googlemail.com> Initialize MemDep's TD member so buildbots don't trip over an uninitialized pointer (TD is passed to PHITransAddr).

I wonder why this didn't explode earlier.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119944 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f6f1f062cc8029aa75ca7d0e99fbc1e0b453d07e 21-Nov-2010 Chris Lattner <sabre@nondot.org> implement PR8576, deleting dead stores with intervening may-alias stores.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119927 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6d8eb156e6be727570b300bac7712f745a318c7d 11-Nov-2010 Dan Gohman <gohman@apple.com> Add helper functions for computing the Location of load, store,
and vaarg instructions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118845 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8a66a202f6c110273a7570b77e0b8bcb660fd92f 11-Nov-2010 Dan Gohman <gohman@apple.com> It's not necessary to clear out the Size and TBAATag at each of
these points.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118752 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
ec9b4ac914e91791c580148cf8068c82d4b2cb91 11-Nov-2010 Dan Gohman <gohman@apple.com> Set NonLocalDepInfo's Size field to UnknownSize when invalidating
it, so that it doesn't appear to be a known size.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118748 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
2365f08c7dfd039ef325d8cb4621b40fc5bd605f 10-Nov-2010 Dan Gohman <gohman@apple.com> When clearing a non-local pointer dependency cache entry, clear
the reverse map too. This fixes seflhost build errors.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118729 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
533c2ad360eaaab2a0a25dab5a99255256b84814 10-Nov-2010 Dan Gohman <gohman@apple.com> Factor out the code for computing an AliasAnalysis::Location
for a given instruction into a helper function.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118723 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
733c54da1e5432d9d64f88ea960121fa7a16076a 10-Nov-2010 Dan Gohman <gohman@apple.com> Fully invalidate cached results when a prior query's size or
type is insufficient for, or incompatible with, the current query.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118721 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
075fb5d68fcb55d26e44c48f07dfdbbfa21ccb2a 10-Nov-2010 Dan Gohman <gohman@apple.com> Enhance GVN to do more precise alias queries for non-local memory
references. For example, this allows gvn to eliminate the load in
this example:

void foo(int n, int* p, int *q) {
p[0] = 0;
p[1] = 1;
if (n) {
*q = p[0];
}
}


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118714 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
cd5c123a1d8723dbd5d493210c0a56890bffe409 29-Oct-2010 Dan Gohman <gohman@apple.com> Teach memdep to use pointsToConstantMemory to determine that loads
from constant memory don't alias any stores.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117636 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
081c34b725980f995be9080eaec24cd3dfaaf065 19-Oct-2010 Owen Anderson <resistor@mac.com> Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which
must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize
the pass's dependencies.

Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the
CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h
before parsing commandline arguments.

I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems
with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass
registration/creation, please send the testcase to me directly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116820 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
2ab36d350293c77fc8941ce1023e4899df7e3a82 12-Oct-2010 Owen Anderson <resistor@mac.com> Begin adding static dependence information to passes, which will allow us to
perform initialization without static constructors AND without explicit initialization
by the client. For the moment, passes are required to initialize both their
(potential) dependencies and any passes they preserve. I hope to be able to relax
the latter requirement in the future.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116334 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
ce665bd2e2b581ab0858d1afe359192bac96b868 08-Oct-2010 Owen Anderson <resistor@mac.com> Now with fewer extraneous semicolons!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115996 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
c1ac0d7623f4f2047b4ab86bd5a60a9e19432b38 22-Sep-2010 Dan Gohman <gohman@apple.com> Teach memdep about TBAA tags.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114588 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
09981982f13085d5e7fd5fb8f87b4a626d770c5f 06-Sep-2010 Chris Lattner <sabre@nondot.org> cleanup some of the lifetime/invariant marker stuff, add a big fixme.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113144 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
c5a5cf26fd4ea1050e8ed18b7c8b02b3f7f16d19 06-Sep-2010 Chris Lattner <sabre@nondot.org> speed up -gvn 3.4% on the testcase in PR7023


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113135 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
90c579de5a383cee278acc3f7e7b9d0a656e6a35 06-Aug-2010 Owen Anderson <resistor@mac.com> Reapply r110396, with fixes to appease the Linux buildbot gods.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110460 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1f74590e9d1b9cf0f1f81a156efea73f76546e05 06-Aug-2010 Owen Anderson <resistor@mac.com> Revert r110396 to fix buildbots.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110410 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9ccaf53ada99c63737547c0235baeb8454b04e80 06-Aug-2010 Owen Anderson <resistor@mac.com> Don't use PassInfo* as a type identifier for passes. Instead, use the address of the static
ID member as the sole unique type identifier. Clean up APIs related to this change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110396 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5fa417c7904f7394d4e6dcb86e366c86867bcb5a 06-Aug-2010 Dan Gohman <gohman@apple.com> Fix memdep's code for reasoning about dependences between two calls. A Ref
response from getModRefInfo is not useful here. Instead, check for identical
calls only in the NoModRef case.

Reapply r110270, and strengthen it to compensate for the memdep changes.
When both calls are readonly, there is no dependence between them.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110382 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
847a84efd23a2c7d90429b82f6e0f19d1f913d9a 03-Aug-2010 Dan Gohman <gohman@apple.com> Add a convenient form of AliasAnalysis::alias for the case where the sizes
are unknown.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110090 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
b344a346f1431bc942f96d0e0b8b87ee8f1b0475 28-Jul-2010 Gabor Greif <ggreif@gmail.com> reintroduce original (asserting) semantics of CallSite(Instruction *II)
add instead a CallSite(Value* V) constructor that is consistent with ImmutableCallSize
and use that one in client code

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109553 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
622b7cf147f9231a1d6e3aac81a2dd1b6047b26c 28-Jul-2010 Gabor Greif <ggreif@gmail.com> recommit simplification (originally r109504, backed out in r109508) now that problem in CallSiteBase is fixed

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109547 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
49d0bca86c5e97613703f32e401cefd5745a8fce 27-Jul-2010 Gabor Greif <ggreif@gmail.com> back out r109504, breaks the bots

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109508 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
c0d4aed6f755a273b4e3bb61114f31b5b6c8fee8 27-Jul-2010 Gabor Greif <ggreif@gmail.com> simplify

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109504 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d13db2c59cc94162d6cf0a04187d408bfef6d4a7 22-Jul-2010 Owen Anderson <resistor@mac.com> Fix batch of converting RegisterPass<> to INTIALIZE_PASS().


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109045 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8ff72b534436a1f4f221ddb21cf0d22c5b09769c 24-Jun-2010 Gabor Greif <ggreif@gmail.com> use the new isFreeCall API and ArgOperand accessors


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106692 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
fe60104ac97f3a8736dcfbfdf9547c7b7cc7b951 22-Jun-2010 Dan Gohman <gohman@apple.com> Use pre-increment instead of post-increment when the result is not used.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106542 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
551754c4958086cc6910da7c950f2875e212f5cf 17-Apr-2010 Eric Christopher <echristo@apple.com> Revert 101465, it broke internal OpenGL testing.

Probably the best way to know that all getOperand() calls have been handled
is to replace that API instead of updating.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101579 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4ec2258ffb495d7ce00177e447740ef1123a27db 16-Apr-2010 Gabor Greif <ggreif@gmail.com> reapply r101434
with a fix for self-hosting

rotate CallInst operands, i.e. move callee to the back
of the operand array

the motivation for this patch are laid out in my mail to llvm-commits:
more efficient access to operands and callee, faster callgraph-construction,
smaller compiler binary


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101465 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
607a7ab3da72a2eb53553a520507cbb8068dd1d8 16-Apr-2010 Gabor Greif <ggreif@gmail.com> back out r101423 and r101397, they break llvm-gcc self-host on darwin10

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101434 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
2ff961f66816daab8bbc58a19025161d969821c2 15-Apr-2010 Gabor Greif <ggreif@gmail.com> reapply r101364, which has been backed out in r101368
with a fix

rotate CallInst operands, i.e. move callee to the back
of the operand array

the motivation for this patch are laid out in my mail to llvm-commits:
more efficient access to operands and callee, faster callgraph-construction,
smaller compiler binary


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101397 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9ee17208115482441953127615231c59a2f4d052 15-Apr-2010 Gabor Greif <ggreif@gmail.com> back out r101364, as it trips the linux nightlybot on some clang C++ tests

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101368 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
165dac08d1bb8428b32a5f39cdd3dbee2888987f 15-Apr-2010 Gabor Greif <ggreif@gmail.com> rotate CallInst operands, i.e. move callee to the back
of the operand array

the motivation for this patch are laid out in my mail to llvm-commits:
more efficient access to operands and callee, faster callgraph-construction,
smaller compiler binary


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101364 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6d8f2ca646bc283c31f48b6816d5194c836dfec6 24-Feb-2010 Daniel Dunbar <daniel@zuster.org> Reapply r97010, the speculative revert failed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97036 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8c0c99016b4348bf9cc294a0f2dd60a219d4506c 24-Feb-2010 Daniel Dunbar <daniel@zuster.org> Speculatively revert r97010, "Add an argument to PHITranslateValue to specify
the DominatorTree. ...", in hopes of restoring poor old PPC bootstrap.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97027 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9d2ed8e632b71914b2a668932f4f49b87c3ca0b1 24-Feb-2010 Bob Wilson <bob.wilson@apple.com> Add an argument to PHITranslateValue to specify the DominatorTree. If this
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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97010 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
484d4a30c055eef3101d01a7a468db3413dd20d3 16-Feb-2010 Bob Wilson <bob.wilson@apple.com> Split critical edges as needed for load PRE.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96378 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1df9859c40492511b8aa4321eb76496005d3b75b 16-Feb-2010 Duncan Sands <baldrick@free.fr> There are two ways of checking for a given type, for example isa<PointerType>(T)
and T->isPointerTy(). Convert most instances of the first form to the second form.
Requested by Chris.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96344 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0ee443d169786017d151034b8bd34225bc144c98 22-Dec-2009 Chris Lattner <sabre@nondot.org> The phi translated pointer can be computed when returning a partially cached 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91885 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9b96ecaffa38a21eaca81c51153475152f44d8a7 22-Dec-2009 Chris Lattner <sabre@nondot.org> avoid calling extractMallocCall when it's obvious we don't have
a call. This speeds up memdep ~1.5%


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91869 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f648125be9385a0d4abfd5e77ea3dd40694c4c07 19-Dec-2009 Chris Lattner <sabre@nondot.org> fix an overly conservative caching issue that caused memdep to
cache a pointer as being unavailable due to phi trans in the
wrong place. This would cause later queries to fail even when
they didn't involve phi trans.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91787 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
dad451cb7c6b94b3af40f59271e24357616a05a9 09-Dec-2009 Chris Lattner <sabre@nondot.org> enhance NonLocalDepEntry to keep the per-block phi translated address
of the query.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90958 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
e18b97121c286eeff5efe89150b093bf1b7b7bfc 09-Dec-2009 Chris Lattner <sabre@nondot.org> change NonLocalDepEntry from being a typedef for an std::pair to be its
own small class. No functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90956 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
05e15f8897bd949f9d4bce073d53ed3256c71e2b 09-Dec-2009 Chris Lattner <sabre@nondot.org> Switch GVN and memdep to use PHITransAddr, which correctly handles
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.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90926 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
93d3311d1f0169c456b6176a69b45d79533c75e2 05-Dec-2009 Nick Lewycky <nicholas@mxc.ca> Fix indentation in switch statement.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90650 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0fea11a8055d179655b9d862f0b2acb93a728114 02-Dec-2009 Benjamin Kramer <benny.kra@googlemail.com> Silence compiler warnings.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90319 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9ff5a23186f8761d9e5b4b5adf6fae9ce7d63860 02-Dec-2009 Owen Anderson <resistor@mac.com> Cleanup/remove some parts of the lifetime region handling code in memdep and GVN,
per Chris' comments. Adjust testcases to match.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90304 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1e8de49fe729db17f267a35c89eb6b4ae90e834f 01-Dec-2009 Chris Lattner <sabre@nondot.org> rename some variables.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90258 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1ffb70f21d109c01f81e34feb5e134ea1bcaf551 01-Dec-2009 Chris Lattner <sabre@nondot.org> tidy


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90257 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
855d9da596062b5742a27d9d96c38528120f391b 01-Dec-2009 Chris Lattner <sabre@nondot.org> fix 255.vortex again, third time's the charm.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90217 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f58e86d762ac469df7c7267a54cf556badc56031 30-Nov-2009 Nick Lewycky <nicholas@mxc.ca> Revert r90107, fixing test/Transforms/GVN/2009-11-29-ReverseMap.ll and the
llvm-gcc build.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90113 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
366429b400c9ec41fbba7c24ed7d0a100e421136 30-Nov-2009 Chris Lattner <sabre@nondot.org> reapply r90093 with an addition of keeping the forward
and reverse nonlocal memdep maps in synch, this should
fix 255.vortex.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90107 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
ae3d24880de538cc4a607c896ead6197f18f222c 29-Nov-2009 Chris Lattner <sabre@nondot.org> revert this patch for now, it causes failures of:
LLVM::Transforms/GVN/2009-02-17-LoadPRECrash.ll
LLVM::Transforms/GVN/2009-06-17-InvalidPRE.ll



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90096 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1903d97c2c5ab2e67ffc7f5d6d817266d51a676d 29-Nov-2009 Chris Lattner <sabre@nondot.org> Fix a really nasty caching bug I introduced in memdep. An entry
was being added to the Result vector, but not being put in the
cache. This means that if the cache was reused wholesale for a
later query that it would be missing this entry and we'd do an
incorrect load elimination.

Unfortunately, it's not really possible to write a useful
testcase for this, but this unbreaks 255.vortex.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90093 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
2eac9493fc68f9df248f1a615413be1d2016b4d6 29-Nov-2009 Nick Lewycky <nicholas@mxc.ca> Detabify.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90085 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d801c10de6cd1760f0994452c0e78156782d9fca 28-Nov-2009 Nick Lewycky <nicholas@mxc.ca> Teach memdep to look for memory use intrinsics during dependency queries. Fixes
PR5574.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90045 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
dd696052f0e4ecc973d105be19cf1b4b72f9a0c4 28-Nov-2009 Chris Lattner <sabre@nondot.org> Enhance InsertPHITranslatedPointer to be able to return a list of newly
inserted instructions. No functionality change until someone starts using it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90039 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
af7a28939eb72258fef61398b53b4f3a24c1541f 28-Nov-2009 Chris Lattner <sabre@nondot.org> enable code to handle un-phi-translatable cases more aggressively:
if we don't have an address expression available in a predecessor,
then model this as the value being clobbered at the end of the pred
block instead of being modeled as a complete phi translation failure.
This is important for PRE of loads because we want to see that the
load is available in all but this predecessor, and complete phi
translation failure results in not getting any information about
predecessors.

This doesn't do anything until I renable code insertion since PRE
now sees that it is available in all but one predecessors, but can't
insert the addressing in the predecessor that is missing it to
eliminate the redundancy.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90037 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6f7b210b2577fbc9247a9fc5223655390008ae89 27-Nov-2009 Chris Lattner <sabre@nondot.org> Rework InsertPHITranslatedPointer to handle the recursive case, this
fixes PR5630 and sets the stage for the next phase of goodness (testcase
pending).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90019 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5141421e38a6b4113177ef30cfd52de58ec9dced 27-Nov-2009 Chris Lattner <sabre@nondot.org> recursively phi translate bitcast operands too, for consistency.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90016 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
11c6bab704a0f82f59dcb2f409f7d6ac3b1821f1 27-Nov-2009 Chris Lattner <sabre@nondot.org> add support for recursive phi translation and phi
translation of add with immediate. This allows us
to optimize this function:

void test(int N, double* G) {
long j;
G[1] = 1;
for (j = 1; j < N - 1; j++)
G[j+1] = G[j] + G[j+1];
}

to only do one load every iteration of the loop.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90013 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9763487bd50bd9927c8bbdcc84e4f7d59b8d9cdf 27-Nov-2009 Chris Lattner <sabre@nondot.org> add comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90002 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
e95035aea481f70a6ea9183a7e133f8e9a98e073 27-Nov-2009 Chris Lattner <sabre@nondot.org> reduce nesting, no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90001 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
616613d7a4ddc7cefce53b2bfe3fdcdec6b032c2 27-Nov-2009 Chris Lattner <sabre@nondot.org> teach GVN's load PRE to insert computations of the address in predecessors
where it is not available. It's unclear how to get this inserted
computation into GVN's scalar availability sets, Owen, help? :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89997 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
62deff066c5ee4474be80ed2d95aca010e237343 27-Nov-2009 Chris Lattner <sabre@nondot.org> Fix phi translation in load PRE to agree with the phi
translation done by memdep, and reenable gep translation
again.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89992 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
b99be5beac847a92a56af21131da56a94b194bf2 27-Nov-2009 Chris Lattner <sabre@nondot.org> redisable this, my bootstrap worked because it wasn't an optimized build, whoops.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89991 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
cca130bb66a927b82fd030d60d1e8048898d1624 27-Nov-2009 Chris Lattner <sabre@nondot.org> try again.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89990 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
518c988ae99273c06e12d0e581cc06806fa72ed2 27-Nov-2009 Chris Lattner <sabre@nondot.org> this is causing buildbot failures, disable for now.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89985 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
e19e4baf3b4f145fad122de7e6a02ed3a68bc082 27-Nov-2009 Chris Lattner <sabre@nondot.org> teach phi translation of GEPs to simplify geps like 'gep x, 0'.
This allows us to compile the example from PR5313 into:

LBB1_2: ## %bb
incl %ecx
movb %al, (%rsi)
movslq %ecx, %rax
movb (%rdi,%rax), %al
testb %al, %al
jne LBB1_2

instead of:

LBB1_2: ## %bb
movslq %eax, %rcx
incl %eax
movb (%rdi,%rcx), %cl
movb %cl, (%rsi)
movslq %eax, %rcx
cmpb $0, (%rdi,%rcx)
jne LBB1_2



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89981 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
304076268a342b2b15e1af2e678d101af3165f4c 27-Nov-2009 Chris Lattner <sabre@nondot.org> teach memdep to do trivial PHI translation of GEPs. More to
come.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89979 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
cc3d0eb483d17154fe00f68726c097546b7c9352 27-Nov-2009 Chris Lattner <sabre@nondot.org> Teach memdep to phi translate bitcasts. This allows us to compile
the example in GCC PR16799 to:

LBB1_2: ## %bb1
movl %eax, %eax
subq %rax, %rdi
movq %rdi, (%rcx)
movl (%rdi), %eax
testl %eax, %eax
je LBB1_2

instead of:

LBB1_2: ## %bb1
movl (%rdi), %ecx
subq %rcx, %rdi
movq %rdi, (%rax)
cmpl $0, (%rdi)
je LBB1_2



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89978 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
dc59311c5c1fef7788f58096c6f417df2b5b72df 27-Nov-2009 Chris Lattner <sabre@nondot.org> factor some code out into some helper functions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89975 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f27f115ef5d62b9dccfb0201da0008a8b8914cd3 22-Nov-2009 Nick Lewycky <nicholas@mxc.ca> Remove dead code. While there, also turn a few 'T* ' into 'T *' to match the
rest of the file.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89577 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
b62f792e78df12a43029352eb4c7cde9d456c67e 28-Oct-2009 Owen Anderson <resistor@mac.com> Treat lifetime begin/end markers as allocations/frees respectively for the
purposes for GVN/DSE.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85383 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
a85a66423d966bf6210daf9587dba7ec1ff8d64e 28-Oct-2009 Owen Anderson <resistor@mac.com> Be more careful about invariance reasoning on "store" queries. Stores still need
to depend on Ref and ModRef calls within the invariant region.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85380 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4bc737c5ef120e27834b92a86939331f370ba49c 28-Oct-2009 Owen Anderson <resistor@mac.com> Add trivial support for the invariance intrinsics to memdep. This logic is
purely local for now.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85378 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f006b183e2d2bebcf6968d1dd7350397c95b0325 27-Oct-2009 Victor Hernandez <vhernandez@apple.com> Rename MallocFreeHelper as MemoryBuiltins

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85286 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f2becca90b832cc02345fba063b9b439b2be33ad 27-Oct-2009 Victor Hernandez <vhernandez@apple.com> Rename MallocHelper as MallocFreeHelper, since it now also identifies calls to free()

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85181 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
046e78ce55a7c3d82b7b6758d2d77f2d99f970bf 27-Oct-2009 Victor Hernandez <vhernandez@apple.com> Remove FreeInst.
Remove LowerAllocations pass.
Update some more passes to treate free calls just like they were treating FreeInst.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85176 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
66284e063a1e46500acae48bdc0e4a00652021d1 24-Oct-2009 Victor Hernandez <vhernandez@apple.com> Auto-upgrade free instructions to calls to the builtin free function.
Update all analysis passes and transforms to treat free calls just like FreeInst.
Remove RaiseAllocations and all its tests since FreeInst no longer needs to be raised.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84987 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7b929dad59785f62a66f7c58615082f98441e95e 23-Oct-2009 Victor Hernandez <vhernandez@apple.com> Remove AllocationInst. Since MallocInst went away, AllocaInst is the only subclass of AllocationInst, so it no longer is necessary.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84969 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5c78736f85579aa6de38cba2742ea13ff9f79e70 13-Oct-2009 Victor Hernandez <vhernandez@apple.com> Memory dependence analysis was incorrectly stopping to scan for stores to a pointer at bitcast uses of a malloc call.
It should continue scanning until the malloc call, and this patch fixes that.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83931 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
66364346e01601b3bcc97c707c030595ff6b60ec 21-Sep-2009 Chris Lattner <sabre@nondot.org> Revert r82404, it is causing a bootstrap miscompile. This is very very
scary, as it indicates a lurking bug. yay.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82411 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
386251341fb6d7e08b9cd8e87e90dee5512ea9bf 20-Sep-2009 Chris Lattner <sabre@nondot.org> improve memdep to eliminate bitcasts (and aliases, and noop geps)
early for the stated reasons: this allows it to find more
equivalences and depend less on code layout.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82404 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
46e8312fb733338e9af4db3757a1a8beddeae15a 18-Sep-2009 Victor Hernandez <vhernandez@apple.com> Enhance analysis passes so that they apply the same analysis to malloc calls as to MallocInst.

Reviewed by Eli Friedman.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82281 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f581213bfb3c35c4cf6a2ec85f15ad27bf1bc95d 31-Jul-2009 Dan Gohman <gohman@apple.com> Make TargetData optional in MemoryDependenceAnalysis.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77727 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
cc726599ae7d44ad962696f523eb91675d338b96 31-Jul-2009 Dan Gohman <gohman@apple.com> Remove an unnecessary header.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77725 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
a2f55dd388e1fb33b553a5862bca0fe4bd4b781e 13-Jul-2009 Chris Lattner <sabre@nondot.org> factor the 'optimized sort' code out into a static helper function
and use it from one more place. Patch by Jakub Staszak!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75478 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6fbc1969e94cb00c82ab84e1dfe243e7388d3b1b 13-Jul-2009 Chris Lattner <sabre@nondot.org> Move the re-sort of invalidated NonLocalPointerDeps cache earlier
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
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
ab9cf1282baf559771183304ffc9959882e17ebb 25-May-2009 Chris Lattner <sabre@nondot.org> make memdep use the getModRefInfo method for stores instead of the
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
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6a0dcc10778468b1556474aa43d4a86a14ab15d7 29-Mar-2009 Chris Lattner <sabre@nondot.org> now that you can put a PointerIntPair in a SmallPtrSet, remove some
hackish workarounds from memdep


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67971 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
497cb6fd4c9505f49842edd3f754f967b5fd9401 11-Mar-2009 Dale Johannesen <dalej@apple.com> Debug intriniscs should be skipped when looking
for a dependency, not terminate the search.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66709 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f6cec85a4b40094fc8fd5182d88cd01e92f12444 09-Mar-2009 Owen Anderson <resistor@mac.com> Ignore debug intrinsics when computing dependences.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66399 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7157228a58fe0025488130548680cf645e14f068 06-Mar-2009 Zhou Sheng <zhousheng00@gmail.com> Remove this as dbginfo intrinsics has been defined as
IntrNoMem.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66256 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9b89f0de1220f0932c6a8b5c0a5c7f45176d3c24 05-Mar-2009 Zhou Sheng <zhousheng00@gmail.com> Ignore the debug info intrinsics when looking for dependency through basic block.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66119 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
95900f2dda0d573b927a54910386130b779a48ff 23-Jan-2009 Chris Lattner <sabre@nondot.org> fix two more cases where we could let the NLPDI cache get unsorted.
With this, sqlite3 now passes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62839 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4433a09b9fbe0de4483d3d49c0462e2b9a839851 23-Jan-2009 Chris Lattner <sabre@nondot.org> Unconditionally reset 'cache' to zero, even if we don't need to resort it.
This avoids using a dangling pointer.

Reset NumSortedEntries after restoring Cache to avoid extraneous sorts.
This fixes the reduced sqlite3 testcase, but apparently not the whole app.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62838 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
b54bfc2636111f74b0d33b62f0c6d30130164cfb 23-Jan-2009 Chris Lattner <sabre@nondot.org> a minor tweak to my previous patch, handle the invalidation case
when there are multiple iterations of the loop. This fixes PR3375.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62822 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
12a7db383090dd21b1f8488be330a274cffaff3c 22-Jan-2009 Chris Lattner <sabre@nondot.org> Fix PR3358, a really nasty bug where recursive phi translated
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
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f478951b0eeed2f8a9e39254f65458c9325dab91 16-Dec-2008 Chris Lattner <sabre@nondot.org> fix PR3217: fully cached queries need to be verified against the
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
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
3af23f8aba9ac28fe5a8646f57c2c307a35c1e4d 15-Dec-2008 Chris Lattner <sabre@nondot.org> if we have a phi translation failure of the start block,
return *just* a clobber of the start block, not other
random stuff as well.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61026 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9e59c64c14cfe55e7cc9086c6bff8cfeecac361e 15-Dec-2008 Chris Lattner <sabre@nondot.org> Implement initial support for PHI translation in memdep. This means that
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
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7050f3d5ecf3f4f16f31df16e58d2d064b02624d 10-Dec-2008 Duncan Sands <baldrick@free.fr> Don't dereference the end() iterator. This was
causing a bunch of failures when running
"make ENABLE_EXPENSIVE_CHECKS=1 check".


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60832 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5a45bf1b48cd3d23faa3dfc27b8866bb536c4b9e 09-Dec-2008 Chris Lattner <sabre@nondot.org> loosen up an assertion that isn't valid when called from
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
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
bc99be10b815e0bfc5102bd5746e9a80feebf6f4 09-Dec-2008 Chris Lattner <sabre@nondot.org> Teach GVN to invalidate some memdep information when it does an RAUW
of a pointer. This allows is to catch more equivalencies. For example,
the type_lists_compatible_p function used to require two iterations of
the gvn pass (!) to delete its 18 redundant loads because the first pass
would CSE all the addressing computation cruft, which would unblock the
second memdep/gvn passes from recognizing them. This change allows
memdep/gvn to catch all 18 when run just once on the function (as is
typical :) instead of just 3.

On all of 403.gcc, this bumps up the # reundandancies found from:

63 gvn - Number of instructions PRE'd
153991 gvn - Number of instructions deleted
50069 gvn - Number of loads deleted
to:
63 gvn - Number of instructions PRE'd
154137 gvn - Number of instructions deleted
50185 gvn - Number of loads deleted

+120 loads deleted isn't bad.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60799 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
20d6f0982ad33818cfa141f80157ac13e36d5550 09-Dec-2008 Chris Lattner <sabre@nondot.org> Teach BasicAA::getModRefInfo(CallSite, CallSite) some
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
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
3579e44bf33ed34f8b498834bfb40e407082bf31 09-Dec-2008 Chris Lattner <sabre@nondot.org> Fix a fixme: allow memdep to see past read-only calls when doing
load dependence queries. This allows GVN to eliminate a few more
instructions on 403.gcc:

152598 gvn - Number of instructions deleted
49240 gvn - Number of loads deleted
after:
153986 gvn - Number of instructions deleted
50069 gvn - Number of loads deleted



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60786 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1559b3625be7b80bee6b066af4b91b9d10dfb5fa 09-Dec-2008 Chris Lattner <sabre@nondot.org> rename getNonLocalDependency -> getNonLocalCallDependency, and remove
pointer stuff from it, simplifying the code a bit.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60783 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9f1e12a2f281bc16770999caf15489dd7285824f 09-Dec-2008 Chris Lattner <sabre@nondot.org> fix typos gabor noticed


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60754 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6563371bad878cb9737970fea6162044a0370df8 09-Dec-2008 Chris Lattner <sabre@nondot.org> restructure the top level non-local ptr dep query to handle
the first block of a query specially. This makes the "complete query
caching" subsystem more effective, avoiding predecessor queries. This
speeds up GVN another 4%.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60752 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9863c3f507913f17de0fd707e27fde9dc35f6ca6 09-Dec-2008 Chris Lattner <sabre@nondot.org> rename getNonLocalPointerDepInternal -> getNonLocalPointerDepFromBB
and split its inner loop out into a new GetNonLocalInfoForBlock
function. No functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60751 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
ba4dacc8752f1af5ca7a153cfeae4d6e4f78ba8f 09-Dec-2008 Chris Lattner <sabre@nondot.org> if we have two elements, insert both, don't use std::sort.
This speeds up the new GVN by another 3%


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60747 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1aeadacdadc8c44821300fea01445a2fb39e0420 09-Dec-2008 Chris Lattner <sabre@nondot.org> If we're only adding one new element to 'Cache', insert it into its known
position instead of using a full sort. This speeds up GVN by ~4% with the
new memdep stuff.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60746 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
511b36c00f3fbe80770e0bbbfe8ed2f266148d65 09-Dec-2008 Chris Lattner <sabre@nondot.org> convert a couple other places that use pred_iterator to use the caching
pred iterator.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60745 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4012fdda13710d21b415a79475adc2bbb6628527 09-Dec-2008 Chris Lattner <sabre@nondot.org> use hte new pred cache to speed up the new non-local memdep
queries. This speeds up GVN using the new queries (not yet
checked in) by just over 10%.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60743 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
11dcd8d38de031c34380fd6ab7a0daacdefb263a 08-Dec-2008 Chris Lattner <sabre@nondot.org> add another level of caching for non-local pointer queries, keeping
track of whether the CachedNonLocalPointerInfo for a block is specific
to a block. If so, just return it without any pred scanning. This is
good for a 6% speedup on GVN (when it uses this lookup method, which
it doesn't right now).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60695 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
3f7eb5b795f933aecf0e0f1fea646c516f6dc1c5 07-Dec-2008 Chris Lattner <sabre@nondot.org> add an assert. the cast<> below would catch this but a message is more
useful.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60674 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0655f73ef7e423a7802f2056b473a1f1caa3996d 07-Dec-2008 Chris Lattner <sabre@nondot.org> factor some code better.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60673 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d44745d24175079f0675c6199ab9929d19edd1aa 07-Dec-2008 Chris Lattner <sabre@nondot.org> factor some code, fixing some fixme's.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60672 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6290f5cac23399201f8785e5ca8b305e42a1342c 07-Dec-2008 Chris Lattner <sabre@nondot.org> add support for caching pointer dependence queries. Nothing uses this yet
so it "can't" break anything. That said, it does appear to work.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60654 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9a193fd8ae630478123938e12b56f84c5b2227b9 07-Dec-2008 Chris Lattner <sabre@nondot.org> Some internal refactoring to make it easier to cache results.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60650 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7ebcf0324668b7c6ba48832d5d8df95689a8d837 07-Dec-2008 Chris Lattner <sabre@nondot.org> Introduce a new MemDep::getNonLocalPointerDependency
method. This will eventually take over load/store dep
queries from getNonLocalDependency. For now it works
fine, but is incredibly slow because it does no caching.
Lets not switch GVN to use it until that is fixed :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60649 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
e79be944c8ced0a0cb80ede8cb9f97e4fdc6778f 07-Dec-2008 Chris Lattner <sabre@nondot.org> push the "pointer case" up the analysis stack a bit. This causes
duplication of logic (in 2 places) to determine what pointer a
load/store touches. This will be addressed in a future commit.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60648 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d8dd934d16d1190881d45b065daec4a1ba82133f 07-Dec-2008 Chris Lattner <sabre@nondot.org> make clients have to know how to call getCallSiteDependencyFrom
instead of making getDependencyFrom do it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60647 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
106c6ca7b0d1ffc28c832edd6f697bf4de55dbcd 07-Dec-2008 Chris Lattner <sabre@nondot.org> rename some variables for consistency


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60644 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
fbc72e3e610dbc511736696e0e3ccc03dbcae142 07-Dec-2008 Chris Lattner <sabre@nondot.org> I love how using out of scope variables is not an error with GCC, no really I do.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60643 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8ef57c5faf77890828ac439482420646b2a0beb8 07-Dec-2008 Chris Lattner <sabre@nondot.org> Rename getCallSiteDependency -> getCallSiteDependencyFrom to
emphasize the scanning and make it more similar to
getDependencyFrom



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60642 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
745291a6ce841f30a8a9e536071bd1b4cf540c55 07-Dec-2008 Chris Lattner <sabre@nondot.org> a memdep query on a volatile load/store will always return
clobber with the current implementation. Instead of returning
a "precise clobber" just return a fuzzy one. This doesn't
matter to any clients anyway and should speed up analysis time
very very slightly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60641 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
84b9a56d11c119d2eadbc2ff4d56d33c25a07460 07-Dec-2008 Chris Lattner <sabre@nondot.org> remove the ability to get memdep info for vaarg. I don't think the
original impl was correct and noone actually makes the query anyway.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60639 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
b51deb929ca95ce62e622b0475a05d83f26ab04d 05-Dec-2008 Chris Lattner <sabre@nondot.org> Make a few major changes to memdep and its clients:
1. Merge the 'None' result into 'Normal', making loads
and stores return their dependencies on allocations as Normal.
2. Split the 'Normal' result into 'Clobber' and 'Def' to
distinguish between the cases when memdep knows the value is
produced from when we just know if may be changed.
3. Move some of the logic for determining whether readonly calls
are CSEs into memdep instead of it being in GVN. This still
leaves verification that the arguments are hte same to GVN to
let it know about value equivalences in different contexts.
4. Change memdep's call/call dependency analysis to use
getModRefInfo(CallSite,CallSite) instead of doing something
very weak. This only really matters for things like DSA, but
someday maybe we'll have some other decent context sensitive
analyses :)
5. This reimplements the guts of memdep to handle the new results.
6. This simplifies GVN significantly:
a) readonly call CSE is slightly simpler
b) I eliminated the "getDependencyFrom" chaining for load
elimination and load CSE doesn't have to worry about
volatile (they are always clobbers) anymore.
c) GVN no longer does any 'lastLoad' caching, leaving it to
memdep.
7. The logic in DSE is simplified a bit and sped up. A potentially
unsafe case was eliminated.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60607 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6951381995f24dc9c7bbcacefd5a1315784f66f3 05-Dec-2008 Chris Lattner <sabre@nondot.org> Make it illegal to call getDependency* on non-memory instructions
like binary operators.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60600 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
bf145d6e2ba01f5099ccaa1b58ed3619406928a0 01-Dec-2008 Chris Lattner <sabre@nondot.org> Reimplement the non-local dependency data structure in terms of a sorted
vector instead of a densemap. This shrinks the memory usage of this thing
substantially (the high water mark) as well as making operations like
scanning it faster. This speeds up memdep slightly, gvn goes from
3.9376 to 3.9118s on 403.gcc

This also splits out the statistics for the cached non-local case to
differentiate between the dirty and clean cached case. Here's the stats
for 403.gcc:

6153 memdep - Number of dirty cached non-local responses
169336 memdep - Number of fully cached non-local responses
162428 memdep - Number of uncached non-local responses

yay for caching :)



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60313 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
fd3dcbea06f934572a3ba02821b1485eb7a073aa 01-Dec-2008 Chris Lattner <sabre@nondot.org> Eliminate the DepResultTy abstraction. It is now completely
redundant with MemDepResult, and MemDepResult has a nicer interface.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60308 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d777d405cdda8d418ba8e8818e5c1272dfd999a0 30-Nov-2008 Chris Lattner <sabre@nondot.org> Cache TargetData/AliasAnalysis in the pass instead of calling
getAnalysis<>. getAnalysis<> is apparently extremely expensive.
Doing this speeds up GVN on 403.gcc by 16%!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60304 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4a69bade2385022ca776edc22150f3b750cdf23c 30-Nov-2008 Chris Lattner <sabre@nondot.org> Two changes: Make getDependency remove QueryInst for a dirty record's
ReverseLocalDeps when we update it. This fixes a regression test
failure from my last commit.

Second, for each non-local cached information structure, keep a bit that
indicates whether it is dirty or not. This saves us a scan over the whole
thing in the common case when it isn't dirty.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60274 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
25f4b2b7a3f1f2bbaf954257e7834ba29a6ede7c 30-Nov-2008 Chris Lattner <sabre@nondot.org> introduce a typedef, no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60272 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f68f310386c8e1772a3e6eba01f09590678a8f96 30-Nov-2008 Chris Lattner <sabre@nondot.org> Change NonLocalDeps to be a densemap of pointers to densemap
instead of containing them by value. This increases the density
(!) of NonLocalDeps as well as making the reallocation case
faster. This speeds up gvn on 403.gcc by 2% and makes room for
future improvements.

I'm not super thrilled with having to explicitly manage the new/delete
of the map, but it is necesary for the next change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60271 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
cfbb634225007b2eddfbfcbf2adff2291b9c03bd 30-Nov-2008 Chris Lattner <sabre@nondot.org> calls never depend on allocations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60268 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
237a8287454389a5b940e18c1efb2201fc443208 30-Nov-2008 Chris Lattner <sabre@nondot.org> Fix a fixme by making memdep's handling of allocations more logical.
If we see that a load depends on the allocation of its memory with no
intervening stores, we now return a 'None' depedency instead of "Normal".
This tweaks GVN to do its optimization with the new result.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60267 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
73ec3cdd7140aee6d2b9ac32bc2298254ff48c97 30-Nov-2008 Chris Lattner <sabre@nondot.org> implement a fixme by introducing a new getDependencyFromInternal
method that returns its result as a DepResultTy instead of as a
MemDepResult. This reduces conversion back and forth.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60266 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
37d041c25f6cac462efef0d614a67ef657aad11a 30-Nov-2008 Chris Lattner <sabre@nondot.org> Move the getNonLocalDependency method to a more logical place in
the file, no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60265 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0e0a5b690ca772a9002d8e8d21edac5f011bc7e8 30-Nov-2008 Chris Lattner <sabre@nondot.org> REmove an old fixme, resolve another fixme by adding liberal
comments about what this class does.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60264 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
125ce362693350ebe713b58c92a9c0ced26680ea 30-Nov-2008 Chris Lattner <sabre@nondot.org> remove a bit of incorrect code that tried to be tricky about speeding up
dependencies. The basic situation was this: consider if we had:

store1
...
store2
...
store3

Where memdep thinks that store3 depends on store2 and store2 depends
on store1. The problem happens when we delete store2: The code in
question was updating dep info for store3 to be store1. This is a
spiffy optimization, but is not safe at all, because aliasing isn't
transitive. This bug isn't exposed today with DSE because DSE will only
zap store2 if it is identifical to store 3, and in this case, it is
safe to update it to depend on store1. However, memcpyopt is not so
fortunate, which is presumably why the "dropInstruction" code used to
exist.

Since this doesn't actually provide a speedup in practice, just rip the
code out.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60263 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4f8c18c7c757875cfa45383e7cf33d65d2c4d564 30-Nov-2008 Chris Lattner <sabre@nondot.org> Eliminate the dropInstruction method, which is not needed any more.
Fix a subtle iterator invalidation bug I introduced in the last commit.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60258 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0ec48ddef20deaa061152d86645972122beef605 29-Nov-2008 Chris Lattner <sabre@nondot.org> implement some fixme's: when deleting an instruction with
an entry in the nonlocal deps map, don't reset entries
referencing that instruction to [dirty, null], instead, set
them to [dirty,next] where next is the instruction after the
deleted one. Use this information in the non-local deps
code to avoid rescanning entire blocks.

This speeds up GVN slightly by avoiding pointless work. On
403.gcc this makes GVN 1.5% faster.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60256 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
396a4a55e535728e2023aa331401c1a2b782cb9a 29-Nov-2008 Chris Lattner <sabre@nondot.org> Change MemDep::getNonLocalDependency to return its results as
a smallvector instead of a DenseMap. This speeds up GVN by 5%
on 403.gcc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60255 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
729b23758ab990a7bd07ceb5ac6af04c32f40a76 29-Nov-2008 Chris Lattner <sabre@nondot.org> move MemoryDependenceAnalysis::verifyRemoved to the end of the file,
no functionality/code change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60254 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
86b29ef64a36c8779ef7855b3c4b95744eb2f08b 29-Nov-2008 Chris Lattner <sabre@nondot.org> reimplement getNonLocalDependency with a simpler worklist
formulation that is faster and doesn't require nonLazyHelper.
Much less code.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60253 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8c4652790e04515f34cf920b0783d6ec4161a313 29-Nov-2008 Chris Lattner <sabre@nondot.org> rename some maps.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60242 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
00314b3d84252555e45ca147521bbfb0e8cc86d6 29-Nov-2008 Chris Lattner <sabre@nondot.org> rename some variables.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60241 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
a161ab06d9e194bbc048b04998e64a8f8a14e49c 29-Nov-2008 Chris Lattner <sabre@nondot.org> eliminate a bunch of code in favor of using AliasAnalysis::getModRefInfo.
Put a some code back to handle buggy behavior that GVN expects: it wants
loads to depend on each other, and accesses to depend on their allocations.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60240 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
25a081439f2c48a384c69ba8ad5e9ae005f4cf10 29-Nov-2008 Chris Lattner <sabre@nondot.org> simplify some code and rename some variables. Reduce nesting.
Use getTypeStoreSize instead of ABITypeSize for in-memory size
in a couple places.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60238 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5391a1d8046396fb4dd005b1910973789f5427f4 29-Nov-2008 Chris Lattner <sabre@nondot.org> Split getDependency into getDependency and getDependencyFrom, the
former does caching, the later doesn't. This dramatically simplifies
the logic in getDependency and getDependencyFrom.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60234 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7f52422a3c821c1deb7171808ffcf83386970791 29-Nov-2008 Chris Lattner <sabre@nondot.org> Now that DepType is private, we can start cleaning up some of its uses:
Document the Dirty value more precisely, use it for the uninitialized
DepResultTy value. Change reverse mappings to be from an instruction*
instead of DepResultTy, and stop tracking other forms. This makes it more
clear that we only care about the instruction cases.

Eliminate a DepResultTy,bool pair by using Dirty in the local case as well,
shrinking the map and simplifying the code.

This speeds up GVN by ~3% on 403.gcc.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60232 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4c724006256032e827177afeae04ea62436796e7 29-Nov-2008 Chris Lattner <sabre@nondot.org> Introduce and use a new MemDepResult class to hold the results of a memdep
query. This makes it crystal clear what cases can escape from MemDep that
the clients have to handle. This also gives the clients a nice simplified
interface to it that is easy to poke at.

This patch also makes DepResultTy and MemoryDependenceAnalysis::DepType
private, yay.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60231 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
39f372e23e49cecb8db2eb7120eb331173e50c74 29-Nov-2008 Chris Lattner <sabre@nondot.org> Reimplement the internal abstraction used by MemDep in terms
of a pointer/int pair instead of a manually bitmangled pointer.
This forces clients to think a little more about checking the
appropriate pieces and will be useful for internal
implementation improvements later.

I'm not particularly happy with this. After going through this
I don't think that the clients of memdep should be exposed to
the internal type at all. I'll fix this in a subsequent commit.

This has no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60230 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d3d12ecadd1eb859c4b30b6582e31901a45d6626 28-Nov-2008 Chris Lattner <sabre@nondot.org> Fix PR3141 by ensuring that MemoryDependenceAnalysis::removeInstruction
properly updates the reverse dependency map when it installs updated
dependencies for instructions that depend on the removed instruction.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60222 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
baad8881f1d87b50053edc862248dc6cb15af81b 28-Nov-2008 Chris Lattner <sabre@nondot.org> more cleanups for MemoryDependenceAnalysis::removeInstruction,
no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60219 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5f589dc77f459d169495ab1e0e03de3740a3b290 28-Nov-2008 Chris Lattner <sabre@nondot.org> random cleanups, no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60218 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0e575f428cf0691760fb8f51a616bdb911b85d4f 28-Nov-2008 Chris Lattner <sabre@nondot.org> Run verifyRemoved from removeInstruction when -debug is specified.
This shows the root problem behind PR3141.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60216 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8b589fa135d873e683b29ed0918638a79272f5d2 28-Nov-2008 Chris Lattner <sabre@nondot.org> rename "ping" to "verifyRemoved". I don't know why 'ping' what chosen,
but it doesn't make any sense at all.

Also make the method const, private, and fit in 80 cols while we're at it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60215 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
57d4012f657eedeae66e29e03228c56498608ee7 28-Nov-2008 Chris Lattner <sabre@nondot.org> remove mysterious escaped newlines.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60211 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
af8bc26449249682699bbd7d107a5708fe0413a3 11-Sep-2008 Duncan Sands <baldrick@free.fr> Fix comment typo.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56116 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d4310a5d41cc13f109890f5efbb19e084fecb27a 28-Jul-2008 Owen Anderson <resistor@mac.com> Fix a subtle bug when removing instructions from memdep. In very specific
circumstances we could end up remapping a dependee to the same instruction
that we're trying to remove. Handle this properly by just falling back to
a conservative solution.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54132 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f2aa160b357c98d8c37b69ea9775aa3e097d1319 02-Jul-2008 Owen Anderson <resistor@mac.com> A better fix for PR2503 that doesn't pessimize GVN in the presence of unreachable blocks.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53032 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
c4b871c650d4030031545a5a2d07ecaa48c80a9c 01-Jul-2008 Owen Anderson <resistor@mac.com> Properly handle cases where a predecessor of the block being queried on is unreachable.
This fixes PR2503, though we should also fix other passes not to emit this kind of code.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52946 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6bd15ce03f27047909da227f923e36249bf8182b 01-Jun-2008 Owen Anderson <resistor@mac.com> Remember to update the reverse non-local cache when cleaning up dirty entries. This fixes PR2397.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51846 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
d8f34fa3d616a99e90ac9111fdc60b7b4ec0aae9 01-Jun-2008 Owen Anderson <resistor@mac.com> Make ping more aggressive in finding nonlocal caching errors.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51845 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
ff5a535378f700bf5e48ef17ad74eac21669b78d 13-May-2008 Owen Anderson <resistor@mac.com> Fix memdep's handling of invokes when finding the dependency of another call
instruction. This fixes some Ada miscompiles reported in PR2324.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51069 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
844731a7f1909f55935e3514c9e713a62d67662e 13-May-2008 Dan Gohman <gohman@apple.com> Clean up the use of static and anonymous namespaces. This turned up
several things that were neither in an anonymous namespace nor static
but not intended to be global.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51017 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4a3f6c88820a204f80ca0fa3f1f2fe09ca10b02f 06-May-2008 Dan Gohman <gohman@apple.com> Make several variable declarations static.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50696 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
241f65321efc6ad84ed875cd9494df8ca1cff309 17-Apr-2008 Owen Anderson <resistor@mac.com> Make GVN able to remove unnecessary calls to read-only functions again.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49842 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
c04575f494395412275389efbe152c8ed6129030 11-Apr-2008 Dan Gohman <gohman@apple.com> Fix a typo in a comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49504 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
f062f10231590919d9d78ee2f7d3cb29f1c09e66 11-Apr-2008 Owen Anderson <resistor@mac.com> Fix for PR2190. Memdep's non-local caching was checking dirtied blocks in the
wrong order.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49499 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6faaef57b003be4af1594731d95b2a0112a23749 01-Apr-2008 Dan Gohman <gohman@apple.com> Set blockBegin to point to the beginning of the block,
not the end.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48999 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4f4c28f75f74fe557efb63feaf5f4f8bf639dcd5 20-Mar-2008 Devang Patel <dpatel@apple.com> Restore isCFGOnly property of various analysis passes.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48579 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
c758209153ca0f6da6737f25ada269c573fba456 19-Mar-2008 Devang Patel <dpatel@apple.com> PassInfo keep tracks whether a pass is an analysis pass or not.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48554 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
30b4bd4d1099764db4f1e1a955b7f7cc9dafdd97 12-Feb-2008 Owen Anderson <resistor@mac.com> Re-apply the patch to improve the optimizations of memcpy's, with several
bugs fixed. This now passes PPC bootstrap.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47026 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
63aa160b27935433208c34080e0458ce287030bb 06-Feb-2008 Tanya Lattner <tonic@nondot.org> Throttle the non-local dependence analysis for basic blocks with more than 50 predecessors. Added command line option to play with this threshold.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46790 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
a8701a6c62158b2b84cc24ed2149e4107d03409a 05-Feb-2008 Owen Anderson <resistor@mac.com> Fix an obscure read-after-free bug that Duncan found.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46738 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9a8ff8cd0fe792c7cb894217640f90d2bc1af26e 30-Jan-2008 Owen Anderson <resistor@mac.com> Fix an issue where, under very specific circumstances, memdep could end up dereferencing the end
of one of its internal maps.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46541 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4ee451de366474b9c228b4e5fa573795a715216d 29-Dec-2007 Chris Lattner <sabre@nondot.org> Remove attribution from file headers, per discussion on llvmdev.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45418 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5fc4abac3db46b6e6b3824163c0f1252c1ab0ebb 08-Dec-2007 Owen Anderson <resistor@mac.com> 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44695 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
dff6710717b159f089c76a07eda074eb6347eb92 01-Dec-2007 Duncan Sands <baldrick@free.fr> 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44487 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
97d4e51df1dabc43978ce6f33f6e5276d7ee297f 26-Nov-2007 Owen Anderson <resistor@mac.com> Fix a silly bug that Nicholas noticed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44324 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
00a6d1448d27b5140b911caf2eca9585abdae5c8 26-Nov-2007 Owen Anderson <resistor@mac.com> Allow GVN to eliminate read-only function calls when it can detect that they are redundant.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44323 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
514ab348fddcdffa8367685dc608b2f8d5de986d 01-Nov-2007 Duncan Sands <baldrick@free.fr> Executive summary: getTypeSize -> getTypeStoreSize / getABITypeSize.
The meaning of getTypeSize was not clear - clarifying it is important
now that we have x86 long double and arbitrary precision integers.
The issue with long double is that it requires 80 bits, and this is
not a multiple of its alignment. This gives a primitive type for
which getTypeSize differed from getABITypeSize. For arbitrary precision
integers it is even worse: there is the minimum number of bits needed to
hold the type (eg: 36 for an i36), the maximum number of bits that will
be overwriten when storing the type (40 bits for i36) and the ABI size
(i.e. the storage size rounded up to a multiple of the alignment; 64 bits
for i36).

This patch removes getTypeSize (not really - it is still there but
deprecated to allow for a gradual transition). Instead there is:

(1) getTypeSizeInBits - a number of bits that suffices to hold all
values of the type. For a primitive type, this is the minimum number
of bits. For an i36 this is 36 bits. For x86 long double it is 80.
This corresponds to gcc's TYPE_PRECISION.

(2) getTypeStoreSizeInBits - the maximum number of bits that is
written when storing the type (or read when reading it). For an
i36 this is 40 bits, for an x86 long double it is 80 bits. This
is the size alias analysis is interested in (getTypeStoreSize
returns the number of bytes). There doesn't seem to be anything
corresponding to this in gcc.

(3) getABITypeSizeInBits - this is getTypeStoreSizeInBits rounded
up to a multiple of the alignment. For an i36 this is 64, for an
x86 long double this is 96 or 128 depending on the OS. This is the
spacing between consecutive elements when you form an array out of
this type (getABITypeSize returns the number of bytes). This is
TYPE_SIZE in gcc.

Since successive elements in a SequentialType (arrays, pointers
and vectors) need to be aligned, the spacing between them will be
given by getABITypeSize. This means that the size of an array
is the length times the getABITypeSize. It also means that GEP
computations need to use getABITypeSize when computing offsets.
Furthermore, if an alloca allocates several elements at once then
these too need to be aligned, so the size of the alloca has to be
the number of elements multiplied by getABITypeSize. Logically
speaking this doesn't have to be the case when allocating just
one element, but it is simpler to also use getABITypeSize in this
case. So alloca's and mallocs should use getABITypeSize. Finally,
since gcc's only notion of size is that given by getABITypeSize, if
you want to output assembler etc the same as gcc then getABITypeSize
is the size you want.

Since a store will overwrite no more than getTypeStoreSize bytes,
and a read will read no more than that many bytes, this is the
notion of size appropriate for alias analysis calculations.

In this patch I have corrected all type size uses except some of
those in ScalarReplAggregates, lib/Codegen, lib/Target (the hard
cases). I will get around to auditing these too at some point,
but I could do with some help.

Finally, I made one change which I think wise but others might
consider pointless and suboptimal: in an unpacked struct the
amount of space allocated for a field is now given by the ABI
size rather than getTypeStoreSize. I did this because every
other place that reserves memory for a type (eg: alloca) now
uses getABITypeSize, and I didn't want to make an exception
for unpacked structs, i.e. I did it to make things more uniform.
This only effects structs containing long doubles and arbitrary
precision integers. If someone wants to pack these types more
tightly they can always use a packed struct.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43620 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
ce4d88aa644647a21f75f86cd26476fa3f23b396 21-Sep-2007 Owen Anderson <resistor@mac.com> Add partial caching of non-local memory dependence queries. This provides a modest
speedup for GVN.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42185 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
742f9b66822cb03af0cf7b94436e9d0288565591 19-Sep-2007 Owen Anderson <resistor@mac.com> Add a flag to mark a dirty cache entry. This is not yet used, but will eventually
help non-local memdep caching.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42137 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0a890e2fb524124ecb9b0899e4daacd32bf9a44b 11-Sep-2007 Owen Anderson <resistor@mac.com> Fix a typo in memdep, which was causing PR1648.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41833 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7fad7e3db87c80f18a449c44394ee32c4e2af136 09-Sep-2007 Owen Anderson <resistor@mac.com> Remove an un-needed dependence query. This improves compile time marginally on 401.bzip2.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41792 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4d13de4e3bfc5121207efd01e1b31caa6bb4e40b 16-Aug-2007 Owen Anderson <resistor@mac.com> Cache non-local memory dependence analysis. This is a significant compile
time performance win in most cases.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41126 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9528f11481e6840a10442733f1dc45c04b79d596 09-Aug-2007 Owen Anderson <resistor@mac.com> Make NonLocal and None const in the right way. :-)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40961 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
642a9e3436dfe2afcaee6fb734d02c006d32ba3a 09-Aug-2007 Owen Anderson <resistor@mac.com> Add more comments to memdep.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40953 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
80b1f09693dd849620330da76b445fa0b3873dd1 09-Aug-2007 Owen Anderson <resistor@mac.com> Make memdep fit in 80 cols.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40950 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8cad423d94fd7e30d84742311c454016f36e3ee3 08-Aug-2007 Owen Anderson <resistor@mac.com> Change the None and NonLocal markers in memdep to be const.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40946 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
dbbe816757700e44018144f392d8e6f13971ba86 07-Aug-2007 Owen Anderson <resistor@mac.com> Clean up a bunch of caching stuff in memdep. This reduces the time to run GVN
on 403.gcc from ~15s to ~10s.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40884 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8f3531579812089b4094fcd53ca8dbe5bec53ca0 07-Aug-2007 Owen Anderson <resistor@mac.com> Improve the accuracy of memdep for determining the dependencies of loads.
This brings GVN to parity with GCSE+LoadVN.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40882 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1c2763d3fe8b70d9b85cb84bbce311ee4b86c9e1 02-Aug-2007 Owen Anderson <resistor@mac.com> Fix a bug that was causing several miscompilations on SPEC.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40746 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
9066020993695a690c1f979f9cac4e14d325e237 02-Aug-2007 Owen Anderson <resistor@mac.com> Make non-local memdep not be recursive, and fix a bug on 403.gcc that this exposed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40692 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
df464195fe049d5ea921e2e37f4f833c2ea4e3ec 31-Jul-2007 David Greene <greened@obbligato.org> Fix GLIBCXX_DEBUG error owing to dereference of end iterator. There's
no guarantee that an instruction returned by getDependency exists in
the maps.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40647 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
45c8388e2a94502ded17dc493fe3fb10b04ce439 30-Jul-2007 Owen Anderson <resistor@mac.com> Use more caching when computing non-local dependence. This makes bzip2 not
use up the entire 32-bit address space.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40596 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
a377a24771eed5c4672556afb2c28e80af026d7b 26-Jul-2007 Owen Anderson <resistor@mac.com> Fix a bug introduced in my last commit.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40542 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
45537917eec15e5c3ef75c0ee2bf8963b02f3a54 26-Jul-2007 Owen Anderson <resistor@mac.com> Fix a couple more bugs in the phi construction by pulling in code that does
almost the same things from LCSSA.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40540 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
3dfcf33cf897b04c95e252bbd645e9930f608701 25-Jul-2007 Owen Anderson <resistor@mac.com> Fix a bug in non-local memdep that was causing an infinite loop on 175.vpr.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40495 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
0cd320362e91852c8f7f2c8c4841498aab7f92fa 25-Jul-2007 Owen Anderson <resistor@mac.com> Add basic support for performing whole-function RLE.
Note: This has not yet been thoroughly tested. Use at your own risk.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40489 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
4beedbd0063a8ba6f97db02c3c94707d8ab45b50 24-Jul-2007 Owen Anderson <resistor@mac.com> Add initial support for non-local memory dependence analysis.
NOTE: This has only been cursorily tested. Expected improvements soon.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40476 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
521a20207ca5ed8fbe3f8a0537a286478277fb3f 20-Jul-2007 Owen Anderson <resistor@mac.com> When removing instructions from the analysis, be sure to check the confirmed
flag when determining what to do with dependencies.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40079 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
faac518ce0ae88a19f26b9aa9d34f6bf86ecb8c4 16-Jul-2007 Owen Anderson <resistor@mac.com> Add support for walking up memory def chains, which enables finding many more
dead stores on 400.perlbench.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39929 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
1cb960a4bb97336be1339fd5bc2eb28f125f099a 12-Jul-2007 Owen Anderson <resistor@mac.com> Let MemoryDependenceAnalysis take care of updating AliasAnalysis.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39769 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
8e85048d7b004fb1bafd23df109cd91e4ffd5278 10-Jul-2007 Owen Anderson <resistor@mac.com> Calculate the size of a array allocation correctly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38511 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
202da14fe00fbafa8540baba433147a8eb526814 10-Jul-2007 Owen Anderson <resistor@mac.com> Fix a crasher when finding the dependency of a call.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38510 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
776ee1fb338b65defc5cb0c85b20a4fc5122a633 10-Jul-2007 Owen Anderson <resistor@mac.com> Make this pass registration static as well.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38509 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
06b6e82f79a30e0cc16c736875069f0f64cc400a 10-Jul-2007 Owen Anderson <resistor@mac.com> Handle vaarg instructions correctly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38504 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
e314eb3255299a995088323384d317be52e743f9 10-Jul-2007 Owen Anderson <resistor@mac.com> Volatile loads and stores depend on each other.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38502 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
5f323207971da23e2f78dd61d383e9d506fd9d6c 10-Jul-2007 Owen Anderson <resistor@mac.com> Add support for finding the dependencies of call and invoke instructions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38497 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
7a616a101225ea33d72f6931b205aa27e1cf919c 10-Jul-2007 Owen Anderson <resistor@mac.com> Fix the build, and fix the handling of pointer sizes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38494 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
6b278fc7860c1e0e5cf72340e43f78a87159be4c 10-Jul-2007 Owen Anderson <resistor@mac.com> Fix a bunch of things from Chris' feedback


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38493 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
78e02f78ce68274163e1e63be59abd17aaaf6cbf 07-Jul-2007 Owen Anderson <resistor@mac.com> A first stab at memory dependence analysis. This is an interface on top of
alias analysis, adding caching and lazy computation of queries. This will
be used in planned improvements to memory access optimizations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37958 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp