History log of /external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
ec68f552f2a5c1df10813a80929995185eb98243 21-Aug-2012 Chandler Carruth <chandlerc@gmail.com> Port the global copy optimization from the SROA pass to InstCombine.
This optimization is really just replacing allocas wholesale with
globals, there is no scalarization.

The underlying motivation for this patch is to simplify the SROA pass
and focus it on splitting and promoting allocas.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162271 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3eeba88631db6da7d45df67f677556297bd93f75 10-Aug-2012 Pete Cooper <peter_cooper@apple.com> Fix crash when when do lto on Bullet. Dynamic GEPs in SROA were incorrectly being applied to all accesses to an alloca, not just the ones which read from the GEP. Thanks to Evan for reducing the test. rdar://11861001

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161654 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a94d6e87c4c49f2e81b01d66d8bfb591277f8f96 24-Jul-2012 Nadav Rotem <nadav.rotem@intel.com> Clean whitespaces.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160668 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
06cb8ed00696eb14d1b831921452e50ec0568ea2 29-Jun-2012 Chandler Carruth <chandlerc@gmail.com> Move llvm/Support/IRBuilder.h -> llvm/IRBuilder.h

This was always part of the VMCore library out of necessity -- it deals
entirely in the IR. The .cpp file in fact was already part of the VMCore
library. This is just a mechanical move.

I've tried to go through and re-apply the coding standard's preferred
header sort, but at 40-ish files, I may have gotten some wrong. Please
let me know if so.

I'll be committing the corresponding updates to Clang and Polly, and
Duncan has DragonEgg.

Thanks to Bill and Eric for giving the green light for this bit of cleanup.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159421 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
16eeb6f5ebc978b03745177b9ac82684ab1c6932 29-Jun-2012 Bill Wendling <isanbard@gmail.com> The DIBuilder class is just a wrapper around debug info creation
(a.k.a. MDNodes). The module doesn't belong in Analysis. Move it to the VMCore
instead.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159414 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
0bcbd1df7a204e1e512f1a27066d725309de1b13 28-Jun-2012 Bill Wendling <isanbard@gmail.com> Move lib/Analysis/DebugInfo.cpp to lib/VMCore/DebugInfo.cpp and
include/llvm/Analysis/DebugInfo.h to include/llvm/DebugInfo.h.

The reasoning is because the DebugInfo module is simply an interface to the
debug info MDNodes and has nothing to do with analysis.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159312 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2114a8aaba99e901735e69818bb789757ed05cfd 21-Jun-2012 Nadav Rotem <nadav.rotem@intel.com> Add a number of threshold arguments to the SRA pass.

A patch by Tom Stellard with minor changes.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158918 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
80f020a34ac60c7552c8e9b9c1f4b84c63941b57 17-Jun-2012 Pete Cooper <peter_cooper@apple.com> Now that SROA can form alloca's for dynamic vector accesses, further improve it to be able to replace operations on these vector alloca's with insert/extract element insts

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158623 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
06e6c385cbf550ab73ad70bd3e02d9ad2fd3089c 16-Jun-2012 Pete Cooper <peter_cooper@apple.com> Fix crash from r158529 on Bullet.

Dynamic GEPs created by SROA needed to insert extra "i32 0"
operands to index through structs and arrays to get to the
vector being indexed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158590 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
cbf73908f1d4cc1cb7104bfd451af30c177cb7a5 15-Jun-2012 Pete Cooper <peter_cooper@apple.com> Allow SROA to split up an array of vectors into multiple vectors, even when the vectors are dynamically indexed

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158529 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6399b7c51076846942a0c05b4823ca9a8f55b5fc 15-Jun-2012 Pete Cooper <peter_cooper@apple.com> Recommit r158407: Allow SROA to look at a vector type and see if the offset is out of range to be replaced with a scalar access. Now with additional fix and test for indexing into a vector inside a struct

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158479 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9e066625b77dc211b2fa97523d1c0d06abb6312b 14-Jun-2012 Pete Cooper <peter_cooper@apple.com> Revert r158454: Allow SROA to look at a vector type... Its breaking the vectorise buildbot

This reverts commit 12c1f86ffa731e2952c80d2cc577000c96b8962c.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158462 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
77fdd3ad4afb2a8cd99a1dc7f24faa0e900a1aaf 14-Jun-2012 Pete Cooper <peter_cooper@apple.com> Recommit r158407: Allow SROA to look at a vector type and see if the offset is out of range to be replaced with a scalar access. Now with additional fix and test for indexing into a vector inside a struct

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158454 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e91f926f3b76774aa7ed4c327fbde6a39e42c87f 13-Jun-2012 Pete Cooper <peter_cooper@apple.com> Revert "Allow SROA to look at a vector type and see if the offset is out of range to be replaced with a scalar access"

This reverts commit 51786e0aaec76b973205066bd44f7f427b21969f.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158408 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
51786e0aaec76b973205066bd44f7f427b21969f 13-Jun-2012 Pete Cooper <peter_cooper@apple.com> Allow SROA to look at a vector type and see if the offset is out of range to be replaced with a scalar access

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158407 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9012c57e18d76d562b1f3e60bf19cccefa7b793e 20-May-2012 Peter Collingbourne <peter@pcc.me.uk> Do not eliminate allocas whose alignment exceeds that of the
copied-in constant, as a subsequent user may rely on over alignment.
Fixes PR12885.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157134 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c9f27ee842b633662f381b6e2cbd6de96b5bf905 11-Apr-2012 Chad Rosier <mcrosier@apple.com> Typo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154522 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
01b305f94c663d000e2128c7ea8c0c4e02e9eeb4 23-Mar-2012 Duncan Sands <baldrick@free.fr> Indentation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153322 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1fe6bfca593404e261922990f230326934dda4d6 22-Mar-2012 Chris Lattner <sabre@nondot.org> don't use "signed", just something I noticed in patches flying by.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153237 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
7e2fa3142aca46d9435a5804932ef76123c0cf71 15-Mar-2012 Aaron Ballman <aaron@aaronballman.com> Fixed a transform crash when setting a negative size value for memset. Fixes PR12202.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152756 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6a1c7796d3966851456b835d69909e3df7f5e966 23-Feb-2012 Benjamin Kramer <benny.kra@googlemail.com> Reflow code, no functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151262 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
4ca829e89567f002fc74eb0e3e532a7c7662e031 25-Jan-2012 Chris Lattner <sabre@nondot.org> use ConstantVector::getSplat in a few places.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148929 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
125ef76934f37e3fdc8ce4a2cc238850d06c5912 27-Dec-2011 Rafael Espindola <rafael.espindola@gmail.com> Fix warning.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147284 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1608769abeb1430dc34f31ffac0d9850f99ae36a 05-Dec-2011 Nadav Rotem <nadav.rotem@intel.com> Add support for vectors of pointers.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145801 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
75f69e3a3dff78cb89ded1d6c96ccb65603a82d9 12-Nov-2011 Eli Friedman <eli.friedman@gmail.com> Make sure scalarrepl picks the correct alloca when it rewrites a bitcast. Fixes PR11353.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144442 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
90747e34e6ca7162eaf8dde032649071045f161d 23-Oct-2011 Cameron Zwarich <zwarich@apple.com> The element insertion code in scalar replacement doesn't handle incorrect
element types, even though the element extraction code does. It is surprising
that this bug has been here for so long. Fixes <rdar://problem/10318778>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142740 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c055a8782ee66f6041cc00997857d98d6b9e9b4a 11-Oct-2011 Cameron Zwarich <zwarich@apple.com> Fix PR11106 by correcting a typo that has been in the code for over a year. This
would have never worked, since the element type of a vector type is never a
vector type. Also fix the conditional to be more direct in checking whether
EltTy is a vector type.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141713 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
446d95224b35b0fef06200b950d45839f1d5f262 11-Oct-2011 Cameron Zwarich <zwarich@apple.com> Remove a lot of the fancy scalar replacement code for dealing with llvm-gcc's
lowering of NEON code. It provides little-to-no benefit now and only introduces
additional complexity.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141646 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a9390a4d5f5d568059a80970d22194b165d097a7 27-Sep-2011 Benjamin Kramer <benny.kra@googlemail.com> Stop emitting instructions with the name "tmp" they eat up memory and have to be uniqued, without any benefit.

If someone prefers %tmp42 to %42, run instnamer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140634 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d102a03b36fb522899cefc31a396c9793b929cf6 22-Sep-2011 Eli Friedman <eli.friedman@gmail.com> PR10987: add a missed safety check to isSafePHIToSpeculate in scalarrepl.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140327 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2bc3d52b9ab422ee9f7e42a1a4e3b818e623a5f7 12-Sep-2011 Eli Friedman <eli.friedman@gmail.com> Change a bunch of isVolatile() checks to check for atomic load/store as well.

No tests; these changes aren't really interesting in the sense that the logic is the same for volatile and atomic.

I believe this completes all of the changes necessary for the optimizer to handle loads and stores correctly. I'm going to try and come up with some additional testing, though.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139533 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5a1cb644c903da49dc612a0ba5044505d066259e 26-Jul-2011 Nick Lewycky <nicholas@mxc.ca> Finish adding support for lifetime intrinsics to SROA. Fixes PR10121!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136008 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a9203109f4ac95aa7e9624f2838e3d89623ec902 25-Jul-2011 Jay Foad <jay.foad@gmail.com> Convert GetElementPtrInst to use ArrayRef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135904 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
856e13ddace4174ad1b07f65ebb18b2fd835ed57 22-Jul-2011 Dan Gohman <gohman@apple.com> Fix MergeInVectorType to check for vector types with the same alloc
size but different element types, so that it filters out the cases
that CreateShuffleVectorCast doesn't handle. This fixes rdar://9786827.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135721 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
8fbbb3980755d74539a0aed02bc18842ed2bd18d 19-Jul-2011 Jay Foad <jay.foad@gmail.com> Convert TargetData::getIndexedOffset to use ArrayRef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135478 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
a4acb008cb2a9953d9cb4c90ecf6424bd32ebc0c 07-Jul-2011 Devang Patel <dpatel@apple.com> Use DBG_VALUE location while inserting DBG_VALUE during alloca promotion.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134568 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
4fd3c5957e6a272b60d6446e745136187d07f812 07-Jul-2011 Devang Patel <dpatel@apple.com> Handle cases where multiple dbg.declare and dbg.value intrinsics are tied to one alloca.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134549 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
231a5ab746ca12000aa57208869a98f78781aa6b 06-Jul-2011 Devang Patel <dpatel@apple.com> Simplify. Consolidate dbg.declare handling in AllocaPromoter.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134538 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
394d1f1948c1b5c9e902059104b08a4837dfbbee 01-Jul-2011 Nick Lewycky <nicholas@mxc.ca> Fix likely typo, reduce number of instruction name collisions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134235 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9174d5c7383490d79b6a483d73cded54e32275d6 27-Jun-2011 Nick Lewycky <nicholas@mxc.ca> Teach one piece of scalarrepl to handle lifetime markers. When transforming an
alloca that only holds a copy of a global and we're going to replace the users
of the alloca with that global, just nuke the lifetime intrinsics. Part of
PR10121.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133905 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3ebb05d9a6bf6604a4b25770cfda1872983b03b2 18-Jun-2011 Cameron Zwarich <zwarich@apple.com> When scalar replacement returns a vector type, only accept it if the vector
type's bitwidth matches the (allocated) size of the alloca. This severely
pessimizes vector scalar replacement when the only vector type being used is
something like <3 x float> on x86 or ARM whose allocated size matches a
<4 x float>.

