[llvm] [SelectionDAG][RISCV] Fix break of vnsrl pattern in issue #94265 (PR #95563)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 12 01:41:02 PDT 2024
================
@@ -1884,6 +1884,19 @@ bool RISCVTargetLowering::isTruncateFree(EVT SrcVT, EVT DstVT) const {
return (SrcBits == 64 && DestBits == 32);
}
+bool RISCVTargetLowering::isTruncateFree(SDValue Val, EVT VT2) const {
+ EVT SrcVT = Val.getValueType();
+ // free truncate from vnsrl and vnsra
+ if (Subtarget.hasStdExtV() &&
+ (Val.getOpcode() == ISD::SRL || Val.getOpcode() == ISD::SRA) &&
+ SrcVT.isVector() && VT2.isVector()) {
+ unsigned SrcBits = SrcVT.getVectorElementType().getSizeInBits();
+ unsigned DestBits = VT2.getVectorElementType().getSizeInBits();
+ return (SrcBits == DestBits * 2);
----------------
RKSimon wrote:
Are there any circumstances we'd want to drop down to TargetLowering::isTruncateFree(Val, VT2) if this is false?
https://github.com/llvm/llvm-project/pull/95563
More information about the llvm-commits
mailing list