Juergen Christ <jchr...@linux.ibm.com> writes:
> The emulation via word mode tries to perform integer arithmetic on floating > point values instead of floating point arithmetic. This leads to > mis-compilations. Is the bug ref + test missing? > > Failure occured on s390x on these existing test cases: > gcc.dg/vect/tsvc/vect-tsvc-s112.c > gcc.dg/vect/tsvc/vect-tsvc-s113.c > gcc.dg/vect/tsvc/vect-tsvc-s119.c > gcc.dg/vect/tsvc/vect-tsvc-s121.c > gcc.dg/vect/tsvc/vect-tsvc-s131.c > gcc.dg/vect/tsvc/vect-tsvc-s132.c > gcc.dg/vect/tsvc/vect-tsvc-s2233.c > gcc.dg/vect/tsvc/vect-tsvc-s421.c > gcc.dg/vect/vect-alias-check-14.c > gcc.target/s390/vector/partial/s390-vec-length-epil-run-1.c > gcc.target/s390/vector/partial/s390-vec-length-epil-run-3.c > gcc.target/s390/vector/partial/s390-vec-length-full-run-3.c > > gcc/ChangeLog: > > * tree-vect-stmts.cc (vectorizable_operation): Don't emulate floating > point vectors > > Signed-off-by: Juergen Christ <jchr...@linux.ibm.com> > --- > gcc/tree-vect-stmts.cc | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc > index 09749ae38174..f95ff2c2aa34 100644 > --- a/gcc/tree-vect-stmts.cc > +++ b/gcc/tree-vect-stmts.cc > @@ -6756,7 +6756,8 @@ vectorizable_operation (vec_info *vinfo, > those through even when the mode isn't word_mode. For > ops we have to lower the lowering code assumes we are > dealing with word_mode. */ > - if ((((code == PLUS_EXPR || code == MINUS_EXPR || code == NEGATE_EXPR) > + if (!INTEGRAL_TYPE_P (TREE_TYPE (vectype)) > + || (((code == PLUS_EXPR || code == MINUS_EXPR || code == NEGATE_EXPR) > || !target_support_p) > && maybe_ne (GET_MODE_SIZE (vec_mode), UNITS_PER_WORD)) > /* Check only during analysis. */