Skip to content

Commit 750a26a

Browse files
committed
[RISCV] Implement computeKnownBitsForTargetNode for SHL_ADD
1 parent 4d2b2aa commit 750a26a

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21568,6 +21568,15 @@ void RISCVTargetLowering::computeKnownBitsForTargetNode(const SDValue Op,
2156821568
Known = Known.sext(BitWidth);
2156921569
break;
2157021570
}
21571+
case RISCVISD::SHL_ADD: {
21572+
KnownBits Known2;
21573+
Known = DAG.computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
21574+
Known2 = DAG.computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
21575+
Known = KnownBits::shl(Known, Known2);
21576+
Known2 = DAG.computeKnownBits(Op.getOperand(2), DemandedElts, Depth + 1);
21577+
Known = KnownBits::add(Known, Known2);
21578+
break;
21579+
}
2157121580
case RISCVISD::CTZW: {
2157221581
KnownBits Known2 = DAG.computeKnownBits(Op.getOperand(0), Depth + 1);
2157321582
unsigned PossibleTZ = Known2.trunc(32).countMaxTrailingZeros();

llvm/test/CodeGen/RISCV/rv32zba.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,16 +1283,15 @@ define ptr @shl_add_knownbits(ptr %p, i32 %i) {
12831283
; RV32ZBA-NEXT: slli a1, a1, 18
12841284
; RV32ZBA-NEXT: srli a1, a1, 18
12851285
; RV32ZBA-NEXT: sh1add a1, a1, a1
1286-
; RV32ZBA-NEXT: slli a1, a1, 1
1287-
; RV32ZBA-NEXT: srli a1, a1, 3
1286+
; RV32ZBA-NEXT: srli a1, a1, 2
12881287
; RV32ZBA-NEXT: add a0, a0, a1
12891288
; RV32ZBA-NEXT: ret
12901289
;
12911290
; RV32XANDESPERF-LABEL: shl_add_knownbits:
12921291
; RV32XANDESPERF: # %bb.0:
12931292
; RV32XANDESPERF-NEXT: nds.bfoz a1, a1, 13, 0
12941293
; RV32XANDESPERF-NEXT: nds.lea.h a1, a1, a1
1295-
; RV32XANDESPERF-NEXT: nds.bfoz a1, a1, 30, 2
1294+
; RV32XANDESPERF-NEXT: srli a1, a1, 2
12961295
; RV32XANDESPERF-NEXT: add a0, a0, a1
12971296
; RV32XANDESPERF-NEXT: ret
12981297
%and = and i32 %i, 16383

llvm/test/CodeGen/RISCV/rv64zba.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4654,16 +4654,15 @@ define ptr @shl_add_knownbits(ptr %p, i64 %i) {
46544654
; RV64ZBA-NEXT: slli a1, a1, 50
46554655
; RV64ZBA-NEXT: srli a1, a1, 50
46564656
; RV64ZBA-NEXT: sh1add a1, a1, a1
4657-
; RV64ZBA-NEXT: slli a1, a1, 1
4658-
; RV64ZBA-NEXT: srli a1, a1, 3
4657+
; RV64ZBA-NEXT: srli a1, a1, 2
46594658
; RV64ZBA-NEXT: add a0, a0, a1
46604659
; RV64ZBA-NEXT: ret
46614660
;
46624661
; RV64XANDESPERF-LABEL: shl_add_knownbits:
46634662
; RV64XANDESPERF: # %bb.0:
46644663
; RV64XANDESPERF-NEXT: nds.bfoz a1, a1, 13, 0
46654664
; RV64XANDESPERF-NEXT: nds.lea.h a1, a1, a1
4666-
; RV64XANDESPERF-NEXT: nds.bfoz a1, a1, 62, 2
4665+
; RV64XANDESPERF-NEXT: srli a1, a1, 2
46674666
; RV64XANDESPERF-NEXT: add a0, a0, a1
46684667
; RV64XANDESPERF-NEXT: ret
46694668
%and = and i64 %i, 16383

0 commit comments

Comments
 (0)