I hope to fix some of the flawed assumptions about allocated size throughout
scalar replacement and reenable this in most cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133338 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6be41eb7f00319f5ffa1a5435dcd1e81b3ce932d 18-Jun-2011 Cameron Zwarich <zwarich@apple.com> Fix an invalid bitcast crash that occurs when doing a partial memset of a vector
alloca. Fixes part of <rdar://problem/9580800>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133336 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
aab3ea244cb014beb21c112729034879a5d4e5ee 18-Jun-2011 Cameron Zwarich <zwarich@apple.com> Remove a pointless assignment. Nothing checks the value of VectorTy anymore now
unless ScalarKind is Vector.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133335 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5b93d3ca6f9c6e81924063abb1487598906dcdab 14-Jun-2011 Cameron Zwarich <zwarich@apple.com> Be more obvious about what is being tested.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132982 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
15cd80c16b4e63b99dcbe45d2baa9456d414aaca 14-Jun-2011 Cameron Zwarich <zwarich@apple.com> Fix grammar.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132952 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c0e2607564c1259f2d2c56cbff8f78dc0853860d 13-Jun-2011 Cameron Zwarich <zwarich@apple.com> Rename MergeInType to MergeInTypeForLoadOrStore.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132940 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5179782cf03cfabfe89df71677e0ffc772b5fdd5 13-Jun-2011 Cameron Zwarich <zwarich@apple.com> Remove the HadAVector instance variable and replace it with a use of ScalarKind.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132939 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9837a5c95981c239b34c1d0dfb51d4096409cbe1 13-Jun-2011 Cameron Zwarich <zwarich@apple.com> Remove a vacuous check.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132938 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
deb74f21f205aa245568ea965132eb076a3bf88c 13-Jun-2011 Cameron Zwarich <zwarich@apple.com> Have SRoA explicitly track the kind of scalar it is promoting. This is pretty
spartan right now, but I plan to encode more information in this enum to improve
the correctness and reliability of SRoA. At least this first pass makes it
possible to make VectorTy an actual VectorType.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132937 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
dd68912801861273dc3dca33cfc18357213049a4 13-Jun-2011 Cameron Zwarich <zwarich@apple.com> Remove an argument that is always true.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132936 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c4f78208b399111cc4f5d97ed1875566819f34b4 09-Jun-2011 Cameron Zwarich <zwarich@apple.com> Remove a vacuous condition.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132767 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
96cc1d0dfbcf9c7ffffc65f0aa008ff532d444f4 09-Jun-2011 Cameron Zwarich <zwarich@apple.com> Fix PR10104 by adding a bounds check on a vector element access check. It was
assuming that all offsets are legal vector accesses, and thus trying to access
the float member of { <2 x float>, float } as the 3rd element of the first
member.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132766 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
0398d6135daef709f80837e457a75dc2e1c2aab7 09-Jun-2011 Cameron Zwarich <zwarich@apple.com> Fix an assymmetry between ConvertScalar_ExtractValue and ConvertScalar_InsertValue. The
former was using the size of the entire alloca, whereas the latter was correctly using
the allocated size of the immediate type being converted (which may differ from the size
of the alloca). This fixes PR10082.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132759 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
abb25122050349ccf77f8afb198a985e7a4d95ee 03-Jun-2011 Devang Patel <dpatel@apple.com> Use IRBuilder, preserve line numbers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132578 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
13a16083abcdacf2ee44ae95b084f87937ea9ace 24-May-2011 Cameron Zwarich <zwarich@apple.com> Clean up the lazy initialization of DIBuilder a bit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131956 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c827939046670a9800659b83e2048f1d3a79a531 24-May-2011 Cameron Zwarich <zwarich@apple.com> Make LoadAndStorePromoter preserve debug info and create llvm.dbg.values when
promoting allocas to SSA variables. Fixes <rdar://problem/9479036>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131953 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5389210e638401b8982b6de7c4e4a16999007035 06-May-2011 Duncan Sands <baldrick@free.fr> Fix PR9820: a read-only call differs from a load in that a load doesn't
return the pointer being dereferenced, it returns the pointee, but a call
might return the pointer itself.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130979 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
344731c01805aeda49c747bac6148501fa85557c 20-Apr-2011 Cameron Zwarich <zwarich@apple.com> Fix another case of <rdar://problem/9184212> that only occurs with code
generated by llvm-gcc, since llvm-gcc uses 2 i64s for passing a 4 x float
vector on ARM rather than an i64 array like Clang.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129878 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c5c43b958cf2f251c836f94d4499adb6296f0611 20-Apr-2011 Cameron Zwarich <zwarich@apple.com> The bitcast case here is actually handled uniformly earlier in the function, so
delete it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129877 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5fc1282c1822d692ed1681cdc4c315950c6eb1d8 20-Apr-2011 Cameron Zwarich <zwarich@apple.com> Cleanup some code to better use an early return style in preparation for adding
more cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129876 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
481823aa819ea1dd25567ae616dca93056ef770a 14-Apr-2011 Mon P Wang <wangmp@apple.com> Cleanup r129509 based on comments by Chris


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129532 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ddf9abf2b6ee3a1104057df20ec3be61b410441e 14-Apr-2011 Mon P Wang <wangmp@apple.com> Cleanup r129472 by using a utility routine as suggested by Eli.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129509 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
be0761c8202405cdd33f1103d262c0aa97895a8e 13-Apr-2011 Mon P Wang <wangmp@apple.com> Vectors with different number of elements of the same element type can have
the same allocation size but different primitive sizes(e.g., <3xi32> and
<4xi32>). When ScalarRepl promotes them, it can't use a bit cast but
should use a shuffle vector instead.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129472 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3ecfc861b4365f341c5c969b40e1afccde676e6f 30-Mar-2011 Jay Foad <jay.foad@gmail.com> Remove PHINode::reserveOperandSpace(). Instead, add a parameter to
PHINode::Create() giving the (known or expected) number of operands.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128537 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d8b4fb4aab4d6fedb2b14bed1b846451b17bde7c 30-Mar-2011 Jay Foad <jay.foad@gmail.com> (Almost) always call reserveOperandSpace() on newly created PHINodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128535 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9827b78b51f285e90c2b1e5add9b28d10c88595c 29-Mar-2011 Cameron Zwarich <zwarich@apple.com> Do some simple copy propagation through integer loads and stores when promoting
vector types. This helps a lot with inlined functions when using the ARM soft
float ABI. Fixes <rdar://problem/9184212>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128453 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c77a10fe0a40861bcb4bd2a0c170c948a57be688 26-Mar-2011 Cameron Zwarich <zwarich@apple.com> Fix a typo and add a test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128331 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1537ce75ed25bbca58096383bb1fb9dd427bf1aa 23-Mar-2011 Cameron Zwarich <zwarich@apple.com> Fix PR9464 by correcting some math that just happened to be right in most cases
that were hit in practice.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128146 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1bcdb6ffad79936a96b46080bf0fed867243b32a 16-Mar-2011 Cameron Zwarich <zwarich@apple.com> Fix a comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127728 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
85b0f468cf8390fca3ec356cd498ce0039dbad4f 16-Mar-2011 Cameron Zwarich <zwarich@apple.com> Only convert allocas to scalars if it is profitable. The profitability metric I
chose is having a non-memcpy/memset use and being larger than any native integer
type. Originally I chose having an access of a size smaller than the total size
of the alloca, but this caused some minor issues on the spirit benchmark where
SRoA runs again after some inlining.

This fixes <rdar://problem/8613163>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127718 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
deac268f893d5dadea845466fa0e5a11647c6113 16-Mar-2011 Cameron Zwarich <zwarich@apple.com> Better use initializer lists.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127716 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d4c9c3e6b97e095c24d989c0f5ce763f90100ef1 16-Mar-2011 Cameron Zwarich <zwarich@apple.com> Add a clarifying comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127715 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
032c10fee2a4bb731488ce75844878009d3bd409 09-Mar-2011 Cameron Zwarich <zwarich@apple.com> Fix a crasher introduced by r127317 that is seen on the bots when using an
alloca as both integer and floating-point vectors of the same size. Bugpoint is
not cooperating with me, but I'll try to find a manual testcase tomorrow.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127320 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b2fd770136b92637c5f084b743eab29f910288d5 09-Mar-2011 Cameron Zwarich <zwarich@apple.com> Add support to scalar replacement for partial vector accesses of an alloca, e.g.
a union of a float, <2 x float>, and <4 x float>. This mostly comes up with the
use of vector intrinsics, especially in NEON when programmers know the layout of
the register file. This enables codegen to eliminate a lot of the subregister
traffic it would otherwise generate.

This commit only enables this for a small number of floating-point cases, but a
lot more integer cases. I assume this is okay for all ports, but I did not do
extensive testing of the quality of code involving i512 vectors and the like. If
there is a use case where this generates worse code than before, let me know and
we can scale it back.

This fixes <rdar://problem/9036264>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127317 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c9ecd14cee020f884313b60f8696384d3e7848f7 09-Mar-2011 Cameron Zwarich <zwarich@apple.com> Move vector type merging to a separate function in preparation for it getting
more complicated.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127316 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2ca5c8644e6c35b3a7910a576ed89cddb7b82c3b 15-Feb-2011 Chris Lattner <sabre@nondot.org> convert ConstantVector::get to use ArrayRef.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125537 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
75831904220042260c4faece8507a2807acba47f 14-Feb-2011 Chris Lattner <sabre@nondot.org> revert my ConstantVector patch, it seems to have made the llvm-gcc
builders unhappy.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125504 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
283c8caccd093f8e1d4f0bdd01ac240b4edbd20a 14-Feb-2011 Chris Lattner <sabre@nondot.org> Switch ConstantVector::get to use ArrayRef instead of a pointer+size
idiom. Change various clients to simplify their code.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125487 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
e3357863aaabe297c5fa819d083f2308ebb5f2c2 24-Jan-2011 Chris Lattner <sabre@nondot.org> enhance SRoA to promote allocas that are used by PHI nodes. This often
occurs because instcombine sinks loads and inserts phis. This kicks in
on such apps as 175.vpr, eon, 403.gcc, xalancbmk and a bunch of times in
spec2006 in some app that uses std::deque.

This resolves the last of rdar://7339113.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124090 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c87c50a39c1bc27437352feee0f6aba2d50fa1b5 23-Jan-2011 Chris Lattner <sabre@nondot.org> Enhance SRoA to promote allocas that are used by selects in some
common cases. This triggers a surprising number of times in SPEC2K6
because min/max idioms end up doing this. For example, code from the
STL ends up looking like this to SRoA:

%202 = load i64* %__old_size, align 8, !tbaa !3
%203 = load i64* %__old_size, align 8, !tbaa !3
%204 = load i64* %__n, align 8, !tbaa !3
%205 = icmp ult i64 %203, %204
%storemerge.i = select i1 %205, i64* %__n, i64* %__old_size
%206 = load i64* %storemerge.i, align 8, !tbaa !3

We can now promote both the __n and the __old_size allocas.

This addresses another chunk of rdar://7339113, poor codegen on
stringswitch.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124088 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
145c532e68acdf70d40bab5bc2034f692848b8dc 23-Jan-2011 Chris Lattner <sabre@nondot.org> Enhance SRoA to be more aggressive about scalarization of aggregate allocas
that have PHI or select uses of their element pointers. This can often happen
when instcombine sinks two loads into a successor, inserting a phi or select.

With this patch, we can scalarize the alloca, but the pinned elements are not
yet promoted. This is still a win for large aggregates where only one element
is used. This fixes rdar://8904039 and part of rdar://7339113 (poor codegen
on stringswitch).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124070 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6c95d24927b11fb76bc3e76ebe6a8198d74fc178 23-Jan-2011 Chris Lattner <sabre@nondot.org> have AllocaInfo store the alloca being inspected, simplifying callers.
No functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124067 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d01a0da090407762fe3b770d84f049d72d06467e 23-Jan-2011 Chris Lattner <sabre@nondot.org> Rearrange some code a bit. Change MarkUnsafe to
handle the "Transformation preventing inst" printing,
so that -scalarrepl -debug will always print the rejected
instruction. No functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124066 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
85a7c690852d6151acff0d8821762d75bc774ab4 23-Jan-2011 Chris Lattner <sabre@nondot.org> remove an old hack that avoided creating MMX datatypes. The
X86 backend has been fixed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124064 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b1686c32fc694636cbf15a59b23b2a741b65ecf4 18-Jan-2011 Cameron Zwarich <zwarich@apple.com> Remove outdated references to dominance frontiers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123724 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
419e8a62997987e0509efe721c1ea81ac29f09f3 17-Jan-2011 Cameron Zwarich <zwarich@apple.com> Roll r123609 back in with two changes that fix test failures with expensive
checks enabled:

1) Use '<' to compare integers in a comparison function rather than '<='.

2) Use the uniqued set DefBlocks rather than Info.DefiningBlocks to initialize
the priority queue.

The speedup of scalarrepl on test-suite + SPEC2000 + SPEC2006 is a bit less, at
just under 16% rather than 17%.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123662 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b1086a9c6d6d5ee3070a68076f38eec841cefd58 17-Jan-2011 Cameron Zwarich <zwarich@apple.com> Roll out r123609 due to failures on the llvm-x86_64-linux-checks bot.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123618 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ebed6de7b10d20721f5bd30ed3730cadefed7963 17-Jan-2011 Cameron Zwarich <zwarich@apple.com> Eliminate the use of dominance frontiers in PromoteMemToReg. In addition to
eliminating a potentially quadratic data structure, this also gives a 17%
speedup when running -scalarrepl on test-suite + SPEC2000 + SPEC2006. My initial
experiment gave a greater speedup around 25%, but I moved the dominator tree
level computation from dominator tree construction to PromoteMemToReg.

Since this approach to computing IDFs has a much lower overhead than the old
code using precomputed DFs, it is worth looking at using this new code for the
second scalarrepl pass as well.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123609 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
396a0567cf959d86a8a1ad185e54d84f5dacbacf 16-Jan-2011 Chris Lattner <sabre@nondot.org> tidy up a comment, as suggested by duncan


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123590 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
7e9b427c879ae32b72fd24aeaf011e87e5692fd7 16-Jan-2011 Chris Lattner <sabre@nondot.org> if an alloca is only ever accessed as a unit, and is accessed with load/store instructions,
then don't try to decimate it into its individual pieces. This will just make a mess of the
IR and is pointless if none of the elements are individually accessed. This was generating
really terrible code for std::bitset (PR8980) because it happens to be lowered by clang
as an {[8 x i8]} structure instead of {i64}.

The testcase now is optimized to:

define i64 @test2(i64 %X) {
br label %L2

L2: ; preds = %0
ret i64 %X
}

before we generated:

define i64 @test2(i64 %X) {
%sroa.store.elt = lshr i64 %X, 56
%1 = trunc i64 %sroa.store.elt to i8
%sroa.store.elt8 = lshr i64 %X, 48
%2 = trunc i64 %sroa.store.elt8 to i8
%sroa.store.elt9 = lshr i64 %X, 40
%3 = trunc i64 %sroa.store.elt9 to i8
%sroa.store.elt10 = lshr i64 %X, 32
%4 = trunc i64 %sroa.store.elt10 to i8
%sroa.store.elt11 = lshr i64 %X, 24
%5 = trunc i64 %sroa.store.elt11 to i8
%sroa.store.elt12 = lshr i64 %X, 16
%6 = trunc i64 %sroa.store.elt12 to i8
%sroa.store.elt13 = lshr i64 %X, 8
%7 = trunc i64 %sroa.store.elt13 to i8
%8 = trunc i64 %X to i8
br label %L2

L2: ; preds = %0
%9 = zext i8 %1 to i64
%10 = shl i64 %9, 56
%11 = zext i8 %2 to i64
%12 = shl i64 %11, 48
%13 = or i64 %12, %10
%14 = zext i8 %3 to i64
%15 = shl i64 %14, 40
%16 = or i64 %15, %13
%17 = zext i8 %4 to i64
%18 = shl i64 %17, 32
%19 = or i64 %18, %16
%20 = zext i8 %5 to i64
%21 = shl i64 %20, 24
%22 = or i64 %21, %19
%23 = zext i8 %6 to i64
%24 = shl i64 %23, 16
%25 = or i64 %24, %22
%26 = zext i8 %7 to i64
%27 = shl i64 %26, 8
%28 = or i64 %27, %25
%29 = zext i8 %8 to i64
%30 = or i64 %29, %28
ret i64 %30
}

