Home | History | Annotate | Download | only in gcc

Lines Matching defs:reduction

77    simple reduction of inner loop and double reduction of the loop nest.  */
112 /* Enum type for loop reduction variable. */
120 /* Structure recording loop reduction variable. */
121 typedef struct reduction
123 /* Reduction itself. */
125 /* PHI node defining reduction variable. */
127 /* Init and next variables of the reduction. */
130 /* Lcssa PHI node if reduction is used outside of its definition loop. */
137 /* If reduction is finally stored to memory, this is the stored memory
144 /* Dump reduction RE. */
150 fprintf (dump_file, " Simple reduction: ");
152 fprintf (dump_file, " Double reduction: ");
154 fprintf (dump_file, " Unknown reduction: ");
197 /* Vector of reduction variables in loop. */
207 /* Number of constant initialized simple reduction. */
275 /* Return the reduction if STMT is one of its lcssa PHI, producer or consumer
298 /* For now we only support at most one reduction. */
301 /* Only support reduction if the loop nest to be interchanged is the
312 /* Only support lcssa PHI node which is for reduction. */
352 inner loop's reduction. */
393 into reduction:
408 This function classifies this kind reduction and records information so
416 /* Check init variable of reduction and how it is initialized. */
435 /* Check how reduction variable is used. */
444 /* Simple reduction with constant initializer. */
452 that we can undo reduction during interchange. */
459 /* Analyze reduction variable VAR for inner loop of the loop nest to be
482 /* In restricted reduction, the var is (and must be) used in defining
490 | reduction operators | <-- other operands
498 on VAR and OTHER OPERANDS. In case of double reduction in loop nest
500 reduction in inner loop, we only make change how VAR/NEXT is loaded or
501 stored. With these conditions, we can relax restrictions on reduction
502 in a way that reduction operation is seen as black box. In general,
503 we can ignore reassociation of reduction operator; we can handle fake
509 /* Check the reduction operation. We require a left-associative operation.
524 /* Handle and verify a series of stmts feeding the reduction op. */
564 re = XCNEW (struct reduction);
580 /* Analyze reduction variable VAR for outer loop of the loop nest to be
582 moment, we only support double reduction for outer loop, like:
618 /* Find inner loop's simple reduction that uses var as initializer. */
629 /* In case of double reduction, outer loop's reduction should be updated
630 by inner loop's simple reduction. */
634 /* Outer loop's reduction should only be used to initialize inner loop's
635 simple reduction. */
640 /* Check this reduction is correctly used outside of loop via lcssa phi. */
663 re = XCNEW (struct reduction);
747 /* Analyze var as reduction variable. */
777 /* TODO: We only support lcssa phi for reduction for now. */
785 /* CONSUMER is a stmt in BB storing reduction result into memory object.
786 When the reduction is intialized from constant value, we need to add
788 loop during undoing the reduction. Problem is that memory reference
838 /* User can write, optimizers can generate simple reduction RE for inner
839 loop. In order to make interchange valid, we have to undo reduction by
857 Note if the reduction variable is initialized to constant, like:
907 /* Replace all uses of reduction var with new variable. */
918 /* Move consumer stmt into inner loop, just after reduction next's def. */
929 /* Mark the reduction variables for DCE. */
1067 /* Undo inner loop's simple reduction. */
1077 /* Only need to reset debug uses for double reduction. */
1641 loop's constant initialized reduction. */
1996 with load/store in outer loop initializing/finalizing simple reduction