PR rtl-optimization/pr55153

2013-01-15  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/pr55153
	* sched-deps.c (sched_analyze_2): Add pending reads for prefetch.

2013-01-15  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/pr55153
	* gcc.dg/pr55153.c: New.

From-SVN: r195211
This commit is contained in:
Vladimir Makarov 2013-01-15 16:47:36 +00:00 committed by Vladimir Makarov
parent 207b59560f
commit 0e80383ffb
4 changed files with 35 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2013-01-15 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/pr55153
* sched-deps.c (sched_analyze_2): Add pending reads for prefetch.
2013-01-15 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/55920

View file

@ -2707,6 +2707,20 @@ sched_analyze_2 (struct deps_desc *deps, rtx x, rtx insn)
case PREFETCH:
if (PREFETCH_SCHEDULE_BARRIER_P (x))
reg_pending_barrier = TRUE_BARRIER;
/* Prefetch insn contains addresses only. So if the prefetch
address has no registers, there will be no dependencies on
the prefetch insn. This is wrong with result code
correctness point of view as such prefetch can be moved below
a jump insn which usually generates MOVE_BARRIER preventing
to move insns containing registers or memories through the
barrier. It is also wrong with generated code performance
point of view as prefetch withouth dependecies will have a
tendency to be issued later instead of earlier. It is hard
to generate accurate dependencies for prefetch insns as
prefetch has only the start address but it is better to have
something than nothing. */
add_insn_mem_dependence (deps, true, insn,
gen_rtx_MEM (Pmode, XEXP (PATTERN (insn), 0)));
break;
case UNSPEC_VOLATILE:

View file

@ -1,3 +1,8 @@
2013-01-15 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/pr55153
* gcc.dg/pr55153.c: New.
2013-01-15 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/55920

View file

@ -0,0 +1,11 @@
/* PR tree-optimization/55153 */
/* { dg-do compile } */
/* { dg-options "-O -fsched2-use-superblocks -fschedule-insns2" } */
extern int a[];
void
foo (void)
{
__builtin_prefetch (a, 0, 0);
}