Mercurial > hg > CbC > CbC_llvm
comparison mlir/test/Dialect/Linalg/parallel_loops.mlir @ 173:0572611fdcc8 llvm10 llvm12
reorgnization done
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 11:55:54 +0900 |
parents | 1d019706d866 |
children |
comparison
equal
deleted
inserted
replaced
172:9fbae9c8bf63 | 173:0572611fdcc8 |
---|---|
19 // CHECK-LABEL: @linalg_generic_sum | 19 // CHECK-LABEL: @linalg_generic_sum |
20 // CHECK: (%[[LHS:.*]]:{{.*}}, %[[RHS:.*]]:{{.*}}, %[[SUM:.*]]:{{.*}}) | 20 // CHECK: (%[[LHS:.*]]:{{.*}}, %[[RHS:.*]]:{{.*}}, %[[SUM:.*]]:{{.*}}) |
21 // CHECK-DAG: %[[C2:.*]] = constant 2 | 21 // CHECK-DAG: %[[C2:.*]] = constant 2 |
22 // CHECK-DAG: %[[C0:.*]] = constant 0 | 22 // CHECK-DAG: %[[C0:.*]] = constant 0 |
23 // CHECK-DAG: %[[C1:.*]] = constant 1 | 23 // CHECK-DAG: %[[C1:.*]] = constant 1 |
24 // CHECK: loop.parallel (%[[I:.*]], %[[J:.*]]) = {{.*}} | 24 // CHECK: scf.parallel (%[[I:.*]], %[[J:.*]]) = {{.*}} |
25 // CHECK: %[[LHS_ELEM:.*]] = load %[[LHS]][%[[I]], %[[J]]] | 25 // CHECK: %[[LHS_ELEM:.*]] = load %[[LHS]][%[[I]], %[[J]]] |
26 // CHECK: %[[RHS_ELEM:.*]] = load %[[RHS]][%[[I]], %[[J]]] | 26 // CHECK: %[[RHS_ELEM:.*]] = load %[[RHS]][%[[I]], %[[J]]] |
27 // CHECK: %[[SUM_ELEM:.*]] = load %[[SUM]][%[[I]], %[[J]]] | |
28 // CHECK: %[[SUM:.*]] = addf %[[LHS_ELEM]], %[[RHS_ELEM]] : f32 | 27 // CHECK: %[[SUM:.*]] = addf %[[LHS_ELEM]], %[[RHS_ELEM]] : f32 |
29 // CHECK: store %[[SUM]], %{{.*}}[%[[I]], %[[J]]] | 28 // CHECK: store %[[SUM]], %{{.*}}[%[[I]], %[[J]]] |
30 // CHECK: "loop.terminator"() : () -> () | 29 // CHECK: scf.yield |
31 | 30 |
32 // ----- | 31 // ----- |
33 | 32 |
34 #accesses = [ | 33 #accesses = [ |
35 affine_map<(m, n) -> (m, n)>, | 34 affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)>, |
36 affine_map<(m, n) -> (m)> | 35 affine_map<(d0, d1, d2, d3) -> (d0, d1, d3)> |
37 ] | 36 ] |
38 #trait = { | 37 #trait = { |
39 args_in = 1, | 38 args_in = 1, |
40 args_out = 1, | 39 args_out = 1, |
41 iterator_types = ["parallel", "reduction"], | 40 iterator_types = ["parallel", "parallel", "reduction", "parallel"], |
42 indexing_maps = #accesses | 41 indexing_maps = #accesses |
43 } | 42 } |
44 | 43 |
45 func @do_not_lower_reduce(%A: memref<2x4xf32>, %B: memref<2xf32>) { | 44 func @lower_outer_parallel(%A: memref<?x?x?x?xf32>, %B: memref<?x?x?xf32>) { |
46 linalg.generic #trait %A, %B { | 45 linalg.generic #trait %A, %B { |
47 ^bb0(%a: f32, %b: f32): | 46 ^bb0(%a: f32, %b: f32): |
48 linalg.yield %a: f32 | 47 linalg.yield %a: f32 |
49 } : memref<2x4xf32>, memref<2xf32> | 48 } : memref<?x?x?x?xf32>, memref<?x?x?xf32> |
50 return | 49 return |
51 } | 50 } |
52 // CHECK-LABEL: @do_not_lower_reduce | 51 // CHECK-LABEL: @lower_outer_parallel |
53 // CHECK: linalg.generic | 52 // CHECK-DAG: %[[C0:.*]] = constant 0 |
53 // CHECK-DAG: %[[C1:.*]] = constant 1 | |
54 // CHECK-DAG: %[[D0:.*]] = dim %{{.*}}, 0 | |
55 // CHECK-DAG: %[[D1:.*]] = dim %{{.*}}, 1 | |
56 // CHECK-DAG: %[[D2:.*]] = dim %{{.*}}, 2 | |
57 // CHECK-DAG: %[[D3:.*]] = dim %{{.*}}, 3 | |
58 // CHECK: scf.parallel (%[[IV0:.*]], %[[IV1:.*]]) = (%[[C0]], %[[C0]]) to (%[[D0]], %[[D1]]) step (%[[C1]], %[[C1]]) | |
59 // CHECK: scf.for %[[IV2:.*]] = %[[C0]] to %[[D2]] step %[[C1]] | |
60 // CHECK: scf.for %[[IV3:.*]] = %[[C0]] to %[[D3]] step %[[C1]] | |
61 // CHECK: load %{{.*}}[%[[IV0]], %[[IV1]], %[[IV2]], %[[IV3]]] | |
62 // CHECK: store %{{.*}}, %{{.*}}[%[[IV0]], %[[IV1]], %[[IV3]]] |