Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 1 | // RUN: mlir-opt %s -split-input-file | FileCheck %s |
| 2 | |
| 3 | // ----- |
| 4 | |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 5 | // Test with loop IVs. |
| 6 | func @test0(%arg0 : index, %arg1 : index) { |
Julian Gross | e231070 | 2021-02-10 12:53:11 | [diff] [blame] | 7 | %0 = memref.alloc() : memref<100x100xf32> |
| 8 | %1 = memref.alloc() : memref<100x100xf32, affine_map<(d0, d1) -> (d0, d1)>, 2> |
| 9 | %2 = memref.alloc() : memref<1xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame^] | 10 | %c0 = arith.constant 0 : index |
| 11 | %c64 = arith.constant 64 : index |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 12 | affine.for %i0 = 0 to 10 { |
| 13 | affine.for %i1 = 0 to 10 { |
| 14 | affine.dma_start %0[%i0, %i1], %1[%i0, %i1], %2[%c0], %c64 |
| 15 | : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 16 | affine.dma_wait %2[%c0], %c64 : memref<1xi32> |
River Riddle | 89bc449 | 2019-07-09 17:40:29 | [diff] [blame] | 17 | // CHECK: affine.dma_start %{{.*}}[%{{.*}}, %{{.*}}], %{{.*}}[%{{.*}}, %{{.*}}], %{{.*}}[%{{.*}}], %{{.*}} : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 18 | // CHECK: affine.dma_wait %{{.*}}[%{{.*}}], %{{.*}} : memref<1xi32> |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 19 | } |
| 20 | } |
| 21 | return |
| 22 | } |
| 23 | |
| 24 | // ----- |
| 25 | |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 26 | // Test with loop IVs and optional stride arguments. |
| 27 | func @test1(%arg0 : index, %arg1 : index) { |
Julian Gross | e231070 | 2021-02-10 12:53:11 | [diff] [blame] | 28 | %0 = memref.alloc() : memref<100x100xf32> |
| 29 | %1 = memref.alloc() : memref<100x100xf32, affine_map<(d0, d1) -> (d0, d1)>, 2> |
| 30 | %2 = memref.alloc() : memref<1xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame^] | 31 | %c0 = arith.constant 0 : index |
| 32 | %c64 = arith.constant 64 : index |
| 33 | %c128 = arith.constant 128 : index |
| 34 | %c256 = arith.constant 256 : index |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 35 | affine.for %i0 = 0 to 10 { |
| 36 | affine.for %i1 = 0 to 10 { |
| 37 | affine.dma_start %0[%i0, %i1], %1[%i0, %i1], %2[%c0], %c64, %c128, %c256 |
| 38 | : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 39 | affine.dma_wait %2[%c0], %c64 : memref<1xi32> |
River Riddle | 89bc449 | 2019-07-09 17:40:29 | [diff] [blame] | 40 | // CHECK: affine.dma_start %{{.*}}[%{{.*}}, %{{.*}}], %{{.*}}[%{{.*}}, %{{.*}}], %{{.*}}[%{{.*}}], %{{.*}}, %{{.*}}, %{{.*}} : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 41 | // CHECK: affine.dma_wait %{{.*}}[%{{.*}}], %{{.*}} : memref<1xi32> |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 42 | } |
| 43 | } |
| 44 | return |
| 45 | } |
| 46 | |
| 47 | // ----- |
| 48 | |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 49 | // Test with loop IVs and symbols (without symbol keyword). |
| 50 | func @test2(%arg0 : index, %arg1 : index) { |
Julian Gross | e231070 | 2021-02-10 12:53:11 | [diff] [blame] | 51 | %0 = memref.alloc() : memref<100x100xf32> |
| 52 | %1 = memref.alloc() : memref<100x100xf32, affine_map<(d0, d1) -> (d0, d1)>, 2> |
| 53 | %2 = memref.alloc() : memref<1xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame^] | 54 | %c0 = arith.constant 0 : index |
| 55 | %c64 = arith.constant 64 : index |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 56 | affine.for %i0 = 0 to 10 { |
| 57 | affine.for %i1 = 0 to 10 { |
| 58 | affine.dma_start %0[%i0 + %arg0, %i1], %1[%i0, %i1 + %arg1 + 5], |
| 59 | %2[%c0], %c64 |
| 60 | : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 61 | affine.dma_wait %2[%c0], %c64 : memref<1xi32> |
River Riddle | 89bc449 | 2019-07-09 17:40:29 | [diff] [blame] | 62 | // CHECK: affine.dma_start %{{.*}}[%{{.*}} + %{{.*}}, %{{.*}}], %{{.*}}[%{{.*}}, %{{.*}} + %{{.*}} + 5], %{{.*}}[%{{.*}}], %{{.*}} : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 63 | // CHECK: affine.dma_wait %{{.*}}[%{{.*}}], %{{.*}} : memref<1xi32> |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 64 | } |
| 65 | } |
| 66 | return |
| 67 | } |
| 68 | |
| 69 | // ----- |
| 70 | |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 71 | // Test with loop IVs and symbols (with symbol keyword). |
| 72 | func @test3(%arg0 : index, %arg1 : index) { |
Julian Gross | e231070 | 2021-02-10 12:53:11 | [diff] [blame] | 73 | %0 = memref.alloc() : memref<100x100xf32> |
| 74 | %1 = memref.alloc() : memref<100x100xf32, affine_map<(d0, d1) -> (d0, d1)>, 2> |
| 75 | %2 = memref.alloc() : memref<1xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame^] | 76 | %c0 = arith.constant 0 : index |
| 77 | %c64 = arith.constant 64 : index |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 78 | affine.for %i0 = 0 to 10 { |
| 79 | affine.for %i1 = 0 to 10 { |
| 80 | affine.dma_start %0[%i0 + symbol(%arg0), %i1], |
| 81 | %1[%i0, %i1 + symbol(%arg1) + 7], |
| 82 | %2[%i0 + %i1 + 11], %c64 |
| 83 | : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 84 | affine.dma_wait %2[%c0], %c64 : memref<1xi32> |
River Riddle | 89bc449 | 2019-07-09 17:40:29 | [diff] [blame] | 85 | // CHECK: affine.dma_start %{{.*}}[%{{.*}} + symbol(%{{.*}}), %{{.*}}], %{{.*}}[%{{.*}}, %{{.*}} + symbol(%{{.*}}) + 7], %{{.*}}[%{{.*}} + %{{.*}} + 11], %{{.*}} : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 86 | // CHECK: affine.dma_wait %{{.*}}[%{{.*}}], %{{.*}} : memref<1xi32> |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 87 | } |
| 88 | } |
| 89 | return |
| 90 | } |
| 91 | |
| 92 | // ----- |
| 93 | |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 94 | // Test with loop IVs, symbols and constants in nested affine expressions. |
| 95 | func @test4(%arg0 : index, %arg1 : index) { |
Julian Gross | e231070 | 2021-02-10 12:53:11 | [diff] [blame] | 96 | %0 = memref.alloc() : memref<100x100xf32> |
| 97 | %1 = memref.alloc() : memref<100x100xf32, 2> |
| 98 | %2 = memref.alloc() : memref<1xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame^] | 99 | %c64 = arith.constant 64 : index |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 100 | affine.for %i0 = 0 to 10 { |
| 101 | affine.for %i1 = 0 to 10 { |
| 102 | affine.dma_start %0[(%i0 + symbol(%arg0)) floordiv 3, %i1], |
| 103 | %1[%i0, (%i1 + symbol(%arg1)) mod 9 + 7], |
| 104 | %2[%i0 + %i1 + 11], %c64 |
| 105 | : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 106 | affine.dma_wait %2[%i0 + %i1 + 11], %c64 : memref<1xi32> |
River Riddle | 89bc449 | 2019-07-09 17:40:29 | [diff] [blame] | 107 | // CHECK: affine.dma_start %{{.*}}[(%{{.*}} + symbol(%{{.*}})) floordiv 3, %{{.*}}], %{{.*}}[%{{.*}}, (%{{.*}} + symbol(%{{.*}})) mod 9 + 7], %{{.*}}[%{{.*}} + %{{.*}} + 11], %{{.*}} : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> |
| 108 | // CHECK: affine.dma_wait %{{.*}}[%{{.*}} + %{{.*}} + 11], %{{.*}} : memref<1xi32> |
Andy Davis | 6c68596 | 2019-06-28 20:31:31 | [diff] [blame] | 109 | } |
| 110 | } |
| 111 | return |
| 112 | } |