diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp index 1cbedb7d141e2..1024e55f912c7 100644 --- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp @@ -2691,6 +2691,16 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) { } break; } + case ISD::SCALAR_TO_VECTOR: + if (Subtarget->enablePExtCodeGen()) { + MVT SrcVT = Node->getOperand(0).getSimpleValueType(); + if (VT == MVT::v2i32 && SrcVT == MVT::i64) { + ReplaceUses(SDValue(Node, 0), Node->getOperand(0)); + CurDAG->RemoveDeadNode(Node); + return; + } + } + break; case ISD::INSERT_SUBVECTOR: case RISCVISD::TUPLE_INSERT: { SDValue V = Node->getOperand(0); diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp index 637f1943b8511..51ad04c22e200 100644 --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -516,8 +516,6 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM, setTruncStoreAction(MVT::v8i16, MVT::v8i8, Expand); setTruncStoreAction(MVT::v2i32, MVT::v2i16, Expand); setTruncStoreAction(MVT::v4i16, MVT::v4i8, Expand); - setOperationAction(ISD::LOAD, MVT::v2i16, Custom); - setOperationAction(ISD::LOAD, MVT::v4i8, Custom); } else { VTs.append({MVT::v2i16, MVT::v4i8}); } @@ -14757,21 +14755,6 @@ void RISCVTargetLowering::ReplaceNodeResults(SDNode *N, return; } - if (Subtarget.is64Bit() && Subtarget.enablePExtCodeGen()) { - SDLoc DL(N); - SDValue ExtLoad = - DAG.getExtLoad(ISD::SEXTLOAD, DL, MVT::i64, Ld->getChain(), - Ld->getBasePtr(), MVT::i32, Ld->getMemOperand()); - if (N->getValueType(0) == MVT::v2i16) { - Results.push_back(DAG.getBitcast(MVT::v4i16, ExtLoad)); - Results.push_back(ExtLoad.getValue(1)); - } else if (N->getValueType(0) == MVT::v4i8) { - Results.push_back(DAG.getBitcast(MVT::v8i8, ExtLoad)); - Results.push_back(ExtLoad.getValue(1)); - } - return; - } - assert(N->getValueType(0) == MVT::i32 && Subtarget.is64Bit() && "Unexpected custom legalisation");