diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9d27b95bf95..58b1aa4ce7d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-08-02 Jim Wilson + + * config/ia64/ia64-protos.h (flag_ssa): Declare. + * config/ia64/ia64.md (movti_internal, movti_internal+1): New. + 2000-08-02 Mark Mitchell * dce.c: Remove all uses of assert. diff --git a/gcc/config/ia64/ia64-protos.h b/gcc/config/ia64/ia64-protos.h index 12ea516f6cf..eb65ca81500 100644 --- a/gcc/config/ia64/ia64-protos.h +++ b/gcc/config/ia64/ia64-protos.h @@ -118,3 +118,6 @@ extern void ia64_init_builtins PARAMS((void)); extern void ia64_override_options PARAMS((void)); extern unsigned int ia64_compute_frame_size PARAMS((int)); extern void save_restore_insns PARAMS((int)); + +/* ??? Flag defined in toplev.c, for ia64.md -fssa hack. */ +extern int flag_ssa; diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md index f43012056be..4cc442bfa0d 100644 --- a/gcc/config/ia64/ia64.md +++ b/gcc/config/ia64/ia64.md @@ -551,6 +551,26 @@ "addl %0 = @ltoff(%1), gp" [(set_attr "type" "A")]) +;; ??? These patterns exist to make SSA happy. We can get TImode values +;; because of structure moves generated for parameter and return value +;; loads and stores. + +(define_insn "*movti_internal" + [(set (match_operand:TI 0 "register_operand" "=r") + (match_operand:TI 1 "register_operand" "r"))] + "flag_ssa" + "#" + [(set_attr "type" "unknown") + (set_attr "predicable" "no")]) + +(define_split + [(set (match_operand:TI 0 "register_operand" "") + (match_operand:TI 1 "register_operand" ""))] + "flag_ssa && reload_completed" + [(set (subreg:DI (match_dup 0) 0) (subreg:DI (match_dup 1) 0)) + (set (subreg:DI (match_dup 0) 1) (subreg:DI (match_dup 1) 1))] + "") + ;; Floating Point Moves ;; ;; Note - Patterns for SF mode moves are compulsory, but