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.
* gfortran.dg/
20181025-1.f: New testcase.
From-SVN: r265481
+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.
+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
--- /dev/null
+! { 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
&& (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. */
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. */