pa.md (call, call_value): Always save the PIC register before a call.

* pa.md (call, call_value): Always save the PIC register before
	a call.

From-SVN: r8836
This commit is contained in:
Jeff Law 1995-01-28 11:55:00 -07:00
parent 8e6c802b46
commit da6f15cdef

View File

@ -3426,13 +3426,19 @@
use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), pic_offset_table_rtx);
if (!hppa_save_pic_table_rtx)
{
hppa_save_pic_table_rtx = gen_reg_rtx (Pmode);
emit_insn_before (gen_rtx (SET, VOIDmode,
hppa_save_pic_table_rtx,
pic_offset_table_rtx),
call_insn);
}
hppa_save_pic_table_rtx = gen_reg_rtx (Pmode);
/* We must save and restore the PIC register around every call
since we don't have flow information to determine if this save
is redundant with a previous save. The old code assumed once
the register was saved it never needs to be saved again, but
the save could have been on a path which doesn't always
execute; a call site physically later in the program would
then attempt a restore from an uninitialized register! */
emit_insn_before (gen_rtx (SET, VOIDmode,
hppa_save_pic_table_rtx,
pic_offset_table_rtx),
call_insn);
emit_insn (gen_rtx (SET, VOIDmode, pic_offset_table_rtx,
hppa_save_pic_table_rtx));
@ -3522,13 +3528,19 @@
use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), pic_offset_table_rtx);
if (!hppa_save_pic_table_rtx)
{
hppa_save_pic_table_rtx = gen_reg_rtx (Pmode);
emit_insn_before (gen_rtx (SET, VOIDmode,
hppa_save_pic_table_rtx,
pic_offset_table_rtx),
call_insn);
}
hppa_save_pic_table_rtx = gen_reg_rtx (Pmode);
/* We must save and restore the PIC register around every call
since we don't have flow information to determine if this save
is redundant with a previous save. The old code assumed once
the register was saved it never needs to be saved again, but
the save could have been on a path which doesn't always
execute; a call site physically later in the program would
then attempt a restore from an uninitialized register! */
emit_insn_before (gen_rtx (SET, VOIDmode,
hppa_save_pic_table_rtx,
pic_offset_table_rtx),
call_insn);
emit_insn (gen_rtx (SET, VOIDmode, pic_offset_table_rtx,
hppa_save_pic_table_rtx));