http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53957
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2012-07-18 Ever Confirmed|0 |1 --- Comment #1 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-07-18 11:25:55 UTC --- On trunk we do vectorize the loop at 552, but I'm not sure that unconditionally calling vmldAtan2 is profitable. That is, trunk for me has (-Ofast -mveclibabi=svml): 552: LOOP VECTORIZED. 576: LOOP VECTORIZED. 662: LOOP VECTORIZED. 1032: LOOP VECTORIZED. 1060: LOOP VECTORIZED. The loop at 639 is converted to two memset calls. mp_prop_design.f90(677): (col. 16) remark: PARTIAL LOOP WAS VECTORIZED. (Line number points to the outermost of the three loops; there are also conditional jumps) seems to be the important one to tackle. For the loop at 818 we fail to if-convert the nested if IF ( j.EQ.1 ) THEN tempa(j) = ZERO ELSE arg1 = -vefz(j) arg2 = vefphi(j) IF ( (arg2.LT.ZERO) .OR. (arg2.GT.ZERO) ) THEN tempa(j) = ATAN(arg1/arg2) - theta(j) ELSE tempa(j) = -theta(j) ENDIF ENDIF where we also fail to apply store-motion of tempa(j). The if (j == 1) conditional code makes the loop suitable for peeling, too. That said, this loop is suitable for analysis as well.