------- Additional Comments From rearnsha at gcc dot gnu dot org 2005-01-05 19:00 ------- It went away after this patch:
2004-11-10 Zdenek Dvorak <[EMAIL PROTECTED]> * tree-ssa-loop-ivopts.c (get_address_cost): Add address elements in right order. (force_var_cost): Determine cost of addition and multiplication more precisely. (get_computation_cost_at): Add cost for computing address elements to the final cost. * fold-const.c (fold): Attempt to use ptr_difference_const whenever one of the arguments of MINUS_EXPR is an address. (split_address_to_core_and_offset): New function. (ptr_difference_const): Handle case when one of the operands is a pointer. * tree-ssa-loop-ivopts.c (determine_base_object): Fold &*addr. (ptr_difference_cost): Pass addresses instead of objects to ptr_difference_const. So I suspect it might have gone latent again, but it might be that it was fixed by the canonicalization change to get_address_cost and that the problem can only occur with RTL that is not in correct canonical form. For reference here are the links to the two patch proposals: http://gcc.gnu.org/ml/gcc-patches/2004-11/msg00610.html http://gcc.gnu.org/ml/gcc-patches/2004-11/msg00715.html -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18401