[gcc r15-9779] tree-optimization/119960 - fix and guard get_later_stmt
Richard Biener
rguenth@gcc.gnu.org
Fri Jun 6 09:06:53 GMT 2025
https://gcc.gnu.org/g:6bb316973249d460f4dae2c33a0aa5bc2928ef30
commit r15-9779-g6bb316973249d460f4dae2c33a0aa5bc2928ef30
Author: Richard Biener <rguenther@suse.de>
Date: Tue Apr 29 14:52:27 2025 +0200
tree-optimization/119960 - fix and guard get_later_stmt
The following makes get_later_stmt handle stmts from different
basic-blocks in the case they are orderd and otherwise asserts.
* tree-vectorizer.h (get_later_stmt): Robustify against
stmts in different BBs, assert when they are unordered.
(cherry picked from commit a6cfde60d8c744b31b147022e797bbcc371ae092)
Diff:
---
gcc/tree-vectorizer.h | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index 01d19c776561..94cbfde6c9a7 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -1870,11 +1870,25 @@ vect_orig_stmt (stmt_vec_info stmt_info)
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))
+ gimple *stmt1 = vect_orig_stmt (stmt1_info)->stmt;
+ gimple *stmt2 = vect_orig_stmt (stmt2_info)->stmt;
+ if (gimple_bb (stmt1) == gimple_bb (stmt2))
+ {
+ if (gimple_uid (stmt1) > gimple_uid (stmt2))
+ return stmt1_info;
+ else
+ return stmt2_info;
+ }
+ /* ??? We should be really calling this function only with stmts
+ in the same BB but we can recover if there's a domination
+ relationship between them. */
+ else if (dominated_by_p (CDI_DOMINATORS,
+ gimple_bb (stmt1), gimple_bb (stmt2)))
return stmt1_info;
- else
+ else if (dominated_by_p (CDI_DOMINATORS,
+ gimple_bb (stmt2), gimple_bb (stmt1)))
return stmt2_info;
+ gcc_unreachable ();
}
/* If STMT_INFO has been replaced by a pattern statement, return the
More information about the Gcc-cvs
mailing list