File prefetch-schedule-barrier of Package gcc43

Index: gcc/rtl.h
===================================================================
*** gcc/rtl.h.orig
--- gcc/rtl.h
*************** struct rtx_def GTY((chain_next ("RTX_NEX
*** 271,277 ****
       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.  */
    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;
--- 271,279 ----
       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 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;
*************** do {						\
*** 1366,1371 ****
--- 1368,1377 ----
     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.  */
  
Index: gcc/sched-deps.c
===================================================================
*** gcc/sched-deps.c.orig
--- gcc/sched-deps.c
*************** sched_analyze_2 (struct deps *deps, rtx
*** 1824,1829 ****
--- 1824,1834 ----
        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 */
Index: gcc/doc/rtl.texi
===================================================================
*** gcc/doc/rtl.texi.orig
--- gcc/doc/rtl.texi
*************** Stored in the @code{volatil} field and p
*** 859,864 ****
--- 859,872 ----
  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:
*************** In an @code{insn}, 1 means the insn has
*** 1006,1011 ****
--- 1014,1022 ----
  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
  
openSUSE Build Service is sponsored by