annotate mlir/test/Target/LLVMIR/openmp-llvm-invalid.mlir @ 252:1f2b6ac9f198 llvm-original

LLVM16-1
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 18 Aug 2023 09:04:13 +0900
parents c4bab56944e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
236
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
1 // RUN: mlir-translate -mlir-to-llvmir %s -split-input-file -verify-diagnostics
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
2
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
3 // Checking translation when the update is carried out by using more than one op
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
4 // in the region.
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
5 llvm.func @omp_atomic_update_multiple_step_update(%x: !llvm.ptr<i32>, %expr: i32) {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
6 omp.atomic.update %x : !llvm.ptr<i32> {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
7 ^bb0(%xval: i32):
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
8 %t1 = llvm.mul %xval, %expr : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
9 %t2 = llvm.sdiv %t1, %expr : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
10 %newval = llvm.add %xval, %t2 : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
11 omp.yield(%newval : i32)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
12 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
13 llvm.return
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
14 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
15
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
16 // -----
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
17
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
18 // Checking translation when the captured variable is not used in the inner
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
19 // update operation
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
20 llvm.func @omp_atomic_update_multiple_step_update(%x: !llvm.ptr<i32>, %expr: i32) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
21 // expected-error @+2 {{no atomic update operation with region argument as operand found inside atomic.update region}}
236
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
22 // expected-error @+1 {{LLVM Translation failed for operation: omp.atomic.update}}
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
23 omp.atomic.update %x : !llvm.ptr<i32> {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
24 ^bb0(%xval: i32):
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
25 %newval = llvm.mul %expr, %expr : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
26 omp.yield(%newval : i32)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
27 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
28 llvm.return
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
29 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
30
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
31 // -----
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
33 // Checking translation when the update is carried out by using more than one
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
34 // operations in the atomic capture region.
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
35 llvm.func @omp_atomic_update_multiple_step_update(%x: !llvm.ptr<i32>, %v: !llvm.ptr<i32>, %expr: i32) {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
36 // expected-error @+1 {{LLVM Translation failed for operation: omp.atomic.capture}}
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
37 omp.atomic.capture memory_order(seq_cst) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
38 omp.atomic.read %v = %x : !llvm.ptr<i32>, i32
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
39 // expected-error @+1 {{no atomic update operation with region argument as operand found inside atomic.update region}}
236
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
40 omp.atomic.update %x : !llvm.ptr<i32> {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
41 ^bb0(%xval: i32):
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
42 %newval = llvm.mul %expr, %expr : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
43 omp.yield(%newval : i32)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
44 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
45 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
46 llvm.return
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
47 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
48
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
49 // -----
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
50
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
51 // Checking translation when the captured variable is not used in the inner
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
52 // update operation
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
53 llvm.func @omp_atomic_update_multiple_step_update(%x: !llvm.ptr<i32>, %v: !llvm.ptr<i32>, %expr: i32) {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
54 omp.atomic.capture memory_order(seq_cst) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
55 omp.atomic.read %v = %x : !llvm.ptr<i32>, i32
236
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
56 omp.atomic.update %x : !llvm.ptr<i32> {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
57 ^bb0(%xval: i32):
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
58 %t1 = llvm.mul %xval, %expr : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
59 %t2 = llvm.sdiv %t1, %expr : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
60 %newval = llvm.add %xval, %t2 : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
61 omp.yield(%newval : i32)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
62 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
63 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
64 llvm.return
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
65 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
66
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
67 // -----
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
68
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
69 llvm.func @omp_threadprivate() {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
70 %0 = llvm.mlir.constant(1 : i64) : i64
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
71 %1 = llvm.mlir.constant(1 : i32) : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
72 %2 = llvm.mlir.constant(2 : i32) : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
73 %3 = llvm.mlir.constant(3 : i32) : i32
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
74
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
75 %4 = llvm.alloca %0 x i32 {in_type = i32, name = "a"} : (i64) -> !llvm.ptr<i32>
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
76
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
77 // expected-error @below {{Addressing symbol not found}}
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
78 // expected-error @below {{LLVM Translation failed for operation: omp.threadprivate}}
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
79 %5 = omp.threadprivate %4 : !llvm.ptr<i32> -> !llvm.ptr<i32>
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
80
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
81 llvm.store %1, %5 : !llvm.ptr<i32>
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
82
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
83 omp.parallel {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
84 %6 = omp.threadprivate %4 : !llvm.ptr<i32> -> !llvm.ptr<i32>
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
85 llvm.store %2, %6 : !llvm.ptr<i32>
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
86 omp.terminator
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
87 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
88
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
89 llvm.store %3, %5 : !llvm.ptr<i32>
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
90 llvm.return
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
91 }