In this case, instcombine was able to eliminate the nonsense, but in PR8980 enough
PHIs are in play that instcombine backs off. It's better to not generate this stuff
in the first place.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123571 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
70728532799d751b8e0e97719dcb3344a2fc97de 16-Jan-2011 Chris Lattner <sabre@nondot.org> Use an irbuilder to get some trivial constant folding when doing a store
of a constant.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123570 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
192228edb1c08ca11da2df959072bcaa99eacd63 16-Jan-2011 Chris Lattner <sabre@nondot.org> enhance FoldOpIntoPhi in instcombine to try harder when a phi has
multiple uses. In some cases, all the uses are the same operation,
so instcombine can go ahead and promote the phi. In the testcase
this pushes an add out of the loop.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123568 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
deaf55f69865bbc997a569c2a689ec5b0fbdefef 15-Jan-2011 Chris Lattner <sabre@nondot.org> Generalize LoadAndStorePromoter a bit and switch LICM
to use it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123501 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d0f56132cfa6e25fb9692e84ea12444c86b92ae4 14-Jan-2011 Chris Lattner <sabre@nondot.org> switch SRoA to use LoadAndStorePromoter instead of its own copy of the code.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123457 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b352d6eb49927a7c707cbd9046cfc525b0c3f2d7 14-Jan-2011 Chris Lattner <sabre@nondot.org> split SROA into two passes: one that uses DomFrontiers (-scalarrepl)
and one that uses SSAUpdater (-scalarrepl-ssa)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123436 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e0a1a5ba91df6817f9ffae7af65ed0bda66f7620 14-Jan-2011 Chris Lattner <sabre@nondot.org> Implement full support for promoting allocas to registers using SSAUpdater
instead of DomTree/DomFrontier. This may be interesting for reducing compile
time. This is currently disabled, but seems to work just fine.

When this is enabled, we eliminate two runs of dominator frontier, one in the
"early per-function" optimizations and one in the "interlaced with inliner"
function passes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123434 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6974302e3ff20746268721959efed807c7711bfc 13-Jan-2011 Bob Wilson <bob.wilson@apple.com> Fix whitespace.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123396 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
f0908aeade2f41d2fed82de8d85448358b379328 13-Jan-2011 Bob Wilson <bob.wilson@apple.com> Check for empty structs, and for consistency, zero-element arrays.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123383 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
704d1347c5009f674408fae6f78343b415891274 13-Jan-2011 Bob Wilson <bob.wilson@apple.com> Extend SROA to handle arrays accessed as homogeneous structs and vice versa.

This is a minor extension of SROA to handle a special case that is
important for some ARM NEON operations. Some of the NEON intrinsics
return multiple values, which are handled as struct types containing
multiple elements of the same vector type. The corresponding return
types declared in the arm_neon.h header have equivalent arrays. We
need SROA to recognize that it can split up those arrays and structs
into separate vectors, even though they are not always accessed with
the same type. SROA already handles loads and stores of an entire
alloca by using insertvalue/extractvalue to access the individual
pieces, and that code works the same regardless of whether the type
is a struct or an array. So, all that needs to be done is to check
for compatible arrays and homogeneous structs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123381 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
694a10e7d8410f24639971224ce0e282c8cd04cb 13-Jan-2011 Bob Wilson <bob.wilson@apple.com> Make SROA more aggressive with allocas containing padding.

SROA only split up structs and arrays one level at a time, so padding can
only cause trouble if it is located in between the struct or array elements.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123380 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9fc5cdf77c812aaa80419036de27576d45894d0d 02-Jan-2011 Chris Lattner <sabre@nondot.org> split dom frontier handling stuff out to its own DominanceFrontier header,
so that Dominators.h is *just* domtree. Also prune #includes a bit.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122714 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
61db1f56d0b717d67557bbb2a9d83af1449458cb 26-Dec-2010 Chris Lattner <sabre@nondot.org> start using irbuilder to make mem intrinsics in a few passes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122572 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e90a6333c3a4514f88c8a3dddd10d9bcddcd6d85 23-Dec-2010 Mon P Wang <wangmp@apple.com> Preserve the address space when generating bitcasts for MemTransferInst in ConvertToScalarInfo


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122462 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
081f80078dccf02c1f9c61378ff88bbf1b4afb5e 24-Nov-2010 Nick Lewycky <nicholas@mxc.ca> Treat a call of function pointer like a load of the pointer when considering
whether the pointer can be replaced with the global variable it is a copy of.
Fixes PR8680.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120126 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
f601d6df6f43bb833461cbcee475c36998e6c259 20-Nov-2010 Benjamin Kramer <benny.kra@googlemail.com> Simplify code. No change in functionality.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119908 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2e29ebd9e8efefe3ff926aa99cf2e5323665998e 18-Nov-2010 Chris Lattner <sabre@nondot.org> finish a thought.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119690 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6248065194778c866164b0c10f09f0f0d91b91ac 18-Nov-2010 Chris Lattner <sabre@nondot.org> allow eliminating an alloca that is just copied from an constant global
if it is passed as a byval argument. The byval argument will just be a
read, so it is safe to read from the original global instead. This allows
us to promote away the %agg.tmp alloca in PR8582


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119686 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a9be1df6d7a9b5a07253d83a634ae5876e7e5550 18-Nov-2010 Chris Lattner <sabre@nondot.org> enhance the "alloca is just a memcpy from constant global"
to ignore calls that obviously can't modify the alloca
because they are readonly/readnone.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119683 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2e61849f45144f2f05d57b00947df7e101610694 18-Nov-2010 Chris Lattner <sabre@nondot.org> fix a small oversight in the "eliminate memcpy from constant global"
optimization. If the alloca that is "memcpy'd from constant" also has
a memcpy from *it*, ignore it: it is a load. We now optimize the testcase to:

define void @test2() {
%B = alloca %T
%a = bitcast %T* @G to i8*
%b = bitcast %T* %B to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %b, i8* %a, i64 124, i32 4, i1 false)
call void @bar(i8* %b)
ret void
}

previously we would generate:

define void @test() {
%B = alloca %T
%b = bitcast %T* %B to i8*
%G.0 = getelementptr inbounds %T* @G, i32 0, i32 0
%tmp3 = load i8* %G.0, align 4
%G.1 = getelementptr inbounds %T* @G, i32 0, i32 1
%G.15 = bitcast [123 x i8]* %G.1 to i8*
%1 = bitcast [123 x i8]* %G.1 to i984*
%srcval = load i984* %1, align 1
%B.0 = getelementptr inbounds %T* %B, i32 0, i32 0
store i8 %tmp3, i8* %B.0, align 4
%B.1 = getelementptr inbounds %T* %B, i32 0, i32 1
%B.12 = bitcast [123 x i8]* %B.1 to i8*
%2 = bitcast [123 x i8]* %B.1 to i984*
store i984 %srcval, i984* %2, align 1
call void @bar(i8* %b)
ret void
}



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119682 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
af81235ef96a7a005b7fdfe5a64cce30df3d820d 16-Oct-2010 Benjamin Kramer <benny.kra@googlemail.com> Eliminate some calls to Value::getNameStr.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116670 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
0488fb649a56b7fc89a5814df5308813f9e5a85d 01-Oct-2010 Dale Johannesen <dalej@apple.com> Massive rewrite of MMX:
The x86_mmx type is used for MMX intrinsics, parameters and
return values where these use MMX registers, and is also
supported in load, store, and bitcast.

Only the above operations generate MMX instructions, and optimizations
do not operate on or produce MMX intrinsics.

MMX-sized vectors <2 x i32> etc. are lowered to XMM or split into
smaller pieces. Optimizations may occur on these forms and the
result casted back to x86_mmx, provided the result feeds into a
previous existing x86_mmx operation.

The point of all this is prevent optimizations from introducing
MMX operations, which is unsafe due to the EMMS problem.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115243 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
72eaa0e5eb345a8483608675b86dfcfa465c784c 02-Sep-2010 Chris Lattner <sabre@nondot.org> deepen my MMX/SRoA hack to avoid hurting non-x86 codegen.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112763 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
91abace4ef6fdfe01bcebfb8e90938e71f8a5c4f 01-Sep-2010 Chris Lattner <sabre@nondot.org> add a gross hack to work around a problem that Argiris reported
on llvmdev: SRoA is introducing MMX datatypes like <1 x i64>,
which then cause random problems because the X86 backend is
producing mmx stuff without inserting proper emms calls.

In the short term, force off MMX datatypes. In the long term,
the X86 backend should not select generic vector types to MMX
registers. This is being worked on, but won't be done in time
for 2.8. rdar://8380055


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112696 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3126f1c02895a9d18a504a5ad4af9ef2029c0dca 18-Aug-2010 Chris Lattner <sabre@nondot.org> remove dead prototype.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111342 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
a6aac4c5bc22bb10c7adb11eee3f82c703af7002 16-Jul-2010 Gabor Greif <ggreif@gmail.com> eliminate CallInst::ArgOffset

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108522 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
0238f8c430050d23ef861169bb4c4f930af0ef97 08-Jul-2010 Chris Lattner <sabre@nondot.org> Fix the second half of PR7437: scalarrepl wasn't preserving
address spaces when SRoA'ing memcpy's.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107846 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6f14c8c7c1ec97797a04631abad6885bfaabcc6d 30-Jun-2010 Gabor Greif <ggreif@gmail.com> use getArgOperand instead of getOperand

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107271 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d6bf5cf6415d1d12d66257e640471958920601b5 28-Jun-2010 Gabor Greif <ggreif@gmail.com> employ CallInst::ArgOffset (for now)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107015 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
19101c7585c191376d898e3e66e35acd9bd777c2 28-Jun-2010 Gabor Greif <ggreif@gmail.com> use cached value

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107000 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1495247f517c0ac3aeeb9e6c7c0205dd7849d332 27-Jun-2010 Chris Lattner <sabre@nondot.org> minor cleanup to SROA: when lowering type unsafe accesses to
large integers, the first inserted value would always create
an 'or X, 0'. Even though this is trivially zapped by
instcombine, don't bother creating this pointless instruction.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106979 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
a9b2313c13a1bc8cbae751da03a9049ecaf0f918 20-Apr-2010 Gabor Greif <ggreif@gmail.com> use abstract accessors to CallInst

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101899 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
a0bada729ffaa1bfc80ef25935bdc5a67432708f 16-Apr-2010 Chris Lattner <sabre@nondot.org> fix comment noticed by Bob


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101437 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
d55c1c16598eba6111fb3a5b6e5dbc6469a562f7 16-Apr-2010 Chris Lattner <sabre@nondot.org> fix PR6832: we were using the alignment of a pointer when we
wanted the alignment of the pointee.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101432 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a001b664988f759d194f3d5d880c61449219fc2e 16-Apr-2010 Chris Lattner <sabre@nondot.org> improve comments.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101429 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
4cc576bc5ea27951f3bb15ccefbe483293bf8eaf 16-Apr-2010 Chris Lattner <sabre@nondot.org> pull all the ConvertToScalarInfo code together into one
place.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101427 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
593375d04ab32be0161607a741d310172f142b93 16-Apr-2010 Chris Lattner <sabre@nondot.org> more refactoring: suck some stuff out of SRoA into
ConvertToScalarInfo.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101425 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c4472072641f702dbd99ae12b7da089e75c44a99 16-Apr-2010 Chris Lattner <sabre@nondot.org> introduce a new ConvertToScalarInfo struct to simplify
CanConvertToScalar/MergeInType. Eliminate a pointless
LLVMContext argument to MergeInType.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101422 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
31d80103d56c026403d7fb6c50833664ff63ddcb 15-Apr-2010 Chris Lattner <sabre@nondot.org> tidy interface to isOnlyCopiedFromConstantGlobal


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101405 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
8a8a4350db3e66a517dc179ba38439c66bb726a8 06-Apr-2010 Gabor Greif <ggreif@gmail.com> performance: get rid of repeated dereferencing of use_iterator by caching its result

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100550 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
20adc9dc4650313f017b27d9818eb2176238113d 04-Apr-2010 Mon P Wang <wangmp@apple.com> Reapply address space patch after fixing an issue in MemCopyOptimizer.
Added support for address spaces and added a isVolatile field to memcpy, memmove, and memset,
e.g., llvm.memcpy.i32(i8*, i8*, i32, i32) -> llvm.memcpy.p0i8.p0i8.i32(i8*, i8*, i32, i32, i1)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100304 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e754d3fb852abdeaf910c7331eed60f6303597c1 02-Apr-2010 Mon P Wang <wangmp@apple.com> Revert r100191 since it breaks objc in clang


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100199 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e33c848fa481b038d5ad0c7c898c33b2b27ec71e 02-Apr-2010 Mon P Wang <wangmp@apple.com> Reapply address space patch after fixing an issue in MemCopyOptimizer.
Added support for address spaces and added a isVolatile field to memcpy, memmove, and memset,
e.g., llvm.memcpy.i32(i8*, i8*, i32, i32) -> llvm.memcpy.p0i8.p0i8.i32(i8*, i8*, i32, i32, i1)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100191 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
100f090adde26005b9f1eca96871dff52825b27b 31-Mar-2010 Bob Wilson <bob.wilson@apple.com> Revert Mon Ping's change 99928, since it broke all the llvm-gcc buildbots.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99948 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
808bab0169ab7d2e8dfdc72dd2c991cd8ff2396d 30-Mar-2010 Mon P Wang <wangmp@apple.com> Added support for address spaces and added a isVolatile field to memcpy, memmove, and memset,
e.g., llvm.memcpy.i32(i8*, i8*, i32, i32) -> llvm.memcpy.p0i8.p0i8.i32(i8*, i8*, i32, i32, i1)
A update of langref will occur in a subsequent checkin.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99928 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
b0bc6c361da9009e8414efde317d9bbff755f6c0 15-Feb-2010 Duncan Sands <baldrick@free.fr> Uniformize the names of type predicates: rather than having isFloatTy and
isInteger, we now have isFloatTy and isIntegerTy. Requested by Chris!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96223 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3992feb075b27ff37b63017078a977206f97d10d 03-Feb-2010 Bob Wilson <bob.wilson@apple.com> Adjust the heuristics used to decide when SROA is likely to be profitable.
The SRThreshold value makes perfect sense for checking if an entire aggregate
should be promoted to a scalar integer, but it is not so good for splitting
an aggregate into its separate elements. A struct may contain a large embedded
array along with some scalar fields that would benefit from being split apart
by SROA. Even if the total aggregate size is large, it may still be good to
perform SROA. Thus, the most important piece of this patch is simply moving
the aggregate size comparison vs. SRThreshold so that it guards only the
aggregate promotion.

