This backport contains 1 patch from gcc main stream tree. The commit id of these patchs list as following in the order of time. 0001-re-PR-tree-optimization-92161-ICE-in-vect_get_vec_de.patch ae7f3143a3876378d051e64c8e68718f27c41075 diff -Nurp a/gcc/testsuite/gfortran.dg/pr92161.f b/gcc/testsuite/gfortran.dg/pr92161.f --- a/gcc/testsuite/gfortran.dg/pr92161.f 1970-01-01 08:00:00.000000000 +0800 +++ b/gcc/testsuite/gfortran.dg/pr92161.f 2020-08-17 10:18:05.996000000 +0800 @@ -0,0 +1,23 @@ +! { dg-do compile } +! { dg-options "-O1 -ftree-loop-vectorize -fno-signed-zeros -fno-trapping-math" } +! { dg-additional-options "-mvsx" { target { powerpc*-*-* } } } + COMPLEX FUNCTION R1 (ZR, CC, EA, U6) + + INTEGER ZR, U6, FZ, J2 + COMPLEX EA(*), CC + DOUBLE PRECISION OS, GA, YU, XT + + OS = DBLE(REAL(CC)) + GA = DBLE(AIMAG(CC)) + J2 = 1 + + DO 5 FZ = 1, ZR + YU = DBLE(REAL(EA(J2))) + XT = DBLE(AIMAG(EA(J2))) + OS = OS + (YU * 2) - (XT * 2) + GA = GA + (YU * 3) + (XT * 3) + J2 = J2 + U6 + 5 CONTINUE + R1 = CMPLX(REAL(OS), REAL(GA)) + RETURN + END diff -Nurp a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c --- a/gcc/tree-vect-loop.c 2020-08-17 10:17:08.288000000 +0800 +++ b/gcc/tree-vect-loop.c 2020-08-17 10:18:05.996000000 +0800 @@ -2339,6 +2339,17 @@ again: { stmt_vec_info stmt_info = loop_vinfo->lookup_stmt (gsi_stmt (si)); STMT_SLP_TYPE (stmt_info) = loop_vect; + if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def + || STMT_VINFO_DEF_TYPE (stmt_info) == vect_double_reduction_def) + { + /* vectorizable_reduction adjusts reduction stmt def-types, + restore them to that of the PHI. */ + STMT_VINFO_DEF_TYPE (STMT_VINFO_REDUC_DEF (stmt_info)) + = STMT_VINFO_DEF_TYPE (stmt_info); + STMT_VINFO_DEF_TYPE (vect_stmt_to_vectorize + (STMT_VINFO_REDUC_DEF (stmt_info))) + = STMT_VINFO_DEF_TYPE (stmt_info); + } } for (gimple_stmt_iterator si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))