From: Andrey Belevantsev Date: Tue, 31 Jul 2012 10:56:52 +0000 (+0400) Subject: re PR target/53975 ([ia64] Target register of a speculative load moved to a branch... X-Git-Tag: releases/gcc-4.8.0~4200 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0d4acd9048026979bbf8b69a5fc73340908b543c;p=thirdparty%2Fgcc.git re PR target/53975 ([ia64] Target register of a speculative load moved to a branch register prior to the chk.s instruction) PR target/53975 * sel-sched-ir.c (has_dependence_note_reg_use): Clarify comment. Revert 2011-08-04 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. From-SVN: r190005 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index be4e91a12e0b..e923388a8114 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2012-07-31 Andrey Belevantsev + + PR target/53975 + + * sel-sched-ir.c (has_dependence_note_reg_use): Clarify comment. + + Revert + 2011-08-04 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. + 2012-07-31 Nick Clifton * config/frv/frv.c (QUAD): Fix typo. diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c index 2dfecf5e45bd..e7ca3f160e42 100644 --- a/gcc/sel-sched-ir.c +++ b/gcc/sel-sched-ir.c @@ -3228,7 +3228,11 @@ has_dependence_note_reg_use (int regno) if (reg_last->clobbers) *dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI; - /* Handle BE_IN_SPEC. */ + /* Merge BE_IN_SPEC bits into *DSP when the dependency producer + is actually a check insn. We need to do this for any register + read-read dependency with the check unless we track properly + all registers written by BE_IN_SPEC-speculated insns, as + we don't have explicit dependence lists. See PR 53975. */ if (reg_last->uses) { ds_t pro_spec_checked_ds; @@ -3236,9 +3240,7 @@ 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 - && bitmap_bit_p (INSN_REG_SETS (has_dependence_data.pro), regno)) - /* Merge BE_IN_SPEC bits into *DSP. */ + if (pro_spec_checked_ds != 0) *dsp = ds_full_merge (*dsp, pro_spec_checked_ds, NULL_RTX, NULL_RTX); }