Cameron Zwarich
ca4c633489
Fix another case of <rdar://problem/9184212> that only occurs with code
...
generated by llvm-gcc, since llvm-gcc uses 2 i64s for passing a 4 x float
vector on ARM rather than an i64 array like Clang.
llvm-svn: 129878
2011-04-20 21:48:38 +00:00
Frits van Bommel
d097212a08
Add test cases for Jay's r129641 and fix a 32-bit-centric testcase in a file with a 64-bit datalayout.
...
llvm-svn: 129643
2011-04-16 14:31:50 +00:00
Chris Lattner
0ab5e2cded
Fix a ton of comment typos found by codespell. Patch by
...
Luis Felipe Strano Moraes!
llvm-svn: 129558
2011-04-15 05:18:47 +00:00
Eli Friedman
2395626605
Add an instcombine for constructs like a | -(b != c); a select is more
...
canonical, and generally leads to better code. Found while looking at
an article about saturating arithmetic.
llvm-svn: 129545
2011-04-14 22:41:27 +00:00
Owen Anderson
92651ec374
Fix an infinite alternation in JumpThreading where two transforms would repeatedly undo each other. The solution is to perform more aggressive constant folding to make one of the edges just folded away rather than trying to thread it.
...
Fixes <rdar://problem/9284786>.
Discovered with CSmith.
llvm-svn: 129538
2011-04-14 21:35:50 +00:00
Mon P Wang
2e5528f0b2
Vectors with different number of elements of the same element type can have
...
the same allocation size but different primitive sizes(e.g., <3xi32> and
<4xi32>). When ScalarRepl promotes them, it can't use a bit cast but
should use a shuffle vector instead.
llvm-svn: 129472
2011-04-13 21:40:02 +00:00
Dan Gohman
1c6c34834b
Fix reassociate to use a worklist instead of recursing when new
...
reassociation opportunities are exposed. This fixes a bug where
the nested reassociation expects to be the IR to be consistent,
but it isn't, because the outer reassociation has disconnected
some of the operands. rdar://9167457
llvm-svn: 129324
2011-04-12 00:11:56 +00:00
Chris Lattner
e81d045d94
remove the StructRetPromotion pass. It is unused, not maintained and
...
has some bugs. If this is interesting functionality, it should be
reimplemented in the argpromotion pass.
llvm-svn: 129314
2011-04-11 23:09:44 +00:00
Eli Friedman
9cca0715aa
Add back a couple checks removed by r129128; the fact that an intitializer
...
is an array of structures doesn't imply it's a ConstantArray of
ConstantStruct.
llvm-svn: 129207
2011-04-09 09:11:09 +00:00
Chris Lattner
88974f4625
fix PR9523, a crash in looprotate on a non-canonical loop made out of indirectbr.
...
llvm-svn: 129203
2011-04-09 07:25:58 +00:00
Eli Friedman
17822fcde9
PR9604; try to deal with RAUW updates correctly in the AST. I'm not convinced
...
it's completely safe to cache the AST across LICM runs even with this fix,
but this fix can't hurt.
llvm-svn: 129198
2011-04-09 06:55:46 +00:00
Eli Friedman
4db39cefdb
Test for r129190.
...
llvm-svn: 129197
2011-04-09 06:39:43 +00:00
Devang Patel
bc3d8b212f
Do not let debug info interfer with branch folding.
...
llvm-svn: 129114
2011-04-07 23:11:25 +00:00
Devang Patel
197c35298a
While hoisting common code from if/else, hoist debug info intrinsics if they match.
...
llvm-svn: 129078
2011-04-07 17:27:36 +00:00
Eli Friedman
c5f22a7815
PR9634: Don't unconditionally tell the AliasSetTracker that the PreheaderLoad
...
is equivalent to any other relevant value; it isn't true in general.
If it is equivalent, the LoopPromoter will tell the AST the equivalence.
Also, delete the PreheaderLoad if it is unused.
Chris, since you were the last one to make major changes here, can you check
that this is sane?
llvm-svn: 129049
2011-04-07 01:35:06 +00:00
Nadav Rotem
cc771acd77
This testcase passed even without the fix. Added the target info to make the
...
test fail (without the fix). Thanks Dan.
llvm-svn: 128999
2011-04-06 11:18:29 +00:00
Nadav Rotem
a069c6ce05
InstCombine optimizes gep(bitcast(x)) even when the bitcasts casts away address
...
space info. We crash with an assert in this case. This change checks that the
address space of the bitcasted pointer is the same as the gep ptr.
llvm-svn: 128884
2011-04-05 14:29:52 +00:00
Eli Friedman
17bf4922c9
PR9446: RecursivelyDeleteTriviallyDeadInstructions can delete the instruction
...
after the given instruction; make sure to handle that case correctly.
(It's difficult to trigger; the included testcase involves a dead
block, but I don't think that's a requirement.)
While I'm here, get rid of the unnecessary warning about
SimplifyInstructionsInBlock, since it should work correctly as far as I know.
llvm-svn: 128782
2011-04-02 22:45:17 +00:00
Benjamin Kramer
d121765e64
InstCombine: Turn icmp + sext into bitwise/integer ops when the input has only one unknown bit.
...
int test1(unsigned x) { return (x&8) ? 0 : -1; }
int test3(unsigned x) { return (x&8) ? -1 : 0; }
before (x86_64):
_test1:
andl $8, %edi
cmpl $1, %edi
sbbl %eax, %eax
ret
_test3:
andl $8, %edi
cmpl $1, %edi
sbbl %eax, %eax
notl %eax
ret
after:
_test1:
shrl $3, %edi
andl $1, %edi
leal -1(%rdi), %eax
ret
_test3:
shll $28, %edi
movl %edi, %eax
sarl $31, %eax
ret
llvm-svn: 128732
2011-04-01 20:09:10 +00:00
Nadav Rotem
d74b72b8a9
Instcombile optimization: extractelement(cast) -> cast(extractelement)
...
llvm-svn: 128683
2011-03-31 22:57:29 +00:00
Benjamin Kramer
5291054ef1
InstCombine: APFloat can't perform arithmetic on PPC double doubles, don't even try.
...
Thanks Eli!
llvm-svn: 128676
2011-03-31 21:35:49 +00:00
Benjamin Kramer
be209ab8a2
InstCombine: Fix transform to use the swapped predicate.
...
Thanks Frits!
llvm-svn: 128628
2011-03-31 10:46:03 +00:00
Benjamin Kramer
d159d94644
InstCombine: fold fcmp (fneg x), (fneg y) -> fcmp x, y
...
llvm-svn: 128627
2011-03-31 10:12:22 +00:00
Benjamin Kramer
a8c5d0872d
InstCombine: fold fcmp pred (fneg x), C -> fcmp swap(pred) x, -C
...
llvm-svn: 128626
2011-03-31 10:12:15 +00:00
Benjamin Kramer
cbb18e91a8
InstCombine: Shrink "fcmp (fpext x), C" to "fcmp x, C" if C can be losslessly converted to the type of x.
...
Fixes PR9592.
llvm-svn: 128625
2011-03-31 10:12:07 +00:00
Benjamin Kramer
2ccfbc8b71
InstCombine: fold fcmp (fpext x), (fpext y) -> fcmp x, y.
...
llvm-svn: 128624
2011-03-31 10:11:58 +00:00
Bill Wendling
5034159c5f
* The DSE code that tested for overlapping needed to take into account the fact
...
that one of the numbers is signed while the other is unsigned. This could lead
to a wrong result when the signed was promoted to an unsigned int.
* Add the data layout line to the testcase so that it will test the appropriate
thing.
Patch by David Terei!
llvm-svn: 128577
2011-03-30 21:37:19 +00:00
Benjamin Kramer
af0ed953c5
Avoid turning a floating point division with a constant power of two into a denormal multiplication.
...
Some platforms may treat denormals as zero, on other platforms multiplication
with a subnormal is slower than dividing by a normal.
llvm-svn: 128555
2011-03-30 17:02:54 +00:00
Benjamin Kramer
8564e0de96
InstCombine: If the divisor of an fdiv has an exact inverse, turn it into an fmul.
...
Fixes PR9587.
llvm-svn: 128546
2011-03-30 15:42:35 +00:00
Benjamin Kramer
272f2b0044
InstCombine: Add a few missing combines for ANDs and ORs of sign bit tests.
...
On x86 we now compile "if (a < 0 && b < 0)" into
testl %edi, %esi
js IF.THEN
llvm-svn: 128496
2011-03-29 22:06:41 +00:00
Cameron Zwarich
ff811cc475
Do some simple copy propagation through integer loads and stores when promoting
...
vector types. This helps a lot with inlined functions when using the ARM soft
float ABI. Fixes <rdar://problem/9184212>.
llvm-svn: 128453
2011-03-29 05:19:52 +00:00
Nick Lewycky
8544228d5a
Teach the transformation that moves binary operators around selects to preserve
...
the subclass optional data.
llvm-svn: 128388
2011-03-27 19:51:23 +00:00
Frits van Bommel
0bb2ad2cf7
Constant folding support for calls to umul.with.overflow(), basically identical to the smul.with.overflow() code.
...
llvm-svn: 128379
2011-03-27 14:26:13 +00:00
Nick Lewycky
83167df787
Add a small missed optimization: turn X == C ? X : Y into X == C ? C : Y. This
...
removes one use of X which helps it pass the many hasOneUse() checks.
In my analysis, this turns up very often where X = A >>exact B and that can't be
simplified unless X has one use (except by increasing the lifetime of A which is
generally a performance loss).
llvm-svn: 128373
2011-03-27 07:30:57 +00:00
Cameron Zwarich
d4174ee43e
Fix a typo and add a test.
...
llvm-svn: 128331
2011-03-26 04:58:50 +00:00
Bill Wendling
db40b5c899
PR9561: A store with a negative offset (via GEP) could erroniously say that it
...
completely overlaps a previous store, thus mistakenly deleting that store. Check
for this condition.
llvm-svn: 128319
2011-03-26 01:20:37 +00:00
Cameron Zwarich
10ebc189ee
Fix PR9464 by correcting some math that just happened to be right in most cases
...
that were hit in practice.
llvm-svn: 128146
2011-03-23 05:25:55 +00:00
Anders Carlsson
ee6bc70d2f
Add an optimization to GlobalOpt that eliminates calls to __cxa_atexit, if the function passed is empty.
...
llvm-svn: 127970
2011-03-20 17:59:11 +00:00
Andrew Trick
1c4b42d00f
Avoid creating canonical induction variables for non-native types.
...
For example, on 32-bit architecture, don't promote all uses of the IV
to 64-bits just because one use is a 64-bit cast.
Alternate implementation of the patch by Arnaud de Grandmaison.
llvm-svn: 127884
2011-03-18 16:50:32 +00:00
Eli Friedman
c17c9a78aa
FileCheck-ize and update test.
...
llvm-svn: 127845
2011-03-18 01:10:31 +00:00
Devang Patel
aad34d882d
Try to not lose variable's debug info during instcombine.
...
This is done by lowering dbg.declare intrinsic into dbg.value intrinsic.
Radar 9143931.
llvm-svn: 127834
2011-03-17 22:18:16 +00:00
Cameron Zwarich
0454253d7a
Only convert allocas to scalars if it is profitable. The profitability metric I
...
chose is having a non-memcpy/memset use and being larger than any native integer
type. Originally I chose having an access of a size smaller than the total size
of the alloca, but this caused some minor issues on the spirit benchmark where
SRoA runs again after some inlining.
This fixes <rdar://problem/8613163>.
llvm-svn: 127718
2011-03-16 00:13:44 +00:00
Cameron Zwarich
7b0f3c6a1a
Add native integer type TargetData to some existing tests.
...
llvm-svn: 127717
2011-03-16 00:13:40 +00:00
Cameron Zwarich
0b8cdfb6ec
Do not add PHIs with no users when creating LCSSA form. Patch by Andrew Clinton.
...
llvm-svn: 127674
2011-03-15 07:41:25 +00:00
Eli Friedman
c4414c6e92
PR9450: Make switch optimization in SimplifyCFG not dependent on the ordering
...
of pointers in an std::map.
llvm-svn: 127650
2011-03-15 02:23:35 +00:00
Eric Christopher
2139d3148f
If we don't know how long a string is we can't fold an _chk version to the
...
normal version.
Fixes rdar://9123638
llvm-svn: 127636
2011-03-15 00:25:41 +00:00
Benjamin Kramer
5acc751b6f
Teach ComputeMaskedBits about sub nsw.
...
llvm-svn: 127548
2011-03-12 17:18:11 +00:00
Cameron Zwarich
338d362200
Roll r127459 back in:
...
Optimize trivial branches in CodeGenPrepare, which often get created from the
lowering of objectsize intrinsics. Unfortunately, a number of tests were relying
on llc not optimizing trivial branches, so I had to add an option to allow them
to continue to test what they originally tested.
This fixes <rdar://problem/8785296> and <rdar://problem/9112893>.
llvm-svn: 127498
2011-03-11 21:52:04 +00:00
Daniel Dunbar
94ccb27b43
Revert r127459, "Optimize trivial branches in CodeGenPrepare, which often get
...
created from the", it broke some GCC test suite tests.
llvm-svn: 127477
2011-03-11 19:30:30 +00:00
Benjamin Kramer
391a946fa9
ComputeMaskedBits: sub falls through to add, and sub doesn't have the same overflow semantics as add.
...
Should fix the selfhost failures that started with r127463.
llvm-svn: 127465
2011-03-11 14:46:49 +00:00