On Tue, Dec 09, 2014 at 08:26:56PM +0100, Marc Glisse wrote: > >@@ -426,7 +426,8 @@ negate_expr_p (tree t) > > > > case VECTOR_CST: > > { > >- if (FLOAT_TYPE_P (TREE_TYPE (type)) || TYPE_OVERFLOW_WRAPS (type)) > >+ if (FLOAT_TYPE_P (TREE_TYPE (type)) > >+ || (INTEGRAL_TYPE_P (type) && TYPE_OVERFLOW_WRAPS (type))) > > return true; > > type is a vector type, so INTEGRAL_TYPE_P (type) is always false I think. I guess that's true.
> > > > int count = TYPE_VECTOR_SUBPARTS (type), i; > >@@ -558,7 +559,8 @@ fold_negate_expr (location_t loc, tree t) > > case INTEGER_CST: > > tem = fold_negate_const (t, type); > > if (TREE_OVERFLOW (tem) == TREE_OVERFLOW (t) > >- || (!TYPE_OVERFLOW_TRAPS (type) > >+ || (INTEGRAL_TYPE_P (type) > > Can that be false for an INTEGER_CST? Seems that I was too eager here adding checks. (Or maybe I really saw an ICE here.) > >@@ -10074,7 +10085,8 @@ fold_binary_loc (location_t loc, > > /* Reassociate (plus (plus (mult) (foo)) (mult)) as > > (plus (plus (mult) (mult)) (foo)) so that we can > > take advantage of the factoring cases below. */ > >- if (TYPE_OVERFLOW_WRAPS (type) > >+ if (INTEGRAL_TYPE_P (type) > >+ && TYPE_OVERFLOW_WRAPS (type) > > && (((TREE_CODE (arg0) == PLUS_EXPR > > || TREE_CODE (arg0) == MINUS_EXPR) > > && TREE_CODE (arg1) == MULT_EXPR) > > Is there a particular reason to disable this for vectors? Note that we are > already in a !FLOAT_TYPE_P block. > Again, why disable this for vectors? > (Btw tree_unary_nonnegative_warnv_p seems wrong for ABS of an integer vector) > > I am stopping here. I think by default you should allow integer vectors. > A new macro that accepts both scalar and vector integer types would be > helpful (like FLOAT_TYPE_P). Yeah, let me prepare another version. Thanks, Marek