|
1 |
| -// RUN: mlir-opt %s -allow-unregistered-dialect -split-input-file -test-vector-warp-distribute=rewrite-warp-ops-to-scf-if | FileCheck %s --check-prefix=CHECK-SCF-IF |
2 |
| -// RUN: mlir-opt %s -allow-unregistered-dialect -split-input-file -test-vector-warp-distribute="hoist-uniform" | FileCheck --check-prefixes=CHECK-HOIST %s |
3 |
| -// RUN: mlir-opt %s -allow-unregistered-dialect -split-input-file -test-vector-warp-distribute="hoist-uniform distribute-transfer-write" | FileCheck --check-prefixes=CHECK-D %s |
4 |
| -// RUN: mlir-opt %s -allow-unregistered-dialect -split-input-file -test-vector-warp-distribute=propagate-distribution -canonicalize | FileCheck --check-prefixes=CHECK-PROP %s |
5 |
| -// RUN: mlir-opt %s -allow-unregistered-dialect -split-input-file -test-vector-warp-distribute="hoist-uniform distribute-transfer-write propagate-distribution" -canonicalize | FileCheck --check-prefixes=CHECK-DIST-AND-PROP %s |
| 1 | +// RUN: mlir-opt %s --allow-unregistered-dialect --split-input-file \ |
| 2 | +// RUN: --test-vector-warp-distribute=rewrite-warp-ops-to-scf-if | FileCheck %s --check-prefix=CHECK-SCF-IF |
| 3 | + |
| 4 | +// RUN: mlir-opt %s --allow-unregistered-dialect --split-input-file \ |
| 5 | +// RUN: --test-vector-warp-distribute="hoist-uniform" | FileCheck --check-prefixes=CHECK-HOIST %s |
| 6 | + |
| 7 | +// RUN: mlir-opt %s --allow-unregistered-dialect --split-input-file \ |
| 8 | +// RUN: --test-vector-warp-distribute="hoist-uniform distribute-transfer-write max-transfer-write-elements=4" \ |
| 9 | +// RUN: | FileCheck --check-prefixes=CHECK-D %s |
| 10 | + |
| 11 | +// RUN: mlir-opt %s --allow-unregistered-dialect --split-input-file \ |
| 12 | +// RUN: --test-vector-warp-distribute=propagate-distribution --canonicalize \ |
| 13 | +// RUN: | FileCheck --check-prefixes=CHECK-PROP %s |
| 14 | + |
| 15 | +// RUN: mlir-opt %s --allow-unregistered-dialect --split-input-file \ |
| 16 | +// RUN: --test-vector-warp-distribute="hoist-uniform distribute-transfer-write propagate-distribution" \ |
| 17 | +// RUN: --canonicalize | FileCheck --check-prefixes=CHECK-DIST-AND-PROP %s |
6 | 18 |
|
7 | 19 | // CHECK-SCF-IF-DAG: #[[$TIMES2:.*]] = affine_map<()[s0] -> (s0 * 2)>
|
8 | 20 | // CHECK-SCF-IF-DAG: #[[$TIMES4:.*]] = affine_map<()[s0] -> (s0 * 4)>
|
@@ -134,6 +146,84 @@ func.func @warp_extract(%laneid: index, %arg1: memref<1024x1024xf32>, %gid : ind
|
134 | 146 |
|
135 | 147 | // -----
|
136 | 148 |
|
| 149 | +// Check that we can distribute writes of the maximum allowed number of elements. |
| 150 | + |
| 151 | +// CHECK-D-LABEL: func @warp_extract_4_elems( |
| 152 | +// CHECK-D: %[[WARPOP:.*]]:2 = vector.warp_execute_on_lane_0(%{{.*}})[32] -> (vector<4xf32>, vector<4x1xf32>) |
| 153 | +// CHECK-D: "test.dummy_op" |
| 154 | +// CHECK-D: "test.dummy_op" |
| 155 | +// CHECK-D: vector.yield %{{.*}}, %{{.*}} : vector<4xf32>, vector<4x1xf32> |
| 156 | +// CHECK-D: } |
| 157 | +// CHECK-D: vector.warp_execute_on_lane_0(%{{.*}})[32] { |
| 158 | +// CHECK-D: vector.transfer_write %[[WARPOP]]#1, %{{.*}}[%{{.*}}] {{.*}} : vector<4x1xf32> |
| 159 | +// CHECK-D: } |
| 160 | +// CHECK-D: vector.warp_execute_on_lane_0(%{{.*}})[32] { |
| 161 | +// CHECK-D: vector.transfer_write %[[WARPOP]]#0, %{{.*}}[%{{.*}}] {{.*}} : vector<4xf32> |
| 162 | +// CHECK-D: } |
| 163 | + |
| 164 | +func.func @warp_extract_4_elems(%laneid: index, %arg1: memref<1024x1024xf32>, %gid : index) { |
| 165 | + vector.warp_execute_on_lane_0(%laneid)[32] { |
| 166 | + %c0 = arith.constant 0 : index |
| 167 | + %v = "test.dummy_op"() : () -> (vector<4xf32>) |
| 168 | + %v1 = "test.dummy_op"() : () -> (vector<4x1xf32>) |
| 169 | + vector.transfer_write %v1, %arg1[%c0, %c0] : vector<4x1xf32>, memref<1024x1024xf32> |
| 170 | + vector.transfer_write %v, %arg1[%c0, %c0] : vector<4xf32>, memref<1024x1024xf32> |
| 171 | + } |
| 172 | + return |
| 173 | +} |
| 174 | + |
| 175 | +// ----- |
| 176 | + |
| 177 | +// Check that we do not distribute writes larger than the maximum allowed |
| 178 | +// number of elements. |
| 179 | + |
| 180 | +// CHECK-D-LABEL: func @warp_extract_5_elems( |
| 181 | +// CHECK-D: arith.constant 0 : index |
| 182 | +// CHECK-D: vector.warp_execute_on_lane_0(%{{.*}})[32] { |
| 183 | +// CHECK-D: %[[V:.+]] = "test.dummy_op" |
| 184 | +// CHECK-D: %[[V1:.+]] = "test.dummy_op" |
| 185 | +// CHECK-D: vector.transfer_write %[[V1]], %{{.*}}[%{{.*}}] {{.*}} : vector<5x1xf32> |
| 186 | +// CHECK-D: vector.transfer_write %[[V]], %{{.*}}[%{{.*}}] {{.*}} : vector<5xf32> |
| 187 | +// CHECK-D: } |
| 188 | + |
| 189 | +func.func @warp_extract_5_elems(%laneid: index, %arg1: memref<1024x1024xf32>, %gid : index) { |
| 190 | + vector.warp_execute_on_lane_0(%laneid)[32] { |
| 191 | + %c0 = arith.constant 0 : index |
| 192 | + %v = "test.dummy_op"() : () -> (vector<5xf32>) |
| 193 | + %v1 = "test.dummy_op"() : () -> (vector<5x1xf32>) |
| 194 | + vector.transfer_write %v1, %arg1[%c0, %c0] : vector<5x1xf32>, memref<1024x1024xf32> |
| 195 | + vector.transfer_write %v, %arg1[%c0, %c0] : vector<5xf32>, memref<1024x1024xf32> |
| 196 | + } |
| 197 | + return |
| 198 | +} |
| 199 | + |
| 200 | +// ----- |
| 201 | + |
| 202 | +// Check that we do not distribute writes larger than the maximum allowed |
| 203 | +// number of elements, or multiples of the maximum number of elements. |
| 204 | + |
| 205 | +// CHECK-D-LABEL: func @warp_extract_8_elems( |
| 206 | +// CHECK-D: arith.constant 0 : index |
| 207 | +// CHECK-D: vector.warp_execute_on_lane_0(%{{.*}})[32] { |
| 208 | +// CHECK-D: %[[V:.+]] = "test.dummy_op" |
| 209 | +// CHECK-D: %[[V1:.+]] = "test.dummy_op" |
| 210 | +// CHECK-D: vector.transfer_write %[[V1]], %{{.*}}[%{{.*}}] {{.*}} : vector<8x1xf32> |
| 211 | +// CHECK-D: vector.transfer_write %[[V]], %{{.*}}[%{{.*}}] {{.*}} : vector<8xf32> |
| 212 | +// CHECK-D: } |
| 213 | + |
| 214 | +func.func @warp_extract_8_elems(%laneid: index, %arg1: memref<1024x1024xf32>, %gid : index) { |
| 215 | + vector.warp_execute_on_lane_0(%laneid)[32] { |
| 216 | + %c0 = arith.constant 0 : index |
| 217 | + %v = "test.dummy_op"() : () -> (vector<8xf32>) |
| 218 | + %v1 = "test.dummy_op"() : () -> (vector<8x1xf32>) |
| 219 | + vector.transfer_write %v1, %arg1[%c0, %c0] : vector<8x1xf32>, memref<1024x1024xf32> |
| 220 | + vector.transfer_write %v, %arg1[%c0, %c0] : vector<8xf32>, memref<1024x1024xf32> |
| 221 | + } |
| 222 | + return |
| 223 | +} |
| 224 | + |
| 225 | +// ----- |
| 226 | + |
137 | 227 | // CHECK-PROP-LABEL: func @warp_dead_result(
|
138 | 228 | func.func @warp_dead_result(%laneid: index) -> (vector<1xf32>) {
|
139 | 229 | // CHECK-PROP: %[[R:.*]] = vector.warp_execute_on_lane_0(%{{.*}})[32] -> (vector<1xf32>)
|
|
0 commit comments