[llvm] a631af3 - Add EVT::changeVectorElementCount and MVT:changeVectorElementCount (#182266)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 5 04:19:23 PST 2026
Author: Chaitanya Koparkar
Date: 2026-03-05T07:19:19-05:00
New Revision: a631af32c01bae47ff3ddf4645df2da96984ff09
URL: https://github.com/llvm/llvm-project/commit/a631af32c01bae47ff3ddf4645df2da96984ff09
DIFF: https://github.com/llvm/llvm-project/commit/a631af32c01bae47ff3ddf4645df2da96984ff09.diff
LOG: Add EVT::changeVectorElementCount and MVT:changeVectorElementCount (#182266)
Fixes #174584.
Added:
Modified:
llvm/include/llvm/CodeGen/ValueTypes.h
llvm/include/llvm/CodeGenTypes/MachineValueType.h
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/ValueTypes.h b/llvm/include/llvm/CodeGen/ValueTypes.h
index 3897cb8c18127..e8ce9ad8abfca 100644
--- a/llvm/include/llvm/CodeGen/ValueTypes.h
+++ b/llvm/include/llvm/CodeGen/ValueTypes.h
@@ -108,6 +108,18 @@ namespace llvm {
return getVectorVT(Context, EltVT, getVectorElementCount());
}
+ /// Return a VT for a vector type whose attributes match ourselves
+ /// with the exception of the element count that is chosen by the caller.
+ EVT changeVectorElementCount(LLVMContext &Context, ElementCount EC) const {
+ assert(isVector() && "Not a vector EVT!");
+ if (isSimple()) {
+ MVT M = getSimpleVT().changeVectorElementCount(EC);
+ if (M != MVT::INVALID_SIMPLE_VALUE_TYPE)
+ return M;
+ }
+ return getVectorVT(Context, getVectorElementType(), EC);
+ }
+
/// Return a VT for a type whose attributes match ourselves with the
/// exception of the element type that is chosen by the caller.
EVT changeElementType(LLVMContext &Context, EVT EltVT) const {
diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index 08a9c85a213e0..99f0bb6aaac2d 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -217,6 +217,13 @@ namespace llvm {
return VecTy;
}
+ /// Return a VT for a vector type whose attributes match ourselves with
+ /// the exception of the element count that is chosen by the caller.
+ MVT changeVectorElementCount(ElementCount EC) const {
+ assert(isVector() && "Not a vector MVT!");
+ return MVT::getVectorVT(getVectorElementType(), EC);
+ }
+
/// Return the type converted to an equivalently sized integer or vector
/// with integer element type. Similar to changeVectorElementTypeToInteger,
/// but also handles scalars.
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 02490587330fd..d02e5f5b3b78f 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -26192,9 +26192,8 @@ static SDValue combineConcatVectorOfCasts(SDNode *N, SelectionDAG &DAG) {
// the operation support type parameter depends on the opcode. In addition,
// check the other type in the cast to make sure this is really legal.
EVT VT = N->getValueType(0);
- EVT SrcEltVT = SrcVT.getVectorElementType();
ElementCount NumElts = SrcVT.getVectorElementCount() * N->getNumOperands();
- EVT ConcatSrcVT = EVT::getVectorVT(*DAG.getContext(), SrcEltVT, NumElts);
+ EVT ConcatSrcVT = SrcVT.changeVectorElementCount(*DAG.getContext(), NumElts);
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
switch (CastOpcode) {
case ISD::SINT_TO_FP:
More information about the llvm-commits
mailing list