We have also been checking the number of elements to decide if an aggregate
should be split up. The limit of "SRThreshold/4" seemed rather arbitrary,
and I don't think it's very useful to derive this limit from SRThreshold
anyway. I've collected some data showing that the current default limit of
32 (since SRThreshold defaults to 128) is a reasonable cutoff for struct
types. One thing suggested by the data is that distinguishing between structs
and arrays might be useful. There are (obviously) a lot more large arrays
than large structs (as measured by the number of elements and not the total
size -- a large array inside a struct still counts as a single element given
the way we do SROA right now). Out of 8377 arrays where we successfully
performed SROA while compiling a large set of benchmarks, only 16 of them had
more than 8 elements. And, for those 16 arrays, it's not at all clear that
SROA was actually beneficial. So, to offset the compile time cost of
investigating more large structs for SROA, the patch lowers the limit on array
elements to 8.

This fixes Apple Radar 7563690.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95224 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2d64ca09d4e1ea57ca07aef8c1c2276f38c4293a 27-Jan-2010 Benjamin Kramer <benny.kra@googlemail.com> Use the less expensive getName function instead of getNameStr.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94683 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
032742972f69c014dd5e985753c06a7fe3d08704 25-Jan-2010 Bob Wilson <bob.wilson@apple.com> Change Value::getUnderlyingObject to have the MaxLookup value specified as a
parameter with a default value, instead of just hardcoding it in the
implementation. The limit of MaxLookup = 6 was introduced in r69151 to fix
a performance problem with O(n^2) behavior in instcombine, but the scalarrepl
pass is relying on getUnderlyingObject to go all the way back to an AllocaInst.
Making the limit part of the method signature makes it clear that by default
the result is limited and should help avoid similar problems in the future.
This fixes pr6126.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94433 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6c146eefbf75875250af37a0f1ea70fc6b4716ee 22-Jan-2010 Victor Hernandez <vhernandez@apple.com> DbgInfoIntrinsics no longer appear in an instruction's use list; so clean up looking for them in use iterations and remove OnlyUsedByDbgInfoIntrinsics()

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94111 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a756b1d914eaf4ad610d29398e5831b394bd1547 19-Jan-2010 Bob Wilson <bob.wilson@apple.com> Fix a crash in scalarrepl for memcpy/memmove where the source and destination
are the same. I had already fixed a similar problem where the source and
destination were different bitcasts derived from the same alloca, but the
previous fix still did not handle the case where both operands are exactly
the same value. Radar 7552893.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93848 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
321a813c536e2f1f2f05bbe78a7fbf64046f0557 05-Jan-2010 Dan Gohman <gohman@apple.com> Use do+while instead of while for loops which obviously have a
non-zero trip count. Use SmallVector's pop_back_val().


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92734 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
504c7d8973b86b5129912cf34b780953027dadc7 05-Jan-2010 David Greene <greened@obbligato.org> Change errs() to dbgs().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92610 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
aadadb3973bb202cd4d2e20e842588162e780f13 22-Dec-2009 Chris Lattner <sabre@nondot.org> Fix the Convert to scalar to not insert dead loads in the store case. The
load is needed when we have a small store into a large alloca (at which
point we get a load/insert/store sequence), but when you do a full-sized
store, this load ends up being dead.

This dead load is bad in really large nasty testcases where the load ends
up causing mem2reg to insert large chains of dependent phi nodes which only
ADCE can delete. Instead of doing this, just don't insert the dead load.

This fixes rdar://6864035



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91917 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
97eee027f980464fde0a9374fa90bac6a771c4dc 22-Dec-2009 Chris Lattner <sabre@nondot.org> fix some fixme's by using twines


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91916 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
f27a4cd7837794392d35a96bdc7d5fb196190b3e 22-Dec-2009 Bob Wilson <bob.wilson@apple.com> Generalize SROA to allow the first index of a GEP to be non-zero. Add a
missing check that an array reference doesn't go past the end of the array,
and remove some redundant checks for in-bound array and vector references
that are no longer needed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91897 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3c3af5d15569d708d2dc8f13351bc77056b4d70d 21-Dec-2009 Bob Wilson <bob.wilson@apple.com> Remove special-case SROA optimization of variable indexes to one-element and
two-element arrays. After restructuring the SROA code, it was not safe to
do this without adding more checking. It is not clear that this special-case
has really been useful, and removing this simplifies the code quite a bit.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91828 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e88728d757d3090f1c0885b78d3675a7e143a2f9 19-Dec-2009 Bob Wilson <bob.wilson@apple.com> Update my SROA changes in response to review.
* change FindElementAndOffset to return a uint64_t instead of unsigned, and
to identify the type to be used for that result in a GEP instruction.
* move "isa<ConstantInt>" to be first in conditional.
* replace some dyn_casts with casts.
* add a comment about handling mem intrinsics.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91762 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b742defa0a8f3e477c3ed641da49aab276937556 18-Dec-2009 Bob Wilson <bob.wilson@apple.com> Reapply 91459 with a simple fix for the problem that broke the x86_64-darwin
bootstrap. This also replaces the WeakVH references that Chris objected to
with normal Value references.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91711 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
39c88a641b6bf9cea7d270ccee85992f9c30f40f 17-Dec-2009 Bob Wilson <bob.wilson@apple.com> Re-revert 91459. It's breaking the x86_64 darwin bootstrap.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91607 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2674089cefe519195e00bdf879647438cfb1cb0f 16-Dec-2009 Daniel Dunbar <daniel@zuster.org> Reapply r91459, it was only unmasking the bug, and since TOT is still broken having it reverted does no good.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91559 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
fca55c8ac7d12e4139ad0ab7d74b76c47935aef6 16-Dec-2009 Daniel Dunbar <daniel@zuster.org> Revert "Reapply 91184 with fixes and an addition to the testcase to cover the
problem", this broke llvm-gcc bootstrap for release builds on
x86_64-apple-darwin10.

This reverts commit db22309800b224a9f5f51baf76071d7a93ce59c9.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91534 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
970eaf2520760d9aa30ceb3a8d4a0dde4548784d 15-Dec-2009 Bob Wilson <bob.wilson@apple.com> Reapply 91184 with fixes and an addition to the testcase to cover the problem
found last time. Instead of trying to modify the IR while iterating over it,
I've change it to keep a list of WeakVH references to dead instructions, and
then delete those instructions later. I also added some special case code to
detect and handle the situation when both operands of a memcpy intrinsic are
referencing the same alloca.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91459 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a59adc40153f3e0f9843952c127d179b5ebe6c4c 14-Dec-2009 Chris Lattner <sabre@nondot.org> revert r91184, because it causes a crash on a .bc file I just
sent to Bob.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91268 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
73a1b67cb9b52553c3684b8eea3f97f35744354b 12-Dec-2009 Bob Wilson <bob.wilson@apple.com> Revise scalar replacement to be more flexible about handle bitcasts and GEPs.
While scanning through the uses of an alloca, keep track of the current offset
relative to the start of the alloca, and check memory references to see if
the offset & size correspond to a component within the alloca. This has the
nice benefit of unifying much of the code from isSafeUseOfAllocation,
isSafeElementUse, and isSafeUseOfBitCastedAllocation. The code to rewrite
the uses of a promoted alloca, after it is determined to be safe, is
reorganized in the same way.

Also, when rewriting GEP instructions, mark them as "in-bounds" since all the
indices are known to be safe.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91184 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
efc58e793370597eb3e3100e284453c5eddc6099 09-Dec-2009 Bob Wilson <bob.wilson@apple.com> Fix a comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90975 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
65ab34f3f29f8e4efb10b2cc40e58c5ce63a76d7 08-Dec-2009 Bob Wilson <bob.wilson@apple.com> Some superficial cleanups.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90866 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
78c50b8cd68d266d4ed6f8eca443cf8142a01204 08-Dec-2009 Bob Wilson <bob.wilson@apple.com> Clean up dead operands left around after SROA replaces a mem intrinsic.
I'm not aware that this does anything significant on its own, but it's
needed for another patch that I'm working on.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90864 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
39fdd6947cb800a0db7f7012fe843c98b414602f 04-Dec-2009 Bob Wilson <bob.wilson@apple.com> Fix up some comments.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90603 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d614a1f0a89927639db37efd8840fe006dacd7a1 04-Dec-2009 Bob Wilson <bob.wilson@apple.com> Fix 80-column violations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90601 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e6f329476c6598db1b45c3d573eac9cf65179831 29-Nov-2009 Benjamin Kramer <benny.kra@googlemail.com> Revert r90089 for now, it's breaking selfhost.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90097 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
4aac07e8983d31c6bbbcd100ad119859fb4bb968 29-Nov-2009 Benjamin Kramer <benny.kra@googlemail.com> Fix two FIXMEs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90089 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
8976e5950f3ee5eebfe6e9520bbf47a419ee8b6a 27-Nov-2009 Chris Lattner <sabre@nondot.org> fix PR5436 by making the 'simple' case of SRoA not promote out of range
array indexes. The "complex" case of SRoA still handles them, and correctly.

