* tree-ssa-loop-manip.c (add_exit_phis_var): Allow virtual operands.
(find_uses_to_rename_use): Likewise.
(find_uses_to_rename_bb): Likewise.
(find_uses_to_rename_stmt): Walk over all operands.
Oleg Endo [Wed, 22 Aug 2012 22:52:17 +0000 (22:52 +0000)]
re PR target/54089 ([SH] Refactor shift patterns)
PR target/54089
* config/sh/predicates (p27_rshift_count_operand,
not_p27_rshift_count_operand): New predicates.
* config/sh/sh.c (sh_ashlsi_clobbers_t_reg_p,
sh_lshrsi_clobbers_t_reg_p, sh_dynamicalize_shift_p): Handle special
case when shift amount is 31.
(gen_ashift): Emit gen_shlr instead of gen_lshrsi3_m.
* config/sh/sh.md (ashlsi3_d): Set type to 'dyn_shift' instead
of 'arith'.
(ashlsi_c): Rename to shll. Adapt calls to gen_ashlsi_c throughout
the file.
(lshrsi3): Remove clobber from expander. Use shift_count_operand
instead of nonmemory_operand predicate for second operand. Add
handling of case lshrsi3_n_clobbers_t.
(lshrsi3_k): Use p27_rshift_count_operand for second operand.
(lshrsi3_d): Make insn_and_split. Split dynamic shift to constant
shift sequences if beneficial.
(lshrsi3_n): Make insn_and_split. Split constant shift sequence to
dynamic shift if beneficial.
(lshrsi3_n_clobbers_t): New insn_and_split.
(lshrsi3_m): Delete.
Steven Bosscher [Wed, 22 Aug 2012 21:38:03 +0000 (21:38 +0000)]
tracer.c (mark_bb_seen): Use SBITMAP_SIZE.
* tracer.c (mark_bb_seen): Use SBITMAP_SIZE.
* alias.c (MAX_ALIAS_LOOP_PASSES): Update comment with rationale,
or rather a lack thereof.
(init_alias_analysis): Propagate the latest information across
the CFG in topological order to propagate as far as possible in
each iteration. Ignore debug insns.
* config/i386/i386.c (flag_opts): Add -mlong-double-64.
(TARGET_HAS_BIONIC): Default long double to 64-bit for Bionic.
* config/i386/i386.h (LONG_DOUBLE_TYPE_SIZE): Use 64 if
TARGET_LONG_DOUBLE_64 is true.
(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): New macro.
(WIDEST_HARDWARE_FP_SIZE): Defined to 80.
* config/i386/i386.opt (mlong-double-80): New option.
(mlong-double-64): Likewise.
* config/i386/i386-c.c (ix86_target_macros): Define
__LONG_DOUBLE_64__ for TARGET_LONG_DOUBLE_64.
Richard Guenther [Wed, 22 Aug 2012 15:11:26 +0000 (15:11 +0000)]
tree-vectorizer.c (vectorize_loops): Do not call mark_virtual_operands_for_renaming.
2012-08-22 Richard Guenther <rguenther@suse.de>
* tree-vectorizer.c (vectorize_loops): Do not call
mark_virtual_operands_for_renaming.
* tree-vect-slp.c (vect_slp_transform_bb): Likewise.
Do not update SSA form here.
Dodji Seketeli [Wed, 22 Aug 2012 13:50:58 +0000 (13:50 +0000)]
Make TREE_NOTHROW use the base.nothrow_flag again
While working on something else, I noticed that debug_tree (vec), when
vec is a TREE_VEC was crashing because TREE_NOTHROW was asserting that
its argument is not a TREE_VEC, so print_node would crash.
It turned out that TREE_NOTHROW was accidentally modified by this
change set:
cp/
* cp-tree.h (TREE_INDIRECT_USING): Use TREE_LANG_FLAG_0 accessor.
(ATTR_IS_DEPENDENT): Likewise.
(ARGUMENT_PACK_INCOMPLETE_P): Use TREE_ADDRESSABLE instead of
TREE_LANG_FLAG_0 on TREE_VECs.
* tree.h (struct tree_base): Add union to make it possible to
re-use the upper 4 bytes for tree codes that do not need as
many flags as others. Move visited and default_def_flag to
common bits section in exchange for saturating_flag and
unsigned_flag. Add SSA name version and tree vec length
fields here.
(struct tree_vec): Remove length field here.
(struct tree_ssa_name): Remove version field here.
Richard Guenther [Wed, 22 Aug 2012 13:17:26 +0000 (13:17 +0000)]
re PR tree-optimization/46590 (long compile time with -O2 and many loops)
2012-08-22 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46590
* tree-ssa-alias.h (get_continuation_for_phi): Add alias query
counter output argument.
(walk_non_aliased_vuses): Add alias query counter argument
to the walker callback.
* tree-ssa-alias.c (maybe_skip_until): Add alias query counter
output argument and count alias queries.
(get_continuation_for_phi_1): Likewise.
(get_continuation_for_phi): Likewise.
(walk_non_aliased_vuses): Add alias query counter argument
to the walker callback and allow it to abort the walk by
returning -1.
* tree-ssa-pre.c (translate_vuse_through_block): Adjust.
* tree-ssa-sccvn.c (vn_reference_lookup_2): Add alias query
counter parmeter, abort walk if that is bigger than
--param sccvn-max-alias-queries-per-access.
* params.def (sccvn-max-alias-queries-per-access): New param.
* doc/invoke.texi (sccvn-max-alias-queries-per-access): Document.
Steven Bosscher [Wed, 22 Aug 2012 08:59:56 +0000 (08:59 +0000)]
tree-ssa-coalesce.c (struct ssa_conflicts_d): Make contents of this a VEC and add a bitmap obstack.
* tree-ssa-coalesce.c (struct ssa_conflicts_d): Make contents
of this a VEC and add a bitmap obstack.
(ssa_conflicts_new): Allocate the obstack and grow the VEC cleared
to the right size.
(ssa_conflicts_delete): Free the VEC and release the obstack.
(ssa_conflicts_test_p, ssa_conflicts_test_p, ssa_conflicts_add_one,
ssa_conflicts_merge, ssa_conflicts_dump): Update for above changes.
(truct live_track_d): Add another bitmap obstack here.
(new_live_track): Initialize it and use it for all bitmaps.
(delete_live_track): Don't free the bitmaps one at a time, just
release the obstack.
(create_outofssa_var_map): Fix to conform to GCC code style rules.
Joseph Myers [Wed, 22 Aug 2012 08:36:23 +0000 (09:36 +0100)]
Makefile.in (vis_hide, [...]): Do not make definitions depend on --enable-shared.
* Makefile.in (vis_hide, gen-hide-list): Do not make definitions
depend on --enable-shared.
($(lib1asmfuncs-o)): Use %.vis files independent of
--enable-shared.
* static-object.mk ($(base)$(objext), $(base).vis)
($(base)_s$(objext)): Use same rules for visibility handling as in
shared-object.mk.
Tobias Burnus [Wed, 22 Aug 2012 05:54:24 +0000 (07:54 +0200)]
trans-expr.c (gfc_copy_class_to_class, [...]): Free loop and ss data.
2012-08-22 Tobias Burnus <burnus@net-b.de>
* trans-expr.c (gfc_copy_class_to_class,
gfc_trans_arrayfunc_assign): Free loop and ss data.
* trans-intrinsic.c (gfc_trans_arrayfunc_assign): Free ss data.
Richard Guenther [Tue, 21 Aug 2012 11:48:42 +0000 (11:48 +0000)]
tree-ssa-loop-im.c (tree_ssa_lim_finalize): Properly free the affine expansion cache.
2012-08-21 Richard Guenther <rguenther@suse.de>
* tree-ssa-loop-im.c (tree_ssa_lim_finalize): Properly free
the affine expansion cache.
* tree-ssa-dom.c (free_expr_hash_elt_contents): New function,
split out from ...
(free_expr_hash_elt): ... this one.
(record_cond): Properly free a not needed hashtable element.
(lookup_avail_expr): Likewise.
* tree-into-ssa.c (init_ssa_renamer): Specify a free function
for the var_infos hashtable.
(update_ssa): Likewise.
Richard Biener [Tue, 21 Aug 2012 10:03:38 +0000 (10:03 +0000)]
cp-tree.h (TREE_INDIRECT_USING): Use TREE_LANG_FLAG_0 accessor.
2012-08-21 Richard Guenther <rguenther@suse.de>
cp/
* cp-tree.h (TREE_INDIRECT_USING): Use TREE_LANG_FLAG_0 accessor.
(ATTR_IS_DEPENDENT): Likewise.
(ARGUMENT_PACK_INCOMPLETE_P): Use TREE_ADDRESSABLE instead of
TREE_LANG_FLAG_0 on TREE_VECs.
* tree.h (struct tree_base): Add union to make it possible to
re-use the upper 4 bytes for tree codes that do not need as
many flags as others. Move visited and default_def_flag to
common bits section in exchange for saturating_flag and
unsigned_flag. Add SSA name version and tree vec length
fields here.
(struct tree_vec): Remove length field here.
(struct tree_ssa_name): Remove version field here.
Jakub Jelinek [Mon, 20 Aug 2012 18:56:49 +0000 (20:56 +0200)]
re PR rtl-optimization/54294 ([alpha] Bootstrap comparison failure due to fwprop handling of debug insns)
PR rtl-optimization/54294
* fwprop.c (all_uses_available_at): Ignore debug insns in between
def_insn and target_insn when checking whether the shortcut is
possible.
Diego Novillo [Mon, 20 Aug 2012 14:23:32 +0000 (10:23 -0400)]
Fix -ftime-report for C++ lookup.
Found this while running -ftime-report on a largish C++ source file.
We need to start TV_NAME_LOOKUP conditionally inside poplevel()
because it may be called from another lookup routine that already has
TV_NAME_LOOKUP going.
Richard Guenther [Mon, 20 Aug 2012 10:27:37 +0000 (10:27 +0000)]
name-lookup.c (store_binding_p): New predicate, split out from ...
2012-08-20 Richard Guenther <rguenther@suse.de>
* name-lookup.c (store_binding_p): New predicate, split out from ...
(store_binding): ... here. Always store binding and require
target vector with enough space.
(store_bindings): Collect to store bindings and reserve space
for them, then store them.
(store_class_bindings): Likewise.
Thomas Koenig [Sun, 19 Aug 2012 15:05:41 +0000 (15:05 +0000)]
re PR fortran/54298 (Add warning when doing equal/nonequal floating-point comparisons)
2012-08-19 Thomas König <tkoenig@gcc.gnu.org>
PR fortran/54298
* gfortran.h (struct gfc_option_t): Add warn_compare_reals.
* lang.opt: Add Wcompare-reals.
* invoke.texi: Document -Wcompare-reals.
* resolve.c (resolve_operator): If -Wcompare-reals is in effect,
warn about equality/inequality comparisions for REAL and COMPLEX.
* options.c (gfc_init_options): Set warn_compare_reals.
(set_Wall): Include warn_compare_reals in Wall.
(gfc_handle_option): Handle Wcompare_reals.
2012-08-19 Thomas König <tkoenig@gcc.gnu.org>
PR fortran/54298
* gfortran.dg/real_compare_1.f90: New test case.
* gfortran.dg/bessel_5.f90 Add -Wno-compare-reals to options.
Eric Botcazou [Sun, 19 Aug 2012 14:17:22 +0000 (14:17 +0000)]
layout.adb (Set_Elem_Alignment): Cap the alignment of access types to that of a regular access type for...
* layout.adb (Set_Elem_Alignment): Cap the alignment of access types
to that of a regular access type for non-strict-alignment platforms.
* gcc-interface/utils.c (finish_fat_pointer_type): Do not set the
alignment for non-strict-alignment platforms.
Eric Botcazou [Sun, 19 Aug 2012 14:07:58 +0000 (14:07 +0000)]
decl.c (gnat_to_gnu_entity): Use proper dummy type for the temporary COMPONENT_REF built for a derived...
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: Use proper
dummy type for the temporary COMPONENT_REF built for a derived tagged
type with discriminant.
avr-log.c (avr_log_vadump): Properly use int-promoted enum values.
* config/avr/avr-log.c (avr_log_vadump): Properly use
int-promoted enum values.
* config/avr/avr.h (struct mcu_type_s): Change `arch' from
int to enum avr_arch.
* config/avr/gen-avr-mmcu-texi.c (main): Use correct initializer.
Jan Hubicka [Sun, 19 Aug 2012 05:55:20 +0000 (07:55 +0200)]
re PR lto/45375 ([meta-bug] Issues with building Mozilla (i.e. Firefox) with LTO)
PR lto/45375
* ipa-inline.c (want_inline_small_function_p): Bypass
inline limits for hinted functions.
(edge_badness): Dump hints; decrease badness for hinted funcitons.
* ipa-inline.h (enum inline_hints_vals): New enum.
(inline_hints): New type.
(edge_growth_cache_entry): Add hints.
(dump_inline_summary): Update.
(dump_inline_hints): Declare.
(do_estimate_edge_hints): Declare.
(estimate_edge_hints): New inline function.
(reset_edge_growth_cache): Update.
* predict.c (cgraph_maybe_hot_edge_p): Do not ice on indirect edges.
* ipa-inline-analysis.c (dump_inline_hints): New function.
(estimate_edge_devirt_benefit): Return true when function should be
hinted.
(estimate_calls_size_and_time): New hints argument; set it when
devritualization happens.
(estimate_node_size_and_time): New hints argument.
(do_estimate_edge_time): Cache hints.
(do_estimate_edge_growth): Update.
(do_estimate_edge_hints): New function
re PR middle-end/53823 (FAIL: gcc.c-torture/execute/930921-1.c execution at -O0 and -O1)
PR middle-end/53823
* expmed.c (expand_mult): Skip synth_mult for negative coefficients
if the mode is larger than a wide int and it is too costly to multiply
by a positive multiplier and negate the result.
Julian Brown [Fri, 17 Aug 2012 15:06:06 +0000 (15:06 +0000)]
Makefile.in (LIB2_DIVMOD_EXCEPTION_FLAGS): Default to -fexceptions -fnon-call-exceptions if not defined.
libgcc/
* Makefile.in (LIB2_DIVMOD_EXCEPTION_FLAGS): Default to
-fexceptions -fnon-call-exceptions if not defined.
($(lib2-divmod-o), $(lib2-divmod-s-o)): Use above.
* config/arm/t-bpabi (LIB2_DIVMOD_EXCEPTION_FLAGS): Define.
gcc/testsuite/
* gcc.target/arm/div64-unwinding.c: New test.
Nick Clifton [Fri, 17 Aug 2012 09:54:51 +0000 (09:54 +0000)]
iq2000.md (cbranchsi4): Remove mode from comparison and label.
* config/iq2000/iq2000.md (cbranchsi4): Remove mode from
comparison and label.
(branch_zero): Likewise.
(branch_zero_inverted): Likewise.
(branch_equality): Likewise.
(branch_equality_inverted): Likewise.
(extend-and-compare): Disable until reload issues can be
resolved.
* config/iq2000/iq2000.c (gen_conditional_branch): Use VOIDmode
for comparison.
(iq2000_function_arg_advance): Remove CONST_CAST2.
Steven Bosscher [Fri, 17 Aug 2012 09:42:06 +0000 (09:42 +0000)]
re PR middle-end/54146 (Very slow compile with attribute((flatten)))
PR middle-end/54146
* tree-ssa-loop-im.c (lim_bitmap_obstack): New bitmap_obstack.
(memref_free): Don't free the bitmaps individually here.
(mem_ref_alloc): Allocate the bitmaps on the new bitmap obstack.
(analyze_memory_references): Likewise.
(tree_ssa_lim_initialize): Initialize the new bitmap obstack.
(tree_ssa_lim_finalize): Release it.
* dse.c (dse_bitmap_obstack): New bitmap obstack.
(dse_obstack): New obstack.
(get_group_info): Allocate the bitmaps on the new bitmap obstack.
(dse_step0): Allocate the scratch bitmap on reg_obstack. Initialize
the new bitmap obstack and normal obstack. Use XNEWVEC for bb_table.
(record_store): Allocate regs_set on reg_obstack.
(dse_step1): Allocate regs_live on reg_obstack.
(dse_step2_init): Allocate offset_map_n and offset_map_p on the new
obstack.
(dse_step3_scan): Allocate bitmaps on the new bitmap obstack.
(dse_step3): Likewise.
(dse_confluence_0): Likewise.
(dse_confluence_n): Likewise.
(dse_transfer_function): Likewise.
(dse_step7): Destroy the new obstacks, and everything allocated on
them, in one big sweep.
(rest_of_handle_dse): Update.
* cfgexpand.c (stack_var_bitmap_obstack): New bitmap obstack.
(add_stack_var_conflict): Allocate bitmaps on it.
(add_scope_conflicts_1): Likewise.
(add_scope_conflicts): Likewise.
(update_alias_info_with_stack_vars): Likewise.
(init_vars_expansion): Move TREE_USED fiddling expand_used_vars.
Initialize the new bitmap obstack.
(fini_vars_expansion): Release it.
(estimated_stack_frame_size): Use init_vars_expansion to set things up
and always clean up at the end.
(expand_used_vars): Do the TREE_USED trickery here. Always call
fini_vars_expansion.
* tree-ssa-live.h (struct tree_live_info_d): Make livein and liveout
arrays of bitmap_head to avoid one indirection per bitmap access.
(live_on_entry, live_on_exit, live_var_map, live_merge_and_clear,
make_live_on_entry): Update.
* tree-ssa-live.c (partition_view_bitmap): Don't double-free 'used'.
(liveness_bitmap_obstack): New bitmap obstack.
(remove_unused_locals): Use it to allocate all bitmaps on. Update
for livein/liveout changes in tree-ssa-live.h.
(delete_tree_live_info): Release the bitmap obstack.
(loe_visit_block, live_worklist, set_var_live_on_entry,
calculate_live_on_exit, dump_live_info): Update.
(calculate_live_ranges): Initialize the bitmap.
* tree-ssa-ter.c (ter_bitmap_obstack): New bitmap obstack.
(new_temp_expr_table): Allocate bitmap on it.
(make_dependent_on_partition, add_to_partition_kill_list,
add_dependence, process_replaceable): Likewise.
(find_replaceable_exprs): Initialize and release the new obstack here.
* df-problems.c (df_lr_add_problem): Allocate persistent bitmap
for out_of_date_transfer_functions on df_bitmap_obstack.
(df_live_add_problem): Likewise.
(df_chain_add_problem): Likewise.
(df_word_lr_add_problem): Likewise.
* doc/invoke.texi (-Wsizeof-pointer-memaccess): Document.
c/
* c-tree.h (c_last_sizeof_arg): Declare.
* c-parser.c (struct c_tree_loc_pair): New type.
(c_parser_expr_list): Add sizeof_arg argument. Fill it in if
non-NULL.
(c_parser_attributes, c_parser_objc_keywordexpr): Adjust callers.
(c_parser_postfix_expression_after_primary): Likewise. Call
sizeof_pointer_memaccess_warning if needed.
(sizeof_ptr_memacc_comptypes): New function.
* c-typeck.c (c_last_sizeof_arg): New global variable.
(c_expr_sizeof_expr, c_expr_sizeof_type): Initialize it.
cp/
* cp-tree.def (SIZEOF_EXPR): Move to c-common.def.
c-family/
* c-common.c (sizeof_pointer_memaccess_warning): New function.
* c.opt (-Wsizeof-pointer-memaccess): Add new option.
* c-opts.c (c_common_handle_option): Enable it for -Wall.
* c-common.h (sizeof_pointer_memaccess_warning): Add prototype.
* c-common.def (SIZEOF_EXPR): Moved here from cp-tree.def.
fortran/
* array.c (gfc_match_array_ref): Fix up memset arguments.
testsuite/
* gcc.dg/torture/Wsizeof-pointer-memaccess1.c: New test.