+2000-08-24 Jim Wilson <wilson@cygnus.com>
+
+ * config/ia64/ia64.md (movdi): Don't call gen_movdi_symbolic if
+ we have a SYMBOL_REF with SYMBOL_REF_FLAG set.
+
2000-08-24 Jason Merrill <jason@redhat.com>
* dwarf2out.c (AT_flag, AT_int, AT_unsigned, AT_string, AT_ref,
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)
+ /* But don't delay for function pointers. Loading a function address
+ actually loads the address of the descriptor not the function.
+ If we represent these as SYMBOL_REFs, then they get cse'd with
+ calls, and we end up with calls to the descriptor address instead of
+ calls to the function address. Functions are not candidates for
+ sdata anyways. */
+ if (rtx_equal_function_value_matters
+ && ! (GET_CODE (operands[1]) == SYMBOL_REF
+ && SYMBOL_REF_FLAG (operands[1])))
emit_insn (gen_movdi_symbolic (operands[0], operands[1]));
else
ia64_expand_load_address (operands[0], operands[1]);