diff options
author | Kirill Yukhin <kirill.yukhin@intel.com> | 2015-12-07 11:12:41 +0000 |
---|---|---|
committer | Kirill Yukhin <kyukhin@gcc.gnu.org> | 2015-12-07 11:12:41 +0000 |
commit | 09d4cbcde094daa49bd7df8dcf22aa051c18a6ba (patch) | |
tree | ae59d6bf4d0192d8963a26dcb915713c47704257 | |
parent | 7604791b48d9a75d6d119cb827da12155ab9a383 (diff) | |
download | gcc-09d4cbcde094daa49bd7df8dcf22aa051c18a6ba.zip gcc-09d4cbcde094daa49bd7df8dcf22aa051c18a6ba.tar.gz gcc-09d4cbcde094daa49bd7df8dcf22aa051c18a6ba.tar.bz2 |
re PR target/68627 ([i386, AVX-512] Illegal insn generated while compiling spec2k6/437.leslie3d for KNL)
PR target/68627
gcc/
* config/i386/sse.md: Make 'v' alternative work on 'avx512f' ISA only.
Force destination to 512 bits register.
gcc/testsuite/
* gfortran.dg/pr68627.f: New test.
From-SVN: r231361
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/sse.md | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr68627.f | 18 |
4 files changed, 34 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2c7c823..4d38d48 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2015-12-07 Kirill Yukhin <kirill.yukhin@intel.com> + PR target/68627 + * config/i386/sse.md: Make 'v' alternative work on 'avx512f' ISA only. + Force destination to 512 bits register. + +2015-12-07 Kirill Yukhin <kirill.yukhin@intel.com> + PR target/68633 * config/i386/sse.md (define_insn "kunpckhi"): Fix operands order. (define_insn "kunpcksi"): Ditto. diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index beddf40..eb49c41 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -17385,20 +17385,21 @@ (set_attr "mode" "<sseinsnmode>")]) (define_insn "vec_dup<mode>" - [(set (match_operand:AVX_VEC_DUP_MODE 0 "register_operand" "=x,x,v,x") + [(set (match_operand:AVX_VEC_DUP_MODE 0 "register_operand" "=x,x,x,v,x") (vec_duplicate:AVX_VEC_DUP_MODE - (match_operand:<ssescalarmode> 1 "nonimmediate_operand" "m,m,v,?x")))] + (match_operand:<ssescalarmode> 1 "nonimmediate_operand" "m,m,x,v,?x")))] "TARGET_AVX" "@ v<sseintprefix>broadcast<bcstscalarsuff>\t{%1, %0|%0, %1} vbroadcast<ssescalarmodesuffix>\t{%1, %0|%0, %1} v<sseintprefix>broadcast<bcstscalarsuff>\t{%x1, %0|%0, %x1} + v<sseintprefix>broadcast<bcstscalarsuff>\t{%x1, %g0|%g0, %x1} #" [(set_attr "type" "ssemov") (set_attr "prefix_extra" "1") (set_attr "prefix" "maybe_evex") - (set_attr "isa" "avx2,noavx2,avx2,noavx2") - (set_attr "mode" "<sseinsnmode>,V8SF,<sseinsnmode>,V8SF")]) + (set_attr "isa" "avx2,noavx2,avx2,avx512f,noavx2") + (set_attr "mode" "<sseinsnmode>,V8SF,<sseinsnmode>,<sseinsnmode>,V8SF")]) (define_split [(set (match_operand:AVX2_VEC_DUP_MODE 0 "register_operand") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 583baa9..188ed2b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2015-12-07 Kirill Yukhin <kirill.yukhin@intel.com> + PR target/68627 + * gfortran.dg/pr68627.f: New test. + +2015-12-07 Kirill Yukhin <kirill.yukhin@intel.com> + PR target/68633 * gcc.target/i386/pr68633.c: New test. diff --git a/gcc/testsuite/gfortran.dg/pr68627.f b/gcc/testsuite/gfortran.dg/pr68627.f new file mode 100644 index 0000000..32ff4a7 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr68627.f @@ -0,0 +1,18 @@ +! { dg-do compile { target lp64 } } + +! { dg-options "-Ofast -mavx512f -ffixed-xmm1 -ffixed-xmm2 -ffixed-xmm3 -ffixed-xmm4 -ffixed-xmm5 -ffixed-xmm6 -ffixed-xmm7 -ffixed-xmm8 -ffixed-xmm9 -ffixed-xmm10 -ffixed-xmm11 -ffixed-xmm12 -ffixed-xmm13 -ffixed-xmm14 -ffixed-xmm15" } + + IMPLICIT REAL*8(A-H,O-Z) + ALLOCATABLE DD1(:), DD2(:), WY(:,:) + ALLOCATE( DD1(MAX), DD2(MAX), WY(MAX,MAX)) + DO J = J1,J2 + DO I = I1, I2 + DD1(I) = D1 * (WY(I-2,J) - WY(I+2,J) + + > (WY(I+1,J) - WY(I-1,J))) + END DO + DO I = I1, INT(D2 * D3(I)) + END DO + END DO + END + +! { dg-final { scan-assembler-not "vbroadcastsd\[ \\t\]+%xmm\[0-9\]+, %ymm\[0-9\]+" } } |