[clang] [llvm] [RISCV][SiFive] Reduce intrinsics of SiFive VCIX extension (PR #79407)
Craig Topper via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 24 21:56:24 PST 2024
================
@@ -817,6 +817,66 @@ bool RISCVDAGToDAGISel::tryIndexedLoad(SDNode *Node) {
return true;
}
+void RISCVDAGToDAGISel::selectSF_VC_X_SE(SDNode *Node) {
+ if (!Subtarget->hasVInstructions())
+ return;
+
+ assert(Node->getOpcode() == ISD::INTRINSIC_VOID && "Unexpected opcode");
+
+ SDLoc DL(Node);
+ unsigned IntNo = Node->getConstantOperandVal(1);
+
+ assert((IntNo == Intrinsic::riscv_sf_vc_x_se ||
+ IntNo == Intrinsic::riscv_sf_vc_i_se) &&
+ "Unexpected vsetvli intrinsic");
+
+ // imm, imm, imm, simm5/scalar, sew, log2lmul, vl
+ auto *SewSDNode = dyn_cast<ConstantSDNode>(Node->getOperand(6));
+ unsigned Log2SEW = Log2_32(SewSDNode->getZExtValue());
+ SDValue SEWOp =
+ CurDAG->getTargetConstant(Log2SEW, DL, Subtarget->getXLenVT());
+ SmallVector<SDValue, 8> Operands = {Node->getOperand(2), Node->getOperand(3),
+ Node->getOperand(4), Node->getOperand(5),
+ Node->getOperand(8), SEWOp,
+ Node->getOperand(0)};
+
+ unsigned Opcode;
+ auto *LMulSDNode = dyn_cast<ConstantSDNode>(Node->getOperand(7));
----------------
topperc wrote:
dyn_cast -> cast
https://github.com/llvm/llvm-project/pull/79407
More information about the cfe-commits
mailing list