@@ -1065,8 +1065,174 @@ define void @caller_barrier2() "kernel" {
1065
1065
ret void
1066
1066
}
1067
1067
1068
+ define void @loop_barrier () "kernel" {
1069
+ ; CHECK-LABEL: define {{[^@]+}}@loop_barrier
1070
+ ; CHECK-SAME: () #[[ATTR4]] {
1071
+ ; CHECK-NEXT: entry:
1072
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
1073
+ ; CHECK: loop:
1074
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
1075
+ ; CHECK-NEXT: call void @unknown()
1076
+ ; CHECK-NEXT: call void @aligned_barrier()
1077
+ ; CHECK-NEXT: [[I_NEXT]] = add nuw nsw i32 [[I]], 1
1078
+ ; CHECK-NEXT: [[COND:%.*]] = icmp ne i32 [[I_NEXT]], 128
1079
+ ; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]
1080
+ ; CHECK: exit:
1081
+ ; CHECK-NEXT: ret void
1082
+ ;
1083
+ entry:
1084
+ br label %loop
1085
+
1086
+ loop:
1087
+ %i = phi i32 [ 0 , %entry ], [ %i.next , %loop ]
1088
+ call void @unknown ()
1089
+ call void @aligned_barrier ()
1090
+ %i.next = add nuw nsw i32 %i , 1
1091
+ %cond = icmp ne i32 %i.next , 128
1092
+ br i1 %cond , label %loop , label %exit
1093
+
1094
+ exit:
1095
+ ret void
1096
+ }
1097
+
1098
+ define void @loop_barrier_end_barriers () "kernel" {
1099
+ ; CHECK-LABEL: define {{[^@]+}}@loop_barrier_end_barriers
1100
+ ; CHECK-SAME: () #[[ATTR4]] {
1101
+ ; CHECK-NEXT: entry:
1102
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
1103
+ ; CHECK: loop:
1104
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
1105
+ ; CHECK-NEXT: call void @unknown()
1106
+ ; CHECK-NEXT: call void @aligned_barrier()
1107
+ ; CHECK-NEXT: [[I_NEXT]] = add nuw nsw i32 [[I]], 1
1108
+ ; CHECK-NEXT: [[COND:%.*]] = icmp ne i32 [[I_NEXT]], 128
1109
+ ; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]
1110
+ ; CHECK: exit:
1111
+ ; CHECK-NEXT: ret void
1112
+ ;
1113
+ entry:
1114
+ br label %loop
1115
+
1116
+ loop:
1117
+ %i = phi i32 [ 0 , %entry ], [ %i.next , %loop ]
1118
+ call void @unknown ()
1119
+ call void @aligned_barrier ()
1120
+ %i.next = add nuw nsw i32 %i , 1
1121
+ %cond = icmp ne i32 %i.next , 128
1122
+ br i1 %cond , label %loop , label %exit
1123
+
1124
+ exit:
1125
+ call void @aligned_barrier ()
1126
+ call void @aligned_barrier ()
1127
+ call void @aligned_barrier ()
1128
+ call void @aligned_barrier ()
1129
+ ret void
1130
+ }
1131
+
1132
+ define void @loop_barrier_end_barriers_unknown () "kernel" {
1133
+ ; CHECK-LABEL: define {{[^@]+}}@loop_barrier_end_barriers_unknown
1134
+ ; CHECK-SAME: () #[[ATTR4]] {
1135
+ ; CHECK-NEXT: entry:
1136
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
1137
+ ; CHECK: loop:
1138
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
1139
+ ; CHECK-NEXT: call void @unknown()
1140
+ ; CHECK-NEXT: call void @aligned_barrier()
1141
+ ; CHECK-NEXT: [[I_NEXT]] = add nuw nsw i32 [[I]], 1
1142
+ ; CHECK-NEXT: [[COND:%.*]] = icmp ne i32 [[I_NEXT]], 128
1143
+ ; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]
1144
+ ; CHECK: exit:
1145
+ ; CHECK-NEXT: call void @unknown()
1146
+ ; CHECK-NEXT: ret void
1147
+ ;
1148
+ entry:
1149
+ br label %loop
1150
+
1151
+ loop:
1152
+ %i = phi i32 [ 0 , %entry ], [ %i.next , %loop ]
1153
+ call void @unknown ()
1154
+ call void @aligned_barrier ()
1155
+ %i.next = add nuw nsw i32 %i , 1
1156
+ %cond = icmp ne i32 %i.next , 128
1157
+ br i1 %cond , label %loop , label %exit
1158
+
1159
+ exit:
1160
+ call void @aligned_barrier ()
1161
+ call void @aligned_barrier ()
1162
+ call void @unknown ()
1163
+ call void @aligned_barrier ()
1164
+ call void @aligned_barrier ()
1165
+ ret void
1166
+ }
1167
+
1168
+ define void @loop_barrier_store () "kernel" {
1169
+ ; CHECK-LABEL: define {{[^@]+}}@loop_barrier_store
1170
+ ; CHECK-SAME: () #[[ATTR4]] {
1171
+ ; CHECK-NEXT: entry:
1172
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
1173
+ ; CHECK: loop:
1174
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
1175
+ ; CHECK-NEXT: store i32 [[I]], ptr @G1, align 4
1176
+ ; CHECK-NEXT: call void @aligned_barrier()
1177
+ ; CHECK-NEXT: [[I_NEXT]] = add nuw nsw i32 [[I]], 1
1178
+ ; CHECK-NEXT: [[COND:%.*]] = icmp ne i32 [[I_NEXT]], 128
1179
+ ; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]
1180
+ ; CHECK: exit:
1181
+ ; CHECK-NEXT: ret void
1182
+ ;
1183
+ entry:
1184
+ br label %loop
1185
+
1186
+ loop:
1187
+ %i = phi i32 [ 0 , %entry ], [ %i.next , %loop ]
1188
+ store i32 %i , ptr @G1
1189
+ call void @aligned_barrier ()
1190
+ %i.next = add nuw nsw i32 %i , 1
1191
+ %cond = icmp ne i32 %i.next , 128
1192
+ br i1 %cond , label %loop , label %exit
1193
+
1194
+ exit:
1195
+ ret void
1196
+ }
1197
+
1198
+ define void @loop_barrier_end_barriers_store () "kernel" {
1199
+ ; CHECK-LABEL: define {{[^@]+}}@loop_barrier_end_barriers_store
1200
+ ; CHECK-SAME: () #[[ATTR4]] {
1201
+ ; CHECK-NEXT: entry:
1202
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
1203
+ ; CHECK: loop:
1204
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
1205
+ ; CHECK-NEXT: store i32 [[I]], ptr @G1, align 4
1206
+ ; CHECK-NEXT: call void @aligned_barrier()
1207
+ ; CHECK-NEXT: [[I_NEXT]] = add nuw nsw i32 [[I]], 1
1208
+ ; CHECK-NEXT: [[COND:%.*]] = icmp ne i32 [[I_NEXT]], 128
1209
+ ; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]
1210
+ ; CHECK: exit:
1211
+ ; CHECK-NEXT: store i32 [[I_NEXT]], ptr @G1, align 4
1212
+ ; CHECK-NEXT: ret void
1213
+ ;
1214
+ entry:
1215
+ br label %loop
1216
+
1217
+ loop:
1218
+ %i = phi i32 [ 0 , %entry ], [ %i.next , %loop ]
1219
+ store i32 %i , ptr @G1
1220
+ call void @aligned_barrier ()
1221
+ %i.next = add nuw nsw i32 %i , 1
1222
+ %cond = icmp ne i32 %i.next , 128
1223
+ br i1 %cond , label %loop , label %exit
1224
+
1225
+ exit:
1226
+ call void @aligned_barrier ()
1227
+ call void @aligned_barrier ()
1228
+ store i32 %i.next , ptr @G1
1229
+ call void @aligned_barrier ()
1230
+ call void @aligned_barrier ()
1231
+ ret void
1232
+ }
1233
+
1068
1234
!llvm.module.flags = !{!16 ,!15 }
1069
- !nvvm.annotations = !{!0 ,!1 ,!2 ,!3 ,!4 ,!5 ,!6 ,!7 ,!8 ,!9 ,!10 ,!11 ,!12 ,!13 ,!14 ,!17 ,!18 ,!19 ,!20 ,!21 ,!22 ,!23 ,!24 ,!25 }
1235
+ !nvvm.annotations = !{!0 ,!1 ,!2 ,!3 ,!4 ,!5 ,!6 ,!7 ,!8 ,!9 ,!10 ,!11 ,!12 ,!13 ,!14 ,!17 ,!18 ,!19 ,!20 ,!21 ,!22 ,!23 ,!24 ,!25 , !26 , !27 , !28 , !29 , !30 }
1070
1236
1071
1237
!0 = !{ptr @pos_empty_1 , !"kernel" , i32 1 }
1072
1238
!1 = !{ptr @pos_empty_2 , !"kernel" , i32 1 }
@@ -1079,6 +1245,11 @@ define void @caller_barrier2() "kernel" {
1079
1245
!23 = !{ptr @pos_empty_8 , !"kernel" , i32 1 }
1080
1246
!24 = !{ptr @caller_barrier1 , !"kernel" , i32 1 }
1081
1247
!25 = !{ptr @caller_barrier2 , !"kernel" , i32 1 }
1248
+ !26 = !{ptr @loop_barrier , !"kernel" , i32 1 }
1249
+ !27 = !{ptr @loop_barrier_end_barriers , !"kernel" , i32 1 }
1250
+ !28 = !{ptr @loop_barrier_end_barriers_unknown , !"kernel" , i32 1 }
1251
+ !29 = !{ptr @loop_barrier_store , !"kernel" , i32 1 }
1252
+ !30 = !{ptr @loop_barrier_end_barriers_store , !"kernel" , i32 1 }
1082
1253
!6 = !{ptr @neg_empty_8 , !"kernel" , i32 1 }
1083
1254
!19 = !{ptr @neg_empty_9 , !"kernel" , i32 1 }
1084
1255
!20 = !{ptr @pos_empty_10 , !"kernel" , i32 1 }
@@ -1128,4 +1299,9 @@ define void @caller_barrier2() "kernel" {
1128
1299
; CHECK: [[META23:![0-9]+]] = !{ptr @pos_empty_8, !"kernel", i32 1}
1129
1300
; CHECK: [[META24:![0-9]+]] = !{ptr @caller_barrier1, !"kernel", i32 1}
1130
1301
; CHECK: [[META25:![0-9]+]] = !{ptr @caller_barrier2, !"kernel", i32 1}
1302
+ ; CHECK: [[META26:![0-9]+]] = !{ptr @loop_barrier, !"kernel", i32 1}
1303
+ ; CHECK: [[META27:![0-9]+]] = !{ptr @loop_barrier_end_barriers, !"kernel", i32 1}
1304
+ ; CHECK: [[META28:![0-9]+]] = !{ptr @loop_barrier_end_barriers_unknown, !"kernel", i32 1}
1305
+ ; CHECK: [[META29:![0-9]+]] = !{ptr @loop_barrier_store, !"kernel", i32 1}
1306
+ ; CHECK: [[META30:![0-9]+]] = !{ptr @loop_barrier_end_barriers_store, !"kernel", i32 1}
1131
1307
;.
0 commit comments