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:
parent
00e149c78f
commit
9a89adb8c7
@ -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
|
||||
|
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user