a sparcv9 haifa abort

Richard Henderson rth@cygnus.com
Thu Jun 4 00:00:00 GMT 1998


The following 

;; SPARC V9 deprecates std.  Split it here.
(define_split
  [(set (match_operand:DI 0 "memory_operand" "=m")
      (match_operand:DI 1 "register_operand" "r"))]
  "TARGET_V9 && ! TARGET_ARCH64 && reload_completed
   && REGNO (operands[1]) < 32 && ! MEM_VOLATILE_P (operands[0])
   && offsettable_memref_p (operands[0])"
  [(set (match_dup 2) (match_dup 3))
   (set (match_dup 4) (match_dup 5))]
  "operands[3] = gen_highpart (SImode, operands[1]);
   operands[5] = gen_lowpart (SImode, operands[1]);
   operands[4] = adj_offsettable_operand (operands[0], 4);
   PUT_MODE (operands[4], SImode);
   operands[2] = copy_rtx (operands[0]);
   PUT_MODE (operands[2], SImode);")

gives haifa indigension, because sparc defines MAX_MOVE to 8.
Thoughts on this fix?


r~


Index: haifa-sched.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/haifa-sched.c,v
retrieving revision 1.55
diff -c -p -d -r1.55 haifa-sched.c
*** haifa-sched.c	1998/05/19 08:42:33	1.55
--- haifa-sched.c	1998/06/04 06:33:21
*************** update_flow_info (notes, first, last, or
*** 7980,7986 ****
  		    break;
  		  /* Likewise for multi-word memory references.  */
  		  if (GET_CODE (orig_dest) == MEM
! 		      && SIZE_FOR_MODE (orig_dest) > MOVE_MAX)
  		    break;
  		  abort ();
  		}
--- 7980,7986 ----
  		    break;
  		  /* Likewise for multi-word memory references.  */
  		  if (GET_CODE (orig_dest) == MEM
! 		      && SIZE_FOR_MODE (orig_dest) > UNITS_PER_WORD)
  		    break;
  		  abort ();
  		}



More information about the Gcc-patches mailing list