From 0d4acd9048026979bbf8b69a5fc73340908b543c Mon Sep 17 00:00:00 2001 From: Andrey Belevantsev Date: Tue, 31 Jul 2012 14:56:52 +0400 Subject: [PATCH] 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 --- gcc/ChangeLog | 12 ++++++++++++ gcc/sel-sched-ir.c | 10 ++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) 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); } -- 2.39.5