From: "Seongbae Park (박성배, 朴成培)" <[EMAIL PROTECTED]> Date: Tue, 16 Oct 2007 22:56:49 -0700
> Did you replace the DF_REF_REG_USE with DEF ? > If so, that's not correct. We need to add DEF as well as USE: ... > Then, we'll need to change the df_invalidated_by_call loop > not to add global_regs[] again (with MAY_CLOBBER bits). Seongbae-ssi, I've done full regstraps of mainline with the following patch on sparc-linux-gnu and sparc64-linux-gnu. Do you mind if I check in this fix? I would also like to pursue getting this installed on the gcc-4.2 branch as well, as I stated I've already done several regstraps of the 4.2 backport of this fix as well. Thank you. 2007-10-18 Seongbae Park <[EMAIL PROTECTED]> David S. Miller <[EMAIL PROTECTED]> * df-scan.c (df_get_call_refs): Mark global registers as both a DF_REF_REG_USE and a non-clobber DF_REF_REG_DEF. --- df-scan.c.ORIG 2007-10-18 16:56:19.000000000 -0700 +++ df-scan.c 2007-10-18 16:56:50.000000000 -0700 @@ -3109,18 +3109,22 @@ so they are recorded as used. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (global_regs[i]) - df_ref_record (collection_rec, regno_reg_rtx[i], - NULL, bb, insn, DF_REF_REG_USE, flags); + { + df_ref_record (collection_rec, regno_reg_rtx[i], + NULL, bb, insn, DF_REF_REG_USE, flags); + df_ref_record (collection_rec, regno_reg_rtx[i], + NULL, bb, insn, DF_REF_REG_DEF, flags); + } is_sibling_call = SIBLING_CALL_P (insn); EXECUTE_IF_SET_IN_BITMAP (df_invalidated_by_call, 0, ui, bi) { - if ((!bitmap_bit_p (defs_generated, ui)) + if (!global_regs[ui] + && (!bitmap_bit_p (defs_generated, ui)) && (!is_sibling_call || !bitmap_bit_p (df->exit_block_uses, ui) || refers_to_regno_p (ui, ui+1, current_function_return_rtx, NULL))) - df_ref_record (collection_rec, regno_reg_rtx[ui], NULL, bb, insn, DF_REF_REG_DEF, DF_REF_MAY_CLOBBER | flags); }