summaryrefslogtreecommitdiff
path: root/gcc/ChangeLog
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ChangeLog')
-rw-r--r--gcc/ChangeLog262
1 files changed, 262 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e4cc38734c0..ce1eae63991 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,265 @@
+2008-06-06 Jakub Jelinek <jakub@redhat.com>
+
+ * c-cppbuiltin.c (c_cpp_builtins): Change _OPENMP value to
+ 200805.
+ * langhooks.h (struct lang_hooks_for_decls): Add omp_finish_clause.
+ Add omp_private_outer_ref hook, add another argument to
+ omp_clause_default_ctor hook.
+ * langhooks-def.h (LANG_HOOKS_OMP_FINISH_CLAUSE): Define.
+ (LANG_HOOKS_OMP_PRIVATE_OUTER_REF): Define.
+ (LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR): Change to
+ hook_tree_tree_tree_tree_null.
+ (LANG_HOOKS_DECLS): Add LANG_HOOKS_OMP_FINISH_CLAUSE and
+ LANG_HOOKS_OMP_PRIVATE_OUTER_REF.
+ * hooks.c (hook_tree_tree_tree_tree_null): New function.
+ * hooks.h (hook_tree_tree_tree_tree_null): New prototype.
+ * tree.def (OMP_TASK): New tree code.
+ * tree.h (OMP_TASK_COPYFN, OMP_TASK_ARG_SIZE, OMP_TASK_ARG_ALIGN,
+ OMP_CLAUSE_PRIVATE_OUTER_REF, OMP_CLAUSE_LASTPRIVATE_STMT,
+ OMP_CLAUSE_COLLAPSE_ITERVAR, OMP_CLAUSE_COLLAPSE_COUNT,
+ OMP_TASKREG_CHECK, OMP_TASKREG_BODY, OMP_TASKREG_CLAUSES,
+ OMP_TASKREG_FN, OMP_TASKREG_DATA_ARG, OMP_TASK_BODY,
+ OMP_TASK_CLAUSES, OMP_TASK_FN, OMP_TASK_DATA_ARG,
+ OMP_CLAUSE_COLLAPSE_EXPR): Define.
+ (enum omp_clause_default_kind): Add OMP_CLAUSE_DEFAULT_FIRSTPRIVATE.
+ (OMP_DIRECTIVE_P): Add OMP_TASK.
+ (OMP_CLAUSE_COLLAPSE, OMP_CLAUSE_UNTIED): New clause codes.
+ (OMP_CLAUSE_SCHEDULE_AUTO): New schedule kind.
+ * tree.c (omp_clause_code_name): Add OMP_CLAUSE_COLLAPSE
+ and OMP_CLAUSE_UNTIED entries.
+ (omp_clause_num_ops): Likewise. Increase OMP_CLAUSE_LASTPRIVATE
+ num_ops to 2.
+ (walk_tree_1): Handle OMP_CLAUSE_COLLAPSE and OMP_CLAUSE_UNTIED.
+ Walk OMP_CLAUSE_LASTPRIVATE_STMT.
+ * tree-pretty-print.c (dump_omp_clause): Handle
+ OMP_CLAUSE_SCHEDULE_AUTO, OMP_CLAUSE_UNTIED, OMP_CLAUSE_COLLAPSE,
+ OMP_CLAUSE_DEFAULT_FIRSTPRIVATE.
+ (dump_generic_node): Handle OMP_TASK and collapsed OMP_FOR loops.
+ * c-omp.c (c_finish_omp_for): Allow pointer iterators. Remove
+ warning about unsigned iterators. Change decl/init/cond/incr
+ arguments to TREE_VECs, check arguments for all collapsed loops.
+ (c_finish_omp_taskwait): New function.
+ (c_split_parallel_clauses): Put OMP_CLAUSE_COLLAPSE clause to
+ ws_clauses.
+ * c-parser.c (c_parser_omp_for_loop): Parse collapsed loops. Call
+ default_function_array_conversion on init. Add par_clauses argument.
+ If decl is present in parallel's lastprivate clause, change it to
+ shared and add lastprivate clause for decl to OMP_FOR_CLAUSES.
+ Add clauses argument, on success set OMP_FOR_CLAUSES to it. Look up
+ collapse count in clauses.
+ (c_parser_omp_for, c_parser_omp_parallel): Adjust
+ c_parser_omp_for_loop callers.
+ (OMP_FOR_CLAUSE_MASK): Add 1 << PRAGMA_OMP_CLAUSE_COLLAPSE.
+ (c_parser_pragma): Handle PRAGMA_OMP_TASKWAIT.
+ (c_parser_omp_clause_name): Handle collapse and untied clauses.
+ (c_parser_omp_clause_collapse, c_parser_omp_clause_untied): New
+ functions.
+ (c_parser_omp_clause_schedule): Handle schedule(auto).
+ Include correct location in the error message.
+ (c_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_COLLAPSE
+ and PRAGMA_OMP_CLAUSE_UNTIED.
+ (OMP_TASK_CLAUSE_MASK): Define.
+ (c_parser_omp_task, c_parser_omp_taskwait): New functions.
+ (c_parser_omp_construct): Handle PRAGMA_OMP_TASK.
+ * tree-nested.c (convert_nonlocal_omp_clauses,
+ convert_local_omp_clauses): Handle OMP_CLAUSE_LASTPRIVATE_STMT,
+ OMP_CLAUSE_REDUCTION_INIT, OMP_CLAUSE_REDUCTION_MERGE,
+ OMP_CLAUSE_COLLAPSE and OMP_CLAUSE_UNTIED.
+ Don't handle TREE_STATIC or DECL_EXTERNAL VAR_DECLs in
+ OMP_CLAUSE_DECL.
+ (conver_nonlocal_reference, convert_local_reference,
+ convert_call_expr): Handle OMP_TASK the same as OMP_PARALLEL. Use
+ OMP_TASKREG_* macros rather than OMP_PARALLEL_*.
+ (walk_omp_for): Adjust for OMP_FOR_{INIT,COND,INCR} changes.
+ * tree-gimple.c (is_gimple_stmt): Handle OMP_TASK.
+ * c-tree.h (c_begin_omp_task, c_finish_omp_task): New prototypes.
+ * c-pragma.h (PRAGMA_OMP_TASK, PRAGMA_OMP_TASKWAIT): New.
+ (PRAGMA_OMP_CLAUSE_COLLAPSE, PRAGMA_OMP_CLAUSE_UNTIED): New.
+ * c-typeck.c (c_begin_omp_task, c_finish_omp_task): New functions.
+ (c_finish_omp_clauses): Handle OMP_CLAUSE_COLLAPSE and
+ OMP_CLAUSE_UNTIED.
+ * c-pragma.c (init_pragma): Init omp task and omp taskwait pragmas.
+ * c-common.h (c_finish_omp_taskwait): New prototype.
+ * gimple-low.c (lower_stmt): Handle OMP_TASK.
+ * tree-parloops.c (create_parallel_loop): Create 1 entry
+ vectors for OMP_FOR_{INIT,COND,INCR}.
+ * tree-cfg.c (remove_useless_stmts_1): Handle OMP_* containers.
+ (make_edges): Handle OMP_TASK.
+ * tree-ssa-operands.c (get_expr_operands): Handle collapsed OMP_FOR
+ loops, adjust for OMP_FOR_{INIT,COND,INCR} changes.
+ * tree-inline.c (estimate_num_insns_1): Handle OMP_TASK.
+ * builtin-types.def (BT_PTR_ULONGLONG, BT_PTR_FN_VOID_PTR_PTR,
+ BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR,
+ BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+ BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+ BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT): New.
+ * omp-builtins.def (BUILT_IN_GOMP_TASK, BUILT_IN_GOMP_TASKWAIT,
+ BUILT_IN_GOMP_LOOP_ULL_STATIC_START,
+ BUILT_IN_GOMP_LOOP_ULL_DYNAMIC_START,
+ BUILT_IN_GOMP_LOOP_ULL_GUIDED_START,
+ BUILT_IN_GOMP_LOOP_ULL_RUNTIME_START,
+ BUILT_IN_GOMP_LOOP_ULL_ORDERED_STATIC_START,
+ BUILT_IN_GOMP_LOOP_ULL_ORDERED_DYNAMIC_START,
+ BUILT_IN_GOMP_LOOP_ULL_ORDERED_GUIDED_START,
+ BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_START,
+ BUILT_IN_GOMP_LOOP_ULL_STATIC_NEXT,
+ BUILT_IN_GOMP_LOOP_ULL_DYNAMIC_NEXT,
+ BUILT_IN_GOMP_LOOP_ULL_GUIDED_NEXT,
+ BUILT_IN_GOMP_LOOP_ULL_RUNTIME_NEXT,
+ BUILT_IN_GOMP_LOOP_ULL_ORDERED_STATIC_NEXT,
+ BUILT_IN_GOMP_LOOP_ULL_ORDERED_DYNAMIC_NEXT,
+ BUILT_IN_GOMP_LOOP_ULL_ORDERED_GUIDED_NEXT,
+ BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT): New builtins.
+ * gimplify.c (gimplify_omp_for): Allow pointer type for decl,
+ handle POINTER_PLUS_EXPR. If loop counter has been replaced and
+ original iterator is present in lastprivate clause or if
+ collapse > 1, set OMP_CLAUSE_LASTPRIVATE_STMT. Handle collapsed
+ OMP_FOR loops, adjust for OMP_FOR_{INIT,COND,INCR} changes.
+ (gimplify_expr): Handle OMP_SECTIONS_SWITCH and OMP_TASK.
+ (enum gimplify_omp_var_data): Add GOVD_PRIVATE_OUTER_REF.
+ (omp_notice_variable): Set GOVD_PRIVATE_OUTER_REF if needed,
+ if it is set, lookup var in outer contexts too. Handle
+ OMP_CLAUSE_DEFAULT_FIRSTPRIVATE. Handle vars that are supposed
+ to be implicitly determined firstprivate for task regions.
+ (gimplify_scan_omp_clauses): Set GOVD_PRIVATE_OUTER_REF if needed,
+ if it is set, lookup var in outer contexts too. Set
+ OMP_CLAUSE_PRIVATE_OUTER_REF if GOVD_PRIVATE_OUTER_REF is set.
+ Handle OMP_CLAUSE_LASTPRIVATE_STMT, OMP_CLAUSE_COLLAPSE and
+ OMP_CLAUSE_UNTIED. Take region_type as last argument
+ instead of in_parallel and in_combined_parallel.
+ (gimplify_omp_parallel, gimplify_omp_for, gimplify_omp_workshare):
+ Adjust callers.
+ (gimplify_adjust_omp_clauses_1): Set OMP_CLAUSE_PRIVATE_OUTER_REF if
+ GOVD_PRIVATE_OUTER_REF is set. Call omp_finish_clause
+ langhook.
+ (new_omp_context): Set default_kind to
+ OMP_CLAUSE_DEFAULT_UNSPECIFIED for OMP_TASK regions.
+ (omp_region_type): New enum.
+ (struct gimplify_omp_ctx): Remove is_parallel and is_combined_parallel
+ fields, add region_type.
+ (new_omp_context): Take region_type as argument instead of is_parallel
+ and is_combined_parallel.
+ (gimple_add_tmp_var, omp_firstprivatize_variable, omp_notice_variable,
+ omp_is_private, omp_check_private): Adjust ctx->is_parallel and
+ ctx->is_combined_parallel checks.
+ (gimplify_omp_task): New function.
+ (gimplify_adjust_omp_clauses): Handle OMP_CLAUSE_COLLAPSE and
+ OMP_CLAUSE_UNTIED.
+ * omp-low.c (extract_omp_for_data): Use schedule(static)
+ for schedule(auto). Handle pointer and unsigned iterators.
+ Compute fd->iter_type. Handle POINTER_PLUS_EXPR increments.
+ Add loops argument. Extract data for collapsed OMP_FOR loops.
+ (expand_parallel_call): Assert sched_kind isn't auto,
+ map runtime schedule to index 3.
+ (struct omp_for_data_loop): New type.
+ (struct omp_for_data): Remove v, n1, n2, step, cond_code fields.
+ Add loop, loops, collapse and iter_type fields.
+ (workshare_safe_to_combine_p): Disallow combined for if
+ iter_type is unsigned long long. Don't combine collapse > 1 loops
+ unless all bounds and steps are constant. Adjust extract_omp_for_data
+ caller.
+ (expand_omp_for_generic): Handle pointer, unsigned and long long
+ iterators. Handle collapsed OMP_FOR loops. Adjust
+ for struct omp_for_data changes. If libgomp function doesn't return
+ boolean_type_node, add comparison of the return value with 0.
+ (expand_omp_for_static_nochunk, expand_omp_for_static_chunk): Handle
+ pointer, unsigned and long long iterators. Adjust for struct
+ omp_for_data changes.
+ (expand_omp_for): Assert sched_kind isn't auto, map runtime schedule
+ to index 3. Use GOMP_loop_ull*{start,next} if iter_type is
+ unsigned long long. Allocate loops array, pass it to
+ extract_omp_for_data. For collapse > 1 loops use always
+ expand_omp_for_generic.
+ (omp_context): Add sfield_map and srecord_type fields.
+ (is_task_ctx, lookup_sfield): New functions.
+ (use_pointer_for_field): Use is_task_ctx helper. Change first
+ argument's type from const_tree to tree. Clarify comment.
+ In OMP_TASK disallow copy-in/out sharing.
+ (build_sender_ref): Call lookup_sfield instead of lookup_field.
+ (install_var_field): Add mask argument. Populate both record_type
+ and srecord_type if needed.
+ (delete_omp_context): Destroy sfield_map, clear DECL_ABSTRACT_ORIGIN
+ in srecord_type.
+ (fixup_child_record_type): Also remap FIELD_DECL's DECL_SIZE{,_UNIT}
+ and DECL_FIELD_OFFSET.
+ (scan_sharing_clauses): Adjust install_var_field callers. For
+ firstprivate clauses on explicit tasks allocate the var by value in
+ record_type unconditionally, rather than by reference.
+ Handle OMP_CLAUSE_PRIVATE_OUTER_REF. Scan OMP_CLAUSE_LASTPRIVATE_STMT.
+ Use is_taskreg_ctx instead of is_parallel_ctx.
+ Handle OMP_CLAUSE_COLLAPSE and OMP_CLAUSE_UNTIED.
+ (create_omp_child_function_name): Add task_copy argument, use
+ *_omp_cpyfn* names if it is true.
+ (create_omp_child_function): Add task_copy argument, if true create
+ *_omp_cpyfn* helper function.
+ (scan_omp_parallel): Adjust create_omp_child_function callers.
+ Rename parallel_nesting_level to taskreg_nesting_level.
+ (scan_omp_task): New function.
+ (lower_rec_input_clauses): Don't run constructors for firstprivate
+ explicit task vars which are initialized by *_omp_cpyfn*.
+ Pass outer var ref to omp_clause_default_ctor hook if
+ OMP_CLAUSE_PRIVATE_OUTER_REF or OMP_CLAUSE_LASTPRIVATE.
+ Replace OMP_CLAUSE_REDUCTION_PLACEHOLDER decls in
+ OMP_CLAUSE_REDUCTION_INIT.
+ (lower_send_clauses): Clear DECL_ABSTRACT_ORIGIN if in task to
+ avoid duplicate setting of fields. Handle
+ OMP_CLAUSE_PRIVATE_OUTER_REF.
+ (lower_send_shared_vars): Use srecord_type if non-NULL. Don't
+ copy-out if TREE_READONLY, only copy-in.
+ (expand_task_copyfn): New function.
+ (expand_task_call): New function.
+ (struct omp_taskcopy_context): New type.
+ (task_copyfn_copy_decl, task_copyfn_remap_type, create_task_copyfn):
+ New functions.
+ (lower_omp_parallel): Rename to...
+ (lower_omp_taskreg): ... this. Use OMP_TASKREG_* macros where needed.
+ Call create_task_copyfn if srecord_type is needed. Adjust
+ sender_decl type.
+ (task_shared_vars): New variable.
+ (check_omp_nesting_restrictions): Warn if work-sharing,
+ barrier, master or ordered region is closely nested inside OMP_TASK.
+ Add warnings for barrier if closely nested inside of work-sharing,
+ ordered, or master region.
+ (scan_omp_1): Call check_omp_nesting_restrictions even for
+ GOMP_barrier calls. Rename parallel_nesting_level to
+ taskreg_nesting_level. Handle OMP_TASK.
+ (lower_lastprivate_clauses): Even if some lastprivate is found on a
+ work-sharing construct, continue looking for them on parent parallel
+ construct.
+ (lower_omp_for_lastprivate): Add lastprivate clauses
+ to the beginning of dlist rather than end. Adjust for struct
+ omp_for_data changes.
+ (lower_omp_for): Add rec input clauses before OMP_FOR_PRE_BODY,
+ not after it. Handle collapsed OMP_FOR loops, adjust for
+ OMP_FOR_{INIT,COND,INCR} changes, adjust extract_omp_for_data
+ caller.
+ (get_ws_args_for): Adjust extract_omp_for_data caller.
+ (scan_omp_for): Handle collapsed OMP_FOR
+ loops, adjust for OMP_FOR_{INIT,COND,INCR} changes.
+ (lower_omp_single_simple): If libgomp function doesn't return
+ boolean_type_node, add comparison of the return value with 0.
+ (diagnose_sb_1, diagnose_sb_2): Handle collapsed OMP_FOR
+ loops, adjust for OMP_FOR_{INIT,COND,INCR} changes. Handle OMP_TASK.
+ (parallel_nesting_level): Rename to...
+ (taskreg_nesting_level): ... this.
+ (is_taskreg_ctx): New function.
+ (build_outer_var_ref, omp_copy_decl): Use is_taskreg_ctx instead
+ of is_parallel_ctx.
+ (execute_lower_omp): Rename parallel_nesting_level to
+ taskreg_nesting_level.
+ (expand_omp_parallel): Rename to...
+ (expand_omp_taskreg): ... this. Use OMP_TASKREG_* macros where needed.
+ Call omp_task_call for OMP_TASK regions.
+ (expand_omp): Adjust caller, handle OMP_TASK.
+ (lower_omp_1): Adjust lower_omp_taskreg caller, handle OMP_TASK.
+
+ * bitmap.c (bitmap_default_obstack_depth): New variable.
+ (bitmap_obstack_initialize, bitmap_obstack_release): Do nothing
+ if argument is NULL and bitmap_default_obstack is already initialized.
+ * ipa-struct-reorg.c (do_reorg_1): Call bitmap_obstack_release
+ at the end.
+ * matrix-reorg.c (matrix_reorg): Likewise.
+
2008-06-06 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (*indirect_jump): Macroize using P