From patchwork Thu Nov 3 18:14:50 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aldy Hernandez X-Patchwork-Id: 123483 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id BAB26B6F62 for ; Fri, 4 Nov 2011 05:15:54 +1100 (EST) Received: (qmail 28847 invoked by alias); 3 Nov 2011 18:15:50 -0000 Received: (qmail 28129 invoked by uid 22791); 3 Nov 2011 18:15:31 -0000 X-SWARE-Spam-Status: No, hits=-6.2 required=5.0 tests=AWL, BAYES_05, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, SPF_HELO_PASS, TW_CF, TW_CX, TW_TJ, TW_TM X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 03 Nov 2011 18:14:51 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id pA3IEpkj027618 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 3 Nov 2011 14:14:51 -0400 Received: from houston.quesejoda.com (vpn-236-154.phx2.redhat.com [10.3.236.154]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id pA3IEo1v029507 for ; Thu, 3 Nov 2011 14:14:50 -0400 Message-ID: <4EB2DA1A.2030304@redhat.com> Date: Thu, 03 Nov 2011 13:14:50 -0500 From: Aldy Hernandez User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0) Gecko/20110927 Thunderbird/7.0 MIME-Version: 1.0 To: gcc-patches Subject: [patch] 9/n: trans-mem: compiler ChangeLog entries Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Index: gcc/ChangeLog.tm =================================================================== --- gcc/ChangeLog.tm (.../trunk) (revision 0) +++ gcc/ChangeLog.tm (.../branches/transactional-memory) (revision 180773) @@ -0,0 +1,1852 @@ +2011-10-31 Aldy Hernandez + + * ipa-inline.c (can_inline_edge_p): Do not inline TM safe calling + TM pure functions. + +2011-10-29 Torvald Riegel + + * trans-mem.c (lower_transaction): Also add an "over" label for outer + transactions. + (expand_transactions): Do not set hasNoAbort for outer transactions. + * testsuite/gcc.dg/tm/props-4.c: New file. + +2011-10-29 Torvald Riegel + + * trans-mem.c (struct tm_region): Extended comment. + (tm_region_init): Fix tm_region association of blocks with the "over" + label used for transcation abort. + * testsuite/c-c++-common/tm/cancel-1.c: New file. + +2011-10-28 Richard Henderson + + * trans-mem.c (finish_tm_clone_pairs_1): Never create cgraph_nodes + here; allow them to vanish out from under. + + * trans-mem.c (ipa_tm_mayenterirr_function): Recurse for aliases. + (ipa_tm_mark_needed_node): Split out of callback_mark_needed. + (ipa_tm_create_version_alias): Rename from callback_mark_needed. + Handle comdat groups properly. + (ipa_tm_create_version): Use ipa_tm_mark_needed_node. + (ipa_tm_execute): Queue the base of an alias. Propagate irrevokable + backward across alias references. Don't clone aliases directly. + + * trans-mem.c (struct tm_ipa_cg_data): Add transaction_blocks_normal. + (bb_in_TM_region): Remove. + (ipa_tm_scan_calls_block): New. + (ipa_tm_scan_calls_clone): Use it. + (ipa_tm_scan_calls_transaction): Likewise. Initialize + transaction_blocks_normal. + (ipa_tm_note_irrevocable): Use transaction_blocks_normal. + (ipa_tm_propagate_irr): Collect a set of blocks from + get_tm_region_blocks to use instead of bb_in_TM_region. + Free the data allocated within the function. + (ipa_tm_region_init): Remove. + (ipa_tm_execute): Don't init bb_in_TM_region. Install the correct + cfg for use in ipa_tm_scan_calls_transaction. + +2011-10-28 Aldy Hernandez + + * c-family/c-common.c (handle_tm_wrap_attribute): Handle decl + argument. + * testsuite/c-c++-common/tm/wrap-2.c: Move... + * testsuite/gcc.dg/tm/wrap-2.c: ...here. + * testsuite/g++.dg/tm/wrap-2.C: New. + +2011-10-28 Aldy Hernandez + + * trans-mem.c (ipa_tm_execute): Do not include aliases in + tm_callees. + (callback_mark_needed): Set analyzed bit. + +2011-10-27 Aldy Hernandez + + * trans-mem.c (ipa_tm_insert_gettmclone_call): Use gimple_call_fntype + to get function return type. + +2011-10-24 Patrick Marlier + + * tree-cfg.c (verify_gimple_in_seq_2): Fix typo. + +2011-10-24 Patrick Marlier + + * builtin-attrs.def (ATTR_TMPURE_MALLOC_NOTHROW_LIST): Add + TM_PURE. + (ATTR_TMPURE_NOTHROW_LIST): New. + * gtm-builtions.def (BUILT_IN_TM_MALLOC): Use + ATTR_TMPURE_MALLOC_NOTHROW_LIST. + (BUILT_IN_TM_CALLOC): Same. + (BUILT_IN_TM_FREE): Use ATTR_TMPURE_NOTHROW_LIST. + +2011-10-19 Torvald Riegel + + * c-common.h (RID_TRANSACTION): Split into RID_TRANSACTION_ATOMIC + and RID_TRANSACTION_RELAXED. + * c-common.c (RID_TRANSACTION): Same. + ( parse_tm_stmt_attr): Do not accept "atomic" and "relaxed" + attributes anymore. + * c-family/common.h: Same. + * c-family/common.c: Same. + * c-parser.c (c_parser_transaction_expression, c_parser_transaction, + c_parser_statement_after_labels, c_parser_unary_expression): + Handle both RID_TRANSACTION_ATOMIC and RID_TRANSACTION_RELAXED. + (c_parser_attribute_any_word): Only RID_TRANSACTION_ATOMIC accepts + attributes. + (c_parser_transaction_cancel): Update error messages. + * tree-pretty-print.c: Adjust to new syntax. + * gimple-pretty-print.c: Same. + * cp/parser.c (cp_parser_transaction, cp_parser_function_transaction, + cp_parser_transaction_expression, cp_parser_unary_expression, + cp_parser_statement, cp_parser_function_definition_after_declarator, + cp_parser_token_starts_function_definition_p): + Handle both RID_TRANSACTION_ATOMIC and RID_TRANSACTION_RELAXED. + (RT_TRANSACTION): Split into RT_TRANSACTION_ATOMIC and + RT_TRANSACTION_RELAXED. + (cp_parser_required_error): Same. + (cp_parser_transaction_cancel): Update error messages. + * cp/parser.h (cp_parser): Update comment. + * gimple.h: Same. + * gimple.def: Same. + * cp/semantics.c (begin_transaction_stmt): Add flags parameter. + * cp/cp-tree.h: Same. + * cp/pt.c (tsubst_expr): Same. + + * testsuite/c-c++-common/tm/*: Adjust for new syntax. + * testsuite/g++.dg/tm/*: Same. + * testsuite/gcc.dg/tm/*: Same. + +2011-09-20 Richard Henderson + + * trans-mem.c (transaction_invariant_address_p): Handle MEM_REF. + (requires_barrier): Likewise. + + * testsuite/gcc.dg/tm/memopt-10.c: Accept tm_save, not ITM_LU. + * testsuite/gcc.dg/tm/memopt-14.c: Remove test. + +2011-03-13 Richard Henderson + + PR 48074 + * trans-mem.c (ipa_tm_transform_transaction): Don't break after + processing an irrevocable region. + +2011-03-08 Richard Henderson + + PR 47952 + * trans-mem.c (ipa_tm_create_version): Remap extern inline + functions to static inline clones. + +2011-03-08 Richard Henderson + + PR 47952 + * trans-mem.c (tm_mangle): Pass in and return an identifier. + (ipa_tm_create_version): Update to match. Also mangle the + DECL_COMDAT_GROUP. + +2011-02-28 Aldy Hernandez + + PR 47905 + * trans-mem.c (ipa_tm_propagate_irr): Do not propagate to blocks + outside of a TM region. + +2011-02-21 Aldy Hernandez + + PR 47746 + * trans-mem.c (ipa_tm_insert_gettmclone_call): Verify type + compatibility in call. + +2011-02-21 Richard Henderson + + * trans-mem.c (ipa_tm_transform_calls_redirect): Optimize for + recursive calls inside clones. + Abstract the logic from... + (ipa_tm_transform_calls_1): ...here. + +2011-02-16 Aldy Hernandez + + * trans-mem.c (ipa_tm_transform_calls_redirect): Abstract from... + (ipa_tm_transform_calls_1): ...here. + +2011-02-16 Aldy Hernandez + + PR 47690 + * trans-mem.c (ipa_tm_execute): Do not scan past exit blocks when + accumulating BB's. + (is_tm_ending_fndecl): Remove static. + * tree-cfg.c (is_ctrl_altering_stmt): Add TM ending statements. + * tree.h (is_tm_ending_fndecl): New prototype. + +2011-02-14 Aldy Hernandez + + * trans-mem.c (MODE_SERIALIRREVOCABLE): Change to 0. + (ipa_tm_insert_irr_call): Add missing argument for + _ITM_changeTransactionMode. + gtm-builtins.def: Add argument to BUILT_IN_TM_IRREVOCABLE. + +2011-02-11 Aldy Hernandez + + PR 46567 + * trans-mem.c (ipa_tm_propagate_irr): Change assert to if. + +2011-02-09 Richard Henderson + + PR 47530 + * trans-mem.c (expand_block_edges): Reset tail-call bit. + +2011-02-07 Aldy Hernandez + + * trans-mem.c (requires_barrier): Add comment. + +2011-02-04 Aldy Hernandez + + PR/47554 + * trans-mem.c (requires_barrier): Do not instrument if + DECL_BY_REFERENCE. + +2011-02-03 Andrew MacLeod + + PR/46567 + * trans-mem.c (ipa_tm_propagate_irr): Don't reprocess blocks + already in the old irrevocable list. + +2011-02-03 Aldy Hernandez + + * trans-mem (ipa_tm_scan_irr_function): Make sure we have a bitmap + before we dump it. + +2011-02-03 Aldy Hernandez + + PR/47573 + * trans-mem.c (ipa_tm_create_version): Call + tree_function_versioning when the old node will be available. + +2011-02-02 Aldy Hernandez + + * cp/decl.c (push_cp_library_fn): Set attribute to + transaction_safe. + * testsuite/g++.dg/tm/pr46941.C: Test that new/delete calls are + transformed into calls into the runtime. + +2011-02-02 Aldy Hernandez + + * trans-mem.c (expand_call_tm): Annotate BUILT_IN_TM_* calls. + (find_tm_replacement_function): Add comment. + +2011-01-31 Aldy Hernandez + + PR/47492 + * tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Handle + BUILT_IN_TM_MEMSET. + * trans-mem.c (find_tm_replacement_function): Same. + * calls.c (special_function_p): Same. + * tree-ssa-structalias.c: Same. + * gtm-builtins.def: Add BUILT_IN_TM_MEMSET. + +2011-01-31 Aldy Hernandez + + PR/47520 + * trans-mem.c (ipa_tm_propagate_irr): Handle exit blocks. + +2011-01-28 Aldy Hernandez + + PR/47340 + * Import the following from mainline: + + 2010-06-15 Jason Merrill + [snip] + * cp/decl.c (duplicate_decls): Use DECL_IS_BUILTIN rather than test + DECL_SOURCE_LOCATION directly. + +2011-01-28 Andrew MacLeod + + PR/46567 + * gimple-pretty-print (dump_gimple_call): Don't check in_transaction. + * trans-mem.c (examine_call_tm): Remove gimple_call_set_in_transaction. + (get_tm_region_blocks): Add new parameter for returning all blocks in + transactions. + (execute_tm_mark, expand_regions_1, execute_tm_memopt): Add extra + parameter to call. + (bb_in_TM_region): New bitfield for BB's in tranactions. + (ipa_tm_scan_calls_transaction): Check new bitfield. + (ipa_tm_note_irrevocable): Check new bitfield. + (ipa_tm_propagate_irr, ipa_tm_diagnose_transaction): Add extra param. + (ipa_tm_insert_gettmclone_call): Remove set_transaction hack. + (ipa_tm_execute): Build bb bitmap. + * gimple.h (enum gf_mask): Remove GF_CALL_IN_TRANSACTION. + (gimple_call_set_in_transaction, gimple_call_in_transaction_p): Delete. + + * testsuite/g++.dg/tm/pr46567.C: New. + +2011-01-14 Aldy Hernandez + + PR/45940 + * integrate.c (function_attribute_inlinable_p): Remove temporary + TM pure handling. + * tree-inline.c (tree_can_inline_p): Do not inline some TM pure + functions. + +2011-01-13 Aldy Hernandez + + * builtin-attrs.def (ATTR_TM_PURE_NOTHROW_LIST): Remove duplicated + attribute. + (ATTR_TM_TMPURE): Rename from ATTR_TM_PURE to avoid confusion with + pure attribute. + * gtm-builtins.def: Likewise. + +2011-01-13 Aldy Hernandez + + * trans-mem.c: Rename all instances of worklist to irr_worklist. + +2011-01-12 Aldy Hernandez + + PR/46941 + * cp/decl.c (push_cp_library_fn): Mark function as + transaction_pure. + +2011-01-12 Aldy Hernandez + + * trans-mem.c (build_tm_store): Build correct type when handling + CONSTRUCTORs. + +2011-01-11 Aldy Hernandez + + * trans-mem.c (ipa_tm_execute): Place possibly irrevocable + functions in worklist. + +2011-01-10 Aldy Hernandez + + * trans-mem.c (ipa_tm_diagnose_transaction): Do not allow asms in + atomic transactions. + +2010-12-14 Aldy Hernandez + + PR/46654 + * trans-mem.c (struct diagnose_tm): Add saw_volatile and stmt + fields. + (diagnose_tm_1_op): New. + (diagnose_tm_1): Do not ignore operands. + +2010-12-14 Aldy Hernandez + + PR/46923 + * trans-mem.c (requires_barrier): Handle PARM_DECL and + RESULT_DECL. + +2010-12-14 Aldy Hernandez + + PR/46646 + * tree.c (build_common_builtin_nodes): Set __builtin_eh_pointer to + transaction_pure. + * tree.h (apply_tm_attr): Protoize. + * cp/cp-tree.h (apply_tm_attr): Remove. + * cp/except.c (build_throw): Make __cxa_rethrow pure. + (apply_tm_attr): Move to... + * attribs.c: ...here. + +2010-12-14 Aldy Hernandez + + PR/46714 + * trans-mem.c (ipa_tm_create_version): Set DECL_ASSEMBLER_NAME + before creating new node. + +2010-12-14 Aldy Hernandez + + * tree.h (is_tm_safe): Constify. + (is_tm_pure): Same. + * trans-mem.c (get_attrs_for): Same. + (is_tm_pure): Same. + (is_tm_safe): Same. + +2010-12-13 Aldy Hernandez + + PR/46300 + * cp/except.c (do_allocate_exception): Set transaction_pure + attribute for _ITM_cxa_allocate_exception. + (build_throw): Set transaction_pure attribute for _ITM_cxa_throw. + +2010-12-13 Aldy Hernandez + + PR/45940 + * tree.h: Remove prototypes for is_tm_callable, is_tm_irrevocable. + (is_tm_safe_or_pure): New. + * trans-mem.c (is_tm_irrevocable): Make static. + (is_tm_callable): Same. + (diagnose_tm_1): Use is_tm_safe_or_pure. + (ipa_tm_note_irrevocable): Same. + (ipa_tm_mayenterirr_function): Same. + (ipa_tm_execute): Same. + (diagnose_tm_blocks): Change is_tm_safe to is_tm_safe_or_pure. + * integrate.c (function_attribute_inlinable_p): Do not inline TM + pure functions. + +2010-11-29 Aldy Hernandez + + PR/46653 + * trans-mem.c (tm_log_eq): Return true for identical addresses. + +2010-11-23 Aldy Hernandez + + PR/45940 + * trans-mem.c (ipa_tm_execute): Do not push caller into worklist + if it is tm_pure. + +2010-11-19 Aldy Hernandez + + PR/46270 + * trans-mem.c: New global pending_edge_inserts_p. + (expand_call_tm): Handle throwing calls. + (execute_tm_mark): Handle clones and transactions the same. + Flush pending statements if necessary. + +2010-11-17 Aldy Hernandez + + PR/46269 + * gimple-pretty-print.c (dump_gimple_call): Add clone attribute to + dump. + * trans-mem.c (tm_region_init_1): Proceed even if there are not + exit_blocks. + (gate_tm_init): Initialize irr_blocks. + (execute_tm_mark): Stop at irrevocable blocks for clones too. + (ipa_tm_note_irrevocable): Do not mark callers as irrevocable if + they are marked safe or pure. + (ipa_tm_scan_irr_function): Only dump irrevocable blocks if we + have them. + (ipa_tm_execute): Rework irrevocable marking logic. + +2010-11-11 Aldy Hernandez + + * trans-mem.c (build_tm_store): Handle constructors. + +2010-11-03 Aldy Hernandez + + PR/45985 + * trans-mem.c (ipa_tm_insert_irr_call): Pass frequency to + cgraph_create_edge. + +2010-07-27 Aldy Hernandez + + * trans-mem.c (expand_call_tm): Handle return slot optimization. + +2010-07-16 Aldy Hernandez + + * cp/except.c (do_begin_catch): Do not build TM library call if + already defined. + (do_end_catch): Same. + (do_allocate_exception): Same. + (build_throw): Same. + +2010-07-16 Richard Henderson + + * cp/except.c (do_begin_catch): Mark _ITM_cxa_begin_catch tm_pure. + (do_end_catch): Similarly for _ITM_cxa_end_catch. + +2010-06-22 Aldy Hernandez + + * gimplify.c (gimplify_transaction): Wrap transaction body + in a BIND_EXPR. + +2010-06-21 Aldy Hernandez + + * cp/parser.c (cp_parser_unary_expression): Handle + RID_TRANSACTION. + (cp_parser_transaction_expression): New. + +2010-06-17 Aldy Hernandez + + * trans-mem.c (ipa_tm_insert_gettmclone_call): Always return true. + +2010-06-16 Aldy Hernandez + + * trans-mem.c (thread_private_new_memory): Avoid infinite recursion. + +2010-06-15 Aldy Hernandez + + * varasm.c (finish_tm_clone_pairs_1): Do not dump entry if the + original function is not needed. + +2010-06-14 Aldy Hernandez + + * tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Add support for + TM vector loads. Add support for TM logging builtins. + (call_may_clobber_ref_p_1): Add support for vector stores. + * trans-mem.c (tm_log_emit_stmt): Add support for vectors. + * calls.c (special_function_p): Add support for TM vector loads. + Add support for TM logging builtins. + * gtm-builtins.def (BUILT_IN_TM_LOG*): Remove 'pure' attribute. + Add vector log variants. + * tree-ssa-structalias.c (find_func_aliases): Add support for TM + vector stores and loads. + * config/i386/i386.c (bdesc_tm): Add BUILT_IN_TM_LOG* variants. + (ix86_init_tm_builtins): Add support for TM logging builtins. + +2010-06-10 Aldy Hernandez + + * varasm.c (finish_tm_clone_pairs_1): Do not output pair if clone + is not needed. + * tree-cfg.c (dump_function_to_file): Display [tm-clone] if + applicable. + +2010-06-07 Aldy Hernandez + + * trans-mem.c (tm_mangle): New. + (ipa_tm_create_version): Create transactional clones for cgraph + clones. + +2010-06-07 Aldy Hernandez + + * trans-mem.c (thread_private_new_memory): Insert into hash table + at the end. + +2010-06-04 Aldy Hernandez + + * output.h (finish_tm_clone_pairs_1): Declare. + * config/i386/i386.c: Fix conversion problems. + +2010-06-03 Aldy Hernandez + + * trans-mem.c (ipa_tm_insert_gettmclone_call): Mark clones as used + for inlining. + * varasm.c (record_tm_clone_pair): Rewrite to use hash. + (get_tm_clone_pair): New. + (finish_tm_clone_pairs_1): New. + (finish_tm_clone_pairs): Rewrite to use hash. + * output.h (get_tm_clone_pair): Declare. + +2010-05-28 Aldy Hernandez + + * targhooks.c (default_builtin_tm_load_store): New. + * targhooks.h (default_builtin_tm_load_store): Declare. + * target.h (struct gcc_target): Add builtin_tm_load, + builtin_tm_store. + * trans-mem.c (is_tm_simple_load): Handle 64/128/256 bit + variants. + (is_tm_simple_store): Same. + (transaction_invariant_address_p): Handle MISALIGNED_INDIRECT_REF. + (tm_log_emit_stmt): Add FIXME note. + (requires_barrier): Handle MISALIGNED_INDIRECT_REF. + (build_tm_load): Call builtin_tm_load callback. + (build_tm_store): Call builtin_tm_store callback. + * target-def.h (TARGET_VECTORIZE_BUILTIN_TM_LOAD): Define. + (TARGET_VECTORIZE_BUILTIN_TM_STORE): Same. + (TARGET_VECTORIZE): Add TM callbacks. + * gtm-builtins.def: Add BUILT_IN_TM_STORE_*M{64,128,256}. + Add BUILT_IN_TM_LOAD_*M{64,128,256}. + * config/i386/i386-builtin-types.def (PV2SI): Define. + (PCV2SI): Define. + Define V2SI_FTYPE_PCV2SI. + Define V4SF_FTYPE_PCV4SF. + Define V8SF_FTYPE_PCV8SF. + Define VOID_PV2SI_V2SI. + * config/i386/i386.c: Declare bdesc_tm. + (ix86_init_tm_builtins): New. + (ix86_init_builtins): Initialize TM builtins. + (ix86_builtin_tm_load): New. + (ix86_builtin_tm_store): New. + Define TARGET_VECTORIZE* transactional variants. + +2010-05-24 Aldy Hernandez + + * trans-mem.c (expand_block_tm): Do not advance GSI blindly. + +2010-05-19 Aldy Hernandez + + * gtm-builtins.def (_ITM_memmoveRtWt): Make TM pure. + (_ITM_memcpyRtWt): Same. + +2010-05-19 Aldy Hernandez + + * trans-mem.c (expand_assign_tm): Do not die on TARGET_MEM_REFs. + +2010-05-17 Aldy Hernandez + + * trans-mem.c (expand_regions_1): New. + (expand_regions): New. + (execute_tm_edge): Call expand_regions. + (tm_memopt_compute_avin): Check that AUX field is set. + (struct tm_log_entry): Add entry_block field. + (tm_log_add): Add new parameter. Set entry_block. + (tm_log_emit_saves): Only save current transaction locals. + (tm_log_emit_restores): Same. + (tm_log_emit_save_or_restores): Add new parameter. + (expand_transaction): Pass entry block to tm_log_emit_saves and + tm_log_emit_save_or_restores. + +2010-05-12 Aldy Hernandez + + * tree.h: Add documentation for TRANSACTION_EXPR_OUTER AND + TRANSACTION_EXPR_RELAXED. + * gimplify.c (voidify_wrapper_expr): Handle TRANSACTION_EXPR. + (gimplify_transaction): Call and handle voidify_wrapper_expr. + * tree.def (TRANSACTION_EXPR): Change into an expression. + * c-parser.c (c_parser_unary_expression): Handle RID_TRANSACTION. + (c_parser_transaction_expression): New. + +2010-05-03 Aldy Hernandez + + * tree.h (tm_malloc_replacement): Protoize. + * builtin-attrs.def (ATTR_TM_PURE_MALLOC_NOTHROW_LIST): New. + (ATTR_TM_PURE_NOTHROW_LIST): New. + * builtins.def: Add comments regarding TM synchronization. + * gtm-builtins.def (BUILT_IN_TM_MALLOC): New. + (BUILT_IN_TM_CALLOC): New. + (BUILT_IN_TM_FREE): New. + * trans-mem.c (tm_malloc_replacement): New. + (diagnose_tm_1): TM pure functions are safe. + Handle replacements. + * c-typeck.c (build_function_call_vec): Call + tm_malloc_replacement. + * cp/call.c (build_new_function_call): Call tm_malloc_replacement. + +2010-04-29 Aldy Hernandez + + * trans-mem.c (diagnose_tm_1): Print entire function signature. + (ipa_tm_diagnose_tm_safe): Same. + (ipa_tm_diagnose_transaction): Same. + +2010-04-28 Richard Henderson + + * cp/pt.c (tsubst_expr): Handle TRANSACTION_EXPR. + +2010-04-28 Aldy Hernandez + + * Makefile.in (GTFILES): Add trans-mem.c. + * trans-mem.c (tm_wrap_map): Add 'if_marked' GTY marker. + Include gt-trans-mem.h. + +2010-04-22 Aldy Hernandez + + * trans-mem.c (diagnose_tm_1): Include function name when + displaying error. + (ipa_tm_diagnose_tm_safe): Same. + (ipa_tm_diagnose_transaction): Same. + +2010-04-22 Aldy Hernandez + + * trans-mem.c (ipa_tm_create_version): Mark as needed if original + node is needed. + +2010-04-14 Aldy Hernandez + + * trans-mem.c (tm_log_emit_save_or_restores): Remove unused + variables. + (ipa_tm_insert_irr_call): Same. + +2010-04-06 Aldy Hernandez + + * trans-mem.c (ipa_tm_insert_gettmclone_call): Mark the old + cgraph node as used. + +2010-04-06 Aldy Hernandez + + * passes.c (init_optimization_passes): Move pass_ipa_tm into + all_small_ipa_passes. + +2010-02-15 Aldy Hernandez + + * trans-mem.c: Include langhooks.h. + (get_tm_region_blocks): Remove region parameter. Add exit_blocks + and irr_blocks parameters. Adjust accordingly. + (execute_tm_mark): Adjust calls to get_tm_region_blocks. + (execute_tm_edges): Same. + (execute_tm_memopt): Same. + (ipa_tm_diagnose_transaction): Same. + (ipa_tm_propagate_irr): Rewrite to walk CFG instead of dominator + tree. Remove parent_irr parameter. + (ipa_tm_scan_irr_function): Adjust call to ipa_tm_propagate_irr. + Dump irrevocable blocks. + * Makefile.in (trans-mem.o): Depend on langhooks.h. + +2010-02-15 Aldy Hernandez + + * trans-mem.c (build_tm_abort_call): Use build_call_expr_loc. + (build_tm_load): Use new location argument. + (build_tm_store): Same. + (expand_assign_tm): Pass location to build_tm_{load,store}. + (expand_transaction): Set location info. + (expand_call_tm): Same. + +2010-02-03 Aldy Hernandez + + * trans-mem.c (ipa_tm_scan_irr_block): Iterate CFG. + (ipa_tm_transform_calls_1): Rename from ipa_tm_transform_calls. + Only process one block. + (ipa_tm_transform_calls): Iterate through CFG and call helper + function. + +2010-02-01 Aldy Hernandez + + * trans-mem.c (tm_region_init_1): Rewrite to just record exit and + irrevocable blocks in a BB. + (tm_region): Rewrite to do what tm_region_init_1 used to do, but + without recursion. + +2010-01-28 Aldy Hernandez + + * trans-mem.c (tm_region_init_1): Traverse CFG instead of + dominator tree. + +2010-01-27 Aldy Hernandez + + * trans-mem.c (struct tm_region): Add irr_blocks. + (tm_region_init_0): Initialize irr_blocks. + (tm_region_init_1): Set irr_blocks. + (expand_block_tm): Do not return anything. + (get_tm_region_blocks): Move up. Rewrite to traverse CFG instead + of the dominator tree. Use irr_blocks information. + (execute_tm_mark): Use get_tm_region_blocks. + (execute_tm_memopt): Pass new argument to get_tm_region_blocks. + (execute_tm_edges): Use get_tm_region_blocks. + (ipa_tm_diagnose_transaction): Same. Set cfun temporarily. + +2010-01-25 Aldy Hernandez + + * trans-mem.c (ipa_tm_transform_calls): Do not scan past the end + of the transaction. + +2010-01-07 Aldy Hernandez + + * trans-mem.c (build_tm_load): Do not error on unsupported + builtins. + (build_tm_store): Same. + (expand_assign_tm): Call tm_memmove on unsupported load/store + builtins. + (expand_call_tm): Instrument stores embedded in a call if + appropriate. + + * testsuite/gcc.dg/tm/memopt-6.c: Remove unimplemented message. + Check for implementation of aggregate instrumentation. + +2009-12-21 Aldy Hernandez + + * gimple-pretty-print.c (dump_gimple_call): Handle PR_READONLY. + * trans-mem.c (expand_transaction): Set PR_READONLY. + (expand_call_tm): Set GTMA_HAVE_STORE more aggressively. + * trans-mem.h (PR_READONLY): New. + +2009-12-07 Aldy Hernandez + + * trans-mem.c: New thread_memory_type enum. + (struct tm_new_mem_map): Change field type. + (transaction_invariant_address_p): Exclude self. + Look inside INDIRECT_REF. + (transaction_local_new_memory_p): Rename to... + (thread_private_new_memory): Handle thread-local and phi nodes. + Return enum. + (requires_barrier): Log if requested. + +2009-12-07 Aldy Hernandez + + * trans-mem.c: (tm_new_mem_hash): Declare. + (tm_new_mem_map): Declare. + (tm_log_init): Initialize tm_new_mem_hash. + (tm_log_delete): Free htab_delete. + (transaction_local_new_memory_p): New. + (requires_barrier): Call transaction_local_new_memory_p. + +2009-11-24 Aldy Hernandez + + * trans-mem.c (requires_barrier): Document STMT argument. + (expand_assign_tm): Call requires_barrier after assignment has + been expanded. + +2009-11-20 Aldy Hernandez + + * trans-mem.c (tm_log_emit_saves): Do not generate SSA names for + aggregates. + +2009-11-18 Aldy Hernandez + + * trans-mem.c: Remove tm_log_must_generate_saves. + Add tm_log_save_addresses. + (tm_log_init): Initialize vector. + (tm_log_delete): New. + (transaction_invariant_address_p): Move up. + (tm_log_add): Categorize addresses and save transaction invariants + in a separate data structure. + (tm_log_emit): Do not categorize addresses here. + (tm_log_emit_saves): Handle overlaps. Remove fixme. + (tm_log_emit_restores): Same. + (requires_barrier): New parameter. + (expand_assign_tm): New argument to requires_barrier. + (expand_call_tm): Same. + (build_tm_store): Fix typo. + (execute_tm_mark): Remove argument to tm_log_emit. + (expand_transaction): Do not use tm_log_must_generate_saves. + (execute_tm_edges): Call tm_log_delete. + +2009-16-11 Aldy Hernandez + + * trans-mem.c (tm_memopt_transform_blocks): Check for simple loads + and stores. + (is_tm_simple_load): New. + (is_tm_simple_store): New. + +2009-11-13 Richard Henderson + + * gimple.def (GIMPLE_TRANSACTION): Rename from GIMPLE_TM_ATOMIC. + * tree.def (TRANSACTION_EXPR): Rename from TM_ATOMIC. + * c-typeck.c, cp/semantics.c, gimple-low.c, gimple-pretty-print.c, + gimple.c, gimple.h, gimplify.c, gssstruct.def, omp-low.c, trans-mem.c, + tree-cfg.c, tree-inline.c, tree-pretty-print.c: Update to match. + Global replace tm_atomic with transaction. + +2009-11-11 Aldy Hernandez + + * trans-mem.c: Include params.h. New global + tm_log_must_generate_saves. + (tm_log_entry): Add save_var entry. + (tm_log_add): Initialize save_var. + (tm_log_emit_stmt): New. + (transaction_invariant_address_p): New. + (tm_log_dump): Rename. Handle transaction invariants. + (tm_log_emit_saves): New. + (tm_log_emit_restores): New. + (tm_log_emit_save_or_restores): New. + (execute_tm_mark): Call tm_log_emit. + (expand_block_edges): Fix typo. + (expand_tm_atomic): Emit save/restore sequences. + (execute_tm_edges): Call htab_delete. + * doc/invoke.texi: Document tm-max-aggregate-size. + * builtin-types.def: Define BT_FN_VOID_VPTR_SIZE. + * gtm-builtins.def: Define TM_LOG* builtins. + * Makefile.in (trans-mem.o): Add PARAM_H dependency. + * gimple.c (strip_invariant_refs): Unconstify. + * gimple.h (strip_invariant_refs): Add prototype. + * params.def: Define PARAM_TM_MAX_AGGREGATE_SIZE. + +2009-10-28 Richard Henderson + + * c-common.c (c_common_attribute_table): Add + transaction_may_cancel_outer. + (tm_attr_to_mask, tm_mask_to_attr): Remove TM_ATTR_UNKNOWN; add + TM_ATTR_MAY_CANCEL_OUTER. + * c-common.h (TM_ATTR_UNKNOWN): Remove. + (TM_ATTR_MAY_CANCEL_OUTER): New. + * c-parser.c (c_parser_transaction): Don't pass the outer + TM_STMT_ATTR_OUTER attribute into c_finish_transaction. + * cp/parser.c (cp_parser_transaction): Similarly. + * gimple-pretty-print.c (dump_gimple_tm_atomic): Subtract + bits from subcode as we print them; print remaining mask at the end. + * gimple.c (walk_gimple_stmt): Separate out from OMP cases. + * trans-mem.c (get_attrs_for): Extract the type from any expression; + handle METHOD_TYPE properly. + (is_tm_pure, is_tm_irrevocable): Tidy. + (is_tm_safe): Include transaction_may_cancel_outer. + (is_tm_callable): Likewise. + (DIAG_TM_OUTER, DIAG_TM_SAFE, DIAG_TM_RELAXED): New. + (struct diagnose_tm): New. + (diagnose_tm_1): Rename from diagnose_tm_safe_1. Handle + transaction_may_cancel_outer, relaxed and outer transactions. + (diagnose_tm_blocks): Walk all functions. Set tm_may_enter_irr. + (pass_diagnose_tm_blocks): Use TV_TRANS_MEM. + (lower_tm_atomic): Preserve GTMA_DECLARATION_MASK. + (tm_atomic_subcode_ior): Tidy. + (expand_call_tm): Simplify call to is_tm_safe. + (execute_tm_mark): Preserve GTMA_DECLARATION_MASK. + (ipa_tm_scan_calls_tm_atomic): Don't set tm_may_enter_irr here. + (ipa_tm_scan_calls_clone): Likewise. + (ipa_tm_transform_clone): Likewise. + (ipa_tm_mayenterirr_function): New. + (ipa_tm_diagnose_tm_safe, ipa_tm_diagnose_tm_atomic): New. + (ipa_tm_transform_calls): Mark tm_may_enter_irr here. + (ipa_tm_execute): Queue even local tm_callable functions early. + Use ipa_tm_mayenterirr_function and propagate tm_may_enter_irr + around the cgraph. Validate tm_safe and atomic regions. + + * testsuite/c-c++-common/tm/safe-1.c: Add transaction_may_cancel_outer + tests; add indirect function call tests. + * testsuite/gcc.dg/tm/memopt-3.c: Mark test transaction_safe. + * testsuite/c-c++-common/tm/outer-1.c: New. + * testsuite/c-c++-common/tm/safe-2.c: New. + * testsuite/c-c++-common/tm/safe-3.c: New. + * testsuite/gcc.dg/tm/props-1.c: Rename from props.c. + +2009-10-27 Aldy Hernandez + + * trans-mem.c (requires_barrier): Handle thread local memory. + (lower_sequence_tm): Fix whitespace. + (examine_assign_tm): Pass 2nd argument to requires_barrier. + (expand_assign_tm): Same. + (expand_call_tm): Same. + (execute_tm_mark): Handle log. + (tm_log_add): New. + (tm_log_hash): New. + (tm_log_eq): New. + (tm_log_free): New. + (tm_log_init): New. + (tm_log_dump): New. + +2009-10-22 Richard Henderson + + * gimple-pretty-print.c (dump_gimple_tm_atomic_subcode): Merge into... + (dump_gimple_tm_atomic): ... here. Dump OUTER and RELAXED bits. + * tree-pretty-print.c (dump_generic_node) [TM_ATOMIC]: Likewise. + * gimple.h (GTMA_IS_OUTER, GTMA_IS_RELAXED): New. + (GTMA_DECLARATION_MASK): New. + (GTMA_HAVE_CALL_TM, GTMA_HAVE_UNCOMMITTED_THROW): Remove. + * gimplify.c (gimplify_tm_atomic): Copy OUTER and RELAXED bits. + +2009-10-22 Richard Henderson + + * builtin-attrs.def (ATTR_TM_PURE): Use transaction_pure. + * c-common.c (c_common_reswords): Rename __tm_abort and __tm_atomic + to __transaction_cancel and __transaction respectively. + (c_common_attribute_table): s/tm_/transaction_/g. Remove tm_unkown. + (parse_tm_stmt_attr): New. + * c-common.h (RID_TRANSACTION, RID_TRANSACTION_CANCEL): Rename from + RID_TM_ATOMIC, RID_TM_ABORT. + (TM_STMT_ATTR_OUTER, TM_STMT_ATTR_ATOMIC, TM_STMT_ATTR_RELAXED): New. + (parse_tm_stmt_attr): Declare. + * c-parser.c (struct c_parser): Rename in_tm_atomic to in_transaction; + widen to 4 bits. + (c_parser_attribute_any_word): Split out from c_parser_attributes. + (c_parser_statement_after_labels): Update for renames. + (c_parser_transaction_attributes): New. + (c_parser_transaction): Rename from c_parser_tm_atomic; parse the + attributes in the new syntax. + (c_parser_transaction_cancel): Similarly. + * c-tree.h: Update decls. + * c-typeck.c (c_finish_transaction): Rename from c_finish_tm_atomic; + add flags parameter to fill in OUTER and RELAXED bits. + * trans-mem.c (AR_OUTERABORT): New. + (is_tm_pure): Update attribute names. + (is_tm_irrevocable, is_tm_safe, is_tm_callable): Likewise. + (is_tm_may_cancel_outer): New. + (build_tm_abort_call): Add is_outer parameter. + * tree.h: Update decls. + (TM_ATOMIC_OUTER, TM_ATOMIC_RELAXED): New. + + * cp/class.c (set_one_vmethod_tm_attributes): Remove TM_ATTR_UNKNOWN + tests. + * cp/cp-tree.h: Update decls. + * cp/except.c (do_get_exception_ptr): s/tm_/transaction_/. + * cp/parser.c (struct cp_parser): Rename in_tm_atomic to + in_transaction; widen from bool to uchar. + (cp_parser_statement): Update for renames. + (cp_parser_function_definition_after_declarator): Likewise. + (cp_parser_token_starts_function_definition_p): Likewise. + (cp_parser_txn_attribute_opt): New. + (cp_parser_transaction): Rename from cp_parser_tm_atomic; parse + the new attributes. + (cp_parser_function_transaction): Similarly. + (cp_parser_transaction_cancel): Similarly. + * cp/semantics.c (begin_transaction_stmt): Rename from + begin_tm_atomic_stmt. + (finish_transaction_stmt): Rename from finish_tm_atomic_stmt; + add flags parameter and fill in OUTER and RELAXED bits. + + * testsuite/g++.dg/tm/*: Adjust for new syntax. + * testsuite/gcc.dg/tm/*: Likewise. + +2009-10-20 Richard Henderson + + * trans-mem.c (tm_memopt_init_sets): Use XOBNEW. + (tm_memopt_free_sets): Move call to bitmap_obstack_release... + (execute_tm_memopt): ... here. Empty the hash table within + the loop; free the hash table after the loop. + +2009-10-20 Richard Henderson + + * tree-inline.c (remap_gimple_stmt): Restore GIMPLE_TM_ATOMIC + from before merge. + + * gimple-pretty-print.c (dump_gimple_eh_else): Tidy. + * tree-cfg.c (verify_types_in_gimple_seq_2): Handle GIMPLE_EH_ELSE. + * tree-eh.c: Restore EH_ELSE from before merge. + +2009-10-20 Richard Henderson + + * ipa-inline.c (analyze_function): Early return if no function body. + * ipa-reference.c (analyze_function): Likewise. + +2009-10-20 Richard Henderson + + * trans-mem.c (gate_tm_init): Set tm-clone entry_block to the + successor of ENTRY_BLOCK. + (get_tm_region_blocks): Allow for a null exit_blocks bitmap. + (tm_memopt_compute_available, tm_memopt_compute_antic): Likewise. + +2009-10-13 Aldy Hernandez + + * trans-mem.c (ipa_tm_insert_gettmclone_call): Cast return value + from gettmclone. + +2009-10-12 Richard Henderson + + * calls.c (emit_call_1): Don't add REG_TM note here. + * cfgbuild.c (make_edges): Add edges for REG_TM notes. + * cfgexpand.c (expand_gimple_stmt): Add REG_TM notes. + (gimple_expand_cfg): Free the tm_restart map. + * cfgrtl.c (purge_dead_edges): Look for REG_TM notes. + * combine.c (distribute_notes): Handle REG_TM notes. + * emit-rtl.c (try_split): Likewise. + * recog.c (peephole2_optimize): Likewise. + * rtlanal.c (alloc_reg_note): Likewise. + * function.h (struct tm_restart_node): New. + (struct function): Add tm_restart member. + * trans-mem.c (lower_tm_atomic): Use __builtin_eh_pointer; flatten + GIMPLE_TM_ATOMIC immediately. + (struct tm_region): Add inner and outer members; remove region_nr. + (tm_region_init_0): New. + (tm_region_init_1, tm_region_init): Rewrite for a direct scan. + (tm_region_init_2): Remove. + (gate_tm_init): Adjust for tm_region_init interface change. + (make_tm_edge): Record edge in tm_restart map. + (expand_block_edges): Tidy. + (expand_tm_atomic): Don't call set_eh_region_tree_label. + (ipa_tm_region_init): Adjust for tm_region_init changes. + (add_stmt_to_tm_region): Remove. + (ipa_tm_insert_irr_call): Don't call it. + (ipa_tm_insert_gettmclone_call): Likewise. + * tree-eh.c (struct_ptr_eq, struct_ptr_hash): Export. + * tree.h (struct_ptr_eq, struct_ptr_hash): Declare. + +2009-10-08 Aldy Hernandez + + * trans-mem.c (tm_memopt_compute_avin): Do not special case entry + block. Do not seed with uninitialized blocks. + (tm_memopt_compute_antin): Do not special case exit blocks. Do + not seed with uninitialized blocks. + (execute_tm_memopt): Call tm_memopt_clear_visited. + (tm_memopt_clear_visited): New. + +2009-10-03 Aldy Hernandez + + * tree.h (BUILTIN_TM_LOAD_STORE_P): New. + (BUILTIN_TM_LOAD_P): New. + (BUILTIN_TM_STORE_P): New. + (CASE_BUILT_IN_TM_LOAD): New. + (CASE_BUILT_IN_TM_STORE): New. + * testsuite/gcc.dg/tm/memopt-2.c: Update for new dump code. + * tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Replace load + cases by a call to BUILTIN_TM_LOAD_P. + (call_may_clobber_ref_p_1): Replace store cases by a call to + BUILTIN_TM_STORE_P. + * trans-mem.c (is_tm_load): Replace load cases by a call to + BUILTIN_TM_LOAD_P. + (is_tm_store): Replace store cases by a call to + BUILTIN_TM_STORE_P. + (dump_tm_memopt_transform): Do not use prefix; just dump the new + statement. + (TRANSFORM_*): New macros. + (tm_memopt_transform_stmt): Do the actual transformation. + (tm_memopt_transform_blocks): Change calls to + dump_tm_memopt_transform into calls to tm_memopt_transform_stmt. + * calls.c (special_function_p): Change TM load/store cases into a + call to BUILTIN_TM_LOAD_STORE_P. + * gtm-builtins.def: New builtins for the following variants: WaR, + WaW, RaR, RaW, RfW. + * tree-ssa-structalias.c (find_func_aliases): Use BUILTIN_TM_*_P + macros. + +2009-09-29 Aldy Hernandez + + * trans-mem.c (tm_memopt_compute_antic): New. + (tm_memopt_compute_available): Merge seed and initialization + loops. Remove entry_block check. + (tm_memopt_compute_antin): New. + (execute_tm_memopt): Call tm_memopt_compute_antic. + +2009-09-28 Aldy Hernandez + + * trans-mem.c (tm_memopt_compute_available): Do not put entry + block in the worklist. + (tm_memopt_init_sets): Use obstack. + (tm_memopt_free_sets): Adapt for obstack. + (execute_tm_memopt): Same. + +2009-09-25 Aldy Hernandez + + * trans-mem.c: Include tree-dump.h + (is_tm_load): New. + (is_tm_store): New. + (get_tm_region_blocks): New. + (tm_memop_hash): New. + (tm_memop_eq): New. + (tm_memopt_value_number): New. + (tm_memopt_accumulate_memops): New. + (dump_tm_memopt_transform): New. + (dump_tm_memopt_set): New. + (dump_tm_memopt_sets): New. + (tm_memopt_compute_avin): New. + (tm_memopt_compute_available): New. + (tm_memopt_transform_blocks): New. + (tm_memopt_init_sets): New. + (tm_memopt_free_sets): New. + (execute_tm_memopt): New. + (gate_tm_memopt): Activate. + * Makefile.in (trans-mem.o): Depend on TREE_DUMP_H. + +2009-09-10 Aldy Hernandez + + * trans-mem.c (record_tm_replacement): Set DECL_UNINLINABLE. + +2009-09-09 Aldy Hernandez + + * trans-mem.c (find_tm_replacement_function): Check tm_wrap_map + before checking for builtins. + +2009-09-07 Aldy Hernandez + + * builtin-attrs.def: (ATTR_TM_PURE): New. + (ATTR_TM_TMPURE_NOTHROW_LIST): New. + (ATTR_TM_PURE_TMPURE_NOTHROW_LIST): New. + (ATTR_TM_PURE_NOTHROW_LIST): Remove. + * gtm-builtins.def (BUILT_IN_TM_LOAD_*): Use + ATTR_TM_PURE_TMPURE_NOTHROW_LIST instead. + * tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Handle TM builtins. + (call_may_clobber_ref_p_1): Same. + * tree-ssa-structalias.c (find_func_aliases): Same. + Fix function comment to reflect reality. + +2009-08-26 Aldy Hernandez + + * tree.h, gimple-pretty-print.c, trans-mem.c, trans-mem.h, + calls.c, c-common.c, c-common.h, gtm-builtins.def, gimple.h: + Replace all instances of "irrevok*" with "irrevoc*". + +2007-08-05 Richard Henderson + + * except.c (duplicate_eh_regions_1): Zero tm_atomic_stmt. + * tree-eh.c (stmt_can_throw_internal): Exclude __tm_atomic + and the tm builtins. + * tree-inline.c (remap_gimple_stmt): Update the tm_atomic_stmt + of the ERT_TRANSACTION when copying __tm_atomic. + (copy_bb): Tidy eh region updates. + +2007-08-03 Richard Henderson + + * varasm.c (record_tm_clone_pair): Allow entries to be + optimized away by cgraph. + +2007-08-03 Richard Henderson + + * trans-mem.c (pass_diagnose_tm_blocks): Prefix pass name with *. + (pass_tm_init): Likewise. + +2009-07-24 Aldy Hernandez + + * cgraph.h (cgraph_local_info): Add tm_may_enter_irr. + * gimple-pretty-print.c (dump_gimple_tm_atomic_subcode): Rename + GTMA_MUST_CALL_IRREVOKABLE to GTMA_DOES_GO_IRREVOKABLE. + * trans-mem.c (expand_call_tm): Handle irrevocability. + (execute_tm_mark): Set GTMA_DOES_GO_IRREVOKABLE and + GTMA_MAY_ENTER_IRREVOKABLE. + (expand_tm_atomic): Set PR_DOESGOIRREVOKABLE, + PR_UNINSTRUMENTEDCODE, and PR_HASNOIRREVOKABLE appropriately. + (ipa_tm_scan_calls_tm_atomic): Set tm_may_enter_irr for + replacement functions. + (ipa_tm_scan_calls_clone): Same. + (ipa_tm_transform_tm_atomic): If the block goes irrevocable, don't + transform anything. + (ipa_tm_transform_clone): Set tm_may_enter_irr for non safe + functions. + (ipa_tm_execute): Set tm_may_enter_irr for non-local tm_callable + functions. Swap loops calling ipa_tm_transform_clone and + ipa_tm_transform_tm_atomic. + * gimple.h: Rename GTMA_MUST_CALL_IRREVOKABLE into + GTMA_DOES_GO_IRREVOKABLE. + +2009-07-23 Aldy Hernandez + + * gimple-pretty-print.c (dump_gimple_tm_atomic_subcode): Add space + after every GTMA_*. + * trans-mem.c (is_tm_irrevokable): Return true for direct calls to + the irrevocable builtin. + (lower_sequence_tm): Rename GTMA_HAVE_CALL_IRREVOKABLE into + GTMA_MAY_ENTER_IRREVOKABLE. + (ipa_tm_insert_irr_call): Same. + (expand_call_tm): Early return when is_tm_abort . + Mark as GTMA_HAVE_STORE if the LHS of a call requires a barrier. + (execute_tm_mark): Do not clear the GTMA_MAY_ENTER_IRREVOKABLE. + (ipa_tm_insert_gettmclone_call): Set GTMA_MAY_ENTER_IRREVOKABLE + unless safe. + * gimple.h: Rename GTMA_HAVE_CALL_IRREVOKABLE into + GTMA_MAY_ENTER_IRREVOKABLE. + Add comments for GTMA_*IRREV*. + * c-parser.c (c_parser_tm_abort): Complain if using tm_abort + without TM enabled, and return a NOP_EXPR. + +2009-07-22 Richard Henderson + + * cgraphunit.c (verify_cgraph): Don't exempt clones from verification. + * trans-mem.c (ipa_tm_execute): Call it. + + * cp/except.c (do_allocate_exception): Add tm_wrap declaration. + (build_throw): Likewise. Remove it from __cxa_rethrow. + +2009-07-22 Aldy Hernandez + + * trans-mem.c (ipa_tm_insert_irr_call): Make a new block for + TM_IRREVOKABLE calls. + (pass_ipa_tm): Enable dump. + +2009-07-17 Aldy Hernandez + + * gimple-pretty-print.c (dump_gimple_tm_atomic_subcode): New. + (dump_gimple_tm_atomic): Dump subcodes. + * trans-mem.c (is_tm_abort): New. + (examine_call_tm): Use is_tm_abort. + (expand_call_tm): Set GTMA_HAVE_ABORT. + +2009-07-16 Richard Henderson + + * except.c, except.h, tree-eh.c: Revert can_throw_internal_1 + change from 2009-07-10. + + * gimple.h (GF_CALL_NOINLINE): New. + (gimple_call_noinline_p, gimple_call_set_noinline_p): New. + * trans-mem.c (ipa_tm_insert_gettmclone_call): Set noinline on call. + * tree-eh.c (inlinable_call_p): Test noinline on call. + +2009-07-16 Aldy Hernandez + + * gimple-pretty-print.c: + Include trans-mem.h + (dump_gimple_call): Dump arguments for calls to + _ITM_beginTransaction. + * trans-mem.c: Include trans-mem.h + Move PR_* macros... + * trans-mem.h: ...here. + * Makefile.in (gimple-pretty-print.o): Depend on TRANS_MEM_H. + (trans-mem.o): Same. + * config/i386/i386.c (ix86_handle_cconv_attribute): Tag unused + arguments as so. + +2009-07-10 Richard Henderson + + * gimple.def (GIMPLE_EH_ELSE): New. + * gsstruct.def (GSS_EH_ELSE): New. + * gimple-low.c (lower_stmt): Handle GIMPLE_EH_ELSE. + (gimple_stmt_may_fallthru): Likewise. + * gimple-pretty-print.c (dump_gimple_eh_else): New. + (dump_gimple_stmt): Call it. + * gimple.c (gss_for_code): Add GIMPLE_EH_ELSE. + (gimple_size): Add GSS_EH_ELSE. + (gimple_build_eh_else): New. + (walk_gimple_stmt, gimple_copy): Handle GIMPLE_EH_ELSE. + * gimple.h (struct gimple_statement_eh_else): New. + (gimple_statement_d): Add it. + (gimple_has_substatements): Add GIMPLE_EH_ELSE. + (gimple_eh_else_n_body, gimple_eh_else_e_body): New. + (gimple_eh_else_set_n_body, gimple_eh_else_set_e_body): New. + * tree-eh.c (collect_finally_tree): Handle GIMPLE_EH_ELSE. + (replace_goto_queue_1): Likewise. + (get_eh_else): New. + (honor_protect_cleanup_actions): Handle GIMPLE_EH_ELSE. + (lower_try_finally_nofallthru): Likewise. + (lower_try_finally_onedest): Likewise. + (lower_try_finally_copy): Likewise. + (lower_try_finally_switch): Likewise. + (decide_copy_try_finally): Likewise. + (lower_eh_constructs_2): Likewise. + (refactor_eh_r): Likewise. + + * calls.c (special_function_p): Add BUILT_IN_TM_COMMIT_EH. + * gimple.c (walk_gimple_seq): Honor removed_stmt. + (gimple_call_flags): Handle GF_CALL_NOTHROW. + * gimple.h (GF_CALL_NOTHROW): New. + (gimple_call_set_nothrow_p): New. + (struct walk_stmt_info): Use BOOL_BITFIELD; add removed_stmt. + * gtm-builtins.def (BUILT_IN_TM_COMMIT_EH): New. + * trans-mem.c (is_tm_ending_fndecl): Handle it. + (tm_region_init_2): Likewise. + (lower_tm_atomic, lower_sequence_tm, lower_sequence_no_tm): Rewrite + in terms of walk_gimple_seq. + (ipa_tm_insert_gettmclone_call): Save nothrow bit on call. + * tree-eh.c (stmt_could_throw_p): Use gimple_call_nothrow_p. + + * cp/class.c (apply_tm_attr): Export. + * cp/cp-tree.h: Declare it. + * cp/except.c (do_get_exception_ptr): Apply tm_pure. + (do_begin_catch): Record tm replacement function. + (do_end_catch, build_throw): Likewise. + + * except.c (can_throw_internal_1): Remove inlinable_call parameter. + (can_throw_internal): Don't pass it. + * except.h (can_throw_internal_1): Update decl. + * tree-eh.c (stmt_can_throw_internal): Don't pass inlinable_call. + +2009-07-09 Richard Henderson + + * c-common.c (handle_tm_wrap_attribute): New. + (c_common_attribute_table): Add it. + * trans-mem.c (tm_wrap_map, record_tm_replacement): New. + (find_tm_replacement_function): Use tm_wrap_map. + (diagnose_tm_safe_1): Use find_tm_replacement_function. + * tree.h (record_tm_replacement): Declare. + +2009-07-09 Richard Henderson + + * c-decl.c (c_gimple_diagnostics_recursively): Split out + non-recursive part to... + * c-common.c (c_gimple_diagnostics): ... here. Handle tm_safe. + * c-common.h (c_gimple_diagnostics): Declare. + * gimple.h (diagnose_tm_safe_errors): Declare. + * trans-mem.c (diagnose_tm_safe_1, diagnose_tm_safe_errors): New. + (ipa_tm_insert_gettmclone_call): Fix is_tm_safe call. + + * cp/decl.c (finish_function): Call c_gimple_diagnostics. + + * omp-low.c (WALK_SUBSTMTS): Add GIMPLE_TM_ATOMIC. + +2009-07-09 Richard Henderson + + * builtin-attrs.def (ATTR_TM_NOTHROW_NONNULL): Remove. + * gtm-builtins.def (BUILT_IN_TM_MEMCPY, BUILT_IN_TM_MEMMOVE): Use + ATTR_TM_NOTHROW_LIST. + (BUILT_IN_TM_GETTMCLONE_IRR): Use ATTR_TM_CONST_NOTHROW_LIST. + * trans-mem.c (ipa_tm_insert_gettmclone_call): Look through + OBJ_TYPE_REF. + + * testsuite/g++.dg/tm/opt-1.C: New test. + +2009-07-08 Richard Henderson + + * c-common.c (handle_tm_attribute): Rename from + handle_tm_fntype_attribute; handle class types. + (tm_attr_to_mask): Rename from tm_attribute_mask; export. + (tm_mask_to_attr, find_tm_attribute): New. + * c-common.h: Add decls for new functions. + (TM_ATTR_SAFE, TM_ATTR_CALLABLE, TM_ATTR_PURE, + TM_ATTR_IRREVOKABLE, TM_ATTR_UNKNOWN): New. + + * cp/class.c (check_bases): Compute tm attributes for the class + based on its base classes. + (apply_tm_attr, look_for_tm_attr_overrides): New. + (set_one_vmethod_tm_attributes, set_method_tm_attributes): New. + (finish_struct_1): Call it. + + * testsuite/g++.dg/tm/attrib-[1234].C: New. + * testsuite/gcc.dg/tm/attrib-1.c: Update warning text. + +2009-07-06 Richard Henderson + + * attribs.c (init_attributes): Allow '*' prefix for overrides. + (register_attribute): Likewise. + * builtin-attrs.def (ATTR_TM_REGPARM): New. + (ATTR_TM_NOTHROW_LIST, ATTR_TM_NORETURN_NOTHROW_LIST, + ATTR_TM_NOTHROW_NONNULL, ATTR_TM_CONST_NOTHROW_LIST, + ATTR_TM_PURE_NOTHROW_LIST): New. + * c-common.c (ignore_attribute): New. + (c_common_attribute_table): Add "*tm regparm". + + * config/i386/i386.c (ix86_handle_tm_regparm_attribute): New. + (ix86_attribute_table): Add "*tm regparm". + +2009-07-02 Richard Henderson + + * c-typeck.c (c_finish_tm_atomic): Use build_stmt. + + * cp/parser.c (struct cp_parser): Add in_tm_atomic. + (cp_parser_tm_atomic, cp_parser_tm_abort): New. + (cp_parser_statement): Use them. + (cp_parser_function_tm_atomic): New. + (cp_parser_function_definition_after_declarator): Use it. + (cp_parser_token_starts_function_definition_p): Allow __tm_atomic. + * cp/semantics.c (begin_tm_atomic_stmt): New. + (finish_tm_atomic_stmt): New. + * cp/cp-tree.h: Update decls. + + * gimple.c (walk_gimple_op): Handle GIMPLE_TM_ATOMIC. + * gimple.h (gimple_has_substatements): Add GIMPLE_TM_ATOMIC. + (gimple_tm_atomic_label_ptr): New. + * tree-inline.c (remap_gimple_stmt): Handle GIMPLE_TM_ATOMIC. + + * testsuite/gcc.dg/tm/ipa-2.c: Add -asmname flag. + * testsuite/g++.dg/dg.exp: Run tm tests. + * testsuite/g++.dg/tm/: New subdirectory. + +2009-07-01 Richard Henderson + + * timevar.def (TV_TRANS_MEM): New. + * trans-mem.c (pass_lower_tm, pass_tm_init, pass_tm_mark, + pass_tm_edges, pass_tm_memopt, pass_ipa_tm): Use it. + (mark_vops_in_stmt): Remove. + (ipa_tm_execute): Don't call tree_versionable_function_p + on unavailable functions. + * tree-eh.c (struct leh_state): Fix eh_region_d tag use. + * except.c: Re-merge some bits that accidentally got dropped. + (remove_unreachable_regions): Don't remove transactions. + * tree-cfg.c (verify_gimple_tm_atomic): New. + (verify_types_in_gimple_stmt): Use it. + * testsuite/gcc.dg/tm/ipa-1.c: Use -asmname dump flag. + +2009-06-26 Richard Henderson + + * trans-mem.c (ipa_tm_execute): Check tree_versionable_function_p. + +2009-01-30 Richard Henderson + + * trans-mem.c (gimplify_addr): Rename from gimplify_mem_ref_addr; + handle any object not just TMR's. + + * trans-mem.c (ipa_tm_insert_gettmclone_call): Do + add_referenced_var on the new temporary. + + * trans-mem.c (ipa_tm_execute): Fix test for when we can + expect an external clone symbol. + + * c-common.c (c_common_attribute_table): Add tm_irrevokable. + (tm_attribute_mask): Handle it. + (handle_tm_fntype_attribute): Likewise. + * calls.c (special_function_p): Add BUILT_IN_TM_GETTMCLONE_IRR. + * gtm-builtins.def (BUILT_IN_TM_GETTMCLONE_IRR): New. + (BUILT_IN_TM_GETTMCLONE_SAFE): New. + * trans-mem.c (is_tm_irrevokable, is_tm_safe): New. + (requires_barrier): Handle TARGET_MEM_REF. + (gimplify_mem_ref_addr): New. + (build_tm_load, build_tm_store): Use it. + (expand_assign_tm): Early exit for no load or store. + (expand_call_tm): Expect indirect calls. + (expand_tm_atomic): Look for sharing loop back edges. + (ipa_tm_scan_irr_block): Don't consider indirect calls irrevokable. + (ipa_tm_insert_gettmclone_call): New. + (ipa_tm_transform_calls): Use it. + * tree.h (is_tm_safe, is_tm_irrevokable): Declare. + +2009-01-28 Richard Henderson + + * output.h (record_tm_clone_pair, finish_tm_clone_pairs): Declare. + * toplev.c (compile_file): Call finish_tm_clone_pairs. + * trans-mem.c (ipa_tm_create_version): Call record_tm_clone_pair. + (ipa_tm_execute): Likewise. + * varasm.c (tm_clone_pairs): New. + (record_tm_clone_pair, finish_tm_clone_pairs): New. + * crtstuff.c (__TMC_LIST__, __TMC_END__): New. + (__do_global_dtors_aux): Deregister clone table. + (frame_dummy): Register clone table. + + * cgraphunit.c (cgraph_function_versioning): Move lowered setting... + (cgraph_copy_node_for_versioning): ... here. + * trans-mem.c (ipa_tm_create_version): Clear DECL_RTL; mark the + clone as needed, if externally visible. + * testsuite/gcc.dg/tm/ipa-3.c: New. + +2009-01-27 Richard Henderson + + * c-common.h (RID_TM_RETRY): Remove. + * c-common.c (c_common_resword): Remove RID_TM_RETRY. + * c-parser.c (c_parser_tm_abort): Rename from c_parser_tm_abort_retry. + (c_parser_statement_after_labels): Remove RID_TM_RETRY. + * calls.c (special_function_p): Remove BUILT_IN_TM_RETRY. + * gtm-builtins.def: Rename all functions to match the Intel ABI. + * trans-mem.c (PR_*, A_*, AR_*, MODE_*): New define constants + from the Intel ABI. + (is_tm_ending_fndecl): Remove BUILT_IN_TM_RETRY. + (build_tm_abort_call): New. + (TM_START_RESTORE_LIVE_IN, TM_START_ABORT): Remove. + (expand_tm_atomic): Update for library changes. + * tree.h (build_tm_abort_call): Declare. + +2008-11-13 Richard Henderson + + * cgraphunit.c (cgraph_function_versioning): Copy assembler name + from decl. + * gimplify.c (create_tmp_var_name): Use clean_symbol_name. + * tree-inline.c (initialize_cfun): Copy setjmp and alloca. + +2008-11-11 Richard Henderson + + * cgraph.h (struct cgraph_edge): Remove tm_atomic_call. + (cgraph_copy_node_for_versioning): Declare. + * cgraphunit.c (cgraph_copy_node_for_versioning): Export; + copy analyzed from old version. + (cgraph_function_versioning): Do DECL_NAME et al setup here ... + * tree-inline.c (tree_function_versioning): ... not here. + * ipa-inline.c (cgraph_gate_early_inlining): Don't check TM_CLONE. + * passes.c (init_optimization_passes): Do ipa_tm before ipa_cp. + * trans-mem.c (is_tm_pure_call): New. + (is_tm_ending_fndecl, find_tm_replacement_function): New. + (examine_call_tm): Don't look for irrevokable calls here. + (execute_lower_tm): Assert we don't see TM_CLONEs. + (tm_region_init_2, tm_region_init): Break out from ... + (gate_tm_init): ... here. + (expand_irrevokable): Remove. + (expand_call_tm): Don't call it. + (expand_block_tm): Return true if done expanding. + (execute_tm_mark): Notice that. + (ipa_tm_analyze_function, ipa_tm_add_new_function, + ipa_tm_generate_summary, ipa_tm_decide_version): Remove. + (struct tm_ipa_cg_data, cgraph_node_p, cgraph_node_queue, + get_cg_data, maybe_push_queue, ipa_tm_scan_calls_tm_atomic, + ipa_tm_scan_calls_clone, ipa_tm_note_irrevokable, + ipa_tm_scan_irr_block, ipa_tm_scan_irr_blocks, ipa_tm_propagate_irr, + ipa_tm_decrement_clone_counts, ipa_tm_scan_irr_function, + ipa_tm_region_init, ipa_tm_mark_for_rename, ipa_tm_insert_irr_call, + ipa_tm_transform_calls, ipa_tm_transform_tm_atomic, + ipa_tm_transform_clone): New. + (ipa_tm_create_version): Don't use cgraph_function_versioning. + (ipa_tm_execute): Rewrite. + (pass_ipa_tm): Use simple_ipa_opt_pass. + * tree-pretty-print.c (PRINT_FUNCTION_NAME): Merge into ... + (dump_function_name): ... here. + (maybe_dump_asm_name): New. + + * testsuite/gcc.dg/tm/ipa-1.c, testsuite/gcc.dg/tm/ipa-2.c: New. + +2008-11-05 Richard Henderson + + * trans-mem.c (ipa_tm_create_version): Use C++ style mangling. + * Makefile.in (trans-mem.o): Update dependencies. + +2008-11-05 Richard Henderson + + * trans-mem.c (expand_irrevokable): Mark all call-clobbered tags + for renaming. + (execute_tm_edges): Clear all_tm_regions at the end. + (gate_tm_memopt): Disable. + * tree-ssa-operands.c (add_all_call_clobber_ops): Handle .GLOBAL_VAR. + Use add_virtual_operand directly and pretend to be a call site. + (add_call_clobber_ops): Streamline .GLOBAL_VAR handling. + (add_call_read_ops): Likewise. + * testsuite/gcc.dg/tm/opt-1.c: New. + +2008-11-04 Richard Henderson + + * c-common.c (handle_tm_callable_attribute, + handle_tm_pure_attribute, handle_tm_unknown_attribute): Remove. + (handle_tm_fntype_attribute): New. Combine those and apply to + function types instead of to decls. + (tm_attribute_mask): New. + * trans-mem.c (get_attrs_for, is_tm_pure, is_tm_callable): New. + (requires_barrier): Don't query tm_pure on variables. + (examine_call_tm): Query tm_pure on indirect calls. + (expand_call_tm): Likewise. + * tree.h (tree_decl_with_vis): Remove tm_var_pure. + (DECL_IS_TM_PURE_VAR): Remove. + (DECL_IS_TM_PURE, DECL_IS_TM_UNKNOWN, DECL_IS_TM_CALLABLE): Remove. + (struct tree_function_decl): Remove tm_callable_flag, tm_pure_flag. + (is_tm_pure, is_tm_callable): Declare. + * omp-low.c (copy_var_decl): Don't copy DECL_IS_TM_PURE_VAR. + * testsuite/gcc.dg/tm/attrib-1.c: New. + +2008-11-03 Richard Henderson + + * trans-mem.c (expand_assign_tm): Use memmove by default + for block copies. + (expand_call_tm): Translate memcpy/memmove into their TM + counterparts. + +2008-11-03 Richard Henderson + + * builtin-types.def (BT_FN_LDOUBLE_VPTR, BT_FN_VOID_VPTR_LDOUBLE): New. + * gtm-builtins.def (BUILT_IN_TM_RETRY, BUILT_IN_TM_MEMMOVE): New. + (BUILT_IN_TM_STORE_LDOUBLE, BUILT_IN_TM_LOAD_LDOUBLE): New. + * calls.c (special_function_p): Handle them. + * trans-mem.c (build_tm_load): Handle BUILT_IN_TM_LOAD_LDOUBLE. + Set call lhs before insertting it. + (build_tm_store): Handle BUILT_IN_TM_STORE_LDOUBLE. + (expand_assign_tm): Remove the old stmt before adding the new ones. + + * c-common.c (c_common_reswords): Add __tm_retry. + * c-common.h (RID_TM_RETRY): New. + * c-parser.c (struct c_parser): Add in_tm_atomic. + (c_parser_statement_after_labels): Handle RID_TM_RETRY. + (c_parser_tm_atomic): Error if !flag_tm; mirror + c_parser_omp_structured_block for parsing the contained statement. + (c_parser_tm_abort_retry): Rename from c_parser_tm_abort; error + if not contained within a __tm_atomic block; handle __tm_retry. + * c-tree.h (c_begin_tm_atomic): Remove. + * c-typeck.c (c_begin_tm_atomic): Remove. + (c_finish_tm_atomic): Don't c_end_compound_stmt. + + * testsuite/gcc.dg/tm: New directory. + +2008-10-29 Richard Henderson + + * cgraph.h (struct cgraph_edge): Steal a bit from loop_nest + for tm_atomic_call. + * cgraphbuild.c: Revert entire file. + * gimple-pretty-print.c (dump_gimple_call): Dump in-atomic. + * gimple.h (GF_CALL_IN_TM_ATOMIC): New. + (gimple_call_set_in_tm_atomic, gimple_call_in_tm_atomic_p): New. + * print-tree.c (print_node): Dump tm-clone. + * trans-mem.c (examine_call_tm): Set tm-atomic in the call stmt. + (add_stmt_to_tm_region): New. + (find_tm_clone): Remove. + (expand_call_tm): Don't call it. Exit for DECL_IS_TM_CLONE. + (function_insertion_hook_holder, ipa_tm_analyze_function, + ipa_tm_add_new_function, ipa_tm_generate_summary, + ipa_tm_create_version, ipa_tm_decide_version, ipa_tm_execute): New. + (pass_ipa_tm): Use full IPA_PASS. + * tree-pass.h: Update to match. + * tree-cfg.c (is_ctrl_altering_stmt): TM_OPS functions only + throw (visibly) if they have an eh region number. + * tree-inline.c (tree_versionable_function_p): Don't check for + inlining. + +2008-10-28 Richard Henderson + + * gimple.def (GIMPLE_TM_ATOMIC): Move before GIMPLE_RETURN. + * gimple.h (gimple_statement_tm_atomic): Inherit from + gimple_statement_with_memory_ops_base. + * tree-passes.h, passes.c (pass_tm_done): Remove. + * trans-mem.c (PROB_VERY_UNLIKELY, PROB_ALWAYS): New. + (execute_tm_done): Merge into ... + (execute_tm_edges): ... here. Collect region before splitting edges. + (pass_tm_done): Remove. + (split_and_add_tm_edge): Merge into ... + (expand_block_edges): ... here. + (checkpoint_live_in_variables): Remove. + (expand_tm_atomic): Update edge probabilities, create eh label. + * tree-cfg.c (gimple_redirect_edge_and_branch): Handle TM_ATOMIC. + * tree-eh.c (lower_try_finally): Zero this_state. + +2008-10-27 Richard Henderson + + * trans-mem.c (mark_vops_in_stmt): New. + (build_tm_load): Construct gimple directly. + (build_tm_store, expand_assign_tm): Likewise. + (expand_tm_atomic): Simplify. Mark VOPS. + (execute_tm_edges): Call it. + (pass_tm_edges): Clear gate function, update ssa. + (pass_tm_memopt): Fix name. + +2008-10-27 Richard Henderson + + * omp-low.c, gimple-low.c, gsstruct.def, tree-eh.c, + gimple-pretty-print.c, trans-mem.c, tree-nested.c, + tree-inline.c, gimple.c, gimple.h, tree-cfg.c: Revert + the gimple_omp_{set_,}body name change. Use gimple_tm_atomic_body + for GIMPLE_TM_ATOMIC nodes. + + * cp/gimplify.c: Likewise. + +2008-10-24 Richard Henderson + + * calls.c (special_function_p): Include more TM builtins. + * cfgexpand.c: Revert all changes. + * except.c (struct eh_region): Add u.transaction.tm_atomic_stmt. + (gen_eh_region_transaction): Take and store the stmt. + (for_each_tm_atomic): New. + * except.h (for_each_tm_atomic): Declare. + * gimple-pretty-print.c (dump_gimple_assign): Revert. + * gimple.c (gimple_rhs_class_table): Revert. + * gimple.h (GTMA_HAVE_CALL_INDIRECT): Remove. + (GTMA_HAVE_UNCOMMITTED_THROW): New. + * gimplify.c (gimplify_tm_atomic): Remove EH wrapping. + * gtm-builtins.def (BUILT_IN_TM_IRREVOKABLE): New. + (BUILT_IN_TM_MEMCPY): New. + (BUILT_IN_TM_LOAD_*): Mark PURE. + * passes.c (init_optimization_passes): Place TM passes. + * trans-mem.c: Rewrite. + * tree-cfg.c (make_edges): Revert. + (is_ctrl_stmt): Rewrite as switch. + (is_ctrl_altering_stmt): Likewise. Handle GIMPLE_TM_ATOMIC. + * tree-eh.c (lower_tm_atomic_eh): New. + (lower_eh_constructs_2): Record EH region for transactional stmts. + * tree-flow.h (make_tm_edge): Remove. + * tree-passes.h (pass_checkpoint_tm): Remove. + (pass_tm_init, pass_tm_mark, pass_tm_memopt, + pass_tm_edges, pass_tm_done, pass_ipa_tm): New. + * tree-ssa-operands.c (get_addr_dereference_operands): Handle + ADDR_EXPR. + (add_tm_call_ops): New. + (maybe_add_call_clobbered_vops): Use it. + (add_all_call_clobber_ops): Split out from ... + (get_asm_expr_operands): ... here. + (parse_ssa_operands): Convert to switch. + * tree.def (TM_LOAD, TM_STORE): Remove. + +2008-10-21 Richard Henderson + + * trans-mem.c: Rename from gtm-low.c. + * Makefile.in: Update to match. + +2008-10-21 Richard Henderson + + * tree-cfg.c (cleanup_dead_labels): Fix typo last change. + +2008-10-20 Richard Henderson + + * builtin-attrs.def (ATTR_RETURNS_TWICE): Remove. + (ATTR_RETURNSTWICE_NOTHROW_LIST): Remove. + * builtin-types.def: The TM builtin types are not variadic. + * calls.c (emit_call_1): Set REG_EH_REGION properly for nothrow + tm functions; add REG_TM as needed. + (special_function_p): Add ECF_TM_OPS for TM builtins. + (flags_from_decl_or_type): Add ECF_TM_OPS for TM clones. + * cfgbuild.c (control_flow_insn_p): Tidy. + (struct tmee_data, rtl_make_eh_edge_1): New. + (rtl_make_eh_edge): Use them with foreach_reachable_handler; + use foreach_reachable_transaction for TM functions. + * cfgexpand.c (gimple_assign_rhs_to_tree): Assert we don't + look past TM_LOAD/TM_STORE. + (build_tm_load, build_tm_store): New. + (gimple_to_tree): Use them. + * except.c (get_eh_region_rtl_label): New. + (frob_transaction_start): New. + (build_post_landing_pads): Call it. + (build_post_landing_pads_tm_only): New. + (finish_eh_generation): Call it. + (arh_to_landing_pad, arh_to_label, reachable_handlers): Remove. + (can_throw_internal): True for TM insns inside a transaction. + (gate_handle_eh): Enable for TM. + * except.h (reachable_handlers): Remove. + (get_eh_region_rtl_label): Declare. + * gimple.c (get_call_expr_in): Look through VIEW_CONVERT_EXPR. + * gtm-builtins.def (BUILT_IN_TM_START): Don't mark RETURNS_TWICE. + * reg-notes.def (TM): New. + * tree-eh.c (maybe_clean_or_replace_eh_stmt): Handle transactions. + * tree-optimize.c (execute_fixup_cfg): Likewise. + * tree.h (ECF_TM_OPS): New. + +2008-10-17 Richard Henderson + + * except.c (struct eh_region): Add ERT_TRANSACTION. + (gen_eh_region): Allow if flag_tm. + (gen_eh_region_transaction, get_eh_region_from_number): New. + (remove_eh_handler): Export. + (current_function_has_exception_handlers): Handle ERT_TRANSACTION. + (build_post_landing_pads, reachable_next_level): Likewise. + (collect_one_action_chain): Likewise. + (foreach_reachable_transaction): New. + * except.h: Add new exported decls. + * gimple-low.c (struct lower_data): Remove in_transaction. + (lower_tm_atomic, record_vars_into_tm): Remove. + * gimple-pretty-print.c (dump_gimple_fmt): Add %x. + (dump_gimple_assign): Handle TM_LOAD/STORE. + (dump_gimple_tm_atomic): Dump the subcode. + * gimple.h (GTMA_HAVE_ABORT, GTMA_HAVE_LOAD, GTMA_HAVE_STORE, + GTMA_HAVE_CALL_TM, GTMA_HAVE_CALL_IRREVOKABLE, + GTMA_MUST_CALL_IRREVOKABLE, GTMA_HAVE_CALL_INDIRECT): New. + (gimple_tm_atomic_subcode, gimple_tm_atomic_set_subcode): New. + * gtm-low.c (struct ltm_state, add_stmt_to_transaction, + lower_assign_tm, lower_call_tm, remove_tm_commits, + lower_tm_atomic, lower_sequence_tm, lower_sequence_no_tm): New. + (execute_lower_tm): Use them. + (TM_START_RESTORE_LIVE_IN, TM_START_ABORT): New. + (checkpoint_live_in_variables): Rewrite. + (checkpoint_tm_txn, checkpoint_tm): Remove. + (expand_tm_atomic): New. + (execute_checkpoint_tm): Use it. + (make_tm_edge_1, make_tm_edge, is_transactional_stmt): New. + (pass_lower_tm): Rename from pass_expand_tm. + * passes.c (init_optimization_passes): Run pass_lower_tm + immediately after pass_lower_eh. Run pass_checkpoint_tm + after early optimizations. + * tree-cfg.c (make_edges): Call make_tm_edge. Conditionally + create the __tm_atomic abort edge. + (cleanup_dead_labels): Handle GIMPLE_TM_ATOMIC. Avoid unnecessary + writes into the statements to update labels. + (is_ctrl_altering_stmt): Include is_transactional_stmt. + (verify_stmt): Handle transactional edges. + * tree-eh.c (collect_finally_tree): Walk GIMPLE_TM_ATOMIC. + (lower_eh_constructs_2): Create EH regions for them. + (verify_eh_edges): Handle transactional edges. + * tree-flow.h (make_tm_edge, is_transactional_stmt): Declare. + + * c-parser.c (c_parser_tm_abort): Call add_stmt. + * cgraphbuild.c (prepare_tm_clone): Disable for now. + +2008-10-15 Richard Henderson + + * builtin-attrs.def (ATTR_RETURNS_TWICE): New. + (ATTR_RETURNSTWICE_NOTHROW_LIST): New. + * builtin-types.def: Remove many TM special types. + * c-common.c (struct c_common_resword): Add __tm_atomic. + * c-common.h (RID_TM_ATOMIC): New. + * c-parser.c (c_parser_tm_abort): New. + (c_parser_omp_construct): Remove PRAGMA_GTM_ATOMIC. + * c-pragma.c (handle_pragma_optimize): Remove tm atomic pragma. + * c-pragma.h (PRAGMA_GTM_ATOMIC): Remove. + (enum pragma_gtm_clause): Remove. + (c_finish_tm_abort): Remove. + (prepare_tm_clone): Match Intel's transaction suffix. Remove + code to add an explicit handle. + * defaults.h (TINYSTM_VERSION_0_9_5, GTM_EXPL_HANDLE, + GTM_IMPL_HANDLE, TANGER): Remove. + * gimple-low.c (lower_tm_atomic): Add label after the tm_atomic. + (lower_stmt): Remove GIMPLE_GTM_RETURN, GIMPLE_GTM_ABORT. + * gimple.c (gss_for_code): Likewise. + (gimple_size): Add GSS_TM_ATOMIC. + (gimple_build_tm_atomic): Add label. + * gimple-pretty-print.c (dump_gimple_gtm_other): Remove. + * gimple.def (GIMPLE_GTM_RETURN, GIMPLE_GTM_ABORT): Remove. + * gimple.h (struct gimple_statement_tm_atomic): New. + (gimple_tm_atomic_label, gimple_tm_atomic_set_label): New. + (is_gimple_gtm): Remove. + * gimplify.c (gimplify_tm_atomic): Wrap the body in EH stuff. + * gsstruct.def (GSS_TM_ATOMIC): New. + * gtm-builtins.def: Remove conditional code, simplify interface. + * gtm-low.c (root_gtm_region, dump_gtm_region, debug_gtm_region, + debug_all_gtm_regions, new_gtm_region, free_gtm_region_1, + free_gtm_regions, build_gtm_regions_1, build_gtm_regions, + remove_gtm_stmts): Remove. + * tree-cfg.c (make_edges) [GIMPLE_TM_ATOMIC]: Make the edge to + the out label. + * tree-flow.h (struct gtm_region): Remove. + * tree.def (GTM_ABORT): Remove. + + * all files: s/GTM/TM/, s/gtm/tm/. + +2008-10-15 Richard Henderson + + * Makefile.in (gtm-low.o): Don't depend on gtm-defines.h. + * builtin-types.def: Don't include it. + * c-common.c (handle_gtm_unknown_attribute): Stub out + setting DECL_IS_GTM_UNKNOWN. + * c-decl.c (merge_decls): Don't propogate it. + * c-parser.c (c_parser_gtm): Remove decl. + * c-typeck.c (c_finish_gtm_txn): Don't special-case for OpenMP; + make that the only case. + * cgraphbuild.c (prepare_gtm_clone): Use MAIN_NAME_P. Use concat + for resetting the assembler name. + * defaults.h (TINYSTM_VERSION_0_9_5): Set. + * gimple-low.c (struct lower_data): Add in_transaction. + (mark_gtm_save_vars): Remove. + (lower_gtm_directive): Simplify. + (record_vars_into_tm): Split out from record_vars_into. When + inside a transaction, set DECL_IS_GTM_PURE_VAR. + (lower_gimple_bind): Call it. + * gimple-pretty-print.c (dump_gimple_gtm_txn): New. + (dump_gimple_gtm_other): New. + (dump_gimple_stmt): Call them. + * gimple.c (gcc_for_code): Add GTM codes. + (gimple_size): Restructure based on GSS codes. + (gimple_build_gtm_txn): New. + (walk_gimple_stmt): Add GTM codes. + (gimple_rhs_class_table): Make GTM_LOAD/STORE be GIMPLE_SINGLE_RHS. + * gimple.def (GIMPLE_GTM_TXN, GIMPLE_GTM_RETURN, GIMPLE_GTM_ABORT): New. + * gimple.h (struct gimple_statement_seq): Rename from + gimple_statement_omp. Update all users. + (is_gimple_gtm): New. + * gtm-low.c (new_gtm_region): Remove type code. + (build_gtm_regions_1): Gimplify. + (build_gtm_regions): Don't do dominance here. + (remove_gtm_stmts): Gimpify. + (collapse_gtm_regions, query_STM_for_flat_nesting): Remove. + (set_gtm_pure_var, is_gtm_pure_var): Remove. + (requires_barrier): Merge requires_read_barrier and + requires_write_barrier; rewrite to match memory variables only. + (get_real_stm_decl, get_uint_stm_decl, insert_temporary, + may_repair_rhs, compensate_for_taking_the_address, + compose_stm_store_call, compose_stm_load_call, + insert_rhs_stm_call, replace_lhs, maybe_replace_rhs_stmt, + replace_txn_mod_stmt, build_txn_call_expr, replace_txn_stmt, + setup_recover_bb, setup_begin_bb, expand_gtm_abort, + maybe_insert_stm_new, insert_stm_init_thread, + maybe_insert_stm_init_thread, insert_stm_exit_thread, + maybe_insert_stm_exit_thread, expand_gtm_txn_marker, + expand_gtm_return, insert_stm_init, insert_stm_exit, + init_label_table, record_bb_into_table, check_and_mark_edges, + instrument_edges, instrument_return_expr, expand_gtm, + annotate_gtm_function_body): Remove. + (maybe_transactify_assign, maybe_transactify_call): New. + (transactify_stmt): New. + (checkpoint_live_in_variables, checkpoint_gtm_txn): If 0. + * omp-low.c (lower_gtm_txn): Remove. + (diagnose_sb_1): Don't call it. + * passes.c (pass_checkpoint_gtm): Disable. + * tree-flow.h (NUM_BB_TXN): Remove. + (struct gtm_region): Remove txn_bbs, type. + * tree-pretty-print.c (dump_generic_node): Handle GTM codes. + * tree.def (GTM_LOAD, GTM_STORE): Add. + (GTM_RETURN): Remove. + * tree.h (GTM_DIRECTIVE_P): Remove. + (DECL_IS_GTM_UNKNOWN): Disable. + +2008-10-10 Richard Henderson + + Original work from Martin Schindewolf et al. + - Imported their 4.3 based patch into this 4.4 branch. + - Raw conflicts resolved, but not yet converted to gimple tuples.