aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Yukhin <kirill.yukhin@intel.com>2015-12-07 11:12:41 +0000
committerKirill Yukhin <kyukhin@gcc.gnu.org>2015-12-07 11:12:41 +0000
commit09d4cbcde094daa49bd7df8dcf22aa051c18a6ba (patch)
treeae59d6bf4d0192d8963a26dcb915713c47704257
parent7604791b48d9a75d6d119cb827da12155ab9a383 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/i386/sse.md9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr68627.f18
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\]+" } }