PATCH - FSF mainline canonicalization of AltyVec altivec_vandc pattern

Fariborz Jahanian fjahanian@apple.com
Tue Nov 16 16:54:00 GMT 2004


Following AltiVec test case compiled with -O1 and above produces 
inefficient code.

vector unsigned int
vand ( vector unsigned int A, vector unsigned int B)
{
         return vec_andc (A, B);
}

_vand:
         vnor  v3,v3,v3
         vand v2,v2,v3

Instead of:

_vand:
         vandc v2,v2,v3

This is because pattern altivec_vandc is not in its canonical form. 
This results in the combine
phase not to find the matching canonicalized pattern. It then proceeds 
to split the RTL into an
'and' of a 'not'.

Following patch, bootstrapped and dejagnu tested on apple-ppc-darwin 
fixes it.

OK for FSF mainline?

- Fariborz (fjahanian@apple.com).


ChangeLog:

2004-11-16  Fariborz Jahanian <fjahanian@apple.com>

         * config/rs6000/altivec.md (altivec_vandc): Canonicalize
         the pattern.


Index: altivec.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/altivec.md,v
retrieving revision 1.1.2.11.2.8
diff -c -p -r1.1.2.11.2.8 altivec.md
*** altivec.md  11 Nov 2004 01:13:56 -0000      1.1.2.11.2.8
--- altivec.md  16 Nov 2004 16:08:04 -0000
***************
*** 463,472 ****

   (define_insn "altivec_vandc"
     [(set (match_operand:V4SI 0 "register_operand" "=v")
!         (and:V4SI (match_operand:V4SI 1 "register_operand" "v")
!                   (not:V4SI (match_operand:V4SI 2 "register_operand" 
"v"))))]
     "TARGET_ALTIVEC"
!   "vandc %0,%1,%2"
     [(set_attr "type" "vecsimple")])

   (define_insn "altivec_vavgub"
--- 463,472 ----

   (define_insn "altivec_vandc"
     [(set (match_operand:V4SI 0 "register_operand" "=v")
!         (and:V4SI (not:V4SI (match_operand:V4SI 1 "register_operand" 
"v"))
!                   (match_operand:V4SI 2 "register_operand" "v")))]
     "TARGET_ALTIVEC"
!   "vandc %0,%2,%1"
     [(set_attr "type" "vecsimple")])

   (define_insn "altivec_vavgub"



More information about the Gcc-patches mailing list