diff mbox

[committed] Use target-insns.def for stack_protect_{set,test}

Message ID 87wpyfkpfi.fsf@e105548-lin.cambridge.arm.com
State New
Headers show

Commit Message

Richard Sandiford July 5, 2015, 7:56 a.m. UTC
Bootstrapped & regression-tested on x86_64-linux-gnu and aarch64-linux-gnu.
Also tested via config-list.mk.  Committed as preapproved.

Thanks,
Richard


gcc/
	* target-insns.def (stack_protect_set, stack_protect_test): New
	targetm instruction patterns.
	* cfgexpand.c (stack_protect_prologue): Use them instead of
	HAVE_*/gen_* interface.
	* function.c (stack_protect_epilogue): Likewise.
diff mbox

Patch

Index: gcc/target-insns.def
===================================================================
--- gcc/target-insns.def	2015-07-05 08:55:39.336569730 +0100
+++ gcc/target-insns.def	2015-07-05 08:55:39.332569792 +0100
@@ -55,6 +55,8 @@  DEF_TARGET_INSN (save_stack_function, (r
 DEF_TARGET_INSN (save_stack_nonlocal, (rtx x0, rtx x1))
 DEF_TARGET_INSN (sibcall_epilogue, (void))
 DEF_TARGET_INSN (simple_return, (void))
+DEF_TARGET_INSN (stack_protect_set, (rtx x0, rtx x1))
+DEF_TARGET_INSN (stack_protect_test, (rtx x0, rtx x1, rtx x2))
 DEF_TARGET_INSN (store_multiple, (rtx x0, rtx x1, rtx x2))
 DEF_TARGET_INSN (tablejump, (rtx x0, rtx x1))
 DEF_TARGET_INSN (trap, (void))
Index: gcc/cfgexpand.c
===================================================================
--- gcc/cfgexpand.c	2015-07-05 08:55:39.336569730 +0100
+++ gcc/cfgexpand.c	2015-07-05 08:55:39.328569856 +0100
@@ -5767,11 +5767,6 @@  expand_main_function (void)
 /* Expand code to initialize the stack_protect_guard.  This is invoked at
    the beginning of a function to be protected.  */
 
-#ifndef HAVE_stack_protect_set
-# define HAVE_stack_protect_set		0
-# define gen_stack_protect_set(x,y)	(gcc_unreachable (), NULL_RTX)
-#endif
-
 static void
 stack_protect_prologue (void)
 {
@@ -5783,15 +5778,12 @@  stack_protect_prologue (void)
 
   /* Allow the target to copy from Y to X without leaking Y into a
      register.  */
-  if (HAVE_stack_protect_set)
-    {
-      rtx insn = gen_stack_protect_set (x, y);
-      if (insn)
-	{
-	  emit_insn (insn);
-	  return;
-	}
-    }
+  if (targetm.have_stack_protect_set ())
+    if (rtx_insn *insn = targetm.gen_stack_protect_set (x, y))
+      {
+	emit_insn (insn);
+	return;
+      }
 
   /* Otherwise do a straight move.  */
   emit_move_insn (x, y);
Index: gcc/function.c
===================================================================
--- gcc/function.c	2015-07-05 08:55:39.336569730 +0100
+++ gcc/function.c	2015-07-05 08:55:39.332569792 +0100
@@ -4874,11 +4874,6 @@  init_function_start (tree subr)
 /* Expand code to verify the stack_protect_guard.  This is invoked at
    the end of a function to be protected.  */
 
-#ifndef HAVE_stack_protect_test
-# define HAVE_stack_protect_test		0
-# define gen_stack_protect_test(x, y, z)	(gcc_unreachable (), NULL_RTX)
-#endif
-
 void
 stack_protect_epilogue (void)
 {
@@ -4891,13 +4886,12 @@  stack_protect_epilogue (void)
 
   /* Allow the target to compare Y with X without leaking either into
      a register.  */
-  switch (HAVE_stack_protect_test != 0)
+  switch (targetm.have_stack_protect_test ())
     {
     case 1:
-      tmp = gen_stack_protect_test (x, y, label);
-      if (tmp)
+      if (rtx_insn *seq = targetm.gen_stack_protect_test (x, y, label))
 	{
-	  emit_insn (tmp);
+	  emit_insn (seq);
 	  break;
 	}
       /* FALLTHRU */