/* { dg-do compile } */ /* { dg-options "-O3 -fdump-tree-ifcvt-stats-blocks-details" } */ float a,b,c,d; float z[1024]; int ok[1024]; const float rBig = 150.; void foo() { int i; for (i=0; i!=1024; ++i) { float rR = a*z[i]; float rL = b*z[i]; float rMin = (rR<rL) ? rR : rL; float rMax = (rR<rL) ? rL : rR; rMin = (rMax>0) ? rMin : rBig; rMin = (rMin>0) ? rMin : rMax; ok[i] = rMin-c<rMax+d; } } /* { dg-final { scan-tree-dump-times "Applying if-conversion" 1 "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" } } */