| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the load, then it may be legal to transform the load and store to integer
load and store of the same width.
This is done if the target specified the transformation as profitable. e.g.
On arm, this can transform:
vldr.32 s0, []
vstr.32 s0, []
to
ldr r12, []
str r12, []
rdar://8944252
llvm-svn: 124708
|
| |
|
|
|
|
|
| |
This is completely untested but pretty straightforward, so hopefully I
got it right.
llvm-svn: 124694
|
| |
|
|
| |
llvm-svn: 124688
|
| |
|
|
|
|
| |
Patch by Brian G. Lucas!
llvm-svn: 124679
|
| |
|
|
| |
llvm-svn: 124659
|
| |
|
|
|
|
|
| |
pattern matching can also pattern match undef, creating a more uniform
style.
llvm-svn: 124657
|
| |
|
|
| |
llvm-svn: 124656
|
| |
|
|
| |
llvm-svn: 124655
|
| |
|
|
| |
llvm-svn: 124652
|
| |
|
|
|
|
| |
different visibilities.
llvm-svn: 124650
|
| |
|
|
| |
llvm-svn: 124645
|
| |
|
|
| |
llvm-svn: 124641
|
| |
|
|
| |
llvm-svn: 124639
|
| |
|
|
| |
llvm-svn: 124611
|
| |
|
|
|
|
| |
unbreaks some ARM tests.
llvm-svn: 124608
|
| |
|
|
|
|
| |
all lead to a silent miscompilation of code.
llvm-svn: 124603
|
| |
|
|
|
|
| |
correct places.
llvm-svn: 124601
|
| |
|
|
| |
llvm-svn: 124599
|
| |
|
|
| |
llvm-svn: 124587
|
| |
|
|
| |
llvm-svn: 124570
|
| |
|
|
| |
llvm-svn: 124569
|
| |
|
|
|
|
|
| |
(A+B) == A -> B == 0
A == (A+B) -> B == 0
llvm-svn: 124567
|
| |
|
|
|
|
|
| |
This is similar to the -unroll-threshold option. There should be no change in
behavior when -tail-dup-size is not explicit on the llc command line.
llvm-svn: 124564
|
| |
|
|
|
|
| |
by PR9088 fixes things.
llvm-svn: 124561
|
| |
|
|
|
|
|
|
|
|
|
|
| |
knows how
to do this and more, but would only do it if X/Y had only one use. Spotted as the
most common missed simplification in SPEC by my auto-simplifier, now that it knows
about nuw/nsw/exact flags. This removes a bunch of multiplications from 447.dealII
and 483.xalancbmk. It also removes a lot from tramp3d-v4, which results in much
more inlining.
llvm-svn: 124560
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 124557
|
| |
|
|
| |
llvm-svn: 124556
|
| |
|
|
|
|
|
| |
This is the one where one of the branches of the select is another select on
the same condition.
llvm-svn: 124547
|
| |
|
|
|
|
| |
The DEBUG() call at line 606 demands to see raw_ostream's definition. I have no idea why this seems to only break MSVC.
llvm-svn: 124545
|
| |
|
|
| |
llvm-svn: 124544
|
| |
|
|
| |
llvm-svn: 124535
|
| |
|
|
| |
llvm-svn: 124534
|
| |
|
|
| |
llvm-svn: 124533
|
| |
|
|
|
|
|
|
| |
This happens e.g. for code like "X - X%10" where we lower the modulo operation
to a series of multiplies and shifts that are then subtracted from X, leading to
this missed optimization.
llvm-svn: 124532
|
| |
|
|
| |
llvm-svn: 124527
|
| |
|
|
| |
llvm-svn: 124526
|
| |
|
|
| |
llvm-svn: 124522
|
| |
|
|
|
|
| |
unconditional predecessor to enable TCE on demand.
llvm-svn: 124518
|
| |
|
|
|
|
|
|
|
|
| |
Modified patch by Adam Preuss.
This builds on the existing framework for block tracing, edge profiling and optimal edge profiling.
See -help-hidden for new flags.
For documentation, see the technical report "Implementation of Path Profiling..." in llvm.org/pubs.
llvm-svn: 124515
|
| |
|
|
| |
llvm-svn: 124498
|
| |
|
|
| |
llvm-svn: 124497
|
| |
|
|
|
|
|
|
| |
basically
zero effect on the testsuite (it improves two Ada testcases).
llvm-svn: 124496
|
| |
|
|
|
|
| |
Patch by Jyun-Yan You.
llvm-svn: 124492
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
benchmarks, and that it can be simplified to X/Y. (In general you can only
simplify (Z*Y)/Y to Z if the multiplication did not overflow; if Z has the
form "X/Y" then this is the case). This patch implements that transform and
moves some Div logic out of instcombine and into InstructionSimplify.
Unfortunately instcombine gets in the way somewhat, since it likes to change
(X/Y)*Y into X-(X rem Y), so I had to teach instcombine about this too.
Finally, thanks to the NSW/NUW flags, sometimes we know directly that "Z*Y"
does not overflow, because the flag says so, so I added that logic too. This
eliminates a bunch of divisions and subtractions in 447.dealII, and has good
effects on some other benchmarks too. It seems to have quite an effect on
tramp3d-v4 but it's hard to say if it's good or bad because inlining decisions
changed, resulting in massive changes all over.
llvm-svn: 124487
|
| |
|
|
| |
llvm-svn: 124486
|
| |
|
|
| |
llvm-svn: 124485
|
| |
|
|
|
|
| |
functionality change.
llvm-svn: 124482
|
| |
|
|
| |
llvm-svn: 124480
|
| |
|
|
| |
llvm-svn: 124479
|