------- Comment #5 from amonakov at gcc dot gnu dot org 2010-01-25 17:06 ------- We fail to find number of iterations after rewriting reductions out of SSA. Before graphite pass, IR looks like (for the previous testcase, "pr42771.c"):
<bb 9>: # j_26 = PHI <j_20(10)> <bb 10>: # j_33 = PHI <j_26(9), 1(16)> D.2747_16 = B[j_33][0]; D.2748_17 = j_33 + -1; D.2749_18 = B[D.2748_17][0]; D.2750_19 = D.2749_18 ^ D.2747_16; B[j_33][0] = D.2750_19; j_20 = j_33 + 1; if (jm_14(D) > j_20) goto <bb 9>; else goto <bb 11>; At the time of the ICE, IR is transformed to (gdb) call debug_loop(use_loop, 3) loop_3 (header = 10, latch = 9, niter = (unsigned int) jm_14(D) + 4294967294, upper_bound = 2147483646) { bb_9 (preds = {bb_10 }, succs = {bb_10 }) { <bb 9>: # .MEM_24 = PHI <.MEM_78(10)> # VUSE <.MEM_24> j_26 = Close_Phi.13[0]; # .MEM_79 = VDEF <.MEM_24> General_Reduction.14[0] = j_26; } bb_10 (preds = {bb_9 bb_16 }, succs = {bb_9 bb_11 }) { <bb 10>: # .MEM_15 = PHI <.MEM_79(9), .MEM_77(16)> # VUSE <.MEM_15> D.2766_76 = General_Reduction.14[0]; j_33 = D.2766_76; # VUSE <.MEM_15> D.2747_16 = B[j_33][0]; D.2748_17 = j_33 + -1; # VUSE <.MEM_15> D.2749_18 = B[D.2748_17][0]; D.2750_19 = D.2749_18 ^ D.2747_16; # .MEM_30 = VDEF <.MEM_15> B[j_33][0] = D.2750_19; j_20 = j_33 + 1; # .MEM_78 = VDEF <.MEM_30> Close_Phi.13[0] = j_20; if (jm_14(D) > j_20) goto <bb 9>; else goto <bb 11>; } } We would fail to discover scalar evolution of j_33. -- amonakov at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amonakov at gcc dot gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42771