annotate llvm/test/Transforms/FunctionAttrs/writeonly.ll @ 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: 223
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
2 ; RUN: opt -passes=function-attrs -S < %s | FileCheck --check-prefixes=COMMON,FNATTRS %s
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
3 ; RUN: opt -passes=attributor-light -S < %s | FileCheck --check-prefixes=COMMON,ATTRIBUTOR %s
150
anatofuz
parents:
diff changeset
4
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
5 define void @nouses-argworn-funrn(ptr writeonly %.aaa) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
6 ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
7 ; FNATTRS-LABEL: define {{[^@]+}}@nouses-argworn-funrn
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
8 ; FNATTRS-SAME: (ptr nocapture readnone [[DOTAAA:%.*]]) #[[ATTR0:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
9 ; FNATTRS-NEXT: nouses-argworn-funrn_entry:
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
10 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
11 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
12 ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
13 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@nouses-argworn-funrn
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
14 ; ATTRIBUTOR-SAME: (ptr nocapture nofree readnone [[DOTAAA:%.*]]) #[[ATTR0:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
15 ; ATTRIBUTOR-NEXT: nouses-argworn-funrn_entry:
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
16 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
17 ;
150
anatofuz
parents:
diff changeset
18 nouses-argworn-funrn_entry:
anatofuz
parents:
diff changeset
19 ret void
anatofuz
parents:
diff changeset
20 }
anatofuz
parents:
diff changeset
21
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
22 define void @nouses-argworn-funro(ptr writeonly %.aaa, ptr %.bbb) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
23 ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
24 ; FNATTRS-LABEL: define {{[^@]+}}@nouses-argworn-funro
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
25 ; FNATTRS-SAME: (ptr nocapture readnone [[DOTAAA:%.*]], ptr nocapture readonly [[DOTBBB:%.*]]) #[[ATTR1:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
26 ; FNATTRS-NEXT: nouses-argworn-funro_entry:
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
27 ; FNATTRS-NEXT: [[VAL:%.*]] = load i32, ptr [[DOTBBB]], align 4
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
28 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
29 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
30 ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
31 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@nouses-argworn-funro
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
32 ; ATTRIBUTOR-SAME: (ptr nocapture nofree readnone [[DOTAAA:%.*]], ptr nocapture nofree nonnull readonly [[DOTBBB:%.*]]) #[[ATTR1:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
33 ; ATTRIBUTOR-NEXT: nouses-argworn-funro_entry:
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
34 ; ATTRIBUTOR-NEXT: [[VAL:%.*]] = load i32, ptr [[DOTBBB]], align 4
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
35 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
36 ;
150
anatofuz
parents:
diff changeset
37 nouses-argworn-funro_entry:
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
38 %val = load i32 , ptr %.bbb
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
39 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
40 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
41
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
42 %_type_of_d-ccc = type <{ ptr, i8, i8, i8, i8 }>
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
43
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
44 @d-ccc = internal global %_type_of_d-ccc <{ ptr null, i8 1, i8 13, i8 0, i8 -127 }>, align 8
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
45
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
46 define void @nouses-argworn-funwo(ptr writeonly %.aaa) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
47 ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write, argmem: none, inaccessiblemem: none)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
48 ; FNATTRS-LABEL: define {{[^@]+}}@nouses-argworn-funwo
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
49 ; FNATTRS-SAME: (ptr nocapture readnone [[DOTAAA:%.*]]) #[[ATTR2:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
50 ; FNATTRS-NEXT: nouses-argworn-funwo_entry:
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
51 ; FNATTRS-NEXT: store i8 0, ptr getelementptr inbounds ([[_TYPE_OF_D_CCC:%.*]], ptr @d-ccc, i32 0, i32 3), align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
52 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
53 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
54 ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
55 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@nouses-argworn-funwo
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
56 ; ATTRIBUTOR-SAME: (ptr nocapture nofree readnone [[DOTAAA:%.*]]) #[[ATTR2:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
57 ; ATTRIBUTOR-NEXT: nouses-argworn-funwo_entry:
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
58 ; ATTRIBUTOR-NEXT: store i8 0, ptr getelementptr inbounds ([[_TYPE_OF_D_CCC:%.*]], ptr @d-ccc, i32 0, i32 3), align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
59 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
60 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
61 nouses-argworn-funwo_entry:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
62 store i8 0, ptr getelementptr inbounds (%_type_of_d-ccc, ptr @d-ccc, i32 0, i32 3)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
63 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
64 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
65
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
66 define void @test_store(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
67 ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
68 ; FNATTRS-LABEL: define {{[^@]+}}@test_store
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
69 ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]]) #[[ATTR3:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
70 ; FNATTRS-NEXT: store i8 0, ptr [[P]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
71 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
72 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
73 ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
74 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_store
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
75 ; ATTRIBUTOR-SAME: (ptr nocapture nofree nonnull writeonly [[P:%.*]]) #[[ATTR3:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
76 ; ATTRIBUTOR-NEXT: store i8 0, ptr [[P]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
77 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
78 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
79 store i8 0, ptr %p
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
80 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
81 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
82
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
83 @G = external global ptr
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
84 define i8 @test_store_capture(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
85 ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(readwrite, argmem: read, inaccessiblemem: none)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
86 ; FNATTRS-LABEL: define {{[^@]+}}@test_store_capture
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
87 ; FNATTRS-SAME: (ptr [[P:%.*]]) #[[ATTR4:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
88 ; FNATTRS-NEXT: store ptr [[P]], ptr @G, align 8
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
89 ; FNATTRS-NEXT: [[P2:%.*]] = load ptr, ptr @G, align 8
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
90 ; FNATTRS-NEXT: [[V:%.*]] = load i8, ptr [[P2]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
91 ; FNATTRS-NEXT: ret i8 [[V]]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
92 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
93 ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
94 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_store_capture
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
95 ; ATTRIBUTOR-SAME: (ptr nofree [[P:%.*]]) #[[ATTR4:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
96 ; ATTRIBUTOR-NEXT: store ptr [[P]], ptr @G, align 8
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
97 ; ATTRIBUTOR-NEXT: [[P2:%.*]] = load ptr, ptr @G, align 8
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
98 ; ATTRIBUTOR-NEXT: [[V:%.*]] = load i8, ptr [[P2]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
99 ; ATTRIBUTOR-NEXT: ret i8 [[V]]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
100 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
101 store ptr %p, ptr @G
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
102 %p2 = load ptr, ptr @G
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
103 %v = load i8, ptr %p2
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
104 ret i8 %v
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
105 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
106
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
107 define void @test_addressing(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
108 ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
109 ; FNATTRS-LABEL: define {{[^@]+}}@test_addressing
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
110 ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]]) #[[ATTR3]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
111 ; FNATTRS-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[P]], i64 8
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
112 ; FNATTRS-NEXT: store i32 0, ptr [[GEP]], align 4
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
113 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
114 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
115 ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
116 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_addressing
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
117 ; ATTRIBUTOR-SAME: (ptr nocapture nofree writeonly [[P:%.*]]) #[[ATTR3]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
118 ; ATTRIBUTOR-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[P]], i64 8
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
119 ; ATTRIBUTOR-NEXT: store i32 0, ptr [[GEP]], align 4
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
120 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
121 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
122 %gep = getelementptr i8, ptr %p, i64 8
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
123 store i32 0, ptr %gep
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
124 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
125 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
126
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
127 define void @test_readwrite(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
128 ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
129 ; FNATTRS-LABEL: define {{[^@]+}}@test_readwrite
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
130 ; FNATTRS-SAME: (ptr nocapture [[P:%.*]]) #[[ATTR5:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
131 ; FNATTRS-NEXT: [[V:%.*]] = load i8, ptr [[P]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
132 ; FNATTRS-NEXT: store i8 [[V]], ptr [[P]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
133 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
134 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
135 ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
136 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_readwrite
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
137 ; ATTRIBUTOR-SAME: (ptr nocapture nofree nonnull [[P:%.*]]) #[[ATTR5:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
138 ; ATTRIBUTOR-NEXT: [[V:%.*]] = load i8, ptr [[P]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
139 ; ATTRIBUTOR-NEXT: store i8 [[V]], ptr [[P]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
140 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
141 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
142 %v = load i8, ptr %p
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
143 store i8 %v, ptr %p
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
144 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
145 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
146
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
147 define void @test_volatile(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
148 ; FNATTRS: Function Attrs: nofree norecurse nounwind memory(argmem: readwrite, inaccessiblemem: readwrite)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
149 ; FNATTRS-LABEL: define {{[^@]+}}@test_volatile
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
150 ; FNATTRS-SAME: (ptr [[P:%.*]]) #[[ATTR6:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
151 ; FNATTRS-NEXT: store volatile i8 0, ptr [[P]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
152 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
153 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
154 ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
155 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_volatile
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
156 ; ATTRIBUTOR-SAME: (ptr nofree [[P:%.*]]) #[[ATTR6:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
157 ; ATTRIBUTOR-NEXT: store volatile i8 0, ptr [[P]], align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
158 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
159 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
160 store volatile i8 0, ptr %p
150
anatofuz
parents:
diff changeset
161 ret void
anatofuz
parents:
diff changeset
162 }
anatofuz
parents:
diff changeset
163
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
164 define void @test_atomicrmw(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
165 ; FNATTRS: Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
166 ; FNATTRS-LABEL: define {{[^@]+}}@test_atomicrmw
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
167 ; FNATTRS-SAME: (ptr nocapture [[P:%.*]]) #[[ATTR7:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
168 ; FNATTRS-NEXT: [[TMP1:%.*]] = atomicrmw add ptr [[P]], i8 0 seq_cst, align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
169 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
170 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
171 ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
172 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_atomicrmw
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
173 ; ATTRIBUTOR-SAME: (ptr nocapture nofree nonnull [[P:%.*]]) #[[ATTR6]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
174 ; ATTRIBUTOR-NEXT: [[TMP1:%.*]] = atomicrmw add ptr [[P]], i8 0 seq_cst, align 1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
175 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
176 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
177 atomicrmw add ptr %p, i8 0 seq_cst
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
178 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
179 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
180
150
anatofuz
parents:
diff changeset
181
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
182 declare void @direct1_callee(ptr %p)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
183
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
184 define void @direct1(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
185 ; COMMON-LABEL: define {{[^@]+}}@direct1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
186 ; COMMON-SAME: (ptr [[P:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
187 ; COMMON-NEXT: call void @direct1_callee(ptr [[P]])
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
188 ; COMMON-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
189 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
190 call void @direct1_callee(ptr %p)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
191 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
192 }
150
anatofuz
parents:
diff changeset
193
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
194 declare void @direct2_callee(ptr %p) writeonly
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
195
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
196 ; writeonly w/o nocapture is not enough
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
197 define void @direct2(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
198 ; FNATTRS: Function Attrs: memory(write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
199 ; FNATTRS-LABEL: define {{[^@]+}}@direct2
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
200 ; FNATTRS-SAME: (ptr [[P:%.*]]) #[[ATTR8:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
201 ; FNATTRS-NEXT: call void @direct2_callee(ptr [[P]])
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
202 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
203 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
204 ; ATTRIBUTOR: Function Attrs: memory(write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
205 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@direct2
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
206 ; ATTRIBUTOR-SAME: (ptr writeonly [[P:%.*]]) #[[ATTR7:[0-9]+]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
207 ; ATTRIBUTOR-NEXT: call void @direct2_callee(ptr [[P]]) #[[ATTR7]]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
208 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
209 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
210 call void @direct2_callee(ptr %p)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
211 ; read back from global, read through pointer...
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
212 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
213 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
214
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
215 define void @direct2b(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
216 ; FNATTRS: Function Attrs: memory(write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
217 ; FNATTRS-LABEL: define {{[^@]+}}@direct2b
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
218 ; FNATTRS-SAME: (ptr nocapture [[P:%.*]]) #[[ATTR8]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
219 ; FNATTRS-NEXT: call void @direct2_callee(ptr nocapture [[P]])
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
220 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
221 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
222 ; ATTRIBUTOR: Function Attrs: memory(write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
223 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@direct2b
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
224 ; ATTRIBUTOR-SAME: (ptr nocapture writeonly [[P:%.*]]) #[[ATTR7]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
225 ; ATTRIBUTOR-NEXT: call void @direct2_callee(ptr nocapture writeonly [[P]]) #[[ATTR7]]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
226 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
227 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
228 call void @direct2_callee(ptr nocapture %p)
150
anatofuz
parents:
diff changeset
229 ret void
anatofuz
parents:
diff changeset
230 }
anatofuz
parents:
diff changeset
231
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
232 declare void @direct3_callee(ptr nocapture writeonly %p)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
233
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
234 define void @direct3(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
235 ; FNATTRS-LABEL: define {{[^@]+}}@direct3
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
236 ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
237 ; FNATTRS-NEXT: call void @direct3_callee(ptr [[P]])
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
238 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
239 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
240 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@direct3
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
241 ; ATTRIBUTOR-SAME: (ptr nocapture writeonly [[P:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
242 ; ATTRIBUTOR-NEXT: call void @direct3_callee(ptr nocapture writeonly [[P]])
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
243 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
244 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
245 call void @direct3_callee(ptr %p)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
246 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
247 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
248
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
249 define void @direct3b(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
250 ; COMMON-LABEL: define {{[^@]+}}@direct3b
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
251 ; COMMON-SAME: (ptr [[P:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
252 ; COMMON-NEXT: call void @direct3_callee(ptr [[P]]) [ "may-read-and-capture"(ptr [[P]]) ]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
253 ; COMMON-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
254 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
255 call void @direct3_callee(ptr %p) ["may-read-and-capture"(ptr %p)]
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
256 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
257 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
258
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
259 define void @direct3c(ptr %p) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
260 ; FNATTRS-LABEL: define {{[^@]+}}@direct3c
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
261 ; FNATTRS-SAME: (ptr nocapture [[P:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
262 ; FNATTRS-NEXT: call void @direct3_callee(ptr [[P]]) [ "may-read"() ]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
263 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
264 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
265 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@direct3c
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
266 ; ATTRIBUTOR-SAME: (ptr nocapture [[P:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
267 ; ATTRIBUTOR-NEXT: call void @direct3_callee(ptr nocapture [[P]]) [ "may-read"() ]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
268 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
269 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
270 call void @direct3_callee(ptr %p) ["may-read"()]
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
271 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
272 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
273
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
274 define void @fptr_test1(ptr %p, ptr %f) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
275 ; FNATTRS-LABEL: define {{[^@]+}}@fptr_test1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
276 ; FNATTRS-SAME: (ptr [[P:%.*]], ptr nocapture readonly [[F:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
277 ; FNATTRS-NEXT: call void [[F]](ptr [[P]])
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
278 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
279 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
280 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@fptr_test1
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
281 ; ATTRIBUTOR-SAME: (ptr [[P:%.*]], ptr nocapture nofree nonnull [[F:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
282 ; ATTRIBUTOR-NEXT: call void [[F]](ptr [[P]])
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
283 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
284 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
285 call void %f(ptr %p)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
286 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
287 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
288
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
289 define void @fptr_test2(ptr %p, ptr %f) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
290 ; FNATTRS-LABEL: define {{[^@]+}}@fptr_test2
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
291 ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]], ptr nocapture readonly [[F:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
292 ; FNATTRS-NEXT: call void [[F]](ptr nocapture writeonly [[P]])
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
293 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
294 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
295 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@fptr_test2
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
296 ; ATTRIBUTOR-SAME: (ptr nocapture [[P:%.*]], ptr nocapture nofree nonnull [[F:%.*]]) {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
297 ; ATTRIBUTOR-NEXT: call void [[F]](ptr nocapture writeonly [[P]])
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
298 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
299 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
300 call void %f(ptr nocapture writeonly %p)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
301 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
302 }
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
303
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
304 define void @fptr_test3(ptr %p, ptr %f) {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
305 ; FNATTRS: Function Attrs: memory(write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
306 ; FNATTRS-LABEL: define {{[^@]+}}@fptr_test3
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
307 ; FNATTRS-SAME: (ptr nocapture [[P:%.*]], ptr nocapture readonly [[F:%.*]]) #[[ATTR8]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
308 ; FNATTRS-NEXT: call void [[F]](ptr nocapture [[P]]) #[[ATTR8]]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
309 ; FNATTRS-NEXT: ret void
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
310 ;
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
311 ; ATTRIBUTOR: Function Attrs: memory(write)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
312 ; ATTRIBUTOR-LABEL: define {{[^@]+}}@fptr_test3
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
313 ; ATTRIBUTOR-SAME: (ptr nocapture writeonly [[P:%.*]], ptr nocapture nofree nonnull writeonly [[F:%.*]]) #[[ATTR7]] {
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
314 ; ATTRIBUTOR-NEXT: call void [[F]](ptr nocapture [[P]]) #[[ATTR7]]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
315 ; ATTRIBUTOR-NEXT: ret void
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
316 ;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
317 call void %f(ptr nocapture %p) writeonly
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
318 ret void
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
319 }