https://gcc.gnu.org/g:5358d5891fac4ebe63ba7f4a684a6be6f889300b
commit r17-4928-g5358d5891fac4ebe63ba7f4a684a6be6f889300b Author: Eric Botcazou <[email protected]> Date: Tue Oct 6 13:01:33 2026 +0200 Small cleanup in update_addresses_taken pass The main part is to move, privatize and rename gimple_ior_addresses_taken & gimple_ior_addresses_taken_1 from gimple.cc. This in turn makes it possible to call the latter for the processing of PHI nodes instead of duplicating the internal logic. gcc/ * gimple.h (gimple_ior_addresses_taken): Delete. * gimple.cc (gimple_ior_addresses_taken_1): Move to... (gimple_ior_addresses_taken): Move to... * tree-ssa.cc (gimple_ior_addresses_taken_1): ...here and rename into set_addresses_taken_1. (gimple_ior_addresses_taken): ...here, swap the parameters and rename into set_addresses_taken. (execute_update_addresses_taken): Adjust to above changes and call set_addresses_taken_1 for the processing of PHI nodes. Diff: --- gcc/gimple.cc | 28 ---------------------------- gcc/gimple.h | 1 - gcc/tree-ssa.cc | 43 ++++++++++++++++++++++++++++++++++--------- 3 files changed, 34 insertions(+), 38 deletions(-) diff --git a/gcc/gimple.cc b/gcc/gimple.cc index 04ad17f59556..3b68902b6109 100644 --- a/gcc/gimple.cc +++ b/gcc/gimple.cc @@ -2915,34 +2915,6 @@ gimple_get_alias_set (tree t) } -/* Helper for gimple_ior_addresses_taken_1. */ - -static bool -gimple_ior_addresses_taken_1 (gimple *, tree addr, tree, void *data) -{ - bitmap addresses_taken = (bitmap)data; - addr = get_base_address (addr); - if (addr - && DECL_P (addr)) - { - bitmap_set_bit (addresses_taken, DECL_UID (addr)); - return true; - } - return false; -} - -/* Set the bit for the uid of all decls that have their address taken - in STMT in the ADDRESSES_TAKEN bitmap. Returns true if there - were any in this stmt. */ - -bool -gimple_ior_addresses_taken (bitmap addresses_taken, gimple *stmt) -{ - return walk_stmt_load_store_addr_ops (stmt, addresses_taken, NULL, NULL, - gimple_ior_addresses_taken_1); -} - - /* Return true when STMTs arguments and return value match those of FNDECL, a decl of a builtin function. */ diff --git a/gcc/gimple.h b/gcc/gimple.h index 82045c44bbeb..0245e5e0934b 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -1660,7 +1660,6 @@ extern bool gimple_compare_field_offset (tree, tree); extern tree gimple_unsigned_type (tree); extern tree gimple_signed_type (tree); extern alias_set_type gimple_get_alias_set (tree); -extern bool gimple_ior_addresses_taken (bitmap, gimple *); extern bool gimple_builtin_call_types_compatible_p (const gimple *, tree); extern combined_fn gimple_call_combined_fn (const gimple *); extern bool gimple_call_operator_delete_p (const gcall *); diff --git a/gcc/tree-ssa.cc b/gcc/tree-ssa.cc index 4f94edb2f4b5..436c88d47d5c 100644 --- a/gcc/tree-ssa.cc +++ b/gcc/tree-ssa.cc @@ -1882,6 +1882,33 @@ is_asan_mark_p (gimple *stmt) return false; } +/* Helper for set_addresses_taken. If the base of ADDR is a DECL, + set the bit for its uid in the bitmap passed as DATA and return + true; otherwise return false. */ + +static bool +set_addresses_taken_1 (gimple *, tree addr, tree, void *data) +{ + bitmap addresses_taken = (bitmap)data; + addr = get_base_address (addr); + if (addr && DECL_P (addr)) + { + bitmap_set_bit (addresses_taken, DECL_UID (addr)); + return true; + } + return false; +} + +/* Set the bit for the uid of all DECLs that have their address taken in + STMT in the ADDRESSES_TAKEN bitmap. Return true if there are any. */ + +static bool +set_addresses_taken (gimple *stmt, bitmap addresses_taken) +{ + return walk_stmt_load_store_addr_ops (stmt, addresses_taken, NULL, NULL, + set_addresses_taken_1); +} + /* Compute TREE_ADDRESSABLE and whether we have unhandled partial defs for local variables. */ @@ -1919,7 +1946,7 @@ execute_update_addresses_taken (void) ATOMIC_COMPARE_EXCHANGE call. */ tree arg = gimple_call_arg (stmt, 1); gimple_call_set_arg (stmt, 1, null_pointer_node); - gimple_ior_addresses_taken (addresses_taken, stmt); + set_addresses_taken (stmt, addresses_taken); gimple_call_set_arg (stmt, 1, arg); /* Remember we have to check again below. */ optimistic_not_addressable = true; @@ -1928,11 +1955,11 @@ execute_update_addresses_taken (void) || gimple_call_internal_p (stmt, IFN_GOMP_SIMT_ENTER)) ; else - gimple_ior_addresses_taken (addresses_taken, stmt); + set_addresses_taken (stmt, addresses_taken); } else /* Note all addresses taken by the stmt. */ - gimple_ior_addresses_taken (addresses_taken, stmt); + set_addresses_taken (stmt, addresses_taken); /* If we have a call or an assignment, see if the lhs contains a local decl that requires not to be a gimple register. */ @@ -1999,16 +2026,14 @@ execute_update_addresses_taken (void) for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { - size_t i; gphi *phi = gsi.phi (); for (i = 0; i < gimple_phi_num_args (phi); i++) { - tree op = PHI_ARG_DEF (phi, i), var; - if (TREE_CODE (op) == ADDR_EXPR - && (var = get_base_address (TREE_OPERAND (op, 0))) != NULL - && DECL_P (var)) - bitmap_set_bit (addresses_taken, DECL_UID (var)); + tree op = PHI_ARG_DEF (phi, i); + if (TREE_CODE (op) == ADDR_EXPR) + set_addresses_taken_1 (phi, TREE_OPERAND (op, 0), op, + (void *)addresses_taken); } } }
