=== modified file 'gcc/df-scan.c' --- gcc/df-scan.c 2011-07-08 01:28:55 +0000 +++ gcc/df-scan.c 2011-07-08 03:38:38 +0000 @@ -3412,8 +3412,9 @@ VEC_truncate (df_ref, collection_rec->eq_use_vec, 0); VEC_truncate (df_mw_hardreg_ptr, collection_rec->mw_vec, 0); - /* Record register defs. */ - df_defs_record (collection_rec, PATTERN (insn_info->insn), bb, insn_info, 0); + if (CALL_P (insn_info->insn)) + df_get_call_refs (collection_rec, bb, insn_info, + (is_cond_exec) ? DF_REF_CONDITIONAL : 0); /* Process REG_EQUIV/REG_EQUAL notes. */ for (note = REG_NOTES (insn_info->insn); note; @@ -3421,33 +3422,33 @@ { switch (REG_NOTE_KIND (note)) { + /* first write DF_REF_BASE */ + case REG_NON_LOCAL_GOTO: + /* The frame ptr is used by a non-local goto. */ + df_ref_record (DF_REF_BASE, collection_rec, + regno_reg_rtx[FRAME_POINTER_REGNUM], + NULL, bb, insn_info, + DF_REF_REG_USE, 0); +#if !HARD_FRAME_POINTER_IS_FRAME_POINTER + df_ref_record (DF_REF_BASE, collection_rec, + regno_reg_rtx[HARD_FRAME_POINTER_REGNUM], + NULL, bb, insn_info, + DF_REF_REG_USE, 0); +#endif + break; case REG_EQUIV: case REG_EQUAL: df_uses_record (collection_rec, &XEXP (note, 0), DF_REF_REG_USE, bb, insn_info, DF_REF_IN_NOTE); break; - case REG_NON_LOCAL_GOTO: - /* The frame ptr is used by a non-local goto. */ - df_ref_record (DF_REF_BASE, collection_rec, - regno_reg_rtx[FRAME_POINTER_REGNUM], - NULL, bb, insn_info, - DF_REF_REG_USE, 0); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - df_ref_record (DF_REF_BASE, collection_rec, - regno_reg_rtx[HARD_FRAME_POINTER_REGNUM], - NULL, bb, insn_info, - DF_REF_REG_USE, 0); -#endif - break; default: break; } } - if (CALL_P (insn_info->insn)) - df_get_call_refs (collection_rec, bb, insn_info, - (is_cond_exec) ? DF_REF_CONDITIONAL : 0); + /* Record register defs. */ + df_defs_record (collection_rec, PATTERN (insn_info->insn), bb, insn_info, 0); /* Record the register uses. */ df_uses_record (collection_rec,