@@ -409,3 +409,177 @@ func.func @arith_add_vaild_symbol_lower_bound(%arg : index) {
409
409
// CHECK: affine.for %[[VAL_3:.*]] = #[[$ATTR_0]](%[[VAL_2]]){{\[}}%[[VAL_0]]] to 7 {
410
410
// CHECK: }
411
411
// 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