------- Comment #5 from pinskia at gcc dot gnu dot org 2006-09-01 05:14 ------- For 4.1, we get: i_1: VARYING size_2: VARYING size_3: [size_2, size_2] EQUIVALENCES: { size_2 } (1 elements) i_4: [0, +INF] EQUIVALENCES: { i_1 i_7 i_8 i_9 } (4 elements) n_5: [0, size_2 - 1] EQUIVALENCES: { i_1 i_9 } (2 elements) i_6: [1, +INF] EQUIVALENCES: { } (0 elements) i_7: [0, +INF] EQUIVALENCES: { i_1 i_8 i_9 } (3 elements) i_8: ~[0, 0] EQUIVALENCES: { i_1 i_9 } (2 elements) i_9: [0, size_2 - 1] EQUIVALENCES: { i_1 } (1 elements)
While on the mainline, we get: i_1: VARYING size_2: VARYING size_3: [size_2, size_2] EQUIVALENCES: { size_2 } (1 elements) n_5: [0, size_2 - 1] EQUIVALENCES: { i_1 i_9 } (2 elements) i_6: ~[0, 0] EQUIVALENCES: { } (0 elements) i_7: [-INF, -1] EQUIVALENCES: { i_8 i_9 } (2 elements) i_8: ~[0, 0] EQUIVALENCES: { i_9 } (1 elements) i_9: [0, size_2 - 1] EQUIVALENCES: { i_1 } (1 elements) Note the missing of i_4, yes it is there in the IR too really so maybe this is a VRP problem. I have not looked at the dump before the patch to make sure it was the same. Anyways the ICE is because i_7 and i_7 are not equivalant as detected by VRP, though I say it is. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28905