Commit Graph

16829 Commits

Author SHA1 Message Date
Simon Pilgrim
07cea65abb [X86][AVX2] Regenerate avx2 vector shift tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270756 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 21:00:40 +00:00
Rafael Espindola
6edb5180dd Fix shouldAssumeDSOLocal for private linkage.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270746 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 19:55:16 +00:00
Matt Arsenault
2997ae6e3e AMDGPU: Fix v2i64/v2f64 bitcasts
These operations tend to get promoted away to v4i32 so
this doesn't happen often.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270740 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 18:07:36 +00:00
Matt Arsenault
211d1cd5a3 AMDGPU: Fix missing br_cc i1 test coverage
Also un xfail a test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270739 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 17:58:27 +00:00
Chad Rosier
a922e4bd0a [SelectionDAG] Add smarts for BSWAP in computeKnownBits.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270738 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 17:52:38 +00:00
Matt Arsenault
53d233a178 AMDGPU: Make vectorization defeating test changes
Simplifies test updates in the future.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270736 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 17:42:39 +00:00
Matt Arsenault
068cdecac2 AMDGPU: Fix inconsistent lowering of select of vectors
f32 vectors would use a sequence of BFI instructions instead
of unrolled cmp + select. This was better in the case of a VALU
select with SGPR inputs, but we don't have a way of dealing with that
in the DAG.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270731 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 17:34:58 +00:00
Tim Shen
06c03e5705 Move and add comments to the top for tailcall-string-rvo.ll
Differential Revision: http://reviews.llvm.org/D20311

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270722 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 17:01:09 +00:00
Hal Finkel
637f75559d [SDAG] Add a fallback multiplication expansion
LegalizeIntegerTypes does not have a way to expand multiplications for large
integer types (i.e. larger than twice the native bit width). There's no
standard runtime call to use in that case, and so we'd just assert.

Unfortunately, as it turns out, it is possible to hit this case from
standard-ish C code in rare cases. A particular case a user ran into yesterday
involved an __int128 induction variable and a loop with a quadratic (not
linear) recurrence which triggered some backend logic using SCEVExpander. In
this case, the BinomialCoefficient code in SCEV generates some i129 variables,
which get widened to i256. At a high level, this is not actually good (i.e. the
underlying optimization, PPCLoopPreIncPrep, should not be transforming the loop
in question for performance reasons), but regardless, the backend shouldn't
crash because of cost-modeling issues in the optimizer.

This is a straightforward implementation of the multiplication expansion, based
on the algorithm in Hacker's Delight. I validated it against the code for the
mul256b function from http://locklessinc.com/articles/256bit_arithmetic/ using
random inputs. There should be no functional change for previously-working code
(the new expansion code only replaces an assert).

Fixes PR19797.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270720 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 16:50:22 +00:00
Sanjay Patel
efe6410a4b [x86, AVX] allow explicit calls to VZERO* to modify state in VZeroUpperInserter pass (PR27823)
As noted in the review, there are still problems, so this doesn't the bug completely.

Differential Revision: http://reviews.llvm.org/D20529



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270718 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 16:39:47 +00:00
Simon Pilgrim
b05388fe7e [X86][AVX] Sync with clang/test/CodeGen/avx2-builtins.c
Only tests for the gather intrinsic are still to be added

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270710 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 15:30:08 +00:00
Simon Pilgrim
2475758d0c [X86][AVX2] Added more fast-isel tests to match clang/test/CodeGen/avx2-builtins.c
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270685 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 10:56:23 +00:00
Simon Pilgrim
df706b0baf [X86][AVX2] Begun adding fast-isel tests to match clang/test/CodeGen/avx2-builtins.c
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270683 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 10:15:06 +00:00
Simon Pilgrim
5c780f78b4 [X86][SSE2] Use storeu intrinsics for _mm_storeu_pd/_mm_storeu_pd tests
Also fixed name of _mm_store1_pd test

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270681 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 09:42:29 +00:00
Simon Pilgrim
88c2d3172d [X86][SSE] Use storeu intrinsics for _mm_storeu_ps test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270680 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 09:28:06 +00:00
Simon Pilgrim
e3a40ed873 [X86][SSE] Replace (V)CVTDQ2PD(Y) and (V)CVTPS2PD(Y) lossless conversion intrinsics with generic IR
Followup to D20528 clang patch, this removes the (V)CVTDQ2PD(Y) and (V)CVTPS2PD(Y) llvm intrinsics and auto-upgrades to sitofp/fpext instead.

