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
>

Reply via email to