@@ -1220,3 +1220,93 @@ bb2: ; preds = %bb2, %bb
12201220bb7: ; preds = %bb2
12211221 ret void
12221222}
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