On 04/17/2014 06:09 AM, Yuri Rumyantsev wrote: > + /* Build cond expression using COND and constant operand > + of reduction rhs. */ > + c = fold_build_cond_expr (TREE_TYPE (rhs1), > + unshare_expr (cond), > + swap? zero: op1, > + swap? op1: zero);
Do we recognize somewhere the canonical value for the comparison is -1, and simplify this further? E.g. if (A[i] != 0) num += 1; _vec_cmp = (_vec_A != _vec_ZERO); _vec_num -= _vec_cmp; if (A[i] != 0) num += x; _vec_cmp = (_vec_A != _vec_ZERO); _vec_cmp *= _vec_x; _vec_num -= _vec_cmp; r~