Hi,

Does this patch fix the problem?

Ira

Index: tree-vect-transform.c
===================================================================
--- tree-vect-transform.c       (revision 117002)
+++ tree-vect-transform.c       (working copy)
@@ -1916,10 +1916,10 @@ vectorizable_load (tree stmt, block_stmt
          /* Create permutation mask, if required, in loop preheader.  */
          tree builtin_decl;
          params = build_tree_list (NULL_TREE, init_addr);
-         vec_dest = vect_create_destination_var (scalar_dest, vectype);
          builtin_decl = targetm.vectorize.builtin_mask_for_load ();
          new_stmt = build_function_call_expr (builtin_decl, params);
-         new_stmt = build2 (MODIFY_EXPR, vectype, vec_dest, new_stmt);
+         vec_dest = vect_create_destination_var (scalar_dest, TREE_TYPE
(new_stmt));
+         new_stmt = build2 (MODIFY_EXPR, TREE_TYPE (vec_dest), vec_dest,
new_stmt);
          new_temp = make_ssa_name (vec_dest, new_stmt);
          TREE_OPERAND (new_stmt, 0) = new_temp;
          new_bb = bsi_insert_on_edge_immediate (pe, new_stmt);


Dorit Nuzman/Haifa/IBM wrote on 16/09/2006 12:37:28:

> > I'm trying to add a hook for aligning vectors for loads.
> >
> > I'm using the altivec rs6000 code as a baseline.
> >
> > However, the instruction is like the iwmmxt_walign instruction in the
> > ARM port; it takes
> > a normalish register and uses the bottom bits... it doesn't use a
> > full-width vector.
> >
> > GCC complains when my builtin pointed to by
> > TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD yields a QImode result, because
> > it has no way of converting that to the vector moe it is expecting.  I
>
> Looks like it's a bug in the vectorizer - we treat both the return
> value of the mask_for_load builtin, and the 3rd argument to the
> realign_load stmt (e.g. Altivec's vperm), as variables of type
> 'vectype', instead of obtaining the type from the target machine
> description. All we need to care about is that these two variables
> have the same type. I'll look into that
>
> dorit
>
> > think the altivec side would have a similar problem, as the expected
> > RTX output RTX is:
> >
> > (reg:V8HI 131 [ vect_var_.2540 ])
> >
> > but it changes that to:
> >
> > (reg:V16QI 160)
> >
> > for the VLSR instruction.  V16QImode is what VPERM expects, and I
> > think since V8HI and V16QI mode are the same size everyone is happy.
> >
> > Is there a way to tell GCC what the type of the
> > TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD should be?  Looking at
> > http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gccint/Addressing-Modes.
> > html#Addressing-Modes
> > it reads like it must merely match the last operand of the
> > vec_realign_load_<mode> pattern.
> >
> > --
> > Why are ``tolerant'' people so intolerant of intolerant people?

Reply via email to