aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
AgeCommit message (Collapse)AuthorFilesLines
2011-11-10re PR rtl-optimization/51023 (likely integer wrong code bug)Jakub Jelinek1-4/+6
PR rtl-optimization/51023 * combine.c (simplify_comparison) <case SIGN_EXTEND>: Don't use val_signbit_known_clear_p for signed comparison narrowing optimization. Don't check for non-VOIDmode, use HWI_COMPUTABLE_MODE_P macro. <case ZERO_EXTEND>: Don't check for non-VOIDmode. Optimize even when const_op is equal to GET_MODE_MASK (mode), don't optimize if const_op is negative. * gcc.c-torture/execute/pr51023.c: New test. From-SVN: r181257
2011-11-08Merge from transactional-memory branch.Aldy Hernandez1-0/+1
From-SVN: r181154
2011-10-16re PR rtl-optimization/50615 (ICE: in distribute_notes, at combine.c:13282 ↵Eric Botcazou1-7/+8
with -O --param max-cse-insns=1) PR rtl-optimization/50615 * combine.c (distribute_notes) <REG_ARGS_SIZE>: Skip if I3 is a no-op. From-SVN: r180058
2011-08-27rtl.texi (simple_return): Document.Bernd Schmidt1-1/+1
* doc/rtl.texi (simple_return): Document. (parallel, PATTERN): Here too. * doc/md.texi (return): Mention it's allowed to expand to simple_return in some cases. (simple_return): Document standard pattern. * gengenrtl.c (special_rtx): SIMPLE_RETURN is special. * final.c (final_scan_insn): Use ANY_RETURN_P on body. * reorg.c (function_return_label, function_simple_return_label): New static variables, replacing... (end_of_function_label): ... this. (simplejump_or_return_p): New static function. (optimize_skip, steal_delay_list_from_fallthrough, fill_slots_from_thread): Use it. (relax_delay_slots): Likewise. Use ANY_RETURN_P on body. (rare_destination, follow_jumps): Use ANY_RETURN_P on body. (find_end_label): Take a new arg which is one of the two return rtxs. Depending on which, set either function_return_label or function_simple_return_label. All callers changed. (make_return_insns): Make both kinds. (dbr_schedule): Adjust for two kinds of end labels. * function.c (emit_return_into_block): Set JUMP_LABEL properly. * genemit.c (gen_exp): Handle SIMPLE_RETURN. (gen_expand, gen_split): Use ANY_RETURN_P. * df-scan.c (df_uses_record): Handle SIMPLE_RETURN. * rtl.def (SIMPLE_RETURN): New code. * ifcvt.c (find_if_case_1): Be more careful about redirecting jumps to the EXIT_BLOCK. * jump.c (condjump_p, condjump_in_parallel_p, any_condjump_p, returnjump_p_1): Handle SIMPLE_RETURNs. * print-rtl.c (print_rtx): Likewise. * rtl.c (copy_rtx): Likewise. * bt-load.c (compute_defs_uses_and_gen): Use ANY_RETURN_P. * combine.c (simplify_set): Likewise. * resource.c (find_dead_or_set_registers, mark_set_resources): Likewise. * emit-rtl.c (verify_rtx_sharing, classify_insn, copy_insn_1, copy_rtx_if_shared_1, mark_used_flags): Handle SIMPLE_RETURNs. (init_emit_regs): Initialize simple_return_rtx. * cfglayout.c (fixup_reorder_chain): Pass a JUMP_LABEL to force_nonfallthru_and_redirect. * rtl.h (ANY_RETURN_P): Allow SIMPLE_RETURN. (GR_SIMPLE_RETURN): New enum value. (simple_return_rtx): New macro. * basic-block.h (force_nonfallthru_and_redirect): Adjust declaration. * cfgrtl.c (force_nonfallthru_and_redirect): Take a new jump_label argument. All callers changed. Be careful about what kinds of returnjumps to generate. * config/i386/3i86.c (ix86_pad_returns, ix86_count_insn_bb, ix86_pad_short_function): Likewise. * config/arm/arm.c (arm_final_prescan_insn): Handle both kinds of return. * config/mips/mips.md (any_return): New code_iterator. (optab): Add cases for return and simple_return. (return): Expand to a simple_return. (simple_return): New pattern. (*<optab>, *<optab>_internal for any_return): New patterns. (return_internal): Remove. * config/mips/mips.c (mips_expand_epilogue): Make the last insn a simple_return_internal. From-SVN: r178135
2011-08-18rtl.h (set_src_cost, [...]): New functions.Richard Sandiford1-12/+12
gcc/ * rtl.h (set_src_cost, get_full_set_src_cost): New functions. * auto-inc-dec.c (attempt_change): Use set_src_cost instead of rtx_cost. * calls.c (precompute_register_parameters): Likewise. * combine.c (expand_compound_operation, make_extraction): Likewise. (force_to_mode, distribute_and_simplify_rtx): Likewise. * dse.c (find_shift_sequence): Likewise. * expmed.c (init_expmed, expand_mult, expand_smod_pow2): Likewise. * expr.c (compress_float_constant): Likewise. * fwprop.c (should_replace_address, try_fwprop_subst): Likewise. * gcse.c (want_to_gcse_p): Likewise. * ifcvt.c (noce_try_sign_mask): Likewise. * loop-doloop.c (doloop_optimize): Likewise. * loop-invariant.c (create_new_invariant): Likewise. * optabs.c (avoid_expensive_constant): Likewise. * postreload.c (reload_cse_simplify_set, reload_cse_simplify_operands) (try_replace_in_use, reload_cse_move2add): Likewise. * reload1.c (calculate_elim_costs_all_insns): Likewise. (note_reg_elim_costly): Likewise. * rtlanal.c (insn_rtx_cost): Likewise. * simplify-rtx.c (simplify_binary_operation_1): Likewise. * stmt.c (lshift_cheap_p): Likewise. * tree-ssa-loop-ivopts.c (seq_cost, computation_cost): Likewise. * config/avr/avr.c (final_prescan_insn): Likewise. * config/bfin/bfin.c (bfin_rtx_costs): Likewise. * config/mips/mips.c (mips_binary_cost, mips_rtx_costs): Likewise. From-SVN: r177851
2011-08-02re PR debug/49864 (ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439)Richard Henderson1-0/+10
PR target/49864 * reg-notes.def (REG_ARGS_SIZE): New. * calls.c (emit_call_1): Emit REG_ARGS_SIZE for call_pop. (expand_call): Add REG_ARGS_SIZE to emit_stack_restore. * cfgcleanup.c (old_insns_match_p): Don't allow cross-jumping to different stack levels. * combine-stack-adj.c (adjust_frame_related_expr): Remove. (maybe_move_args_size_note): New. (combine_stack_adjustments_for_block): Use it. * combine.c (distribute_notes): Place REG_ARGS_SIZE. * dwarf2cfi.c (dw_cfi_row_struct): Remove args_size member. (dw_trace_info): Add beg_true_args_size, end_true_args_size, beg_delay_args_size, end_delay_args_size, eh_head, args_size_undefined. (cur_cfa): New. (queued_args_size): Remove. (add_cfi_args_size): Assert size is non-negative. (stack_adjust_offset, dwarf2out_args_size): Remove. (dwarf2out_stack_adjust, dwarf2out_notice_stack_adjust): Remove. (notice_args_size, notice_eh_throw): New. (dwarf2out_frame_debug_def_cfa): Use cur_cfa. (dwarf2out_frame_debug_adjust_cfa): Likewise. (dwarf2out_frame_debug_cfa_offset): Likewise. (dwarf2out_frame_debug_expr): Likewise. Don't stack_adjust_offset. (dwarf2out_frame_debug): Don't handle non-frame-related-p insns. (change_cfi_row): Don't emit args_size. (maybe_record_trace_start_abnormal): Split out from ... (maybe_record_trace_start): Here. Set args_size_undefined. (create_trace_edges): Update to match. (scan_trace): Handle REG_ARGS_SIZE. (connect_traces): Connect args_size between EH insns. * emit-rtl.c (try_split): Handle REG_ARGS_SIZE. * explow.c (suppress_reg_args_size): New. (adjust_stack_1): Split out from ... (adjust_stack): ... here. (anti_adjust_stack): Use it. (allocate_dynamic_stack_space): Suppress REG_ARGS_SIZE. * expr.c (mem_autoinc_base): New. (fixup_args_size_notes): New. (emit_single_push_insn_1): Rename from emit_single_push_insn. (emit_single_push_insn): New. Generate REG_ARGS_SIZE. * recog.c (peep2_attempt): Handle REG_ARGS_SIZE. * reload1.c (reload_as_needed): Likewise. * rtl.h (fixup_args_size_notes): Declare. From-SVN: r177218
2011-07-29re PR rtl-optimization/49799 (gcc arm generates illegal sbfx instruction)Wei Guozhi1-0/+1
PR rtl-optimization/49799 * combine.c (make_compound_operation): Check if the bit field is valid before change it to bit field extraction. * gcc.dg/pr49799.c: New test case. From-SVN: r176911
2011-07-06revert: simplify-rtx.c (simplify_const_binary_operation): Use the ↵Bernd Schmidt1-2/+4
shift_truncation_mask hook instead of performing modulo by width. Revert: * simplify-rtx.c (simplify_const_binary_operation): Use the shift_truncation_mask hook instead of performing modulo by width. Compare against mode precision, not bitsize. * combine.c (combine_simplify_rtx, simplify_shift_const_1): Use shift_truncation_mask instead of constructing the value manually. From-SVN: r175949
2011-07-06explow.c (trunc_int_for_mode): Use GET_MODE_PRECISION instead of ↵Bernd Schmidt1-128/+129
GET_MODE_BITSIZE where appropriate. * explow.c (trunc_int_for_mode): Use GET_MODE_PRECISION instead of GET_MODE_BITSIZE where appropriate. * rtlanal.c (subreg_lsb_1, subreg_get_info, nonzero_bits1, num_sign_bit_copies1, canonicalize_condition, low_bitmask_len, init_num_sign_bit_copies_in_rep): Likewise. * cse.c (fold_rtx, cse_insn): Likewise. * loop-doloop.c (doloop_modify, doloop_optimize): Likewise. * simplify-rtx.c (simplify_unary_operation_1, simplify_const_unary_operation, simplify_binary_operation_1, simplify_const_binary_operation, simplify_ternary_operation, simplify_const_relational_operation, simplify_subreg): Likewise. * combine.c (try_combine, find_split_point, combine_simplify_rtx, simplify_if_then_else, simplify_set, expand_compound_operation, expand_field_assignment, make_extraction, if_then_else_cond, make_compound_operation, force_to_mode, make_field_assignment, reg_nonzero_bits_for_combine, reg_num_sign_bit_copies_for_combine, extended_count, try_widen_shift_mode, simplify_shift_const_1, simplify_comparison, record_promoted_value, simplify_compare_const, record_dead_and_set_regs_1): Likewise. From-SVN: r175946
2011-07-06machmode.h (HWI_COMPUTABLE_MODE_P): New macro.Bernd Schmidt1-45/+38
* machmode.h (HWI_COMPUTABLE_MODE_P): New macro. * combine.c (set_nonzero_bits_and_sign_copies): Use it. (find_split-point, combine_simplify_rtx, simplify_if_then_else, simplify_set, simplify_logical, expand_compound_operation, make_extraction, force_to_mode, if_then_else_cond, extended_count, try_widen_shift_mode, simplify_shift_const_1, simplify_comparison, record_value_for_reg): Likewise. * expmed.c (expand_widening_mult, expand_mult_highpart): Likewise. * simplify-rtx. c (simplify_unary_operation_1, simplify_binary_operation_1, simplify_const_relational_operation): Likewise. From-SVN: r175945
2011-07-06emit-rtl.c (paradoxical_subreg_p): New function.Bernd Schmidt1-14/+7
* emit-rtl.c (paradoxical_subreg_p): New function. * rtl.h (paradoxical_subreg_p): Declare. * combine.c (set_nonzero_bits_and_sign_copies, get_last_value, apply_distributive_law, simplify_comparison, simplify_set): Use it. * cse.c (record_jump_cond, cse_insn): Likewise. * expr.c (force_operand): Likewise. * rtlanal.c (num_sign_bit_copies1): Likewise. * reload1.c (eliminate_regs_1, strip_paradoxical_subreg): Likewise. * reload.c (push_secondary_reload, find_reloads_toplev): Likewise. (push_reload): Use precision to check for paradoxical subregs. * expmed.c (extract_bit_field_1): Likewise. From-SVN: r175944
2011-07-06machmode.h (TRULY_NOOP_TRUNCATION_MODES_P): New macro.Bernd Schmidt1-15/+9
* machmode.h (TRULY_NOOP_TRUNCATION_MODES_P): New macro. * combine.c (make_extraction, gen_lowpart_or_truncate, apply_distributive_law, simplify_comparison, reg_truncated_to_mode, record_truncated_value): Use it. * cse.c (notreg_cost): Likewise. * expmed.c (store_bit_field_1, extract_bit_field_1): Likewise. * expr.c (convert_move, convert_modes): Likewise. * optabs.c (expand_binop, expand_unop): Likewise. * postreload.c (move2add_last_label): Likewise. * regmove.c (optimize_reg_copy_3): Likewise. * rtlhooks.c (gen_lowpart_general): Likewise. * simplify-rtx.c (simplify_unary_operation_1): Likewise. From-SVN: r175921
2011-07-06cse.c (find_comparison_args): Use val_mode_signbit_set_p.Bernd Schmidt1-37/+15
* cse.c (find_comparison_args): Use val_mode_signbit_set_p. * simplify-rtx.c (mode_signbit_p): Use GET_MODE_PRECISION. (val_mode_signbit_p, val_mode_signbit_set_p): New functions. (simplify_const_unary_operation, simplify_binary_operation_1, simplify_const_binary_operation, simplify_const_relational_operation): Use them. Use GET_MODE_MASK for masking and sign-extensions. * combine.c (set_nonzero_bits_and_sign_copies, simplify_set, combine_simplify_rtx, force_to_mode, reg_nonzero_bits_for_combine, simplify_shift_const_1, simplify_comparison): Likewise. * expr.c (convert_modes): Likewise. * rtlanal.c (nonzero_bits1, canonicalize_condition): Likewise. * expmed.c (emit_cstore, emit_store_flag_1, emit_store_flag): Likewise. * rtl.h (val_mode_signbit_p, val_mode_signbit_set_p): Declare. From-SVN: r175917
2011-07-06simplify-rtx.c (simplify_const_binary_operation): Use the ↵Bernd Schmidt1-4/+2
shift_truncation_mask hook instead of performing modulo by width. * simplify-rtx.c (simplify_const_binary_operation): Use the shift_truncation_mask hook instead of performing modulo by width. Compare against mode precision, not bitsize. * combine.c (combine_simplify_rtx, simplify_shift_const_1): Use shift_truncation_mask instead of constructing the value manually. From-SVN: r175913
2011-07-04re PR rtl-optimization/49619 (ICE in simplify_subreg, at simplify-rtx.c:5362)Jakub Jelinek1-2/+7
PR rtl-optimization/49619 * combine.c (combine_simplify_rtx): In PLUS -> IOR simplification pass VOIDmode as op0_mode to recursive call, and return temp even when different from tor, just if it is not IOR of the original PLUS arguments. * gcc.dg/pr49619.c: New test. From-SVN: r175825
2011-06-20Don't check zero/sign extended hard registers.H.J. Lu1-6/+0
2011-06-20 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Don't check zero/sign extended hard registers. From-SVN: r175222
2011-06-20Check zero/sign extended hard registers.H.J. Lu1-0/+6
2011-06-20 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Check zero/sign extended hard registers. From-SVN: r175218
2011-06-14dumping cleanup phase 1 -- Removing TODO_dump_funcDavid Li1-1/+0
From-SVN: r175051
2011-06-06re PR rtl-optimization/49145 (ICE in simplify_const_unary_operation, at ↵Richard Sandiford1-1/+14
simplify-rtx.c:1322) gcc/ PR rtl-optimization/49145 * combine.c (make_compound_operation): Handle ZERO_EXTEND specially. gcc/testsuite/ PR rtl-optimization/49145 From Ryan Mansfield * gcc.c-torture/compile/pr49145.c: New test. From-SVN: r174718
2011-05-08combine.c (simplify_comparison): Abstract out parts into...Chung-Lin Tang1-217/+268
2011-05-08 Chung-Lin Tang <cltang@codesourcery.com> * combine.c (simplify_comparison): Abstract out parts into... (simplify_compare_const): ... new function. (try_combine): Generalize parallel arithmetic/compare combining to call simplify_compare_const() and CANONICALIZE_COMPARE(). From-SVN: r173552
2011-05-04re PR debug/47994 (-fcompare-debug failure with -O2 -fpeel-loops ↵Alexandre Oliva1-3/+3
-fno-rerun-cse-after-loop -fno-tree-loop-optimize -fno-web) PR debug/47994 PR debug/47919 * combine.c (try_combine): Skip debug insns at m_split tests. From-SVN: r173351
2011-04-25combine.c (combine_simplify_rtx): Avoid mis-simplifying conditionals for ↵Maxim Kuvyrkov1-1/+4
STORE_FLAG_VALUE==-1 case. * combine.c (combine_simplify_rtx): Avoid mis-simplifying conditionals for STORE_FLAG_VALUE==-1 case. Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com> From-SVN: r172930
2011-04-15combine.c (subst, [...]): Add new argument, use it to track processing of ↵Maxim Kuvyrkov1-28/+42
conditionals. * combine.c (subst, combine_simlify_rtx): Add new argument, use it to track processing of conditionals. Update all callers. (try_combine, simplify_if_then_else): Update. From-SVN: r172486
2011-04-12combine.c (update_cfg_for_uncondjump): Instead of testing at_end assert it ↵Jakub Jelinek1-5/+6
is always true. * combine.c (update_cfg_for_uncondjump): Instead of testing at_end assert it is always true. (try_combine): Don't call update_cfg_for_uncondjump for noop non-jump moves. From-SVN: r172329
2011-04-12re PR rtl-optimization/48549 (Combiner ICE with -g)Jakub Jelinek1-4/+11
PR rtl-optimization/48549 * combine.c (propagate_for_debug): Also stop after BB_END of this_basic_block. Process LAST and just stop processing after it. (combine_instructions): If last_combined_insn has been deleted, set last_combined_insn to its PREV_INSN. * g++.dg/opt/pr48549.C: New test. From-SVN: r172311
2011-04-08combine.c (combine_validate_cost): Adjust comments.Eric Botcazou1-13/+15
* combine.c (combine_validate_cost): Adjust comments. Set registered cost of I0 to zero at the end, if any. From-SVN: r172216
2011-04-07re PR debug/48343 (ICE compiling i586 ↵Jakub Jelinek1-26/+48
linux-2.6.38/drivers/staging/wlan-ng/p80211wep.c: in form_sum, at reload.c:5338) PR debug/48343 * combine.c (combine_instructions): Add last_combined_insn, update it if insn is after it, pass it to all try_combine calls. (try_combine): Add last_combined_insn parameter, pass it instead of i3 to propagate_for_debug. * gcc.dg/torture/pr48343.c: New test. From-SVN: r172108
2011-04-05re PR bootstrap/48469 (bootstrap failure)Nathan Froyd1-0/+2
PR bootstrap/48469 * combine.c (combine_instructions): #ifdef AUTO_INC_DEC links declaration. From-SVN: r171998
2011-04-05fix compilation on AUTO_INC_DEC targetsNathan Froyd1-9/+14
fix compilation on AUTO_INC_DEC targets * combine.c (combine_instructions) [AUTO_INC_DEC]: Declare links as an rtx. (try_combine) [AUTO_INC_DEC]: Declare a local link rtx. From-SVN: r171995
2011-04-05combine.c: Include obstack.h.Nathan Froyd1-125/+133
* combine.c: Include obstack.h. (struct insn_link): Define. (uid_log_links): Adjust type. (FOR_EACH_LOG_LINK): New macro. (insn_link_obstack): Declare. (alloc_insn_link): Define. (create_log_links): Call it. Use FOR_EACH_LOG_LINK and adjust type of link variables. (find_single_use, insn_a_feeds_b, combine_instructions): Likewise. (try_combine, record_promoted_values, distribute_notes): Likewise. (distribute_links): Likewise. Tweak prototype. (clear_log_links): Delete. (adjust_for_new_dest): Call alloc_insn_link. * Makefile.in (combine.o): Depend on $(OBSTACK_H). From-SVN: r171993
2011-04-03* combine.c (try_combine): Remove useless local variable.Eric Botcazou1-16/+6
From-SVN: r171901
2011-03-22combine.c (simplify_set): Try harder to find the best CC mode when ↵Eric Botcazou1-1/+15
simplifying a nested COMPARE on the RHS. * combine.c (simplify_set): Try harder to find the best CC mode when simplifying a nested COMPARE on the RHS. From-SVN: r171304
2011-03-18combine.c (try_combine): Do simplification only call of subst() on i2 even ↵Chung-Lin Tang1-6/+4
when i1 is present. 2011-03-18 Chung-Lin Tang <cltang@codesourcery.com> * combine.c (try_combine): Do simplification only call of subst() on i2 even when i1 is present. Update comments. testsuite/ * gcc.target/arm/unsigned-extend-1.c: New. From-SVN: r171138
2011-03-17Revert the last change on cant_combine_insn_p.H.J. Lu1-6/+0
2011-03-17 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Don't check zero/sign extended hard registers. From-SVN: r171125
2011-03-17Check zero/sign extended hard registers.H.J. Lu1-0/+6
gcc/ 2011-03-17 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Check zero/sign extended hard registers. gcc/testsuite/ 2011-03-17 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * gcc.dg/torture/pr47725.c: New. From-SVN: r171124
2011-02-15Revert cant_combine_insn_p change.H.J. Lu1-6/+0
gcc/ 2011-02-15 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Revert the last change. gcc/testsuite/ 2011-02-15 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * gcc.dg/torture/pr47725.c: Removed. From-SVN: r170197
2011-02-15Check zero/sign extended hard registers.H.J. Lu1-0/+6
gcc/ 2011-02-15 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Check zero/sign extended hard registers. gcc/testsuite/ 2011-02-15 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * gcc.dg/torture/pr47725.c: New. From-SVN: r170179
2011-02-10re PR target/47665 (ICE in trunc_int_for_mode)Jakub Jelinek1-1/+2
PR target/47665 * combine.c (make_compound_operation): Only change shifts into multiplication for SCALAR_INT_MODE_P. * gcc.target/i386/pr47665.c: New test. From-SVN: r170000
2011-02-06invoke.texi: Remove reference to compiler internals from user documentation.Steven Bosscher1-4/+0
* doc/invoke.texi: Remove reference to compiler internals from user documentation. * reg-notes.def: Remove REG_VALUE_PROFILE. * combine.c (distribute_notes): Do not handle REG_VALUE_PROFILE. From-SVN: r169861
2011-01-26re PR rtl-optimization/46878 (V850 ICE in in maybe_add_or_update_dep_1, at ↵DJ Delorie1-1/+7
sched-deps.c:854) PR rtl-optimization/46878 * combine.c (insn_a_feeds_b): Check for the implicit cc0 setter/user dependency as well. * gcc.dg/pr46878-1.c: New test. From-SVN: r169307
2011-01-03re PR rtl-optimization/47157 (ICE: in calc_dfs_tree, at dominance.c:395 with -O)Jakub Jelinek1-2/+11
PR rtl-optimization/47157 * combine.c (try_combine): If undobuf.other_insn becomes (set (pc) (pc)) jump, call update_cfg_for_uncondjump on it and set *new_direct_jump_p too. * gcc.c-torture/compile/pr47157.c: New test. From-SVN: r168439
2010-11-30hwint.c: New.Joseph Myers1-1/+0
* hwint.c: New. Extracted from toplev.c. * hwint.h (clz_hwi, ctz_hwi, ffs_hwi, exact_log2, floor_log2): Move from toplev.h. * toplev.c (clz_hwi, ctz_hwi, ffs_hwi, exact_log2, floor_log2): Move to hwint.c. * toplev.h (clz_hwi, ctz_hwi, ffs_hwi, exact_log2, floor_log2): Move to hwint.h. * builtins.c, combine.c, config/i386/winnt.c, double-int.c, explow.c, expmed.c, fold-const.c, ggc-page.c, ggc-zone.c, ifcvt.c, ipa-struct-reorg.c, ira-color.c, matrix-reorg.c, omp-low.c, real.c, recog.c, reload.c, rtlanal.c, simplify-rtx.c, stor-layout.c, tree-dfa.c, tree-ssa-alias.c, tree-ssa-loop-niter.c, tree-vect-data-refs.c, tree-vect-loop-manip.c, tree-vect-loop.c, tree-vect-stmts.c, tree-vrp.c: Don't include toplev.h. * genattrtab.c, genconditions.c, genemit.c, genextract.c, genoutput.c, genpeep.c, genpreds.c, genrecog.c: Don't include toplev.h in generated output. * Makefile.in (OBJS-common): Add hwint.o. Dependencies for above files changed to remove toplev.h. (hwint.o): New. (insn-attrtab.o, insn-emit.o, insn-extract.o, insn-output.o, insn-peep.o, insn-preds.o, insn-recog.o): Don't depend on toplev.h. * config/i386/t-cygming (winnt.o): Don't depend on toplev.h. * config/i386/t-interix (winnt.o): Don't depend on toplev.h. fortran: * trans-common.c: Don't include toplev.h. java: * boehm.c: Don't include toplev.h. * Make-lang.in (java/boehm.o): Don't depend on toplev.h. lto: * lto-object.c: Don't include toplev.h. * Make-lang.in (lto/lto-object.o): Don't depend on toplev.h. From-SVN: r167301
2010-11-25re PR middle-end/46637 (SIGSEGV in if_then_else_cond - too deep recursion)Jakub Jelinek1-2/+4
PR middle-end/46637 * combine.c (try_combine): When substing i2dest for i2src, pass 1 as last argument even if i0_feeds_i1_n && i1_feeds_i2_n && i0dest_in_i0src. * gcc.c-torture/compile/pr46637.c: New test. From-SVN: r167148
2010-11-17re PR rtl-optimization/46440 (ICE: in rtl_verify_flow_info, at cfgrtl.c:2165 ↵Jakub Jelinek1-1/+19
with -fstack-protector-all -fno-tree-dominator-opts -fno-tree-fre) PR rtl-optimization/46440 * combine.c (update_cfg_for_uncondjump): When changing an indirect jump into unconditional jump, remove BARRIERs from bb's footer. * gcc.dg/pr46440.c: New test. From-SVN: r166867
2010-11-16re PR rtl-optimization/46490 (ACATS c460007 fails at -O2 or above)Eric Botcazou1-3/+3
PR rtl-optimization/46490 * combine.c (expand_compound_operation): Fix thinko. From-SVN: r166830
2010-11-03combine.c (try_combine): Fix formatting issues, improve comments and fix a ↵Eric Botcazou1-19/+29
pasto. * combine.c (try_combine): Fix formatting issues, improve comments and fix a pasto. From-SVN: r166263
2010-11-03re PR rtl-optimization/46034 (internal compiler error: segmentation fault)Jakub Jelinek1-4/+9
PR rtl-optimization/46034 PR rtl-optimization/46212 PR rtl-optimization/46248 * combine.c (try_combine): If added_sets_2 where i0dest_in_i0src and i0 feeds i1 and i1 feeds i2 or i0 feeds i2, make a copy of i1src before i0dest -> i0src substitution and pass 1 instead of 0 as last argument to subst on i2pat. * gcc.c-torture/compile/pr46034.c: New test. * gcc.c-torture/compile/pr46248.c: New test. * gcc.dg/pr46212.c: New test. From-SVN: r166231
2010-10-28combine.c (set_nonzero_bits_and_sign_copies): Use unsigned arithmetics in ↵Eric Botcazou1-110/+112
masking operations. * combine.c (set_nonzero_bits_and_sign_copies): Use unsigned arithmetics in masking operations. (contains_muldiv): Likewise. (try_combine): Likewise. (find_split_point): Likewise. (combine_simplify_rtx): Likewise. (simplify_if_then_else): Likewise. (simplify_set): Likewise. (expand_compound_operation): Likewise. (expand_field_assignment): Likewise. (make_extraction): Likewise. (extract_left_shift): Likewise. (make_compound_operation): Likewise. (force_to_mode): Likewise. (make_field_assignment): Likewise. (reg_nonzero_bits_for_combine): Likewise. (simplify_shift_const_1): Likewise. (simplify_comparison): Likewise. From-SVN: r166027
2010-10-25combine.c (try_combine): If insns need to be kept around...Jie Zhang1-0/+12
* combine.c (try_combine): If insns need to be kept around, check that they can be copied in the merged instruction. testsuite/ g++.dg/opt/combine.c: New test. From-SVN: r165911
2010-10-19re PR rtl-optimization/45966 (Incorrect combiner transformation.)Bernd Schmidt1-0/+2
PR rtl-optimization/45966 * combine.c (try_combine): If added_sets_2, deal with the case where i0 feeds i1 and i1 feeds i2. From-SVN: r165674