re PR tree-optimization/89223 (internal compiler error: in int_cst_value, at tree.c:11226)
2019-02-08 Richard Biener <rguenther@suse.de> PR middle-end/89223 * tree-data-ref.c (initialize_matrix_A): Fail if constant doesn't fit in HWI. (analyze_subscript_affine_affine): Handle failure from initialize_matrix_A. * gcc.dg/torture/pr89223.c: New testcase. From-SVN: r268666
This commit is contained in:
parent
1c93f6ce59
commit
2536d696a3
4 changed files with 40 additions and 4 deletions
|
@ -1,3 +1,11 @@
|
|||
2019-02-08 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/89223
|
||||
* tree-data-ref.c (initialize_matrix_A): Fail if constant
|
||||
doesn't fit in HWI.
|
||||
(analyze_subscript_affine_affine): Handle failure from
|
||||
initialize_matrix_A.
|
||||
|
||||
2019-02-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* cfganal.c (pre_and_rev_post_order_compute_fn): Use fn instead of
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2019-02-08 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/89223
|
||||
* gcc.dg/torture/pr89223.c: New testcase.
|
||||
|
||||
2019-02-07 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR tree-optimization/86637
|
||||
|
|
10
gcc/testsuite/gcc.dg/torture/pr89223.c
Normal file
10
gcc/testsuite/gcc.dg/torture/pr89223.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-do compile { target int128 } } */
|
||||
|
||||
int a[5];
|
||||
unsigned __int128 b;
|
||||
void c()
|
||||
{
|
||||
b = 4;
|
||||
for (;; b--)
|
||||
a[b] = ({ a[b + b]; });
|
||||
}
|
|
@ -3191,6 +3191,8 @@ initialize_matrix_A (lambda_matrix A, tree chrec, unsigned index, int mult)
|
|||
switch (TREE_CODE (chrec))
|
||||
{
|
||||
case POLYNOMIAL_CHREC:
|
||||
if (!cst_and_fits_in_hwi (CHREC_RIGHT (chrec)))
|
||||
return chrec_dont_know;
|
||||
A[index][0] = mult * int_cst_value (CHREC_RIGHT (chrec));
|
||||
return initialize_matrix_A (A, CHREC_LEFT (chrec), index + 1, mult);
|
||||
|
||||
|
@ -3574,7 +3576,7 @@ analyze_subscript_affine_affine (tree chrec_a,
|
|||
tree *last_conflicts)
|
||||
{
|
||||
unsigned nb_vars_a, nb_vars_b, dim;
|
||||
HOST_WIDE_INT init_a, init_b, gamma, gcd_alpha_beta;
|
||||
HOST_WIDE_INT gamma, gcd_alpha_beta;
|
||||
lambda_matrix A, U, S;
|
||||
struct obstack scratch_obstack;
|
||||
|
||||
|
@ -3611,9 +3613,20 @@ analyze_subscript_affine_affine (tree chrec_a,
|
|||
A = lambda_matrix_new (dim, 1, &scratch_obstack);
|
||||
S = lambda_matrix_new (dim, 1, &scratch_obstack);
|
||||
|
||||
init_a = int_cst_value (initialize_matrix_A (A, chrec_a, 0, 1));
|
||||
init_b = int_cst_value (initialize_matrix_A (A, chrec_b, nb_vars_a, -1));
|
||||
gamma = init_b - init_a;
|
||||
tree init_a = initialize_matrix_A (A, chrec_a, 0, 1);
|
||||
tree init_b = initialize_matrix_A (A, chrec_b, nb_vars_a, -1);
|
||||
if (init_a == chrec_dont_know
|
||||
|| init_b == chrec_dont_know)
|
||||
{
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
fprintf (dump_file, "affine-affine test failed: "
|
||||
"representation issue.\n");
|
||||
*overlaps_a = conflict_fn_not_known ();
|
||||
*overlaps_b = conflict_fn_not_known ();
|
||||
*last_conflicts = chrec_dont_know;
|
||||
goto end_analyze_subs_aa;
|
||||
}
|
||||
gamma = int_cst_value (init_b) - int_cst_value (init_a);
|
||||
|
||||
/* Don't do all the hard work of solving the Diophantine equation
|
||||
when we already know the solution: for example,
|
||||
|
|
Loading…
Add table
Reference in a new issue