unroll.c patch for IA-64 abort on XFree86

Jim Wilson wilson@cygnus.com
Mon Sep 18 15:47:00 GMT 2000


This fixes an ia64-linux -O2 abort when compiling xaaPCache.c which I think
is from XFree86.  This stems from Richard Henderson's earlier change to
support givs which are DImode extended from SImode bivs.

The problem happens in final_giv_value when we pass a mixture of SImode
and DImode values to emit_iv_add_mult, which eventually triggers an abort
because of the mode mismatch.  The fix is simply that we need to extend
increment in case it is not a constant, just like we already extend the biv
initial value.
	
2000-09-18  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (final_giv_value): Pass increment through
	extend_value_for_giv before passing it to emit_iv_add_mult.

Index: unroll.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/unroll.c,v
retrieving revision 1.108
diff -p -r1.108 unroll.c
*** unroll.c	2000/09/12 14:43:25	1.108
--- unroll.c	2000/09/18 22:45:58
*************** final_giv_value (loop, v)
*** 3349,3355 ****
  	  /* Put the final biv value in tem.  */
  	  tem = gen_reg_rtx (v->mode);
  	  record_base_value (REGNO (tem), bl->biv->add_val, 0);
! 	  emit_iv_add_mult (increment, GEN_INT (n_iterations),
  			    extend_value_for_giv (v, bl->initial_value),
  			    tem, insert_before);
  
--- 3349,3356 ----
  	  /* Put the final biv value in tem.  */
  	  tem = gen_reg_rtx (v->mode);
  	  record_base_value (REGNO (tem), bl->biv->add_val, 0);
! 	  emit_iv_add_mult (extend_value_for_giv (v, increment),
! 			    GEN_INT (n_iterations),
  			    extend_value_for_giv (v, bl->initial_value),
  			    tem, insert_before);
  


More information about the Gcc-patches mailing list