1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-28 14:32:51 +01:00
Commit Graph

5399 Commits

Author SHA1 Message Date
Eli Friedman
570aa6f801 Fix a bug with <8 x i16> shuffle lowering on X86 where parts of the
shuffle could be skipped.  The check is invalid because the loop index i 
doesn't correspond to the element actually inserted. The correct check is
already done a few lines earlier, for whether the element is already in 
the right spot, so this shouldn't have any effect on the codegen for 
code that was already correct.

llvm-svn: 52486
2008-06-19 06:09:51 +00:00
Evan Cheng
919b735586 New test case.
llvm-svn: 52483
2008-06-19 01:50:24 +00:00
Evan Cheng
ee801276b3 This also got better (55 - 51 instructions). But doing one more re-materialization.
llvm-svn: 52482
2008-06-19 01:50:13 +00:00
Evan Cheng
56e17b525c This got better.
llvm-svn: 52481
2008-06-19 01:46:43 +00:00
Owen Anderson
597b40ed60 Remove this test until the corresponding patch is reapplied because it's causing make check to crash for some people.
llvm-svn: 52473
2008-06-18 22:37:31 +00:00
Owen Anderson
3f78e260c1 Add local PRE to GVN. This only operates in cases where it would not increase code size, namely when the instantiated expression
would only need to be created in one predecessor.

llvm-svn: 52471
2008-06-18 21:41:49 +00:00
Matthijs Kooijman
b7e2818227 Rewrite the DeadArgumentElimination pass, to use a more explicit tracking of
dependencies between return values and/or arguments. Also make the handling of
arguments and return values the same.

The pass now looks properly inside returned structs, but only at the first                                                                                     
level (ie, not inside nested structs).

Also add a testcase for testing various variations of (multiple) dead rerturn
values.

llvm-svn: 52459
2008-06-18 11:12:53 +00:00
Matthijs Kooijman
8177832230 Reapply r52397 (make IPConstProp promote returned arguments), but fixed this
time. Sorry for the trouble!

This time, also add a testcase, which I should have done in the first place...

llvm-svn: 52455
2008-06-18 08:30:37 +00:00
Matthijs Kooijman
bb59138fa6 Reapply r52396, it was unrelated to the breakage (that was caused by r52397, my
commit after this).

llvm-svn: 52453
2008-06-18 08:09:27 +00:00
Chris Lattner
93da79f7a1 implement some simple bswap optimizations, rdar://5992453
llvm-svn: 52442
2008-06-18 04:33:20 +00:00
Chris Lattner
2a22e66e47 temporarily revert this testcase since its patch was reverted.
llvm-svn: 52441
2008-06-18 04:03:23 +00:00
Chris Lattner
7e403da191 make truncate/sext elimination capable of changing phi's. This
implements rdar://6013816 and the testcase in Transforms/InstCombine/sext-misc.ll.

llvm-svn: 52440
2008-06-18 04:00:49 +00:00
Devang Patel
8f157a3670 Preserve dominance frontier while trivially unswitching loop.
llvm-svn: 52438
2008-06-18 02:16:38 +00:00
Matthijs Kooijman
f0adaf34a1 Learn IPConstProp to look at individual return values and propagate them
individually.

Also learn IPConstProp how returning first class aggregates work, in addition
to old style multiple return instructions.

Modify the return-constants testscase to confirm this behaviour.

llvm-svn: 52396
2008-06-17 12:02:52 +00:00
Evan Cheng
8cfd1d39a1 Do not issue identity copies.
llvm-svn: 52373
2008-06-16 22:52:53 +00:00
Dan Gohman
c1fd5f170b Refine the change in r52258 for avoiding use-before-def conditions
when changing the stride of a comparison so that it's slightly
more precise, by having it scan the instruction list to determine
if there is a use of the condition after the point where the
condition will be inserted.

llvm-svn: 52371
2008-06-16 22:34:15 +00:00
Evan Cheng
d27948e716 - Add "Commutative" property to intrinsics. This allows tblgen to generate the commuted variants for dagisel matching code.
- Mark lots of X86 intrinsics as "Commutative" to allow load folding.

llvm-svn: 52353
2008-06-16 20:29:38 +00:00
Matthijs Kooijman
bdd5cae51c Make testcase check for extractvalue instead of extractelement.
llvm-svn: 52317
2008-06-16 13:03:44 +00:00
Matthijs Kooijman
e01197eaa9 Store the result of multiple identical run lines in a temporary file.
llvm-svn: 52314
2008-06-16 12:21:25 +00:00
Matthijs Kooijman
f6b1a51a94 Fix PR numbers, I accidentally switched two digits.
llvm-svn: 52311
2008-06-16 09:38:23 +00:00
Chris Lattner
e987a3bdd1 If we are checking to see if the result of a call aliases a
pointer derived from a local allocation, if the local allocation
never escapes, the pointers can't alias.  This implements PR2436

llvm-svn: 52301
2008-06-16 06:19:11 +00:00
Chris Lattner
63195a4694 this is unneeded now.
llvm-svn: 52298
2008-06-16 04:25:39 +00:00
Chris Lattner
61de4d6454 resolve PR2453 by adding a run line.
llvm-svn: 52296
2008-06-16 04:22:39 +00:00
Wojciech Matyjewicz
58f5cc8864 Fix PR2434. When scanning for exising binary operator to reuse don't
take into account the instrucion pointed by InsertPt. Thanks to it, 
returning the new value of InsertPt to the InsertBinop() caller can be 
avoided. The bug was, actually, in visitAddRecExpr() method which wasn't 
correctly handling changes of InsertPt. There shouldn't be any 
performance regression, as -gvn pass (run after -indvars) removes any 
redundant binops.

llvm-svn: 52291
2008-06-15 19:07:39 +00:00
Evan Cheng
2e99c9cbf8 Teach the spiller to commute instructions in order to fold a reload. This hits 410 times on 444.namd and 122 times on 252.eon.
llvm-svn: 52266
2008-06-13 23:58:02 +00:00
Eli Friedman
88cdc65941 Remove unnecessary target lines.
llvm-svn: 52261
2008-06-13 22:12:16 +00:00
Eli Friedman
46782c75fe Remove unnecessary target lines.
llvm-svn: 52260
2008-06-13 22:10:32 +00:00
Eli Friedman
11d4c94933 Don't skip over instructions other than loads that might read memory
when trying to sink stores.

llvm-svn: 52259
2008-06-13 22:02:12 +00:00
Dan Gohman
7f1fcc4339 Protect ChangeCompareStride from situations in which it is possible
for it to generate use-before-def IR, such as in this testcase.

llvm-svn: 52258
2008-06-13 21:43:41 +00:00
Eli Friedman
d38a639deb Make sure SimplifyStoreAtEndOfBlock doesn't mess with loops; the
structure checks are incorrect if the blocks aren't distinct.
Fixes PR2435.

llvm-svn: 52257
2008-06-13 21:17:49 +00:00
Duncan Sands
40c8db881a Disable some DAG combiner optimizations that may be
wrong for volatile loads and stores.  In fact this
is almost all of them!  There are three types of
problems: (1) it is wrong to change the width of
a volatile memory access.  These may be used to
do memory mapped i/o, in which case a load can have
an effect even if the result is not used.  Consider
loading an i32 but only using the lower 8 bits.  It
is wrong to change this into a load of an i8, because
you are no longer tickling the other three bytes.  It
is also unwise to make a load/store wider.  For
example, changing an i16 load into an i32 load is
wrong no matter how aligned things are, since the
fact of loading an additional 2 bytes can have
i/o side-effects.  (2) it is wrong to change the
number of volatile load/stores: they may be counted
by the hardware.  (3) it is wrong to change a volatile
load/store that requires one memory access into one
that requires several.  For example on x86-32, you
can store a double in one processor operation, but to
store an i64 requires two (two i32 stores).  In a
multi-threaded program you may want to bitcast an i64
to a double and store as a double because that will
occur atomically, and be indivisible to other threads.
So it would be wrong to convert the store-of-double
into a store of an i64, because this will become two
i32 stores - no longer atomic.  My policy here is
to say that the number of processor operations for
an illegal operation is undefined.  So it is alright
to change a store of an i64 (requires at least two
stores; but could be validly lowered to memcpy for
example) into a store of double (one processor op).
In short, if the new store is legal and has the same
size then I say that the transform is ok.  It would
also be possible to say that transforms are always
ok if before they were illegal, whether after they
are illegal or not, but that's more awkward to do
and I doubt it buys us anything much.
However this exposed an interesting thing - on x86-32
a store of i64 is considered legal!  That is because
operations are marked legal by default, regardless of
whether the type is legal or not.  In some ways this
is clever: before type legalization this means that
operations on illegal types are considered legal;
after type legalization there are no illegal types
so now operations are only legal if they really are.
But I consider this to be too cunning for mere mortals.
Better to do things explicitly by testing AfterLegalize.
So I have changed things so that operations with illegal
types are considered illegal - indeed they can never
map to a machine operation.  However this means that
the DAG combiner is more conservative because before
it was "accidentally" performing transforms where the
type was illegal because the operation was nonetheless
marked legal.  So in a few such places I added a check
on AfterLegalize, which I suppose was actually just
forgotten before.  This causes the DAG combiner to do
slightly more than it used to, which resulted in the X86
backend blowing up because it got a slightly surprising
node it wasn't expecting, so I tweaked it.

