[PATCH] Fix overflow-vec-{1,2} testcases on ppc64/s390x (PR middle-end/79454)

Jakub Jelinek jakub@redhat.com
Fri Feb 10 19:50:00 GMT 2017


Hi!

UBSAN_*_OVERFLOW ifns on vector types prefer to just check in a loop
for overflow, but perform the vector arithmetics on vectors.  The advantage
is that the partial results don't have to be inserted one by one into the
result vector.
This requires that there is an instruction to perform that.  We were
checking that, except that I forgot that the vector type could have an
scalar integral mode (like TImode), at which point it actually would perform
say TImode addition rather than V16QImode addition.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
trunk?

2017-02-10  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/79454
	* internal-fn.c (expand_vector_ubsan_overflow): Use piece-wise
	result computation whenever lhs doesn't have vector mode, not
	just when it has BLKmode.

--- gcc/internal-fn.c.jj	2017-02-09 14:55:34.000000000 +0100
+++ gcc/internal-fn.c	2017-02-10 15:58:50.724312535 +0100
@@ -1909,7 +1909,7 @@ expand_vector_ubsan_overflow (location_t
     {
       optab op;
       lhsr = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
-      if (GET_MODE (lhsr) == BLKmode
+      if (!VECTOR_MODE_P (GET_MODE (lhsr))
 	  || (op = optab_for_tree_code (code, TREE_TYPE (arg0),
 					optab_default)) == unknown_optab
 	  || (optab_handler (op, TYPE_MODE (TREE_TYPE (arg0)))

	Jakub



More information about the Gcc-patches mailing list