Erik Verbruggen
0edc5e8391
Reassociate x + -0.1234 * y into x - 0.1234 * y
...
This does not require -ffast-math, and it gives CSE/GVN more options to
eliminate duplicate expressions in, e.g.:
return ((x + 0.1234 * y) * (x - 0.1234 * y));
Differential Revision: http://reviews.llvm.org/D4904
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216169 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-21 10:45:30 +00:00
Erik Verbruggen
69d0bd6175
Remove testcase from README which we didn't get. We do get it now.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215699 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-15 10:33:03 +00:00
Erik Verbruggen
76eb786cf7
Revert "InstCombine: merge constants in both operands of icmp."
...
This reverts commit r204912, and follow-up commit r204948.
This introduced a performance regression, and the fix is not completely
clear yet.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205010 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-28 14:50:57 +00:00
Erik Verbruggen
668c2aa517
InstCombine: merge constants in both operands of icmp.
...
Transform:
icmp X+Cst2, Cst
into:
icmp X, Cst-Cst2
when Cst-Cst2 does not overflow, and the add has nsw.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204912 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-27 11:16:05 +00:00
Shuxin Yang
200e2370dc
Remove two popcount patterns which we are already able to recognize.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170158 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-13 23:16:19 +00:00
Micah Villmow
3574eca1b0
Move TargetData to DataLayout.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165402 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-08 16:38:25 +00:00
Benjamin Kramer
51bfb0fe50
Fabs folding is implemented.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162186 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-19 09:51:44 +00:00
Micah Villmow
9a7963947c
Test revert of test changes.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160632 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-23 16:42:45 +00:00
Micah Villmow
f79c031bdc
Test commit.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160631 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-23 16:37:24 +00:00
Benjamin Kramer
d52998a815
Add a microoptimization note.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159082 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-23 15:19:31 +00:00
Benjamin Kramer
503a86b731
Remove README entry obsoleted by register masks.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154588 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-12 12:47:29 +00:00
Benjamin Kramer
9b58464330
Add another note about a missed compare with nsw arithmetic instcombine.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153574 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-28 10:50:18 +00:00
Benjamin Kramer
f2fd23b062
Add a note about a cute little fabs optimization.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153543 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-27 22:42:42 +00:00
Benjamin Kramer
c8591a451a
Add two missed instcombines related to compares with nsw arithmetic.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153542 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-27 22:03:19 +00:00
Benjamin Kramer
3e328ecbd8
Add two notes for correlated-expression optimizations.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139263 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-07 22:49:26 +00:00
Benjamin Kramer
3ff25514ce
Don't emit a bit test if there is only one case the test can yield false. A simple SETNE is sufficient.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135126 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-14 01:38:42 +00:00
Benjamin Kramer
e7fdcad2f2
InstCombine: Fold A-b == C --> b == A-C if A and C are constants.
...
The backend already knew this trick.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132915 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13 15:24:24 +00:00
Chris Lattner
32232fc2b5
clarify this, apparently it is confusing :)
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131916 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-23 20:17:44 +00:00
Chris Lattner
87943e3698
add a note.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131863 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-22 18:28:46 +00:00
Chris Lattner
b6fcf4cfbc
move PR9408 here.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131841 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-22 05:45:06 +00:00
Chris Lattner
325eeb1cd7
Transform: "icmp eq (trunc (lshr(X, cst1)), cst" to "icmp (and X, mask), cst"
...
when X has multiple uses. This is useful for exposing secondary optimizations,
but the X86 backend isn't ready for this when X has a single use. For example,
this can disable load folding.
This is inching towards resolving PR6627.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130238 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-26 20:18:20 +00:00
Chris Lattner
ed0318eab8
add a missed bitfield instcombine.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130137 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-25 18:44:26 +00:00
Benjamin Kramer
e7cf062537
DAGCombine: fold "(zext x) == C" into "x == (trunc C)" if the trunc is lossless.
...
On x86 this allows to fold a load into the cmp, greatly reducing register pressure.
movzbl (%rdi), %eax
cmpl $47, %eax
->
cmpb $47, (%rdi)
This shaves 8k off gcc.o on i386. I'll leave applying the patch in README.txt to Chris :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130005 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-22 18:47:44 +00:00
Chris Lattner
df2ef9015f
add a minor missed dag combine that is blocking mid-level optimization
...
improvements, that will lead to fixing PR6627.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129504 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-14 04:21:42 +00:00
Benjamin Kramer
ef7b8d9e5a
Add a note.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128286 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-25 17:32:40 +00:00
Eli Friedman
97ab5803df
A bit more analysis of a memset-related README entry.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128107 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-22 20:49:53 +00:00
Eli Friedman
ddfa02ba24
This README entry was fixed recently.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127982 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-21 01:33:03 +00:00
Chris Lattner
d3e768ecab
add a note
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126719 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-01 00:24:51 +00:00
Benjamin Kramer
7466678003
Add some DAGCombines for (adde 0, 0, glue), which are useful to optimize legalized code for large integer arithmetic.
...
1. Inform users of ADDEs with two 0 operands that it never sets carry
2. Fold other ADDs or ADDCs into the ADDE if possible
It would be neat if we could do the same thing for SETCC+ADD eventually, but we can't do that in target independent code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126557 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-26 22:48:07 +00:00
Chris Lattner
19310fc199
add a missed loop deletion case.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126103 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-21 02:13:39 +00:00
Chris Lattner
477a98824a
add an idiom that loop idiom could theoretically catch.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126101 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-21 01:33:38 +00:00
Duncan Sands
fe167c5a14
This has been implemented.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125738 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-17 08:16:56 +00:00
Chris Lattner
cb40195641
add some notes on compares + binops. Remove redundant entries.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125702 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-17 01:43:46 +00:00
Chris Lattner
5653f1f904
Add a few missed xforms from GCC PR14753
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125681 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-16 19:16:34 +00:00
Eli Friedman
eb1dc98aa7
Remove outdated README entry.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125660 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-16 07:41:19 +00:00
Eli Friedman
fd51e95171
Remove outdated README entry.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125659 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-16 07:18:18 +00:00
Eli Friedman
c5cb996e9c
Update README entry.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125658 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-16 07:17:44 +00:00
Anders Carlsson
9c93d48b6b
Remove a virtual inheritance case that clang can devirtualize fully now.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124989 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-06 20:16:49 +00:00
Benjamin Kramer
56442dfdcf
SimplifyCFG: Turn switches into sub+icmp+branch if possible.
...
This makes the job of the later optzn passes easier, allowing the vast amount of
icmp transforms to chew on it.
We transform 840 switches in gcc.c, leading to a 16k byte shrink of the resulting
binary on i386-linux.
The testcase from README.txt now compiles into
decl %edi
cmpl $3, %edi
sbbl %eax, %eax
andl $1, %eax
ret
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124724 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-02 15:56:22 +00:00
Chris Lattner
fd2ad8783c
add a note, progress unblocked by PR8575 being fixed.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124599 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-31 20:23:28 +00:00
Benjamin Kramer
9b108a338d
Teach DAGCombine to fold fold (sra (trunc (sr x, c1)), c2) -> (trunc (sra x, c1+c2) when c1 equals the amount of bits that are truncated off.
...
This happens all the time when a smul is promoted to a larger type.
On x86-64 we now compile "int test(int x) { return x/10; }" into
movslq %edi, %rax
imulq $1717986919, %rax, %rax
movq %rax, %rcx
shrq $63, %rcx
sarq $34, %rax <- used to be "shrq $32, %rax; sarl $2, %eax"
addl %ecx, %eax
This fires 96 times in gcc.c on x86-64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124559 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-30 16:38:43 +00:00
Chris Lattner
96c0771c01
this isn't a memset, we do convert dest[i] to one though :)
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124097 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-24 02:32:00 +00:00
Chris Lattner
7ea7d32de6
with recent work, we now optimize this into:
...
define i32 @foo(i32 %x) nounwind readnone ssp {
entry:
%tobool = icmp eq i32 %x, 0
%tmp5 = select i1 %tobool, i32 2, i32 1
ret i32 %tmp5
}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124091 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-24 01:12:18 +00:00
Anders Carlsson
f330b3227a
Add a memset loop that LoopIdiomRecognize doesn't recognize.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124082 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-23 20:31:00 +00:00
Chris Lattner
908d8e82b5
add a note
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123752 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-18 07:47:48 +00:00
Anders Carlsson
5822b86e4d
Update README.txt to remove the DAE enhancement.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123597 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-16 21:26:15 +00:00
Chris Lattner
b0daffc609
add some commentary
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123572 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-16 06:39:44 +00:00
Chandler Carruth
cad33c624e
Simplify a README.txt entry significantly to expose the core issue.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123556 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-16 01:40:23 +00:00
Chris Lattner
4c5456a56f
typo
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123406 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-13 22:11:56 +00:00
Chris Lattner
4cd18f98f7
memcpy + metadata = bliss :)
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123405 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-13 22:08:15 +00:00