Differential Revision: http://reviews.llvm.org/D20568

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270678 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 08:59:18 +00:00
Craig Topper
c333e16d8d [X86] Remove the llvm.x86.sse2.storel.dq intrinsic. It hasn't been used in a long time.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270677 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 06:56:32 +00:00
Dan Gohman
04c5ee8513 [WebAssembly] Put __stack_pointer in the offset field of loads and stores.
Instead of this:

i32.const       $push10=, __stack_pointer
i32.load        $push11=, 0($pop10)

Emit this:

i32.const       $push10=, 0
i32.load        $push11=, __stack_pointer($pop10)

It's not currently clear which is better, though there's a chance the second
form may be better at overall compression. We can revisit this when we have
more data; for now it makes sense to make PEI consistent with isel.

Differential Revision: http://reviews.llvm.org/D20411


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270635 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-24 23:47:41 +00:00
Konstantin Zhuravlyov
d7b9b912dd [AMDGPU][NFC] Rename ReserveTrapVGPRs -> ReserveRegs
Differential Revision: http://reviews.llvm.org/D20081


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270594 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-24 18:37:18 +00:00
Than McIntosh
ff0cf25236 Rework/enhance stack coloring data flow analysis.
Replace bidirectional flow analysis to compute liveness with forward
analysis pass. Treat lifetimes as starting when there is a first
reference to the stack slot, as opposed to starting at the point of the
lifetime.start intrinsic, so as to increase the number of stack
variables we can overlap.

Reviewers: gbiv, qcolumbet, wmi
Differential Revision: http://reviews.llvm.org/D18827

Bug: 25776

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270559 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-24 13:23:44 +00:00
Simon Pilgrim
f36485f7ac [X86][SSE] Added vector sitofp/uitofp folded load tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270558 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-24 13:07:23 +00:00
Igor Breger
1e06c82edd [llvm][AVX512][intrinsics] Fix vperm{b|w|d|q|ps|pd} intrinsics. Index is second argument to buildin function but it is first instruction operand.
Differential Revision: http://reviews.llvm.org/D20515

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270548 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-24 11:06:22 +00:00
Simon Pilgrim
39599bdfbf [X86][SSE] Updated (V)CVTDQ2PD(Y) and (V)CVTPS2PD(Y) fast-isel codegen to match D20528
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270501 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 22:17:36 +00:00
Simon Pilgrim
6c01836442 [X86][SSE] Added cvtdq2pd/cvtps2pd generic IR tests
Added D20528 implementations as well as existing x86 intrinsics versions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270494 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 21:45:02 +00:00
Simon Pilgrim
e3a492d0d0 [X86][SSE] Use shuffle/sext instead of deprecated (+ auto-upgraded) pmovsxwd intrinsic call
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270489 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 21:21:38 +00:00
James Y Knight
f891cd3982 [SPARC] Fix 8 and 16-bit atomic load and store.
They were accidentally using the 32-bit load/store instruction for
8/16-bit operations, due to incorrect patterns

(8/16-bit cmpxchg and atomicrmw will be fixed in subsequent changes)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270486 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 20:33:00 +00:00
Diana Picus
bbf43bf006 [BPF] Remove exit-on-error flag in test (PR27766)
The exit-on-error flag on the many_args1.ll test is needed to avoid an
unreachable in BPFTargetLowering::LowerCall. We can also avoid it by ignoring
any superfluous arguments to the call (i.e. any arguments after the first 5).

Fixes PR27766.

Differential Revision: http://reviews.llvm.org/D20471

v2 of r270419

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270440 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 14:57:19 +00:00
Asaf Badouh
ab5f9266a7 [X86][RTM] _xabort() should not have "noreturn" attribute
Differential Revision: http://reviews.llvm.org/D20518

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270437 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 14:04:17 +00:00
Simon Pilgrim
f6a6e81b7e [X86][AVX] Added tests that access ymm registers before and after explicit vzeroupper/vzeroall calls
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270434 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 13:03:45 +00:00
Renato Golin
4bd3c7629d Reverts "[BPF] Remove exit-on-error flag in test (PR27766)"
This patch reverts r270419 because it broke a lot of buildbots,
mostly Windows. We'd like help in investigating the issues, but
for now, it should stay out.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270433 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 13:02:11 +00:00
Simon Pilgrim
21481f6c67 [X86][SSE] Regenerated scalar load folding tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270431 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 12:53:09 +00:00
Simon Pilgrim
481edf8ca6 [X86][SSE] Regenerated partial register update tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270430 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 12:49:37 +00:00
Simon Pilgrim
67270d4b29 [X86][SSE] Updated sse/avx cvtsi2sd tests to use non-constant value
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270425 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 12:41:51 +00:00
Simon Pilgrim
a6265aaca2 [X86][SSE2] Regenerated sse2 upgraded intrinsics tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270423 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 12:40:11 +00:00
Simon Pilgrim
55494e1f78 [X86][AVX] Regenerated avx upgraded intrinsics tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270422 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 12:39:06 +00:00
Diana Picus
a466b7ce58 [BPF] Remove exit-on-error flag in test (PR27766)
The exit-on-error flag on the many_args1.ll test is needed to avoid an
unreachable in BPFTargetLowering::LowerCall. We can also avoid it by ignoring
any superfluous arguments to the call (i.e. any arguments after the first 5).

