llvm-6502/test/Transforms/SROA
Chandler Carruth 07525a6be6 Teach SROA to cope with wrapper aggregates. These show up a lot in ABI
type coercion code, especially when targetting ARM. Things like [1
x i32] instead of i32 are very common there.

The goal of this logic is to ensure that when we are picking an alloca
type, we look through such wrapper aggregates and across any zero-length
aggregate elements to find the simplest type possible to form a type
partition.

This logic should (generally speaking) rarely fire. It only ends up
kicking in when an alloca is accessed using two different types (for
instance, i32 and float), and the underlying alloca type has wrapper
aggregates around it. I noticed a significant amount of this occurring
looking at stepanov_abstraction generated code for arm, and suspect it
happens elsewhere as well.

Note that this doesn't yet address truly heinous IR productions such as
PR14059 is concerning. Those result in mismatched *sizes* of types in
addition to mismatched access and alloca types.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165870 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-13 10:49:33 +00:00
..
alignment.ll Teach SROA to cope with wrapper aggregates. These show up a lot in ABI 2012-10-13 10:49:33 +00:00
basictest.ll Teach SROA to cope with wrapper aggregates. These show up a lot in ABI 2012-10-13 10:49:33 +00:00
big-endian.ll Teach the integer-promotion rewrite strategy to be endianness aware. 2012-10-04 10:39:28 +00:00
fca.ll Teach the integer-promotion rewrite strategy to be endianness aware. 2012-10-04 10:39:28 +00:00
lit.local.cfg
phi-and-select.ll Teach the integer-promotion rewrite strategy to be endianness aware. 2012-10-04 10:39:28 +00:00
vector-promotion.ll Add the testcase from pr13254 (the old scalarreply pass handles this wrong; 2012-10-10 18:41:19 +00:00