This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][RFC] Remove warning for SET VOIDmode -> BLKmode.


(Debug code removed from patch.)

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany

Attachment: 0001-ChangeLog
Description: Text document

>From 04376919c108c42a2e9835dd1809b198bc47513f Mon Sep 17 00:00:00 2001
From: Dominik Vogt <vogt@linux.vnet.ibm.com>
Date: Tue, 3 Nov 2015 16:42:37 +0100
Subject: [PATCH] Remove warning for SET VOIDmode -> BLKmode.

---
 gcc/genrecog.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/gcc/genrecog.c b/gcc/genrecog.c
index 599121f..2c1fb47 100644
--- a/gcc/genrecog.c
+++ b/gcc/genrecog.c
@@ -545,7 +545,7 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code)
 	      }
 
 	    /* A MATCH_OPERAND that is a SET should have an output reload.  */
-	    else if (set && constraints0)
+	    else if (set_code && constraints0)
 	      {
 		if (set_code == '+')
 		  {
@@ -596,7 +596,7 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code)
 	/* Allowing non-lvalues in destinations -- particularly CONST_INT --
 	   while not likely to occur at runtime, results in less efficient
 	   code from insn-recog.c.  */
-	if (set && pred && pred->allows_non_lvalue)
+	if (set_code && pred && pred->allows_non_lvalue)
 	  error_at (info->loc, "destination operand %d allows non-lvalue",
 		    XINT (pattern, 0));
 
@@ -616,8 +616,13 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code)
 	    && pred->allows_non_const
 	    && strstr (c_test, "operands") == NULL
 	    && ! (set
+		  && set_code
 		  && GET_CODE (set) == SET
-		  && GET_CODE (SET_SRC (set)) == CALL))
+		  && GET_CODE (SET_SRC (set)) == CALL)
+	    && ! (set
+		  && set_code == 0
+		  && GET_CODE (set) == SET
+		  && GET_MODE (SET_DEST (set)) == BLKmode))
 	  message_at (info->loc, "warning: operand %d missing mode?",
 		      XINT (pattern, 0));
 	return;
@@ -666,6 +671,7 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code)
 	/* If only one of the operands is VOIDmode, and PC or CC0 is
 	   not involved, it's probably a mistake.  */
 	else if (dmode != smode
+		 && dmode != BLKmode
 		 && GET_CODE (dest) != PC
 		 && GET_CODE (dest) != CC0
 		 && GET_CODE (src) != PC
@@ -682,7 +688,7 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code)
 	if (dest != SET_DEST (pattern))
 	  validate_pattern (dest, info, pattern, '=');
 	validate_pattern (SET_DEST (pattern), info, pattern, '=');
-        validate_pattern (SET_SRC (pattern), info, NULL_RTX, 0);
+        validate_pattern (SET_SRC (pattern), info, pattern, 0);
         return;
       }
 
@@ -691,13 +697,15 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code)
       return;
 
     case ZERO_EXTRACT:
-      validate_pattern (XEXP (pattern, 0), info, set, set ? '+' : 0);
+      validate_pattern (XEXP (pattern, 0), info,
+			set_code ? set : NULL_RTX, set_code ? '+' : 0);
       validate_pattern (XEXP (pattern, 1), info, NULL_RTX, 0);
       validate_pattern (XEXP (pattern, 2), info, NULL_RTX, 0);
       return;
 
     case STRICT_LOW_PART:
-      validate_pattern (XEXP (pattern, 0), info, set, set ? '+' : 0);
+      validate_pattern (XEXP (pattern, 0), info,
+			set_code ? set : NULL_RTX, set_code ? '+' : 0);
       return;
 
     case LABEL_REF:
-- 
2.3.0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]