Remove TARGET_RELAXED_ORDERING and optimize for weak memory models.
This patch removes the special casing for targets with relaxed
memory ordering and handles guard accesses with equivalent
atomic load acquire operations. In this process we change the
algorithm to load the guard variable with an atomic load that
has ACQUIRE semantics.
This then means that on targets which have weak memory models, the
fast path is inlined and can directly use a load-acquire instruction
where available (and yay! one more hook gone).
Jan Hubicka [Wed, 3 Jun 2015 23:13:49 +0000 (01:13 +0200)]
lto.c (iterative_hash_canonical_type, [...]): only hash main variants of types
* lto.c (iterative_hash_canonical_type,
gimple_register_canonical_type): only hash main variants of types
* tree.c (verify_type_variant): Verify that type and variant is
compatible.
(gimple_canonical_types_compatible_p): Look for main variants.
config.gcc (powerpc*-*-*): Add support for a new configure option --with-advance-toolchain=<xxx> which...
2015-06-03 Michael Meissner <meissner@linux.vnet.ibm.com>
* config.gcc (powerpc*-*-*): Add support for a new configure
option --with-advance-toolchain=<xxx> which overrides using the
default header files, libraries and dynamic linker.
* config/rs6000/linux64.h (SUBSUBTARGET_EXTRA_SPECS): Add new
specs to support the configure --with-advance-toolchain=<xxx>
option.
(INCLUDE_EXTRA_SPEC): Likewise.
(LINK_OS_EXTRA_SPEC32): Likewise.
(LINK_OK_EXTRA_SPEC64): Likewise.
(LINK_OS_NEW_DTAGS_SPEC): Likewise.
(DYNAMIC_LINKER_PREFIX): Likewise.
(CPP_OS_DEFAULT_SPEC): Use the new specs for providing advance
toolchain support.
(GLIBC_DYNAMIC_LINKER32): Likewise.
(GLIBC_DYNAMIC_LINKER64): Likewise.
(LINK_OS_LINUX_SPEC32): Likewise.
(LINK_OS_LINUX_SPEC64): Likewise.
* doc/install.texi (--enable-advance-toolchain=<xx>): Document new
configuration option.
Uros Bizjak [Wed, 3 Jun 2015 15:46:41 +0000 (17:46 +0200)]
re PR target/66275 (__attribute__((sysv_abi)) with x86_64-w64-mingw32-gcc generates incorrect code)
PR target/66275
* config/i386/i386.c (ix86_function_arg_regno): Use ix86_cfun_abi
to determine current function ABI.
(ix86_function_value_regno_p): Ditto.
testsuite/ChangeLog:
PR target/66275
* gcc.target/i386/pr66275.c: New test.
c/
* c-decl.c (warn_cxx_compat_finish_struct): New parameters code, record_loc.
Warn for empty struct.
(finish_struct): Pass TREE_CODE(t) and loc to warn_cxx_compat_finish_struct.
Richard Biener [Wed, 3 Jun 2015 13:10:13 +0000 (13:10 +0000)]
tree-vect-data-refs.c (vect_analyze_group_access): Properly compute GROUP_GAP for the first element.
2015-06-03 Richard Biener <rguenther@suse.de>
* tree-vect-data-refs.c (vect_analyze_group_access): Properly
compute GROUP_GAP for the first element.
* tree-vect-slp.c (vect_build_slp_tree_1): Remove restriction
on in-group gaps.
Nick Clifton [Wed, 3 Jun 2015 12:59:38 +0000 (12:59 +0000)]
rl78-real.md: Add peepholes to avoid a register copy when calling a function.
* config/rl78/rl78-real.md: Add peepholes to avoid a register
copy when calling a function.
* config/rl78/rl78.c (need_to_save): Do not push the frame
pointer in an interrupt handler prologue if it is never used.
Martin Liska [Wed, 3 Jun 2015 09:33:32 +0000 (11:33 +0200)]
Port pool-allocator memory stats to a new infrastructure.
* alloc-pool.c (allocate_pool_descriptor): Remove.
(struct pool_output_info): Likewise.
(print_alloc_pool_statistics): Likewise.
(dump_alloc_pool_statistics): Likewise.
* alloc-pool.h (struct pool_usage): New struct.
(pool_allocator::initialize): Change usage of memory statistics
to a new interface.
(pool_allocator::release): Likewise.
(pool_allocator::allocate): Likewise.
(pool_allocator::remove): Likewise.
* mem-stats-traits.h (enum mem_alloc_origin): Add new enum value
for a pool allocator.
* mem-stats.h (struct mem_location): Add new ctor.
(struct mem_usage): Add counter for number of
instances.
(mem_alloc_description::register_descriptor): New overload of
* mem-stats.h (mem_location::to_string): New function.
* bitmap.h (struct bitmap_usage): Use this new function.
* ggc-common.c (struct ggc_usage): Likewise.
the function.
Richard Biener [Wed, 3 Jun 2015 08:02:10 +0000 (08:02 +0000)]
re PR tree-optimization/63916 (value-numbering fails to forward variable addresses)
2015-06-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/63916
* tree-ssa-sccvn.c (vn_reference_maybe_forwprop_address):
Forward-propagate non-invariant addresses by splicing their
reference ops if the result isn't going to be used by PRE.
(vn_reference_lookup_3): Remove pointless assert.
Bin Cheng [Wed, 3 Jun 2015 07:33:50 +0000 (07:33 +0000)]
tree-ssa-loop-ivopts.c (dump_iv): New parameter.
* tree-ssa-loop-ivopts.c (dump_iv): New parameter.
(dump_use, dump_cand, find_induction_variables): Pass new argument
to dump_iv.
(record_use): Preserve the ssa name information in IV.
genpreds.c (mark_mode_tests): Mark all MATCH_CODEs as NO_MODE_TEST.
gcc/
* genpreds.c (mark_mode_tests): Mark all MATCH_CODEs as
NO_MODE_TEST.
(add_mode_tests): Don't add mode tests if the predicate only
accepts scalar constant integers. Otherwise, allow the mode
of "op" to be VOIDmode if the predicate does accept such integers.
rs6000-modes.def (IFmode): Define IFmode to provide access to the IBM extended double floating point mode...
2015-06-02 Michael Meissner <meissner@linux.vnet.ibm.com>
* config/rs6000/rs6000-modes.def (IFmode): Define IFmode to
provide access to the IBM extended double floating point mode if
long double is IEEE 128-bit floating point.
(KFmode): Define KFmode to provide access to IEEE 128-bit floating
point if long double is the IBM extended double type.
* config/rs6000/rs6000.opt (-mfloat128-none): New switches to
enable adding IEEE 128-bit floating point support.
(-mfloat128-software): Likewise.
(-mfloat128-sw): Likewise.
* config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Do not allow
128-bit floating point types to occupy any register if
-mlong-double-64. Do not allow use of IFmode/KFmode unless
-mfloat128-software is enabled.
(rs6000_debug_reg_global): Add IEEE 128-bit floating point debug
support.
(rs6000_option_override_internal): Add -mfloat128-* support.
(rs6000_init_builtins): Setup __ibm128 and __float128 type modes.
* config/rs6000/rs6000.h (rs6000_builtin_type_index): Add ibm128
and float128 type nodes.
(ieee128_float_type_node): Likewise.
(ibm128_float_type_node): Likewise.
David Malcolm [Tue, 2 Jun 2015 18:45:50 +0000 (18:45 +0000)]
PR c/66220: Fix false positive from -Wmisleading-indentation
gcc/c-family/ChangeLog:
PR c/66220:
* c-indentation.c (should_warn_for_misleading_indentation): Use
expand_location rather than expand_location_to_spelling_point.
Don't warn if the guarding statement is more indented than the
next/body stmts.
Richard Biener [Tue, 2 Jun 2015 12:33:02 +0000 (12:33 +0000)]
re PR debug/65549 (crash in htab_hash_string with -flto -g)
2015-06-02 Richard Biener <rguenther@suse.de>
PR debug/65549
* dwarf2out.c (lookup_context_die): New function.
(resolve_addr): Avoid forcing a full DIE for the
target of a DW_TAG_GNU_call_site during late compilation.
Instead create a stub DIE without a type if we have a
context DIE present.
Bin Cheng [Tue, 2 Jun 2015 10:19:18 +0000 (10:19 +0000)]
re PR tree-optimization/48052 (loop not vectorized if index is "unsigned int")
PR tree-optimization/48052
* cfgloop.h (struct control_iv): New.
(struct loop): New field control_ivs.
* tree-ssa-loop-niter.c : Include "stor-layout.h".
(number_of_iterations_lt): Set no_overflow information.
(number_of_iterations_exit): Init control iv in niter struct.
(record_control_iv): New.
(estimate_numbers_of_iterations_loop): Call record_control_iv.
(loop_exits_before_overflow): New. Interface factored out of
scev_probably_wraps_p.
(scev_probably_wraps_p): Factor loop niter related code into
loop_exits_before_overflow.
(free_numbers_of_iterations_estimates_loop): Free control ivs.
* tree-ssa-loop-niter.h (free_loop_control_ivs): New.
Richard Biener [Tue, 2 Jun 2015 07:50:19 +0000 (07:50 +0000)]
re PR tree-optimization/65961 (ice in vect_is_simple_use_1 with -O3)
2015-06-02 Richard Biener <rguenther@suse.de>
PR tree-optimization/65961
* tree-vect-slp.c (vect_get_and_check_slp_defs): Remove bogus
check and clarify dump message.
(vect_build_slp_tree): If all children are built up from scalars
build up the parent from scalars instead.
* tree-vect-stmts.c (vect_is_simple_use): Cleanup.
Bin Cheng [Tue, 2 Jun 2015 03:33:35 +0000 (03:33 +0000)]
re PR testsuite/52563 (FAIL: gcc.dg/tree-ssa/scev-[3,4].c scan-tree-dump-times optimized "&a" 1)
PR tree-optimization/52563
PR tree-optimization/62173
* tree-ssa-loop-ivopts.c (struct iv): New field. Reorder fields.
(alloc_iv, set_iv): New parameter.
(determine_biv_step): Delete.
(find_bivs): Inline original determine_biv_step. Pass new
argument to set_iv.
(idx_find_step): Use no_overflow information for conversion.
* tree-scalar-evolution.c (analyze_scalar_evolution_in_loop): Let
resolve_mixers handle folded_casts.
(instantiate_scev_name): Change bool parameter to bool pointer.
(instantiate_scev_poly, instantiate_scev_binary): Ditto.
(instantiate_array_ref, instantiate_scev_not): Ditto.
(instantiate_scev_3, instantiate_scev_2): Ditto.
(instantiate_scev_1, instantiate_scev_r): Ditto.
(instantiate_scev_convert, ): Change parameter. Pass argument
to chrec_convert_aggressive.
(instantiate_scev): Change argument.
(resolve_mixers): New parameter and set it.
(scev_const_prop): New argument.
* tree-scalar-evolution.h (resolve_mixers): New parameter.
* tree-chrec.c (convert_affine_scev): Call chrec_convert instead
of chrec_conert_1.
(chrec_convert): New parameter. Move definition below.
(chrec_convert_aggressive): New parameter and set it. Call
convert_affine_scev.
* tree-chrec.h (chrec_convert): New parameter.
(chrec_convert_aggressive): Ditto.
Jason Merrill [Tue, 2 Jun 2015 02:28:19 +0000 (22:28 -0400)]
re PR c++/44282 (fastcall is not mangled at all)
PR c++/44282
gcc/cp/
* mangle.c (attr_strcmp): New.
(write_CV_qualifiers_for_type): Also write out attributes that
affect type identity.
(write_type): Strip all attributes after writing qualifiers.
libiberty/
* cp-demangle.c (cplus_demangle_type): Handle arguments to vendor
extended qualifier.
Eric Botcazou [Mon, 1 Jun 2015 20:49:18 +0000 (20:49 +0000)]
gimplify.c (gimplify_modify_expr_rhs): Use simple test on the size.
* gimplify.c (gimplify_modify_expr_rhs): Use simple test on the size.
* cgraph.c (cgraph_redirect_edge_call_stmt_to_callee): Do not remove
the LHS of a no-return call if its type has variable size.
* tree-cfgcleanup.c (fixup_noreturn_call): Likewise.
* tree-cfg.c (verify_gimple_call): Accept these no-return calls.
Yuri Rumyantsev [Mon, 1 Jun 2015 17:15:31 +0000 (17:15 +0000)]
tree-vect-data-refs.c (vect_analyze_data_ref_access): Allow consecutive accesses within outer-loop with force_vectorize for...
gcc/
* tree-vect-data-refs.c (vect_analyze_data_ref_access): Allow
consecutive accesses within outer-loop with force_vectorize
for references with zero step in inner-loop.
Matthew Wahab [Mon, 1 Jun 2015 15:21:02 +0000 (15:21 +0000)]
re PR target/65697 (__atomic memory barriers not strong enough for __sync builtins)
PR target/65697
* config/aarch64/aarch64.c (aarch64_split_compare_and_swap): Check
for __sync memory models, emit initial loads and final barriers as
appropriate.
Richard Biener [Mon, 1 Jun 2015 13:55:12 +0000 (13:55 +0000)]
revert: re PR middle-end/66314 (ice in verify_loop_structure)
2015-06-01 Richard Biener <rguenther@suse.de>
Revert
2015-05-29 Richard Biener <rguenther@suse.de>
PR tree-optimization/66314
* tree-ssa-threadupdate.c (create_block_for_threading): Add
parameter that says which loop the new block belongs to.
(ssa_create_duplicates): Blocks duplicated for the threaded
path belong to the loop of the thread destination.
Martin Liska [Mon, 1 Jun 2015 12:49:17 +0000 (14:49 +0200)]
Change use to type-based pool allocator in ipa-prop.c.
* ipa-prop.c (ipa_set_jf_constant): Use new type-based pool allocator.
(ipa_edge_duplication_hook): Likewise.
(ipa_free_all_structures_after_ipa_cp): Likewise.
(ipa_free_all_structures_after_iinln): Likewise.
Martin Liska [Mon, 1 Jun 2015 12:48:40 +0000 (14:48 +0200)]
Change use to type-based pool allocator in
* ipa-profile.c (account_time_size): Use new type-based pool allocator.
(ipa_profile_generate_summary): Likewise.
(ipa_profile_read_summary): Likewise.
(ipa_profile): Likewise.
Martin Liska [Mon, 1 Jun 2015 12:48:06 +0000 (14:48 +0200)]
Change use to type-based pool allocator in
* tree-ssa-structalias.c (new_var_info): Use new type-based pool allocator.
(new_constraint): Likewise.
(init_alias_vars): Likewise.
(delete_points_to_sets): Likewise.
Martin Liska [Mon, 1 Jun 2015 12:44:44 +0000 (14:44 +0200)]
Change use to type-based pool allocator in regcprop.c.
* regcprop.c (free_debug_insn_changes): Use new type-based pool allocator.
(replace_oldest_value_reg): Likewise.
(pass_cprop_hardreg::execute): Likewise.