diff mbox series

Fix s390 backend with old binutils (PR target/89361)

Message ID 20190216174950.GC2135@tucnak
State New
Headers show
Series Fix s390 backend with old binutils (PR target/89361) | expand

Commit Message

Jakub Jelinek Feb. 16, 2019, 5:49 p.m. UTC
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  <jakub@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.


	Jakub

Comments

Andreas Krebbel Feb. 18, 2019, 11:14 a.m. UTC | #1
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  <jakub@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
>
diff mbox series

Patch

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