The following addresses the corner case of an outer loop with an empty
header where we end up asking for the BB of a NULL stmt by
special-casing this case.

Bootstrap and regtest running on x86_64-unknown-linux-gnu, the patch
fixes observed ICEs on GCN.

        PR tree-optimization/115652
        * tree-vect-slp.cc (vect_schedule_slp_node): Handle the case
        where the outer loop header block is empty.
---
 gcc/tree-vect-slp.cc | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index 174b4800fa9..dd9017e5b3a 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -9750,8 +9750,15 @@ vect_schedule_slp_node (vec_info *vinfo,
              {
                gimple_stmt_iterator si2
                  = gsi_after_labels (LOOP_VINFO_LOOP (loop_vinfo)->header);
-               if (last_stmt != *si2
-                   && vect_stmt_dominates_stmt_p (last_stmt, *si2))
+               if ((gsi_end_p (si2)
+                    && (LOOP_VINFO_LOOP (loop_vinfo)->header
+                        != gimple_bb (last_stmt))
+                    && dominated_by_p (CDI_DOMINATORS,
+                                       LOOP_VINFO_LOOP (loop_vinfo)->header,
+                                       gimple_bb (last_stmt)))
+                   || (!gsi_end_p (si2)
+                       && last_stmt != *si2
+                       && vect_stmt_dominates_stmt_p (last_stmt, *si2)))
                  si = si2;
              }
        }
-- 
2.35.3

Reply via email to