aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-pr97746.c20
-rw-r--r--gcc/tree-vect-patterns.c8
2 files changed, 24 insertions, 4 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr97746.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr97746.c
new file mode 100644
index 0000000..c5a615d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr97746.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+
+int a, b;
+short c;
+
+extern void f (short*);
+
+void d()
+{
+ short e[2] = {0, 0};
+ while (a)
+ {
+ f(e);
+ int g = 0 || a, h = 8 && c;
+ short i = c;
+ c = h & g;
+ if (b)
+ b = g || i;
+ }
+}
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index eefa7cf..f68a87e 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -5182,15 +5182,15 @@ vect_determine_precisions (vec_info *vinfo)
for (unsigned i = 0; i < bb_vinfo->bbs.length (); ++i)
{
basic_block bb = bb_vinfo->bbs[i];
- for (auto gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+ for (auto gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
{
- stmt_vec_info stmt_info = vinfo->lookup_stmt (gsi_stmt (gsi));
+ stmt_vec_info stmt_info = vinfo->lookup_stmt (gsi.phi ());
if (stmt_info && STMT_VINFO_VECTORIZABLE (stmt_info))
vect_determine_mask_precision (vinfo, stmt_info);
}
- for (auto gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+ for (auto gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
{
- stmt_vec_info stmt_info = vinfo->lookup_stmt (gsi.phi ());
+ stmt_vec_info stmt_info = vinfo->lookup_stmt (gsi_stmt (gsi));
if (stmt_info && STMT_VINFO_VECTORIZABLE (stmt_info))
vect_determine_mask_precision (vinfo, stmt_info);
}