2011-01-07 Andrew Stubbs <email address hidden>
GCC Linaro 4.5-2011.01-0 released.
gcc/
* LINARO-VERSION: Update.
2011-01-06 Andrew Stubbs <email address hidden>
Merge from FSF 4.5 branch r167945 (4.5.2 release).
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-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-12-21 Chung-Lin Tang <email address hidden>
Issue #10201
Backport from mainline:
2010-12-16 Chung-Lin Tang <email address hidden>
PR target/46883
gcc/
* config/arm/arm.md
(zero_extendhisi2 for register input splitter): Change
"register_operand" to "s_register_operand".
(zero_extendqisi2 for register input splitter): Same.
gcc/testsuite/
* gcc.target/arm/pr46883.c: New testcase.
2010-12-18 Andrew Stubbs <email address hidden>
Backport from mainline:
gcc/
2010-12-17 Andrew Stubbs <email address hidden>
* config/arm/arm.md (maddhisi4, *maddhidi4): Use the canonical
operand order for plus.
Drop redundant % from constraints.
2010-12-17 Bernd Schmidt <email address hidden>
Issue #10208
gcc/
* config/arm/arm.c (arm_select_cc_mode): Before calling
arm_select_dominance_cc_mode for AND or IOR operations, ensure
that op is NE or EQ.
gcc/testsuite/
* gcc.c-torture/compile/20101217-1.c: New test.
2010-12-14 Sandra Loosemore <email address hidden>
Backport from mainline:
2010-12-14 Jakub Jelinek <email address hidden>
PR tree-optimization/46909
gcc/
* tree-ssa-ccp.c (and_var_with_comparison_1): Save partial
result even in the is_and case, if both partial results
are the same, return it.
(or_var_with_comparison_1): Use is_or predicate instead of
innercode == TRUTH_OR_EXPR test. Save partial result
even in the is_or case, if both partial results are the
same, return it. In the !is_or case when both partial
results are the same, return the partial result instead
of boolean_true_node.
gcc/testsuite/
* gcc.c-torture/execute/pr46909-1.c: New test.
* gcc.c-torture/execute/pr46909-2.c: New test.
* gcc.dg/pr46909.c: New test.
2010-12-22 Ulrich Weigand <email address hidden>
LP: #693425
Backport from mainline:
gcc/
* config/spu/spu.md ("mov<mode>"): Use nonimmediate_operand
predicate for destination operand.
* config/spu/spu.c (spu_expand_mov): If move destination is an
invalid subreg, perform move in the subreg's inner mode instead.
2010-12-21 Ulrich Weigand <email address hidden>
LP: #662324
Backport from mainline:
2010-12-17 Dodji Seketeli <email address hidden>
gcc/
* dwarf2out.c (gen_type_die_with_usage): Do not try to emit debug
info for a redundant typedef that has DECL_ORIGINAL_TYPE set. Use
that underlying type instead.
gcc/testsuite/
* g++.dg/debug/dwarf2/self-ref-1.C: New test.
* g++.dg/debug/dwarf2/self-ref-2.C: Likewise.
2010-12-21 Ulrich Weigand <email address hidden>
LP: #617384
Backport from mainline:
gcc/
* config/arm/arm.c (require_pic_register): Set INSN_LOCATOR for all
instructions injected into the prologue to prologue_locator.
2010-12-13 Chung-Lin Tang <email address hidden>
Backport from mainline:
2010-12-10 Jakub Jelinek <email address hidden>
PR rtl-optimization/46865
* rtl.c (rtx_equal_p_cb, rtx_equal_p): For last operand of
ASM_OPERANDS and ASM_INPUT if integers are different,
call locator_eq.
* jump.c (rtx_renumbered_equal_p): Likewise.
gcc/testsuite/
* gcc.target/i386/pr46865-1.c: New test.
* gcc.target/i386/pr46865-2.c: New test.
2010-12-14 Andrew Stubbs <email address hidden>
gcc/
* DEV-PHASE: Revert to upstream state.
* REVISION: Delete file.
* configure: Regenerate.
* configure.ac (PKGVERSION): Set default to a custom
Linaro string.
* LINARO-VERSION: New file.
2010-12-10 Andrew Stubbs <email address hidden>
gcc/
* REVISION: Bump version.