Skip to content

Commit 5a79909

Browse files
committed
[RISCV] Add a RV64 mulhsu test case. NFC
1 parent 6c88ffe commit 5a79909

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

llvm/test/CodeGen/RISCV/mul.ll

+76
Original file line numberDiff line numberDiff line change
@@ -1231,3 +1231,79 @@ define i128 @muli128_m63(i128 %a) nounwind {
12311231
%1 = mul i128 %a, -63
12321232
ret i128 %1
12331233
}
1234+
1235+
define i64 @mulhsu_i64(i64 %a, i64 %b) nounwind {
1236+
; RV32I-LABEL: mulhsu_i64:
1237+
; RV32I: # %bb.0:
1238+
; RV32I-NEXT: addi sp, sp, -64
1239+
; RV32I-NEXT: sw ra, 60(sp) # 4-byte Folded Spill
1240+
; RV32I-NEXT: srai a4, a3, 31
1241+
; RV32I-NEXT: sw a3, 12(sp)
1242+
; RV32I-NEXT: sw a2, 8(sp)
1243+
; RV32I-NEXT: sw zero, 36(sp)
1244+
; RV32I-NEXT: sw zero, 32(sp)
1245+
; RV32I-NEXT: sw a1, 28(sp)
1246+
; RV32I-NEXT: sw a0, 24(sp)
1247+
; RV32I-NEXT: sw a4, 20(sp)
1248+
; RV32I-NEXT: addi a0, sp, 40
1249+
; RV32I-NEXT: addi a1, sp, 24
1250+
; RV32I-NEXT: addi a2, sp, 8
1251+
; RV32I-NEXT: sw a4, 16(sp)
1252+
; RV32I-NEXT: call __multi3@plt
1253+
; RV32I-NEXT: lw a0, 48(sp)
1254+
; RV32I-NEXT: lw a1, 52(sp)
1255+
; RV32I-NEXT: lw ra, 60(sp) # 4-byte Folded Reload
1256+
; RV32I-NEXT: addi sp, sp, 64
1257+
; RV32I-NEXT: ret
1258+
;
1259+
; RV32IM-LABEL: mulhsu_i64:
1260+
; RV32IM: # %bb.0:
1261+
; RV32IM-NEXT: addi sp, sp, -64
1262+
; RV32IM-NEXT: sw ra, 60(sp) # 4-byte Folded Spill
1263+
; RV32IM-NEXT: srai a4, a3, 31
1264+
; RV32IM-NEXT: sw a3, 12(sp)
1265+
; RV32IM-NEXT: sw a2, 8(sp)
1266+
; RV32IM-NEXT: sw zero, 36(sp)
1267+
; RV32IM-NEXT: sw zero, 32(sp)
1268+
; RV32IM-NEXT: sw a1, 28(sp)
1269+
; RV32IM-NEXT: sw a0, 24(sp)
1270+
; RV32IM-NEXT: sw a4, 20(sp)
1271+
; RV32IM-NEXT: addi a0, sp, 40
1272+
; RV32IM-NEXT: addi a1, sp, 24
1273+
; RV32IM-NEXT: addi a2, sp, 8
1274+
; RV32IM-NEXT: sw a4, 16(sp)
1275+
; RV32IM-NEXT: call __multi3@plt
1276+
; RV32IM-NEXT: lw a0, 48(sp)
1277+
; RV32IM-NEXT: lw a1, 52(sp)
1278+
; RV32IM-NEXT: lw ra, 60(sp) # 4-byte Folded Reload
1279+
; RV32IM-NEXT: addi sp, sp, 64
1280+
; RV32IM-NEXT: ret
1281+
;
1282+
; RV64I-LABEL: mulhsu_i64:
1283+
; RV64I: # %bb.0:
1284+
; RV64I-NEXT: addi sp, sp, -16
1285+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1286+
; RV64I-NEXT: mv a2, a1
1287+
; RV64I-NEXT: srai a3, a1, 63
1288+
; RV64I-NEXT: mv a1, zero
1289+
; RV64I-NEXT: call __multi3@plt
1290+
; RV64I-NEXT: mv a0, a1
1291+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
1292+
; RV64I-NEXT: addi sp, sp, 16
1293+
; RV64I-NEXT: ret
1294+
;
1295+
; RV64IM-LABEL: mulhsu_i64:
1296+
; RV64IM: # %bb.0:
1297+
; RV64IM-NEXT: srai a2, a1, 63
1298+
; RV64IM-NEXT: mulhu a1, a0, a1
1299+
; RV64IM-NEXT: mul a0, a0, a2
1300+
; RV64IM-NEXT: add a0, a1, a0
1301+
; RV64IM-NEXT: ret
1302+
%1 = zext i64 %a to i128
1303+
%2 = sext i64 %b to i128
1304+
%3 = mul i128 %1, %2
1305+
%4 = lshr i128 %3, 64
1306+
%5 = trunc i128 %4 to i64
1307+
ret i64 %5
1308+
}
1309+

0 commit comments

Comments
 (0)