On 16.02.19 18:49, Jakub Jelinek wrote:
> Hi!
> 
> If S390_USE_TARGET_ATTRIBUTE is 0 (e.g. because of configuring against old
> binutils or even with no binutils at all), then indirect jumps are emitted
> unconditionally, no matter what is selected on the command line, including
> the default options.  The problem is that s390_indirect_branch_settings
> is never called and only that function sets the flags the *.md macros test.
> 
> Fixed thusly, bootstrapped/regtested on s390x-linux (with recent binutils)
> and tested on x86_64-linux -> s390x-linux cross (without any binutils).
> Ok for trunk and after a while for release branches?
> 
> 2019-02-16  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR target/89361
>       * config/s390/s390.c (s390_indirect_branch_attrvalue,
>       s390_indirect_branch_settings): Define unconditionally.
>       (s390_set_current_function): Likewise, but guard the whole body except
>       the s390_indirect_branch_settings call with
>       #if S390_USE_TARGET_ATTRIBUTE.
>       (TARGET_SET_CURRENT_FUNCTION): Redefine unconditionally.

Ok. Thanks for taking care of this!

Andreas

> 
> --- gcc/config/s390/s390.c.jj 2019-02-12 21:48:52.944076465 +0100
> +++ gcc/config/s390/s390.c    2019-02-15 14:16:46.053206087 +0100
> @@ -15462,6 +15462,7 @@ s390_can_inline_p (tree caller, tree cal
>  
>    return ret;
>  }
> +#endif
>  
>  /* Set VAL to correct enum value according to the indirect-branch or
>     function-return attribute in ATTR.  */
> @@ -15535,6 +15536,7 @@ s390_indirect_branch_settings (tree fnde
>      s390_indirect_branch_attrvalue (attr, 
> &cfun->machine->function_return_mem);
>  }
>  
> +#if S390_USE_TARGET_ATTRIBUTE
>  /* Restore targets globals from NEW_TREE and invalidate s390_previous_fndecl
>     cache.  */
>  
> @@ -15550,6 +15552,7 @@ s390_activate_target_options (tree new_t
>      TREE_TARGET_GLOBALS (new_tree) = save_target_globals_default_opts ();
>    s390_previous_fndecl = NULL_TREE;
>  }
> +#endif
>  
>  /* Establish appropriate back-end context for processing the function
>     FNDECL.  The argument might be NULL to indicate processing at top
> @@ -15557,6 +15560,7 @@ s390_activate_target_options (tree new_t
>  static void
>  s390_set_current_function (tree fndecl)
>  {
> +#if S390_USE_TARGET_ATTRIBUTE
>    /* Only change the context if the function changes.  This hook is called
>       several times in the course of compiling a function, and we don't want 
> to
>       slow things down too much or call target_reinit when it isn't safe.  */
> @@ -15588,10 +15592,9 @@ s390_set_current_function (tree fndecl)
>    if (old_tree != new_tree)
>      s390_activate_target_options (new_tree);
>    s390_previous_fndecl = fndecl;
> -
> +#endif
>    s390_indirect_branch_settings (fndecl);
>  }
> -#endif
>  
>  /* Implement TARGET_USE_BY_PIECES_INFRASTRUCTURE_P.  */
>  
> @@ -16331,10 +16334,10 @@ s390_case_values_threshold (void)
>  #undef TARGET_ASM_FILE_END
>  #define TARGET_ASM_FILE_END s390_asm_file_end
>  
> -#if S390_USE_TARGET_ATTRIBUTE
>  #undef TARGET_SET_CURRENT_FUNCTION
>  #define TARGET_SET_CURRENT_FUNCTION s390_set_current_function
>  
> +#if S390_USE_TARGET_ATTRIBUTE
>  #undef TARGET_OPTION_VALID_ATTRIBUTE_P
>  #define TARGET_OPTION_VALID_ATTRIBUTE_P s390_valid_target_attribute_p
>  
> 
>       Jakub
> 

Reply via email to