This fixes a weirdness where we'd correctly avoid transforming A[0][42] if
the 42 was too large, but we'd only do it if it was one gep, not two separate
ones.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90007 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ce2c51b6701c06f701efa2871794b7710cb64b41 23-Nov-2009 Nick Lewycky <nicholas@mxc.ca> Pull LLVMContext out of PromoteMemToReg.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89645 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
cf0fe8d813727383d630055bb9d1cde21b00b7e7 05-Oct-2009 Chris Lattner <sabre@nondot.org> strength reduce a ton of type equality tests to check the typeid (Through
the new predicates I added) instead of going through a context and doing a
pointer comparison. Besides being cheaper, this allows a smart compiler
to turn the if sequence into a switch.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83297 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
59136251f348a02a26f7a711a0e7fc459a727093 15-Sep-2009 Nick Lewycky <nicholas@mxc.ca> Add more newlines to make up for the ones removed from the end of instructions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81851 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ff1147072a0c9dbe91572bbbbf93031c6451bbae 15-Sep-2009 Chris Lattner <sabre@nondot.org> add newline to debug dump


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81840 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3e8b6631e67e01e4960a7ba4668a50c596607473 02-Sep-2009 Chris Lattner <sabre@nondot.org> eliminate VISIBILITY_HIDDEN from Transforms/Scalar. PR4861


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80766 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
bdff548e4dd577a72094d57b282de4e765643b96 23-Aug-2009 Chris Lattner <sabre@nondot.org> eliminate the "Value" printing methods that print to a std::ostream.
This required converting a bunch of stuff off DOUT and other cleanups.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79819 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e4af1cf4027d19cbe52d70858353dc1765ea3aef 19-Aug-2009 Dan Gohman <gohman@apple.com> Make SROA and PredicateSimplifier cope if TargetData is not
available. This is very conservative for now.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79442 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d3aa25e2a8b04853f03341b6275ef7718659b915 17-Aug-2009 Nick Lewycky <nicholas@mxc.ca> Don't crash trying to promote VLAs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79226 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1d0be15f89cb5056e20e2d24faa8d6afb1573bca 13-Aug-2009 Owen Anderson <resistor@mac.com> Push LLVMContexts through the IntegerType APIs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78948 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a7235ea7245028a0723e8ab7fd011386b3900777 31-Jul-2009 Owen Anderson <resistor@mac.com> Move a few more APIs back to 2.5 forms. The only remaining ones left to change back are
metadata related, which I'm waiting on to avoid conflicting with Devang.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77721 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9e9a0d5fc26878e51a58a8b57900fcbf952c2691 31-Jul-2009 Owen Anderson <resistor@mac.com> Move more code back to 2.5 APIs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77635 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
fe09b2098ac483f6d6ce6ea4ab237a9539bdb6b9 30-Jul-2009 Daniel Dunbar <daniel@zuster.org> Twines: Don't allow implicit conversion from integers, this is too tricky.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77605 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
7f93dc8345fb33652973e35cae4c3b58addf4f87 30-Jul-2009 Daniel Dunbar <daniel@zuster.org> Switch obvious clients to Twine instead of utostr (when they were already using
a Twine, e.g., for names).
- I am a little ambivalent about this; we don't want the string conversion of
utostr, but using overload '+' mixed with string and integer arguments is
sketchy. On the other hand, this particular usage is something of an idiom.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77579 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
debcb01b0f0a15f568ca69e8f288fade4bfc7297 30-Jul-2009 Owen Anderson <resistor@mac.com> Move types back to the 2.5 API.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77516 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
baf3c404409d5e47b13984a7f95bfbd6d1f2e79e 29-Jul-2009 Owen Anderson <resistor@mac.com> Move ConstantExpr to 2.5 API.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77494 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
af7ec975870f92245f1f1484ac80a1e2db6a0afa 28-Jul-2009 Owen Anderson <resistor@mac.com> Return ConstantVector to 2.5 API.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77366 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6e0d1cb30957a636c53158d3089e6fb88348a57a 25-Jul-2009 Daniel Dunbar <daniel@zuster.org> Initial update to VMCore to use Twines for string arguments.
- The only meat here is in Value.{h,cpp} the rest is essential 'const
std::string &' -> 'const Twine &'.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77048 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
eed707b1e6097aac2bb6b3d47271f6300ace7f2e 25-Jul-2009 Owen Anderson <resistor@mac.com> Revert the ConstantInt constructors back to their 2.5 forms where possible, thanks to contexts-on-types. More to come.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77011 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e922c0201916e0b980ab3cfe91e1413e68d55647 22-Jul-2009 Owen Anderson <resistor@mac.com> Get rid of the Pass+Context magic.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76702 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
50dead06ffc107edb7e84857baaeeb09039c631c 16-Jul-2009 Owen Anderson <resistor@mac.com> Revert yesterday's change by removing the LLVMContext parameter to AllocaInst and MallocInst.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75863 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9adc0abad3c3ed40a268ccbcee0c74cb9e1359fe 15-Jul-2009 Owen Anderson <resistor@mac.com> Move EVER MORE stuff over to LLVMContext.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75703 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c23197a26f34f559ea9797de51e187087c039c42 14-Jul-2009 Torok Edwin <edwintorok@gmail.com> llvm_unreachable->llvm_unreachable(0), LLVM_UNREACHABLE->llvm_unreachable.
This adds location info for all llvm_unreachable calls (which is a macro now) in
!NDEBUG builds.
In NDEBUG builds location info and the message is off (it only prints
"UREACHABLE executed").


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75640 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c25e7581b9b8088910da31702d4ca21c4734c6d7 11-Jul-2009 Torok Edwin <edwintorok@gmail.com> assert(0) -> LLVM_UNREACHABLE.
Make llvm_unreachable take an optional string, thus moving the cerr<< out of
line.
LLVM_UNREACHABLE is now a simple wrapper that makes the message go away for
NDEBUG builds.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75379 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
7d696d80409aad20bb5da0fc4eccab941dd371d4 11-Jul-2009 Torok Edwin <edwintorok@gmail.com> Convert more assert(0)+abort() -> LLVM_UNREACHABLE,
and abort()/exit() -> llvm_report_error().


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75363 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
333c40096561218bc3597cf153c0a3895274414c 10-Jul-2009 Owen Anderson <resistor@mac.com> This started as a small change, I swear. Unfortunately, lots of things call the [I|F]CmpInst constructors. Who knew!?


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75200 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
07cf79ef537caff6d39145f190a28a336e629b6f 07-Jul-2009 Owen Anderson <resistor@mac.com> "LLVMContext* " --> "LLVMContext *"


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74878 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
0a205a459884ec745df1c529396dd921f029dafd 06-Jul-2009 Owen Anderson <resistor@mac.com> More LLVMContext-ification.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74807 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
fa5cbd6d0fbda23fd669c8718e07b19001b2d21a 03-Jul-2009 Owen Anderson <resistor@mac.com> Even more passes being LLVMContext'd.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74781 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
44118f0e25c25fedda1ccdd6a72f072c0b5c96e7 16-Jun-2009 Dan Gohman <gohman@apple.com> Use Type::getScalarType.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73451 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
0906b1bf09769d5301e62d372b363b4cd0b5a6c7 06-Jun-2009 Jay Foad <jay.foad@gmail.com> Use cast<> instead of dyn_cast<> for things that are known to be
Instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73002 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
41b33f437f70dcf63e35d08e5f4202258ef05c15 01-Jun-2009 Eli Friedman <eli.friedman@gmail.com> PR4286: Make RewriteLoadUserOfWholeAlloca and
RewriteStoreUserOfWholeAlloca deal with tail padding because
isSafeUseOfBitCastedAllocation expects them to. Otherwise, we crash
trying to erase the bitcast.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72688 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
777d2306b36816a53bc1ae1244c0dc7d998ae691 09-May-2009 Duncan Sands <baldrick@free.fr> Rename PaddedSize to AllocSize, in the hope that this
will make it more obvious what it represents, and stop
it being confused with the StoreSize.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71349 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ef554846f061b9b467e7824f8d01e3c59778f3f6 08-May-2009 Chris Lattner <sabre@nondot.org> fix RewriteStoreUserOfWholeAlloca to use the correct type size
method, fixing a crash on PR4146. While the store will
ultimately overwrite the "padded size" number of bits in memory,
the stored value may be a subset of this size. This function
only wants to handle the case where all bits are stored.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71224 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
33e24adc3bc3d046aa05cf903fb74da1610b57cb 21-Apr-2009 Chris Lattner <sabre@nondot.org> fix a crash on a pointless but valid zero-length memset, rdar://6808691


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69680 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b0c4199a55d72fb9560f00b84a92a062fb8e79ea 18-Mar-2009 Zhou Sheng <zhousheng00@gmail.com> Explicitly check for StoreInst, do not lose the chance to delete
unused loads or bitcasts.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67202 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
16767c6b49659d5187ebb70c97207b0bf146ba35 18-Mar-2009 Zhou Sheng <zhousheng00@gmail.com> Revert my previous change on Local.cpp, instead, fix the bug on scalarrepl.
If the instruction has no users, it is also not only used by debug info
and should not be deleted.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67194 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
29e641761e81bd000bdc4ccfae479c6dda18e402 08-Mar-2009 Chris Lattner <sabre@nondot.org> teach SROA to handle promoting vector allocas with a memset into them into
a vector type instead of into an integer type.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66368 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c570487d45f7426dc5f75c0309122d6f9330ecf7 08-Mar-2009 Chris Lattner <sabre@nondot.org> Enhance SROA to "promote to scalar" allocas which are
memcpy/memmove'd into or out of. This fixes a serious
perf issue that Nate ran into.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66366 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
dfe964ce8c367248e587f2d9ecc7fac5ee2c6fdc 08-Mar-2009 Chris Lattner <sabre@nondot.org> change the MemIntrinsic get/setAlignment method to take an unsigned
instead of a Constant*, which is what the clients of it really want.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66364 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3ce5e887aef457701da95f1c6ccbd58ec3d32fe4 08-Mar-2009 Chris Lattner <sabre@nondot.org> Introduce a new MemTransferInst pseudo class, which is a common
parent between MemCpyInst and MemMoveInst, simplify some code to
use it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66361 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
00e389c8c8874be352358f2cbd23f98d3df5ebad 06-Mar-2009 Devang Patel <dpatel@apple.com> While converting an aggregate to scalare, ignore and remove aggregate's debug info.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66262 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
67fca63da267da491de9526b09a7de0a2e99ece2 06-Mar-2009 Evan Cheng <evan.cheng@apple.com> SRThreshold is meant to be inclusive.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66227 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
88fe1ad187041e2ca636e0f86204e30fc6e14300 04-Mar-2009 Chris Lattner <sabre@nondot.org> complete comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66055 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
0ff83ab9858d56fb37ea634c52eafb3de641d733 04-Mar-2009 Chris Lattner <sabre@nondot.org> this wasn't intended to be committed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66054 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1541e0f7da2de6ae84434060df81e93b64000924 04-Mar-2009 Chris Lattner <sabre@nondot.org> Fix PR3720 by properly propagating alignment information from memcpy/memmove
onto element accesses.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66053 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3aaf5d993365c803dad9a8815b6c9864505af5b6 03-Mar-2009 Bill Wendling <isanbard@gmail.com> Use > instead of >=. We want to promote aggregates of 128-bytes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65960 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5a377cb27bb65ea608b63716454c9ae214ef81c9 03-Mar-2009 Bill Wendling <isanbard@gmail.com> Reapply r65755, but reversing "<" to ">=".


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65945 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
8fe40819aed54e3c33adcbc972f414f5e13a6de8 01-Mar-2009 Bill Wendling <isanbard@gmail.com> Temporarily revert r65755. It was causing failures in the self-hosting
testsuite:

Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/CodeGen/X86/dg.exp ...
FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/CodeGen/X86/nancvt.ll
Failed with exit(1) at line 2
while running: grep 2147027116 nancvt.ll.tmp | count 3
count: expected 3 lines and got 0.
child process exited abnormally
FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/CodeGen/X86/vec_ins_extract.ll
Failed with exit(1) at line 1
while running: llvm-as < /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/CodeGen/X86/vec_ins_extract.ll | opt -scalarrepl -instcombine | llc -march=x86 -mcpu=yonah | not /usr/bin/grep sub.*esp
subl $28, %esp
subl $28, %esp
child process exited abnormally

And more.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65758 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
af89a3f1d3bc77f5f0c39ef8189b4506462b0111 01-Mar-2009 Chris Lattner <sabre@nondot.org> hoist the check for alloca size up so that it controls CanConvertToScalar
as well as isSafeAllocaToScalarRepl.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65755 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
7afe8fa066b227bb2683b6890d6cfdc4ebac0205 10-Feb-2009 Devang Patel <dpatel@apple.com> Use early exits. Reduce indentation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64226 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
4afc90dacf309999d8b7f6c2b4b0c56af346bab5 10-Feb-2009 Devang Patel <dpatel@apple.com> Enable scalar replacement of AllocaInst whose one of the user is dbg info.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64207 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e991ced7cb5cb86d1c33b8d400b1be41185bc69f 06-Feb-2009 Chris Lattner <sabre@nondot.org> fix PR3489, use bits instead of bytes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63916 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1aa7056b13ac9e0f3fe176d37739ec484d4fe4da 03-Feb-2009 Chris Lattner <sabre@nondot.org> teach "convert from scalar" to handle loads of fca's.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63659 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6e01115bb122ef82daa6c8133a1d199d6b8ff767 03-Feb-2009 Chris Lattner <sabre@nondot.org> refactor the interface to ConvertUsesOfLoadToScalar,
renaming it to ConvertScalar_ExtractValue


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63658 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9bc67da0a9982f2f7597d1d46cf18f079e4f8f98 03-Feb-2009 Chris Lattner <sabre@nondot.org> convert ConvertUsesOfLoadToScalar to use IRBuilder,
no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63652 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
65a650291d01638853aaf1e80fcc2fc86a785957 03-Feb-2009 Chris Lattner <sabre@nondot.org> switch ConvertScalar_InsertValue to use an IRBuilder, no
functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63651 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9b872db775797dea4b391a9347cfbd2ca9c558e2 03-Feb-2009 Chris Lattner <sabre@nondot.org> make scalar conversion handle stores of first class
aggregate values. loads are not yet handled (coming
soon to an sroa near you).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63649 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1a3257bbf53eff4c7cfcbef972dd382f7baa7592 03-Feb-2009 Chris Lattner <sabre@nondot.org> Make SROA produce a vector only when the alloca is actually
accessed at least once as a vector. This prevents it from
compiling the example in not-a-vector into:

define double @test(double %A, double %B) {
%tmp4 = insertelement <7 x double> undef, double %A, i32 0
%tmp = insertelement <7 x double> %tmp4, double %B, i32 4
%tmp2 = extractelement <7 x double> %tmp, i32 4
ret double %tmp2
}

instead, producing the integer code. Producing vectors when they
aren't otherwise in the program is dangerous because a lot of other
code treats them carefully and doesn't want to break them down.
OTOH, many things want to break down tasty i448's.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63638 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
55a683d7f03b0acaf7807545fd7be319498277ff 03-Feb-2009 Chris Lattner <sabre@nondot.org> add another case of undefined behavior without crashing, PR3466.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63620 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3d730f7453af5ecb1be4b8c5d48843ad5637de37 03-Feb-2009 Chris Lattner <sabre@nondot.org> Teach ConvertUsesToScalar to handle memset, allowing it to handle
crazy cases like:

struct f { int A, B, C, D, E, F; };
short test4() {
struct f A;
A.A = 1;
memset(&A.B, 2, 12);
return A.C;
}



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63596 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
7809ecd5b019d26498499121f4d9c0b7de2f0a14 03-Feb-2009 Chris Lattner <sabre@nondot.org> rearrange how SRoA handles promotion of allocas to vectors.
With the new world order, it can handle cases where the first
store into the alloca is an element of the vector, instead of
requiring the first analyzed store to have the vector type
itself. This allows us to un-xfail
test/CodeGen/X86/vec_ins_extract.ll.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63590 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
15c82779033826a0958182b746b03a22ad04a16a 02-Feb-2009 Chris Lattner <sabre@nondot.org> inline SROA::ConvertToScalar, no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63544 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
996d7a97f94de45a3627b03eb3c44b2b325f3e51 02-Feb-2009 Chris Lattner <sabre@nondot.org> Fix a bug which caused us to miscompile a couple of Ada
tests. Thanks for the beautiful reduced testcase Duncan!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63529 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
4b3dfbd220835cbba519162712c9cb6afaa44059 02-Feb-2009 Duncan Sands <baldrick@free.fr> Fix a comment (bytes -> bits), reformat a comment
and remove trailing whitespace. No functionality
change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63511 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
0e7c46bc7eb68099eecd1244390dccd0a77d0875 02-Feb-2009 Duncan Sands <baldrick@free.fr> Fix an obvious thinko.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63510 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2e0d5f84325303fa95997cd66485811bd0a6ef70 31-Jan-2009 Chris Lattner <sabre@nondot.org> Simplify and generalize the SROA "convert to scalar" transformation to
be able to handle *ANY* alloca that is poked by loads and stores of
bitcasts and GEPs with constant offsets. Before the code had a number
of annoying limitations and caused it to miss cases such as storing into
holes in structs and complex casts (as in bitfield-sroa) where we had
unions of bitfields etc. This also handles a number of important cases
that are exposed due to the ABI lowering stuff we do to pass stuff by
value.

