aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/20181025-1.f28
-rw-r--r--gcc/tree-vectorizer.h44
4 files changed, 53 insertions, 32 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fadba61..ea92a42 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-10-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/87665
+ PR tree-optimization/87745
+ * tree-vectorizer.h (get_earlier_stmt): Remove.
+ (get_later_stmt): Pick up UID from the original non-pattern stmt.
+
2018-10-25 Sam Tebbs <sam.tebbs@arm.com>
* options.texi (Deprecated): Move list to Var section.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 94496cd..6a50e92 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2018-10-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/87665
+ PR tree-optimization/87745
+ * gfortran.dg/20181025-1.f: New testcase.
+
2018-10-25 Jakub Jelinek <jakub@redhat.com>
PR fortran/87725
diff --git a/gcc/testsuite/gfortran.dg/20181025-1.f b/gcc/testsuite/gfortran.dg/20181025-1.f
new file mode 100644
index 0000000..1acbd72
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/20181025-1.f
@@ -0,0 +1,28 @@
+! { dg-do compile }
+! { dg-options "-Ofast" }
+! { dg-additional-options "-mavx2" { target { x86_64-*-* i?86-*-* } } }
+ SUBROUTINE FOO(EF3,CA,ZA,NATA,IC4,NFRGPT)
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ PARAMETER (MXATM=500)
+ COMMON DE(3,MXATM)
+ DIMENSION CA(3,NATA)
+ DIMENSION ZA(NATA)
+ DIMENSION EF3(3,NFRGPT)
+ DO II = 1,NATA
+ XII = XJ - CA(1,II)
+ YII = YJ - CA(2,II)
+ ZII = ZJ - CA(3,II)
+ RJII = SQRT(XII*XII + YII*YII + ZII*ZII)
+ R3 = RJII*RJII*RJII
+ IF (IC4.EQ.0) THEN
+ DE(1,II) = DE(1,II) - S2*ZA(II)*XII/R3
+ DE(2,II) = DE(2,II) - S2*ZA(II)*YII/R3
+ DE(3,II) = DE(3,II) - S2*ZA(II)*ZII/R3
+ ELSE
+ EF3(1,IC4+II) = EF3(1,IC4+II) - S2*ZA(II)*XII/R3
+ EF3(2,IC4+II) = EF3(2,IC4+II) - S2*ZA(II)*YII/R3
+ EF3(3,IC4+II) = EF3(3,IC4+II) - S2*ZA(II)*ZII/R3
+ END IF
+ END DO
+ RETURN
+ END
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index 9884568..08d696a 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -1085,38 +1085,6 @@ nested_in_vect_loop_p (struct loop *loop, stmt_vec_info stmt_info)
&& (loop->inner == (gimple_bb (stmt_info->stmt))->loop_father));
}
-/* Return the earlier statement between STMT1_INFO and STMT2_INFO. */
-
-static inline stmt_vec_info
-get_earlier_stmt (stmt_vec_info stmt1_info, stmt_vec_info stmt2_info)
-{
- gcc_checking_assert ((STMT_VINFO_IN_PATTERN_P (stmt1_info)
- || !STMT_VINFO_RELATED_STMT (stmt1_info))
- && (STMT_VINFO_IN_PATTERN_P (stmt2_info)
- || !STMT_VINFO_RELATED_STMT (stmt2_info)));
-
- if (gimple_uid (stmt1_info->stmt) < gimple_uid (stmt2_info->stmt))
- return stmt1_info;
- else
- return stmt2_info;
-}
-
-/* Return the later statement between STMT1_INFO and STMT2_INFO. */
-
-static inline stmt_vec_info
-get_later_stmt (stmt_vec_info stmt1_info, stmt_vec_info stmt2_info)
-{
- gcc_checking_assert ((STMT_VINFO_IN_PATTERN_P (stmt1_info)
- || !STMT_VINFO_RELATED_STMT (stmt1_info))
- && (STMT_VINFO_IN_PATTERN_P (stmt2_info)
- || !STMT_VINFO_RELATED_STMT (stmt2_info)));
-
- if (gimple_uid (stmt1_info->stmt) > gimple_uid (stmt2_info->stmt))
- return stmt1_info;
- else
- return stmt2_info;
-}
-
/* Return TRUE if a statement represented by STMT_INFO is a part of a
pattern. */
@@ -1137,6 +1105,18 @@ vect_orig_stmt (stmt_vec_info stmt_info)
return stmt_info;
}
+/* Return the later statement between STMT1_INFO and STMT2_INFO. */
+
+static inline stmt_vec_info
+get_later_stmt (stmt_vec_info stmt1_info, stmt_vec_info stmt2_info)
+{
+ if (gimple_uid (vect_orig_stmt (stmt1_info)->stmt)
+ > gimple_uid (vect_orig_stmt (stmt2_info)->stmt))
+ return stmt1_info;
+ else
+ return stmt2_info;
+}
+
/* If STMT_INFO has been replaced by a pattern statement, return the
replacement statement, otherwise return STMT_INFO itself. */