diff mbox

[committed] Use target-insns.def for insv, extv and extzv

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

Commit Message

Richard Sandiford July 5, 2015, 8:03 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 (extv, extzv, insv): New targetm instruction
	patterns.
	* optabs.c (get_extraction_insn): Use them instead of HAVE_*/gen_*
	interface.
	* recog.c (simplify_while_replacing): Likewise.
diff mbox

Patch

Index: gcc/target-insns.def
===================================================================
--- gcc/target-insns.def	2015-07-05 09:01:57.816257588 +0100
+++ gcc/target-insns.def	2015-07-05 09:01:57.812257637 +0100
@@ -42,6 +42,9 @@  DEF_TARGET_INSN (doloop_begin, (rtx x0,
 DEF_TARGET_INSN (doloop_end, (rtx x0, rtx x1))
 DEF_TARGET_INSN (epilogue, (void))
 DEF_TARGET_INSN (exception_receiver, (void))
+DEF_TARGET_INSN (extv, (rtx x0, rtx x1, rtx x2, rtx x3))
+DEF_TARGET_INSN (extzv, (rtx x0, rtx x1, rtx x2, rtx x3))
+DEF_TARGET_INSN (insv, (rtx x0, rtx x1, rtx x2, rtx x3))
 DEF_TARGET_INSN (jump, (rtx x0))
 DEF_TARGET_INSN (load_multiple, (rtx x0, rtx x1, rtx x2))
 DEF_TARGET_INSN (mem_signal_fence, (rtx x0))
Index: gcc/optabs.c
===================================================================
--- gcc/optabs.c	2015-07-05 09:01:57.816257588 +0100
+++ gcc/optabs.c	2015-07-05 09:01:57.808257686 +0100
@@ -8416,18 +8416,6 @@  expand_jump_insn (enum insn_code icode,
 }
 
 /* Reduce conditional compilation elsewhere.  */
-#ifndef HAVE_insv
-#define HAVE_insv	0
-#define CODE_FOR_insv	CODE_FOR_nothing
-#endif
-#ifndef HAVE_extv
-#define HAVE_extv	0
-#define CODE_FOR_extv	CODE_FOR_nothing
-#endif
-#ifndef HAVE_extzv
-#define HAVE_extzv	0
-#define CODE_FOR_extzv	CODE_FOR_nothing
-#endif
 
 /* Enumerates the possible types of structure operand to an
    extraction_insn.  */
@@ -8512,25 +8500,25 @@  get_extraction_insn (extraction_insn *in
   switch (pattern)
     {
     case EP_insv:
-      if (HAVE_insv
+      if (targetm.have_insv ()
 	  && get_traditional_extraction_insn (insn, type, mode,
-					      CODE_FOR_insv, 0, 3))
+					      targetm.code_for_insv, 0, 3))
 	return true;
       return get_optab_extraction_insn (insn, type, mode, insv_optab,
 					insvmisalign_optab, 2);
 
     case EP_extv:
-      if (HAVE_extv
+      if (targetm.have_extv ()
 	  && get_traditional_extraction_insn (insn, type, mode,
-					      CODE_FOR_extv, 1, 0))
+					      targetm.code_for_extv, 1, 0))
 	return true;
       return get_optab_extraction_insn (insn, type, mode, extv_optab,
 					extvmisalign_optab, 3);
 
     case EP_extzv:
-      if (HAVE_extzv
+      if (targetm.have_extzv ()
 	  && get_traditional_extraction_insn (insn, type, mode,
-					      CODE_FOR_extzv, 1, 0))
+					      targetm.code_for_extzv, 1, 0))
 	return true;
       return get_optab_extraction_insn (insn, type, mode, extzv_optab,
 					extzvmisalign_optab, 3);
Index: gcc/recog.c
===================================================================
--- gcc/recog.c	2015-07-05 09:01:57.816257588 +0100
+++ gcc/recog.c	2015-07-05 09:01:57.812257637 +0100
@@ -566,15 +566,6 @@  cancel_changes (int num)
 }
 
 /* Reduce conditional compilation elsewhere.  */
-#ifndef HAVE_extv
-#define HAVE_extv	0
-#define CODE_FOR_extv	CODE_FOR_nothing
-#endif
-#ifndef HAVE_extzv
-#define HAVE_extzv	0
-#define CODE_FOR_extzv	CODE_FOR_nothing
-#endif
-
 /* A subroutine of validate_replace_rtx_1 that tries to simplify the resulting
    rtx.  */
 
@@ -690,15 +681,15 @@  simplify_while_replacing (rtx *loc, rtx
 	  machine_mode is_mode = GET_MODE (XEXP (x, 0));
 	  int pos = INTVAL (XEXP (x, 2));
 
-	  if (GET_CODE (x) == ZERO_EXTRACT && HAVE_extzv)
+	  if (GET_CODE (x) == ZERO_EXTRACT && targetm.have_extzv ())
 	    {
-	      wanted_mode = insn_data[CODE_FOR_extzv].operand[1].mode;
+	      wanted_mode = insn_data[targetm.code_for_extzv].operand[1].mode;
 	      if (wanted_mode == VOIDmode)
 		wanted_mode = word_mode;
 	    }
-	  else if (GET_CODE (x) == SIGN_EXTRACT && HAVE_extv)
+	  else if (GET_CODE (x) == SIGN_EXTRACT && targetm.have_extv ())
 	    {
-	      wanted_mode = insn_data[CODE_FOR_extv].operand[1].mode;
+	      wanted_mode = insn_data[targetm.code_for_extv].operand[1].mode;
 	      if (wanted_mode == VOIDmode)
 		wanted_mode = word_mode;
 	    }