1// RUN: mlir-opt -convert-scf-to-openmp %s | FileCheck %s
2
3// CHECK-LABEL: @parallel
4func @parallel(%arg0: index, %arg1: index, %arg2: index,
5          %arg3: index, %arg4: index, %arg5: index) {
6  // CHECK: omp.parallel {
7  // CHECK:  "omp.wsloop"({{.*}}) ( {
8  scf.parallel (%i, %j) = (%arg0, %arg1) to (%arg2, %arg3) step (%arg4, %arg5) {
9    // CHECK:   test.payload
10    "test.payload"(%i, %j) : (index, index) -> ()
11    // CHECK:   omp.yield
12    // CHECK: }
13  }
14  // CHECK:   omp.terminator
15  // CHECK: }
16  return
17}
18
19// CHECK-LABEL: @nested_loops
20func @nested_loops(%arg0: index, %arg1: index, %arg2: index,
21                   %arg3: index, %arg4: index, %arg5: index) {
22  // CHECK: omp.parallel {
23  // CHECK:  "omp.wsloop"({{.*}}) ( {
24  // CHECK-NOT: omp.parallel
25  scf.parallel (%i) = (%arg0) to (%arg2) step (%arg4) {
26    // CHECK:   "omp.wsloop"({{.*}}) ( {
27    scf.parallel (%j) = (%arg1) to (%arg3) step (%arg5) {
28      // CHECK:   test.payload
29      "test.payload"(%i, %j) : (index, index) -> ()
30      // CHECK:   omp.yield
31      // CHECK: }
32    }
33    // CHECK:   omp.yield
34    // CHECK: }
35  }
36  // CHECK:   omp.terminator
37  // CHECK: }
38  return
39}
40
41func @adjacent_loops(%arg0: index, %arg1: index, %arg2: index,
42                     %arg3: index, %arg4: index, %arg5: index) {
43  // CHECK: omp.parallel {
44  // CHECK:  "omp.wsloop"({{.*}}) ( {
45  scf.parallel (%i) = (%arg0) to (%arg2) step (%arg4) {
46    // CHECK:   test.payload1
47    "test.payload1"(%i) : (index) -> ()
48    // CHECK:   omp.yield
49    // CHECK: }
50  }
51  // CHECK:   omp.terminator
52  // CHECK: }
53
54  // CHECK: omp.parallel {
55  // CHECK:  "omp.wsloop"({{.*}}) ( {
56  scf.parallel (%j) = (%arg1) to (%arg3) step (%arg5) {
57    // CHECK:   test.payload2
58    "test.payload2"(%j) : (index) -> ()
59    // CHECK:   omp.yield
60    // CHECK: }
61  }
62  // CHECK:   omp.terminator
63  // CHECK: }
64  return
65}
66