ia64 virtual register elimination fix

Richard Henderson rth@cygnus.com
Tue Aug 29 14:32:00 GMT 2000


2000-08-24  Richard Henderson  <rth@cygnus.com>

        * config/ia64/ia64-protos.h: Update.
        * config/ia64/ia64.c (gr_register_operand): New.
        (fr_register_operand, grfr_register_operand): New.
        (gr_nonimmediate_operand, grfr_nonimmediate_operand): New.
        (grfr_reg_or_8bit_operand): New.

When checking this patch, I must have missed the regression
in compile/981107-1.c at -O0.  Anyway, fixed thus.



r~

        * config/ia64/ia64.md (muldi3): Use grfr_register_operand
        for the inputs.

Index: config/ia64/ia64.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/ia64/ia64.md,v
retrieving revision 1.39
diff -c -p -d -r1.39 ia64.md
*** ia64.md	2000/08/29 21:28:30	1.39
--- ia64.md	2000/08/29 21:29:38
***************
*** 1509,1518 ****
    "sub %0 = %2, %1, 1"
    [(set_attr "type" "A")])
  
  (define_insn "muldi3"
    [(set (match_operand:DI 0 "fr_register_operand" "=f")
! 	(mult:DI (match_operand:DI 1 "fr_register_operand" "f")
! 		 (match_operand:DI 2 "fr_register_operand" "f")))]
    ""
    "xma.l %0 = %1, %2, f0%B0"
    [(set_attr "type" "F")])
--- 1509,1520 ----
    "sub %0 = %2, %1, 1"
    [(set_attr "type" "A")])
  
+ ;; ??? Use grfr instead of fr because of virtual register elimination
+ ;; and silly test cases multiplying by the frame pointer.
  (define_insn "muldi3"
    [(set (match_operand:DI 0 "fr_register_operand" "=f")
! 	(mult:DI (match_operand:DI 1 "grfr_register_operand" "f")
! 		 (match_operand:DI 2 "grfr_register_operand" "f")))]
    ""
    "xma.l %0 = %1, %2, f0%B0"
    [(set_attr "type" "F")])


More information about the Gcc-patches mailing list