public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Don't unnecessarily create stack protector guard decls and MEMs (PR target/77957)
@ 2016-10-12 23:30 Jakub Jelinek
  2016-10-13  7:09 ` Richard Biener
  0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2016-10-12 23:30 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

Hi!

PR77957 is likely a rs6000 backend bug where a useless memory load causes
.LCTOC0 undefined reference in the end at -O0 and as such should be fixed,
but I think it is completely unnecessary to create those loads at all
if we know we are going to ignore it in the stack_protect_{set,test}
patterns because TARGET_THREAD_SSP_OFFSET is defined and we are going to
load from ABI selected TLS word.

So, this patch tweaks the -fstack-protector* expansion (both prologue and
epilogue) so that if targetm.stack_protector_guard hook returns NULL it just
passes a dummy const0_rtx down to the expander that is going to ignore it
anyway, and adjusts the affected targets to return NULL in those cases.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2016-10-12  Jakub Jelinek  <jakub@redhat.com>

	PR target/77957
	* hooks.h (hook_tree_void_null): Declare.
	* hooks.c (hook_tree_void_null): New function.
	* langhooks.c (lhd_return_null_tree_v): Remove.
	* langhooks-def.h (lhd_return_null_tree_v): Remove.
	* cfgexpand.c (stack_protect_prologue): If guard_decl is NULL,
	set y to const0_rtx.
	* function.c (stack_protect_epilogue): Likewise.
	* config/tilepro/tilepro.c (TARGET_STACK_PROTECT_GUARD): Redefine
	if TARGET_THREAD_SSP_OFFSET is defined.
	* config/s390/s390.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	* config/sparc/sparc.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	* config/tilegx/tilegx.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	* config/rs6000/rs6000.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	* config/i386/i386.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	(ix86_stack_protect_guard): New function.
c/
	* c-objc-common.h (LANG_HOOKS_GETDECLS): Use hook_tree_void_null
	instead of lhd_return_null_tree_v.
ada/
	* gcc-interface/misc.c (LANG_HOOKS_GETDECLS): Use hook_tree_void_null
	instead of lhd_return_null_tree_v.

--- gcc/config/tilepro/tilepro.c.jj	2016-09-27 20:12:45.000000000 +0200
+++ gcc/config/tilepro/tilepro.c	2016-10-12 18:18:41.001998284 +0200
@@ -4948,6 +4948,11 @@ tilepro_file_end (void)
 #undef  TARGET_OPTION_OVERRIDE
 #define TARGET_OPTION_OVERRIDE tilepro_option_override
 
+#ifdef TARGET_THREAD_SSP_OFFSET
+#undef TARGET_STACK_PROTECT_GUARD
+#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
+#endif
+
 #undef  TARGET_SCALAR_MODE_SUPPORTED_P
 #define TARGET_SCALAR_MODE_SUPPORTED_P tilepro_scalar_mode_supported_p
 
--- gcc/config/s390/s390.c.jj	2016-09-27 09:46:13.000000000 +0200
+++ gcc/config/s390/s390.c	2016-10-12 18:17:24.873959377 +0200
@@ -15124,6 +15124,11 @@ s390_invalid_binary_op (int op ATTRIBUTE
 #undef TARGET_OPTION_OVERRIDE
 #define TARGET_OPTION_OVERRIDE s390_option_override
 
+#ifdef TARGET_THREAD_SSP_OFFSET
+#undef TARGET_STACK_PROTECT_GUARD
+#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
+#endif
+
 #undef	TARGET_ENCODE_SECTION_INFO
 #define TARGET_ENCODE_SECTION_INFO s390_encode_section_info
 
--- gcc/config/i386/i386.c.jj	2016-10-08 14:04:16.859911786 +0200
+++ gcc/config/i386/i386.c	2016-10-12 18:10:00.344570177 +0200
@@ -44023,6 +44023,18 @@ ix86_mangle_type (const_tree type)
     }
 }
 
+#ifdef TARGET_THREAD_SSP_OFFSET
+/* If using TLS guards, don't waste time creating and expanding
+   __stack_chk_guard decl and MEM as we are going to ignore it.  */
+static tree
+ix86_stack_protect_guard (void)
+{
+  if (TARGET_SSP_TLS_GUARD)
+    return NULL_TREE;
+  return default_stack_protect_guard ();
+}
+#endif
+
 /* For 32-bit code we can save PIC register setup by using
    __stack_chk_fail_local hidden function instead of calling
    __stack_chk_fail directly.  64-bit code doesn't need to setup any PIC
@@ -50614,6 +50626,11 @@ ix86_addr_space_zero_address_valid (addr
 #undef TARGET_MANGLE_TYPE
 #define TARGET_MANGLE_TYPE ix86_mangle_type
 
+#ifdef TARGET_THREAD_SSP_OFFSET
+#undef TARGET_STACK_PROTECT_GUARD
+#define TARGET_STACK_PROTECT_GUARD ix86_stack_protect_guard
+#endif
+
 #if !TARGET_MACHO
 #undef TARGET_STACK_PROTECT_FAIL
 #define TARGET_STACK_PROTECT_FAIL ix86_stack_protect_fail
--- gcc/config/sparc/sparc.c.jj	2016-10-12 01:16:42.000000000 +0200
+++ gcc/config/sparc/sparc.c	2016-10-12 18:17:44.595710443 +0200
@@ -798,6 +798,11 @@ char sparc_hard_reg_printed[8];
 #undef TARGET_OPTION_OVERRIDE
 #define TARGET_OPTION_OVERRIDE sparc_option_override
 
+#ifdef TARGET_THREAD_SSP_OFFSET
+#undef TARGET_STACK_PROTECT_GUARD
+#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
+#endif
+
 #if TARGET_GNU_TLS && defined(HAVE_AS_SPARC_UA_PCREL)
 #undef TARGET_ASM_OUTPUT_DWARF_DTPREL
 #define TARGET_ASM_OUTPUT_DWARF_DTPREL sparc_output_dwarf_dtprel
--- gcc/config/tilegx/tilegx.c.jj	2016-09-14 16:01:07.000000000 +0200
+++ gcc/config/tilegx/tilegx.c	2016-10-12 18:18:20.952251422 +0200
@@ -5544,6 +5544,11 @@ tilegx_file_end (void)
 #undef  TARGET_OPTION_OVERRIDE
 #define TARGET_OPTION_OVERRIDE tilegx_option_override
 
+#ifdef TARGET_THREAD_SSP_OFFSET
+#undef TARGET_STACK_PROTECT_GUARD
+#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
+#endif
+
 #undef  TARGET_SCALAR_MODE_SUPPORTED_P
 #define TARGET_SCALAR_MODE_SUPPORTED_P tilegx_scalar_mode_supported_p
 
--- gcc/config/rs6000/rs6000.c.jj	2016-10-11 20:51:04.000000000 +0200
+++ gcc/config/rs6000/rs6000.c	2016-10-12 17:54:04.420635740 +0200
@@ -1735,6 +1735,11 @@ static const struct attribute_spec rs600
 #define TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION \
   rs6000_builtin_md_vectorized_function
 
+#ifdef TARGET_THREAD_SSP_OFFSET
+#undef TARGET_STACK_PROTECT_GUARD
+#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
+#endif
+
 #if !TARGET_MACHO
 #undef TARGET_STACK_PROTECT_FAIL
 #define TARGET_STACK_PROTECT_FAIL rs6000_stack_protect_fail
--- gcc/ada/gcc-interface/misc.c.jj	2016-10-09 13:17:45.448639039 +0200
+++ gcc/ada/gcc-interface/misc.c	2016-10-12 17:49:50.535840245 +0200
@@ -1366,7 +1366,7 @@ get_lang_specific (tree node)
 #undef  LANG_HOOKS_TYPE_HASH_EQ
 #define LANG_HOOKS_TYPE_HASH_EQ		gnat_type_hash_eq
 #undef  LANG_HOOKS_GETDECLS
-#define LANG_HOOKS_GETDECLS		lhd_return_null_tree_v
+#define LANG_HOOKS_GETDECLS		hook_tree_void_null
 #undef  LANG_HOOKS_PUSHDECL
 #define LANG_HOOKS_PUSHDECL		gnat_return_tree
 #undef  LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
--- gcc/langhooks.c.jj	2016-10-09 13:19:09.000000000 +0200
+++ gcc/langhooks.c	2016-10-12 17:46:49.135128824 +0200
@@ -77,14 +77,6 @@ lhd_do_nothing_f (struct function * ARG_
 /* Do nothing (return NULL_TREE).  */
 
 tree
-lhd_return_null_tree_v (void)
-{
-  return NULL_TREE;
-}
-
-/* Do nothing (return NULL_TREE).  */
-
-tree
 lhd_return_null_tree (tree ARG_UNUSED (t))
 {
   return NULL_TREE;
--- gcc/function.c.jj	2016-10-09 13:19:09.000000000 +0200
+++ gcc/function.c	2016-10-12 18:00:23.207854731 +0200
@@ -5058,7 +5058,10 @@ stack_protect_epilogue (void)
   rtx_insn *seq;
 
   x = expand_normal (crtl->stack_protect_guard);
-  y = expand_normal (guard_decl);
+  if (guard_decl)
+    y = expand_normal (guard_decl);
+  else
+    y = const0_rtx;
 
   /* Allow the target to compare Y with X without leaking either into
      a register.  */
--- gcc/c/c-objc-common.h.jj	2016-09-02 20:36:22.744167412 +0200
+++ gcc/c/c-objc-common.h	2016-10-12 17:49:11.089338134 +0200
@@ -91,7 +91,7 @@ along with GCC; see the file COPYING3.
    This means it must also provide its own write_globals.  */
 
 #undef LANG_HOOKS_GETDECLS
-#define LANG_HOOKS_GETDECLS lhd_return_null_tree_v
+#define LANG_HOOKS_GETDECLS hook_tree_void_null
 
 /* Hooks for tree gimplification.  */
 #undef LANG_HOOKS_GIMPLIFY_EXPR
--- gcc/hooks.h.jj	2016-09-23 11:57:28.000000000 +0200
+++ gcc/hooks.h	2016-10-12 17:46:25.021432966 +0200
@@ -89,6 +89,7 @@ extern int hook_int_rtx_mode_as_bool_0 (
 					bool);
 
 extern tree hook_tree_const_tree_null (const_tree);
+extern tree hook_tree_void_null (void);
 
 extern tree hook_tree_tree_tree_null (tree, tree);
 extern tree hook_tree_tree_tree_tree_null (tree, tree, tree);
--- gcc/langhooks-def.h.jj	2016-09-13 10:43:59.000000000 +0200
+++ gcc/langhooks-def.h	2016-10-12 17:47:10.522859065 +0200
@@ -41,7 +41,6 @@ extern void lhd_do_nothing_f (struct fun
 extern tree lhd_pass_through_t (tree);
 extern bool lhd_post_options (const char **);
 extern alias_set_type lhd_get_alias_set (tree);
-extern tree lhd_return_null_tree_v (void);
 extern tree lhd_return_null_tree (tree);
 extern tree lhd_return_null_const_tree (const_tree);
 extern tree lhd_do_nothing_iii_return_null_tree (int, int, int);
--- gcc/cfgexpand.c.jj	2016-10-09 13:19:09.000000000 +0200
+++ gcc/cfgexpand.c	2016-10-12 18:00:49.635521164 +0200
@@ -6100,7 +6100,10 @@ stack_protect_prologue (void)
   rtx x, y;
 
   x = expand_normal (crtl->stack_protect_guard);
-  y = expand_normal (guard_decl);
+  if (guard_decl)
+    y = expand_normal (guard_decl);
+  else
+    y = const0_rtx;
 
   /* Allow the target to copy from Y to X without leaking Y into a
      register.  */
--- gcc/hooks.c.jj	2016-09-23 20:08:12.000000000 +0200
+++ gcc/hooks.c	2016-10-12 17:58:21.523390618 +0200
@@ -429,6 +429,13 @@ hook_tree_const_tree_null (const_tree)
   return NULL;
 }
 
+/* Generic hook that takes no arguments and returns a NULL_TREE.  */
+tree
+hook_tree_void_null (void)
+{
+  return NULL;
+}
+
 /* Generic hook that takes a rtx_insn * and an int and returns a bool.  */
 
 bool

	Jakub

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Don't unnecessarily create stack protector guard decls and MEMs (PR target/77957)
  2016-10-12 23:30 [PATCH] Don't unnecessarily create stack protector guard decls and MEMs (PR target/77957) Jakub Jelinek
@ 2016-10-13  7:09 ` Richard Biener
  0 siblings, 0 replies; 2+ messages in thread
