Skip to content

Commit 4d2b2aa

Browse files
committed
[RISCV][test] Add tests for SHL_ADD KnownBits
1 parent ec2ce34 commit 4d2b2aa

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

llvm/test/CodeGen/RISCV/rv32zba.ll

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,3 +1265,39 @@ define i64 @select9i64(i1 zeroext %x) {
12651265
%select = select i1 %x, i64 9, i64 0
12661266
ret i64 %select
12671267
}
1268+
1269+
define ptr @shl_add_knownbits(ptr %p, i32 %i) {
1270+
; RV32I-LABEL: shl_add_knownbits:
1271+
; RV32I: # %bb.0:
1272+
; RV32I-NEXT: slli a1, a1, 18
1273+
; RV32I-NEXT: srli a1, a1, 18
1274+
; RV32I-NEXT: slli a2, a1, 1
1275+
; RV32I-NEXT: slli a1, a1, 3
1276+
; RV32I-NEXT: sub a1, a1, a2
1277+
; RV32I-NEXT: srli a1, a1, 3
1278+
; RV32I-NEXT: add a0, a0, a1
1279+
; RV32I-NEXT: ret
1280+
;
1281+
; RV32ZBA-LABEL: shl_add_knownbits:
1282+
; RV32ZBA: # %bb.0:
1283+
; RV32ZBA-NEXT: slli a1, a1, 18
1284+
; RV32ZBA-NEXT: srli a1, a1, 18
1285+
; RV32ZBA-NEXT: sh1add a1, a1, a1
1286+
; RV32ZBA-NEXT: slli a1, a1, 1
1287+
; RV32ZBA-NEXT: srli a1, a1, 3
1288+
; RV32ZBA-NEXT: add a0, a0, a1
1289+
; RV32ZBA-NEXT: ret
1290+
;
1291+
; RV32XANDESPERF-LABEL: shl_add_knownbits:
1292+
; RV32XANDESPERF: # %bb.0:
1293+
; RV32XANDESPERF-NEXT: nds.bfoz a1, a1, 13, 0
1294+
; RV32XANDESPERF-NEXT: nds.lea.h a1, a1, a1
1295+
; RV32XANDESPERF-NEXT: nds.bfoz a1, a1, 30, 2
1296+
; RV32XANDESPERF-NEXT: add a0, a0, a1
1297+
; RV32XANDESPERF-NEXT: ret
1298+
%and = and i32 %i, 16383
1299+
%mul = mul i32 %and, 6
1300+
%shr = lshr i32 %mul, 3
1301+
%r = getelementptr i8, ptr %p, i32 %shr
1302+
ret ptr %r
1303+
}

llvm/test/CodeGen/RISCV/rv64zba.ll

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4636,3 +4636,39 @@ define i32 @select9(i1 zeroext %x) {
46364636
%select = select i1 %x, i32 9, i32 0
46374637
ret i32 %select
46384638
}
4639+
4640+
define ptr @shl_add_knownbits(ptr %p, i64 %i) {
4641+
; RV64I-LABEL: shl_add_knownbits:
4642+
; RV64I: # %bb.0:
4643+
; RV64I-NEXT: slli a1, a1, 50
4644+
; RV64I-NEXT: srli a1, a1, 50
4645+
; RV64I-NEXT: slli a2, a1, 1
4646+
; RV64I-NEXT: slli a1, a1, 3
4647+
; RV64I-NEXT: sub a1, a1, a2
4648+
; RV64I-NEXT: srli a1, a1, 3
4649+
; RV64I-NEXT: add a0, a0, a1
4650+
; RV64I-NEXT: ret
4651+
;
4652+
; RV64ZBA-LABEL: shl_add_knownbits:
4653+
; RV64ZBA: # %bb.0:
4654+
; RV64ZBA-NEXT: slli a1, a1, 50
4655+
; RV64ZBA-NEXT: srli a1, a1, 50
4656+
; RV64ZBA-NEXT: sh1add a1, a1, a1
4657+
; RV64ZBA-NEXT: slli a1, a1, 1
4658+
; RV64ZBA-NEXT: srli a1, a1, 3
4659+
; RV64ZBA-NEXT: add a0, a0, a1
4660+
; RV64ZBA-NEXT: ret
4661+
;
4662+
; RV64XANDESPERF-LABEL: shl_add_knownbits:
4663+
; RV64XANDESPERF: # %bb.0:
4664+
; RV64XANDESPERF-NEXT: nds.bfoz a1, a1, 13, 0
4665+
; RV64XANDESPERF-NEXT: nds.lea.h a1, a1, a1
4666+
; RV64XANDESPERF-NEXT: nds.bfoz a1, a1, 62, 2
4667+
; RV64XANDESPERF-NEXT: add a0, a0, a1
4668+
; RV64XANDESPERF-NEXT: ret
4669+
%and = and i64 %i, 16383
4670+
%mul = mul i64 %and, 6
4671+
%shr = lshr i64 %mul, 3
4672+
%r = getelementptr i8, ptr %p, i64 %shr
4673+
ret ptr %r
4674+
}

0 commit comments

Comments
 (0)