diff options
author | Richard Biener <rguenther@suse.de> | 2024-10-07 11:05:17 +0200 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2024-10-07 13:57:39 +0200 |
commit | 9b86efd5210101954bd187c3aa8bb909610a5746 (patch) | |
tree | 22bb0767cd1d4db3bef33b276451c25baeb69faf /gcc/tree-vectorizer.h | |
parent | 7faadb1f261c6b8ef988c400c39ec7df09839dbe (diff) | |
download | gcc-9b86efd5210101954bd187c3aa8bb909610a5746.zip gcc-9b86efd5210101954bd187c3aa8bb909610a5746.tar.gz gcc-9b86efd5210101954bd187c3aa8bb909610a5746.tar.bz2 |
tree-optimization/116982 - analyze scalar loop exit early
The following makes sure to discover the scalar loop IV exit during
analysis as failure to do so (if DCE and friends are disabled this
can happen due to if-conversion doing DCE and FRE on the if-converted
loop) would ICE later.
I refrained from larger refactoring to be able to eventually backport.
PR tree-optimization/116982
* tree-vectorizer.h (vect_analyze_loop): Pass in .LOOP_VECTORIZED
call.
(vect_analyze_loop_form): Likewise.
* tree-vect-loop.cc (vect_analyze_loop_form): Reject loops where we
cannot determine a IV exit for the scalar loop.
(vect_analyze_loop): Adjust.
* tree-vectorizer.cc (try_vectorize_loop_1): Likewise.
* tree-parloops.cc (gather_scalar_reductions): Likewise.
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 490061a..73bccb5 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -2460,7 +2460,8 @@ extern bool check_reduction_path (dump_user_location_t, loop_p, gphi *, tree, enum tree_code); extern bool needs_fold_left_reduction_p (tree, code_helper); /* Drive for loop analysis stage. */ -extern opt_loop_vec_info vect_analyze_loop (class loop *, vec_info_shared *); +extern opt_loop_vec_info vect_analyze_loop (class loop *, gimple *, + vec_info_shared *); extern tree vect_build_loop_niters (loop_vec_info, bool * = NULL); extern void vect_gen_vector_loop_niters (loop_vec_info, tree, tree *, tree *, bool); @@ -2495,7 +2496,8 @@ struct vect_loop_form_info gcond *inner_loop_cond; edge loop_exit; }; -extern opt_result vect_analyze_loop_form (class loop *, vect_loop_form_info *); +extern opt_result vect_analyze_loop_form (class loop *, gimple *, + vect_loop_form_info *); extern loop_vec_info vect_create_loop_vinfo (class loop *, vec_info_shared *, const vect_loop_form_info *, loop_vec_info = nullptr); |