Evan Cheng
134982daa9
More accurate estimate / tracking of register pressure.
...
- Initial register pressure in the loop should be all the live defs into the
loop. Not just those from loop preheader which is often empty.
- When an instruction is hoisted, update register pressure from loop preheader
to the original BB.
- Treat only use of a virtual register as kill since the code is still SSA.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116956 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-20 22:03:58 +00:00
Evan Cheng
2312842de0
Re-enable register pressure aware machine licm with fixes. Hoist() may have
...
erased the instruction during LICM so UpdateRegPressureAfter() should not
reference it afterwards.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116845 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-19 18:58:51 +00:00
Daniel Dunbar
9869413802
Revert r116781 "- Add a hook for target to determine whether an instruction def
...
is", which breaks some nightly tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116816 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-19 17:14:24 +00:00
Evan Cheng
11e8b74a7a
- Add a hook for target to determine whether an instruction def is
...
"long latency" enough to hoist even if it may increase spilling. Reloading
a value from spill slot is often cheaper than performing an expensive
computation in the loop. For X86, that means machine LICM will hoist
SQRT, DIV, etc. ARM will be somewhat aggressive with VFP and NEON
instructions.
- Enable register pressure aware machine LICM by default.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116781 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-19 00:55:07 +00:00
Michael J. Spencer
84ac4d5a2a
X86-Windows: Emit an undefined global __fltused symbol when targeting Windows
...
if any floating point arguments are passed to an external function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116665 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-16 08:25:41 +00:00
Rafael Espindola
6d8628061b
Fix another case where we were preferring instructions with large
...
immediates instead of 8 bits ones.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116410 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-13 17:14:25 +00:00
Rafael Espindola
dba81cf40e
Fix PR8365 by adding a more specialized Pat that checks if an 'and' with
...
8 bit constants can be used.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116403 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-13 13:31:20 +00:00
Eric Christopher
8f9145b0eb
FileCheckize this in a hope to quiet a valgrind warning on grep.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116376 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-12 23:47:58 +00:00
Andrew Trick
0a434dbb91
PR8297
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116223 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-11 21:08:42 +00:00
Andrew Trick
1a2cf3b4d9
Fixes bug 8297: i386 cmpxchg8b, missing MachineMemOperand
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116214 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-11 19:02:04 +00:00
Michael J. Spencer
92bf38c956
X86: MinGW should always use libgcc on Windows.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116177 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-10 23:11:06 +00:00
Michael J. Spencer
1802a9f8fe
X86: Call _alldiv instead of __divdi3 on Windows (excluding cygwin).
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116174 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-10 22:04:34 +00:00
Cameron Esfahani
ec37b00b17
Recommit 116056, now with the missing file...
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116083 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 19:24:18 +00:00
Andrew Trick
5900201aa7
reverting 116056: win64_params.ll may need to be conditionalized?
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116063 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 17:22:42 +00:00
Cameron Esfahani
d7b8d91d4a
Small patch to restore home register stack space allocation for the Win64 case. Add test case. This code eventually needs to be tighter, since it's always allocating it, even in leaf routines.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116056 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 10:31:30 +00:00
Chris Lattner
4075546739
testcase that goes with r116053
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116054 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 05:12:30 +00:00
Chris Lattner
77c7008469
rename test
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116052 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 05:05:06 +00:00
Chris Lattner
4a26318224
merge tests
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116051 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 05:04:58 +00:00
Chris Lattner
48b03bc70a
filecheckize.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116050 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 05:02:29 +00:00
Chris Lattner
15df55d8c2
reapply: Use the new TB_NOT_REVERSABLE flag instead of special
...
reapply: reimplement the second half of the or/add optimization. We should now
with no changes. Turns out that one missing "Defs = [EFLAGS]" can upset things
a bit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116040 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 03:57:25 +00:00
Daniel Dunbar
32f0cdba30
Revert "reimplement the second half of the or/add optimization. We should now",
...
which depends on r116007, which I am about to revert.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116031 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 02:07:26 +00:00
Chris Lattner
cd3167b281
reimplement the second half of the or/add optimization. We should now
...
only end up emitting LEA instead of OR. If we aren't able to promote
something into an LEA, we should never be emitting it as an ADD.
Add some testcases that we emit "or" in cases where we used to produce
an "add".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116026 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-08 01:05:10 +00:00
Chris Lattner
00e94baf4e
convert cmp to use a multipattern
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115978 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-07 20:56:25 +00:00
Evan Cheng
835580fc3a
Canonicalize X86ISD::MOVDDUP nodes to v2f64 to make sure all cases match. Also eliminate unneeded isel patterns. rdar://8520311
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115977 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-07 20:50:20 +00:00
Bill Wendling
0659b045cf
PSHUFW is in SSE, not SSSE3.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115691 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-05 21:58:12 +00:00
Owen Anderson
3a9e7690ba
Use a more efficient lowering of uint64_t --> float that can take advantage of hardware signed integer conversion without
...
having to do a double cast (uint64_t --> double --> float). This is based on the algorithm from compiler_rt's __floatundisf
for X86-64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115634 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-05 17:24:05 +00:00
NAKAMURA Takumi
605789564c
test/CodeGen/X86/atomic_op.ll: Rename @main to @func. Extra sequences will be inserted to @main as prologue on cygming, to fail.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115611 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-05 11:16:24 +00:00
Anton Korobeynikov
e7beda183d
va_args support for Win64.
...
Patch by Cameron!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115480 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-03 22:52:07 +00:00
Anton Korobeynikov
6af61ca789
Properly emit stack probe on win64 (for non-mingw targets).
...
Based on the patch by Cameron Esfahani!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115479 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-03 22:02:38 +00:00
Chris Lattner
ece290226a
unbreak buildbot
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115476 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-03 20:02:48 +00:00
Bill Wendling
8e956f7e3e
Add test to make sure that the MMX intrinsic calls make it out the other end in
...
tact.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115458 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-03 03:30:30 +00:00
Bill Wendling
43c78cda10
Need to specify SSE4 for machines which don't have SSE4. The code checked for is generated by SSE4. Otherwise, we get something else.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115352 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 21:39:35 +00:00
Bill Wendling
273ac840bc
We must check for something.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115309 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 10:20:10 +00:00
Bill Wendling
c160218081
Disable tests until I can figure out why they're failing on just two machines but not others.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115308 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 10:01:10 +00:00
Bill Wendling
cc958c928f
Try adding an mtriple.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115307 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 09:40:50 +00:00
Bill Wendling
b1170f0e62
FileCheck-ize this test.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115304 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 08:55:48 +00:00
Bill Wendling
2b0ab5c370
FileCheck-ize this test.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115303 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 08:50:12 +00:00
Chris Lattner
2831a19495
fix rdar://8494845 + PR8244 - a miscompile exposed by my patch in r101350
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115294 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 05:36:09 +00:00
Dale Johannesen
b0ab5d04dd
One more +sse2.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115293 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 05:08:18 +00:00
Dale Johannesen
5db1eea91a
Mark all these as needing SSE2. Should fix PPC and
...
maybe even Linux.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115291 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 04:17:55 +00:00
Dale Johannesen
81a0b9e41c
Disable these tests for now; it's not obvious why they fail on Linux.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115257 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 00:59:21 +00:00
Dale Johannesen
9efef89b80
Make test not sensitive to register choice.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115250 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 00:16:17 +00:00
Dale Johannesen
0488fb649a
Massive rewrite of MMX:
...
The x86_mmx type is used for MMX intrinsics, parameters and
return values where these use MMX registers, and is also
supported in load, store, and bitcast.
Only the above operations generate MMX instructions, and optimizations
do not operate on or produce MMX intrinsics.
MMX-sized vectors <2 x i32> etc. are lowered to XMM or split into
smaller pieces. Optimizations may occur on these forms and the
result casted back to x86_mmx, provided the result feeds into a
previous existing x86_mmx operation.
The point of all this is prevent optimizations from introducing
MMX operations, which is unsafe due to the EMMS problem.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115243 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-30 23:57:10 +00:00
NAKAMURA Takumi
929910925d
test/CodeGen/X86/sibcall.ll: Add explicit triplets and remove XFAIL: apple-darwin8.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115215 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-30 22:02:06 +00:00
Jakob Stoklund Olesen
7eb589d3f9
Try again to disable critical edge splitting in CodeGenPrepare.
...
The bug that broke i386 linux has been fixed in r115191.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115204 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-30 20:51:52 +00:00
Jakob Stoklund Olesen
2622f4622c
When isel is emitting instructions for an x86 target without CMOV, the CFG is
...
edited during emission.
If the basic block ends in a switch that gets lowered to a jump table, any
phis at the default edge were getting updated wrong. The jump table data
structure keeps a pointer to the header blocks that wasn't getting updated
after the MBB is split.
This bug was exposed on 32-bit Linux when disabling critical edge splitting in
codegen prepare.
The fix is to uipdate stale MBB pointers whenever a block is split during
emission.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115191 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-30 19:44:31 +00:00
Bill Wendling
e48155b25a
And remove r114997's test.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115003 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-28 23:24:18 +00:00
Bill Wendling
2ff6e1e62c
Revert r114997. It was causing a failure on darwin10-selfhost.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115002 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-28 23:11:55 +00:00
Bill Wendling
4edab1a9e8
Fix a FIXME. _foo.eh symbols are currently always exported so that the linker
...
knows about them. This is not necessary on 10.6 and later.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114997 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-28 22:36:56 +00:00
Jakob Stoklund Olesen
08342f2d11
Revert "Disable codegen prepare critical edge splitting. Machine instruction passes now"
...
This reverts revision 114633. It was breaking llvm-gcc-i386-linux-selfhost.
It seems there is a downstream bug that is exposed by
-cgp-critical-edge-splitting=0. When that bug is fixed, this patch can go back
in.
Note that the changes to tailcallfp2.ll are not reverted. They were good are
required.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114859 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-27 18:43:48 +00:00