/* { dg-do compile } */ /* { dg-options "-O3 -fdump-tree-ifcvt-details-blocks-details" } */ void foo (int *x1, int *x2, int *x3, int *x4, int *y) { int i; int a1, a2, a3, b1, b2; for (i=0; i<128; i++) { a1 = x1[i]; a2 = x2[i]; a3 = x3[i]; y[i] = 0; if (x4[i] == 0) { b1 = a1 + 1; if (a2 > 0) b1++; a1++; if (a3 < 0) b1--; y[i] = b1; } } } /* { dg-final { scan-tree-dump-times "Use predicate of bb" 4 "ifcvt" } } */ /* We insert into code if (LOOP_VECTORIZED (...)) which is folded by vectorizer. Both outgoing edges must have probability 100% so the resulting profile match after folding. */ /* { dg-final { scan-tree-dump-times "Invalid sum of outgoing probabilities 200.0" 1 "ifcvt" } } */ /* { dg-final { scan-tree-dump-times "Invalid sum of incoming counts" 1 "ifcvt" } } */