On Sun, Nov 02, 2014 at 11:08:57AM +0100, Marc Glisse wrote:
> @@ -14189,47 +14190,47 @@ fold_ternary_loc (location_t loc, enum t
>       return fold_build2_loc (loc, PLUS_EXPR, type,
>                               const_binop (MULT_EXPR, arg0, arg1), arg2);
>        if (integer_zerop (arg2))
>       return fold_build2_loc (loc, MULT_EXPR, type, arg0, arg1);
>  
>        return fold_fma (loc, type, arg0, arg1, arg2);
>  
>      case VEC_PERM_EXPR:
>        if (TREE_CODE (arg2) == VECTOR_CST)
>       {
> -       unsigned int nelts = TYPE_VECTOR_SUBPARTS (type), i, mask;
> +       unsigned int nelts = TYPE_VECTOR_SUBPARTS (type), i, mask, mask2;
>         unsigned char *sel = XALLOCAVEC (unsigned char, nelts);
> +       unsigned char *sel2 = XALLOCAVEC (unsigned char, nelts);

Can't you just XALLOCAVEC 2 * nelts and set sel2 = sel + nelts; ?

>         bool need_mask_canon = false;
> +       bool need_mask_canon2 = false;
>         bool all_in_vec0 = true;
>         bool all_in_vec1 = true;
>         bool maybe_identity = true;
>         bool single_arg = (op0 == op1);
>         bool changed = false;
>  
>         mask = single_arg ? (nelts - 1) : (2 * nelts - 1);
> +       mask2 = 2 * nelts - 1;

Perhaps mask2 = 2 * nelts - 1; first and use mask2 in mask = ?

Otherwise LGTM.

        Jakub

Reply via email to