On 9/6/19 7:36 AM, Martin Liška wrote: > Hi. > > I've been working on transition of cond expressions to match.pd. > With my changes I noticed there's one wrong pattern that leads to: > > Transforming _6 > _7 & _6 < _7 into 0 > ... > /home/marxin/Programming/gcc/gcc/testsuite/c-c++-common/vector-compare-3.c:20:1: > error: the first argument of a ‘vec_cond_expr’ must be of a boolean vector > type of the same number of elements as the result > 20 | g (v4i *x, v4i const *y, v4i *z, v4i *t) > | ^ > vector(4) int > _Bool > _9 = VEC_COND_EXPR <0, { -1, -1, -1, -1 }, { 0, 0, 0, 0 }>; > > which is wrong. > > Proper simlification is: > Transforming _6 > _7 & _6 < _7 into { 0, 0, 0, 0 } > > Patch can bootstrap on x86_64-linux-gnu and survives regression tests. > > Ready to be installed? > Thanks, > Martin > > gcc/ChangeLog: > > 2019-09-06 Martin Liska <mli...@suse.cz> > > * match.pd: For vector types, take type from a vector argument > of the expression. Seems like you're going to have an overly long time in match.pd. Perhaps store the desired type into a local or split the line.
OK with that change. jeff