Craig Topper
c849172105
[AVX-512] Add support for pushing bitcasts through INSERT_SUBVEC in order to select a masked operation.
...
llvm-svn: 290865
2017-01-03 05:46:02 +00:00
Craig Topper
0cda8bbf74
[AVX-512] Remove vinsert intrinsics and autoupgrade to native shufflevectors. There are some codegen problems here that I'll try to fix in future commits.
...
llvm-svn: 290864
2017-01-03 05:45:57 +00:00
Craig Topper
4d47c6ae57
[AVX-512] Remove vextract intrinsics and autoupgrade to native shufflevectors. This unfortunately generates some really terrible code without VLX support due to v2i1 and v4i1 not being legal.
...
Hopefully we can improve that in future patches.
llvm-svn: 290863
2017-01-03 05:45:46 +00:00
Gadi Haber
19c4fc5e62
This is a large patch for X86 AVX-512 of an optimization for reducing code size by encoding EVEX AVX-512 instructions using the shorter VEX encoding when possible.
...
There are cases of AVX-512 instructions that have two possible encodings. This is the case with instructions that use vector registers with low indexes of 0 - 15 and do not use the zmm registers or the mask k registers.
The EVEX encoding prefix requires 4 bytes whereas the VEX prefix can take only up to 3 bytes. Consequently, using the VEX encoding for these instructions results in a code size reduction of ~2 bytes even though it is compiled with the AVX-512 features enabled.
Reviewers: Craig Topper, Zvi Rackoover, Elena Demikhovsky
Differential Revision: https://reviews.llvm.org/D27901
llvm-svn: 290663
2016-12-28 10:12:48 +00:00
Craig Topper
abe7c5b5e9
[AVX-512] Remove 128/256 masked vpermil instrinsics and autoupgrade to a select around the unmasked avx1 intrinsics.
...
llvm-svn: 289340
2016-12-10 21:15:52 +00:00
Craig Topper
f57e17def0
[AVX-512] Remove intrinsics for valignd/q and autoupgrade them to native shuffles.
...
llvm-svn: 287744
2016-11-23 06:54:55 +00:00
Simon Pilgrim
b57dd17142
[X86][AVX512] Autoupgrade lossless i32/u32 to f64 conversion intrinsics with generic IR
...
Both the (V)CVTDQ2PD (i32 to f64) and (V)CVTUDQ2PD (u32 to f64) conversion instructions are lossless and can be safely represented as generic SINT_TO_FP/UINT_TO_FP calls instead of x86 intrinsics without affecting final codegen.
LLVM counterpart to D26686
Differential Revision: https://reviews.llvm.org/D26736
llvm-svn: 287108
2016-11-16 14:48:32 +00:00
Craig Topper
353e59b6d6
[AVX-512] Remove and autoupgrade masked dword/qword variable shift intrinsics to the new unmasked versions and selects.
...
llvm-svn: 286786
2016-11-14 01:53:22 +00:00
Craig Topper
da6a63db1c
[AVX-512] Remove the remaining masked shift by immediate or by single value. Autoupgrade them to recently introduced unmasked versions and a select.
...
After this I'll add the unmasked intrinsics to InstCombineCalls to finish making our handling of these types of shuffles consistent between AVX-512 and the legacy intrinsics.
llvm-svn: 286725
2016-11-12 18:04:46 +00:00
Craig Topper
b110e04851
[AVX-512] Remove masked pmovzx/pmovsx builtins and autoupgrade them to selects and native zext/sext.
...
This mostly reuses earlier autoupgrade support for the sse and avx equivalents. Just needed to add the code to add the select.
llvm-svn: 286092
2016-11-07 02:12:57 +00:00
Craig Topper
46de41330c
[AVX-512] Remove intrinsics for 128/256-bit masked variable shift. Instead upgrade them to a select and the older AVX2 intrinsic.
...
llvm-svn: 286073
2016-11-06 16:29:19 +00:00
Craig Topper
af9b3fe752
[AVX-512] Remove intrinsics for 128/256-bit masked shift by immediate. Instead upgrade them to a select and the older SSE/AVX2 intrinsic.
...
llvm-svn: 286072
2016-11-06 16:29:14 +00:00
Craig Topper
c9467ed31e
[AVX-512] Remove intrinsics for 128/256-bit masked shift by single element in xmm. Instead upgrade them to a select and the older SSE/AVX2 intrinsic.
...
llvm-svn: 286070
2016-11-06 16:29:08 +00:00
Craig Topper
8ec5c7326d
[AVX-512] Remove masked pmin/pmax intrinsics and autoupgrade to native IR.
...
Clang patch to replace 512-bit vector and 64-bit element versions with native IR will follow.
llvm-svn: 284955
2016-10-24 04:04:16 +00:00
Craig Topper
4619c9e6a8
[X86] Remove masked shufpd/shufps intrinsics and autoupgrade to native vector shuffles. They were removed from clang previously but accidentally left in the backend.
...
llvm-svn: 281300
2016-09-13 07:40:53 +00:00
Craig Topper
4177345d7f
[AVX-512] Remove 128-bit and 256-bit masked floating point add/sub/mul/div intrinsics and upgrade to native IR.
...
llvm-svn: 280633
2016-09-04 18:13:33 +00:00
Craig Topper
af0d63d2e7
[AVX-512] Remove masked integer add/sub/mull intrinsics and upgrade to native IR.
...
llvm-svn: 280611
2016-09-04 02:09:53 +00:00
Elena Demikhovsky
dca03bebd3
AVX-512: Changed lowering of BITCAST between i1 vectors and i8/i16/i32 integer values
...
Optimized lowering of BITCAST node. The BITCAST node can be replaced with COPY_TO_REG instead of KMOV.
It allows to suppress two opposite BITCAST operations and avoid redundant "movs".
Differential Revision: https://reviews.llvm.org/D23247
llvm-svn: 277958
2016-08-07 13:05:58 +00:00
Craig Topper
4c53e60360
[AVX512] Add VLX packed move instructions to the execution dependency fix pass and update tests.
...
llvm-svn: 277304
2016-07-31 20:20:01 +00:00
Craig Topper
00d34ed64f
[AVX-512] Don't let ExeDependencyFix pass convert VPANDD/Q to VPANDPS/PD unless DQI instructions are supported. Same for ANDN, OR, and XOR.
...
Thanks to Igor Breger for pointing out my mistake.
llvm-svn: 277292
2016-07-31 17:15:07 +00:00
Craig Topper
f4151bea72
[AVX512] Add initial support for the Execution Domain fixing pass to change some EVEX instructions.
...
llvm-svn: 276393
2016-07-22 05:00:52 +00:00
Craig Topper
5c913e84df
[AVX512] Use VMOVAPSZ128rr/VMOVAPS256rr for VR128X/VR256X physreg moves when VLX is supported.
...
Ideally we would use VEX encoded moves instead of EVEX if the high 16 registers aren't referenced, but this a good first step.
llvm-svn: 275763
2016-07-18 06:14:34 +00:00
Craig Topper
a6e6febe2c
[AVX512] Remove masked logic op intrinsics and autoupgrade them to native IR.
...
llvm-svn: 275155
2016-07-12 05:27:53 +00:00
Matthias Braun
152e7c8b12
VirtRegMap: Replace some identity copies with KILL instructions.
...
An identity COPY like this:
%AL = COPY %AL, %EAX<imp-def>
has no semantic effect, but encodes liveness information: Further users
of %EAX only depend on this instruction even though it does not define
the full register.
Replace the COPY with a KILL instruction in those cases to maintain this
liveness information. (This reverts a small part of r238588 but this
time adds a comment explaining why a KILL instruction is useful).
llvm-svn: 274952
2016-07-09 00:19:07 +00:00
Craig Topper
d5d2a35013
[AVX512] Zero extend the result of vpcmpeq/vpcmpgt and similar intrinsics in the autoupgrade code. This currently results in worse codegen but is needed for correctness.
...
llvm-svn: 274736
2016-07-07 06:11:07 +00:00
Simon Pilgrim
4e96fbf3c1
[X86][AVX512] Autoupgrade the BROADCAST intrinsics
...
llvm-svn: 274550
2016-07-05 13:58:47 +00:00
Simon Pilgrim
02d435d2f4
[X86][AVX512] Autoupgrade the VPERMPD/VPERMQ intrinsics
...
llvm-svn: 274506
2016-07-04 14:19:05 +00:00
Simon Pilgrim
9fca300cbe
[X86][AVX512] Autoupgrade the VPERMILPD/VPERMILPS intrinsics
...
llvm-svn: 274498
2016-07-04 12:40:54 +00:00
Simon Pilgrim
dbd6db0dc7
[X86][AVX512] Add support for VPALIGNR/PSHUFD/PSHUFHW/PSHUFLW masked shuffle comments
...
llvm-svn: 274466
2016-07-03 15:00:51 +00:00
Simon Pilgrim
598bdb6bfe
[X86][AVX512] Add support for UNPCK masked shuffle comments
...
llvm-svn: 274464
2016-07-03 14:26:21 +00:00
Simon Pilgrim
7c2fbdc101
[X86][AVX512] Add support for masked shuffle comments
...
This patch adds support for including the avx512 mask register information in the mask/maskz versions of shuffle instruction comments.
This initial version just adds support for MOVDDUP/MOVSHDUP/MOVSLDUP to reduce the mass of test regenerations, other shuffle instructions can be added in due course.
Differential Revision: http://reviews.llvm.org/D21953
llvm-svn: 274459
2016-07-03 13:08:29 +00:00
Simon Pilgrim
19adee9d84
[X86][AVX512] Autoupgrade the MOVDDUP/MOVSLDUP/MOVSHDUP intrinsics
...
llvm-svn: 274439
2016-07-02 14:42:35 +00:00
Craig Topper
597aa42fec
[AVX512] Remove masked unpack intrinsics and autoupgrade to vectorshuffle and selects.
...
llvm-svn: 273543
2016-06-23 07:37:33 +00:00
Craig Topper
0a0fb0fda1
[AVX512] Remove the masked vpcmpeq/vcmpgt intrinsics and autoupgrade them to native icmps.
...
llvm-svn: 273240
2016-06-21 03:53:24 +00:00
Craig Topper
13cf7cac07
[AVX512] Remove maksed pshufd, pshuflw, and phufhw intrinsics and autoupgrade them to selects and shufflevector.
...
llvm-svn: 272527
2016-06-13 02:36:48 +00:00
Craig Topper
f10fbfa738
[AVX512] Remove masked load intrinsics. Clang now emits generic masked load intrinsics instead.
...
The intrinsics will be autoupgraded to the same generic masked loads.
llvm-svn: 271478
2016-06-02 04:19:36 +00:00
Craig Topper
50f85c22c5
[AVX512] Remove masked store intrinsics. Clang now emits generic masked store intrinsics instead.
...
The intrinsics will be autoupgraded to the same generic masked stores.
llvm-svn: 271245
2016-05-31 01:50:02 +00:00