Hi,
Can a gatekeeper please review the attached vectorizer patch that:

1. Introduces an initial object-oriented framework of classes (SIMD_*) to 
represent and manage simd expressions.

2. Enhances the representation of constant integer vector and the 
load-from-constant-integer-vector.

   Before this change, a constant integer (say 4) is vectorized into 
V16I4CONST. i.e a symbolic constant.
   After this change, the vector is represented by:
      U4INTCONST 4
   V16I4I4REPLICATE

   It is up to CG to determine how generate the code. Currently, the code would 
be very
efficient if the element's value is 0. In this case, we need only one 
arithmetic instruction
"pxor $xmm0, $xmm0". If element's value is non-zero, there are two options:
  a)
    - a.1) load integer to a scalar GPR, and
    - a.2) move the GPR a SIMD register, and
    - a.3) perform resuffle to replicate the element's value to the entire 
vector.

  b) save the vector as a symbolic constant, substitute the REPLICATE with
     load from the symbolic constant.

  b) is appealing for vector with short vector-length, say V16I8, and a) is
desirable for vector like V16I1. However, we are blocked at step a.2) --
A SIMD register is categorized as fp register, we have hard time moving a int
register to fp register.

3. Vectorizes loop with small trip count

   The original SIMD implementation set a hard trip-count limit for 
vectorization.
This change is to try to vectorize any loop so long as the trip-count >= 
vector-len.
e.g. Following loop can be vectorized now:

  for (int i=0; i < 2; i++) double_array[i] = (double)float_array[i];

 (TODO in the future: For the loop like following, SIMD still try to perform 
peeling in order
to archieve better alignment. This is a deoptimization if the trip-count is
too small.   for (int i=0; i<4; i++) { a[i+1] = 0; })

Thanks.
Pallavi

Attachment: vectorizer.p
Description: vectorizer.p

------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to