Here is another case which my tree combiner confuses the other tree optimizations but it should not. I get in .vect: "not vectorized: number of iterations cannot be computed.". If I change D1360 to be just n, it works. If I change "n <= 1" to be "D1360 <= 0" It works (on the mainline without my tree combiner which is the opposite of what my tree combiner does).
typedef float afloat __attribute__ ((__aligned__(16))); int main1 (int n , afloat * __restrict__ pa, afloat * __restrict__ pb) { int i; int ivtmp51; int ivtmp35; int D1360 = n/2; if (n <= 1) return 0; ivtmp35 = 1; do { ivtmp51 = ivtmp35; pa[ivtmp51] = pb[ivtmp51]; ivtmp35 = ivtmp51 + 1; } while (D1360 > ivtmp51); return 0; } -- Summary: Loop is not vectorized when it should be Product: gcc Version: 4.0.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: minor Priority: P2 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: pinskia at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18940