[backport from gcc-4.7.0 r177658, fixes IA64 ICE PR53701 ] From: Alexander Monakov Subject: [PATCH 8/8] Only merge deps status for true dependencies Date: Wed, 3 Aug 2011 19:30:38 +0400 List-Archive: From: Sergey Grechanik This patch avoids changing speculative bits of a register use when it is moved up above a speculation check where that register is used as the address register. We should only call ds_full_merge when the producer (speculation check) writes to a register. (A similar check was in place when selective scheduler was in active development, but was dropped before it was merged, probably by accident) gcc/ 2011-08-11 Sergey Grechanik * sel-sched-ir.c (has_dependence_note_reg_use): Call ds_full_merge only if producer writes to the register given by regno. --- gcc-4.6.3/gcc/sel-sched-ir.c.~1~ 2011-06-28 14:19:18.000000000 +0200 +++ gcc-4.6.3/gcc/sel-sched-ir.c 2012-06-17 16:11:06.000000000 +0200 @@ -3157,7 +3157,8 @@ has_dependence_note_reg_use (int regno) pro_spec_checked_ds = INSN_SPEC_CHECKED_DS (has_dependence_data.pro); pro_spec_checked_ds = ds_get_max_dep_weak (pro_spec_checked_ds); - if (pro_spec_checked_ds != 0) + if (pro_spec_checked_ds != 0 + && bitmap_bit_p (INSN_REG_SETS (has_dependence_data.pro), regno)) /* Merge BE_IN_SPEC bits into *DSP. */ *dsp = ds_full_merge (*dsp, pro_spec_checked_ds, NULL_RTX, NULL_RTX);