Skip to content

Commit 67a0844

Browse files
authored
[RISCV] Add BREV8 to SimplifyDemandedBitsForTargetNode. (#141898)
1 parent 0967fce commit 67a0844

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20721,6 +20721,34 @@ unsigned RISCVTargetLowering::ComputeNumSignBitsForTargetNode(
2072120721
return 1;
2072220722
}
2072320723

20724+
bool RISCVTargetLowering::SimplifyDemandedBitsForTargetNode(
20725+
SDValue Op, const APInt &OriginalDemandedBits,
20726+
const APInt &OriginalDemandedElts, KnownBits &Known, TargetLoweringOpt &TLO,
20727+
unsigned Depth) const {
20728+
unsigned BitWidth = OriginalDemandedBits.getBitWidth();
20729+
20730+
switch (Op.getOpcode()) {
20731+
case RISCVISD::BREV8: {
20732+
KnownBits Known2;
20733+
APInt DemandedBits =
20734+
APInt(BitWidth, computeGREVOrGORC(OriginalDemandedBits.getZExtValue(),
20735+
7, /*IsGORC=*/false));
20736+
if (SimplifyDemandedBits(Op.getOperand(0), DemandedBits,
20737+
OriginalDemandedElts, Known2, TLO, Depth + 1))
20738+
return true;
20739+
20740+
Known.Zero =
20741+
computeGREVOrGORC(Known2.Zero.getZExtValue(), 7, /*IsGORC=*/false);
20742+
Known.One =
20743+
computeGREVOrGORC(Known2.One.getZExtValue(), 7, /*IsGORC=*/false);
20744+
return false;
20745+
}
20746+
}
20747+
20748+
return TargetLowering::SimplifyDemandedBitsForTargetNode(
20749+
Op, OriginalDemandedBits, OriginalDemandedElts, Known, TLO, Depth);
20750+
}
20751+
2072420752
bool RISCVTargetLowering::canCreateUndefOrPoisonForTargetNode(
2072520753
SDValue Op, const APInt &DemandedElts, const SelectionDAG &DAG,
2072620754
bool PoisonOnly, bool ConsiderFlags, unsigned Depth) const {

llvm/lib/Target/RISCV/RISCVISelLowering.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,12 @@ class RISCVTargetLowering : public TargetLowering {
154154
const SelectionDAG &DAG,
155155
unsigned Depth) const override;
156156

157+
bool SimplifyDemandedBitsForTargetNode(SDValue Op, const APInt &DemandedBits,
158+
const APInt &DemandedElts,
159+
KnownBits &Known,
160+
TargetLoweringOpt &TLO,
161+
unsigned Depth) const override;
162+
157163
bool canCreateUndefOrPoisonForTargetNode(SDValue Op,
158164
const APInt &DemandedElts,
159165
const SelectionDAG &DAG,

llvm/test/CodeGen/RISCV/bswap-bitreverse.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,14 +245,14 @@ define i8 @test_bitreverse_i8(i8 %a) nounwind {
245245
;
246246
; RV32ZBKB-LABEL: test_bitreverse_i8:
247247
; RV32ZBKB: # %bb.0:
248-
; RV32ZBKB-NEXT: rev8 a0, a0
248+
; RV32ZBKB-NEXT: slli a0, a0, 24
249249
; RV32ZBKB-NEXT: brev8 a0, a0
250250
; RV32ZBKB-NEXT: srli a0, a0, 24
251251
; RV32ZBKB-NEXT: ret
252252
;
253253
; RV64ZBKB-LABEL: test_bitreverse_i8:
254254
; RV64ZBKB: # %bb.0:
255-
; RV64ZBKB-NEXT: rev8 a0, a0
255+
; RV64ZBKB-NEXT: slli a0, a0, 56
256256
; RV64ZBKB-NEXT: brev8 a0, a0
257257
; RV64ZBKB-NEXT: srli a0, a0, 56
258258
; RV64ZBKB-NEXT: ret

0 commit comments

Comments
 (0)