2011/6/20 Eric Botcazou <ebotca...@adacore.com>: > Dear RMs, > > I'd like to have permission to backport the new -mflat support for SPARC from > the mainline to the 4.6 branch. I received the first requests to reinstate > the option last year, when Laurent (and some others) started to work on it, > but the initial patch was submitted too late in the 4.6 development cycle, due > to technical and administrative issues. I nevertheless think that it would be > too bad to postpone its availabilty by another full year. > > The bulk of the changes are to the SPARC back-end, but there are a few minor > adjustments to the generic RTL code, namely 3 one-liners to builtins.c, cse.c > and postreload-gcse.c. I think that the risk for non-SPARC targets is nearly > null (and is acceptable for the SPARC port at this point in the 4.6 cycle). > > The patch has already been written and tested on the branch (on x86/Linux, > SPARC/Solaris and SPARC64/Solaris) so it could be applied immediately. The > patches from mainline it is made up of are listed at the end of the message. > > Can I proceed with the backport?
Apart from 2011-06-02 Eric Botcazou <ebotca...@adacore.com> * cse.c (cse_find_path): Refine change to exclude EDGE_ABNORMAL_CALL edges only, when there is a non-local label in the function. * postreload-gcse.c (bb_has_well_behaved_predecessors): Likewise. and the removal of SETJMP_VIA_SAVE_AREA this affects sparc only, right? Do you expect out-of-tree ports based on 4.6 may use this feature? Is there any harm in not backporting these two changes? Otherwise you are a sparc maintainer, its a primary platform, and I expect you're not going to break it. Thus, for a target specific feature backport to a .1 release I think it's ok. But please coordinate with Jakub who wants to do a RC1 soon. Richard. > > 2011-06-10 Eric Botcazou <ebotca...@adacore.com> > Laurent Rougé <laurent.ro...@menta.fr> > > * doc/invoke.texi (SPARC options): Add -mflat. > * config/sparc/sparc.opt: Likewise. > * config/sparc/sparc-protos.h (sparc_expand_epilogue): Add parameter. > (sparc_flat_expand_prologue): Declare. > (sparc_flat_expand_epilogue): Likewise. > * config/sparc/sparc.h (CPP_CPU_SPEC): Do not handle -msoft-float. > (CPP_ENDIAN_SPEC): Replace with... > (CPP_OTHER_SPEC): ...this. Also handle -mflat and -msoft-float. > (CPP_SPEC): Adjust to above change. > (EXTRA_SPECS): Likewise. > (SPARC_INCOMING_INT_ARG_FIRST): Add TARGET_FLAT handling. > (INCOMING_REGNO): Likewise. > (OUTGOING_REGNO): Likewise. > (LOCAL_REGNO): Likewise. > (SETUP_FRAME_ADDRESSES): Likewise. > (FIXED_REGISTERS): Set 0 for %fp. > (CALL_USED_REGISTERS): Likewise. > (INITIAL_ELIMINATION_OFFSET): Pass current_function_is_leaf. > (EXIT_IGNORE_STACK): Define to 1 unconditionally. > (RETURN_ADDR_REGNUM): Define. > (RETURN_ADDR_RTX): Use it. > (INCOMING_RETURN_ADDR_REGNUM): Define. > (INCOMING_RETURN_ADDR_RTX): Use it. > (DWARF_FRAME_RETURN_COLUMN): Likewise. > (EH_RETURN_REGNUM): Define. > (EH_RETURN_STACKADJ_RTX): Use it. > (EH_RETURN_HANDLER_RTX): Delete. > (EPILOGUE_USES): Use them and add TARGET_FLAT handling. > * config/sparc/sparc.c (apparent_fsize, actual_fsize, num_gfregs): > Delete. > (struct machine_function): Add frame_size, apparent_frame_size, > frame_base_reg, frame_base_offset, n_global_fp_regs and > save_local_in_regs_p fields. > (sparc_frame_size, sparc_apparent_frame_size, sparc_frame_base_reg, > sparc_frame_base_offset, sparc_n_global_fp_regs, > sparc_save_local_in_regs_p): New macros. > (sparc_option_override): Error out if -fcall-saved-REG is specified > for Out registers. > (eligible_for_restore_insn): Fix formatting. > (eligible_for_return_delay): Likewise. Add TARGET_FLAT handling. > (eligible_for_sibcall_delay): Likewise. > (RTX_OK_FOR_OFFSET_P, RTX_OK_FOR_OLO10_P): Add MODE parameter. > (sparc_legitimate_address_p): Adjust to above change. > (save_global_or_fp_reg_p): New predicate. > (return_addr_reg_needed_p): Likewise. > (save_local_or_in_reg_p): Likewise. > (sparc_compute_frame_size): Use them. Add TARGET_FLAT handling. > (SORR_SAVE, SORR_RESTORE): Delete. > (sorr_pred_t): New typedef. > (sorr_act_t): New enum. > (save_or_restore_regs): Rename to... > (emit_save_or_restore_regs): ...this. Change type of LOW and HIGH > parameters, remove ACTION parameter, add LEAF_FUNCTION_P, SAVE_P, > ACTION_TRUE and ACTION_FALSE parameters. Implement more general > mechanism. Add CFI information for double-word saves in 32-bit mode. > (emit_adjust_base_to_offset): New function extracted from... > (emit_save_or_restore_regs): ...this. Rename the rest to... > (emit_save_or_restore_regs_global_fp_regs): ...this. > (emit_save_or_restore_regs_local_in_regs): New function. > (gen_create_flat_frame_[123]): New functions. > (sparc_expand_prologue): Use SIZE local variable. Adjust. > (sparc_flat_expand_prologue): New function. > (sparc_asm_function_prologue): Add TARGET_FLAT handling. > (sparc_expand_epilogue): Use SIZE local variable. Adjust. > (sparc_flat_expand_epilogue): New function. > (sparc_can_use_return_insn_p): Add TARGET_FLAT handling. > (output_return): Likewise. > (output_sibcall): Likewise. > (sparc_output_mi_thunk): Likewise. > (sparc_frame_pointer_required): Likewise. > (sparc_conditional_register_usage): If TARGET_FLAT, disable the leaf > function optimization. > * config/sparc/sparc.md (flat): New attribute. > (prologue): Add TARGET_FLAT handling. > (save_register_window): Disable if TARGET_FLAT. > (create_flat_frame_[123]): New patterns. > (epilogue): Add TARGET_FLAT handling. > (sibcall_epilogue): Likewise. > (eh_return): New expander. > (eh_return_internal): New insn and splitter. > (return_internal): Add TARGET_FLAT handling. > (untyped_return): Remove bogus test and use RETURN_ADDR_REGNUM. > (save_stack_nonlocal): Use RETURN_ADDR_REGNUM. > (nonlocal_goto): Add TARGET_FLAT handling. > * config/sparc/t-elf: Add -mflat multilib. > * config/sparc/t-leon: Likewise. > * config/sparc/linux-unwind.h (STACK_BIAS): Define. > (sparc64_fallback_frame_state): Use it. > (sparc64_frob_update_context): Further adjust context. > * config/sparc/sol2-unwind.h (sparc64_frob_update_context): Likewise. > * config/sparc/sol2-ci.asm: Add TARGET_FLAT handling. > * config/sparc/sol2-cn.asm: Likewise. > testsuite/ > * gcc.dg/20020503-1.c: Add back -mflat option on the SPARC. > * gcc.target/sparc/sparc-ret.c: Skip if -mflat is passed. > > 2011-06-10 Hans-Peter Nilsson <h...@axis.com> > > * system.h (SETJMP_VIA_SAVE_AREA): Poison. > > 2011-06-02 Eric Botcazou <ebotca...@adacore.com> > > * cse.c (cse_find_path): Refine change to exclude EDGE_ABNORMAL_CALL > edges only, when there is a non-local label in the function. > * postreload-gcse.c (bb_has_well_behaved_predecessors): Likewise. > > 2011-06-02 Eric Botcazou <ebotca...@adacore.com> > > * function.h (struct stack_usage): Remove dynamic_alloc_count field. > (current_function_dynamic_alloc_count): Delete. > * builtins.c (expand_builtin_setjmp_setup): Do not set calls_setjmp. > (expand_builtin_nonlocal_goto): Remove obsolete comment. > (expand_builtin_update_setjmp_buf): Remove dead code. > * cse.c (cse_find_path): Do not follow a single abnormal incoming edge. > * explow.c (allocate_dynamic_stack_space): Remove SETJMP_VIA_SAVE_AREA > support. > * function.c (instantiate_virtual_regs): Likewise. > * postreload-gcse.c (bb_has_well_behaved_predecessors): Return false > for a block with a single abnormal incoming edge. > * config/sparc/sparc.h (STACK_SAVEAREA_MODE): Define. > (SETJMP_VIA_SAVE_AREA): Delete. > * config/sparc/sparc-protos.h (load_got_register): Declare. > * config/sparc/sparc.c (TARGET_BUILTIN_SETJMP_FRAME_VALUE): Define. > (load_got_register): Make global. > (sparc_frame_pointer_required): Add 'static'. > (sparc_can_eliminate): Likewise. Call sparc_frame_pointer_required. > (sparc_builtin_setjmp_frame_value): New function. > * config/sparc/sparc.md (UNSPECV_SETJMP): Remove. > (save_stack_nonlocal): New expander. > (restore_stack_nonlocal): Likewise. > (nonlocal_goto): Remove modes, adjust predicates and reimplement. > (nonlocal_goto_internal): New insn. > (goto_handler_and_restore): Delete. > (builtin_setjmp_setup): Likewise. > (do_builtin_setjmp_setup): Likewise. > (setjmp): Likewise. > (builtin_setjmp_receiver): New expander. > > 2011-05-12 Anatoly Sokolov <ae...@post.ru> > > * config/sparc/sparc.h (REG_OK_FOR_INDEX_P, REG_OK_FOR_BASE_P, > SYMBOLIC_CONST, RTX_OK_FOR_BASE_P, RTX_OK_FOR_INDEX_P): Remove. > (RTX_OK_FOR_OFFSET_P, RTX_OK_FOR_OLO10_P): Move to... > * config/sparc/sparc.c (RTX_OK_FOR_OFFSET_P, > RTX_OK_FOR_OLO10_P): ...here. > (sparc_mode_dependent_address_p): Use symbolic_operand instead of > SYMBOLIC_CONST. > > > -- > Eric Botcazou >