aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-10-20 05:45:09 +0000
committerJeff Law <law@gcc.gnu.org>1999-10-19 23:45:09 -0600
commit7978192f77a85871bef9c4de7ab501c07f8b69cf (patch)
treed0d232fc18a95eba053b26f0fa2694d148ce507b
parent1bef1e7c43edecfb334d7ee72ab077f1240c8a50 (diff)
downloadgcc-7978192f77a85871bef9c4de7ab501c07f8b69cf.zip
gcc-7978192f77a85871bef9c4de7ab501c07f8b69cf.tar.gz
gcc-7978192f77a85871bef9c4de7ab501c07f8b69cf.tar.bz2
pa.md (call, call_value): Do not emit a blockage after restoring the PIC register.
* pa.md (call, call_value): Do not emit a blockage after restoring the PIC register. From-SVN: r30096
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/pa/pa.md26
2 files changed, 9 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 83d0ae9..f650a8c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Tue Oct 19 23:43:50 1999 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (call, call_value): Do not emit a blockage after restoring
+ the PIC register.
+
Tue Oct 19 17:22:39 1999 Mark Mitchell <mark@codesourcery.com>
* c-typeck.c (c_expand_asm_operands): Fix typo.
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index ae7a114..72d34e5 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -4731,6 +4731,8 @@
if (flag_pic)
{
use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), pic_offset_table_rtx);
+ use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn),
+ gen_rtx_REG (word_mode, PIC_OFFSET_TABLE_REGNUM_SAVED));
/* After each call we must restore the PIC register, even if it
doesn't appear to be used.
@@ -4739,17 +4741,6 @@
stored the PIC register in. */
emit_move_insn (pic_offset_table_rtx,
gen_rtx_REG (word_mode, PIC_OFFSET_TABLE_REGNUM_SAVED));
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
-
- /* Gross. We have to keep the scheduler from moving the restore
- of the PIC register away from the call. SCHED_GROUP_P is
- supposed to do this, but for some reason the compiler will
- go into an infinite loop when we use that.
-
- This method (blockage insn) may make worse code (then again
- it may not since calls are nearly blockages anyway), but at
- least it should work. */
- emit_insn (gen_blockage ());
}
DONE;
}")
@@ -4888,6 +4879,8 @@
if (flag_pic)
{
use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), pic_offset_table_rtx);
+ use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn),
+ gen_rtx_REG (word_mode, PIC_OFFSET_TABLE_REGNUM_SAVED));
/* After each call we must restore the PIC register, even if it
doesn't appear to be used.
@@ -4896,17 +4889,6 @@
stored the PIC register in. */
emit_move_insn (pic_offset_table_rtx,
gen_rtx_REG (word_mode, PIC_OFFSET_TABLE_REGNUM_SAVED));
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
-
- /* Gross. We have to keep the scheduler from moving the restore
- of the PIC register away from the call. SCHED_GROUP_P is
- supposed to do this, but for some reason the compiler will
- go into an infinite loop when we use that.
-
- This method (blockage insn) may make worse code (then again
- it may not since calls are nearly blockages anyway), but at
- least it should work. */
- emit_insn (gen_blockage ());
}
DONE;
}")