- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
- {
- gimple stmt = gsi_stmt (gsi);
- tree decl;
-
- if (is_gimple_call (stmt) && (decl = gimple_call_fndecl (stmt)))
- {
- size_t i;
- size_t n = gimple_call_num_args (stmt);
- cgraph_create_edge (node, cgraph_node (decl), stmt,
- bb->count, compute_call_stmt_bb_frequency (bb),
- bb->loop_depth);
- for (i = 0; i < n; i++)
- walk_tree (gimple_call_arg_ptr (stmt, i), record_reference,
- node, visited_nodes);
- if (gimple_call_lhs (stmt))
- walk_tree (gimple_call_lhs_ptr (stmt), record_reference, node,
- visited_nodes);
- }
- else
- {
- struct walk_stmt_info wi;
- memset (&wi, 0, sizeof (wi));
- wi.info = node;
- wi.pset = visited_nodes;
- walk_gimple_op (stmt, record_reference, &wi);
- if (gimple_code (stmt) == GIMPLE_OMP_PARALLEL
- && gimple_omp_parallel_child_fn (stmt))
- {
- tree fn = gimple_omp_parallel_child_fn (stmt);
- cgraph_mark_needed_node (cgraph_node (fn));
- }
- if (gimple_code (stmt) == GIMPLE_OMP_TASK)
- {
- tree fn = gimple_omp_task_child_fn (stmt);
- if (fn)
- cgraph_mark_needed_node (cgraph_node (fn));
- fn = gimple_omp_task_copy_fn (stmt);
- if (fn)
- cgraph_mark_needed_node (cgraph_node (fn));
- }
- }
- }
+ {
+ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+ {
+ gimple stmt = gsi_stmt (gsi);
+ tree decl;
+
+ if (is_gimple_call (stmt))
+ {
+ int freq = compute_call_stmt_bb_frequency (current_function_decl,
+ bb);
+ decl = gimple_call_fndecl (stmt);
+ if (decl)
+ cgraph_create_edge (node, cgraph_get_create_node (decl),
+ stmt, bb->count, freq);
+ else
+ cgraph_create_indirect_edge (node, stmt,
+ gimple_call_flags (stmt),
+ bb->count, freq);
+ }
+ walk_stmt_load_store_addr_ops (stmt, node, mark_load,
+ mark_store, mark_address);
+ if (gimple_code (stmt) == GIMPLE_OMP_PARALLEL
+ && gimple_omp_parallel_child_fn (stmt))
+ {
+ tree fn = gimple_omp_parallel_child_fn (stmt);
+ ipa_record_reference ((symtab_node)node,
+ (symtab_node)cgraph_get_create_node (fn),
+ IPA_REF_ADDR, stmt);
+ }
+ if (gimple_code (stmt) == GIMPLE_OMP_TASK)
+ {
+ tree fn = gimple_omp_task_child_fn (stmt);
+ if (fn)
+ ipa_record_reference ((symtab_node)node,
+ (symtab_node) cgraph_get_create_node (fn),
+ IPA_REF_ADDR, stmt);
+ fn = gimple_omp_task_copy_fn (stmt);
+ if (fn)
+ ipa_record_reference ((symtab_node)node,
+ (symtab_node)cgraph_get_create_node (fn),
+ IPA_REF_ADDR, stmt);
+ }
+ }
+ for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+ walk_stmt_load_store_addr_ops (gsi_stmt (gsi), node,
+ mark_load, mark_store, mark_address);
+ }