ia64.md (movdi): Delay calling ia64_expand_load_address.

* config/ia64/ia64.md (movdi): Delay calling ia64_expand_load_address.
        (movdi_symbolic): New.

From-SVN: r35685
This commit is contained in:
Richard Henderson 2000-08-14 13:28:11 -07:00 committed by Richard Henderson
parent 00e149c78f
commit 9a89adb8c7
2 changed files with 33 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2000-08-14 Richard Henderson <rth@cygnus.com>
* config/ia64/ia64.md (movdi): Delay calling ia64_expand_load_address.
(movdi_symbolic): New.
2000-08-14 Jim Wilson <wilson@cygnus.com>
* config/ia64/ia64.h (ASM_SPEC): Pass -mconstant-gp and -mauto-pic

View File

@ -351,14 +351,21 @@
""
"
{
if (! TARGET_NO_PIC && symbolic_operand (operands[1], DImode))
{
ia64_expand_load_address (operands[0], operands[1]);
DONE;
}
if (! reload_in_progress && ! reload_completed
&& ! ia64_move_ok (operands[0], operands[1]))
operands[1] = force_reg (DImode, operands[1]);
if (! TARGET_NO_PIC && symbolic_operand (operands[1], DImode))
{
/* Before optimization starts, delay committing to any particular
type of PIC address load. If this function gets deferred, we
may acquire information that changes the value of the
sdata_symbolic_operand predicate. */
if (rtx_equal_function_value_matters)
emit_insn (gen_movdi_symbolic (operands[0], operands[1]));
else
ia64_expand_load_address (operands[0], operands[1]);
DONE;
}
}")
;; Errata 72 workaround.
@ -407,6 +414,22 @@
[(set_attr "type" "A,A,L,M,M,F,I,I,M,M")
(set_attr "predicable" "no")])
;; This is used during early compilation to delay the decision on
;; how to refer to a variable as long as possible. This is especially
;; important between initial rtl generation and optimization for
;; deferred functions, since we may acquire additional information
;; on the variables used in the meantime.
(define_insn_and_split "movdi_symbolic"
[(set (match_operand:DI 0 "register_operand" "=r")
(match_operand:DI 1 "symbolic_operand" "s"))
(use (reg:DI 1))]
""
"* abort ();"
""
[(const_int 0)]
"ia64_expand_load_address (operands[0], operands[1]); DONE;")
(define_insn "*movdi_internal_astep"
[(set (match_operand:DI 0 "destination_operand"
"=r,r,r,r, m, r,*f,*f,*f, Q, r,*b*e, r,*d, r,*c")