diff options
author | Richard Biener <rguenther@suse.de> | 2025-02-20 11:45:06 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2025-07-31 15:32:45 +0200 |
commit | 00726defcd8ece9791e052f2aa21262be02a4380 (patch) | |
tree | fb7c3d44787a0f9ce5a19999db4d1789c50b14a7 /gcc | |
parent | 7a06d389e2440e4854e5a178669281558468bafe (diff) | |
download | gcc-00726defcd8ece9791e052f2aa21262be02a4380.zip gcc-00726defcd8ece9791e052f2aa21262be02a4380.tar.gz gcc-00726defcd8ece9791e052f2aa21262be02a4380.tar.bz2 |
Extend gimple_fold_inplace API
The following allows to specify the valueization hook to be used.
* gimple-fold.h (fold_stmt_inplace): Add valueization hook
argument, defaulted to no_follow_ssa_edges.
* gimple-fold.cc (fold_stmt_inplace): Adjust.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-fold.cc | 4 | ||||
-rw-r--r-- | gcc/gimple-fold.h | 8 |
2 files changed, 6 insertions, 6 deletions
diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc index 49e3440..85319b3 100644 --- a/gcc/gimple-fold.cc +++ b/gcc/gimple-fold.cc @@ -6762,10 +6762,10 @@ fold_stmt (gimple_stmt_iterator *gsi, tree (*valueize) (tree), bitmap dce_bitmap which can produce *&x = 0. */ bool -fold_stmt_inplace (gimple_stmt_iterator *gsi) +fold_stmt_inplace (gimple_stmt_iterator *gsi, tree (*valueize) (tree)) { gimple *stmt = gsi_stmt (*gsi); - bool changed = fold_stmt_1 (gsi, true, no_follow_ssa_edges); + bool changed = fold_stmt_1 (gsi, true, valueize); gcc_assert (gsi_stmt (*gsi) == stmt); return changed; } diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h index e3cf1f6..b678502 100644 --- a/gcc/gimple-fold.h +++ b/gcc/gimple-fold.h @@ -28,9 +28,12 @@ struct c_strlen_data; extern bool get_range_strlen (tree, c_strlen_data *, unsigned eltsize); extern void gimplify_and_update_call_from_tree (gimple_stmt_iterator *, tree); extern bool update_gimple_call (gimple_stmt_iterator *, tree, int, ...); +extern tree no_follow_ssa_edges (tree); +extern tree follow_single_use_edges (tree); +extern tree follow_all_ssa_edges (tree); extern bool fold_stmt (gimple_stmt_iterator *, bitmap = nullptr); extern bool fold_stmt (gimple_stmt_iterator *, tree (*) (tree), bitmap = nullptr); -extern bool fold_stmt_inplace (gimple_stmt_iterator *); +extern bool fold_stmt_inplace (gimple_stmt_iterator *, tree (*) (tree) = no_follow_ssa_edges); extern tree maybe_fold_and_comparisons (tree, enum tree_code, tree, tree, enum tree_code, tree, tree, basic_block = nullptr); @@ -39,9 +42,6 @@ extern tree maybe_fold_or_comparisons (tree, enum tree_code, tree, tree, basic_block = nullptr); extern bool optimize_atomic_compare_exchange_p (gimple *); extern void fold_builtin_atomic_compare_exchange (gimple_stmt_iterator *); -extern tree no_follow_ssa_edges (tree); -extern tree follow_single_use_edges (tree); -extern tree follow_all_ssa_edges (tree); extern tree gimple_fold_stmt_to_constant_1 (gimple *, tree (*) (tree), tree (*) (tree) = no_follow_ssa_edges); extern tree gimple_fold_stmt_to_constant (gimple *, tree (*) (tree)); |