diff options
author | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-09-07 02:40:14 +0000 |
---|---|---|
committer | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-09-07 02:40:14 +0000 |
commit | 79acaae17e126f58016355519d445e2766a34771 (patch) | |
tree | 7c5c590c4bfd0b7c4f0dda268de7e85ce217d91f /gcc/tree-ssa-operands.c | |
parent | 0c234f81517b076084b84ce17198cff0522e9a9e (diff) | |
download | gcc-79acaae17e126f58016355519d445e2766a34771.tar.gz |
* cgraphbuild.c (rebuild_cgraph_edges): Export.
* cgraph.h (rebuild_cgraph_edges): Declare.
* tree-pass.h (pass_expand_omp_ssa): New.
* omp-low.c (find_omp_clause): Export.
(copy_var_decl): Split from omp_copy_decl_2.
(build_omp_barrier): Return the call to emit instead of emitting
it directly.
(lower_rec_input_clauses, expand_omp_single): Gimplify the result of
build_omp_barrier.
(extract_omp_for_data, expand_parallel_call, expand_omp_parallel,
expand_omp_for_generic, expand_omp_for_static_nochunk,
expand_omp_for_static_chunk, expand_omp_for, expand_omp_sections):
Adapted to work on SSA form.
(execute_expand_omp): Do not invalidate dominance information.
(gate_expand_omp): Do not run with -fopenmp-ssa flag.
(gate_expand_omp_ssa, pass_expand_omp_ssa): New.
* gimplify.c (gimplify_omp_for): Ensure that the control variable is
a gimple_reg.
(force_gimple_operand): Allow gimplifying code expressions without
value.
* tree-predcom.c (mark_virtual_ops_for_renaming): Handle phi nodes.
* common.opt (fopenmp-ssa): New.
* tree-flow.h (find_omp_clause, copy_var_decl): Declare.
* Makefile.in (tree-cfg.o): Add TREE_INLINE_H dependency.
* tree-cfg.c: Include tree-inline.h.
(struct move_stmt_d): Replace vars_to_remove by vars_map field.
(replace_by_duplicate_decl, replace_ssa_name,
mark_virtual_ops_in_region): New functions.
(move_stmt_r, move_block_to_fn, move_sese_region_to_fn): Adapted
to work on SSA form.
* passes.c (init_optimization_passes): Add pass_expand_omp_ssa pass.
* tree-ssa-operands.c (get_expr_operands): Handle operands of OMP
constructs.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128223 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-operands.c')
-rw-r--r-- | gcc/tree-ssa-operands.c | 59 |
1 files changed, 55 insertions, 4 deletions
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index 4996e09e854..c18f97d4960 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -2247,21 +2247,72 @@ get_expr_operands (tree stmt, tree *expr_p, int flags) get_expr_operands (stmt, &CHANGE_DYNAMIC_TYPE_LOCATION (expr), opf_use); return; + case OMP_FOR: + { + tree init = OMP_FOR_INIT (expr); + tree cond = OMP_FOR_COND (expr); + tree incr = OMP_FOR_INCR (expr); + tree c, clauses = OMP_FOR_CLAUSES (stmt); + + get_expr_operands (stmt, &GIMPLE_STMT_OPERAND (init, 0), opf_def); + get_expr_operands (stmt, &GIMPLE_STMT_OPERAND (init, 1), opf_use); + get_expr_operands (stmt, &TREE_OPERAND (cond, 1), opf_use); + get_expr_operands (stmt, &TREE_OPERAND (GIMPLE_STMT_OPERAND (incr, 1), 1), + opf_use); + + c = find_omp_clause (clauses, OMP_CLAUSE_SCHEDULE); + if (c) + get_expr_operands (stmt, &OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c), + opf_use); + return; + } + + case OMP_CONTINUE: + { + get_expr_operands (stmt, &TREE_OPERAND (expr, 0), opf_def); + get_expr_operands (stmt, &TREE_OPERAND (expr, 1), opf_use); + return; + } + + case OMP_PARALLEL: + { + tree c, clauses = OMP_PARALLEL_CLAUSES (stmt); + + if (OMP_PARALLEL_DATA_ARG (stmt)) + { + get_expr_operands (stmt, &OMP_PARALLEL_DATA_ARG (stmt), opf_use); + add_to_addressable_set (OMP_PARALLEL_DATA_ARG (stmt), + &s_ann->addresses_taken); + } + + c = find_omp_clause (clauses, OMP_CLAUSE_IF); + if (c) + get_expr_operands (stmt, &OMP_CLAUSE_IF_EXPR (c), opf_use); + c = find_omp_clause (clauses, OMP_CLAUSE_NUM_THREADS); + if (c) + get_expr_operands (stmt, &OMP_CLAUSE_NUM_THREADS_EXPR (c), opf_use); + return; + } + + case OMP_SECTIONS: + { + get_expr_operands (stmt, &OMP_SECTIONS_CONTROL (expr), opf_def); + return; + } + case BLOCK: case FUNCTION_DECL: case EXC_PTR_EXPR: case FILTER_EXPR: case LABEL_DECL: case CONST_DECL: - case OMP_PARALLEL: - case OMP_SECTIONS: - case OMP_FOR: case OMP_SINGLE: case OMP_MASTER: case OMP_ORDERED: case OMP_CRITICAL: case OMP_RETURN: - case OMP_CONTINUE: + case OMP_SECTION: + case OMP_SECTIONS_SWITCH: /* Expressions that make no memory references. */ return; |