xref: /llvm-project/llvm/test/Transforms/OpenMP/heap-to-shared-missing-declarations.ll (revision 907c7eb311077c5da434bf67858b1173a351d800)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals
2; REQUIRES: amdgpu-registered-target
3; RUN: opt -mtriple=amdgcn-amd-amdhsa -S -passes=openmp-opt < %s | FileCheck %s
4
5define internal void @outlined0() {
6; CHECK: Function Attrs: nounwind
7; CHECK-LABEL: define {{[^@]+}}@outlined0
8; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
9; CHECK-NEXT:  bb:
10; CHECK-NEXT:    call void @func() #[[ATTR1:[0-9]+]]
11; CHECK-NEXT:    [[I:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block() #[[ATTR0]]
12; CHECK-NEXT:    ret void
13;
14bb:
15  call void @func()
16  %i = call i32 @__kmpc_get_hardware_num_threads_in_block()
17  ret void
18}
19
20define internal void @func() {
21; CHECK: Function Attrs: nosync nounwind
22; CHECK-LABEL: define {{[^@]+}}@func
23; CHECK-SAME: () #[[ATTR1]] {
24; CHECK-NEXT:  bb:
25; CHECK-NEXT:    [[I:%.*]] = load ptr, ptr addrspace(5) null, align 4294967296
26; CHECK-NEXT:    store i64 0, ptr [[I]], align 8
27; CHECK-NEXT:    ret void
28;
29bb:
30  %i = load ptr, ptr addrspacecast (ptr addrspace(5) null to ptr), align 4294967296
31  store i64 0, ptr %i, align 8
32  ret void
33}
34
35define internal void @outlined1() {
36; CHECK: Function Attrs: nosync nounwind
37; CHECK-LABEL: define {{[^@]+}}@outlined1
38; CHECK-SAME: () #[[ATTR1]] {
39; CHECK-NEXT:  bb:
40; CHECK-NEXT:    br label [[BB2:%.*]]
41; CHECK:       common.ret:
42; CHECK-NEXT:    ret void
43; CHECK:       bb1:
44; CHECK-NEXT:    unreachable
45; CHECK:       bb2:
46; CHECK-NEXT:    call void @__kmpc_free_shared(ptr null, i64 0) #[[ATTR0]]
47; CHECK-NEXT:    br label [[COMMON_RET:%.*]]
48;
49bb:
50  %i = icmp sle i32 1, 0
51  br i1 %i, label %bb1, label %bb2
52
53common.ret:                                       ; preds = %bb2, %bb1
54  ret void
55
56bb1:                                              ; preds = %bb
57  call void @func()
58  br label %common.ret
59
60bb2:                                              ; preds = %bb
61  call void @__kmpc_free_shared(ptr null, i64 0)
62  br label %common.ret
63}
64
65define void @user() {
66; CHECK-LABEL: define {{[^@]+}}@user() {
67; CHECK-NEXT:    call void @outlined0() #[[ATTR0]]
68; CHECK-NEXT:    call void @outlined1() #[[ATTR1]]
69; CHECK-NEXT:    ret void
70;
71  call void @outlined0()
72  call void @outlined1()
73  ret void
74}
75
76declare i32 @__kmpc_get_hardware_num_threads_in_block()
77declare void @__kmpc_free_shared(ptr, i64)
78
79!llvm.module.flags = !{!0, !1}
80
81!0 = !{i32 7, !"openmp", i32 50}
82!1 = !{i32 7, !"openmp-device", i32 50}
83;.
84; CHECK: attributes #[[ATTR0]] = { nounwind }
85; CHECK: attributes #[[ATTR1]] = { nosync nounwind }
86;.
87; CHECK: [[META0:![0-9]+]] = !{i32 7, !"openmp", i32 50}
88; CHECK: [[META1:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}
89;.
90