summaryrefslogtreecommitdiff
path: root/gcc/ipa-reference.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-16 13:23:13 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-16 13:23:13 +0000
commit6d5ec6f8d3a4782393733d95b0d52a688568bdf5 (patch)
treeb4ca92d1770ab1befed804ce5ea55e6305e8bc39 /gcc/ipa-reference.c
parent5ed0b345190566f64eebc1af871f5282aaa0bd97 (diff)
downloadgcc-6d5ec6f8d3a4782393733d95b0d52a688568bdf5.tar.gz
2009-04-16 Richard Guenther <rguenther@suse.de>
* gimple.c (gimple_copy): Do not clear addresses_taken bitmap. (gimple_ior_addresses_taken_1): New function. (gimple_ior_addresses_taken): Likewise. * gimple.h (struct gimple_statement_with_ops_base): Remove addresses_taken member. (gimple_ior_addresses_taken): Declare. (gimple_addresses_taken, gimple_addresses_taken_ptr, gimple_set_addresses_taken): Remove. * ipa-reference.c (mark_address): New function. (scan_stmt_for_static_refs): Use it for marking addresses taken. * tree-ssa-operands.c (add_to_addressable_set): Rename to ... (mark_address_taken): ... this. Just set TREE_ADDRESSABLE. (gimple_add_to_addresses_taken): Remove. (get_tmr_operands): Call mark_address_taken. (get_asm_expr_operands): Likewise. (get_expr_operands): Likewise. (build_ssa_operands): Do not clear the addresses_taken bitmap. (free_stmt_operands): Do not free it. * tree-ssa.c (delete_tree_ssa): Likewise. (execute_update_addresses_taken): Use gimple_ior_addresses_taken. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146191 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa-reference.c')
-rw-r--r--gcc/ipa-reference.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c
index d2c20c08d16..6f5c751e05b 100644
--- a/gcc/ipa-reference.c
+++ b/gcc/ipa-reference.c
@@ -334,6 +334,18 @@ mark_address_taken (tree x)
bitmap_set_bit (module_statics_escape, DECL_UID (x));
}
+/* Wrapper around mark_address_taken for the stmt walker. */
+
+static bool
+mark_address (gimple stmt ATTRIBUTE_UNUSED, tree addr,
+ void *data ATTRIBUTE_UNUSED)
+{
+ while (handled_component_p (addr))
+ addr = TREE_OPERAND (addr, 0);
+ mark_address_taken (addr);
+ return false;
+}
+
/* Mark load of T. */
static bool
@@ -429,23 +441,18 @@ scan_stmt_for_static_refs (gimple_stmt_iterator *gsip,
{
gimple stmt = gsi_stmt (*gsip);
ipa_reference_local_vars_info_t local = NULL;
- unsigned int i;
- bitmap_iterator bi;
if (fn)
local = get_reference_vars_info (fn)->local;
/* Look for direct loads and stores. */
- walk_stmt_load_store_addr_ops (stmt, local, mark_load, mark_store, NULL);
+ walk_stmt_load_store_addr_ops (stmt, local, mark_load, mark_store,
+ mark_address);
if (is_gimple_call (stmt))
check_call (local, stmt);
else if (gimple_code (stmt) == GIMPLE_ASM)
check_asm_memory_clobber (local, stmt);
-
- if (gimple_addresses_taken (stmt))
- EXECUTE_IF_SET_IN_BITMAP (gimple_addresses_taken (stmt), 0, i, bi)
- mark_address_taken (referenced_var_lookup (i));
return NULL;
}