@@ -70,11 +70,131 @@ define void @pos_empty_6() {
70
70
call i32 @llvm.nvvm.barrier0.popc (i32 0 )
71
71
ret void
72
72
}
73
- define void @neg_empty_7 () {
74
- ; CHECK-LABEL: define {{[^@]+}}@neg_empty_7() {
73
+ define void @pos_empty_7a () {
74
+ ; CHECK-LABEL: define {{[^@]+}}@pos_empty_7a() {
75
+ ; CHECK-NEXT: call void @unknown()
76
+ ; CHECK-NEXT: ret void
77
+ ;
78
+ call void @llvm.amdgcn.s.barrier ()
79
+ call void @unknown ()
80
+ ret void
81
+ }
82
+ ; FIXME: We should remove the barrier.
83
+ define void @pos_empty_7b () {
84
+ ; CHECK-LABEL: define {{[^@]+}}@pos_empty_7b() {
85
+ ; CHECK-NEXT: call void @unknown() #[[ATTR4:[0-9]+]]
86
+ ; CHECK-NEXT: call void @llvm.amdgcn.s.barrier()
87
+ ; CHECK-NEXT: call void @unknown()
88
+ ; CHECK-NEXT: ret void
89
+ ;
90
+ call void @unknown () nosync readnone
91
+ call void @llvm.amdgcn.s.barrier ()
92
+ call void @unknown ()
93
+ ret void
94
+ }
95
+ define void @neg_empty_8 () {
96
+ ; CHECK-LABEL: define {{[^@]+}}@neg_empty_8() {
97
+ ; CHECK-NEXT: call void @unknown()
75
98
; CHECK-NEXT: call void @llvm.amdgcn.s.barrier()
76
99
; CHECK-NEXT: ret void
77
100
;
101
+ call void @unknown ()
102
+ call void @llvm.amdgcn.s.barrier ()
103
+ ret void
104
+ }
105
+ define void @neg_empty_9 (i1 %c ) {
106
+ ; CHECK-LABEL: define {{[^@]+}}@neg_empty_9
107
+ ; CHECK-SAME: (i1 [[C:%.*]]) {
108
+ ; CHECK-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
109
+ ; CHECK: t:
110
+ ; CHECK-NEXT: call void @llvm.amdgcn.s.barrier()
111
+ ; CHECK-NEXT: br label [[M:%.*]]
112
+ ; CHECK: f:
113
+ ; CHECK-NEXT: call void @llvm.amdgcn.s.barrier()
114
+ ; CHECK-NEXT: br label [[M]]
115
+ ; CHECK: m:
116
+ ; CHECK-NEXT: call void @llvm.amdgcn.s.barrier()
117
+ ; CHECK-NEXT: ret void
118
+ ;
119
+ br i1 %c , label %t , label %f
120
+ t:
121
+ call void @llvm.amdgcn.s.barrier ()
122
+ br label %m
123
+ f:
124
+ call void @llvm.amdgcn.s.barrier ()
125
+ br label %m
126
+ m:
127
+ call void @llvm.amdgcn.s.barrier ()
128
+ ret void
129
+ }
130
+ ; FIXME: We should remove the barrier
131
+ define void @pos_empty_10 () {
132
+ ; CHECK-LABEL: define {{[^@]+}}@pos_empty_10() {
133
+ ; CHECK-NEXT: br label [[M:%.*]]
134
+ ; CHECK: m:
135
+ ; CHECK-NEXT: call void @llvm.amdgcn.s.barrier()
136
+ ; CHECK-NEXT: ret void
137
+ ;
138
+ br label %m
139
+ m:
140
+ call void @llvm.amdgcn.s.barrier ()
141
+ ret void
142
+ }
143
+ define void @pos_empty_11 () {
144
+ ; CHECK-LABEL: define {{[^@]+}}@pos_empty_11() {
145
+ ; CHECK-NEXT: br label [[M:%.*]]
146
+ ; CHECK: m:
147
+ ; CHECK-NEXT: ret void
148
+ ;
149
+ br label %m
150
+ m:
151
+ call void @aligned_barrier ()
152
+ call void @llvm.amdgcn.s.barrier ()
153
+ ret void
154
+ }
155
+ define void @empty () {
156
+ ; CHECK-LABEL: define {{[^@]+}}@empty() {
157
+ ; CHECK-NEXT: ret void
158
+ ;
159
+ ret void
160
+ }
161
+ ; FIXME: We should remove the barrier in the end but not the first one.
162
+ define void @neg_empty_12 (i1 %c ) {
163
+ ; MODULE-LABEL: define {{[^@]+}}@neg_empty_12
164
+ ; MODULE-SAME: (i1 [[C:%.*]]) {
165
+ ; MODULE-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
166
+ ; MODULE: t:
167
+ ; MODULE-NEXT: call void @llvm.amdgcn.s.barrier()
168
+ ; MODULE-NEXT: br label [[M:%.*]]
169
+ ; MODULE: f:
170
+ ; MODULE-NEXT: br label [[M]]
171
+ ; MODULE: m:
172
+ ; MODULE-NEXT: call void @llvm.amdgcn.s.barrier()
173
+ ; MODULE-NEXT: ret void
174
+ ;
175
+ ; CGSCC-LABEL: define {{[^@]+}}@neg_empty_12
176
+ ; CGSCC-SAME: (i1 [[C:%.*]]) {
177
+ ; CGSCC-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
178
+ ; CGSCC: t:
179
+ ; CGSCC-NEXT: call void @empty()
180
+ ; CGSCC-NEXT: call void @llvm.amdgcn.s.barrier()
181
+ ; CGSCC-NEXT: br label [[M:%.*]]
182
+ ; CGSCC: f:
183
+ ; CGSCC-NEXT: call void @empty()
184
+ ; CGSCC-NEXT: br label [[M]]
185
+ ; CGSCC: m:
186
+ ; CGSCC-NEXT: call void @llvm.amdgcn.s.barrier()
187
+ ; CGSCC-NEXT: ret void
188
+ ;
189
+ br i1 %c , label %t , label %f
190
+ t:
191
+ call void @empty ()
192
+ call void @llvm.amdgcn.s.barrier ()
193
+ br label %m
194
+ f:
195
+ call void @empty ()
196
+ br label %m
197
+ m:
78
198
call void @llvm.amdgcn.s.barrier ()
79
199
ret void
80
200
}
@@ -214,7 +334,6 @@ define void @neg_mem() {
214
334
215
335
define void @pos_multiple () {
216
336
; CHECK-LABEL: define {{[^@]+}}@pos_multiple() {
217
- ; CHECK-NEXT: call void @llvm.amdgcn.s.barrier()
218
337
; CHECK-NEXT: ret void
219
338
;
220
339
call void @llvm.nvvm.barrier0 ()
@@ -846,15 +965,21 @@ m3:
846
965
}
847
966
848
967
!llvm.module.flags = !{!16 ,!15 }
849
- !nvvm.annotations = !{!0 ,!1 ,!2 ,!3 ,!4 ,!5 ,!6 ,!7 ,!8 ,!9 ,!10 ,!11 ,!12 ,!13 ,!14 }
968
+ !nvvm.annotations = !{!0 ,!1 ,!2 ,!3 ,!4 ,!5 ,!6 ,!7 ,!8 ,!9 ,!10 ,!11 ,!12 ,!13 ,!14 , !17 , !18 , !19 , !20 , !21 , !22 }
850
969
851
970
!0 = !{void ()* @pos_empty_1 , !"kernel" , i32 1 }
852
971
!1 = !{void ()* @pos_empty_2 , !"kernel" , i32 1 }
853
972
!2 = !{void ()* @pos_empty_3 , !"kernel" , i32 1 }
854
973
!3 = !{void ()* @pos_empty_4 , !"kernel" , i32 1 }
855
974
!4 = !{void ()* @pos_empty_5 , !"kernel" , i32 1 }
856
975
!5 = !{void ()* @pos_empty_6 , !"kernel" , i32 1 }
857
- !6 = !{void ()* @neg_empty_7 , !"kernel" , i32 1 }
976
+ !17 = !{void ()* @pos_empty_7a , !"kernel" , i32 1 }
977
+ !18 = !{void ()* @pos_empty_7b , !"kernel" , i32 1 }
978
+ !6 = !{void ()* @neg_empty_8 , !"kernel" , i32 1 }
979
+ !19 = !{void (i1 )* @neg_empty_9 , !"kernel" , i32 1 }
980
+ !20 = !{void ()* @pos_empty_10 , !"kernel" , i32 1 }
981
+ !21 = !{void ()* @pos_empty_11 , !"kernel" , i32 1 }
982
+ !22 = !{void (i1 )* @neg_empty_12 , !"kernel" , i32 1 }
858
983
!7 = !{void ()* @pos_constant_loads , !"kernel" , i32 1 }
859
984
!8 = !{void ()* @neg_loads , !"kernel" , i32 1 }
860
985
!9 = !{void ()* @pos_priv_mem , !"kernel" , i32 1 }
870
995
; CHECK: attributes #[[ATTR1:[0-9]+]] = { convergent nocallback nounwind }
871
996
; CHECK: attributes #[[ATTR2:[0-9]+]] = { convergent nocallback nofree nounwind willreturn }
872
997
; CHECK: attributes #[[ATTR3:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
998
+ ; CHECK: attributes #[[ATTR4]] = { nosync memory(none) }
873
999
;.
874
1000
; CHECK: [[META0:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}
875
1001
; CHECK: [[META1:![0-9]+]] = !{i32 7, !"openmp", i32 50}
879
1005
; CHECK: [[META5:![0-9]+]] = !{ptr @pos_empty_4, !"kernel", i32 1}
880
1006
; CHECK: [[META6:![0-9]+]] = !{ptr @pos_empty_5, !"kernel", i32 1}
881
1007
; CHECK: [[META7:![0-9]+]] = !{ptr @pos_empty_6, !"kernel", i32 1}
882
- ; CHECK: [[META8:![0-9]+]] = !{ptr @neg_empty_7 , !"kernel", i32 1}
1008
+ ; CHECK: [[META8:![0-9]+]] = !{ptr @neg_empty_8 , !"kernel", i32 1}
883
1009
; CHECK: [[META9:![0-9]+]] = !{ptr @pos_constant_loads, !"kernel", i32 1}
884
1010
; CHECK: [[META10:![0-9]+]] = !{ptr @neg_loads, !"kernel", i32 1}
885
1011
; CHECK: [[META11:![0-9]+]] = !{ptr @pos_priv_mem, !"kernel", i32 1}
@@ -888,4 +1014,10 @@ m3:
888
1014
; CHECK: [[META14:![0-9]+]] = !{ptr @multiple_blocks_kernel_1, !"kernel", i32 1}
889
1015
; CHECK: [[META15:![0-9]+]] = !{ptr @multiple_blocks_kernel_2, !"kernel", i32 1}
890
1016
; CHECK: [[META16:![0-9]+]] = !{ptr @multiple_blocks_functions_kernel_effects_0, !"kernel", i32 1}
1017
+ ; CHECK: [[META17:![0-9]+]] = !{ptr @pos_empty_7a, !"kernel", i32 1}
1018
+ ; CHECK: [[META18:![0-9]+]] = !{ptr @pos_empty_7b, !"kernel", i32 1}
1019
+ ; CHECK: [[META19:![0-9]+]] = !{ptr @neg_empty_9, !"kernel", i32 1}
1020
+ ; CHECK: [[META20:![0-9]+]] = !{ptr @pos_empty_10, !"kernel", i32 1}
1021
+ ; CHECK: [[META21:![0-9]+]] = !{ptr @pos_empty_11, !"kernel", i32 1}
1022
+ ; CHECK: [[META22:![0-9]+]] = !{ptr @neg_empty_12, !"kernel", i32 1}
891
1023
;.
0 commit comments