llvm/test/Transforms/SROA
Chandler Carruth 2402e6315d [SROA] Change how SROA does vector-based promotion of allocas to handle
cases where the alloca type, the load types, and the store types used
all disagree.

Previously, the only way that vector-based promotion occured was if the
alloca type was a vector type. This was one of the *very* few remaining
uses of the alloca's type to guide SROA/mem2reg left in LLVM. It turns
out it was a bad idea.

The alloca type can change very easily based on the mixture of types
loaded and stored to that alloca. We shouldn't be relying on it as
a signal for very much. Instead, the source of truth should be loads and
stores. We should canonicalize the loads and stores as much as possible
and then rely on them exclusively in SROA.

When looking and loads and stores, we may find many different candidate
vector types. This change will let SROA try all of them to find a vector
type which is a viable way to promote the entire alloca to a vector
register.

With this change, it becomes possible to do better canonicalization and
optimization of loads and stores without breaking SROA in random ways,
and that should allow fixing a core source of performance loss in hot
numerical loops such as those in Eigen.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220116 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-18 00:44:02 +00:00
..
address-spaces.ll [SROA] Teach SROA how to handle pointers from address spaces other than 2014-02-26 08:25:02 +00:00
alignment.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
basictest.ll [SROA] Use the correct index integer size in GEPs through non-default 2014-02-26 10:08:16 +00:00
big-endian.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
fca.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
phi-and-select.ll SROA: Don't insert instructions before a PHI 2014-09-01 21:20:14 +00:00
slice-order-independence.ll SROA: Only split loads on byte boundaries 2014-06-17 00:19:35 +00:00
slice-width.ll Add a test case for SROA where the store size is bigger than slice size. The 2014-08-22 23:27:04 +00:00
vector-conversion.ll SROA: Handle casts involving vectors of pointers and integer scalars. 2013-09-21 20:36:04 +00:00
vector-lifetime-intrinsic.ll Fix a case in SROA where lifetime intrinsics could inhibit alloca promotion. In 2014-08-07 21:07:35 +00:00
vector-promotion.ll [SROA] Change how SROA does vector-based promotion of allocas to handle 2014-10-18 00:44:02 +00:00
vectors-of-pointers.ll