xref: /llvm-project/flang/test/Transforms/omp-function-filtering.mlir (revision 8701b178e06bde5a063407605c44bbbbf9619134)
1// RUN: fir-opt -split-input-file --omp-function-filtering %s | FileCheck %s
2
3// CHECK: func.func @any
4// CHECK: return
5// CHECK: func.func @nohost
6// CHECK: return
7// CHECK-NOT: func.func {{.*}}}} @host
8// CHECK-NOT: func.func {{.*}}}} @none
9// CHECK: func.func @nohost_target
10// CHECK: return
11// CHECK: func.func @host_target
12// CHECK: return
13// CHECK: func.func @none_target
14// CHECK: return
15// CHECK: func.func @host_target_call
16// CHECK-NOT: call @none_target
17// CHECK: %[[UNDEF:.*]] = fir.undefined i32
18// CHECK: return %[[UNDEF]] : i32
19module attributes {omp.is_target_device = true} {
20  func.func @any() -> ()
21      attributes {
22        omp.declare_target =
23          #omp.declaretarget<device_type = (any), capture_clause = (to)>
24      } {
25    func.return
26  }
27  func.func @nohost() -> ()
28      attributes {
29        omp.declare_target =
30          #omp.declaretarget<device_type = (nohost), capture_clause = (to)>
31      } {
32    func.return
33  }
34  func.func @host() -> ()
35      attributes {
36        omp.declare_target =
37          #omp.declaretarget<device_type = (host), capture_clause = (to)>
38      } {
39    func.return
40  }
41  func.func @none() -> () {
42    func.return
43  }
44  func.func @nohost_target() -> ()
45      attributes {
46        omp.declare_target =
47          #omp.declaretarget<device_type = (nohost), capture_clause = (to)>
48      } {
49    omp.target {}
50    func.return
51  }
52  func.func @host_target() -> ()
53      attributes {
54        omp.declare_target =
55          #omp.declaretarget<device_type = (host), capture_clause = (to)>
56      } {
57    omp.target {}
58    func.return
59  }
60  func.func @none_target() -> i32 {
61    omp.target {}
62    %0 = arith.constant 25 : i32
63    func.return %0 : i32
64  }
65  func.func @host_target_call() -> i32
66      attributes {
67        omp.declare_target =
68          #omp.declaretarget<device_type = (host), capture_clause = (to)>
69      } {
70    omp.target {}
71    %0 = call @none_target() : () -> i32
72    func.return %0 : i32
73  }
74}
75
76// -----
77
78// CHECK: func.func @any
79// CHECK: return
80// CHECK: func.func @nohost
81// CHECK: return
82// CHECK: func.func @host
83// CHECK: return
84// CHECK: func.func @none
85// CHECK: return
86// CHECK: func.func @nohost_target
87// CHECK: return
88// CHECK: func.func @host_target
89// CHECK: return
90// CHECK: func.func @none_target
91// CHECK: return
92module attributes {omp.is_target_device = false} {
93  func.func @any() -> ()
94      attributes {
95        omp.declare_target =
96          #omp.declaretarget<device_type = (any), capture_clause = (to)>
97      } {
98    func.return
99  }
100  func.func @nohost() -> ()
101      attributes {
102          omp.declare_target =
103            #omp.declaretarget<device_type = (nohost), capture_clause = (to)>
104      } {
105    func.return
106  }
107  func.func @host() -> ()
108      attributes {
109        omp.declare_target =
110          #omp.declaretarget<device_type = (host), capture_clause = (to)>
111      } {
112    func.return
113  }
114  func.func @none() -> () {
115    func.return
116  }
117  func.func @nohost_target() -> ()
118      attributes {
119        omp.declare_target =
120          #omp.declaretarget<device_type = (nohost), capture_clause = (to)>
121      } {
122    omp.target {}
123    func.return
124  }
125  func.func @host_target() -> ()
126      attributes {
127        omp.declare_target =
128          #omp.declaretarget<device_type = (host), capture_clause = (to)>
129      } {
130    omp.target {}
131    func.return
132  }
133  func.func @none_target() -> () {
134    omp.target {}
135    func.return
136  }
137}
138