Commit Graph

841 Commits

Author SHA1 Message Date
James E Wilson
b5425e756b re PR rtl-optimization/27761 (combine miscompiles)
PR rtl-optimization/27761
	* combine.c (try_combine): Don't create a useless garbage SET
	if PATTERN (i2) is a PARALLEL.  If added_sets_1, save
	PATTERN (i1) resp. SET from i1src to i1dest in i1pat
	and use it to prevent accidental modification of i1src.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>

From-SVN: r119785
2006-12-12 16:03:39 +01:00
Rask Ingemann Lambertsen
c78ba53a65 combine.c (likely_spilled_retval_1): Fix masking operation.
2006-11-15  Rask Ingemann Lambertsen <rask@sygehus.dk>
	    J"orn Rennecke <joern.rennecke@st.com>

	* combine.c (likely_spilled_retval_1): Fix masking operation.
	(likely_spilled_retval_p): Use proper pattern for call to
	likely_spilled_retval_1.

Co-Authored-By: J"orn Rennecke <joern.rennecke@st.com>

From-SVN: r118855
2006-11-15 13:16:41 +00:00
Eric Botcazou
7e721950cb re PR rtl-optimization/28243 (internal consistency failure when building fontforge with -O3 -fPIC -ftracer)
PR rtl-optimization/28243
	* combine.c (distribute_notes) <REG_DEAD>: Do not consider SETs past
	the insn to which the note was originally attached.

From-SVN: r116906
2006-09-12 21:48:40 +00:00
Eric Botcazou
de097a3b99 re PR rtl-optimization/28636 (Miscompiled loop)
PR rtl-optimization/28636
	* combine.c (force_to_mode): Test for side-effects before
	substituting by zero.
	(simplify_shift_const): Likewise for zero or other constants.

From-SVN: r116827
2006-09-10 21:27:36 +00:00
Richard Sandiford
e5d7a5205e re PR middle-end/27736 (unwind-dw2-fde.c:833: fatal error: internal consistency failure)
PR rtl-optimization/27736
	* combine.c (replaced_rhs_value): New variable.
	(combine_instructions): Set it.
	(distribute_notes): When distributing a note in replaced_rhs_insn,
	check whether the value was used in replaced_rhs_value.

From-SVN: r114019
2006-05-23 15:07:00 +00:00
Richard Sandiford
1ff3ac02b5 re PR rtl-optimization/25514 (internal consistency failure)
PR rtl-optimization/25514
	* combine.c (replaced_rhs_insn): New variable.
	(combine_instructions): Set replaced_rhs_insn when trying to replace
	a SET_SRC with a REG_EQUAL note.
	(distribute_notes): Use replaced_rhs_insn when determining the live
	range of a REG_DEAD register.

gcc/testsute
	* gcc.c-torture/compile/pr25514.c: New test.

