rtl.h (PREFETCH_SCHEDULE_BARRIER_P): New macro.
2009-09-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * rtl.h (PREFETCH_SCHEDULE_BARRIER_P): New macro. * sched-deps.c (sched_analyze_2): Make prefetches a hard barrier when volatile flag is set. * doc/rtl.texi (PREFETCH_SCHEDULE_BARRIER_P): Add documentation pieces. From-SVN: r151475
This commit is contained in:
parent
2dcbb2c0bf
commit
3fce100b40
@ -1,3 +1,10 @@
|
||||
2009-09-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
|
||||
|
||||
* rtl.h (PREFETCH_SCHEDULE_BARRIER_P): New macro.
|
||||
* sched-deps.c (sched_analyze_2): Make prefetches a hard barrier
|
||||
when volatile flag is set.
|
||||
* doc/rtl.texi (PREFETCH_SCHEDULE_BARRIER_P): Add documentation pieces.
|
||||
|
||||
2009-09-06 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR bootstrap/41241
|
||||
|
@ -882,6 +882,14 @@ Stored in the @code{volatil} field and printed as @samp{/v}.
|
||||
Most uses of @code{SYMBOL_REF_FLAG} are historic and may be subsumed
|
||||
by @code{SYMBOL_REF_FLAGS}. Certainly use of @code{SYMBOL_REF_FLAGS}
|
||||
is mandatory if the target requires more than one bit of storage.
|
||||
|
||||
@findex PREFETCH_SCHEDULE_BARRIER_P
|
||||
@cindex @code{prefetch} and @samp{/v}
|
||||
@cindex @code{volatile}, in @code{prefetch}
|
||||
@item PREFETCH_SCHEDULE_BARRIER_P (@var{x})
|
||||
In a @code{prefetch}, indicates that the prefetch is a scheduling barrier.
|
||||
No other INSNs will be moved over it.
|
||||
Stored in the @code{volatil} field and printed as @samp{/v}.
|
||||
@end table
|
||||
|
||||
These are the fields to which the above macros refer:
|
||||
@ -1034,6 +1042,9 @@ In an @code{insn}, 1 means the insn has been deleted.
|
||||
In @code{label_ref} and @code{reg_label} expressions, 1 means a reference
|
||||
to a non-local label.
|
||||
|
||||
In @code{prefetch} expressions, 1 means that the containing insn is a
|
||||
scheduling barrier.
|
||||
|
||||
In an RTL dump, this flag is represented as @samp{/v}.
|
||||
@end table
|
||||
|
||||
|
@ -271,7 +271,9 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"),
|
||||
1 in a SUBREG with a negative value.
|
||||
1 in a LABEL_REF, REG_LABEL_TARGET or REG_LABEL_OPERAND note for a
|
||||
non-local label.
|
||||
In a SYMBOL_REF, this flag is used for machine-specific purposes. */
|
||||
In a SYMBOL_REF, this flag is used for machine-specific purposes.
|
||||
In a PREFETCH, this flag indicates that it should be considered a scheduling
|
||||
barrier. */
|
||||
unsigned int volatil : 1;
|
||||
/* 1 in a MEM referring to a field of an aggregate.
|
||||
0 if the MEM was a variable or the result of a * operator in C;
|
||||
@ -1423,6 +1425,10 @@ do { \
|
||||
offset within that block. */
|
||||
#define SYMBOL_REF_BLOCK_OFFSET(RTX) (BLOCK_SYMBOL_CHECK (RTX)->offset)
|
||||
|
||||
/* True if RTX is flagged to be a scheduling barrier. */
|
||||
#define PREFETCH_SCHEDULE_BARRIER_P(RTX) \
|
||||
(RTL_FLAG_CHECK1("PREFETCH_SCHEDULE_BARRIER_P", (RTX), PREFETCH)->volatil)
|
||||
|
||||
/* Indicate whether the machine has any sort of auto increment addressing.
|
||||
If not, we can avoid checking for REG_INC notes. */
|
||||
|
||||
|
@ -2487,6 +2487,11 @@ sched_analyze_2 (struct deps *deps, rtx x, rtx insn)
|
||||
flush_pending_lists (deps, insn, true, false);
|
||||
break;
|
||||
|
||||
case PREFETCH:
|
||||
if (PREFETCH_SCHEDULE_BARRIER_P (x))
|
||||
reg_pending_barrier = TRUE_BARRIER;
|
||||
break;
|
||||
|
||||
case UNSPEC_VOLATILE:
|
||||
flush_pending_lists (deps, insn, true, true);
|
||||
/* FALLTHRU */
|
||||
|
Loading…
x
Reference in New Issue
Block a user