diff options
author | Andrey Belevantsev <abel@ispras.ru> | 2012-07-31 14:56:52 +0400 |
---|---|---|
committer | Andrey Belevantsev <abel@gcc.gnu.org> | 2012-07-31 14:56:52 +0400 |
commit | 0d4acd9048026979bbf8b69a5fc73340908b543c (patch) | |
tree | b72bffae8caf96eb3ebec7103d5859a30ec7368b /gcc | |
parent | 7027164c9650ef13925d3a6155fff24f23e0af39 (diff) | |
download | gcc-0d4acd9048026979bbf8b69a5fc73340908b543c.zip gcc-0d4acd9048026979bbf8b69a5fc73340908b543c.tar.gz gcc-0d4acd9048026979bbf8b69a5fc73340908b543c.tar.bz2 |
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 <mouseentity@ispras.ru>
* 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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/sel-sched-ir.c | 10 |
2 files changed, 18 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index be4e91a..e923388 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2012-07-31 Andrey Belevantsev <abel@ispras.ru> + + PR target/53975 + + * sel-sched-ir.c (has_dependence_note_reg_use): Clarify comment. + + Revert + 2011-08-04 Sergey Grechanik <mouseentity@ispras.ru> + + * 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 <nickc@redhat.com> * config/frv/frv.c (QUAD): Fix typo. diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c index 2dfecf5..e7ca3f1 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); } |