Lines Matching full:affine

1 // RUN: mlir-opt %s -affine-loop-invariant-code-motion -split-input-file | FileCheck %s
8 affine.for %arg0 = 0 to 10 {
10 affine.for %arg1 = 0 to 10 {
11 affine.store %v0, %m[%arg0] : memref<10xf32>
19 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
21 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
22 // CHECK-NEXT: affine.store
29 // The store-load forwarding can see through affine apply's since it relies on
35 affine.for %arg0 = 0 to 10 {
36 %t0 = affine.apply affine_map<(d1) -> (d1 + 1)>(%arg0)
37 affine.store %cf7, %m[%t0] : memref<10xf32>
42 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
43 // CHECK-NEXT: affine.apply
44 // CHECK-NEXT: affine.store %[[cst]]
56 affine.for %arg0 = 0 to 10 {
57 affine.for %arg1 = 0 to 10 {
74 affine.for %arg0 = 0 to 20 {
75 affine.for %arg1 = 0 to 30 {
76 %v0 = affine.for %arg2 = 0 to 10 iter_args (%prevAccum = %arg1) -> index {
77 %v1 = affine.load %m[%arg2] : memref<10xindex>
79 affine.yield %newAccum : index
84 // CHECK: affine.for %{{.*}} = 0 to 30 {
85 // CHECK-NEXT: %{{.*}} = affine.for %{{.*}} = 0 to 10 iter_args(%{{.*}} = %{{.*}}) -> (index) {
86 // CHECK-NEXT: %{{.*}} = affine.load %{{.*}}[%{{.*}} : memref<10xindex>
88 // CHECK-NEXT: affine.yield %{{.*}} : index
91 // CHECK-NEXT: affine.for %{{.*}} = 0 to 20 {
102 affine.for %arg0 = 0 to 10 {
103 %v0 = affine.load %m1[%arg0] : memref<10xf32>
104 %v1 = affine.load %m2[%arg0] : memref<11xf32>
106 affine.store %v2, %m1[%arg0] : memref<10xf32>
111 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
112 // CHECK-NEXT: affine.load %{{.*}} : memref<10xf32>
113 // CHECK-NEXT: affine.load %{{.*}} : memref<11xf32>
115 // CHECK-NEXT: affine.store %{{.*}} : memref<10xf32>
126 affine.for %arg0 = 0 to 10 {
127 %t0 = affine.apply affine_map<(d1) -> (d1 + 1)>(%arg0)
128 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %t0) {
130 affine.store %cf9, %m[%arg0] : memref<10xf32>
137 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
138 // CHECK-NEXT: affine.apply #map{{[0-9]*}}(%arg0)
139 // CHECK-NEXT: affine.if
141 // CHECK-NEXT: affine.store
155 affine.for %arg0 = 0 to 10 {
157 affine.for %arg1 = 0 to 10 {
159 affine.store %v1, %m[%arg1] : memref<10xf32>
160 affine.store %v0, %m[%arg0] : memref<10xf32>
169 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
171 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
172 // CHECK-NEXT: affine.store %[[mul]]
173 // CHECK-NEXT: affine.store
185 affine.for %arg0 = 0 to 10 {
187 affine.for %arg1 = 0 to 10 {
189 affine.store %v0, %m[%arg0] : memref<10xf32>
190 affine.store %v1, %m[%arg1] : memref<10xf32>
199 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
200 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
201 // CHECK-NEXT: affine.store %[[add]]
202 // CHECK-NEXT: affine.store %[[mul]]
215 affine.for %arg0 = 0 to 10 {
217 affine.for %arg1 = 0 to 10 {
219 affine.store %v0, %m[%arg1] : memref<10xf32>
220 %v2 = affine.load %m[%arg0] : memref<10xf32>
229 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
230 // CHECK-NEXT: affine.for
231 // CHECK-NEXT: affine.store
232 // CHECK-NEXT: affine.load
244 affine.for %arg0 = 0 to 10 {
246 affine.for %arg1 = 0 to 10 {
248 %v3 = affine.load %m[%arg1] : memref<10xf32>
249 %v2 = affine.load %m[%arg0] : memref<10xf32>
258 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
259 // CHECK-NEXT: affine.load
261 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
262 // CHECK-NEXT: %{{.*}} = affine.load %{{.*}}[%{{.*}}] : memref<10xf32>
272 affine.for %arg0 = 0 to 10 {
273 affine.for %arg1 = 0 to 10 {
274 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
276 affine.store %cf9, %m[%arg0] : memref<10xf32>
284 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
286 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
287 // CHECK-NEXT: affine.if
289 // CHECK-NEXT: affine.store
301 affine.for %arg0 = 0 to 10 {
302 affine.for %arg1 = 0 to 10 {
303 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
305 affine.store %cf9, %m[%arg1] : memref<10xf32>
313 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
314 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
315 // CHECK-NEXT: affine.if
317 // CHECK-NEXT: affine.store
330 affine.for %arg0 = 0 to 10 {
331 affine.for %arg1 = 0 to 10 {
332 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
334 affine.store %cf9, %m[%arg0] : memref<10xf32>
335 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
336 affine.store %cf9, %m[%arg1] : memref<10xf32>
344 // CHECK-NEXT: affine.for %[[arg0:.*]] = 0 to 10 {
345 // CHECK-NEXT: affine.for %[[arg1:.*]] = 0 to 10 {
346 // CHECK-NEXT: affine.if
348 // CHECK-NEXT: affine.store {{.*}}[%[[arg0]]] : memref<10xf32>
349 // CHECK-NEXT: affine.if
350 // CHECK-NEXT: affine.store {{.*}}[%[[arg1]]] : memref<10xf32>
364 affine.for %arg0 = 0 to 10 {
365 affine.for %arg1 = 0 to 10 {
366 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
368 affine.store %cf9, %m[%arg0] : memref<10xf32>
369 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
370 affine.store %cf9, %m[%arg0] : memref<10xf32>
372 affine.store %cf9, %m[%arg1] : memref<10xf32>
380 // CHECK-NEXT: affine.for %[[arg0:.*]] = 0 to 10 {
381 // CHECK-NEXT: affine.for %[[arg1:.*]] = 0 to 10 {
382 // CHECK-NEXT: affine.if
384 // CHECK-NEXT: affine.store {{.*}}[%[[arg0]]] : memref<10xf32>
385 // CHECK-NEXT: affine.if
386 // CHECK-NEXT: affine.store {{.*}}[%[[arg0]]] : memref<10xf32>
388 // CHECK-NEXT: affine.store {{.*}}[%[[arg1]]] : memref<10xf32>
403 affine.for %arg0 = 0 to 10 {
404 affine.for %arg1 = 0 to 10 {
405 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
407 %tload1 = affine.load %m[%arg0] : memref<10xf32>
408 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
409 affine.store %cf9, %m2[%arg0] : memref<10xf32>
411 %tload2 = affine.load %m[%arg0] : memref<10xf32>
420 // CHECK-NEXT: affine.for %[[arg0:.*]] = 0 to 10 {
422 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
423 // CHECK-NEXT: affine.if
425 // CHECK-NEXT: affine.load {{.*}}[%[[arg0]]] : memref<10xf32>
426 // CHECK-NEXT: affine.if
427 // CHECK-NEXT: affine.store {{.*}}[%[[arg0]]] : memref<10xf32>
429 // CHECK-NEXT: affine.load {{.*}}[%[[arg0]]] : memref<10xf32>
442 affine.for %arg0 = 0 to 10 {
443 affine.for %arg1 = 0 to 10 {
444 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
446 %v1 = affine.load %m[%arg0] : memref<10xf32>
447 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
448 %v2 = affine.load %m[%arg0] : memref<10xf32>
456 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
458 // CHECK-NEXT: affine.for %[[arg0:.*]] = 0 to 10 {
459 // CHECK-NEXT: affine.if
461 // CHECK-NEXT: affine.load {{.*}}[%[[arg0]]] : memref<10xf32>
462 // CHECK-NEXT: affine.if
463 // CHECK-NEXT: affine.load {{.*}}[%[[arg0]]] : memref<10xf32>
476 affine.for %arg0 = 0 to 10 {
477 affine.for %arg1 = 0 to 10 {
478 affine.if affine_set<(d0, d1) : (d1 - d0 >= 0)> (%arg0, %arg0) {
480 affine.store %cf9, %m[%arg0] : memref<10xf32>
481 affine.for %arg2 = 0 to 10 {
482 affine.store %cf9, %m[%arg2] : memref<10xf32>
490 // CHECK-NEXT: affine.for %[[arg0:.*]] = 0 to 10 {
491 // CHECK-NEXT: affine.for %[[arg1:.*]] = 0 to 10 {
492 // CHECK-NEXT: affine.if
494 // CHECK-NEXT: affine.store {{.*}}[%[[arg0]]] : memref<10xf32>
495 // CHECK-NEXT: affine.for %[[arg2:.*]] = 0 to 10 {
496 // CHECK-NEXT: affine.store {{.*}}[%[[arg2]]] : memref<10xf32>
510 affine.for %arg0 = 0 to 5 {
512 %v = affine.load %m2[%c0] : memref<100xf32>
513 affine.store %v, %m[%arg0] : memref<100xf32>
519 // CHECK-NEXT: affine.load
520 // CHECK-NEXT: affine.for %{{.*}} = 0 to 5 {
521 // CHECK-NEXT: affine.store
533 affine.for %arg0 = 0 to 10 {
534 %v0 = affine.load %m[%c0] : memref<10xf32>
535 affine.for %arg1 = 0 to 10 {
536 affine.store %cst, %m[%arg1] : memref<10xf32>
543 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
544 // CHECK-NEXT: affine.load
545 // CHECK-NEXT: affine.for
546 // CHECK-NEXT: affine.store %[[cst]]
558 affine.for %arg0 = 0 to 10 {
559 affine.store %cst, %m[%c0] : memref<10xf32>
560 affine.for %arg1 = 0 to 10 {
561 %v0 = affine.load %m[%arg0] : memref<10xf32>
568 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
570 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
571 // CHECK-NEXT: affine.store %[[cst]]
572 // CHECK-NEXT: affine.load
584 affine.for %i = 0 to 512 {
585 affine.for %j = 0 to 10 {
586 %5 = affine.load %arg0[%i, %j] : memref<10x512xf32>
587 %6 = affine.load %0[0] : memref<1xf32>
589 affine.store %add, %0[0] : memref<1xf32>
591 %3 = affine.load %0[0] : memref<1xf32>
597 // CHECK: affine.for
598 // CHECK-NEXT: affine.for
599 // CHECK-NEXT: affine.load
600 // CHECK-NEXT: affine.load
602 // CHECK-NEXT: affine.store
604 // CHECK-NEXT: affine.load
614 affine.for %arg0 = 0 to 10 {
615 %v0 = affine.vector_load %m1[%arg0*4] : memref<40xf32>, vector<4xf32>
616 %v1 = affine.vector_load %m2[%arg0*4] : memref<40xf32>, vector<4xf32>
618 affine.vector_store %v2, %m1[%arg0*4] : memref<40xf32>, vector<4xf32>
623 // CHECK: affine.for
624 // CHECK-NEXT: affine.vector_load
625 // CHECK-NEXT: affine.vector_load
627 // CHECK-NEXT: affine.vector_store
637 affine.for %arg0 = 0 to 10 {
638 %v0 = affine.vector_load %m1[0] : memref<4xf32>, vector<4xf32>
639 %v1 = affine.vector_load %m2[0] : memref<4xf32>, vector<4xf32>
641 affine.vector_store %v2, %m3[0] : memref<4xf32>, vector<4xf32>
649 // CHECK-NEXT: affine.vector_load
650 // CHECK-NEXT: affine.vector_load
652 // CHECK-NEXT: affine.vector_store
653 // CHECK-NEXT: affine.for
662 %res = affine.for %i = 0 to 10 step 2 iter_args(%sum_iter = %sum_init_0) -> f32 {
663 %t = affine.load %buffer[%i] : memref<1024xf32>
664 %sum_next = affine.if #set(%i) -> (f32) {
666 affine.yield %new_sum : f32
668 affine.yield %sum_iter : f32
671 affine.yield %modified_sum : f32
678 // CHECK-NEXT: affine.for
679 // CHECK-NEXT: affine.load
680 // CHECK-NEXT: affine.if
682 // CHECK-NEXT: affine.yield
684 // CHECK-NEXT: affine.yield
687 // CHECK-NEXT: affine.yield
697 affine.for %j = 0 to 30 {
698 %sum = affine.for %i = 0 to 512 iter_args(%sum_iter = %sum_0) -> (f32) {
699 %t = affine.load %in[%j,%i] : memref<30x512xf32,1>
701 affine.yield %sum_next : f32
704 affine.store %mod_sum, %out[%j, 0] : memref<30x1xf32, 1>
711 // CHECK-NEXT: affine.for
712 // CHECK-NEXT: affine.for
713 // CHECK-NEXT: affine.load
715 // CHECK-NEXT: affine.yield
718 // CHECK-NEXT: affine.store
725 %v0 = affine.for %arg1 = 0 to 11 iter_args (%prevAccum = %sum_1) -> index {
728 affine.yield %newAccum : index
735 // CHECK-NEXT: affine.for
737 // CHECK-NEXT: affine.yield
744 %v0 = affine.for %arg1 = 0 to 11 iter_args (%prevAccum = %sum_1) -> index {
746 affine.yield %newAccum : index
752 // CHECK-NEXT: affine.for
754 // CHECK-NEXT: affine.yield
760 affine.parallel (%arg3) = (0) to (32) {
761 affine.for %arg4 = 0 to 16 {
762 affine.parallel (%arg5, %arg6) = (0, 0) to (min(128, 122), min(64, %arg3 * -64 + 2040)) {
763 affine.for %arg7 = 0 to min #map(%arg4) {
764 affine.store %cst, %memref_8[%arg5 + 3968, %arg6 + %arg3 * 64] : memref<4090x2040xf32>
769 // CHECK: affine.parallel
770 // CHECK-NEXT: affine.for
771 // CHECK-NEXT: affine.parallel
772 // CHECK-NEXT: affine.store
773 // CHECK-NEXT: affine.for
779 affine.for %arg4 = 0 to 16 {
780 affine.parallel (%arg5, %arg6) = (0, 0) to (min(128, 122), min(64, %x * -64 + 2040)) {
781 affine.for %arg7 = 0 to min #map(%arg4) {
782 affine.store %cst, %memref_8[%arg5 + 3968, %arg6] : memref<4090x2040xf32>
788 // CHECK-NEXT: affine.for
789 // CHECK-NEXT: affine.parallel
790 // CHECK-NEXT: affine.store
791 // CHECK-NEXT: affine.for
793 affine.for %arg3 = 0 to 32 {
794 affine.for %arg4 = 0 to 16 {
795 affine.parallel (%arg5, %arg6) = (0, 0) to (min(128, 122), min(64, %arg3 * -64 + 2040)) {
798 affine.store %cst, %memref_8[%arg5 + 3968, %arg6 + %arg3 * 64] : memref<4090x2040xf32>
803 // CHECK: affine.for
804 // CHECK-NEXT: affine.for
805 // CHECK-NEXT: affine.parallel
807 // CHECK-NEXT: affine.store
822 affine.for %arg3 = 0 to 64 {
823 %0 = affine.apply #map(%arg3)
826 affine.dma_start %arg0[%0], %alloc_2[%c0], %alloc_1[%c0], %c320 : memref<10485760xi32>, memref<320xi32, 2>, memref<0xi32, 2>
827 affine.dma_start %arg1[%c0], %alloc_0[%c0], %alloc[%c0], %c1 : memref<1xi32>, memref<1xi32, 2>, memref<0xi32, 2>
828 affine.dma_wait %alloc_1[%c0], %c320 : memref<0xi32, 2>
829 affine.dma_wait %alloc[%c0], %c1 : memref<0xi32, 2>
830 %1 = affine.apply #map(%arg3)
833 affine.for %arg4 = 0 to 320 {
834 %2 = affine.load %alloc_2[%arg4] : memref<320xi32, 2>
835 %3 = affine.load %alloc_0[0] : memref<1xi32, 2>
838 affine.store %5, %alloc_4[%arg4] : memref<320xi32, 2>
840 affine.dma_start %alloc_4[%c0], %arg2[%1], %alloc_3[%c0], %c320 : memref<320xi32, 2>, memref<10485760xi32>, memref<0xi32, 2>
841 affine.dma_wait %alloc_3[%c0], %c320 : memref<0xi32, 2>
847 // CHECK: affine.dma_start %arg1[%[[zero]]], %alloc_0[%[[zero]]], %alloc[%[[zero]]], %c1
848 // CHECK: affine.load %[[scalar_mem]][0]
855 affine.for %i0 = 0 to 10 {
856 affine.for %i1 = 0 to 10 {
857 %1 = affine.load %0[%i0, %i1] : memref<10x10xf32>
859 affine.prefetch %0[%i0, %i0], write, locality<0>, data : memref<10x10xf32>
864 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
865 // CHECK-NEXT: affine.for %{{.*}} = 0 to 10 {
866 // CHECK-NEXT: affine.load %{{.*}}[%{{.*}} : memref<10x10xf32>
867 // CHECK-NEXT: affine.prefetch
880 affine.for %arg783 = 0 to 14 {
881 affine.for %arg784 = 0 to 14 {
882 affine.parallel (%arg785) = (0) to (512) {
883 affine.for %arg786 = 0 to 1 {
884 affine.for %arg787 = 0 to 1 {
885 affine.for %arg788 = 0 to 1 {
888 affine.store %cst, %m1[0] : memref<1xf32, 3>
889 affine.store %cst, %m2[0] : memref<1xf32, 3>
892 affine.for %arg789 = 0 to 16 {
893 affine.for %arg790 = 0 to 16 {
894 affine.store %cst, %memref_2897[0, %arg785 + %arg788, %arg789, %arg790] : memref<1x512x16x16xf32>
907 // CHECK: affine.for %{{.*}} = 0 to 1
908 // CHECK-NEXT: affine.for %{{.*}} = 0 to 1
912 // CHECK: affine.for %{{.*}} = 0 to 16
913 // CHECK: affine.for %{{.*}} = 0 to 16