diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-08-14 09:01:18 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-08-14 09:01:18 -0400 |
commit | 31cc58e92d73996720e10f818522e7ac9dc0ef3d (patch) | |
tree | 23a02ecdb728d47535c8f836652bd1b14fc9b3a7 /gcc/config | |
parent | 7276e85d35c9cc9add7ca05f00fd3e2be649ce71 (diff) | |
download | gcc-31cc58e92d73996720e10f818522e7ac9dc0ef3d.zip gcc-31cc58e92d73996720e10f818522e7ac9dc0ef3d.tar.gz gcc-31cc58e92d73996720e10f818522e7ac9dc0ef3d.tar.bz2 |
(call expanders): Emit a blockage insn after restoring %r19 when
generating PIC.
From-SVN: r10236
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/pa/pa.md | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index de8e081..c2c2a26 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -3632,6 +3632,26 @@ emit_move_insn (pic_offset_table_rtx, gen_rtx (REG, SImode, 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 ()); + + /* 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; }") |