From: Richard Biener @ 2016-10-13  7:09 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches

On Thu, 13 Oct 2016, Jakub Jelinek wrote:

> Hi!
> 
> PR77957 is likely a rs6000 backend bug where a useless memory load causes
> .LCTOC0 undefined reference in the end at -O0 and as such should be fixed,
> but I think it is completely unnecessary to create those loads at all
> if we know we are going to ignore it in the stack_protect_{set,test}
> patterns because TARGET_THREAD_SSP_OFFSET is defined and we are going to
> load from ABI selected TLS word.
> 
> So, this patch tweaks the -fstack-protector* expansion (both prologue and
> epilogue) so that if targetm.stack_protector_guard hook returns NULL it just
> passes a dummy const0_rtx down to the expander that is going to ignore it
> anyway, and adjusts the affected targets to return NULL in those cases.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

Ok.

Thanks,
Richard.

> 2016-10-12  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR target/77957
> 	* hooks.h (hook_tree_void_null): Declare.
> 	* hooks.c (hook_tree_void_null): New function.
> 	* langhooks.c (lhd_return_null_tree_v): Remove.
> 	* langhooks-def.h (lhd_return_null_tree_v): Remove.
> 	* cfgexpand.c (stack_protect_prologue): If guard_decl is NULL,
> 	set y to const0_rtx.
> 	* function.c (stack_protect_epilogue): Likewise.
> 	* config/tilepro/tilepro.c (TARGET_STACK_PROTECT_GUARD): Redefine
> 	if TARGET_THREAD_SSP_OFFSET is defined.
> 	* config/s390/s390.c (TARGET_STACK_PROTECT_GUARD): Likewise.
> 	* config/sparc/sparc.c (TARGET_STACK_PROTECT_GUARD): Likewise.
> 	* config/tilegx/tilegx.c (TARGET_STACK_PROTECT_GUARD): Likewise.
> 	* config/rs6000/rs6000.c (TARGET_STACK_PROTECT_GUARD): Likewise.
> 	* config/i386/i386.c (TARGET_STACK_PROTECT_GUARD): Likewise.
> 	(ix86_stack_protect_guard): New function.
> c/
> 	* c-objc-common.h (LANG_HOOKS_GETDECLS): Use hook_tree_void_null
> 	instead of lhd_return_null_tree_v.
> ada/
> 	* gcc-interface/misc.c (LANG_HOOKS_GETDECLS): Use hook_tree_void_null
> 	instead of lhd_return_null_tree_v.
> 
> --- gcc/config/tilepro/tilepro.c.jj	2016-09-27 20:12:45.000000000 +0200
> +++ gcc/config/tilepro/tilepro.c	2016-10-12 18:18:41.001998284 +0200
> @@ -4948,6 +4948,11 @@ tilepro_file_end (void)
>  #undef  TARGET_OPTION_OVERRIDE
>  #define TARGET_OPTION_OVERRIDE tilepro_option_override
>  
> +#ifdef TARGET_THREAD_SSP_OFFSET
> +#undef TARGET_STACK_PROTECT_GUARD
> +#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
> +#endif
> +
>  #undef  TARGET_SCALAR_MODE_SUPPORTED_P
>  #define TARGET_SCALAR_MODE_SUPPORTED_P tilepro_scalar_mode_supported_p
>  
> --- gcc/config/s390/s390.c.jj	2016-09-27 09:46:13.000000000 +0200
> +++ gcc/config/s390/s390.c	2016-10-12 18:17:24.873959377 +0200
> @@ -15124,6 +15124,11 @@ s390_invalid_binary_op (int op ATTRIBUTE
>  #undef TARGET_OPTION_OVERRIDE
>  #define TARGET_OPTION_OVERRIDE s390_option_override
>  
> +#ifdef TARGET_THREAD_SSP_OFFSET
> +#undef TARGET_STACK_PROTECT_GUARD
> +#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
> +#endif
> +
>  #undef	TARGET_ENCODE_SECTION_INFO
>  #define TARGET_ENCODE_SECTION_INFO s390_encode_section_info
>  
> --- gcc/config/i386/i386.c.jj	2016-10-08 14:04:16.859911786 +0200
> +++ gcc/config/i386/i386.c	2016-10-12 18:10:00.344570177 +0200
> @@ -44023,6 +44023,18 @@ ix86_mangle_type (const_tree type)
>      }
>  }
>  
> +#ifdef TARGET_THREAD_SSP_OFFSET
> +/* If using TLS guards, don't waste time creating and expanding
> +   __stack_chk_guard decl and MEM as we are going to ignore it.  */
> +static tree
> +ix86_stack_protect_guard (void)
> +{
> +  if (TARGET_SSP_TLS_GUARD)
> +    return NULL_TREE;
> +  return default_stack_protect_guard ();
> +}
> +#endif
> +
>  /* For 32-bit code we can save PIC register setup by using
>     __stack_chk_fail_local hidden function instead of calling
>     __stack_chk_fail directly.  64-bit code doesn't need to setup any PIC
> @@ -50614,6 +50626,11 @@ ix86_addr_space_zero_address_valid (addr
>  #undef TARGET_MANGLE_TYPE
>  #define TARGET_MANGLE_TYPE ix86_mangle_type
>  
> +#ifdef TARGET_THREAD_SSP_OFFSET
> +#undef TARGET_STACK_PROTECT_GUARD
> +#define TARGET_STACK_PROTECT_GUARD ix86_stack_protect_guard
> +#endif
> +
>  #if !TARGET_MACHO
>  #undef TARGET_STACK_PROTECT_FAIL
>  #define TARGET_STACK_PROTECT_FAIL ix86_stack_protect_fail
> --- gcc/config/sparc/sparc.c.jj	2016-10-12 01:16:42.000000000 +0200
> +++ gcc/config/sparc/sparc.c	2016-10-12 18:17:44.595710443 +0200
> @@ -798,6 +798,11 @@ char sparc_hard_reg_printed[8];
>  #undef TARGET_OPTION_OVERRIDE
>  #define TARGET_OPTION_OVERRIDE sparc_option_override
>  
> +#ifdef TARGET_THREAD_SSP_OFFSET
> +#undef TARGET_STACK_PROTECT_GUARD
> +#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
> +#endif
> +
>  #if TARGET_GNU_TLS && defined(HAVE_AS_SPARC_UA_PCREL)
>  #undef TARGET_ASM_OUTPUT_DWARF_DTPREL
>  #define TARGET_ASM_OUTPUT_DWARF_DTPREL sparc_output_dwarf_dtprel
> --- gcc/config/tilegx/tilegx.c.jj	2016-09-14 16:01:07.000000000 +0200
> +++ gcc/config/tilegx/tilegx.c	2016-10-12 18:18:20.952251422 +0200
> @@ -5544,6 +5544,11 @@ tilegx_file_end (void)
>  #undef  TARGET_OPTION_OVERRIDE
>  #define TARGET_OPTION_OVERRIDE tilegx_option_override
>  
> +#ifdef TARGET_THREAD_SSP_OFFSET
> +#undef TARGET_STACK_PROTECT_GUARD
> +#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
> +#endif
> +
>  #undef  TARGET_SCALAR_MODE_SUPPORTED_P
>  #define TARGET_SCALAR_MODE_SUPPORTED_P tilegx_scalar_mode_supported_p
>  
> --- gcc/config/rs6000/rs6000.c.jj	2016-10-11 20:51:04.000000000 +0200
> +++ gcc/config/rs6000/rs6000.c	2016-10-12 17:54:04.420635740 +0200
> @@ -1735,6 +1735,11 @@ static const struct attribute_spec rs600
>  #define TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION \
>    rs6000_builtin_md_vectorized_function
>  
> +#ifdef TARGET_THREAD_SSP_OFFSET
> +#undef TARGET_STACK_PROTECT_GUARD
> +#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
> +#endif
> +
>  #if !TARGET_MACHO
>  #undef TARGET_STACK_PROTECT_FAIL
>  #define TARGET_STACK_PROTECT_FAIL rs6000_stack_protect_fail
> --- gcc/ada/gcc-interface/misc.c.jj	2016-10-09 13:17:45.448639039 +0200
> +++ gcc/ada/gcc-interface/misc.c	2016-10-12 17:49:50.535840245 +0200
> @@ -1366,7 +1366,7 @@ get_lang_specific (tree node)
>  #undef  LANG_HOOKS_TYPE_HASH_EQ
>  #define LANG_HOOKS_TYPE_HASH_EQ		gnat_type_hash_eq
>  #undef  LANG_HOOKS_GETDECLS
> -#define LANG_HOOKS_GETDECLS		lhd_return_null_tree_v
> +#define LANG_HOOKS_GETDECLS		hook_tree_void_null
>  #undef  LANG_HOOKS_PUSHDECL
>  #define LANG_HOOKS_PUSHDECL		gnat_return_tree
>  #undef  LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
> --- gcc/langhooks.c.jj	2016-10-09 13:19:09.000000000 +0200
> +++ gcc/langhooks.c	2016-10-12 17:46:49.135128824 +0200
> @@ -77,14 +77,6 @@ lhd_do_nothing_f (struct function * ARG_
>  /* Do nothing (return NULL_TREE).  */
>  
>  tree
> -lhd_return_null_tree_v (void)
> -{
> -  return NULL_TREE;
> -}
> -
> -/* Do nothing (return NULL_TREE).  */
> -
> -tree
>  lhd_return_null_tree (tree ARG_UNUSED (t))
>  {
>    return NULL_TREE;
> --- gcc/function.c.jj	2016-10-09 13:19:09.000000000 +0200
> +++ gcc/function.c	2016-10-12 18:00:23.207854731 +0200
> @@ -5058,7 +5058,10 @@ stack_protect_epilogue (void)
>    rtx_insn *seq;
>  
>    x = expand_normal (crtl->stack_protect_guard);
> -  y = expand_normal (guard_decl);
> +  if (guard_decl)
> +    y = expand_normal (guard_decl);
> +  else
> +    y = const0_rtx;
>  
>    /* Allow the target to compare Y with X without leaking either into
>       a register.  */
> --- gcc/c/c-objc-common.h.jj	2016-09-02 20:36:22.744167412 +0200
> +++ gcc/c/c-objc-common.h	2016-10-12 17:49:11.089338134 +0200
> @@ -91,7 +91,7 @@ along with GCC; see the file COPYING3.
>     This means it must also provide its own write_globals.  */
>  
>  #undef LANG_HOOKS_GETDECLS
> -#define LANG_HOOKS_GETDECLS lhd_return_null_tree_v
> +#define LANG_HOOKS_GETDECLS hook_tree_void_null
>  
>  /* Hooks for tree gimplification.  */
>  #undef LANG_HOOKS_GIMPLIFY_EXPR
> --- gcc/hooks.h.jj	2016-09-23 11:57:28.000000000 +0200
> +++ gcc/hooks.h	2016-10-12 17:46:25.021432966 +0200
> @@ -89,6 +89,7 @@ extern int hook_int_rtx_mode_as_bool_0 (
>  					bool);
>  
>  extern tree hook_tree_const_tree_null (const_tree);
> +extern tree hook_tree_void_null (void);
>  
>  extern tree hook_tree_tree_tree_null (tree, tree);
>  extern tree hook_tree_tree_tree_tree_null (tree, tree, tree);
> --- gcc/langhooks-def.h.jj	2016-09-13 10:43:59.000000000 +0200
> +++ gcc/langhooks-def.h	2016-10-12 17:47:10.522859065 +0200
> @@ -41,7 +41,6 @@ extern void lhd_do_nothing_f (struct fun
>  extern tree lhd_pass_through_t (tree);
>  extern bool lhd_post_options (const char **);
>  extern alias_set_type lhd_get_alias_set (tree);
> -extern tree lhd_return_null_tree_v (void);
>  extern tree lhd_return_null_tree (tree);
>  extern tree lhd_return_null_const_tree (const_tree);
>  extern tree lhd_do_nothing_iii_return_null_tree (int, int, int);
> --- gcc/cfgexpand.c.jj	2016-10-09 13:19:09.000000000 +0200
> +++ gcc/cfgexpand.c	2016-10-12 18:00:49.635521164 +0200
> @@ -6100,7 +6100,10 @@ stack_protect_prologue (void)
>    rtx x, y;
>  
>    x = expand_normal (crtl->stack_protect_guard);
> -  y = expand_normal (guard_decl);
> +  if (guard_decl)
> +    y = expand_normal (guard_decl);
> +  else
> +    y = const0_rtx;
>  
>    /* Allow the target to copy from Y to X without leaking Y into a
>       register.  */
> --- gcc/hooks.c.jj	2016-09-23 20:08:12.000000000 +0200
> +++ gcc/hooks.c	2016-10-12 17:58:21.523390618 +0200
> @@ -429,6 +429,13 @@ hook_tree_const_tree_null (const_tree)
>    return NULL;
>  }
>  
> +/* Generic hook that takes no arguments and returns a NULL_TREE.  */
> +tree
> +hook_tree_void_null (void)
> +{
> +  return NULL;
> +}
> +
>  /* Generic hook that takes a rtx_insn * and an int and returns a bool.  */
>  
>  bool
> 
> 	Jakub
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-10-13  7:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-12 23:30 [PATCH] Don't unnecessarily create stack protector guard decls and MEMs (PR target/77957) Jakub Jelinek
2016-10-13  7:09 ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).