Commit Graph

1013 Commits

Author SHA1 Message Date
Eric Botcazou
bd8c998f35 re PR rtl-optimization/50615 (ICE: in distribute_notes, at combine.c:13282 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-10-16 13:14:34 +00:00
Bernd Schmidt
268987713c rtl.texi (simple_return): Document.
* 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-27 17:38:58 +00:00
Richard Sandiford
5e8f01f434 rtl.h (set_src_cost, [...]): New functions.
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-18 12:37:27 +00:00
Richard Henderson
9a08d23082 re PR debug/49864 (ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439)
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-08-02 15:18:35 -07:00
Wei Guozhi
154516d9d2 re PR rtl-optimization/49799 (gcc arm generates illegal sbfx instruction)
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-29 01:27:29 +00:00
Bernd Schmidt
d58c1a38e5 revert: simplify-rtx.c (simplify_const_binary_operation): Use the 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-06 23:56:28 +00:00
Bernd Schmidt
5511bc5ada explow.c (trunc_int_for_mode): Use GET_MODE_PRECISION instead of 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-06 23:16:39 +00:00
Bernd Schmidt
46c9550f31 machmode.h (HWI_COMPUTABLE_MODE_P): New macro.
* 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-06 23:12:45 +00:00
Bernd Schmidt
6a4bdc7976 emit-rtl.c (paradoxical_subreg_p): New function.
* 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-06 23:11:51 +00:00
Bernd Schmidt
d0edd768de machmode.h (TRULY_NOOP_TRUNCATION_MODES_P): New macro.
* 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-06 14:44:30 +00:00
Bernd Schmidt
2d0c270fd2 cse.c (find_comparison_args): Use val_mode_signbit_set_p.
* 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-06 14:21:03 +00:00
Bernd Schmidt
ff3e08afdd simplify-rtx.c (simplify_const_binary_operation): Use the 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-06 13:36:16 +00:00
Jakub Jelinek
af421d9cf0 re PR rtl-optimization/49619 (ICE in simplify_subreg, at simplify-rtx.c:5362)
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-07-04 23:04:54 +02:00
H.J. Lu
83a8cbdab0 Don't check zero/sign extended hard registers.
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-20 10:03:16 -07:00
H.J. Lu
d1e32c4a41 Check zero/sign extended hard registers.
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-20 07:53:48 -07:00
David Li
22c5fa5fbf dumping cleanup phase 1 -- Removing TODO_dump_func
From-SVN: r175051
2011-06-14 19:39:36 +00:00
Richard Sandiford
4de4b0f267 re PR rtl-optimization/49145 (ICE in simplify_const_unary_operation, at 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-06-06 18:16:18 +00:00
Chung-Lin Tang
4f82319dc9 combine.c (simplify_comparison): Abstract out parts into...
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-08 19:30:36 +00:00
Alexandre Oliva
01a5c0abdf re PR debug/47994 (-fcompare-debug failure with -O2 -fpeel-loops -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-05-04 03:37:40 +00:00
Maxim Kuvyrkov
5157a881bb combine.c (combine_simplify_rtx): Avoid mis-simplifying conditionals for 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-25 12:06:27 +00:00
Maxim Kuvyrkov
bce204e591 combine.c (subst, [...]): Add new argument, use it to track processing of 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-15 11:13:07 +00:00
Jakub Jelinek
b4ccfed9a0 combine.c (update_cfg_for_uncondjump): Instead of testing at_end assert it 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-12 19:49:11 +02:00
Jakub Jelinek
74f091d686 re PR rtl-optimization/48549 (Combiner ICE with -g)
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-12 12:53:47 +02:00
Eric Botcazou
68bc509a5c combine.c (combine_validate_cost): Adjust comments.
* combine.c (combine_validate_cost): Adjust comments.  Set registered
	cost of I0 to zero at the end, if any.

From-SVN: r172216
2011-04-08 22:31:22 +00:00
Jakub Jelinek
4e626909c7 re PR debug/48343 (ICE compiling i586 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-07 19:57:26 +02:00
Nathan Froyd
e532f586e2 re PR bootstrap/48469 (bootstrap failure)
PR bootstrap/48469
	* combine.c (combine_instructions): #ifdef AUTO_INC_DEC links
	declaration.

From-SVN: r171998
2011-04-05 19:33:49 +00:00
Nathan Froyd
3fb7c0552c fix compilation on AUTO_INC_DEC targets
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-05 18:36:15 +00:00
Nathan Froyd
b405b27425 combine.c: Include obstack.h.
* 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-05 17:24:06 +00:00
Eric Botcazou
da29e0700f * combine.c (try_combine): Remove useless local variable.
From-SVN: r171901
2011-04-03 09:19:26 +00:00
Eric Botcazou
e8b97ccd59 combine.c (simplify_set): Try harder to find the best CC mode when 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-22 20:04:58 +00:00
Chung-Lin Tang
2abbb0fe9e combine.c (try_combine): Do simplification only call of subst() on i2 even 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-18 13:22:42 +00:00
H.J. Lu
378758560b Revert the last change on cant_combine_insn_p.
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-17 21:02:25 -07:00
H.J. Lu
7606976434 Check zero/sign extended hard registers.
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-03-17 17:29:15 -07:00
H.J. Lu
4e380b8e00 Revert cant_combine_insn_p change.
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-15 11:46:26 -08:00
H.J. Lu
8a73faf108 Check zero/sign extended hard registers.
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-15 08:50:43 -08:00
Jakub Jelinek
525a2d06d3 re PR target/47665 (ICE in trunc_int_for_mode)
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-10 12:15:23 +01:00
Steven Bosscher
d5d3781a0d invoke.texi: Remove reference to compiler internals from user documentation.
* 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-02-06 12:35:10 +00:00
DJ Delorie
5c2917ec9d re PR rtl-optimization/46878 (V850 ICE in in maybe_add_or_update_dep_1, at 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-26 17:03:47 -05:00
Jakub Jelinek
9766135bb1 re PR rtl-optimization/47157 (ICE: in calc_dfs_tree, at dominance.c:395 with -O)
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
2011-01-03 21:59:20 +01:00
Joseph Myers
c59ffc4195 hwint.c: New.
* 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-30 16:36:19 +00:00
Jakub Jelinek
01e512e27c re PR middle-end/46637 (SIGSEGV in if_then_else_cond - too deep recursion)
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-25 19:00:47 +01:00
Jakub Jelinek
073d7052e5 re PR rtl-optimization/46440 (ICE: in rtl_verify_flow_info, at cfgrtl.c:2165 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-17 14:02:31 +01:00
Eric Botcazou
a05c8f2351 re PR rtl-optimization/46490 (ACATS c460007 fails at -O2 or above)
PR rtl-optimization/46490
	* combine.c (expand_compound_operation): Fix thinko.

From-SVN: r166830
2010-11-16 22:30:19 +00:00
Eric Botcazou
f891030a48 combine.c (try_combine): Fix formatting issues, improve comments and fix a pasto.
* combine.c (try_combine): Fix formatting issues, improve comments and
	fix a pasto.

From-SVN: r166263
2010-11-03 17:53:51 +00:00
Jakub Jelinek
80ab32d69e re PR rtl-optimization/46034 (internal compiler error: segmentation fault)
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-11-03 09:30:21 +01:00
Eric Botcazou
c575a65f66 combine.c (set_nonzero_bits_and_sign_copies): Use unsigned arithmetics in 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-28 10:32:03 +00:00
Jie Zhang
8150f05c20 combine.c (try_combine): If insns need to be kept around...
* 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-25 09:37:19 +00:00
Bernd Schmidt
21016e43e2 re PR rtl-optimization/45966 (Incorrect combiner transformation.)
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
2010-10-19 00:24:36 +00:00
Eric Botcazou
9c506f103c re PR rtl-optimization/45394 (gnat fails to build on s390, trunk 20100918)
PR rtl-optimization/45394
	* combine.c (cleanup_auto_inc_dec): Remove AFTER parameter and adjust.
	(struct rtx_subst_pair): Remove AFTER field.
	(propagate_for_debug_subst): Adjust call to cleanup_auto_inc_dec.
	(propagate_for_debug): Remove MOVE parameter and adjust.
	(try_combine): In the special case where I2 is a PARALLEL, combine only
	destinations of SETs and set I2SRC to the I2 source.
	Adjust calls to propagate_for_debug throughout.
	* reload1.c (eliminate_regs_1) <ASM_OPERANDS>: Do not abort for debug
	insns.

From-SVN: r165030
2010-10-06 14:25:04 +00:00
Joseph Myers
e3339d0f33 optc-gen.awk: Generate global_options initializer instead of individual variables.
gcc:
	* optc-gen.awk: Generate global_options initializer instead of
	individual variables.  Add x_ prefix to names of structure
	members.
	* opth-gen.awk: Generate gcc_options structure.  Add x_ prefix to
	names of structure members.
	* doc/tm.texi.in (HARD_FRAME_POINTER_IS_FRAME_POINTER,
	HARD_FRAME_POINTER_IS_ARG_POINTER): Document.
	* doc/tm.texi: Regenerate.
	* alias.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
	* builtins.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER.
	* c-parser.c (disable_extension_diagnostics,
	restore_extension_diagnostics): Update names of cpp_options
	members.
	* combine.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
	* common.opt (fcompare-debug-second): Don't use Var.
	* config/alpha/alpha.h (target_flags): Remove.
	* config/arm/arm.h (HARD_FRAME_POINTER_IS_FRAME_POINTER,
	HARD_FRAME_POINTER_IS_ARG_POINTER): Define.
	* config/bfin/bfin.h (target_flags): Remove.
	* config/cris/cris.h (target_flags): Remove.
	* config/i386/i386-c.c (ix86_pragma_target_parse): Update names of
	cl_target_option members.
	* config/i386/i386.c (ix86_force_align_arg_pointer): Remove.
	(ix86_function_specific_print, ix86_valid_target_attribute_tree,
	ix86_can_inline_p): Update names of cl_target_option members.
	* config/i386/i386.h (ix86_isa_flags): Remove.
	* config/lm32/lm32.h (target_flags): Remove.
	* config/mcore/mcore.h (mcore_stack_increment): Remove.
	* config/mcore/mcore.md (addsi3): Remove extern declaration of
	flag_omit_frame_pointer.
	* config/mep/mep.h (target_flags): Remove.
	* config/mips/mips.h (HARD_FRAME_POINTER_IS_FRAME_POINTER,
	HARD_FRAME_POINTER_IS_ARG_POINTER): Define.
	* config/mmix/mmix.h (target_flags): Remove.
	* config/rs6000/rs6000.h (rs6000_xilinx_fpu, flag_pic,
	flag_expensive_optimizations): Remove.
	* config/s390/s390.h (flag_pic): Remove.
	* config/score/score-conv.h (target_flags): Remove.
	* config/sh/sh.h (sh_fixed_range_str): Remove.
	* config/spu/spu.h (target_flags, spu_fixed_range_string): Remove.
	* dbxout.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER
	* df-scan.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* diagnostic.c (diagnostic_initialize): Update names of
	diagnostic_context members.
	* diagnostic.h (diagnostic_context): Rename inhibit_warnings and
	warn_system_headers.
	(diagnostic_report_warnings_p): Update for new names.
	* dwarf2out.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER
	* emit-rtl.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER and
	HARD_FRAME_POINTER_IS_ARG_POINTER.
	* flags.h (flag_compare_debug): Declare.
	* ira.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
	* opts.c (flag_compare_debug): Define.
	(common_handle_option): Update names of diagnostic_context
	members.  Handle -fcompare-debug-second.
	(fast_math_flags_struct_set_p): Update names of cl_optimization
	members.
	* reginfo.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* regrename.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* reload.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* reload1.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* resource.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* rtl.h (HARD_FRAME_POINTER_IS_FRAME_POINTER,
	HARD_FRAME_POINTER_IS_ARG_POINTER): Define and use.
	* sel-sched.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
	* stmt.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER.

gcc/c-family:
	* c-common.c (c_cpp_error): Update names of diagnostic_context
	members.
	* c-cppbuiltin.c (c_cpp_builtins_optimize_pragma): Update names of
	cl_optimization members.
	* c-opts.c (warning_as_error_callback, c_common_handle_option,
	sanitize_cpp_opts, finish_options): Update names of cpp_options
	members.

gcc/fortran:
	* cpp.c (cpp_define_builtins): Update names of gfc_option_t
	members.
	(gfc_cpp_post_options): Update names of cpp_options members.
	(cb_cpp_error): Update names of diagnostic_context members.
	* f95-lang.c (gfc_init_builtin_functions): Update names of
	gfc_option_t members.
	* gfortran.h (gfc_option_t): Rename warn_conversion and
	flag_openmp.
	* intrinsic.c (gfc_convert_type_warn): Update names of
	gfc_option_t members.
	* options.c (gfc_init_options, gfc_post_options, set_Wall,
	gfc_handle_option): Update names of gfc_option_t members.
	* parse.c (next_free, next_fixed): Update names of gfc_option_t
	members.
	* scanner.c (pedantic): Remove extern declaration.
	(skip_free_comments, skip_fixed_comments, include_line): Update
	names of gfc_option_t members.
	* trans-decl.c (gfc_generate_function_code): Update names of
	gfc_option_t members.

gcc/java:
	* java-tree.h (flag_filelist_file, flag_assert, flag_jni,
	flag_force_classes_archive_check, flag_redundant, flag_newer,
	flag_use_divide_subroutine, flag_use_atomic_builtins,
	flag_use_boehm_gc, flag_hash_synchronization,
	flag_check_references, flag_optimize_sci, flag_indirect_classes,
	flag_indirect_dispatch, flag_store_check,
	flag_reduced_reflection): Remove.
	* jcf-dump.c (flag_newer): Remove.
	* jcf.h (quiet_flag): Remove.
	* parse.h (quiet_flag): Remove.

libcpp:
	* include/cpplib.h (cpp_options): Rename warn_deprecated,
	warn_traditional, warn_long_long and pedantic.
	* directives.c (directive_diagnostics, _cpp_handle_directive):
	Update names of cpp_options members.
	* expr.c (cpp_classify_number, eval_token): Update names of
	cpp_options members.
	* init.c (cpp_create_reader, post_options): Update names of
	cpp_options members.
	* internal.h (CPP_PEDANTIC, CPP_WTRADITIONAL): Update names of
	cpp_options members.
	* macro.c (parse_params): Update names of cpp_options members.

From-SVN: r164723
2010-09-29 15:49:14 +01:00