2011-02-11 Richard Sandiford <email address hidden>
gcc/
* cse.c (count_reg_usage): Check side_effects_p. Remove the
separate check for volatile asms.
gcc/testsuite/
* gcc.dg/torture/volatile-pic-1.c: New test.
2011-02-02 Richard Sandiford <email address hidden>
gcc/
Backport from mainline:
2011-01-23 Bernd Schmidt <email address hidden>
Richard Sandiford <email address hidden>
PR rtl-optimization/47166
* reload1.c (emit_reload_insns): Disable the spill_reg_store
mechanism for PRE_MODIFY and POST_MODIFY.
(inc_for_reload): For PRE_MODIFY, return the insn that sets the
reloadreg.
gcc/testsuite/
* gcc.c-torture/execute/postmod-1.c: New test.
2011-02-02 Richard Sandiford <email address hidden>
gcc/testsuite/
PR target/47553
* gcc.target/arm/neon-vld-1.c: New test.
gcc/
PR target/47553
* config/arm/predicates.md (neon_lane_number): Accept 0..15.
2011-02-02 Richard Sandiford <email address hidden>
gcc/
PR target/47551
* config/arm/arm.c (coproc_secondary_reload_class): Handle
structure modes. Don't check neon_vector_mem_operand for
vector or structure modes.
gcc/testsuite/
PR target/47551
* gcc.target/arm/neon-modes-2.c: New test.
2011-02-24 Chung-Lin Tang <email address hidden>
Backport from FSF mainline:
2010-08-10 Bernd Schmidt <email address hidden>
PR bootstrap/45177
* config/arm/arm.c (multiple_operation_profitable_p): Move xscale
test here from arm_gen_load_multiple_1.
(arm_gen_load_multiple_1, arm_gen_store_multiple_1): Use
multiple_operation_profitable_p.
2011-01-11 Ramana Radhakrishnan <email address hidden>
* config/arm/t-arm: Fix up last commit.
2011-01-11 Ramana Radhakrishnan <email address hidden>
* config/arm/t-arm: Update MD_INCLUDES to include
all the files correctly.
* config/arm/arm.md: Update comments.
2011-02-28 Andrew Stubbs <email address hidden>
LP:709453
Revert:
2010-07-26 Julian Brown <email address hidden>
Merge from Sourcery G++ 4.4:
Jie Zhang <email address hidden>
Issue #7122
gcc/
* config/arm/vfp.md (movdf_vfp): Add load double 0.0 case.
(thumb2_movdf_vfp): Likewise. Require that one of the operands be a
register.
* config/arm/constraints.md (D0): New constraint.
gcc/testsuite/
* gcc.target/arm/neon-load-df0.c: New test.
2011-02-22 Andrew Stubbs <email address hidden>
Merge from FSF 4.5 branch r170352 (pre 4.5.3).
2011-02-08 Andrew Stubbs <email address hidden>
Backport from FSF mainline:
2010-06-30 H.J. Lu <email address hidden>
PR target/44721
* config/i386/i386.md (peephole2 for arithmetic ops with memory):
Fix last commit.
2010-06-30 Richard Guenther <email address hidden>
PR target/44722
* config/i386/i386.md (peephole2 for fix:SSEMODEI24): Guard
against oscillation with reverse peephole2.
2010-07-01 Bernd Schmidt <email address hidden>
PR target/44727
* config/i386/i386.md (peephole2 for arithmetic ops with memory):
Make sure operand 0 dies.
2010-12-03 Yao Qi <email address hidden>
* config/arm/arm-ldmstm.ml: Rewrite ldm/stm RTL patterns to fix
regressions.
* config/arm/ldmstm.md: Regenreate.
2010-12-03 Yao Qi <email address hidden>
Backport from FSF mainline:
2010-08-02 Bernd Schmidt <email address hidden>
PR target/40457
* config/arm/arm.h (arm_regs_in_sequence): Declare.
* config/arm/arm-protos.h (emit_ldm_seq, emit_stm_seq,
load_multiple_sequence, store_multiple_sequence): Delete
declarations.
(arm_gen_load_multiple, arm_gen_store_multiple): Adjust
declarations.
* config/arm/ldmstm.md: New file.
* config/arm/arm.c (arm_regs_in_sequence): New array.
(load_multiple_sequence): Now static. New args SAVED_ORDER,
CHECK_REGS. All callers changed.
If SAVED_ORDER is nonnull, copy the computed order into it.
If CHECK_REGS is false, don't sort REGS. Handle Thumb mode.
(store_multiple_sequence): Now static. New args NOPS_TOTAL,
SAVED_ORDER, REG_RTXS and CHECK_REGS. All callers changed.
If SAVED_ORDER is nonnull, copy the computed order into it.
If CHECK_REGS is false, don't sort REGS. Set up REG_RTXS just
like REGS. Handle Thumb mode.
(arm_gen_load_multiple_1): New function, broken out of
arm_gen_load_multiple.
(arm_gen_store_multiple_1): New function, broken out of
arm_gen_store_multiple.
(arm_gen_multiple_op): New function, with code from
arm_gen_load_multiple and arm_gen_store_multiple moved here.
(arm_gen_load_multiple, arm_gen_store_multiple): Now just
wrappers around arm_gen_multiple_op. Remove argument UP, all callers
changed.
(gen_ldm_seq, gen_stm_seq, gen_const_stm_seq): New functions.
* config/arm/predicates.md (commutative_binary_operator): New.
(load_multiple_operation, store_multiple_operation): Handle more
variants of these patterns with different starting offsets. Handle
Thumb-1.
* config/arm/arm.md: Include "ldmstm.md".
(ldmsi_postinc4, ldmsi_postinc4_thumb1, ldmsi_postinc3, ldmsi_postinc2,
ldmsi4, ldmsi3, ldmsi2, stmsi_postinc4, stmsi_postinc4_thumb1,
stmsi_postinc3, stmsi_postinc2, stmsi4, stmsi3, stmsi2 and related
peepholes): Delete.
* config/arm/ldmstm.md: New file.
* config/arm/arm-ldmstm.ml: New file.
* config/arm/arm.c (arm_rtx_costs_1): Remove second clause from the
if statement which adds extra costs to frame-related expressions.
2010-05-06 Bernd Schmidt <email address hidden>
* config/arm/arm.h (MAX_LDM_STM_OPS): New macro.
* config/arm/arm.c (multiple_operation_profitable_p,
compute_offset_order): New static functions.
(load_multiple_sequence, store_multiple_sequence): Use them.
Replace constant 4 with MAX_LDM_STM_OPS. Compute order[0] from
memory offsets, not register numbers.
(emit_ldm_seq, emit_stm_seq): Replace constant 4 with MAX_LDM_STM_OPS.
2010-04-16 Bernd Schmidt <email address hidden>
* recog.h (struct recog_data): New field is_operator.
(struct insn_operand_data): New field is_operator.
* recog.c (extract_insn): Set recog_data.is_operator.
* genoutput.c (output_operand_data): Emit code to set the
is_operator field.
* reload.c (find_reloads): Use it rather than testing for an
empty constraint string.
2011-01-14 Bernd Schmidt <email address hidden>
gcc/
* function.c (thread_prologue_and_epilogue_insns): Avoid uninitialized
variable.
2011-01-12 Bernd Schmidt <email address hidden>
gcc/
* config/s390/s390.c (s390_emit_epilogue): Don't use gen_rtx_RETURN.
* config/rx/rx.c (gen_rx_rtsd_vector): Likewise.
* config/m68hc11/m68hc11.md (return): Likewise.
* config/cris/cris.c (cris_expand_return): Likewise.
* config/m68k/m68k.c (m68k_expand_epilogue): Likewise.
* config/picochip/picochip.c (picochip_expand_epilogue): Likewise.
* config/h8300/h8300.c (h8300_push_pop, h8300_expand_epilogue):
Likewise.
* config/v850/v850.c (expand_epilogue): Likewise.
* config/bfin/bfin.c (bfin_expand_call): Likewise.
2011-01-04 Catherine Moore <email address hidden>
gcc/
* config/rs6000/rs6000.c (rs6000_make_savres_rtx): Change
gen_rtx_RETURN to ret_rtx.
(rs6000_emit_epilogue): Likewise.
(rs6000_output_mi_thunk): Likewise.
2011-01-03 Bernd Schmidt <email address hidden>
gcc/
* doc/tm.texi (RETURN_ADDR_REGNUM): Document.
* doc/md.texi (simple_return): Document pattern.
(return): Add a sentence to clarify.
* doc/rtl.texi (simple_return): Document.
* doc/invoke.texi (Optimize Options): Document -fshrink-wrap.
* common.opt (fshrink-wrap): New.
* opts.c (decode_options): Set it for -O2 and above.
* gengenrtl.c (special_rtx): PC, CC0, RETURN and SIMPLE_RETURN
are special.
* rtl.h (ANY_RETURN_P): New macro.
(global_rtl_index): Add GR_RETURN and GR_SIMPLE_RETURN.
(ret_rtx, simple_return_rtx): New macros.
* genemit.c (gen_exp): RETURN and SIMPLE_RETURN have unique rtxs.
(gen_expand, gen_split): Use ANY_RETURN_P.
* rtl.c (copy_rtx): RETURN and SIMPLE_RETURN are shared.
* emit-rtl.c (verify_rtx_sharing): Likewise.
(skip_consecutive_labels): Return the argument if it is a return rtx.
(classify_insn): Handle both kinds of return.
(init_emit_regs): Create global rtl for ret_rtx and simple_return_rtx.
* df-scan.c (df_uses_record): Handle SIMPLE_RETURN.
* rtl.def (SIMPLE_RETURN): New.
* rtlanal.c (tablejump_p): Check JUMP_LABEL for returns.
* final.c (final_scan_insn): Recognize both kinds of return.
* reorg.c (function_return_label, function_simple_return_label): New
static variables.
(end_of_function_label): Remove.
(simplejump_or_return_p): New static function.
(find_end_label): Add a new arg, KIND. All callers changed.
Depending on KIND, look for a label suitable for return or
simple_return.
(make_return_insns): Make corresponding changes.
(get_jump_flags): Check JUMP_LABELs for returns.
(follow_jumps): Likewise.
(get_branch_condition): Check target for return patterns rather
than NULL.
(own_thread_p): Likewise for thread.
(steal_delay_list_from_target): Check JUMP_LABELs for returns.
Use simplejump_or_return_p.
(fill_simple_delay_slots): Likewise.
(optimize_skip): Likewise.
(fill_slots_from_thread): Likewise.
(relax_delay_slots): Likewise.
(dbr_schedule): Adjust handling of end_of_function_label for the
two new variables.
* ifcvt.c (find_if_case_1): Take care when redirecting jumps to the
exit block.
(dead_or_predicable): Change NEW_DEST arg to DEST_EDGE. All callers
changed. Ensure that the right label is passed to redirect_jump.
* jump.c (condjump_p, condjump_in_parallel_p, any_condjump_p,
returnjump_p): Handle SIMPLE_RETURNs.
(delete_related_insns): Check JUMP_LABEL for returns.
(redirect_target): New static function.
(redirect_exp_1): Use it. Handle any kind of return rtx as a label
rather than interpreting NULL as a return.
(redirect_jump_1): Assert that nlabel is not NULL.
(redirect_jump): Likewise.
(redirect_jump_2): Handle any kind of return rtx as a label rather
than interpreting NULL as a return.
* dwarf2out.c (compute_barrier_args_size_1): Check JUMP_LABEL for
returns.
* function.c (emit_return_into_block): Remove useless declaration.
(record_hard_reg_sets, frame_required_for_rtx, gen_return_pattern,
requires_stack_frame_p): New static functions.
(emit_return_into_block): New arg SIMPLE_P. All callers changed.
Generate either kind of return pattern and update the JUMP_LABEL.
(thread_prologue_and_epilogue_insns): Implement a form of
shrink-wrapping. Ensure JUMP_LABELs for return insns are set.
* print-rtl.c (print_rtx): Handle returns in JUMP_LABELs.
* cfglayout.c (fixup_reorder_chain): Ensure JUMP_LABELs for returns
remain correct.
* resource.c (find_dead_or_set_registers): Check JUMP_LABELs for
returns.
(mark_target_live_regs): Don't pass a return rtx to next_active_insn.
* basic-block.h (force_nonfallthru_and_redirect): Declare.
* sched-vis.c (print_pattern): Add case for SIMPLE_RETURN.
* cfgrtl.c (force_nonfallthru_and_redirect): No longer static. New arg
JUMP_LABEL. All callers changed. Use the label when generating
return insns.
* config/i386/i386.md (returns, return_str, return_cond): New
code_iterator and corresponding code_attrs.
(<return_str>return): Renamed from return and adapted.
(<return_str>return_internal): Likewise for return_internal.
(<return_str>return_internal_long): Likewise for return_internal_long.
(<return_str>return_pop_internal): Likewise for return_pop_internal.
(<return_str>return_indirect_internal): Likewise for
return_indirect_internal.
* config/i386/i386.c (ix86_expand_epilogue): Expand a simple_return as
the last insn.
(ix86_pad_returns): Handle both kinds of return rtx.
* config/arm/arm.c (use_simple_return_p): new function.
(is_jump_table): Handle returns in JUMP_LABELs.
(output_return_instruction): New arg SIMPLE. All callers changed.
Use it to determine which kind of return to generate.
(arm_final_prescan_insn): Handle both kinds of return.
* config/arm/arm.md (returns, return_str, return_simple_p,
return_cond): New code_iterator and corresponding code_attrs.
(<return_str>return): Renamed from return and adapted.
(arm_<return_str>return): Renamed from arm_return and adapted.
(cond_<return_str>return): Renamed from cond_return and adapted.
(cond_<return_str>return_inverted): Renamed from cond_return_inverted
and adapted.
(epilogue): Use ret_rtx instead of gen_rtx_RETURN.
* config/arm/thumb2.md (thumb2_<return_str>return): Renamed from
thumb2_return and adapted.
* config/arm/arm.h (RETURN_ADDR_REGNUM): Define.
* config/arm/arm-protos.h (use_simple_return_p): Declare.
(output_return_instruction): Adjust declaration.
* config/mips/mips.c (mips_expand_epilogue): Generate a simple_return
as final insn.
* config/mips/mips.md (simple_return): New expander.
(*simple_return, simple_return_internal): New patterns.
* config/sh/sh.c (barrier_align): Handle return in a JUMP_LABEL.
(split_branches): Don't pass a null label to redirect_jump.
From mainline:
* vec.h (FOR_EACH_VEC_ELT, FOR_EACH_VEC_ELT_REVERSE): New macros.
* haifa-sched.c (find_fallthru_edge_from): Rename from
find_fallthru_edge. All callers changed.
* sched-int.h (find_fallthru_edge_from): Rename declaration as well.
* basic-block.h (find_fallthru_edge): New inline function.
2010-02-04 Tom de Vries <email address hidden>
gcc/
stmt.c (set_jump_prob): Fix assert condition.
2010-01-27 Tom de Vries <email address hidden>
gcc/
stmt.c (rtx_seq_cost): Use insn_rtx_cost instead of rtx_cost.
2010-01-26 Tom de Vries <email address hidden>
gcc/
* stmt.c (struct case_bit_test): Add rev_hi and rev_lo field.
* stmt.c (emit_case_bit_test_jump): New function.
* stmt.c (rtx_seq_cost): New function.
* stmt.c (choose_case_bit_test_expand_method): New function.
* stmt.c (set_bit): New function.
* stmt.c (emit_case_bit_test): Adjust comment.
* stmt.c (emit_case_bit_test): Set and update rev_hi and rev_lo fields.
* stmt.c (emit_case_bit_test): Use set_bit.
* stmt.c (emit_case_bit_test): Use choose_case_bit_test_expand_method.
* stmt.c (emit_case_bit_test): Use emit_case_bit_test_jump.
* testsuite/gcc.dg/switch-bittest.c: New test.
2010-01-25 Tom de Vries <email address hidden>
gcc/
* stmt.c (emit_case_bit_tests): Change prototype.
* stmt.c (struct case_bit_test): Add prob field.
* stmt.c (get_label_prob): New function.
* stmt.c (set_jump_prob): New function.
* stmt.c (emit_case_bit_tests): Use get_label_prob.
* stmt.c (emit_case_bit_tests): Set prob field.
* stmt.c (emit_case_bit_tests): Use set_jump_prob.
* stmt.c (expand_case): Add new args to emit_case_bit_tests invocation.
* testsuite/gcc.dg/switch-prob.c: Add test.