One case that is pretty great is that we compile
2006-11-07-InvalidArrayPromote.ll into:

define i32 @func(<4 x float> %v0, <4 x float> %v1) nounwind {
%tmp10 = call <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float> %v1)
%tmp105 = bitcast <4 x i32> %tmp10 to i128
%tmp1056 = zext i128 %tmp105 to i256
%tmp.upgrd.43 = lshr i256 %tmp1056, 96
%tmp.upgrd.44 = trunc i256 %tmp.upgrd.43 to i32
ret i32 %tmp.upgrd.44
}

which turns into:

_func:
subl $28, %esp
cvttps2dq %xmm1, %xmm0
movaps %xmm0, (%esp)
movl 12(%esp), %eax
addl $28, %esp
ret

Which is pretty good code all things considering :).

One effect of this is that SROA will start generating arbitrary bitwidth
integers that are a multiple of 8 bits. In the case above, we got a
256 bit integer, but the codegen guys assure me that it can handle the
simple and/or/shift/zext stuff that we're doing on these operations.

This addresses rdar://6532315



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63469 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6e733d34ca487ab7ff8a6def018a933620393869 28-Jan-2009 Chris Lattner <sabre@nondot.org> Fix some issues with volatility, move "CanConvertToScalar" check
after the others.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63227 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ceb4d1aecb9deffe59b3dcdc9a783ffde8477be9 12-Jan-2009 Duncan Sands <baldrick@free.fr> Rename getABITypeSize to getTypePaddedSize, as
suggested by Chris.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62099 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
583dd6072eed7a446dad8f0e796fa34aec40aa12 09-Jan-2009 Chris Lattner <sabre@nondot.org> Fix PR3304


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61995 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5ffe6acd577696a41932c7b82db06a04687e07ba 08-Jan-2009 Chris Lattner <sabre@nondot.org> This implements the second half of the fix for PR3290, handling
loads from allocas that cover the entire aggregate. This handles
some memcpy/byval cases that are produced by llvm-gcc. This triggers
a few times in kc++ (with std::pair<std::_Rb_tree_const_iterator
<kc::impl_abstract_phylum*>,bool>) and once in 176.gcc (with %struct..0anon).




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61915 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d2fa781169175b827e50953a1d0b7edc6b0c4801 07-Jan-2009 Chris Lattner <sabre@nondot.org> Implement the first half of PR3290: if there is a store of an
integer to a (transitive) bitcast the alloca and if that integer
has the full size of the alloca, then it clobbers the whole thing.
Handle this by extracting pieces out of the stored integer and
filing them away in the SROA'd elements.

This triggers fairly frequently because the CFE uses integers to
pass small structs by value and the inliner exposes these. For
example, in kimwitu++, I see a bunch of these with i64 stores to
"%struct.std::pair<std::_Rb_tree_const_iterator<kc::impl_abstract_phylum*>,bool>"

In 176.gcc I see a few i32 stores to "%struct..0anon".

In the testcase, this is a difference between compiling test1 to:

_test1:
subl $12, %esp
movl 20(%esp), %eax
movl %eax, 4(%esp)
movl 16(%esp), %eax
movl %eax, (%esp)
movl (%esp), %eax
addl 4(%esp), %eax
addl $12, %esp
ret

vs:

_test1:
movl 8(%esp), %eax
addl 4(%esp), %eax
ret

The second half of this will be to handle loads of the same form.




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61853 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d93afec1dbbb1abb3df55e2e007b5f256d09f84a 07-Jan-2009 Chris Lattner <sabre@nondot.org> Factor a bunch of code out into a helper method.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61852 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
cf3218640969175634b82e4e3fde1b9e680a5dc6 07-Jan-2009 Chris Lattner <sabre@nondot.org> use continue to simplify code and reduce nesting, no functionality
change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61851 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
56c3852fb46b7754ad89b998b5968cff0c3937ee 07-Jan-2009 Chris Lattner <sabre@nondot.org> Get TargetData once up front and cache as an ivar instead of
requerying it all over the place.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61850 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d356a7ee0ed7744857dcf497cb20b0128770fb0f 07-Jan-2009 Chris Lattner <sabre@nondot.org> Use the hasAllZeroIndices predicate to simplify some
code, no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61849 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c0bc547c99bd97088e950b3074d917091abe3f51 04-Nov-2008 Dale Johannesen <dalej@apple.com> Allow SROA of vectors. Removing this caused a
huge performance regression in something we care
about. This may not be final fix.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58718 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5fac55fafb53fde5c548bcd08e07418e9d8e549f 06-Oct-2008 Matthijs Kooijman <matthijs@stdin.nl> Allow scalarrepl to treat an all-zero GEP just as bitcast.

This includes not marking a GEP involving a vector as unsafe, but only when it
has all zero indices. This allows scalarrepl to work in a few more cases.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57177 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ae73dc1448d25b02cabc7c64c86c64371453dda8 04-Sep-2008 Dan Gohman <gohman@apple.com> Tidy up several unbeseeming casts from pointer to intptr_t.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55779 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
88e6dc8bf14e8a98888f62173a6581386b8d29a0 23-Aug-2008 Chris Lattner <sabre@nondot.org> Fix PR2423 by checking all indices for out of range access, not only
indices that start with an array subscript. x->field[10000] is just
as bad as (*X)[14][10000].


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55226 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2a6a6457094e05e5f5ab34f90dbd25c13d61f8b5 23-Jun-2008 Chris Lattner <sabre@nondot.org> minor tidying of comments.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52630 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
963a97f1a365c8d09ca681e922371f9ec3473ee8 22-Jun-2008 Chris Lattner <sabre@nondot.org> Fix PR2369 by making scalarrepl more careful about promoting
structures. Its default threshold is to promote things that are
smaller than 128 bytes, which is sane. However, it is not sane
to do this for things that turn into 128 *registers*. Add a cap
on the number of registers introduced, defaulting to 128/4=32.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52611 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
02518140ac3310d0357c26a87b2372d85da9c2f4 05-Jun-2008 Matthijs Kooijman <matthijs@stdin.nl> Learn ScalarReplAggregrates how stores and loads of first class aggregrates
work and how to replace them into individual values. Also, when trying to
replace an aggregrate that is used by load or store with a single (large)
integer, don't crash (but don't replace the aggregrate either).

Also adds a testcase for both structs and arrays.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51997 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a0fcc08e6542a0376917b5c76a0af3eb2650c535 04-Jun-2008 Duncan Sands <baldrick@free.fr> Change packed struct layout so that field sizes
are the same as in unpacked structs, only field
positions differ. This only matters for structs
containing x86 long double or an apint; it may
cause backwards compatibility problems if someone
has bitcode containing a packed struct with a
field of one of those types.
The issue is that only 10 bytes are needed to
hold an x86 long double: the store size is 10
bytes, but the ABI size is 12 or 16 bytes (linux/
darwin) which comes from rounding the store size
up by the alignment. Because it seemed silly not
to pack an x86 long double into 10 bytes in a
packed struct, this is what was done. I now
think this was a mistake. Reserving the ABI size
for an x86 long double field even in a packed
struct makes things more uniform: the ABI size is
now always used when reserving space for a type.
This means that developers are less likely to
make mistakes. It also makes life easier for the
CBE which otherwise could not represent all LLVM
packed structs (PR2402).
Front-end people might need to adjust the way
they create LLVM structs - see following change
to llvm-gcc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51928 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
31e5bdccf29f0ce6172f0f0bbb43a9a736b1ef0c 23-May-2008 Dan Gohman <gohman@apple.com> Use isSingleValueType instead of isFirstClassType to
exclude struct and array types.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51456 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
7cbd8a3e92221437048b484d5ef9c0a22d0f8c58 16-May-2008 Gabor Greif <ggreif@gmail.com> API change for {BinaryOperator|CmpInst|CastInst}::create*() --> Create. Legacy interfaces will be in place for some time. (Merge from use-diet branch.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51200 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
051a950000e21935165db56695e35bade668193b 06-Apr-2008 Gabor Greif <ggreif@gmail.com> API changes for class Use size reduction, wave 1.
Specifically, introduction of XXX::Create methods
for Users that have a potentially variable number of
Uses.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49277 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9d34c4d678cfc836a59a114b7b2cf91e9dd5eac4 29-Feb-2008 Chris Lattner <sabre@nondot.org> fix a bug Anders ran into where scalarrepl would crash when promoting
a union containing a vector and an array whose elements were smaller than
the vector elements. this means we need to compile the load of the
array elements into an extract element plus a truncate.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47752 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
800de31776356910eb877e71df9f32b0a6215324 29-Feb-2008 Chris Lattner <sabre@nondot.org> Refactor some code out of ConvertUsesToScalar into their own methods, no
functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47751 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
916c954bf20f48c3269542fc919ccb92a99496ee 10-Feb-2008 Chris Lattner <sabre@nondot.org> Fix scalarrepl to not 'miscompile' undefined code, part #2.
This fixes the store case, my previous patch just fixed the load
case. rdar://5707076.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46932 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b10e0da065fc2c18b5bee9011eb249e223a23108 30-Jan-2008 Chris Lattner <sabre@nondot.org> Fix a bug where scalarrepl would discard offset if type would match.
In practice this can only happen on code with already undefined behavior,
but this is still a good thing to handle correctly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46539 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.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/Transforms/Scalar/ScalarReplAggregates.cpp
91508a490bc31819d97346083ec02b94eb8d7b27 06-Nov-2007 Duncan Sands <baldrick@free.fr> At the point of calculating the shift amount, the
type of SV has changed from what it originally was.
However we need the store width of the original.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43775 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
18b0ca854fbeebbc48cf1f4473daa428e68f748c 05-Nov-2007 Duncan Sands <baldrick@free.fr> If a long double is in a packed struct, it may be
that there is no padding.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43691 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3cb3650a278e37aa6378127c51e407d2823139b4 04-Nov-2007 Duncan Sands <baldrick@free.fr> Change uses of getTypeSize to getABITypeSize, getTypeStoreSize
or getTypeSizeInBits as appropriate in ScalarReplAggregates.
The right change to make was not always obvious, so it would
be good to have an sroa guru review this. While there I noticed
some bugs, and fixed them: (1) arrays of x86 long double have
holes due to alignment padding, but this wasn't being spotted
by HasStructPadding (renamed to HasPadding). The same goes
for arrays of oddly sized ints. Vectors also suffer from this,
in fact the problem for vectors is much worse because basic
vector assumptions seem to be broken by vectors of type with
alignment padding. I didn't try to fix any of these vector
problems. (2) The code for extracting smaller integers from
larger ones (in the "int union" case) was wrong on big-endian
machines for integers with size not a multiple of 8, like i1.
Probably this is impossible to hit via llvm-gcc, but I fixed
it anyway while there and added a testcase. I also got rid of
some trailing whitespace and changed a function name which
had an obvious typo in it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43672 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ef0ab932ef3b07016ffb827cd529d4787d7ed12e 28-Sep-2007 Dale Johannesen <dalej@apple.com> Don't do SRA for unions with long double fields.
Fixes a SWB crash.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42422 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b8f74793b9d161bc666fe27fc92fe112b6ec169b 04-Sep-2007 David Greene <greened@obbligato.org> Update GEP constructors to use an iterator interface to fix
GLIBCXX_DEBUG issues.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41697 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b0e71edb6b33f822e001500dac90acf95faacea8 02-Aug-2007 Chris Lattner <sabre@nondot.org> Fix an accidental commit.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40758 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
684b22df79c51114a12289e10a4063d5f02259a9 02-Aug-2007 Chris Lattner <sabre@nondot.org> wrap some long lines. Major offenders that are left include
gvn, gvnpre, dse, and predsimplify. To see these, use:

make check-line-length



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40738 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c2bbfc18e9adbbdcf5b3375d8d25e2452f7df7f1 01-Aug-2007 Dan Gohman <gohman@apple.com> More explicit keywords.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40673 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
52eec548206d0b135b55ba52dd0e82e978f15ae5 01-Aug-2007 David Greene <greened@obbligato.org> New CallInst interface to address GLIBCXX_DEBUG errors caused by
indexing an empty std::vector.

Updates to all clients.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40660 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
07a96765daedf180a7102d39fe56c499878312b7 16-Jul-2007 Dan Gohman <gohman@apple.com> Fix comments about vectors to use the current wording.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39921 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ff366850aa9956e167e78d4f5b57aae10d8c5779 09-Jul-2007 Devang Patel <dpatel@apple.com> Expose struct size threhold to allow users to tweak their own setting.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38472 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
33b0b8d242de8d428f11e77ea734a08b47797216 06-Jul-2007 Zhou Sheng <zhousheng00@gmail.com> Correct a typo.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37936 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
326821ef12c911af1d785e305e81dc3c07e456a5 07-Jun-2007 Devang Patel <dpatel@apple.com> Use DominatorTree instead of ETForest.
This allows faster immediate domiantor walk.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37500 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
39a1c04323a5993d6b2993e615ec44c16e19aeea 30-May-2007 Chris Lattner <sabre@nondot.org> Fix Transforms/ScalarRepl/2007-05-29-MemcpyPreserve.ll and the second
half of PR1421, by not decimating structs with holes that are the source and
destination of a memcpy.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37358 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
7139406707eb3869183fd6a3329fe4a77d309692 24-May-2007 Chris Lattner <sabre@nondot.org> Fix PR1446 by not scalarrepl'ing giant structures.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37326 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ecd94c804a563f2a86572dcf1d2e81f397e19daa 06-May-2007 Nick Lewycky <nicholas@mxc.ca> Fix typo in comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36873 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1997473cf72957d0e70322e2fe6fe2ab141c58a6 03-May-2007 Devang Patel <dpatel@apple.com> Drop 'const'


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36662 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3e15bf33e024b9df9e89351a165acfdb1dde51ed 02-May-2007 Devang Patel <dpatel@apple.com> Use 'static const char' instead of 'static const int'.
Due to darwin gcc bug, one version of darwin linker coalesces
static const int, which defauts PassID based pass identification.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36652 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
794fd75c67a2cdc128d67342c6d88a504d186896 01-May-2007 Devang Patel <dpatel@apple.com> Do not use typeinfo to identify pass in pass manager.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36632 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
68c01b3cf35bb7ed2d3a3f63053e304e092bcfdd 25-Apr-2007 Devang Patel <dpatel@apple.com> Mem2Reg does not need TargetData.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36444 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
41968df51e11f581eb19c8f68a8cb2f4e8acc1c5 25-Apr-2007 Devang Patel <dpatel@apple.com> Remove unused function argument.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36441 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
79b3bd395dc3303cde65e18e0524ed2f70268c99 25-Apr-2007 Chris Lattner <sabre@nondot.org> If an alloca only has two types of uses: 1) reads 2) a memcpy/memmove that
copies from a constant global, then we can change the reads to read from the
global instead of from the alloca. This eliminates the alloca and the memcpy,
and promotes secondary optimizations (because the loads are now loads from
a constant global).

