llvm-6502/test/Transforms/ScalarRepl
Chris Lattner d2fa781169 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
2009-01-07 08:11:13 +00:00
..
2003-05-29-ArrayFail.ll
2003-05-30-InvalidIndices.ll
2003-05-30-MultiLevel.ll
2003-09-12-IncorrectPromote.ll
2003-10-29-ArrayProblem.ll
2005-12-14-UnionPromoteCrash.ll
2006-01-24-IllegalUnionPromoteCrash.ll
2006-04-20-PromoteCrash.ll
2006-10-23-PointerUnionCrash.ll
2006-11-07-InvalidArrayPromote.ll
2006-12-11-SROA-Crash.ll
2007-03-19-CanonicalizeMemcpy.ll
2007-05-24-LargeAggregate.ll
2007-05-29-MemcpyPreserve.ll
2007-11-03-bigendian_apint.ll
2008-01-29-PromoteBug.ll
2008-02-28-SubElementExtractCrash.ll
2008-06-05-loadstore-agg.ll
2008-06-22-LargeArray.ll Fix PR2369 by making scalarrepl more careful about promoting 2008-06-22 17:46:21 +00:00
2008-08-22-out-of-range-array-promote.ll Fix PR2423 by checking all indices for out of range access, not only 2008-08-23 05:21:06 +00:00
2008-09-22-vector-gep.ll Allow scalarrepl to treat an all-zero GEP just as bitcast. 2008-10-06 16:23:31 +00:00
AggregatePromote.ll
arraytest.ll
badarray.ll
basictest.ll
copy-aggregate.ll Implement the first half of PR3290: if there is a store of an 2009-01-07 08:11:13 +00:00
dg.exp
DifferingTypes.ll
load-store-aggregate.ll Add a testcase showing that scalarrepl supports first class structs. 2008-09-29 10:42:13 +00:00
memcpy-from-global.ll
memset-aggregate-byte-leader.ll
memset-aggregate.ll
phinodepromote.ll
select_promote.ll
sroa_two.ll
union-fp-int.ll
union-packed.ll
union-pointer.ll
vector_promote.ll