Patchwork [i386] : Remove mode of address_operand predicate from prefetch patterns

login
register
mail settings
Submitter Uros Bizjak
Date Sept. 13, 2012, 1:47 p.m.
Message ID <CAFULd4b5_AHbYWN=RmYp1XxNZgubOKBM87iSwX0tTM1ojFgc-Q@mail.gmail.com>
Download mbox | patch
Permalink /patch/183630/
State New
Headers show

Comments

Uros Bizjak - Sept. 13, 2012, 1:47 p.m.
Hello!

The mode of address_operand predicate is ignored in ix86_legitimate_address_p.

2012-08-13  Uros Bizjak  <ubizjak@gmail.com>

	* config/i386/i386.md (prefetch): Do not assert mode of operand 0.
	(*prefetch_sse_<mode>): Do not set mode of address_operand predicate.
	Rename to ...
	(*prefetch_sse): ... this.
	(*prefetch_3dnow_<mode>): Do not set mode of address_operand predicate.
	Rename to ...
	(*prefetch_3dnow): ... this.

Bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32} and
committed to mainline SVN.

Uros.

Patch

Index: i386.md
===================================================================
--- i386.md	(revision 191240)
+++ i386.md	(working copy)
@@ -17800,12 +17800,10 @@ 
   int locality = INTVAL (operands[2]);
 
   gcc_assert (rw == 0 || rw == 1);
-  gcc_assert (locality >= 0 && locality <= 3);
-  gcc_assert (GET_MODE (operands[0]) == Pmode
-	      || GET_MODE (operands[0]) == VOIDmode);
+  gcc_assert (IN_RANGE (locality, 0, 3));
+
   if (TARGET_PRFCHW && rw)
     operands[2] = GEN_INT (3);
-
   /* Use 3dNOW prefetch in case we are asking for write prefetch not
      supported by SSE counterpart or the SSE prefetch is not available
      (K6 machines).  Otherwise use SSE prefetch as it allows specifying
@@ -17816,8 +17814,8 @@ 
     operands[1] = const0_rtx;
 })
 
-(define_insn "*prefetch_sse_<mode>"
-  [(prefetch (match_operand:P 0 "address_operand" "p")
+(define_insn "*prefetch_sse"
+  [(prefetch (match_operand 0 "address_operand" "p")
 	     (const_int 0)
 	     (match_operand:SI 1 "const_int_operand"))]
   "TARGET_PREFETCH_SSE"
@@ -17827,7 +17825,7 @@ 
   };
 
   int locality = INTVAL (operands[1]);
-  gcc_assert (locality >= 0 && locality <= 3);
+  gcc_assert (IN_RANGE (locality, 0, 3));
 
   return patterns[locality];
 }
@@ -17837,8 +17835,8 @@ 
 	(symbol_ref "memory_address_length (operands[0])"))
    (set_attr "memory" "none")])
 
-(define_insn "*prefetch_3dnow_<mode>"
-  [(prefetch (match_operand:P 0 "address_operand" "p")
+(define_insn "*prefetch_3dnow"
+  [(prefetch (match_operand 0 "address_operand" "p")
 	     (match_operand:SI 1 "const_int_operand" "n")
 	     (const_int 3))]
   "TARGET_3DNOW || TARGET_PRFCHW"