[clang-tidy][NFC]remove deps of clang in clang tidy test (#116588)
[llvm-project.git] / mlir / test / Dialect / OpenMP / canonicalize.mlir
blobde6c931ecc5fd927dad587b8feccb13f606dbf96
1 // RUN: mlir-opt %s -canonicalize="test-convergence" -split-input-file | FileCheck %s
3 func.func @update_no_op(%x : memref<i32>) {
4   omp.atomic.update %x : memref<i32> {
5   ^bb0(%xval : i32):
6     omp.yield(%xval : i32)
7   }
8   return
11 // CHECK-LABEL: func.func @update_no_op
12 // CHECK-NOT: omp.atomic.update
14 // -----
16 func.func @update_write_op(%x : memref<i32>, %value: i32) {
17   omp.atomic.update %x : memref<i32> {
18   ^bb0(%xval : i32):
19     omp.yield(%value : i32)
20   }
21   return
24 // CHECK-LABEL: func.func @update_write_op
25 // CHECK-SAME:            (%[[X:.+]]: memref<i32>, %[[VALUE:.+]]: i32)
26 // CHECK: omp.atomic.write %[[X]] = %[[VALUE]] : memref<i32>, i32
27 // CHECK-NOT: omp.atomic.update
29 // -----
31 func.func @update_normal(%x : memref<i32>, %value: i32) {
32   omp.atomic.update %x : memref<i32> {
33   ^bb0(%xval : i32):
34     %newval = arith.addi %xval, %value : i32
35     omp.yield(%newval : i32)
36   }
37   return
40 // CHECK-LABEL: func.func @update_normal
41 // CHECK: omp.atomic.update
42 // CHECK: arith.addi
43 // CHECK: omp.yield
45 // -----
47 func.func @update_unnecessary_computations(%x: memref<i32>) {
48   %c0 = arith.constant 0 : i32
49   omp.atomic.update %x : memref<i32> {
50   ^bb0(%xval: i32):
51     %newval = arith.addi %xval, %c0 : i32
52     omp.yield(%newval: i32)
53   }
54   return
57 // CHECK-LABEL: func.func @update_unnecessary_computations
58 // CHECK-NOT: omp.atomic.update
60 // -----
62 func.func @update_unnecessary_computations(%x: memref<i32>) {
63   %c0 = arith.constant 0 : i32
64   omp.atomic.update %x : memref<i32> {
65   ^bb0(%xval: i32):
66     %newval = arith.muli %xval, %c0 : i32
67     omp.yield(%newval: i32)
68   }
69   return
72 // CHECK-LABEL: func.func @update_unnecessary_computations
73 // CHECK-NOT: omp.atomic.update
74 // CHECK: omp.atomic.write
76 // -----
78 // CHECK-LABEL: func.func @parallel_empty
79 func.func @parallel_empty() {
80   omp.parallel {}
81   return
84 // CHECK-NOT: omp.parallel
86 // -----
88 // CHECK-LABEL: func.func @parallel_only_terminator
89 func.func @parallel_only_terminator() {
90   omp.parallel {
91     omp.terminator
92   }
93   return
96 // CHECK-NOT: omp.parallel
97 // CHECK-NOT: omp.terminator
99 // -----
101 // CHECK-LABEL: func.func @parallel_no_side_effects
102 func.func @parallel_no_side_effects(%a: i32, %b: i32) {
103   omp.parallel {
104     %x = arith.addi %a, %b : i32
105     omp.terminator
106   }
107   return
110 // CHECK-NOT: omp.parallel
111 // CHECK-NOT: omp.terminator
113 // -----
115 // CHECK-LABEL: func.func @parallel_maybe_side_effects
116 func.func @parallel_maybe_side_effects(%a: i32, %b: i32) {
117   omp.parallel {
118     func.call @foo() : () -> ()
119     omp.terminator
120   }
121   return
124 func.func private @foo() -> ()
126 // CHECK: omp.parallel
127 // CHECK: func.call @foo() : () -> ()
128 // CHECK: omp.terminator
130 // -----
132 func.func @constant_hoisting_target(%x : !llvm.ptr) {
133   omp.target {
134     ^bb0(%arg0: !llvm.ptr):
135     %c1 = arith.constant 10 : i32
136     llvm.store %c1, %arg0 : i32, !llvm.ptr
137     omp.terminator
138   }
139   return
142 // CHECK-LABEL: func.func @constant_hoisting_target
143 // CHECK-NOT: arith.constant
144 // CHECK: omp.target
145 // CHECK: arith.constant