@@ -1220,3 +1220,93 @@ bb2: ; preds = %bb2, %bb
1220
1220
bb7: ; preds = %bb2
1221
1221
ret void
1222
1222
}
1223
+
1224
+ define signext i32 @hasAllNBitUsers_extu (i64 %arg1 , i64 %arg2 , i64 %arg3 ) {
1225
+ ; RV64I-LABEL: hasAllNBitUsers_extu:
1226
+ ; RV64I: # %bb.0: # %entry
1227
+ ; RV64I-NEXT: addi a2, a2, -1
1228
+ ; RV64I-NEXT: li a3, 256
1229
+ ; RV64I-NEXT: .LBB38_1: # %bb2
1230
+ ; RV64I-NEXT: # =>This Inner Loop Header: Depth=1
1231
+ ; RV64I-NEXT: slli a0, a0, 47
1232
+ ; RV64I-NEXT: srli a0, a0, 62
1233
+ ; RV64I-NEXT: addi a2, a2, 1
1234
+ ; RV64I-NEXT: addw a0, a0, a1
1235
+ ; RV64I-NEXT: bltu a2, a3, .LBB38_1
1236
+ ; RV64I-NEXT: # %bb.2: # %bb7
1237
+ ; RV64I-NEXT: ret
1238
+ ;
1239
+ ; RV64XTHEADBB-LABEL: hasAllNBitUsers_extu:
1240
+ ; RV64XTHEADBB: # %bb.0: # %entry
1241
+ ; RV64XTHEADBB-NEXT: addi a2, a2, -1
1242
+ ; RV64XTHEADBB-NEXT: li a3, 256
1243
+ ; RV64XTHEADBB-NEXT: .LBB38_1: # %bb2
1244
+ ; RV64XTHEADBB-NEXT: # =>This Inner Loop Header: Depth=1
1245
+ ; RV64XTHEADBB-NEXT: th.extu a0, a0, 16, 15
1246
+ ; RV64XTHEADBB-NEXT: addi a2, a2, 1
1247
+ ; RV64XTHEADBB-NEXT: addw a0, a0, a1
1248
+ ; RV64XTHEADBB-NEXT: bltu a2, a3, .LBB38_1
1249
+ ; RV64XTHEADBB-NEXT: # %bb.2: # %bb7
1250
+ ; RV64XTHEADBB-NEXT: ret
1251
+ entry:
1252
+ br label %bb2
1253
+
1254
+ bb2: ; preds = %bb2, %entry
1255
+ %i1 = phi i64 [ %arg1 , %entry ], [ %i5 , %bb2 ]
1256
+ %i2 = phi i64 [ %arg3 , %entry ], [ %i3 , %bb2 ]
1257
+ %i3 = add i64 %i2 , 1
1258
+ %i4 = lshr i64 %i1 , 15
1259
+ %i4b = and i64 %i4 , 3
1260
+ %i5 = add i64 %i4b , %arg2
1261
+ %i6 = icmp ugt i64 %i2 , 255
1262
+ br i1 %i6 , label %bb7 , label %bb2
1263
+
1264
+ bb7: ; preds = %bb2
1265
+ %i7 = trunc i64 %i5 to i32
1266
+ ret i32 %i7
1267
+ }
1268
+
1269
+ define signext i32 @hasAllNBitUsers_ext (i64 %arg1 , i64 %arg2 , i64 %arg3 ) {
1270
+ ; RV64I-LABEL: hasAllNBitUsers_ext:
1271
+ ; RV64I: # %bb.0: # %entry
1272
+ ; RV64I-NEXT: addi a2, a2, -1
1273
+ ; RV64I-NEXT: li a3, 256
1274
+ ; RV64I-NEXT: .LBB39_1: # %bb2
1275
+ ; RV64I-NEXT: # =>This Inner Loop Header: Depth=1
1276
+ ; RV64I-NEXT: slli a0, a0, 47
1277
+ ; RV64I-NEXT: srli a0, a0, 62
1278
+ ; RV64I-NEXT: addi a2, a2, 1
1279
+ ; RV64I-NEXT: addw a0, a0, a1
1280
+ ; RV64I-NEXT: bltu a2, a3, .LBB39_1
1281
+ ; RV64I-NEXT: # %bb.2: # %bb7
1282
+ ; RV64I-NEXT: ret
1283
+ ;
1284
+ ; RV64XTHEADBB-LABEL: hasAllNBitUsers_ext:
1285
+ ; RV64XTHEADBB: # %bb.0: # %entry
1286
+ ; RV64XTHEADBB-NEXT: addi a2, a2, -1
1287
+ ; RV64XTHEADBB-NEXT: li a3, 256
1288
+ ; RV64XTHEADBB-NEXT: .LBB39_1: # %bb2
1289
+ ; RV64XTHEADBB-NEXT: # =>This Inner Loop Header: Depth=1
1290
+ ; RV64XTHEADBB-NEXT: th.extu a0, a0, 16, 15
1291
+ ; RV64XTHEADBB-NEXT: addi a2, a2, 1
1292
+ ; RV64XTHEADBB-NEXT: addw a0, a0, a1
1293
+ ; RV64XTHEADBB-NEXT: bltu a2, a3, .LBB39_1
1294
+ ; RV64XTHEADBB-NEXT: # %bb.2: # %bb7
1295
+ ; RV64XTHEADBB-NEXT: ret
1296
+ entry:
1297
+ br label %bb2
1298
+
1299
+ bb2: ; preds = %bb2, %entry
1300
+ %i1 = phi i64 [ %arg1 , %entry ], [ %i5 , %bb2 ]
1301
+ %i2 = phi i64 [ %arg3 , %entry ], [ %i3 , %bb2 ]
1302
+ %i3 = add i64 %i2 , 1
1303
+ %i4 = ashr i64 %i1 , 15
1304
+ %i4b = and i64 %i4 , 3
1305
+ %i5 = add i64 %i4b , %arg2
1306
+ %i6 = icmp ugt i64 %i2 , 255
1307
+ br i1 %i6 , label %bb7 , label %bb2
1308
+
1309
+ bb7: ; preds = %bb2
1310
+ %i7 = trunc i64 %i5 to i32
1311
+ ret i32 %i7
1312
+ }
0 commit comments