diff mbox

[rs6000] Canonicalize split for ordered and unordered vector compares

Message ID 1393288900.20991.85.camel@gnopaine
State New
Headers show

Commit Message

Bill Schmidt Feb. 25, 2014, 12:41 a.m. UTC
Hi,

The patterns *vector_ordered<mode> and *vector_unordered<mode> perform a
split that's intended to match the nor<mode>3 pattern.  However, they
don't use the proper canonical form, so the resulting insn isn't
recognized.  This patch changes the splits to use the canonical form.

Bootstrapped and tested on powerpc64{,le}-unknown-linux-gnu with no
regressions.  Is this ok for trunk?

Thanks,
Bill


2014-02-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* config/rs6000/vector.md (*vector_ordered<mode>): Change split to
	use canonical form for nor<mode>3.
	(*vector_unordered<mode>): Likewise.

Comments

Bill Schmidt Feb. 25, 2014, 12:43 a.m. UTC | #1
Whoops, just noticed the obvious error in the patch.  Must have crossed
my eyes and seen a "not" that wasn't there.  Will re-fix shortly.

Bill

On Mon, 2014-02-24 at 18:41 -0600, Bill Schmidt wrote:
> Hi,
> 
> The patterns *vector_ordered<mode> and *vector_unordered<mode> perform a
> split that's intended to match the nor<mode>3 pattern.  However, they
> don't use the proper canonical form, so the resulting insn isn't
> recognized.  This patch changes the splits to use the canonical form.
> 
> Bootstrapped and tested on powerpc64{,le}-unknown-linux-gnu with no
> regressions.  Is this ok for trunk?
> 
> Thanks,
> Bill
> 
> 
> 2014-02-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
> 
> 	* config/rs6000/vector.md (*vector_ordered<mode>): Change split to
> 	use canonical form for nor<mode>3.
> 	(*vector_unordered<mode>): Likewise.
> 
> 
> Index: gcc/config/rs6000/vector.md
> ===================================================================
> --- gcc/config/rs6000/vector.md	(revision 208062)
> +++ gcc/config/rs6000/vector.md	(working copy)
> @@ -586,8 +586,8 @@
>  	(ge:VEC_F (match_dup 2)
>  		  (match_dup 1)))
>     (set (match_dup 0)
> -	(ior:VEC_F (match_dup 3)
> -		   (match_dup 4)))]
> +        (and:VEC_F (not:VEC_F (match_dup 3))
> +                   (not:VEC_F (match_dup 4))))]
>    "
>  {
>    operands[3] = gen_reg_rtx (<MODE>mode);
> @@ -608,8 +608,8 @@
>  	(ge:VEC_F (match_dup 2)
>  		  (match_dup 1)))
>     (set (match_dup 0)
> -	(not:VEC_F (ior:VEC_F (match_dup 3)
> -			      (match_dup 4))))]
> +        (and:VEC_F (not:VEC_F (match_dup 3))
> +                   (not:VEC_F (match_dup 4))))]
>    "
>  {
>    operands[3] = gen_reg_rtx (<MODE>mode);
> 
>
diff mbox

Patch

Index: gcc/config/rs6000/vector.md
===================================================================
--- gcc/config/rs6000/vector.md	(revision 208062)
+++ gcc/config/rs6000/vector.md	(working copy)
@@ -586,8 +586,8 @@ 
 	(ge:VEC_F (match_dup 2)
 		  (match_dup 1)))
    (set (match_dup 0)
-	(ior:VEC_F (match_dup 3)
-		   (match_dup 4)))]
+        (and:VEC_F (not:VEC_F (match_dup 3))
+                   (not:VEC_F (match_dup 4))))]
   "
 {
   operands[3] = gen_reg_rtx (<MODE>mode);
@@ -608,8 +608,8 @@ 
 	(ge:VEC_F (match_dup 2)
 		  (match_dup 1)))
    (set (match_dup 0)
-	(not:VEC_F (ior:VEC_F (match_dup 3)
-			      (match_dup 4))))]
+        (and:VEC_F (not:VEC_F (match_dup 3))
+                   (not:VEC_F (match_dup 4))))]
   "
 {
   operands[3] = gen_reg_rtx (<MODE>mode);