* doc/loop.texi: Document possibility not to perform disambiguation
of loops with multiple latches.
* cfgloopmanip.c (alp_enum_p): Removed.
(add_loop): Handle subloops. Use get_loop_body_with_size.
(create_preheader): Do not allow ENTRY_BLOCK_PTR to be preheader.
* cfghooks.c (redirect_edge_and_branch_force): Set dominator for
the new forwarder block.
(make_forwarder_block): Only call new_bb_cbk if it is not NULL.
Handle the case latch is NULL.
* tree-ssa-dom.c (tree_ssa_dominator_optimize): Avoid cfg modifications
when marking loop exits.
* ifcvt.c (if_convert): Ditto. Mark loop exits even if cfg cannot
be modified.
* loop-init.c (loop_optimizer_init): Do not modify cfg. Call
disambiguate_loops_with_multiple_latches.
* tree-cfgcleanup.c (cleanup_tree_cfg_loop): Calculate dominators
before fix_loop_structure.
* cfgloop.c: Include pointer-set.h and output.h.
(canonicalize_loop_headers, HEADER_BLOCK, LATCH_EDGE,
update_latch_info, mfb_keep_just, mfb_keep_nonlatch): Removed.
(get_loop_latch_edges, find_subloop_latch_edge_by_profile,
find_subloop_latch_edge_by_ivs, find_subloop_latch_edge,
mfb_redirect_edges_in_set, form_subloop, merge_latch_edges,
disambiguate_multiple_latches, get_loop_body_with_size,
disambiguate_loops_with_multiple_latches): New functions.
(flow_loop_dump): Dump multiple latch edges.
(flow_loop_nodes_find): Handle loops with multiple latches.
(flow_loops_find): Ditto. Do not call canonicalize_loop_headers.
(glb_enum_p): Modified.
(get_loop_body): Use get_loop_body_with_size.
* cfgloop.h (LOOPS_HAVE_RECORDED_EXITS): New flag.
(AVOID_CFG_MODIFICATIONS): New constant.
(disambiguate_loops_with_multiple_latches, add_loop,
get_loop_body_with_size): Declare.
* Makefile.in (cfgloop.o): Add pointer-set.h and output.h.
* gcc.dg/tree-ssa/loop-25.c: New test.
From-SVN: r121670
2006-02-06 Paolo Bonzini <bonzini@gnu.org>
* Makefile.in (tree-ssa-loop-ivopts.o): Add pointer-set.h dependency.
(tree-ssa-reassoc.o): Add pointer-set.h dependency.
(tree-cfg.o): Remove hashtab.h dependency.
* tree-ssa-loop-ivopts.c: Include pointer-set.h.
(struct ivopts_data): Change niters to pointer_map_t.
(struct nfe_cache_elt, nfe_hash, nfe_eq): Delete.
(niter_for_exit): Create pointer_map on demand. Change for
pointer_map API.
(tree_ssa_iv_optimize_init): Initialize data->niters to NULL.
(free_loop_data): Destroy data->niters if created and reset field.
(tree_ssa_iv_optimize_finalize): Don't delete data->niters here.
(tree_ssa_iv_optimize_loop): Check for presence of stale data.
* tree-ssa-reassoc.c: Include pointer-set.h.
(bb_rank): Change to long *.
(operand_rank): Change to pointer_map_t.
(find_operand_rank): Return long, -1 if not found. Declare as inline.
(insert_operand_rank): Accept long.
(operand_entry_hash, operand_entry_eq): Remove.
(get_rank): Return long. Adjust for changes above.
(init_reassoc): Change rank type to long. Adjust creation of bb_rank
and operand_rank.
(fini_reassoc): Delete operand_rank with pointer_map_destroy.
* tree-ssa-structalias.c (vi_for_tree): Change to pointer_map.
(struct tree_vi, tree_vi_t, tree_vi_hash, tree_vi_eq): Delete.
(insert_vi_for_tree): Rewrite for pointer_map API. Assert argument
is not NULL.
(lookup_vi_for_tree): Rewrite for pointer_map API. Return varinfo_t
directly since it cannot be NULL.
(get_vi_for_tree): Rewrite for pointer_map API.
(find_what_p_points_to): Adjust for change to lookup_vi_for_tree.
(init_alias_vars): Create vi_for_tree as pointer_map.
(delete_points_to_sets): Delete vi_for_tree using pointer_map_destroy.
* tree-cfg.c: Don't include hashtab.h.
(edge_to_cases): Declare as pointer_map.
(struct edge_to_cases_elt, edge_to_cases_hash, edge_to_cases_eq):
Delete.
(edge_to_cases_cleanup): Rewrite as pointer_map_traverse callback.
(start_recording_case_labels): Create edge_to_cases as pointer_map.
(end_recoding_case_labels): Cleanup edge_to_cases manually before
destroying it.
(record_switch_edge): Delete.
(get_cases_for_edge): Adjust for pointer_map API, inline
record_switch_edge (rewritten for new API), remove goto.
From-SVN: r121648
2007-02-06 Dorit Nuzman <dorit@il.ibm.com>
Victor Kaplansky <victork@il.ibm.com>
* tree-vectorizer.c (vect_is_simple_use): Support induction.
(vect_is_simple_reduction): Support reduction with induction as
one of the operands.
(vect_is_simple_iv_evolution): Fix formatting.
* tree-vect-analyze.c (vect_mark_stmts_to_be_vectorized): Fix
formatting. Don't mark induction phis for vectorization.
(vect_analyze_scalar_cycles): Analyze all inductions, then reductions.
* tree-vect-transform.c (get_initial_def_for_induction): New function.
(vect_get_vec_def_for_operand): Support induction.
(vect_get_vec_def_for_stmt_copy): Fix formatting and add check for
induction case.
(vectorizable_reduction): Support reduction with induction as one of
the operands.
(vectorizable_type_demotion): Use def-type of stmt argument rather
than dummy def-type.
* tree-ssa-loop.c (gate_scev_const_prop): Return the value of
flag_tree_scev_cprop.
* common.opt (tree-scev-cprop): New flag.
* tree-vect-transform.c (vect_create_destination_var): Use 'kind' in
call to vect_get_new_vect_var.
Co-Authored-By: Victor Kaplansky <victork@il.ibm.com>
From-SVN: r121643
gcc/ChangeLog:
PR debug/30189
* dwarf2out.c (modified_type_die): Follow DECL_ORIGINAL_TYPE
even if cv-qualification is the same.
gcc/testsuite/ChangeLog:
PR debug/30189
* gcc.dg/pr30189.c: New test.
From-SVN: r121638
PR target/30665
* config/cris/cris.md ("*andsi_movu", "*andsi_clear", "*andhi_movu")
("*andhi_clear", andu (casesi+45)): For size-changed operand where
memory is allowed, require !side_effects_p, not just !MEM_VOLATILE_P.
From-SVN: r121613
* config/cris/cris.md ("*andsi_movu", "*andsi_clear", "*andhi_movu")
("*andhi_clear", andu (casesi+45)): For size-changed operand where
memory is allowed, require !side_effects_p, not just !MEM_VOLATILE_P.
From-SVN: r121612
* fold-const.c (fold_unary) <REAL_PART>: Test for availability of
BUILT_IN_COS before simplifying REAL_PART(CEXPI)) to COS.
<IMAG_PART>: Likewise, check for availability of BUILT_IN_SIN.
* builtins.c (fold_builtin_sincos): Check for TARGET_C99_FUNCTIONS
before canonicalizing sincos to cexpi.
(fold_builtin_cexp): Likewise, for canonicalizing cexp to cexpi.
From-SVN: r121607
* config/alpha/alpha.c (alpha_add_builtins): New Helper function.
Set TREE_READONLY and TREE_NOTHROW directly, not via attributes.
(alpha_init_builtins): Use alpha_add_builtins to process tables.
From-SVN: r121603
gcc/
* doc/tm.texi (DWARF_ALT_FRAME_RETURN_COLUMN): Do not require
DWARF_FRAME_RETURN_COLUMN to be a general register.
* dwarf2out.c (init_return_column_size): New function, split from...
(expand_builtin_init_dwarf_reg_sizes): ...here. Allow both
DWARF_FRAME_RETURN_COLUMN and DWARF_ALT_FRAME_RETURN_COLUMN
to be nongeneral registers.
* config/m68k/m68k.h (DWARF_FRAME_REGNUM): Only map FP and
integer registers.
(DWARF_FRAME_REGISTERS, DWARF_FRAME_RETURN_COLUMN): Define.
(DWARF_ALT_FRAME_RETURN_COLUMN): Define.
From-SVN: r121593
PR middle-end/30696
* ipa-inline.c (cgraph_clone_inlined_nodes): When there are unanalyzed
nodes in cgraph, don't remove offline copy of the function.
From-SVN: r121582
* tree-sra.c (sra_walk_expr): Add linebreaks. BITFIELD_REFs into
vectors might cause maybe_lookup_element_for_expr to be called
on non-sra-candidate.
From-SVN: r121578
2007-02-04 Richard Guenther <rguenther@suse.de>
PR middle-end/30636
* fold-const.c (try_move_mult_to_index): Make sure to not
overflow one dimension of a multi-dimensional array access.
* g++.dg/warn/pr30636.C: New testcase.
* g++.dg/tree-ssa/tmmti-2.C: XFAIL parts.
From-SVN: r121575
* tree-optimize.c (has_abnormal_outgoing_edge_p): Move to tree-inline.
(execute_fixup_cfg): Break out the abnormal goto code.
* tree-inline.c (has_abnormal_outgoing_edge_p): Move here from
tree-optimize.c.
(make_nonlocal_label_edges): Move here from execute_fixup_cfg.
(optimize_inline_calls): Call make_nonlocal_label_edges.
Co-Authored-By: Eric Botcazou <ebotcazou@libertysurf.fr>
From-SVN: r121572
* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Return
true when something was changed.
(rename_ssa_copies): When something was changed, do
TODO_remove_unused_locals.
* tree-ssa-forwprop.c (tree_ssa_forward_propagate_single_use_value):
add TODO_remove_unused_locals when instruction was removed.
From-SVN: r121571
* ipa-inline.c (try_inline): Improve debug output; work on already
inline edges too.
(cgraph_decide_inlining_incrementally): Indent; improve debug output;
call try_inline for already inlined edges too when flattening;
inline also functions that make callee growth but overall unit size
reduce.
From-SVN: r121570
2007-02-03 Douglas Gregor <doug.gregor@gmail.com>
* c-opts.c (c_common_post_options): If C++0x mode is enabled, don't
warn about C++0x compatibility.
From-SVN: r121564
PR gcov-profile/30650
* value-prof.c (stringop_block_profile): Fix handling of size counter;
do not divide by zero for never executed counters.
(tree_find_values_to_profile): Fix counters.
* gcov-ui.h (GCOV_COUNTER_AVERAGE, GCOV_COUNTER_IOR): Fix comments.
From-SVN: r121554
* lower-subreg.c (simple_move_operand): New static function,
broken out of simple_move. Reject LABEL_REF, SYMBOL_REF, and HIGH
operands.
(simple_move): Call simple_move_operand.
(find_decomposable_subregs): Add special handling of MEMs.
(can_decompose_p): Rename from cannot_decompose_p. Reverse
meaning of return value. If we see a hard register, test whether
it can store a word_mode value. Change all callers.
From-SVN: r121553
* pa.md (addvdi3, addvsi3, subvdi3, subvsi3, negvdi2, negvsi2): New
ftrapv insns and expanders.
(subdi3): Change define_expand operand 1 to arith11_operand, and
operand 2 to reg_or_0_operand. Change constraints of 64-bit insn
pattern to handle reg_or_0 operands. Revise 32-bit insn pattern to
handle 11-bit constants and reg_or_0 operands in operands 1 and 2,
respectively.
From-SVN: r121552
* simplify-rtx.c (simplify_relational_operation_1): Implement some
canonicalization transformations that attempt to simplify integer
constant comparisons to become comparisons against zero.
From-SVN: r121544
* config/darwin9.h (DARWIN_LINKER_GENERATES_ISLANDS): Add.
* config/rs6000/rs6000.c (DARWIN_GENERATE_ISLANDS): Add.
(output_call): Use DARWIN_GENERATE_ISLANDS to decide when to
generate a branch island.
Radar 4967371
From-SVN: r121534