------- Comment #7 from matz at gcc dot gnu dot org 2010-09-17 13:45 ------- It might have been exposed by that revision, but that merely points out a deficiency in RTL if conversion. The final gimple code doesn't have explicit jumps in the inner loop, but uses cond_expr:
<bb 3>: # s_22 = PHI <0(2), s_30(3)> # i_19 = PHI <0(2), i_31(3)> D.2693_11 = MEM[base: products_9(D), index: i_19, step: 8, offset: 0B]; val_4 = [cond_expr] D.2693_11 <= 0 ? -1 : 1; prephitmp.9_39 = [cond_expr] D.2693_11 <= 0 ? -1 : 1; prephitmp.10_40 = [cond_expr] D.2693_11 <= 0 ? 1 : -1; prephitmp.11_41 = [cond_expr] D.2693_11 <= 0 ? 1 : -1; D.2698_21 = D.2693_11 * prephitmp.9_39; D.2699_25 = (long unsigned int) D.2698_21; val_3 = [cond_expr] i_19 != D.2699_25 ? prephitmp.10_40 : val_4; prephitmp.11_43 = [cond_expr] i_19 != D.2699_25 ? prephitmp.11_41 : prephitmp.9_39; MEM[base: products_9(D), index: i_19, step: 8, offset: 0B] = prephitmp.11_43; s_30 = val_3 + s_22; i_31 = i_19 + 1; if (i_31 != count_7(D)) goto <bb 3>; else goto <bb 4>; -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45685