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]]]