From c456a94a49c9497da22209bb479c63487bb93c7c Mon Sep 17 00:00:00 2001 From: Zdenek Dvorak Date: Wed, 6 Jul 2005 10:13:13 +0200 Subject: [PATCH] re PR tree-optimization/21963 (ICE (seg fault) with -m64 (in IV-OPTS)) PR tree-optimization/21963 * tree-ssa-loop-ivopts.c (get_computation_aff): Use constant_multiple_of in the same way get_computation_cost_at does. From-SVN: r101654 --- gcc/ChangeLog | 6 ++++++ gcc/tree-ssa-loop-ivopts.c | 16 +++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4343b436a5b9..a85f3d1fc7e1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-07-06 Zdenek Dvorak + + PR tree-optimization/21963 + * tree-ssa-loop-ivopts.c (get_computation_aff): Use + constant_multiple_of in the same way get_computation_cost_at does. + 2005-07-06 Jakub Jelinek * config/sparc/sparc.h (sparc_compare_emitted): New extern. diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index acc1ae9c4f0d..8e6b8c168d41 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -2983,6 +2983,7 @@ get_computation_aff (struct loop *loop, unsigned HOST_WIDE_INT ustepi, cstepi; HOST_WIDE_INT ratioi; struct affine_tree_combination cbase_aff, expr_aff; + tree cstep_orig = cstep, ustep_orig = ustep; if (TYPE_PRECISION (utype) > TYPE_PRECISION (ctype)) { @@ -3012,13 +3013,18 @@ get_computation_aff (struct loop *loop, expr = fold_convert (uutype, expr); cbase = fold_convert (uutype, cbase); cstep = fold_convert (uutype, cstep); + + /* If the conversion is not noop, we must take it into account when + considering the value of the step. */ + if (TYPE_PRECISION (utype) < TYPE_PRECISION (ctype)) + cstep_orig = cstep; } - if (cst_and_fits_in_hwi (cstep) - && cst_and_fits_in_hwi (ustep)) + if (cst_and_fits_in_hwi (cstep_orig) + && cst_and_fits_in_hwi (ustep_orig)) { - ustepi = int_cst_value (ustep); - cstepi = int_cst_value (cstep); + ustepi = int_cst_value (ustep_orig); + cstepi = int_cst_value (cstep_orig); if (!divide (TYPE_PRECISION (uutype), ustepi, cstepi, &ratioi)) { @@ -3032,7 +3038,7 @@ get_computation_aff (struct loop *loop, } else { - ratio = constant_multiple_of (uutype, ustep, cstep); + ratio = constant_multiple_of (uutype, ustep_orig, cstep_orig); if (!ratio) return false; -- 2.47.2