initialize_matrix_A requires the CHREC_RIGHT to be an INTEGER_CST: switch (TREE_CODE (chrec)) { case POLYNOMIAL_CHREC: A[index][0] = mult * int_cst_value (CHREC_RIGHT (chrec)); return initialize_matrix_A (A, CHREC_LEFT (chrec), index + 1, mult);
and isn't able to back out if it isn't. This patch instead checks for an appropriate CHREC_RIGHT before calling the parent function analyze_subscript_affine_affine. Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64-linux-gnu. OK to install? Richard 2017-11-06 Richard Sandiford <richard.sandif...@linaro.org> gcc/ * tree-data-ref.c (analyze_siv_subscript): Only call analyze_subscript_affine_affine on chrecs that have an INTEGER_CST step. (analyze_miv_subscript): Likewise. Index: gcc/tree-data-ref.c =================================================================== --- gcc/tree-data-ref.c 2017-11-06 19:39:32.924734707 +0000 +++ gcc/tree-data-ref.c 2017-11-06 20:10:40.704478657 +0000 @@ -3788,7 +3788,9 @@ analyze_siv_subscript (tree chrec_a, overlaps_b, overlaps_a, last_conflicts); else if (evolution_function_is_affine_in_loop (chrec_a, loop_nest_num) - && evolution_function_is_affine_in_loop (chrec_b, loop_nest_num)) + && evolution_function_right_is_integer_cst (chrec_a) + && evolution_function_is_affine_in_loop (chrec_b, loop_nest_num) + && evolution_function_right_is_integer_cst (chrec_b)) { if (!chrec_contains_symbols (chrec_a) && !chrec_contains_symbols (chrec_b)) @@ -3922,8 +3924,10 @@ analyze_miv_subscript (tree chrec_a, else if (evolution_function_is_affine_multivariate_p (chrec_a, loop_nest->num) && !chrec_contains_symbols (chrec_a) + && evolution_function_right_is_integer_cst (chrec_a) && evolution_function_is_affine_multivariate_p (chrec_b, loop_nest->num) - && !chrec_contains_symbols (chrec_b)) + && !chrec_contains_symbols (chrec_b) + && evolution_function_right_is_integer_cst (chrec_b)) { /* testsuite/.../ssa-chrec-35.c {0, +, 1}_2 vs. {0, +, 1}_3