------- Comment #2 from dorit at il dot ibm dot com 2007-04-17 20:10 ------- > 2 more are under investigation: > no-section-anchors-vect-69.c > vect-reduc-dot-u16a.c
In the first testcase, the vectorizer can only prove that the data reference in the third loop is aligned on 8 bytes. This is enough for targets like ia64 in which the vector size is 8 bytes, and therefore we don't need to peel in order to force alignment for this loop. So overall in this testcase we peel only twice. On targets that require 16byte alignment, a guaranteed 8bytes alignment is not enough, and therefore we peel this loop to align the data-reference (and overall in the testcase we peel 3 times). I guess the way to solve this is to add a keyword that lists the targets with 8byte-wide-vectors and targets with 16byte-wide-vectors, or just hard code the targets that are expected to fail/pass here. I'll sleep on it and supply a patch soon. The second test needs the same fix as a lot of the other tests: add { target vect_pack_mod } to the check. This is because the loop in main has a cast from int to short in it. However, in this testcase we already have two target keywords that we are checking: { target { vect_short_mult && vect_widen_sum_hi_to_si } }, and I don't think the testsuite engine currently provides the flexibility to and a third keyword, so I suggest to just change the loop slightly to avoid the cast (it's not the point of this testcase anyway): Index: vect-reduc-dot-u16a.c =================================================================== --- vect-reduc-dot-u16a.c (revision 123909) +++ vect-reduc-dot-u16a.c (working copy) @@ -30,7 +30,7 @@ int main (void) { unsigned int dot1; - int i; + unsigned short i; check_vect (); -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31589