Fixes PR27766

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270419 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 12:33:34 +00:00
Chris Dewhurst
69e68a5966 [Sparc][LEON] LEON Erratum fix. Insert NOP after LD or LDF instruction.
Due to an erratum in some versions of LEON, we must insert a NOP after any LD or LDF instruction to ensure the processor has time to load the value correctly before using it. This pass will implement that erratum fix.

The code will have no effect for other Sparc, but non-LEON processors.

Differential Review: http://reviews.llvm.org/D20353

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270417 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-23 10:56:36 +00:00
Craig Topper
23e51e1ea1 [AVX512] Add patterns to implement stores of extracts of least signficant subvectors using XMM or YMM stores instead of the vector extract instructions.
Similar is already done for AVX and we had lost it going to AVX512VL.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270383 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-22 23:44:33 +00:00
Simon Pilgrim
9a4c9f3b35 [X86][SSE] Added extra i8 extract element test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270379 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-22 20:35:42 +00:00
Sanjay Patel
51a995642a [x86, AVX] don't add a vzeroupper if that's what the code is already doing (PR27823)
This isn't the complete fix, but it handles the trivial examples of duplicate vzero* ops in PR27823:
https://llvm.org/bugs/show_bug.cgi?id=27823
...and amusingly, the bogus cases already exist as regression tests, so let's take this baby step.

We'll need to do more in the general case where there's legitimate AVX usage in the function + there's
already a vzero in the code.

Differential Revision: http://reviews.llvm.org/D20477



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270378 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-22 20:22:47 +00:00
Sanjay Patel
86d4c5562d [x86, AVX] add test file to show vzeroupper pass excesses
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270375 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-22 19:55:48 +00:00
Igor Breger
e88a780fc5 [AVX512] Implement missing patterns for any_extend load lowering.
Differential Revision: http://reviews.llvm.org/D20513

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270357 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-22 10:21:04 +00:00
Craig Topper
cdd08e2610 [AVX512] Add an AddedComplexity line to the 512-bit insert_subvector undef index 0 patterns. This gives them higher priority than the memory patterns. This matches AVX1/2.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270355 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-22 07:40:40 +00:00
Craig Topper
9c5f275934 [X86] Add a common check-prefix to both run lines on a test so identical checks appear just once.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270345 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-22 00:39:33 +00:00
Craig Topper
6a96e9fdad [AVX512] Add a couple patterns to fix some cases where two vector mask inversions could appear in a row.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270344 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-22 00:39:30 +00:00
Craig Topper
022094446e [AVX512] Add patterns for extracting subvectors and storing to memory.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270334 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-21 22:50:14 +00:00
Michael Zuckerman
e90b7d501e [Clang][AVX512][intrinsics] Fix rcp and sqrt intrinsics.
Differential Revision: http://reviews.llvm.org/D20438


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270322 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-21 14:44:18 +00:00
Michael Zuckerman
981df2f2ac [Clang][AVX512][intrinsics] Fix vscalef intrinsics.
Differential Revision: http://reviews.llvm.org/D20324


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270321 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-21 11:09:53 +00:00
Craig Topper
945c4ac1dc [AVX512] Add patterns for VEXTRACT v16i16->v8i16 and v32i8->v16i8. Disable AVX2 versions of vector extract when AVX512VL is enabled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270318 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-21 07:08:56 +00:00
Craig Topper
a798097945 [AVX512] Disable AVX2 VPERMD, VPERMQ, VPERMPS, and VPERMPD patterns when AVX512VL is enabled. Also add shuffle comment printing for AVX512VL VPERMPD/VPERMQ to keep some tests that now use these instructions instead of the AVX2 ones.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270317 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-21 06:07:18 +00:00