This is important for a common C idiom:

void foo() {
int A[] = {1,2,3,4,5,6,7,8,9...};
... only reads of A ...
}

For some reason, people forget to mark the array static or const.

This triggers on these multisource benchmarks:
JM/ldecode: block_pos, [3 x [4 x [4 x i32]]]
FreeBench/mason: m, [18 x i32], inlined 4 times
MiBench/office-stringsearch: search_strings, [1332 x i8*]
MiBench/office-stringsearch: find_strings, [1333 x i8*]
Prolangs-C++/city: dirs, [9 x i8*], inlined 4 places

and these spec benchmarks:
177.mesa: message, [8 x [32 x i8]]
186.crafty: bias_rl45, [64 x i32]
186.crafty: diag_sq, [64 x i32]
186.crafty: empty, [9 x i8]
186.crafty: xlate, [15 x i8]
186.crafty: status, [13 x i8]
186.crafty: bdinfo, [25 x i8]
445.gobmk: routines, [16 x i8*]
458.sjeng: piece_rep, [14 x i8*]
458.sjeng: t, [13 x i32], inlined 4 places.
464.h264ref: block8x8_idx, [3 x [4 x [4 x i32]]]
464.h264ref: block_pos, [3 x [4 x [4 x i32]]]
464.h264ref: j_off_tab, [12 x i32]

This implements Transforms/ScalarRepl/memcpy-from-global.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36429 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a10b29b84b63c448b7cb423598d3a38b0f55cddb 25-Apr-2007 Chris Lattner <sabre@nondot.org> refactor the SROA code out into its own method, no functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36426 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
df07335b4648c4cc255343081fdf61319d90431d 20-Apr-2007 Owen Anderson <resistor@mac.com> Move more passes to using ETForest instead of DominatorTree.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36271 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
843f0767acd05baed952d39e77ea89b438430a4f 19-Apr-2007 Zhou Sheng <zhousheng00@gmail.com> Make use of ConstantInt::isZero instead of ConstantInt::isNullValue.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36261 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ab46275683ef76957619623d3dc9adeb33f9c08e 11-Apr-2007 Chris Lattner <sabre@nondot.org> Fix Transforms/ScalarRepl/union-pointer.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35906 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ed4e51e58e021384cd6e7a281d13d25dbbee2eca 11-Apr-2007 Chris Lattner <sabre@nondot.org> fix a regression introduced by my last patch.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35879 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
f4b1818728fb5cb0740cf5362faf72dd66ccf3ea 11-Apr-2007 Chris Lattner <sabre@nondot.org> Simplify SROA conversion to integer in some ways, make it more general in others.

We now tolerate small amounts of undefined behavior, better emulating what
would happen if the transaction actually occurred in memory. This fixes
SingleSource/UnitTests/2007-04-10-BitfieldTest.c on PPC, at least until
Devang gets a chance to fix the CFE from doing undefined things with bitfields :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35875 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ecb7a77885b174cf4d001a9b48533b3979e7810d 22-Mar-2007 Dan Gohman <gohman@apple.com> Change uses of Function::front to Function::getEntryBlock for readability.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35265 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a9d1a843fc74a9d877e105744e710496863f7580 19-Mar-2007 Chris Lattner <sabre@nondot.org> fix ScalarRepl/2007-03-19-CanonicalizeMemcpy.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35169 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
8bf991193245bb8b7e497e8c16545a206fbe5eef 19-Mar-2007 Chris Lattner <sabre@nondot.org> implement the next chunk of SROA with memset/memcpy's of aggregates. This
implements Transforms/ScalarRepl/memset-aggregate-byte-leader.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35150 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
97f9df1cd12bcea2a952304853193bf833214318 08-Mar-2007 Chris Lattner <sabre@nondot.org> This appears correct, enable it so we can see perf changes on testers


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35024 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c14d3cac4bb5c798fbcc4b9cad87841ca087b017 08-Mar-2007 Chris Lattner <sabre@nondot.org> Second half of PR1226. This is currently still disabled, until I have a chance to
do the correctness/performance analysis testing.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35023 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
372dda8881c7a32a6f5ce0f76a713e3a9ef46ea1 05-Mar-2007 Chris Lattner <sabre@nondot.org> This is the first major step of implementing PR1226. We now successfully
scalarrepl things down to elements, but mem2reg can't promote elements that
are memset/memcpy'd. Until then, the code is disabled "0 &&".


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34924 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ac9dcb94dde5f166ee29372385c0e3b695227ab4 15-Feb-2007 Reid Spencer <rspencer@reidspencer.com> For PR1195:
Change use of "packed" term to "vector" in comments, strings, variable
names, etc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34300 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9d6565a5b1fbc4286d6ee638d8f47a3171a9ed7e 15-Feb-2007 Reid Spencer <rspencer@reidspencer.com> For PR1195:
Rename PackedType -> VectorType, ConstantPacked -> ConstantVector, and
PackedTyID -> VectorTyID. No functional changes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34293 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1ccd185cb49d81465a2901622e58ceae046d1d83 12-Feb-2007 Chris Lattner <sabre@nondot.org> stop using methods that take vectors.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34205 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6934a04a8c15e9971cd1ea4d5c8df2d7afdd5be5 11-Feb-2007 Chris Lattner <sabre@nondot.org> Simplify code by using value::takename


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34176 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b1919e2f08ecb37140af676fd2916f8d5ed7df3d 10-Feb-2007 Chris Lattner <sabre@nondot.org> Privatize StructLayout::MemberOffsets, adding an accessor


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34156 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
cc46cdb47cd0ba2ddbdfd20573a80084eefa9fba 02-Feb-2007 Reid Spencer <rspencer@reidspencer.com> Use short form of binary operator create functions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33783 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
832254e1c2387c0cbeb0a820b8315fbe85cb003a 02-Feb-2007 Reid Spencer <rspencer@reidspencer.com> Changes to support making the shift instructions be true BinaryOperators.
This feature is needed in order to support shifts of more than 255 bits
on large integer types. This changes the syntax for llvm assembly to
make shl, ashr and lshr instructions look like a binary operator:
shl i32 %X, 1
instead of
shl i32 %X, i8 1
Additionally, this should help a few passes perform additional optimizations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33776 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
24d6da5fedcf39891f7d8c5b031c01324b3db545 21-Jan-2007 Reid Spencer <rspencer@reidspencer.com> For PR970:
Clean up handling of isFloatingPoint() and dealing with PackedType.
Patch by Gordon Henriksen!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33415 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c10305743c313558405079452138f03124e87581 19-Jan-2007 Reid Spencer <rspencer@reidspencer.com> For PR1043:
This is the final patch for this PR. It implements some minor cleanup
in the use of IntegerType, to wit:
1. Type::getIntegerTypeMask -> IntegerType::getBitMask
2. Type::Int*Ty changed to IntegerType* from Type*
3. ConstantInt::getType() returns IntegerType* now, not Type*

This also fixes PR1120.

Patch by Sheng Zhou.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33370 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
42a75517250017a52afb03a0ade03cbd49559fe5 15-Jan-2007 Chris Lattner <sabre@nondot.org> rename Type::isIntegral to Type::isInteger, eliminating the old Type::isInteger.
rename Type::getIntegralTypeMask to Type::getIntegerTypeMask.

This makes naming much more consistent. For example, there are now no longer any
instances of IntegerType that are not considered isInteger! :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33225 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
4d5f508318b2f666ed50a2ed5e49e4aa343a92d6 15-Jan-2007 Chris Lattner <sabre@nondot.org> Eliminate calls to isInteger, generalizing code and tightening checks as needed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33218 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a54b7cbd452b3adb2f51346140d996b29c2cdb30 12-Jan-2007 Reid Spencer <rspencer@reidspencer.com> For PR1064:
Implement the arbitrary bit-width integer feature. The feature allows
integers of any bitwidth (up to 64) to be defined instead of just 1, 8,
16, 32, and 64 bit integers.

This change does several things:
1. Introduces a new Derived Type, IntegerType, to represent the number of
bits in an integer. The Type classes SubclassData field is used to
store the number of bits. This allows 2^23 bits in an integer type.
2. Removes the five integer Type::TypeID values for the 1, 8, 16, 32 and
64-bit integers. These are replaced with just IntegerType which is not
a primitive any more.
3. Adjust the rest of LLVM to account for this change.

Note that while this incremental change lays the foundation for arbitrary
bit-width integers, LLVM has not yet been converted to actually deal with
them in any significant way. Most optimization passes, for example, will
still only deal with the byte-width integer types. Future increments
will rectify this situation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33113 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
abaa8ca433a52dc522f6137c01a9552ebec44bb5 08-Jan-2007 Reid Spencer <rspencer@reidspencer.com> Comparison of primitive type sizes should now be done in bits, not bytes.
This patch converts getPrimitiveSize to getPrimitiveSizeInBits where it is
appropriate to do so (comparison of integer primitive types).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33012 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c5b206b6be61d0d933b98b6af5e22f42edd48ad1 31-Dec-2006 Reid Spencer <rspencer@reidspencer.com> For PR950:
This patch replaces signed integer types with signless ones:
1. [US]Byte -> Int8
2. [U]Short -> Int16
3. [U]Int -> Int32
4. [U]Long -> Int64.
5. Removal of isSigned, isUnsigned, getSignedVersion, getUnsignedVersion
and other methods related to signedness. In a few places this warranted
identifying the signedness information from other sources.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32785 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
e4d87aa2de6e52952dca73716386db09aad5a8fd 23-Dec-2006 Reid Spencer <rspencer@reidspencer.com> For PR950:
This patch removes the SetCC instructions and replaces them with the ICmp
and FCmp instructions. The SetCondInst instruction has been removed and
been replaced with ICmpInst and FCmpInst.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32751 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
add2bd7f5941537a97a41e037ae2277fbeed0b4f 23-Dec-2006 Chris Lattner <sabre@nondot.org> add a simple fast-path for dead allocas


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32750 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
0e5f499638c8d277b9dc4a4385712177c53b5681 19-Dec-2006 Chris Lattner <sabre@nondot.org> Switch over Transforms/Scalar to use the STATISTIC macro. For each statistic
converted, we lose a static initializer. This also allows GCC to emit warnings
about unused statistics.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32690 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d22dbdf60652536d44dc4a380059368bea75b5cd 15-Dec-2006 Chris Lattner <sabre@nondot.org> re-enable a temporarily-reverted patch


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32595 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
21c362d3240d0ba9ff98b7f36e54f25936d1a201 13-Dec-2006 Chris Lattner <sabre@nondot.org> revert my recent int<->fp and vector union promotion changes, they expose
obscure bugs affecting the X86 code generator. I will reenable this
when fixed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32524 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a30fc5ed0430081f6495b33e027b7655ca2a66e5 12-Dec-2006 Chris Lattner <sabre@nondot.org> Patch for PR1045 and Transforms/ScalarRepl/2006-12-11-SROA-Crash.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32468 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
509f85140ca777a028b87ccdb46bb19b8f052f8b 11-Dec-2006 Chris Lattner <sabre@nondot.org> trunc to integer, not to FP.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32426 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
1dbea1598ca744084ae42c6c58155b52ab664e42 11-Dec-2006 Chris Lattner <sabre@nondot.org> implement promotion of unions containing two packed types of the same width.
This implements Transforms/ScalarRepl/union-packed.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32422 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ae6a30509463a82182d090d2b42623e02c118596 11-Dec-2006 Chris Lattner <sabre@nondot.org> * Eliminate calls to CastInst::createInferredCast.
* Add support for promoting unions with fp values in them. This produces
our new int<->fp bitcast instructions, implementing
Transforms/ScalarRepl/union-fp-int.ll

As an example, this allows us to compile this:

union intfloat { int i; float f; };
float invsqrt(const float arg_x) {
union intfloat x = { .f = arg_x };
const float xhalf = arg_x * 0.5f;
x.i = 0x5f3759df - (x.i >> 1);
return x.f * (1.5f - xhalf * x.f * x.f);
}

into:

_invsqrt:
movss 4(%esp), %xmm0
movd %xmm0, %eax
sarl %eax
movl $1597463007, %ecx
subl %eax, %ecx
movd %ecx, %xmm1
mulss LCPI1_0, %xmm0
mulss %xmm1, %xmm0
movss LCPI1_1, %xmm2
mulss %xmm1, %xmm0
subss %xmm0, %xmm2
movl 8(%esp), %eax
mulss %xmm2, %xmm1
movss %xmm1, (%eax)
ret

instead of:

