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

3838 Commits

Author SHA1 Message Date
Owen Anderson
6196cdcb48 Refactor this method a bit, and correct a test that was completely wrong but happened to work out anyways. :-)
llvm-svn: 47321
2008-02-19 07:07:51 +00:00
Chris Lattner
99e0b1c063 isa+cast -> dyncast.
llvm-svn: 47320
2008-02-19 06:53:20 +00:00
Chris Lattner
0ee0f38084 simplify this code again, try 2 :)
llvm-svn: 47319
2008-02-19 06:52:38 +00:00
Owen Anderson
d60bb0a64b Fix a comment.
llvm-svn: 47318
2008-02-19 06:51:23 +00:00
Owen Anderson
dbc264003e Major improvements to yesterday's return slot optimization. Remove some unneccessary constraints,
and add some others that should have been in from the first place.  Document the whole thing better.

llvm-svn: 47315
2008-02-19 06:35:43 +00:00
Chris Lattner
6bb889cf84 fdiv/frem of undef can produce undef, because the undef operand
can be a SNaN.  We could be more aggressive and turn this into 
unreachable, but that is less nice, and not really worth it.

llvm-svn: 47313
2008-02-19 06:12:18 +00:00
Owen Anderson
4e6f18d5bf Factor the profitability check for return slot optimization out into a static function.
At some point in the future, this check will become smarter.

llvm-svn: 47310
2008-02-19 03:27:34 +00:00
Owen Anderson
3782cd74d1 An sret parameter is required to be the first parameter, so there's no need to loop
over all the parameters of the callee looking for it.

llvm-svn: 47309
2008-02-19 03:15:29 +00:00
Owen Anderson
ea5cdf1a83 Cleanup some of my patches from yesterday. Refactor the check for which xform
to apply to a memcpy into processInstruction.  Also, fix a bug in the check due to
missing braces.

llvm-svn: 47307
2008-02-19 03:09:45 +00:00
Owen Anderson
5c258ed93d Fix Transforms/GVN/memcpy.ll, which Chris broke in r47275 by reordering the branches. memcpy's are a kind of CallInst.
llvm-svn: 47305
2008-02-19 02:53:23 +00:00
Nick Lewycky
1f3c58df08 Correctly fold divide-by-constant, even when faced with overflow.
llvm-svn: 47287
2008-02-18 22:48:05 +00:00
Chris Lattner
a378b03483 Transforming -A + -B --> -(A + B) isn't safe for FP, thanks
to Dale for noticing this!

llvm-svn: 47276
2008-02-18 17:50:16 +00:00
Chris Lattner
a3318d17d4 minor code simplification, no functionality change.
llvm-svn: 47275
2008-02-18 17:47:29 +00:00
Duncan Sands
a85448506d Simplify caller updating using a CallSite, as
requested by Chris.  While there, do the same
for an existing function committed by someone
called "lattner" :)

llvm-svn: 47273
2008-02-18 17:32:13 +00:00
Owen Anderson
7b092ea631 Add support to GVN for performing sret return slot optimization. This means that, if an sret function tail calls
another sret function, it should pass its own sret parameter to the tail callee, allowing it to fill in the correct
return value.  llvm-gcc does not emit this by default.  Instead, it allocates space in the caller for the sret of
the tail call and then uses memcpy to copy the result into the caller's sret parameter.  This optimization detects
and optimizes that case.

llvm-svn: 47265
2008-02-18 09:24:53 +00:00
Chris Lattner
b22dbdf4fc switch simplifycfg from using vectors for most things to smallvectors,
this speeds it up 2.3% on eon.

llvm-svn: 47261
2008-02-18 07:42:56 +00:00
Chris Lattner
9851db050b optimize away stackrestore calls that have no intervening alloca or call.
llvm-svn: 47258
2008-02-18 06:12:38 +00:00
Chris Lattner
0b6ec4a6b2 simplify some code, BreakUpSubtract always returns nonnull now.
llvm-svn: 47251
2008-02-18 02:18:25 +00:00
Chris Lattner
2fa904b3af Fold (-x + -y) -> -(x+y) which promotes better association, fixing
the second half of PR2047

llvm-svn: 47244
2008-02-17 21:03:36 +00:00
Chris Lattner
51a663a8fe fix pasto
llvm-svn: 47242
2008-02-17 20:54:40 +00:00
Chris Lattner
4a34461d64 Split up subtracts into add+negate if they have a reassociable use or operand
that is also a subtract.  This implements PR2047 and Transforms/Reassociate/subtest2.ll 

llvm-svn: 47241
2008-02-17 20:51:26 +00:00
Chris Lattner
cd6f9cea98 make the logic for breaking up subtracts more explicit, no
functionality change.

llvm-svn: 47239
2008-02-17 20:44:51 +00:00
Duncan Sands
cd0325cce1 Remove any 'nest' parameter attributes if the function
is not passed as an argument to a trampoline intrinsic.

llvm-svn: 47220
2008-02-16 20:56:04 +00:00
Devang Patel
01f9252f73 Fix PR2028
llvm-svn: 47150
2008-02-15 01:24:49 +00:00
Devang Patel
8af92b942c If loop header is also loop exiting block then OrigPN is incoming value for B loop header.
Fixes PR 2030.

llvm-svn: 47141
2008-02-14 23:18:47 +00:00
Chris Lattner
b8bf200b77 Fix PR2029
llvm-svn: 47129
2008-02-14 19:18:13 +00:00
Chris Lattner
5005b4d0d8 simplify code, no functionality change.
llvm-svn: 47116
2008-02-14 07:39:01 +00:00
Nick Lewycky
0dd6ce5d3a Fix PR2032. Inform the alias analysis of changes to the underlying program.
llvm-svn: 47111
2008-02-14 07:11:24 +00:00
Devang Patel
38de2d11a5 A loop latch phi node may have uses inside loop, not just in loop header.
llvm-svn: 47093
2008-02-13 22:23:07 +00:00
Dan Gohman
588498082a Rename APInt's isPositive to isNonNegative, to reflect what it
actually does.

llvm-svn: 47090
2008-02-13 22:09:18 +00:00
Devang Patel
1e71afe2df While moving exit condition, do not drop loop latch on the floor.
llvm-svn: 47089
2008-02-13 22:06:36 +00:00
Devang Patel
d48bbbf07b Keep track of exit value operand number when operands are swapped.
llvm-svn: 47082
2008-02-13 19:48:48 +00:00
Chris Lattner
c16c85444c remove some dead code.
llvm-svn: 47066
2008-02-13 17:18:26 +00:00
Owen Anderson
274aa2846e Re-apply the patch to improve the optimizations of memcpy's, with several
bugs fixed.  This now passes PPC bootstrap.

llvm-svn: 47026
2008-02-12 21:15:18 +00:00
Eli Friedman
69268a529e Fix for bug 1996: optimize out loads of undef. This code basically just
checks for a malloc/alloca immediately followed by a load.

llvm-svn: 47006
2008-02-12 12:08:14 +00:00
Chris Lattner
068321707d Fix scalarrepl to not 'miscompile' undefined code, part #2.
This fixes the store case, my previous patch just fixed the load
case.  rdar://5707076.

llvm-svn: 46932
2008-02-10 19:05:37 +00:00
Devang Patel
9aba178666 Fix PR 1995.
llvm-svn: 46898
2008-02-08 22:49:13 +00:00
Bill Wendling
8a28ab4b1f Temporarily reverting:
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20080128/057882.html

This is causing a miscompilation on PPC G5 and just now seeing it on iMac x86-64.

llvm-svn: 46822
2008-02-06 20:03:07 +00:00
Chris Lattner
5c9fc804d7 Make RenamePass faster by making the 'is this a new phi node'
check more intelligent.  This speeds up mem2reg from 5.29s to 
0.79s on a synthetic testcase with tons of predecessors and
phi nodes.

llvm-svn: 46767
2008-02-05 21:26:23 +00:00
Chris Lattner
96deed5d4d Fix a bug compiling PR1978 (perhaps not the only one though) which
was incorrectly simplifying "x == (gep x, 1, i)" into false, even 
though i could be negative.  As it turns out, all the code to 
handle this already existed, we just need to disable the incorrect
optimization case and let the general case handle it.

llvm-svn: 46739
2008-02-05 04:45:32 +00:00
Owen Anderson
af0449f9e0 Be more precise when eliminating pointers bue to memcpy's. This allows more
stores to be deleted in some cases.

llvm-svn: 46694
2008-02-04 04:53:00 +00:00
Owen Anderson
aaba6f96da Allow GVN to hack on memcpy's, making them open to further optimization.
llvm-svn: 46693
2008-02-04 02:59:58 +00:00
Nick Lewycky
febd3642ce There are some cases where icmp(add) can be folded into a new icmp. Handle them.
llvm-svn: 46687
2008-02-03 16:33:09 +00:00
Nick Lewycky
29cd604126 Hack on vectors too.
llvm-svn: 46684
2008-02-03 08:19:11 +00:00
Nick Lewycky
ce4c4698d7 Fold away one multiply in instcombine. This would normally be caught in
reassociate anyways, but they could be generated during instcombine's run.

llvm-svn: 46683
2008-02-03 07:42:09 +00:00
Duncan Sands
454a8eaee9 Don't drop function/call return attributes like 'nounwind'.
llvm-svn: 46645
2008-02-01 20:37:16 +00:00
Nick Lewycky
ccd60a90c5 Remove a couple more cases of "getNumUses() == 0". No need to walk the linked
list just to see if whether the list is empty.

llvm-svn: 46555
2008-01-30 08:01:28 +00:00
Nick Lewycky
e3818dcc4e Use empty() instead of comparing size() with zero.
llvm-svn: 46554
2008-01-30 07:54:16 +00:00
Nick Lewycky
719599d263 Don't DCE FreeInst's. We were using those! Patch from Owen Anderson.
llvm-svn: 46553
2008-01-30 07:45:37 +00:00
Owen Anderson
ad9a347656 Make DSE much more aggressive by performing DCE earlier. Update a testcase to reflect this increased aggressiveness.
llvm-svn: 46542
2008-01-30 01:24:47 +00:00