Devang Patel
97c467ee47
Keep track of incoming argument's location while emitting LiveIns.
...
llvm-svn: 124611
2011-01-31 21:38:14 +00:00
Richard Osborne
11cdda2346
Fix bug where ReduceLoadWidth was creating illegal ZEXTLOAD instructions.
...
llvm-svn: 124587
2011-01-31 17:41:44 +00:00
Anders Carlsson
f184e5de9a
Recognize and simplify
...
(A+B) == A -> B == 0
A == (A+B) -> B == 0
llvm-svn: 124567
2011-01-30 22:01:13 +00:00
Duncan Sands
987c8bc759
Commit 124487 broke 254.gap. See if disabling the part that might be triggered
...
by PR9088 fixes things.
llvm-svn: 124561
2011-01-30 18:24:20 +00:00
Duncan Sands
ac01c21937
Transform (X/Y)*Y into X if the division is exact. Instcombine already 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
2011-01-30 18:03:50 +00:00
Benjamin Kramer
6b3c3de09a
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
Nick Lewycky
5259b6a6e2
Add the select optimization recently added to instcombine to constant folding.
...
This is the one where one of the branches of the select is another select on
the same condition.
llvm-svn: 124547
2011-01-29 20:35:06 +00:00
Frits van Bommel
92dc04df67
Move InstCombine's knowledge of fdiv to SimplifyInstruction().
...
llvm-svn: 124534
2011-01-29 15:26:31 +00:00
Duncan Sands
0587f785bf
Fix typo: should have been testing that X was odd, not V.
...
llvm-svn: 124533
2011-01-29 13:27:00 +00:00
Evan Cheng
20433f6339
Add a test for TCE return duplication.
...
llvm-svn: 124527
2011-01-29 04:53:35 +00:00
Evan Cheng
4af5487b74
Re-apply r124518 with fix. Watch out for invalidated iterator.
...
llvm-svn: 124526
2011-01-29 04:46:23 +00:00
Evan Cheng
1f943b9b13
Revert r124518. It broke Linux self-host.
...
llvm-svn: 124522
2011-01-29 02:43:04 +00:00
Evan Cheng
a1e4cb5f09
Re-commit r124462 with fixes. Tail recursion elim will now dup ret into unconditional predecessor to enable TCE on demand.
...
llvm-svn: 124518
2011-01-29 01:29:26 +00:00
Bob Wilson
e7ac2389b2
PR9030: Fix disassembly of ARM "mov pc, lr" instruction.
...
Patch by Jyun-Yan You.
llvm-svn: 124492
2011-01-28 17:50:30 +00:00
Duncan Sands
1a18d8df96
My auto-simplifier noticed that ((X/Y)*Y)/Y occurs several times in SPEC
...
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
2011-01-28 16:51:11 +00:00
Roman Divacky
c6a20d1728
Add support for parsing .float
...
llvm-svn: 124485
2011-01-28 14:20:32 +00:00
Evan Cheng
5b6c72e549
Revert r124462. There are a few big regressions that I need to fix first.
...
llvm-svn: 124478
2011-01-28 07:12:38 +00:00
Nick Lewycky
9bbbb3e6f5
Clean up the tests a little, make sure we match an instruction in the right
...
test.
llvm-svn: 124473
2011-01-28 05:13:17 +00:00
Rafael Espindola
d93551f227
Add a triple.
...
llvm-svn: 124471
2011-01-28 03:57:55 +00:00
Nick Lewycky
74dfcccec4
Fold select + select where both selects are on the same condition.
...
llvm-svn: 124469
2011-01-28 03:28:10 +00:00
Rafael Espindola
9bc19ee478
Print the visibility of declarations.
...
llvm-svn: 124468
2011-01-28 03:20:10 +00:00
Nico Weber
66fd0e8119
PR8951: Support for .equiv in integrated assembler, patch by Jörg Sonnenberger!
...
llvm-svn: 124467
2011-01-28 03:04:41 +00:00
Evan Cheng
7031f450b3
- Stop simplifycfg from duplicating "ret" instructions into unconditional
...
branches. PR8575, rdar://5134905, rdar://8911460.
- Allow codegen tail duplication to dup small return blocks after register
allocation is done.
llvm-svn: 124462
2011-01-28 02:19:21 +00:00
Evan Cheng
2042be8132
Fix PLD encoding.
...
llvm-svn: 124458
2011-01-27 23:48:34 +00:00
Roman Divacky
f817c82cf3
Add support for specifying register name in cfi-register/offset/def
...
as well as register number.
llvm-svn: 124379
2011-01-27 17:16:37 +00:00
Nick Lewycky
864a35740a
Fix surprising missed optimization in mergefunc where we forgot to consider
...
that relationships like "i8* null" is equivalent to "i32* null".
llvm-svn: 124368
2011-01-27 08:38:19 +00:00
Eric Christopher
3906b33289
Add a testcase for my last checkin.
...
llvm-svn: 124358
2011-01-27 06:01:17 +00:00
Bruno Cardoso Lopes
228d126d6f
Add encoding testcases for ARM vcvtr variations
...
llvm-svn: 124289
2011-01-26 13:53:38 +00:00
Bruno Cardoso Lopes
2d6bd03b18
fix the encoding and add testcases for ARM nop, yield, wfe and wfi instructions
...
llvm-svn: 124288
2011-01-26 13:28:14 +00:00
Duncan Sands
e1912ca7e0
Fix PR9039, a use-after-free in reassociate. The issue was that the
...
operand being factorized (and erased) could occur several times in Ops,
resulting in freed memory being used when the next occurrence in Ops was
analyzed.
llvm-svn: 124287
2011-01-26 10:08:38 +00:00
NAKAMURA Takumi
8ace7260cc
Target/X86: Tweak win64's tailcall.
...
llvm-svn: 124272
2011-01-26 02:04:09 +00:00
NAKAMURA Takumi
066378440a
Fix whitespace.
...
llvm-svn: 124270
2011-01-26 02:03:37 +00:00
Rafael Espindola
29e8317caa
Move unnamed_addr after the function arguments on Sabre's request.
...
llvm-svn: 124209
2011-01-25 19:09:56 +00:00
Devang Patel
fce915414e
Resolve DanglingDbgValue of PHI nodes where the use follows dbg.value intrinisic.
...
llvm-svn: 124203
2011-01-25 18:09:58 +00:00
Duncan Sands
017a3d76f7
In which I discover that zero+zero is zero, d'oh!
...
llvm-svn: 124188
2011-01-25 15:14:15 +00:00
Duncan Sands
76eef3df7e
Turn off this test - the corresponding instsimplify logic has been
...
disabled.
llvm-svn: 124185
2011-01-25 12:31:43 +00:00
Duncan Sands
92b081bd42
According to my auto-simplifier the most common missed simplifications in
...
optimized code are:
(non-negative number)+(power-of-two) != 0 -> true
and
(x | 1) != 0 -> true
Instcombine knows about the second one of course, but only does it if X|1
has only one use. These fire thousands of times in the testsuite.
llvm-svn: 124183
2011-01-25 09:38:29 +00:00
Nick Lewycky
b20b284b35
Teach mergefunc how to emit aliases safely again -- but keep it turned it off
...
for now. It's controlled by the HasGlobalAliases variable which is not attached
to any flag yet.
llvm-svn: 124182
2011-01-25 08:56:50 +00:00
Evan Cheng
8e47a6e196
Don't merge restore with tail call instruction.
...
llvm-svn: 124167
2011-01-25 01:28:33 +00:00
Devang Patel
431a9b9c2f
Speculatively revert r124138.
...
llvm-svn: 124142
2011-01-24 20:04:37 +00:00
Rafael Espindola
f290466899
Jörg Sonnenberger noticed that we were missing this test.
...
llvm-svn: 124139
2011-01-24 19:40:38 +00:00
Devang Patel
5ccc4e884c
Resolve DanglingDbgValue of PHI nodes where the use follows dbg.value intrinisic.
...
llvm-svn: 124138
2011-01-24 19:24:37 +00:00
Duncan Sands
64d4cb968a
Testcase for dragonegg commit 124128.
...
llvm-svn: 124129
2011-01-24 18:04:33 +00:00
Rafael Espindola
ead58a5259
Handle strings in section names the same way as gas:
...
* If the name is a single string, we remove the quotes
* If the name starts without a quote, we include any quotes in the name
llvm-svn: 124127
2011-01-24 18:02:54 +00:00
Dan Gohman
6f83adb763
Add another rdar number.
...
llvm-svn: 124125
2011-01-24 17:54:01 +00:00
Chris Lattner
9ba0a83f2b
fix a missing shuffle pattern, PR9009. Patch by Artiom Myaskouvskey!
...
llvm-svn: 124102
2011-01-24 03:42:46 +00:00
Chris Lattner
8f4ed7d057
merge all the "crash tests" into crash.ll
...
llvm-svn: 124101
2011-01-24 03:37:34 +00:00
Chris Lattner
f33b65080c
fix PR9017, a bug where we'd assert when promoting in unreachable
...
code.
llvm-svn: 124100
2011-01-24 03:29:07 +00:00
Chris Lattner
077cdfcadb
fix PR9015, a crash linking recursive metadata.
...
llvm-svn: 124099
2011-01-24 03:18:24 +00:00
Chris Lattner
3609e5afb4
enhance SRoA to promote allocas that are used by PHI nodes. This often
...
occurs because instcombine sinks loads and inserts phis. This kicks in
on such apps as 175.vpr, eon, 403.gcc, xalancbmk and a bunch of times in
spec2006 in some app that uses std::deque.
This resolves the last of rdar://7339113.
llvm-svn: 124090
2011-01-24 01:07:11 +00:00