From: Richard Kenner Date: Mon, 14 Aug 1995 13:01:18 +0000 (-0400) Subject: (call expanders): Emit a blockage insn after restoring %r19 when X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=31cc58e92d73996720e10f818522e7ac9dc0ef3d;p=gcc.git (call expanders): Emit a blockage insn after restoring %r19 when generating PIC. From-SVN: r10236 --- diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index de8e0812c5a..c2c2a26b5e1 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; }")