Shuxin Yang
97e07bf211
Remove two popcount patterns which we are already able to recognize.
...
llvm-svn: 170158
2012-12-13 23:16:19 +00:00
Micah Villmow
cdfe20b97f
Move TargetData to DataLayout.
...
llvm-svn: 165402
2012-10-08 16:38:25 +00:00
Benjamin Kramer
fd4fe7061c
Fabs folding is implemented.
...
llvm-svn: 162186
2012-08-19 09:51:44 +00:00
Micah Villmow
9eedce1e7c
Test revert of test changes.
...
llvm-svn: 160632
2012-07-23 16:42:45 +00:00
Micah Villmow
780c24f19c
Test commit.
...
llvm-svn: 160631
2012-07-23 16:37:24 +00:00
Benjamin Kramer
53ffe55a66
Add a microoptimization note.
...
llvm-svn: 159082
2012-06-23 15:19:31 +00:00
Benjamin Kramer
df4477c506
Remove README entry obsoleted by register masks.
...
llvm-svn: 154588
2012-04-12 12:47:29 +00:00
Benjamin Kramer
20b32d2da6
Add another note about a missed compare with nsw arithmetic instcombine.
...
llvm-svn: 153574
2012-03-28 10:50:18 +00:00
Benjamin Kramer
2735c01906
Add a note about a cute little fabs optimization.
...
llvm-svn: 153543
2012-03-27 22:42:42 +00:00
Benjamin Kramer
f0901459b9
Add two missed instcombines related to compares with nsw arithmetic.
...
llvm-svn: 153542
2012-03-27 22:03:19 +00:00
Benjamin Kramer
2e63f6eac0
Add two notes for correlated-expression optimizations.
...
llvm-svn: 139263
2011-09-07 22:49:26 +00:00
Benjamin Kramer
15cd5a3f12
Don't emit a bit test if there is only one case the test can yield false. A simple SETNE is sufficient.
...
llvm-svn: 135126
2011-07-14 01:38:42 +00:00
Benjamin Kramer
c970849ea0
InstCombine: Fold A-b == C --> b == A-C if A and C are constants.
...
The backend already knew this trick.
llvm-svn: 132915
2011-06-13 15:24:24 +00:00
Chris Lattner
d71ed9431a
clarify this, apparently it is confusing :)
...
llvm-svn: 131916
2011-05-23 20:17:44 +00:00
Chris Lattner
bfe2c24c80
add a note.
...
llvm-svn: 131863
2011-05-22 18:28:46 +00:00
Chris Lattner
bbc40ac474
move PR9408 here.
...
llvm-svn: 131841
2011-05-22 05:45:06 +00:00
Chris Lattner
1b06c71668
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.
llvm-svn: 130238
2011-04-26 20:18:20 +00:00
Chris Lattner
6e29892430
add a missed bitfield instcombine.
...
llvm-svn: 130137
2011-04-25 18:44:26 +00:00
Benjamin Kramer
341c11da3b
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 :)
llvm-svn: 130005
2011-04-22 18:47:44 +00:00
Chris Lattner
1d313c6f6d
add a minor missed dag combine that is blocking mid-level optimization
...
improvements, that will lead to fixing PR6627.
llvm-svn: 129504
2011-04-14 04:21:42 +00:00
Benjamin Kramer
dc0082b087
Add a note.
...
llvm-svn: 128286
2011-03-25 17:32:40 +00:00
Eli Friedman
822e7bc061
A bit more analysis of a memset-related README entry.
...
llvm-svn: 128107
2011-03-22 20:49:53 +00:00
Eli Friedman
8e15a661bf
This README entry was fixed recently.
...
llvm-svn: 127982
2011-03-21 01:33:03 +00:00
Chris Lattner
0c6cb46ac1
add a note
...
llvm-svn: 126719
2011-03-01 00:24:51 +00:00
Benjamin Kramer
26691d9660
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.
llvm-svn: 126557
2011-02-26 22:48:07 +00:00
Chris Lattner
e9cba7bd34
add a missed loop deletion case.
...
llvm-svn: 126103
2011-02-21 02:13:39 +00:00
Chris Lattner
659c793a4e
add an idiom that loop idiom could theoretically catch.
...
llvm-svn: 126101
2011-02-21 01:33:38 +00:00
Duncan Sands
491eb276a7
This has been implemented.
...
llvm-svn: 125738
2011-02-17 08:16:56 +00:00
Chris Lattner
727eebee58
add some notes on compares + binops. Remove redundant entries.
...
llvm-svn: 125702
2011-02-17 01:43:46 +00:00
Chris Lattner
28bf91f78e
Add a few missed xforms from GCC PR14753
...
llvm-svn: 125681
2011-02-16 19:16:34 +00:00
Eli Friedman
c8fb2557b9
Remove outdated README entry.
...
llvm-svn: 125660
2011-02-16 07:41:19 +00:00
Eli Friedman
0254c4c01b
Remove outdated README entry.
...
llvm-svn: 125659
2011-02-16 07:18:18 +00:00
Eli Friedman
5f75515e5d
Update README entry.
...
llvm-svn: 125658
2011-02-16 07:17:44 +00:00
Anders Carlsson
49d81a3d7e
Remove a virtual inheritance case that clang can devirtualize fully now.
...
llvm-svn: 124989
2011-02-06 20:16:49 +00:00
Benjamin Kramer
f4ea1d5f79
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
llvm-svn: 124724
2011-02-02 15:56:22 +00:00
Chris Lattner
865fe3b283
add a note, progress unblocked by PR8575 being fixed.
...
llvm-svn: 124599
2011-01-31 20:23:28 +00:00
Benjamin Kramer
946e1522b6
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.
llvm-svn: 124559
2011-01-30 16:38:43 +00:00
Chris Lattner
9685603260
this isn't a memset, we do convert dest[i] to one though :)
...
llvm-svn: 124097
2011-01-24 02:32:00 +00:00
Chris Lattner
b830ee5250
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
}
llvm-svn: 124091
2011-01-24 01:12:18 +00:00
Anders Carlsson
773bc67eff
Add a memset loop that LoopIdiomRecognize doesn't recognize.
...
llvm-svn: 124082
2011-01-23 20:31:00 +00:00
Chris Lattner
a56c8279e8
add a note
...
llvm-svn: 123752
2011-01-18 07:47:48 +00:00
Anders Carlsson
6a5171ba68
Update README.txt to remove the DAE enhancement.
...
llvm-svn: 123597
2011-01-16 21:26:15 +00:00
Chris Lattner
c326ebd118
add some commentary
...
llvm-svn: 123572
2011-01-16 06:39:44 +00:00
Chandler Carruth
ef28abefd0
Simplify a README.txt entry significantly to expose the core issue.
...
llvm-svn: 123556
2011-01-16 01:40:23 +00:00
Chris Lattner
b6c3aff1cb
typo
...
llvm-svn: 123406
2011-01-13 22:11:56 +00:00
Chris Lattner
b9cdf393a4
memcpy + metadata = bliss :)
...
llvm-svn: 123405
2011-01-13 22:08:15 +00:00
Chandler Carruth
b1e7f557b7
Teach constant folding to perform conversions from constant floating
...
point values to their integer representation through the SSE intrinsic
calls. This is the last part of a README.txt entry for which I have real
world examples.
llvm-svn: 123206
2011-01-11 01:07:24 +00:00
Owen Anderson
d490c2d2ae
Fix a random missed optimization by making InstCombine more aggressive when determining which bits are demanded by
...
a comparison against a constant.
llvm-svn: 123203
2011-01-11 00:36:45 +00:00
Chris Lattner
78cdd2a6c6
+0.0 vs -0.0 differences can be handled by looking at the user of the
...
operation in some cases.
llvm-svn: 123190
2011-01-10 21:01:17 +00:00
Chris Lattner
eef1455020
expand on a note
...
llvm-svn: 123145
2011-01-10 00:33:01 +00:00