https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103361
--- Comment #3 from Richard Biener ---
OK, so I think this is an overflow somewhere in data dependence compute ...
Creating dr for MEM ]> [(const short unsigned int
&)&c][_2]
analyze_innermost: success.
base_address: &c
offset from base address: (ssizetype) ((sizetype) h_10 * 2)
constant offset from base address: 0
step: -3762939935406616984(OVF)
base alignment: 2
base misalignment: 0
offset alignment: 2
step alignment: 8
base_object: MEM ]> [(const short unsigned
int &)&c]
Access function 0: {{0, +, 3}_1, +, 7341902069151467316}_2
...
(Data Dep:
#(Data Ref:
# bb: 4
# stmt: _25 = MEM ]> [(const short unsigned int
&)&c][_2];
# ref: MEM ]> [(const short unsigned int
&)&c][_2];
# base_object: MEM ]> [(const short unsigned int
&)&c];
# Access function 0: {{0, +, 3}_1, +, 7341902069151467316}_2
#)
#(Data Ref:
# bb: 5
# stmt: pretmp_28 = MEM[(const short unsigned int &)_3];
# ref: MEM[(const short unsigned int &)_3];
# base_object: MEM[(const short unsigned int &)&c];
# Access function 0: {{0B, +, 6}_1, +, 14683804138302934632}_2
#)
access_fn_A: {{0B, +, 6}_1, +, 14683804138302934632}_2
access_fn_B: {{0B, +, 6}_1, +, 14683804138302934632}_2
(subscript
iterations_that_access_an_element_twice_in_A: [0]
last_conflict: scev_not_known
iterations_that_access_an_element_twice_in_B: [0]
last_conflict: scev_not_known
(Subscript distance: 0 ))
loop nest: (1 2 )
distance_vector: 0 0
distance_vector: -1736083252 3
direction_vector: ==
direction_vector: -+
)
the accesses are equal so the distance vector should be 0 0 which it is
for the inner loop but not for the outer it seems(!?). We run into
if (same_access_functions (ddr))
{
/* Save the 0 vector. */
dist_v = lambda_vector_new (DDR_NB_LOOPS (ddr));
save_dist_v (ddr, dist_v);
if (invariant_access_functions (ddr, loop_nest->num))
add_distance_for_zero_overlaps (ddr);
if (DDR_NB_LOOPS (ddr) > 1)
add_other_self_distances (ddr);
return true;
where invariant_access_functions is false and we eventually run into
add_multivariate_self_dist.
Ah, so the issue is lambda vector dumping is broken (truncates to int) and
unroll-and-jam also fails to use lambda_int ...