From-SVN: r113983
2006-05-22 15:58:03 +00:00
Mike Stump
c22cacf346 Whitespace fixups
From-SVN: r113893
2006-05-18 22:16:23 +00:00
Kazu Hirata
c89833429b re PR rtl-optimization/27477 (The H8 port doesn't build)
PR rtl-optimization/27477
	* combine.c (try_combine): Don't split a parallel consisting
	of two sets into two individual sets if both sets reference
	cc0.

From-SVN: r113872
2006-05-17 21:34:57 +00:00
Roger Sayle
56106c2ed0 re PR rtl-optimization/27538 (execute/20030128-1.c FAILs)
PR rtl-optimization/27538
	* combine.c (expand_compound_operation): Call gen_lowpart
	before calling simplify_shift_const.

From-SVN: r113763
2006-05-14 16:07:12 +00:00
David Edelsohn
7b282ff9a0 re PR target/27282 (ICE in final_scan_insn, at final.c:2448 - could not split insn)
2006-04-26  David Edelsohn  <edelsohn@gnu.org>
	    Paolo Bonzini  <bonzini@gnu.org>

	PR middle-end/27282
	* combine.c (simplify_and_const_int_1): Use gen_int_mode.
	(simplify_and_const_int): Same.

Co-Authored-By: Paolo Bonzini <bonzini@gnu.org>

From-SVN: r113275
2006-04-26 10:33:49 -04:00
Kazu Hirata
df6872b72d * combine.c (UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD): Remove.
From-SVN: r112062
2006-03-14 18:16:21 +00:00
Adam Nemet
f243cee6f1 combine.c (simplify_shift_const_1): Use gen_lowpart_or_truncate instead of gen_lowpart.
* combine.c (simplify_shift_const_1): Use gen_lowpart_or_truncate
	instead of gen_lowpart.

From-SVN: r111911
2006-03-09 23:05:50 +00:00
Kazu Hirata
c0220ea4c5 builtins.c, [...]: Fix comment typos.
* builtins.c, c-pragma.h, c-typeck.c, cgraph.c, cgraphunit.c,
	combine.c, common.opt, config/dfp-bit.c, config/i386/i386.c,
	config/m68k/m68k.c, config/m68k/m68k.md, config/mt/mt.c,
	config/mt/mt.h, config/s390/s390.md, df-core.c, df-problems.c,
	df-scan.c, df.h, diagnostic.c, expr.c, function.h, gimplify.c,
	loop-invariant.c, omp-low.c, opts.c, passes.c,
	rtl-factoring.c, rtlanal.c, struct-equiv.c, tree-cfgcleanup.c,
	tree-ssa-loop-niter.c, tree-ssa-loop-prefetch.c,
	tree-ssa-structalias.c, tree-ssa-threadedge.c,
	tree-ssa-threadupdate.c, tree-vect-patterns.c,
	tree-vect-transform.c, tree-vectorizer.h, tree-vrp.c,
	unwind-dw2.c: Fix comment typos.  Follow spelling conventions.

From-SVN: r111721
2006-03-04 23:05:24 +00:00
Daniel Berlin
c2924966db tree-vrp.c (execute_vrp): Return value.
2006-03-02  Daniel Berlin <dberlin@dberlin.org>

	* gcc/tree-vrp.c (execute_vrp): Return value.
	* gcc/regrename.c (rest_of_handle_regrename): Ditto.
	* gcc/tree-into-ssa.c (rewrite_into_ssa): Ditto.
	* gcc/tree-complex.c (tree_lower_complex): Ditto.
	(tree_lower_complex_O0): Ditto.
	* gcc/tracer.c (rest_of_handle_tracer): Ditto.
	* gcc/postreload-gcse.c (rest_of_handle_gcse2): Ditto.
	* gcc/postreload.c (rest_of_handle_postreload): Ditto.
	* gcc/tree-tailcall.c (execute_tail_recursion): Ditto.
	(execute_tail_calls): Ditto.
	* gcc/tree-ssa-loop-ch.c (copy_loop_headers): Ditto.
	* gcc/tree.h (init_function_for_compilation): Ditto.
	* gcc/ipa-cp.c (ipcp_driver): Ditto.
	* gcc/tree-scalar-evolution.c (scev_const_prop): Ditto.
	* gcc/tree-scalar-evolution.h (scev_const_prop): Ditto.
	* gcc/final.c (compute_alignments): Ditto.
	(rest_of_handle_final): Ditto.
	(rest_of_handle_shorten_branches): Ditto.
	(rest_of_clean_state): Ditto.
	* gcc/omp-low.c (execute_expand_omp): Ditto.
	(execute_lower_omp): Ditto.
	* gcc/tree-ssa-dse.c (tree_ssa_dse): Ditto.
	* gcc/ipa-reference.c (static_execute): Ditto.
	* gcc/tree-ssa-uncprop.c (tree_ssa_uncprop): Ditto.
	* gcc/reorg.c (rest_of_handle_delay_slots): Ditto.
	(rest_of_handle_machine_reorg): Ditto.
	* gcc/cgraphunit.c (rebuild_cgraph_edges): Ditto.
	* gcc/flow.c (recompute_reg_usage): Ditto.
	(rest_of_handle_remove_death_notes): Ditto.
	(rest_of_handle_life): Ditto.
	(rest_of_handle_flow2): Ditto.
	* gcc/tree-ssa-copyrename.c (rename_ssa_copies): Ditto.
	* gcc/tree-ssa-ccp.c (do_ssa_ccp): Ditto.
	(do_ssa_store_ccp): Ditto.
	(execute_fold_all_builtins): Ditto.
	* gcc/mode-switching.c (rest_of_handle_mode_switching): Ditto.
	* gcc/modulo-sched.c (rest_of_handle_sms): Ditto.
	* gcc/ipa-pure-const.c (static_execute): Ditto.
	* gcc/cse.c (rest_of_handle_cse): Ditto.
	(rest_of_handle_cse2): Ditto.
	* gcc/web.c (rest_of_handle_web): Ditto.
	* gcc/tree-stdarg.c (execute_optimize_stdarg): Ditto.
	* gcc/tree-ssa-math-opts.c (execute_cse_reciprocals): Ditto.
	* gcc/tree-ssa-dom.c (tree_ssa_dominator_optimize): Ditto.
	* gcc/tree-nrv.c (tree_nrv): Ditto.
	(execute_return_slot_opt): Ditto.
	* gcc/tree-ssa-alias.c (compute_may_aliases): Ditto.
	(create_structure_vars): Ditto.
	* gcc/loop-init.c (rtl_loop_init): Ditto.
	(rtl_loop_done): Ditto.
	(rtl_move_loop_invariants): Ditto.
	(rtl_unswitch): Ditto.
	(rtl_unroll_and_peel_loops): Ditto.
	(rtl_doloop): Ditto.
	* gcc/gimple-low.c (lower_function_body): Ditto.
	(mark_used_blocks): Ditto.
	* gcc/tree-ssa-sink.c (execute_sink_code): Ditto.
	* gcc/ipa-inline.c (cgraph_decide_inlining): Ditto.
	(cgraph_early_inlining): Ditto.
	* gcc/global.c (rest_of_handle_global_alloc): Ditto.
	* gcc/jump.c (cleanup_barriers): Ditto.
	(purge_line_number_notes): Ditto.
	* gcc/ifcvt.c (rest_of_handle_if_conversion): Ditto.
	(rest_of_handle_if_after_reload): Ditto.
	* gcc/tree-ssa-loop.c (tree_ssa_loop_init): Ditto.
	(tree_ssa_loop_im): Ditto.
	(tree_ssa_loop_unswitch): Ditto.
	(tree_vectorize): Ditto.
	(tree_linear_transform): Ditto.
	(tree_ssa_loop_ivcanon): Ditto.
	(tree_ssa_empty_loop): Ditto.
	(tree_ssa_loop_bounds): Ditto.
	(tree_complete_unroll): Ditto.
	(tree_ssa_loop_prefetch): Ditto.
	(tree_ssa_loop_ivopts): Ditto.
	(tree_ssa_loop_done): Ditto.
	* gcc/predict.c (tree_estimate_probability): Ditto.
	* gcc/recog.c (split_all_insns_noflow): Ditto.
	(rest_of_handle_peephole2): Ditto.
	(rest_of_handle_split_all_insns): Ditto.
	* gcc/tree-eh.c (lower_eh_constructs): Ditto.
	* gcc/regmove.c (rest_of_handle_regmove): Ditto.
	(rest_of_handle_stack_adjustments): Ditto.
	* gcc/local-alloc.c (rest_of_handle_local_alloc): Ditto.
	* gcc/function.c (instantiate_virtual_regs): Ditto.
	(init_function_for_compilation): Ditto.
	(rest_of_handle_check_leaf_regs): Ditto.
	* gcc/gcse.c (rest_of_handle_jump_bypass): Ditto.
	(rest_of_handle_gcse): Ditto.
	* gcc/ipa-type-escape.c (type_escape_execute): Ditto.
	* gcc/alias.c (rest_of_handle_cfg): Ditto.
	* gcc/tree-if-conv.c (main_tree_if_conversion): Ditto.
	* gcc/profile.c (rest_of_handle_branch_prob): Ditto.
	* gcc/tree-ssa-phiopt.c (tree_ssa_phiopt): Ditto.
	* gcc/rtl-factoring.c (rest_of_rtl_seqabstr): Ditto.
	* gcc/bt-load.c (rest_of_handle_branch_target_load_optimize): Ditto
	* gcc/tree-dfa.c (find_referenced_vars): Ditto.
	* gcc/except.c (set_nothrow_function_flags): Ditto.
	(convert_to_eh_region_ranges): Ditto.
	(rest_of_handle_eh): Ditto.
	* gcc/emit-rtl.c (unshare_all_rtl): Ditto.
	(remove_unnecessary_notes): Ditto.
	* gcc/except.h (set_nothrow_function_flags): Ditto.
	(convert_to_eh_region_ranges): Ditto.
	* gcc/cfgexpand.c (tree_expand_cfg): Ditto.
	* gcc/tree-cfgcleanup.c (merge_phi_nodes): Ditto.
	* gcc/tree-ssa-pre.c (do_pre): Ditto.
	(execute_fre): Ditto.
	* gcc/cfgcleanup.c (rest_of_handle_jump): Ditto.
	(rest_of_handle_jump2): Ditto.
	* gcc/tree-sra.c (tree_sra): Ditto.
	* gcc/tree-mudflap.c (execute_mudflap_function_ops): Ditto.
	(execute_mudflap_function_decls): Ditto.
	* gcc/tree-ssa-copy.c (do_copy_prop): Ditto.
	(do_store_copy_prop): Ditto.
	* gcc/ipa-prop.h (ipcp_driver): Ditto.
	* gcc/cfglayout.c (insn_locators_initialize): Ditto.
	* gcc/tree-ssa-forwprop.c
	(tree_ssa_forward_propagate_single_use_vars): Ditto.
	* gcc/cfglayout.h (insn_locators_initialize): Ditto.
	* gcc/tree-ssa-dce.c (tree_ssa_dce): Ditto.
	* gcc/tree-ssa.c (execute_early_warn_uninitialized): Ditto.
	(execute_late_warn_uninitialized): Ditto.
	* gcc/rtl.h (cleanup_barriers): Ditto.
	(split_all_insns_noflow): Ditto.
	(purge_line_number_notes): Ditto.
	(unshare_all_rtl): Ditto.
	(remove_unnecessary_notes): Ditto.
	(recompute_reg_usage): Ditto.
	(variable_tracking_main): Ditto.
	* gcc/integrate.c (emit_initial_value_sets): Ditto.
	* gcc/integrate.h (emit_initial_value_sets): Ditto.
	* gcc/tree-optimize.c (execute_free_datastructures): Ditto
	(execute_free_cfg_annotations): Ditto.
	(execute_fixup_cfg): Ditto.
	(execute_cleanup_cfg_pre_ipa): Ditto.
	(execute_cleanup_cfg_post_optimizing): Ditto.
	(execute_init_datastructures): Ditto.
	* gcc/tree-object-size.c (compute_object_sizes): Ditto.
	* gcc/combine.c (rest_of_handle_combine): Ditto.
	* gcc/tree-outof-ssa.c (rewrite_out_of_ssa): Ditto.
	* gcc/bb-reorder.c (duplicate_computed_gotos): Ditto.
	(rest_of_handle_reorder_blocks): Ditto.
	(rest_of_handle_partition_blocks): Ditto.
	* gcc/var-tracking.c (variable_tracking_main): Ditto.
	* gcc/tree-profile.c (tree_profiling): Ditto.
	* gcc/tree-vect-generic.c (expand_vector_operations): Ditto.
	* gcc/reg-stack.c (rest_of_handle_stack_regs): Ditto.
	* gcc/sched-rgn.c (rest_of_handle_sched): Ditto.
	(rest_of_handle_sched2): Ditto.
	* gcc/basic-block.h (free_bb_insn): Ditto.
	* gcc/tree-ssa-structalias.c (ipa_pta_execute): Ditto.
	* gcc/tree-cfg.c (execute_build_cfg): Ditto.
	(remove_useless_stmts): Ditto.
	(split_critical_edges): Ditto.
	(execute_warn_function_return): Ditto.
	(execute_warn_function_noreturn): Ditto.
	* gcc/tree-ssa-reassoc.c (execute_reassoc): Ditto.
	* gcc/cfgrtl.c (free_bb_for_insn): Ditto.
	* gcc/passes.c (execute_one_pass): Run additional
	todos returned by execute function.
	* gcc/tree-pass.h (struct tree_opt_pass): Make execute
	return a value.

From-SVN: r111643
2006-03-02 19:00:11 +00:00
Paolo Bonzini
d3b7269024 rtl.h (truncated_to_mode): Declare it.
* rtl.h (truncated_to_mode): Declare it.
	(struct rtl_hooks): Add reg_truncated_to_mode hook.
	* rtlhooks-def.h (RTL_HOOKS_REG_TRUNCATED_TO_MODE): New macro.
	(RTL_HOOKS_INITIALIZER): Include it.
	* rtlhooks.c (reg_truncated_to_mode_general): New function.
	* combine.c (RTL_HOOKS_REG_TRUNCATED_TO_MODE): Override to
	reg_truncated_to_mode.
	* rtlanal.c (truncated_to_mode): Define it.
	* simplify-rtx.c (simplify_unary_operation_1): Use it.

Co-Authored-By: Adam Nemet <anemet@caviumnetworks.com>

From-SVN: r111573
2006-02-28 20:32:20 +00:00
Adam Nemet
a487672562 combine.c (gen_lowpart_or_truncate): Call simplify_gen_unary(TRUNCATE, ...) instead of gen_rtx_TRUNCATE.
* combine.c (gen_lowpart_or_truncate): Call
	simplify_gen_unary(TRUNCATE, ...) instead of gen_rtx_TRUNCATE.

From-SVN: r111437
2006-02-25 01:35:08 +00:00
Roger Sayle
676cb929fc re PR middle-end/24952 (ICE: RTL check: expected code 'set' or 'clobber', have 'unspec' in try_combine, at combine.c:2898)
PR middle-end/24952
	* combine.c (try_combine): Explicitly check whether GET_CODE is
	a SET or a CLOBBER, instead on checking that it isn't a USE.

From-SVN: r111425
2006-02-24 19:29:34 +00:00
Jakub Jelinek
5a9e432d7e re PR middle-end/26379 (ICE on vector shift RTL simplification)
PR middle-end/26379
	* combine.c (simplify_shift_const_1): Disable nested shifts
	optimization for vector shifts.

	* gcc.target/i386/mmx-7.c: New test.

From-SVN: r111328
2006-02-21 09:09:08 +01:00
Jakub Jelinek
01ea23f3d2 re PR middle-end/26300 (ICE in trunc_int_for_mode)
PR middle-end/26300
	* combine.c (make_extraction): Bail out if ORIG_POS is negative.

	* gcc.c-torture/compile/20060215-1.c: New test.

From-SVN: r111116
2006-02-15 21:41:03 +01:00
Marcin Dalecki
5ed6ace578 tree-vrp.c: Use XNEW/XCNEW allocation wrappers.
2006-01-31  Marcin Dalecki  <martin@dalecki.de>

	* tree-vrp.c: Use XNEW/XCNEW allocation wrappers.
	* regrename.c: Ditto.
	* tree-ssa-loop-im.c: Ditto.
	* tree-dump.c: Ditto.
	* tree-complex.c: Ditto.
	* genrecog.c: Ditto.
	* tree-ssa-threadupdate.c: Ditto.
	* tracer.c: Ditto.
	* java/class.c: Ditto.
	* java/jcf-parse.c: Ditto.
	* java/resource.c: Ditto.
	* java/except.c: Ditto.
	* java/jvspec.c: Ditto.
	* java/jcf-write.c: Ditto.
	* java/jcf-path.c: Ditto.
	* java/gjavah.c: Ditto.
	* java/zextract.c: Ditto.
	* java/jcf-io.c: Ditto.
	* java/jcf.h: Ditto.
	* java/buffer.c: Ditto.
	* java/lang.c: Ditto.
	* java/parse-scan.y: Ditto.
	* java/lex.c: Ditto.
	* java/lex.h: Ditto.
	* cfgloopmanip.c: Ditto.
	* postreload-gcse.c: Ditto.
	* tree-ssa-loop-manip.c: Ditto.
	* postreload.c: Ditto.
	* tree-ssa-loop-ch.c: Ditto.
	* loop.c: Ditto.
	* ipa-cp.c: Ditto.
	* cppspec.c: Ditto.
	* diagnostic.c: Ditto.
	* final.c: Ditto.
	* genoutput.c: Ditto.
	* gcc.c: Ditto.
	* cfghooks.c: Ditto.
	* cfgloopanal.c: Ditto.
	* objc/objc-act.c: Ditto.
	* gcov.c: Ditto.
	* genextract.c: Ditto.
	* genautomata.c: Ditto.
	* pretty-print.c: Ditto.
	* genemit.c: Ditto.
	* cgraphunit.c: Ditto.
	* flow.c: Ditto.
	* df-scan.c: Ditto.
	* haifa-sched.c: Ditto.
	* dominance.c: Ditto.
	* dbxout.c: Ditto.
	* tree-ssa-loop-ivopts.c: Ditto.
	* df-core.c: Ditto.
	* mode-switching.c: Ditto.
	* modulo-sched.c: Ditto.
	* graph.c: Ditto.
	* ipa-pure-const.c: Ditto.
	* cse.c: Ditto.
	* fix-header.c: Ditto.
	* web.c: Ditto.
	* tree-stdarg.c: Ditto.
	* ipa-utils.c: Ditto.
	* loop-init.c: Ditto.
	* ipa-inline.c: Ditto.
	* cfganal.c: Ditto.
	* global.c: Ditto.
	* alloc-pool.c: Ditto.
	* dwarf2out.c: Ditto.
	* opts.c: Ditto.
	* genattrtab.c: Ditto.
	* tree-ssa-loop-ivcanon.c: Ditto.
	* predict.c: Ditto.
	* timevar.c: Ditto.
	* lcm.c: Ditto.
	* fortran/gfortranspec.c: Ditto.
	* regmove.c: Ditto.
	* local-alloc.c: Ditto.
	* langhooks.c: Ditto.
	* function.c: Ditto.
	* tree-vectorizer.c: Ditto.
	* gcse.c: Ditto.
	* ipa-type-escape.c: Ditto.
	* alias.c: Ditto.
	* tree-if-conv.c: Ditto.
	* profile.c: Ditto.
	* ipa.c: Ditto.
	* tree-data-ref.c: Ditto.
	* loop-unroll.c: Ditto.
	* treelang/treetree.c: Ditto.
	* calls.c: Ditto.
	* bt-load.c: Ditto.
	* ggc-common.c: Ditto.
	* except.c: Ditto.
	* coverage.c: Ditto.
	* cselib.c: Ditto.
	* tree-cfgcleanup.c: Ditto.
	* tree-ssa-pre.c: Ditto.
	* cfgcleanup.c: Ditto.
	* loop-invariant.c: Ditto.
	* loop-iv.c: Ditto.
	* ipa-prop.c: Ditto.
	* print-tree.c: Ditto.
	* conflict.c: Ditto.
	* ggc-page.c: Ditto.
	* sched-deps.c: Ditto.
	* regclass.c: Ditto.
	* tree-object-size.c: Ditto.
	* combine.c: Ditto.
	* bb-reorder.c: Ditto.
	* resource.c: Ditto.
	* var-tracking.c: Ditto.
	* cfgloop.c: Ditto.
	* df-problems.c: Ditto.
	* reg-stack.c: Ditto.
	* tlink.c: Ditto.
	* gccspec.c: Ditto.
	* sched-rgn.c: Ditto.
	* tree-ssa-structalias.c: Ditto.
	* tree-ssa-reassoc.c: Ditto.
	* config/darwin-c.c: Ditto.
	* config/darwin.c: Ditto.
	* config/arm/arm.c: Ditto.
	* cfgrtl.c: Ditto.
	* collect2.c: Ditto.
	* reload1.c: Ditto.

From-SVN: r110446
2006-01-31 20:56:55 +01:00
Adam Nemet
1e84b34e74 combine.c (simplify_comparison <AND>): Check TRULY_NOOP_TRUNCATION before start using a subreg.
* combine.c (simplify_comparison <AND>): Check
	TRULY_NOOP_TRUNCATION before start using a subreg.
	
	* config/mips/mips.md (*branch_zero<mode>, 
	*branch_zero<mode>_inverted, *branch_equality<mode>, 
	*branch_equality<mode>_inverted, *branch_equality<mode>_mips16): 
	Remove mode check from comparisons.

From-SVN: r110358
2006-01-29 03:08:38 +00:00
Roger Sayle
d89b36e1a2 re PR rtl-optimization/25703 (ACATS cxa4024 failure)
PR rtl-optimization/25703
	* combine.c (try_combine): Handle zero_extract and strict_low_part
	of non-lowpart SUBREGs for constant reg_subword_p set optimization.

	* gcc.target/i386/20060125-1.c: New test case.
	* gcc.target/i386/20060125-2.c: New test case.

From-SVN: r110242
2006-01-26 02:48:01 +00:00
Paolo Bonzini
81162f97bf re PR rtl-optimization/25890 (testsuite failure: gcc.c-torture/compile/20051228-1.c)
2006-01-23  Paolo Bonzini  <bonzini@gnu.org>

        PR rtl-optimization/25890
        PR rtl-optimization/25905
        * combine.c (expand_compound_operation, expand_field_assignment):
        Fail if the bitfield's final position is out of bounds.

From-SVN: r110170
2006-01-24 14:29:25 +00:00
Paolo Bonzini
79c2903212 combine.c (try_combine): Do not worry about MEMs wrapped by USEs.
2006-01-19  Paolo Bonzini  <bonzini@gnu.org>

	* combine.c (try_combine): Do not worry about MEMs wrapped by USEs.
	(expand_compound_operation, expand_field_assignment): Fail if the
	bit lengths of an extract operation are out of range.
	(make_extraction): Compute wanted_inner_mode based on the position
	and length of the extraction.  Make it extraction_mode for non-constant
	positions, and do not modify offset in that case.  When generating a
	new MEM, use a mode that can hold the extraction while keeping correct
	alignment.  Remove code that supported MEMs wrapped by USEs.
	(simplify_shift_const_1, force_to_mode) <case USE>: Remove.

From-SVN: r109961
2006-01-19 14:54:57 +00:00
Paolo Bonzini
0efa4029c4 combine.c (record_value_for_reg): Invalidate registers if INSN is null.
2005-01-16  Paolo Bonzini  <bonzini@gnu.org>

	* combine.c (record_value_for_reg): Invalidate registers
	if INSN is null.
	(record_dead_and_set_regs_1): Likewise, by passing them to
	record_value_for_reg.
	(record_dead_and_set_regs): Invalidate stores made by a
	call.  We do not combine across a call, but we still
	relied on equivalences.

From-SVN: r109759
2006-01-16 18:20:32 +00:00
Kazu Hirata
8c215327bb combine.c (combine_instructions): Make it static.
* combine.c (combine_instructions): Make it static.
	* rtl.h: Remove the prototype for combine_instructions.

From-SVN: r109746
2006-01-16 13:48:15 +00:00
Adam Nemet
4df8acd3c8 combine.c (struct reg_stat): Add new fields truncation_label and truncated_to_mode.
* combine.c (struct reg_stat): Add new fields truncation_label and
	truncated_to_mode.
	(record_value_for_reg): Reset truncated_to_mode.
	(record_truncated_value): New function.
	(check_promoted_subreg): Call it.  Rename to check_conversions.
	(combine_instructions): Rename check_promoted_subreg to
	check_conversions.
	(reg_truncated_to_mode): New function.
	(make_extraction): Use it.  Check TRULY_NOOP_TRUNCATION.
	(gen_lowpart_or_truncate): New function.
	(force_to_mode): Use it instead of gen_lowpart.

From-SVN: r109679
2006-01-13 23:24:42 +00:00
Ian Lance Taylor
abcb0cdc20 combine.c (struct undo): Remove is_int.
2006-01-11  Ian Lance Taylor <ian@airs.com>

	* combine.c (struct undo): Remove is_int.  Enumify types of undos.
	Allow undoing set of machine mode.
	(do_SUBST): Use enums instead of is_int.
	(do_SUBST_MODE): New function.
	(SUBST_MODE): New macro.
	(try_combine): Use SUBST_MODE/PUT_MODE instead of generating a new
	reg and trying to replace reg_regno_rtx with a new register.
	(undo_all): Use new enums, handle undoing a PUT_MODE change.
	(simplify_set): Use SUBST_MODE.
	(distribute_notes): Remove code that tried to update reg notes
	for regno_reg_rtx changes.

From-SVN: r109579
2006-01-11 13:09:13 +00:00
Paolo Bonzini
13991abbfc re PR rtl-optimization/25578 (gfortran version 4.2.0 20051227 - 144 new testsuite failures since 2005121)
gcc:
2006-01-03  Paolo Bonzini  <bonzini@gnu.org>

	PR rtl-optimization/25578
	* combine.c (combine_simplify_rtx, force_to_mode): Don't
	pass a parameter to simplify_shift_const if changing ASHIFTRT
	to LSHIFTRT.

gcc/testsuite:
2006-01-03  Paolo Bonzini  <bonzini@gnu.org>

	PR rtl-optimization/25578
	* gcc.c-torture/execute/20060102-1.c: New testcase.

From-SVN: r109281
2006-01-03 14:58:05 +00:00
Roger Sayle
622d525826 combine.c (reg_subword_p): New predicate to test whether the destination of a set refers to a...
* combine.c (reg_subword_p): New predicate to test whether the
	destination of a set refers to a subword/piece of a register.
	(try_combine): Generalize the code to merge the setting of a
	pseudo to a constant followed by a set of a subword of that
	register to a constant.

From-SVN: r109267
2006-01-03 07:18:48 +00:00
Adam Nemet
f13f406e12 combine.c (apply_distributive_law <SUBREG>): Check TRULY_NOOP_TRUNCATION.
* combine.c (apply_distributive_law <SUBREG>): Check
	TRULY_NOOP_TRUNCATION.

From-SVN: r109261
2006-01-03 05:05:06 +00:00
Graham Stott
01a097e8ec re PR middle-end/25568 (RTL checking bootstrap failure on i686-unknown-linux-gnu)
PR middle-end/25568
       * combine.c (simplify_shift_const_1 <case PLUS>):Fix enable-checking
       rtl bootstrap failure.

From-SVN: r109064
2005-12-26 18:58:56 +00:00
Paolo Bonzini
41e8659ef1 combine.c (simplify_shift_const): Fix typo.
2005-12-23  Paolo Bonzini  <bonzini@gnu.org>

        * combine.c (simplify_shift_const): Fix typo.  Use, whenever
	applicable, simplify_const_binary_operation.

        (simplify_shift_const): Leave only the fallback
        case when no simplification is possible.  Extract to...
        (simplify_shift_const_1): ... here.  Always create a new
        RTX instead of substituting.  Remove the signed_count variable.
        Return NULL_RTX if no substitution is possible.

        (simplify_and_const_int): Leave only the fallback
        case when no simplification is possible.  Extract to...
        (simplify_and_const_int_1): ... here.  Always create a new
        RTX instead of substituting.  Return NULL_RTX if no substitution
        is possible.

        (force_to_mode, simplify_comparison): Don't pass a non-NULL first
        parameter to simplify_and_const_int and simplify_shift_const,
        unless it is equal to the expected non-simplified result.

From-SVN: r109016
2005-12-23 16:07:53 +00:00
Roger Sayle
c2c22cd634 combine.c (try_combine): Improve splitting of binary operators by taking advantage of reassociative...
* combine.c (try_combine): Improve splitting of binary operators
	by taking advantage of reassociative transformations.

From-SVN: r108834
2005-12-20 04:17:58 +00:00
Daniel Berlin
24bd1a0b27 basic-block.h: Changed basic block numbering so that the entry block is 0 and the exit block is 1.
2005-12-17  Danny Berlin <dberlin@dberlin.org>
	    Kenneth Zadeck <zadeck@naturalbridge.com>

	* basic-block.h: Changed basic block numbering so that the entry
	block is 0 and the exit block is 1.  Changed insn iterators so
	that they are tolerant of blocks with no insns.
	* regrename.c (copyprop_hardreg_forward): Changed basic block
	numbering so that the entry block is 0 and the exit block is 1.
	* sched-ebb.c (sehedule_ebbs): Ditto.
	* tracer.c (branch_ratio_cutoff): Ditto.
	* cfgloopmanip.c (fix_loop_structure): Ditto.
	* cfghooks.c (verify_flow_info): Ditto.
	* cfg.c (compact_blocks): Ditto.
	* reorg.c (dbr_schedule): Ditto.
	* flow.c (calculate_global_regs_live, libcall_dead_p): Ditto.
	* dominance.c (calc_dfs_tree_nonrec, calc_dfs_tree,
	calculate_dominance_info): Ditto.
	* cfganal.c (create_edge_list, print_edge_list,
	flow_depth_first_order_compute, flow_dfs_compute_reverse_init,
	flow_dfs_compute_reverse_add_bb, flow_dfs_compute_reverse_execute,
	dfs_enumerate_from): Ditto.
	* global.c (global_alloc, set_up_bb_rts_numbers): Ditto.
	* ifcvt.c (find_if_case_2): Ditto.
	* cfgbuild.c (control_flow_insn_p, count_basic_blocks,
	find_basic_blocks): Ditto.
	* predict.c (predict_loops, tree_bb_level_predictions,
	predict_paths_leading_to, propagate_freq): Ditto.
	* lcm.c (compute_antinout_edge, compute_laterin,
	compute_available): Ditto.
	* function.c (thread_prologue_and_epilogue_insns): Ditto.
	* gcse.c (gcse_main, bypass_jumps): Ditto.
	* profile.c (compute_branch_probabilities,
	compute_value_histograms, branch_prob): Ditto.
	* tree-flow-inline.h (bsi_start, bsi_after_labels,
	bsi_last): Ditto.
	* tree-ssa-phiopt.c (tree_ssa_phiopt,
	blocks_in_phiopt_order): Ditto.
	* bt-load.c (compute_defs_uses_and_gen, compute_kill,
	compute_out, link_btr_uses, migrate_btr_defs): Ditto.
	* tree-dfa.c (collect_dfa_stats): Ditto.
	* cfgcleanup.c (try_forward_edges, try_optimize_cfg): Ditto.
	* cfglayout.c (fixup_reorder_chain): Ditto.
	* bb-reorder.c (reorder_basic_blocks, duplicate_computed_gotos,
	partition_hot_cold_basic_blocks): Ditto.
	* var-tracking.c (vt_find_locations): Ditto.
	* cfgloop.c (flow_loops_cfg_dump, flow_loops_find, get_loop_body): Ditto.
	* sched-rgn.c (compute_trg_info, init_regions, schedule_insns): Ditto.
	* tree-cfg.c (init_empty_tree_cfg, build_tree_cfg, make_edges
	label_to_block_fn, print_loop_ir, tree_flow_call_edges_add): Ditto.
	* tree-ssa-reassoc.c (init_reassoc): Ditto.
	* cfgrtl.c (entry_of_function, rtl_verify_flow_info,
	rtl_flow_call_edges_add, rtl_flow_call_edges_add): Ditto.
	* df.c (df_analyze_1, hybrid_search, iterative_dataflow): Ditto
	and removed unused reverse orders.
	* df.h (): Ditto.
	* combine.c: Fix document typo.



Co-Authored-By: Kenneth Zadeck <zadeck@naturalbridge.com>

From-SVN: r108713
2005-12-17 13:40:27 +00:00
Paolo Bonzini
bd1ef75776 combine.c (combine_simplify_rtx <case NOT, [...]): Move simplifications that do not require additional infrastructure...
2005-12-16  Paolo Bonzini  <bonzini@gnu.org>

	* combine.c (combine_simplify_rtx <case NOT, NEG, TRUNCATE,
	FLOAT_TRUNCATE, FLOAT_EXTEND, PLUS, MINUS, AND, IOR, XOR,
	ABS, VEC_SELECT, POPCOUNT, PARITY, FFS, FLOAT>,
	simplify_logical): Move simplifications that do not require
	additional infrastructure...
	* simplify-rtx.c (simplify_unary_operation_1,
	simplify_binary_operation_1): ... here.

From-SVN: r108634
2005-12-16 09:24:19 +00:00
Paolo Bonzini
b1257407e9 combine.c: Remove force_to_mode's fourth parameter.
2005-12-15  Paolo Bonzini  <bonzini@gnu.org>

        * combine.c: Remove force_to_mode's fourth parameter.
        (force_to_mode): Do not handle REG.
        (canon_reg_for_combine): New.
        (make_field_assignment): Use it where the removed argument was non-NULL.

From-SVN: r108564
2005-12-15 08:51:16 +00:00
Alan Modra
c54293c6e8 re PR target/21017 (ppc 64bit target not using rlwinm)
PR target/21017
	* combine.c (simplify_logical <IOR>): Simplify more patterns to
	rotates.

From-SVN: r107873
2005-12-02 16:55:13 +10:30
Dale Johannesen
f6173932d3 combine.c (find_split_point): Sign extend bitmask when changing bitfield assignment to IOR of AND.
2005-11-30  Dale Johannesen  <dalej@apple.com>
            Andrew Pinski  <pinskia@physics.uc.edu>

	* combine.c (find_split_point):  Sign extend bitmask
	when changing bitfield assignment to IOR of AND.

2005-11-30  Dale Johannesen  <dalej@apple.com>

	* gcc.c-torture/compile/pr24930.c:  New.


Co-Authored-By: Andrew Pinski <pinskia@physics.uc.edu>

From-SVN: r107731
2005-11-30 18:19:16 +00:00
Ian Lance Taylor
083a9e91be re PR rtl-optimization/24883 (fatal error: internal consistency failure building xorg-x11)
./:	PR rtl-optimization/24883
	* combine.c (combinable_i3pat): When checking whether the
	destination of i3 is used in i3, consider paradoxical subregs.
testsuite/:
	PR rtl-optimization/24883
	* gcc.c-torture/compile/pr24883.c: New test.

From-SVN: r107279
2005-11-21 05:41:36 +00:00
Joseph Myers
7cf3d07976 combine.c (try_combine): Do not run subst on i1src and i2src in the case of generating a PARALLEL for a...
* combine.c (try_combine): Do not run subst on i1src and i2src in
	the case of generating a PARALLEL for a comparison.

From-SVN: r107273
2005-11-21 01:19:00 +00:00
Joseph Myers
756191b7c5 combine.c (make_compound_operation): Swap operands of commutative operation if necessary before returning.
* combine.c (make_compound_operation): Swap operands of
	commutative operation if necessary before returning.

From-SVN: r107219
2005-11-19 12:32:23 +00:00
Alan Modra
46de9b3caf re PR rtl-optimization/22002 (internal consistency failure with -funroll-loops)
PR rtl-optimization/22002
	* combine.c (distribute_notes): Detect cases where a reg dies
	two or more times in a bb, including on the insn we are combining,
	and place the death note on the correct range.

From-SVN: r106921
2005-11-15 11:29:21 +10:30
Ian Lance Taylor
1f2a3c8f5e re PR target/22432 (Wrong code generation using MMX intrinsics on amd64)
./:	PR target/22432
	* combine.c (apply_distributive_law): Don't distribute across a
	vector mode subreg.
testsuite/:
	PR target/22432
	* gcc.target/i386/pr22432.c: New test.

From-SVN: r106555
2005-11-06 05:34:38 +00:00
Adrian Straetling
8adac33500 combine.c (make_extraction): Correct offset computation.
* combine.c (make_extraction): Correct offset computation.
	* gcc.c-torture/execute/20051012-1.c: New test.

From-SVN: r105330
2005-10-12 20:30:46 +00:00
Ian Lance Taylor
4bbae09f17 re PR rtl-optimization/13931 (combiner much slower on big basic blocks)
PR rtl-optimization/13931
	* combine.c: Revert patch of 2003-05-14, and:
	(try_combine): Only set elim_i1 and elim_i2 if the destination is
	completely killed in the appropriate insn.
	(distribute_notes): Don't skip multiple hard register test for
	elim_i1 and elim_i2.

From-SVN: r105275
2005-10-11 23:45:54 +00:00
Fariborz Jahanian
b166bfd224 Check for valid use of subreg.
Oked by Richard Henderson.

From-SVN: r104649
2005-09-26 17:42:16 +00:00
Ian Lance Taylor
8f34bde689 combine.c (make_extraction): Avoid reference outside object.
2005-08-26  Ian Lance Taylor  <ian@airs.com>

        * combine.c (make_extraction): Avoid reference outside object.

From-SVN: r103537
2005-08-26 21:52:23 +00:00
Josh Conner
2d88fcc27d re PR rtl-optimization/23241 (Invalid code generated for comparison of uchar to 255)
PR rtl-optimization/23241
	* combine.c (simplify_comparison): Fix error in determining
	whether to lift a subreg from comparison.

From-SVN: r102869
2005-08-08 18:30:09 +00:00
Paul Brook
4164b2fb16 combine.c (can_change_dest_mode): New function.
2005-08-03  Paul Brook  <paul@codesourcery.com>

	* combine.c (can_change_dest_mode): New function.
	(try_combine, simplify_set): Use it.

From-SVN: r102686
2005-08-03 13:07:31 +00:00