_invsqrt:
subl $4, %esp
movss 8(%esp), %xmm0
movss %xmm0, (%esp)
movl (%esp), %eax
movl $1597463007, %ecx
sarl %eax
subl %eax, %ecx
movl %ecx, (%esp)
mulss LCPI1_0, %xmm0
movss (%esp), %xmm1
mulss %xmm1, %xmm0
mulss %xmm1, %xmm0
movss LCPI1_1, %xmm2
subss %xmm0, %xmm2
mulss %xmm2, %xmm1
movl 12(%esp), %eax
movss %xmm1, (%eax)
addl $4, %esp
ret


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32418 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ac0b6ae358944ae8b2b5a11dc08f52c3ed89f2da 06-Dec-2006 Chris Lattner <sabre@nondot.org> Detemplatize the Statistic class. The only type it is instantiated with
is 'unsigned'.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32279 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3da59db637a887474c1b1346c1f3ccf53b6c4663 27-Nov-2006 Reid Spencer <rspencer@reidspencer.com> For PR950:
The long awaited CAST patch. This introduces 12 new instructions into LLVM
to replace the cast instruction. Corresponding changes throughout LLVM are
provided. This passes llvm-test, llvm/test, and SPEC CPUINT2000 with the
exception of 175.vpr which fails only on a slight floating point output
difference.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31931 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b7427031372337e6d67f9573ec6c722ab5ea913e 26-Nov-2006 Bill Wendling <isanbard@gmail.com> Removed #include <iostream> and replaced with llvm_* streams.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31923 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3822ff5c71478c7c90a50ca57045fb676fcb5005 08-Nov-2006 Reid Spencer <rspencer@reidspencer.com> For PR950:
This patch converts the old SHR instruction into two instructions,
AShr (Arithmetic) and LShr (Logical). The Shr instructions now are not
dependent on the sign of their operands.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31542 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d92515034fc4157850b981f696702cc2f35733f0 07-Nov-2006 Chris Lattner <sabre@nondot.org> scalarrepl should not split the two elements of the vsiidx array:
int func(vFloat v0, vFloat v1) {
int ii;
vSInt32 vsiidx[2];
vsiidx[0] = _mm_cvttps_epi32(v0);
vsiidx[1] = _mm_cvttps_epi32(v1);
ii = ((int *) vsiidx)[4];
return ii;
}

This fixes Transforms/ScalarRepl/2006-11-07-InvalidArrayPromote.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31524 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3ed469ccd7b028a030b550d84b7336d146f5d8fa 02-Nov-2006 Reid Spencer <rspencer@reidspencer.com> For PR786:
Turn on -Wunused and -Wno-unused-parameter. Clean up most of the resulting
fall out by removing unused variables. Remaining warnings have to do with
unused functions (I didn't want to delete code without review) and unused
variables in generated code. Maintainers should clean up the remaining
issues when they see them. All changes pass DejaGnu tests and Olden.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31380 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ae5d51c9c915f93fbf9b3e644a165c96d6b0ddbd 24-Oct-2006 Chris Lattner <sabre@nondot.org> Fix Transforms/ScalarRepl/2006-10-23-PointerUnionCrash.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31151 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b83eb6447ba155342598f0fabe1f08f5baa9164a 20-Oct-2006 Reid Spencer <rspencer@reidspencer.com> For PR950:
This patch implements the first increment for the Signless Types feature.
All changes pertain to removing the ConstantSInt and ConstantUInt classes
in favor of just using ConstantInt.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31063 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c836333c3b0a18c398436ae00667a8fb5e476129 09-Oct-2006 Chris Lattner <sabre@nondot.org> Implement SROA of unions with mixed pointers/integers in them. This implements
PR892 and Transforms/ScalarRepl/union-pointer.ll:test2


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30825 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5b121cc688eacf41b1b773244882d206199dc105 09-Oct-2006 Chris Lattner <sabre@nondot.org> Implement Transforms/ScalarRepl/union-pointer.ll:test


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30823 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
7f8897f22e88271cfa114998a4d6088e7c8e8e11 28-Aug-2006 Chris Lattner <sabre@nondot.org> eliminate RegisterOpt. It does the same thing as RegisterPass.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29925 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a4f0b3a084d120cfc5b5bb06f64b222f5cb72740 27-Aug-2006 Chris Lattner <sabre@nondot.org> s|llvm/Support/Visibility.h|llvm/Support/Compiler.h|


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29911 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
9525528a7dc5462b6374d38c81ba5c07b11741fe 29-Jun-2006 Chris Lattner <sabre@nondot.org> Use hidden visibility to make symbols in an anonymous namespace get
dropped. This shrinks libllvmgcc.dylib another 67K


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28975 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
df4f226cdcbe853984ddda10aa0d53590d35b97e 20-Apr-2006 Chris Lattner <sabre@nondot.org> Fix Transforms/ScalarRepl/2006-04-20-PromoteCrash.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27912 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
de6df88529e20541dcfab7824af2eb0776194f01 14-Apr-2006 Chris Lattner <sabre@nondot.org> Teach scalarrepl to promote unions of vectors and floats, producing
insert/extractelement operations. This implements
Transforms/ScalarRepl/vector_promote.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27710 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
25de486263abc1882498a8701e3eb29ee0804c4e 08-Mar-2006 Chris Lattner <sabre@nondot.org> Fix a miscompilation of 188.ammp with the new CFE. 188.ammp is accessing
arrays out of range in a horrible way, but we shouldn't break it anyway.
Details in the comments.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26606 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
15256cb14ef340235122750a8d7a6b18baf62ef0 24-Jan-2006 Chris Lattner <sabre@nondot.org> Fix Regression/Transforms/ScalarRepl/2006-01-24-IllegalUnionPromoteCrash.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25587 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
dac58ad983c62b49629e1f2969f4e0a621167d63 23-Jan-2006 Chris Lattner <sabre@nondot.org> Make iostream #inclusion explicit


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25514 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6860f6a01ccc71d7cad61de506e0cf8ecb8ca146 14-Dec-2005 Chris Lattner <sabre@nondot.org> Fix Transforms/ScalarRepl/2005-12-14-UnionPromoteCrash.ll, a crash on undefined
behavior in 126.gcc on big-endian systems.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24708 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a188894d67a3cc2516b25aae9b3cbdbff4b0babe 12-Dec-2005 Chris Lattner <sabre@nondot.org> Implement a little hack for parity with GCC on crafty. This speeds up
186.crafty by about 16% (from 15.109s to 13.045s) on my system.

This turns allocas with unions/casts into scalars. For example crafty has
something like this:

union doub {
unsigned short i[4];
long long d;
};
int f(long long a) {
return ((union doub){.d=a}).i[1];
}

Instead of generating loads and stores to an alloca, we now promote the
whole thing to a scalar long value.

This implements: Transforms/ScalarRepl/AggregatePromote.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24667 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
14b0529532904b9e5a1e34526b4a3209f3e5bc62 05-Nov-2005 Nate Begeman <natebegeman@mac.com> Add support alignment of allocation instructions.
Add support for specifying alignment and size of setjmp jmpbufs.

No targets currently do anything with this information, nor is it presrved
in the bytecode representation. That's coming up next.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24196 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
fd93908ae8b9684fe71c239e3c6cfe13ff6a2663 22-Apr-2005 Misha Brukman <brukman+llvm@gmail.com> Remove trailing whitespace


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21427 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2cc34627bb870b6a304efe673736fed2f6a63800 08-Jan-2005 Chris Lattner <sabre@nondot.org> Silence warnings


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19379 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
96326f9d312585532c95dcc31626f45f16cd5dd8 15-Nov-2004 Reid Spencer <rspencer@reidspencer.com> Remove unused variable for compilation by VC++.
Patch contributed by Morten Ofstad.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17830 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d878ecd904e4469344a2274f9784422c2c68b81c 14-Nov-2004 Chris Lattner <sabre@nondot.org> Teach SROA how to promote an array index that is variable, if the dimension
of the array is just two. This occurs 8 times in gcc, 6 times in crafty, and
12 times in 099.go.

This implements ScalarRepl/sroa_two.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17727 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
f5990edc877c4e63503c589928a00ec6ec751830 14-Nov-2004 Chris Lattner <sabre@nondot.org> Rearrange some code, no functionality changes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17724 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
4b5015604908e9296800991a7c538a255356428f 20-Sep-2004 Chris Lattner <sabre@nondot.org> Prototype these functions more accurately


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16432 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
551ccae044b0ff658fe629dd67edd5ffe75d10e8 02-Sep-2004 Reid Spencer <rspencer@reidspencer.com> Changes For Bug 352
Move include/Config and include/Support into include/llvm/Config,
include/llvm/ADT and include/llvm/Support. From here on out, all LLVM
public header files must be under include/llvm/.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16137 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d8e1eea678833cc2b15e4ea69a5a403ba9c3b013 29-Jul-2004 Misha Brukman <brukman+llvm@gmail.com> Fix #includes of i*.h => Instructions.h as per PR403.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15328 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
2fc1230dd68e3f67d36b295adc5168733c412009 15-Jul-2004 Chris Lattner <sabre@nondot.org> Fixes working towards PR341


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14839 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
8430a4545c2743568aee94c39e3912795ce463ec 19-Jun-2004 Chris Lattner <sabre@nondot.org> Do not loop over uses as we delete them. This causes iterators to be
invalidated out from under us. This bug goes back to revision 1.1: scary.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14242 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
28977af72a11fcad5d1b54d7a96b3df02828f6fc 05-Apr-2004 Chris Lattner <sabre@nondot.org> Support getelementptr instructions which use uint's to index into structure
types and can have arbitrary 32- and 64-bit integer types indexing into
sequential types.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12653 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d8664730942beb911327336d1f9db8e7efcd6813 02-Dec-2003 Chris Lattner <sabre@nondot.org> Finegrainify namespacification
Fix regressions ScalarRepl/basictest.ll & arraytest.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10287 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
be883a23ed64b83235d509ad0befc1d6aa6b0cd8 25-Nov-2003 Chris Lattner <sabre@nondot.org> Do not use index type to determine what it is indexing into!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10226 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d0fde30ce850b78371fd1386338350591f9ff494 11-Nov-2003 Brian Gaeke <gaeke@uiuc.edu> Put all LLVM code into the llvm namespace, as per bug 109.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9903 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
546fc40d69ce4051b48112aafedd1e41f4a13195 29-Oct-2003 Chris Lattner <sabre@nondot.org> Fix PR66 & ScalarRepl/2003-10-29-ArrayProblem.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9585 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b576c94c15af9a440f69d9d03c2afead7971118c 20-Oct-2003 John Criswell <criswell@uiuc.edu> Added LLVM project notice to the top of every C++ source file.
Header files will be on the way.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9298 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
43f820d1f7638656be2158efac7dd8f5b08b8b77 05-Oct-2003 Chris Lattner <sabre@nondot.org> Change the interface to PromoteMemToReg to also take a DominatorTree


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8883 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
02a3be020a6b4eedb4b489959997d23a22cdf22e 20-Sep-2003 Chris Lattner <sabre@nondot.org> Rename Function::getEntryNode -> getEntryBlock


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8625 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
8fce16ef1abd92c59ab2b02d59e6d16a1c0ba0b7 12-Sep-2003 Chris Lattner <sabre@nondot.org> Do not return success after checking only the FIRST USE of a gep instruction.
Instead, check all uses.
This fixes bug: ScalarRepl/2003-09-12-IncorrectPromote.ll
This also fixes the miscompilation of Ptrdist/bc


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8493 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
fe7ea0da17a1b5150aabbc2e82c5f4a0750dc23e 12-Sep-2003 Chris Lattner <sabre@nondot.org> Minor optimization efficiency improvement:
- Run mem2reg promotion first
- Only rerun passes if the previous thing changed something


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8490 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
3cfb6b13c0e1d9dee0e35449aa1ac6bd8a0ee906 11-Sep-2003 Misha Brukman <brukman+llvm@gmail.com> Apostrophes are only used for possession and quoting.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8473 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
38aec325604635380421a27e39ab06d55ed2458d 11-Sep-2003 Chris Lattner <sabre@nondot.org> Integrate functionality of the mem2reg pass directly into this pass to make
the combination more effective


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8471 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
a15854c9febcb60eb107048640b04abff8cc47e5 31-Aug-2003 Chris Lattner <sabre@nondot.org> ScalarRepl does not modify the CFG. Say so!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8243 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
6806f5614d2ec260fda954c951d33f58e77ed610 02-Aug-2003 Chris Lattner <sabre@nondot.org> DEBUG got moved to Support/Debug.h


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7492 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
c07736a397012499e337c994f7f952b07c709544 23-Jul-2003 Chris Lattner <sabre@nondot.org> Simplify code by using ConstantInt::getRawValue instead of checking to see
whether the constant is signed or unsigned, then casting


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7252 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
b37923f9a116fe959de1ff93cca173013e35f3da 30-May-2003 Chris Lattner <sabre@nondot.org> Okay totally give up on trying to optimize aggregates that cannot be completely
broken up into their elements. Too many programs break because of this.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6440 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
26d2ca1d134a8deb91f0246b70024ac1032e544c 30-May-2003 Chris Lattner <sabre@nondot.org> add a check that allows the SRoA pass to avoid breaking programs, even if their
behavior is technically undefined


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6438 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
261d686737989a8d7eff0b0f405515a1565303d9 30-May-2003 Chris Lattner <sabre@nondot.org> Fix bug: ScalarRepl/2003-05-30-MultiLevel.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6428 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
5e062a1eda2c4adffd428a35e737a431fc37f4e0 30-May-2003 Chris Lattner <sabre@nondot.org> Fix bug: ScalarRepl/2003-05-29-ArrayFail.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6425 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
d10376bee5138d30a290f56ad84a0b26a9752bcc 27-May-2003 Chris Lattner <sabre@nondot.org> * Actually USE the statistic that we made
* Implement SRoA for arrays


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6349 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
ed7b41ea90a17c826f195acbc456c4bb733113d6 27-May-2003 Chris Lattner <sabre@nondot.org> Implementation of the simple "scalar replacement of aggregates" transformation


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6346 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp