#! /bin/sh -e # DP: Two patches by Andreas Schwab to fix -fpic and loop optimization. # DP: Another patch by Andreas Schwab to fix %a5 restauration in some cases. if [ $# -eq 3 -a "$2" = '-d' ]; then pdir="-d $3" elif [ $# -ne 1 ]; then echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 fi case "$1" in -patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;; -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;; *) echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 esac exit 0 ------------------------------------------------------------------------------ --- gcc/config/m68k/m68k.c~ Mon Aug 2 06:51:08 1999 +++ gcc/config/m68k/m68k.c Fri Oct 22 11:47:09 1999 @@ -356,7 +356,7 @@ mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM)); num_saved_regs--; } - if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM]) + if (flag_pic && current_function_uses_pic_offset_table) { mask |= 1 << (15 - PIC_OFFSET_TABLE_REGNUM); num_saved_regs++; @@ -493,7 +493,10 @@ for (regno = 0 ; regno < FIRST_PSEUDO_REGISTER ; regno++) if (regs_ever_live[regno] && ! call_used_regs[regno]) return 0; - + + if (flag_pic && current_function_uses_pic_offset_table) + return 0; + return 1; } @@ -568,7 +571,7 @@ nregs++; mask |= 1 << regno; } - if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM]) + if (flag_pic && current_function_uses_pic_offset_table) { nregs++; mask |= 1 << PIC_OFFSET_TABLE_REGNUM; @@ -1334,8 +1337,6 @@ gen_rtx_PLUS (Pmode, pic_offset_table_rtx, orig)); current_function_uses_pic_offset_table = 1; - if (reload_in_progress) - regs_ever_live[PIC_OFFSET_TABLE_REGNUM] = 1; RTX_UNCHANGING_P (pic_ref) = 1; emit_move_insn (reg, pic_ref); return reg;