@@ -1220,3 +1220,95 @@ 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: add a0, a0, a1
1248+ ; RV64XTHEADBB-NEXT: bltu a2, a3, .LBB38_1
1249+ ; RV64XTHEADBB-NEXT: # %bb.2: # %bb7
1250+ ; RV64XTHEADBB-NEXT: sext.w a0, a0
1251+ ; RV64XTHEADBB-NEXT: ret
1252+ entry:
1253+ br label %bb2
1254+
1255+ bb2: ; preds = %bb2, %entry
1256+ %i1 = phi i64 [ %arg1 , %entry ], [ %i5 , %bb2 ]
1257+ %i2 = phi i64 [ %arg3 , %entry ], [ %i3 , %bb2 ]
1258+ %i3 = add i64 %i2 , 1
1259+ %i4 = lshr i64 %i1 , 15
1260+ %i4b = and i64 %i4 , 3
1261+ %i5 = add i64 %i4b , %arg2
1262+ %i6 = icmp ugt i64 %i2 , 255
1263+ br i1 %i6 , label %bb7 , label %bb2
1264+
1265+ bb7: ; preds = %bb2
1266+ %i7 = trunc i64 %i5 to i32
1267+ ret i32 %i7
1268+ }
1269+
1270+ define signext i32 @hasAllNBitUsers_ext (i64 %arg1 , i64 %arg2 , i64 %arg3 ) {
1271+ ; RV64I-LABEL: hasAllNBitUsers_ext:
1272+ ; RV64I: # %bb.0: # %entry
1273+ ; RV64I-NEXT: addi a2, a2, -1
1274+ ; RV64I-NEXT: li a3, 256
1275+ ; RV64I-NEXT: .LBB39_1: # %bb2
1276+ ; RV64I-NEXT: # =>This Inner Loop Header: Depth=1
1277+ ; RV64I-NEXT: slli a0, a0, 47
1278+ ; RV64I-NEXT: srli a0, a0, 62
1279+ ; RV64I-NEXT: addi a2, a2, 1
1280+ ; RV64I-NEXT: addw a0, a0, a1
1281+ ; RV64I-NEXT: bltu a2, a3, .LBB39_1
1282+ ; RV64I-NEXT: # %bb.2: # %bb7
1283+ ; RV64I-NEXT: ret
1284+ ;
1285+ ; RV64XTHEADBB-LABEL: hasAllNBitUsers_ext:
1286+ ; RV64XTHEADBB: # %bb.0: # %entry
1287+ ; RV64XTHEADBB-NEXT: addi a2, a2, -1
1288+ ; RV64XTHEADBB-NEXT: li a3, 256
1289+ ; RV64XTHEADBB-NEXT: .LBB39_1: # %bb2
1290+ ; RV64XTHEADBB-NEXT: # =>This Inner Loop Header: Depth=1
1291+ ; RV64XTHEADBB-NEXT: th.extu a0, a0, 16, 15
1292+ ; RV64XTHEADBB-NEXT: addi a2, a2, 1
1293+ ; RV64XTHEADBB-NEXT: add a0, a0, a1
1294+ ; RV64XTHEADBB-NEXT: bltu a2, a3, .LBB39_1
1295+ ; RV64XTHEADBB-NEXT: # %bb.2: # %bb7
1296+ ; RV64XTHEADBB-NEXT: sext.w a0, a0
1297+ ; RV64XTHEADBB-NEXT: ret
1298+ entry:
1299+ br label %bb2
1300+
1301+ bb2: ; preds = %bb2, %entry
1302+ %i1 = phi i64 [ %arg1 , %entry ], [ %i5 , %bb2 ]
1303+ %i2 = phi i64 [ %arg3 , %entry ], [ %i3 , %bb2 ]
1304+ %i3 = add i64 %i2 , 1
1305+ %i4 = ashr i64 %i1 , 15
1306+ %i4b = and i64 %i4 , 3
1307+ %i5 = add i64 %i4b , %arg2
1308+ %i6 = icmp ugt i64 %i2 , 255
1309+ br i1 %i6 , label %bb7 , label %bb2
1310+
1311+ bb7: ; preds = %bb2
1312+ %i7 = trunc i64 %i5 to i32
1313+ ret i32 %i7
1314+ }
0 commit comments