llvm-svn: 52254
2008-06-13 19:07:40 +00:00
Matthijs Kooijman
4736a83c41 XFAIL some tests that became failing due to the extra error reporting recently. PR's are created for these.
llvm-svn: 52250
2008-06-13 16:52:35 +00:00
Nick Lewycky
0aa53f2b52 Crash less. The i64 restriction in BinomialCoefficient caused some problems
with code that was expecting different bit widths for different values.

Make getTruncateOrZeroExtend a method on ScalarEvolution, and use it.

llvm-svn: 52248
2008-06-13 04:38:55 +00:00
Evan Cheng
66ce588b87 Fix some tests.
llvm-svn: 52245
2008-06-12 21:23:38 +00:00
Evan Cheng
b0d847cf05 Revert 52223.
llvm-svn: 52243
2008-06-12 20:55:39 +00:00
Matthijs Kooijman
d07ffc50fa Don't try to compile tests for the ev56 alpha subtarget, which hasn't been
supported since r33492.

llvm-svn: 52237
2008-06-12 13:44:26 +00:00
Matthijs Kooijman
c2d6b13f1e Pass -silence-passes to bugpoint in testcases, this makes two out of three bugpoint testcases work again.
llvm-svn: 52236
2008-06-12 13:12:11 +00:00
Matthijs Kooijman
3a11ccc589 Add line continuation character so the avoid dup loop header test actually runs.
llvm-svn: 52228
2008-06-12 08:49:04 +00:00
Evan Cheng
9b0c0a0f00 Avoid duplicating loop header which leads to unnatural loops (and just seem like general badness to me, likely to cause code explosion).
Patch by Florian Brandner.

llvm-svn: 52223
2008-06-11 19:07:54 +00:00
Gordon Henriksen
02d34b6a0c Don't send checkpoints to stderr for the vmcore.ml test.
llvm-svn: 52218
2008-06-11 14:58:01 +00:00
Matthijs Kooijman
0f9df32e12 Teach instruction combining about the extractvalue. It can succesfully fold
useless insert-extract chains, similar to how it folds them for vectors.

Add a testcase for this.

llvm-svn: 52217
2008-06-11 14:05:05 +00:00
Dale Johannesen
e86cbb7893 Use %link not %llvmgxx (which includes -c) to do the link.
The test still fails because an expected symbol is not
present, and I don't see why it should be.

llvm-svn: 52188
2008-06-10 18:01:54 +00:00
Dale Johannesen
c1d2ca1701 Suppress ObjC FE warnings, which cause the test to fail.
Warnings are legitimate.

llvm-svn: 52187
2008-06-10 18:00:45 +00:00
Dale Johannesen
6654d90831 Add -w to inhibit gcc warnings, which causes the
harness to fail the tests.  The warning all appear
legitimate.

llvm-svn: 52186
2008-06-10 18:00:09 +00:00
Dale Johannesen
47cee90b57 Fix parameter spelling: sse not sse1
llvm-svn: 52185
2008-06-10 17:57:58 +00:00
Matthijs Kooijman
3488e4542b Ignore stderr for some more tests that expect warnings there.
This fixes 2 testcases.

llvm-svn: 52184
2008-06-10 16:13:38 +00:00
Matthijs Kooijman
00a807266e Fix some more quoting issues in RUN lines, this time regarding unintended
variable expansions involving the $ character.

This fixes 4 tests that were not running properly before.

llvm-svn: 52183
2008-06-10 16:10:32 +00:00
Matthijs Kooijman
e8fb62fb3c 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.

llvm-svn: 52182
2008-06-10 16:04:47 +00:00
Matthijs Kooijman
281711dc95 Remove double pipes in RUN commandlines.
This fixes 5 testcases that were not being run properly before.

llvm-svn: 52180
2008-06-10 15:11:36 +00:00
Matthijs Kooijman
98322ead14 Remove trailing whitespace after line continuations in test cases to them work.
This fixes two test cases that were not being run properly before.

llvm-svn: 52179
2008-06-10 15:07:07 +00:00