When fiddling around with vector lowering I found the following adjusted testcase helpful testing proper vector lowering of word_mode vector plus.
Tested on x86_64-unknown-linux-gnu, applied. Richard. 2017-09-06 Richard Biener <rguent...@suse.de> * gcc.c-torture/execute/20050604-1.c: Adjust to be a better test for correctness of vector lowering. Index: gcc/testsuite/gcc.c-torture/execute/20050604-1.c =================================================================== --- gcc/testsuite/gcc.c-torture/execute/20050604-1.c (revision 251790) +++ gcc/testsuite/gcc.c-torture/execute/20050604-1.c (working copy) @@ -6,7 +6,7 @@ extern void abort (void); -typedef short v4hi __attribute__ ((vector_size (8))); +typedef unsigned short v4hi __attribute__ ((vector_size (8))); typedef float v4sf __attribute__ ((vector_size (16))); union @@ -26,7 +26,7 @@ foo (void) { unsigned int i; for (i = 0; i < 2; i++) - u.v += (v4hi) { 12, 14 }; + u.v += (v4hi) { 12, 32768 }; for (i = 0; i < 2; i++) v.v += (v4sf) { 18.0, 20.0, 22 }; } @@ -35,7 +35,7 @@ int main (void) { foo (); - if (u.s[0] != 24 || u.s[1] != 28 || u.s[2] || u.s[3]) + if (u.s[0] != 24 || u.s[1] != 0 || u.s[2] || u.s[3]) abort (); if (v.f[0] != 36.0 || v.f[1] != 40.0 || v.f[2] != 44.0 || v.f[3] != 0.0) abort ();