[llvm] [RISCV] Remove custom legalization of v2i16/v4i8 loads for P extension. (PR #167651)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 11 23:37:58 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v
Author: Craig Topper (topperc)
<details>
<summary>Changes</summary>
We can use the default legalization which will create an i32 load followed by a v2i32 scalar_to_vector followed by a bitcast. We can isel the scalar_to_vector like a bitcast and not generate any instructions for it.
---
Full diff: https://github.com/llvm/llvm-project/pull/167651.diff
2 Files Affected:
- (modified) llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp (+10)
- (modified) llvm/lib/Target/RISCV/RISCVISelLowering.cpp (-17)
``````````diff
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");
``````````
</details>
https://github.com/llvm/llvm-project/pull/167651
More information about the llvm-commits
mailing list