Commit Graph

65 Commits

Author SHA1 Message Date
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
Matthijs Kooijman
5fac55fafb 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
2008-10-06 16:23:31 +00:00
Matthijs Kooijman
7ab5799f75 Add a testcase showing that scalarrepl supports first class structs.
I originally made this script to show that scalarrepl didn't support them, but
it turned out it does. Better to still add the testcase then.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56781 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-29 10:42:13 +00:00
Chris Lattner
88e6dc8bf1 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
2008-08-23 05:21:06 +00:00
Chris Lattner
963a97f1a3 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
2008-06-22 17:46:21 +00:00
Evan Cheng
933b5065e5 Fix some tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52245 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-12 21:23:38 +00:00
Matthijs Kooijman
888fa33cfb Fix some escaping and quoting in RUN lines, mainly involving { and <. In two
cases quoting of <{ didn't work out, so I changed the grep to check for }>
instead.

This fixes 7 testcases that were not properly running before.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52182 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-10 16:04:47 +00:00
Matthijs Kooijman
02518140ac 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
2008-06-05 12:51:53 +00:00
Gabor Greif
f6cadc440c sabre brings to my attention that the 'tr' suffix is also obsolete
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51349 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-20 21:00:03 +00:00
Gabor Greif
722243bd40 Rename the last test with .llx extension to .ll, resolve duplicate test by renaming to isnan2. Now that no test has llx ending there is no need to search for them from dg.exp too.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51328 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-20 19:52:04 +00:00
Tanya Lattner
683283763f Upgrade tests to not use llvm-upgrade.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48484 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-18 04:14:37 +00:00
Chris Lattner
9d34c4d678 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
2008-02-29 07:12:06 +00:00
Chris Lattner
b10e0da065 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
2008-01-30 00:39:15 +00:00
Duncan Sands
3cb3650a27 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
2007-11-04 14:43:57 +00:00
John Criswell
e644ef7b09 Convert .cvsignore files
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37801 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-29 16:35:07 +00:00
Chris Lattner
661c2ce9c5 Testcase for PR1421
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37357 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-30 06:10:46 +00:00
Chris Lattner
d20d40299b testcase for PR1446
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37325 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-24 18:42:47 +00:00
Chris Lattner
514630f41f Move Mem2Reg/DifferingTypes.ll -> ScalarRepl/DifferingTypes.ll. -scalarrepl
implements this xform.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36804 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-05 22:22:03 +00:00
Chris Lattner
54c4d40beb new testcase, should be able to eliminate the alloca and memcpy
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36428 91177308-0d34-0410-b5e6-96231b3b80d8
2007-04-25 06:29:34 +00:00
Reid Spencer
eb1d74e0c8 For PR1319:
Remove && from the end of the lines to prevent tests from throwing run
lines into the background. Also, clean up places where the same command
is run multiple times by using a temporary file.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36142 91177308-0d34-0410-b5e6-96231b3b80d8
2007-04-16 17:36:08 +00:00
Reid Spencer
9aafdcf20d For PR1319:
Upgrade to use new Tcl exec based test harness. This exposes 3 bugs that
were previously not being reported:
test/Transforms/GlobalDCE/2002-08-17-FunctionDGE.ll
test/Transforms/GlobalOpt/memset.ll
test/Transforms/IndVarsSimplify/exit_value_tests.llx


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36065 91177308-0d34-0410-b5e6-96231b3b80d8
2007-04-15 09:21:47 +00:00
Reid Spencer
0f5aed5648 Make the llvm-runtest function much more amenable by eliminating all the
global variables that needed to be passed in. This makes it possible to
add new global variables with only a couple changes (Makefile and llvm-dg.exp)
instead of touching every single dg.exp file.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35918 91177308-0d34-0410-b5e6-96231b3b80d8
2007-04-11 19:56:59 +00:00
Reid Spencer
5373b721c0 Remove use of implementation keyword.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35412 91177308-0d34-0410-b5e6-96231b3b80d8
2007-03-28 02:38:26 +00:00
Chris Lattner
404eaa3cf1 new testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35397 91177308-0d34-0410-b5e6-96231b3b80d8
2007-03-28 01:31:33 +00:00
Chris Lattner
d7d2287928 add a testcase the resent patches fail on.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35167 91177308-0d34-0410-b5e6-96231b3b80d8
2007-03-19 18:25:48 +00:00
Chris Lattner
12779797f7 add PR#
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35151 91177308-0d34-0410-b5e6-96231b3b80d8
2007-03-19 00:17:19 +00:00
Chris Lattner
fb73d9cf0c add pr#
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35149 91177308-0d34-0410-b5e6-96231b3b80d8
2007-03-19 00:15:43 +00:00
Chris Lattner
7863a63bb9 new testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35148 91177308-0d34-0410-b5e6-96231b3b80d8
2007-03-19 00:11:30 +00:00
Chris Lattner
7829828c4b testcase for SROA with memset etc
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35147 91177308-0d34-0410-b5e6-96231b3b80d8
2007-03-19 00:09:00 +00:00
Reid Spencer
eacb7020ec For PR950:
Update the test suite to accommodate the change from signed integer types
to signless integer types. The changes were of only a few kinds:

1. Make sure llvm-upgrade is run on the source which does the bulk of the
   changes automatically.

2. Change things like "grep 'int'" to "grep 'i32'"

3. In several tests bitcasting caused the same name to be reused in the
   same type plane. These had to be manually fixed. The fix was (generally)
   to leave the bitcast and provide the instruction with a new name. This
   should not affect the semantics of the test. In a few cases, the
   bitcasts were known to be superfluous and irrelevant to the test case
   so they were removed.

4. One test case uses a bytecode file which needed to be updated to the
   latest bytecode format.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32789 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-31 06:02:00 +00:00
Reid Spencer
73e70822ae Update tests that need to be run through llvm-upgrade. This is necessary
for upcoming changes to the llvm assembly grammar.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32768 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-29 20:01:32 +00:00
Chris Lattner
d6032177f5 reenable these
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32596 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-15 07:32:49 +00:00
Chris Lattner
18c3e6524d xfail these until I recommit the scalarrepl patch
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32545 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-13 17:42:40 +00:00
Chris Lattner
bcb56d8104 new testcase for pr1045
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32467 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-12 04:24:17 +00:00
Chris Lattner
e629ff0be8 new testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32421 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-11 00:34:27 +00:00
Chris Lattner
1846783d93 new testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32417 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-10 23:52:28 +00:00
Reid Spencer
69ccadd753 Use the llvm-upgrade program to upgrade llvm assembly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32115 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-02 04:23:10 +00:00
Reid Spencer
e5d4efa63e Promote GEP ubyte indices to uint. Backwards compatibility for 1.2 and
older features will be dropped soon and these test cases must not rely
on the upgrade capability.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31896 91177308-0d34-0410-b5e6-96231b3b80d8
2006-11-23 15:14:52 +00:00
Chris Lattner
03507f53c4 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;
}


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31523 91177308-0d34-0410-b5e6-96231b3b80d8
2006-11-07 22:42:29 +00:00
Chris Lattner
f4208026aa extra pass is required now
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31353 91177308-0d34-0410-b5e6-96231b3b80d8
2006-11-01 18:30:25 +00:00
Chris Lattner
b0d6dbfd7c New testcase that crashes scalarrepl
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31150 91177308-0d34-0410-b5e6-96231b3b80d8
2006-10-24 06:26:08 +00:00
Chris Lattner
eab5bd32b6 new testcase for PR892
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30824 91177308-0d34-0410-b5e6-96231b3b80d8
2006-10-08 23:52:06 +00:00
Chris Lattner
fc1dfd4137 new testcase for SROA for stuff like "union { int*, float* }".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30822 91177308-0d34-0410-b5e6-96231b3b80d8
2006-10-08 23:27:37 +00:00
Chris Lattner
bcce6c2a0f new testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27911 91177308-0d34-0410-b5e6-96231b3b80d8
2006-04-20 20:48:32 +00:00
Chris Lattner
d8f5bd3988 New testcase, checking to see we can turn this code:
void test(vector float *F, float f) {
  vector float G = *F + *F;
  *((float*)&G) = f;
  *F = G + G;
}

void test2(vector float *F, float f) {
  vector float G = *F + *F;
  ((float*)&G)[2] = f;
  *F = G + G;
}

void test3(vector float *F, float *f) {
  vector float G = *F + *F;
  *f = ((float*)&G)[2];
}

void test4(vector float *F, float *f) {
  vector float G = *F + *F;
  *f = *((float*)&G);
}

into insert/extract element operations with no memory traffic.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27709 91177308-0d34-0410-b5e6-96231b3b80d8
2006-04-14 21:41:54 +00:00
Tanya Lattner
9727555859 Added the ability to xfail based on llvmgcc version
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27635 91177308-0d34-0410-b5e6-96231b3b80d8
2006-04-12 21:57:40 +00:00
Reid Spencer
2676f83776 Tired of wading through cvs's list ? files that are generated when building
with srcdir = objdir to see what's okay and what's cruft. So, in goes a
bunch of .cvsignore files to shut cvs up about known output from running
"make check".


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27009 91177308-0d34-0410-b5e6-96231b3b80d8
2006-03-23 23:41:57 +00:00
Chris Lattner
720d2108be testcase that crashes scalarrepl
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25586 91177308-0d34-0410-b5e6-96231b3b80d8
2006-01-24 19:34:57 +00:00
Chris Lattner
fa1fb11cdc new (undefined) testcase, distilled from 126.gcc that scalarrepl crashes on
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24707 91177308-0d34-0410-b5e6-96231b3b80d8
2005-12-14 17:23:20 +00:00
Chris Lattner
fa8f80ae0a new testcase: sra should be able to eliminate all of these alloca's, despite
the presense of pointer casts


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24666 91177308-0d34-0410-b5e6-96231b3b80d8
2005-12-12 07:18:59 +00:00