On Thu, Jul 23, 2015 at 10:03 PM, Jeff Law <l...@redhat.com> wrote: > On 07/20/2015 09:05 AM, Yuri Rumyantsev wrote: >> >> Hi Jeff! >> >> Thanks for your details comments. >> >> You asked: >> How are conditionals on vectors usually handled? You should try to >> mimick that and report, with detail, why that's not working. >> >> In current implementation of vectorization pass all comparisons are >> handled through COND_EXPR, i.e. vect-pattern pass transforms all >> comparisons producing bool values to conditional expressions like a[i] >> != 0 --> a[i]!=0? 1: 0 which vectorizers transforms to >> vect-cond-expr. So we don't have operations with vector operands and >> scalar (bool) result. >> To implement such operations I introduced target-hook. Could you >> propose another solution implementing it? > > Is there any rationale given anywhere for the transformation into > conditional expressions? ie, is there any reason why we can't have a > GIMPLE_COND where the expression is a vector condition?
No rationale for equality compare which would have the semantic of having all elements equal or not equal. But you can't define a sensible ordering (that HW implements) for other compare operators and you obviously need a single boolean result, not a vector of element comparison results. I've already replied that I'm fine allowing ==/!= whole-vector compares. But one needs to check whether expansion does anything sensible with them (either expand to integer subreg compares or add optabs for the compares). Richard. > Thanks, > > Jeff >