2015-10-13 18:42 GMT+03:00 Jeff Law <l...@redhat.com>: > On 10/13/2015 08:14 AM, Ilya Enkovich wrote: >>>> >>>> + >>>> +static tree >>>> +build_vec_cmp (tree_code code, tree type, >>>> + tree arg0, tree arg1) >>>> +{ >>>> + tree zero_vec = build_zero_cst (type); >>>> + tree minus_one_vec = build_minus_one_cst (type); >>>> + tree cmp_type = build_same_sized_truth_vector_type (type); >>>> + tree cmp = build2 (code, cmp_type, arg0, arg1); >>>> + return build3 (VEC_COND_EXPR, type, cmp, minus_one_vec, zero_vec); >>>> +} >>> >>> Isn't this implementation the same for C & C++? Does it make sense to >>> put >>> it in c-family/c-common.c? >> >> >> C++ version calls fold_if_not_in_template for generated comparison. It is >> required there to successfully recognize vector MIN, MAX and ABS templates >> for vector ?: conditional operator. Vector form of ?: conditional operator >> is supported for C++ only. > > Ah, nevermind then. > > >>> >>> However, more generally, do we need to do anything for the other >>> languages? >> >> >> Looking into that I got an impression vector modes are used by C/C++ >> vector extensions only. And I think regression testing would reveal some >> failures otherwise. > > Maybe this stuff hasn't bled into the Fortran front-end, but the gfortran > front-end certainly has OpenMP support which presumably has vector > extensions.
OpenMP extension doesn't produce any vector code in front-end. Code will be produced by vectorizer anyway. > > The fact that nothing's failing in the testsuite is encouraging, but it'd be > worth spending a few minutes taking a look to see if there's something that > might need updating. I also grepped for VEC_COND_EXPR and it never occurs in front-ends other than C/C++. Thanks, Ilya > > Jeff >