@@ -409,3 +409,177 @@ func.func @arith_add_vaild_symbol_lower_bound(%arg : index) {
409409// CHECK: affine.for %[[VAL_3:.*]] = #[[$ATTR_0]](%[[VAL_2]]){{\[}}%[[VAL_0]]] to 7 {
410410// CHECK: }
411411// CHECK: }
412+
413+ // -----
414+
415+ // CHECK-LABEL: func @affine_parallel
416+
417+ func.func @affine_parallel (%arg0 : index , %arg1 : index , %arg2 : index ) {
418+ affine.for %x = 0 to 7 {
419+ %y = arith.addi %x , %x : index
420+ affine.parallel (%i , %j ) = (0 , 0 ) to (%y , 100 ) step (10 , 10 ) {
421+ }
422+ }
423+ return
424+ }
425+
426+ // CHECK-NEXT: affine.for
427+ // CHECK-SAME: %[[VAL_0:.*]] = 0 to 7 {
428+ // CHECK: %[[VAL_1:.*]] = arith.addi %[[VAL_0]], %[[VAL_0]] : index
429+ // CHECK: affine.parallel (%{{.*}}, %{{.*}}) = (0, 0) to (%[[VAL_1]], 100) step (10, 10) {
430+ // CHECK: }
431+ // CHECK: }
432+
433+ // -----
434+
435+ func.func @load_non_affine_index (%arg0 : index ) {
436+ %0 = memref.alloc () : memref <10 xf32 >
437+ affine.for %i0 = 0 to 10 {
438+ %1 = arith.muli %i0 , %arg0 : index
439+ %v = affine.load %0 [%1 ] : memref <10 xf32 >
440+ }
441+ return
442+ }
443+
444+ // CHECK-LABEL: func @load_non_affine_index
445+ // CHECK-SAME: %[[VAL_0:.*]]: index) {
446+ // CHECK: %[[VAL_1:.*]] = memref.alloc() : memref<10xf32>
447+ // CHECK: affine.for %[[VAL_2:.*]] = 0 to 10 {
448+ // CHECK: %[[VAL_3:.*]] = arith.muli %[[VAL_2]], %[[VAL_0]] : index
449+ // CHECK: %{{.*}} = affine.load %[[VAL_1]]{{\[}}%[[VAL_3]]] : memref<10xf32>
450+ // CHECK: }
451+
452+ // -----
453+
454+ func.func @store_non_affine_index (%arg0 : index ) {
455+ %0 = memref.alloc () : memref <10 xf32 >
456+ %1 = arith.constant 11.0 : f32
457+ affine.for %i0 = 0 to 10 {
458+ %2 = arith.muli %i0 , %arg0 : index
459+ affine.store %1 , %0 [%2 ] : memref <10 xf32 >
460+ }
461+ return
462+ }
463+
464+ // CHECK-LABEL: func @store_non_affine_index
465+ // CHECK-SAME: %[[VAL_0:.*]]: index) {
466+ // CHECK: %[[VAL_1:.*]] = memref.alloc() : memref<10xf32>
467+ // CHECK: %[[VAL_2:.*]] = arith.constant 1.100000e+01 : f32
468+ // CHECK: affine.for %[[VAL_3:.*]] = 0 to 10 {
469+ // CHECK: %[[VAL_4:.*]] = arith.muli %[[VAL_3]], %[[VAL_0]] : index
470+ // CHECK: affine.store %[[VAL_2]], %[[VAL_1]]{{\[}}%[[VAL_4]]] : memref<10xf32>
471+ // CHECK: }
472+
473+ // -----
474+
475+ func.func @dma_start_non_affine_src_index (%arg0 : index ) {
476+ %0 = memref.alloc () : memref <100 xf32 >
477+ %1 = memref.alloc () : memref <100 xf32 , 2 >
478+ %2 = memref.alloc () : memref <1 xi32 , 4 >
479+ %c0 = arith.constant 0 : index
480+ %c64 = arith.constant 64 : index
481+ affine.for %i0 = 0 to 10 {
482+ %3 = arith.muli %i0 , %arg0 : index
483+ affine.dma_start %0 [%3 ], %1 [%i0 ], %2 [%c0 ], %c64
484+ : memref <100 xf32 >, memref <100 xf32 , 2 >, memref <1 xi32 , 4 >
485+ }
486+ return
487+ }
488+
489+ // CHECK-LABEL: func @dma_start_non_affine_src_index
490+ // CHECK-SAME: %[[VAL_0:.*]]: index) {
491+ // CHECK: %[[VAL_1:.*]] = memref.alloc() : memref<100xf32>
492+ // CHECK: %[[VAL_2:.*]] = memref.alloc() : memref<100xf32, 2>
493+ // CHECK: %[[VAL_3:.*]] = memref.alloc() : memref<1xi32, 4>
494+ // CHECK: %[[VAL_4:.*]] = arith.constant 0 : index
495+ // CHECK: %[[VAL_5:.*]] = arith.constant 64 : index
496+ // CHECK: affine.for %[[VAL_6:.*]] = 0 to 10 {
497+ // CHECK: %[[VAL_7:.*]] = arith.muli %[[VAL_6]], %[[VAL_0]] : index
498+ // CHECK: affine.dma_start %[[VAL_1]]{{\[}}%[[VAL_7]]], %[[VAL_2]]{{\[}}%[[VAL_6]]], %[[VAL_3]]{{\[}}%[[VAL_4]]], %[[VAL_5]]
499+ // CHECK-SAME: : memref<100xf32>, memref<100xf32, 2>, memref<1xi32, 4>
500+ // CHECK: }
501+
502+ // -----
503+
504+ func.func @dma_start_non_affine_dst_index (%arg0 : index ) {
505+ %0 = memref.alloc () : memref <100 xf32 >
506+ %1 = memref.alloc () : memref <100 xf32 , 2 >
507+ %2 = memref.alloc () : memref <1 xi32 , 4 >
508+ %c0 = arith.constant 0 : index
509+ %c64 = arith.constant 64 : index
510+ affine.for %i0 = 0 to 10 {
511+ %3 = arith.muli %i0 , %arg0 : index
512+ affine.dma_start %0 [%i0 ], %1 [%3 ], %2 [%c0 ], %c64
513+ : memref <100 xf32 >, memref <100 xf32 , 2 >, memref <1 xi32 , 4 >
514+ }
515+ return
516+ }
517+
518+ // CHECK-LABEL: func @dma_start_non_affine_dst_index
519+ // CHECK-SAME: %[[VAL_0:.*]]: index) {
520+ // CHECK: %[[VAL_1:.*]] = memref.alloc() : memref<100xf32>
521+ // CHECK: %[[VAL_2:.*]] = memref.alloc() : memref<100xf32, 2>
522+ // CHECK: %[[VAL_3:.*]] = memref.alloc() : memref<1xi32, 4>
523+ // CHECK: %[[VAL_4:.*]] = arith.constant 0 : index
524+ // CHECK: %[[VAL_5:.*]] = arith.constant 64 : index
525+ // CHECK: affine.for %[[VAL_6:.*]] = 0 to 10 {
526+ // CHECK: %[[VAL_7:.*]] = arith.muli %[[VAL_6]], %[[VAL_0]] : index
527+ // CHECK: affine.dma_start %[[VAL_1]]{{\[}}%[[VAL_6]]], %[[VAL_2]]{{\[}}%[[VAL_7]]], %[[VAL_3]]{{\[}}%[[VAL_4]]], %[[VAL_5]]
528+ // CHECK-SAME: : memref<100xf32>, memref<100xf32, 2>, memref<1xi32, 4>
529+ // CHECK: }
530+
531+ // -----
532+
533+ func.func @dma_start_non_affine_tag_index (%arg0 : index ) {
534+ %0 = memref.alloc () : memref <100 xf32 >
535+ %1 = memref.alloc () : memref <100 xf32 , 2 >
536+ %2 = memref.alloc () : memref <1 xi32 , 4 >
537+ %c0 = arith.constant 0 : index
538+ %c64 = arith.constant 64 : index
539+ affine.for %i0 = 0 to 10 {
540+ %3 = arith.muli %i0 , %arg0 : index
541+ affine.dma_start %0 [%i0 ], %1 [%arg0 ], %2 [%3 ], %c64
542+ : memref <100 xf32 >, memref <100 xf32 , 2 >, memref <1 xi32 , 4 >
543+ }
544+ return
545+ }
546+
547+ // CHECK-LABEL: func @dma_start_non_affine_tag_index
548+ // CHECK-SAME: %[[VAL_0:.*]]: index) {
549+ // CHECK: %[[VAL_1:.*]] = memref.alloc() : memref<100xf32>
550+ // CHECK: %[[VAL_2:.*]] = memref.alloc() : memref<100xf32, 2>
551+ // CHECK: %[[VAL_3:.*]] = memref.alloc() : memref<1xi32, 4>
552+ // CHECK: %{{.*}} = arith.constant 0 : index
553+ // CHECK: %[[VAL_4:.*]] = arith.constant 64 : index
554+ // CHECK: affine.for %[[VAL_5:.*]] = 0 to 10 {
555+ // CHECK: %[[VAL_6:.*]] = arith.muli %[[VAL_5]], %[[VAL_0]] : index
556+ // CHECK: affine.dma_start %[[VAL_1]]{{\[}}%[[VAL_5]]], %[[VAL_2]]{{\[}}%[[VAL_0]]], %[[VAL_3]]{{\[}}%[[VAL_6]]], %[[VAL_4]]
557+ // CHECK-SAME: : memref<100xf32>, memref<100xf32, 2>, memref<1xi32, 4>
558+ // CHECK: }
559+
560+ // -----
561+
562+ func.func @dma_wait_non_affine_tag_index (%arg0 : index ) {
563+ %0 = memref.alloc () : memref <100 xf32 >
564+ %1 = memref.alloc () : memref <100 xf32 , 2 >
565+ %2 = memref.alloc () : memref <1 xi32 , 4 >
566+ %c0 = arith.constant 0 : index
567+ %c64 = arith.constant 64 : index
568+ affine.for %i0 = 0 to 10 {
569+ %3 = arith.muli %i0 , %arg0 : index
570+ affine.dma_wait %2 [%3 ], %c64 : memref <1 xi32 , 4 >
571+ }
572+ return
573+ }
574+
575+ // CHECK-LABEL: func @dma_wait_non_affine_tag_index
576+ // CHECK-SAME: %[[VAL_0:.*]]: index) {
577+ // CHECK: %{{.*}} = memref.alloc() : memref<100xf32>
578+ // CHECK: %{{.*}} = memref.alloc() : memref<100xf32, 2>
579+ // CHECK: %[[VAL_1:.*]] = memref.alloc() : memref<1xi32, 4>
580+ // CHECK: %{{.*}} = arith.constant 0 : index
581+ // CHECK: %[[VAL_2:.*]] = arith.constant 64 : index
582+ // CHECK: affine.for %[[VAL_3:.*]] = 0 to 10 {
583+ // CHECK: %[[VAL_4:.*]] = arith.muli %[[VAL_3]], %[[VAL_0]] : index
584+ // CHECK: affine.dma_wait %[[VAL_1]]{{\[}}%[[VAL_4]]], %[[VAL_2]] : memref<1xi32, 4>
585+ // CHECK: }
0 commit comments