Linaro GCC 4.5-2011.03-0

Milestone information

Linaro GCC
Michael Hope
Release registered:
No. Drivers cannot target bugs and blueprints to this milestone.  

Download RDF metadata


Assigned to you:
No blueprints or bugs assigned to you.
2 Andrew Stubbs, 1 Chung-Lin Tang, 5 Richard Sandiford
No blueprints are targeted to this milestone.
8 Fix Released

Download files for this release

After you've downloaded a file, you can verify its authenticity using its MD5 sum or signature. (How do I verify a download?)

File Description Downloads
download icon gcc-linaro-4.5-2011.03-0.tar.bz2 (md5, sig) Linaro GCC Source 342
last downloaded 3 weeks ago
Total downloads: 342

Release notes 

Linaro GCC 4.5 is the eighth release in the 4.5 series. Based off the latest GCC 4.5.2+svn170352, it includes many ARM-focused performance improvements and bug fixes.

Interesting changes include:
 * Adds a new 'shrink wrap' optimisation
 * Improves performance by making better use of the LDM/STM instructions
 * Fixes a segfault crash in Qt applications (LP: #705689)
 * Fixes a mis-compilation in the SPEC2006 gromacs benchmark (LP: #693502)
 * Fixes to the NEON intrinsics exposed through a NEON test suite (LP: #710623, LP: #710652)
 * Fixes an internal compiler error when tuning for XSCALE (LP: #721021)
 * Fixes a problem with loading zero using a NEON conditional load (LP: #709453)

Shrink wrapping is an optimisation that delays writing out the prologue until it
is first needed. This helps functions that exit early by reducing the
amount of data pushed out to memory. It is enabled by default at -O1
and can be disabled using '-fno-shrink-wrap'.


View the full changelog

2011-02-11 Richard Sandiford <email address hidden>

 * cse.c (count_reg_usage): Check side_effects_p. Remove the
 separate check for volatile asms.

 * gcc.dg/torture/volatile-pic-1.c: New test.

2011-02-02 Richard Sandiford <email address hidden>

 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

 * gcc.c-torture/execute/postmod-1.c: New test.

2011-02-02 Richard Sandiford <email address hidden>

 PR target/47553
 * New test.
 PR target/47553
 * config/arm/ (neon_lane_number): Accept 0..15.

2011-02-02 Richard Sandiford <email address hidden>

 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.

 PR target/47551
 * 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

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/ Update comments.

2011-02-28 Andrew Stubbs <email address hidden>



 2010-07-26 Julian Brown <email address hidden>

 Merge from Sourcery G++ 4.4:

 Jie Zhang <email address hidden>

 Issue #7122

 * config/arm/ (movdf_vfp): Add load double 0.0 case.
 (thumb2_movdf_vfp): Likewise. Require that one of the operands be a
 * config/arm/ (D0): New constraint.

 * 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/ (peephole2 for arithmetic ops with memory):
 Fix last commit.

 2010-06-30 Richard Guenther <email address hidden>

 PR target/44722
 * config/i386/ (peephole2 for fix:SSEMODEI24): Guard
 against oscillation with reverse peephole2.

 2010-07-01 Bernd Schmidt <email address hidden>

 PR target/44727
 * config/i386/ (peephole2 for arithmetic ops with memory):
 Make sure operand 0 dies.

2010-12-03 Yao Qi <email address hidden>

 * config/arm/ Rewrite ldm/stm RTL patterns to fix
 * config/arm/ 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
 (arm_gen_load_multiple, arm_gen_store_multiple): Adjust
 * config/arm/ 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_store_multiple_1): New function, broken out of
 (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
 (gen_ldm_seq, gen_stm_seq, gen_const_stm_seq): New functions.
 * config/arm/ (commutative_binary_operator): New.
 (load_multiple_operation, store_multiple_operation): Handle more
 variants of these patterns with different starting offsets. Handle
 * config/arm/ Include "".
 (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/ New file.
 * config/arm/ 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>

 * function.c (thread_prologue_and_epilogue_insns): Avoid uninitialized

2011-01-12 Bernd Schmidt <email address hidden>

 * config/s390/s390.c (s390_emit_epilogue): Don't use gen_rtx_RETURN.
 * config/rx/rx.c (gen_rx_rtsd_vector): Likewise.
 * config/m68hc11/ (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):
 * config/v850/v850.c (expand_epilogue): Likewise.
 * config/bfin/bfin.c (bfin_expand_call): Likewise.

2011-01-04 Catherine Moore <email address hidden>

 * 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>

 * 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
 (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
 * 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
 (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/ (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
 * 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/ (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_<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/ (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:
 * 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>

 stmt.c (set_jump_prob): Fix assert condition.

2010-01-27 Tom de Vries <email address hidden>

 stmt.c (rtx_seq_cost): Use insn_rtx_cost instead of rtx_cost.

2010-01-26 Tom de Vries <email address hidden>

 * 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>

 * 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.

This milestone contains Public information
Everyone can see this information.