[llvm] [DAG] Adding MVT::widenIntegerElementType to widen both Scalar and Vectors of integer type. (PR #207148)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 8 01:42:49 PDT 2026


https://github.com/RKSimon updated https://github.com/llvm/llvm-project/pull/207148

>From a92b420751290955e330fee9a7fa7162a6df2951 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Wed, 1 Jul 2026 02:54:10 +0530
Subject: [PATCH 01/12] [DAG] Add MVT::widenIntegerElementType and
 MVT::widenIntegerVectorElementType

---
 .../llvm/CodeGenTypes/MachineValueType.h      | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index 92f3b79588996..d7f1457eeb032 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -265,6 +265,34 @@ namespace llvm {
       return MVT::getVectorVT(EltVT, EltCnt * 2);
     }
 
+    // Return a VT for an Integer type doubled in size
+    MVT widenIntegerElementType() const {
+      assert(isScalarInteger() && "Not an integer MVT!");
+      assert((SimpleTy != MVT::LAST_INTEGER_VALUETYPE) &&
+             "Widening of this Integer type not supported !");
+      
+      // i1 is a special case � doubling gives i2 which is not a valid MVT,
+      // so promote directly to i8 instead.
+      if (SimpleTy == MVT::i1)
+        return MVT::i8;
+
+      unsigned NextSizeInBits = getScalarSizeInBits() * 2;
+      return getIntegerVT(NextSizeInBits);
+    }
+
+    // Return a VT for an integer vector type with the size of the
+    // elements doubled.
+    MVT widenIntegerVectorElementType() const {
+      assert(isVector() && "Not a vector MVT!");
+
+      MVT WideEltTy = getVectorElementType().widenIntegerElementType();
+      MVT VecTy = MVT::getVectorVT(WideEltTy, getVectorElementCount());
+      assert(VecTy.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE &&
+             "Simple vector VT not representable by simple integer vector VT!");
+      return VecTy;
+
+    }
+
     /// Returns true if the given vector is a power of 2.
     bool isPow2VectorType() const {
       unsigned NElts = getVectorMinNumElements();

>From b49ab1c7a1576dfe33fd224fd5929c9aefd69af3 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Wed, 1 Jul 2026 03:33:34 +0530
Subject: [PATCH 02/12] Assert message correction

---
 .gitignore                                        | 2 ++
 llvm/include/llvm/CodeGenTypes/MachineValueType.h | 3 +--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/.gitignore b/.gitignore
index a4382c9ea7390..70b4e5dcddb8b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -90,3 +90,5 @@ pythonenv*
 /clang/utils/analyzer/projects/*/RefScanBuildResults
 # automodapi puts generated documentation files here.
 /lldb/docs/python_api/
+/CppProperties.json
+/CppProperties.json
diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index d7f1457eeb032..5f08ba8cb6488 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -288,9 +288,8 @@ namespace llvm {
       MVT WideEltTy = getVectorElementType().widenIntegerElementType();
       MVT VecTy = MVT::getVectorVT(WideEltTy, getVectorElementCount());
       assert(VecTy.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE &&
-             "Simple vector VT not representable by simple integer vector VT!");
+             "Integer Vector widening not possible !");
       return VecTy;
-
     }
 
     /// Returns true if the given vector is a power of 2.

>From cbf3d13aba31bcc6307595462fc6716dab78e6d4 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Wed, 1 Jul 2026 03:35:55 +0530
Subject: [PATCH 03/12] Revert "Assert message correction"

This reverts commit b49ab1c7a1576dfe33fd224fd5929c9aefd69af3.
---
 .gitignore                                        | 2 --
 llvm/include/llvm/CodeGenTypes/MachineValueType.h | 3 ++-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/.gitignore b/.gitignore
index 70b4e5dcddb8b..a4382c9ea7390 100644
--- a/.gitignore
+++ b/.gitignore
@@ -90,5 +90,3 @@ pythonenv*
 /clang/utils/analyzer/projects/*/RefScanBuildResults
 # automodapi puts generated documentation files here.
 /lldb/docs/python_api/
-/CppProperties.json
-/CppProperties.json
diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index 5f08ba8cb6488..d7f1457eeb032 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -288,8 +288,9 @@ namespace llvm {
       MVT WideEltTy = getVectorElementType().widenIntegerElementType();
       MVT VecTy = MVT::getVectorVT(WideEltTy, getVectorElementCount());
       assert(VecTy.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE &&
-             "Integer Vector widening not possible !");
+             "Simple vector VT not representable by simple integer vector VT!");
       return VecTy;
+
     }
 
     /// Returns true if the given vector is a power of 2.

>From a9997305ff3f13aece33d90641dae7db72260f44 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Wed, 1 Jul 2026 03:53:10 +0530
Subject: [PATCH 04/12] Assert message correction

---
 llvm/include/llvm/CodeGenTypes/MachineValueType.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index d7f1457eeb032..3254b2877fccf 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -288,7 +288,7 @@ namespace llvm {
       MVT WideEltTy = getVectorElementType().widenIntegerElementType();
       MVT VecTy = MVT::getVectorVT(WideEltTy, getVectorElementCount());
       assert(VecTy.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE &&
-             "Simple vector VT not representable by simple integer vector VT!");
+             "Widening of this Vector Integer type not supported !");
       return VecTy;
 
     }

>From 451bd6a87703fee76ae5f38d3561c170eadfbbfb Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Wed, 1 Jul 2026 04:00:50 +0530
Subject: [PATCH 05/12] utf-8 error correction

---
 llvm/include/llvm/CodeGenTypes/MachineValueType.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index 3254b2877fccf..92d9f8ab20213 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -271,7 +271,7 @@ namespace llvm {
       assert((SimpleTy != MVT::LAST_INTEGER_VALUETYPE) &&
              "Widening of this Integer type not supported !");
       
-      // i1 is a special case � doubling gives i2 which is not a valid MVT,
+      // i1 is a special case doubling gives i2 which is not a valid MVT
       // so promote directly to i8 instead.
       if (SimpleTy == MVT::i1)
         return MVT::i8;

>From 53fc4366330e706d031b039b624024dc952304c8 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Wed, 1 Jul 2026 15:36:58 +0530
Subject: [PATCH 06/12] [DAG] Add MVT::widenIntegerElementType and
 MVT::widenIntegerVectorElementType

---
 .../llvm/CodeGenTypes/MachineValueType.h      | 27 +++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index 92f3b79588996..d9cfa86d34401 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -265,6 +265,33 @@ namespace llvm {
       return MVT::getVectorVT(EltVT, EltCnt * 2);
     }
 
+    // Return a VT for an Integer type doubled in size
+    MVT widenIntegerElementType() const {
+      assert(isScalarInteger() && "Not an integer MVT!");
+      assert((SimpleTy != MVT::LAST_INTEGER_VALUETYPE) &&
+             "Widening of this Integer type not supported !");
+
+      // i1 is a special case doubling gives i2 which is not a valid MVT
+      // so promote directly to i8 instead.
+      if (SimpleTy == MVT::i1)
+        return MVT::i8;
+
+      unsigned NextSizeInBits = getScalarSizeInBits() * 2;
+      return getIntegerVT(NextSizeInBits);
+    }
+
+    // Return a VT for an integer vector type with the size of the
+    // elements doubled.
+    MVT widenIntegerVectorElementType() const {
+      assert(isVector() && "Not a vector MVT!");
+
+      MVT WideEltTy = getVectorElementType().widenIntegerElementType();
+      MVT VecTy = MVT::getVectorVT(WideEltTy, getVectorElementCount());
+      assert(VecTy.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE &&
+             "Widening of this Vector Integer type not supported !");
+      return VecTy;
+    }
+
     /// Returns true if the given vector is a power of 2.
     bool isPow2VectorType() const {
       unsigned NElts = getVectorMinNumElements();

>From 21bf9c6d7fbbb4c8ce1ddc56e47c29fe60951656 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Thu, 2 Jul 2026 01:41:12 +0530
Subject: [PATCH 07/12] Adding testcases.

---
 .../llvm/CodeGenTypes/MachineValueType.h      | 29 ++++++++-------
 .../CodeGen/ScalableVectorMVTsTest.cpp        | 36 +++++++++++++++++++
 2 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index 7ed315b5f75c6..a7518910eeab5 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -265,26 +265,25 @@ namespace llvm {
       return MVT::getVectorVT(EltVT, EltCnt * 2);
     }
 
+    MVT placeholder_206783(MVT EltVT) const {
+      EltVT = EltVT.getScalarType();
+      return isVector() ? changeVectorElementType(EltVT) : EltVT;
+    }
+
     // Return a VT for an Integer type doubled in size
     MVT widenIntegerElementType() const {
-      assert(isScalarInteger() && "Not an integer MVT!");
-      assert((SimpleTy != MVT::LAST_INTEGER_VALUETYPE) &&
+      const MVT BaseTy = getScalarType();
+      assert(BaseTy.isInteger() &&
+             "Not an integer or vector of integer MVT!");
+      assert((BaseTy != MVT::LAST_INTEGER_VALUETYPE) &&
              "Widening of this Integer type not supported !");
 
-      unsigned NextSizeInBits = getScalarSizeInBits() * 2;
-      return getIntegerVT(NextSizeInBits);
-    }
+      MVT ResTy =
+          placeholder_206783(getIntegerVT(BaseTy.getScalarSizeInBits() * 2));
+      assert(ResTy != MVT::INVALID_SIMPLE_VALUE_TYPE &&
+             "Failed to widened to a valid MVT!");
 
-    // Return a VT for an integer vector type with the size of the
-    // elements doubled.
-    MVT widenIntegerVectorElementType() const {
-      assert(isVector() && "Not a vector MVT!");
-
-      MVT WideEltTy = getVectorElementType().widenIntegerElementType();
-      MVT VecTy = MVT::getVectorVT(WideEltTy, getVectorElementCount());
-      assert(VecTy.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE &&
-             "Widening of this Vector Integer type not supported !");
-      return VecTy;
+      return ResTy;
     }
 
     /// Returns true if the given vector is a power of 2.
diff --git a/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp b/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp
index c343465ae4c72..ea1c97cb639c4 100644
--- a/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp
+++ b/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp
@@ -194,4 +194,40 @@ TEST(ScalableVectorMVTsTest, SizeQueries) {
             nxv2i32.getSizeInBits());
 }
 
+TEST(ScalableVectorMVTsTest, WideningIntegerMVTs) {
+  MVT i1Ty = MVT::i1;
+  MVT i2Ty = MVT::i2;
+  MVT i4Ty = MVT::i4;
+  MVT i8Ty = MVT::i8;
+  MVT i16Ty = MVT::i16;
+  MVT i32Ty = MVT::i32;
+  MVT i64Ty = MVT::i64;
+  MVT i128Ty = MVT::i128;
+  MVT i256Ty = MVT::i256;
+  MVT i512Ty = MVT::i512;
+
+  EXPECT_EQ(i1Ty.widenIntegerElementType(), i2Ty);
+  EXPECT_EQ(i2Ty.widenIntegerElementType(), i4Ty);
+  EXPECT_EQ(i4Ty.widenIntegerElementType(), i8Ty);
+  EXPECT_EQ(i8Ty.widenIntegerElementType(), i16Ty);
+  EXPECT_EQ(i16Ty.widenIntegerElementType(), i32Ty);
+  EXPECT_EQ(i32Ty.widenIntegerElementType(), i64Ty);
+  EXPECT_EQ(i64Ty.widenIntegerElementType(), i128Ty);
+  EXPECT_EQ(i128Ty.widenIntegerElementType(), i256Ty);
+  EXPECT_EQ(i256Ty.widenIntegerElementType(), i512Ty);
+
+#if !defined(NDEBUG) && GTEST_HAS_DEATH_TEST
+  EXPECT_DEATH(i512Ty.widenIntegerElementType(),
+               "Widening of this Integer type not supported !");
+#endif
+
+  MVT v128i1Ty = MVT::v128i1;
+  MVT v128i2Ty = MVT::v128i2;
+  MVT v8i32Ty = MVT::v8i32;
+  MVT v8i64Ty = MVT::v8i64;
+
+  EXPECT_EQ(v128i1Ty.widenIntegerElementType(), v128i2Ty);
+  EXPECT_EQ(v8i32Ty.widenIntegerElementType(), v8i64Ty);
+}
+
 } // end anonymous namespace

>From 6525374fa3d2a8edbd656e312278ef32d5fabc88 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Thu, 2 Jul 2026 01:56:52 +0530
Subject: [PATCH 08/12] Removed erronous testcase.

---
 llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp b/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp
index ea1c97cb639c4..032a9c74ba17a 100644
--- a/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp
+++ b/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp
@@ -216,11 +216,6 @@ TEST(ScalableVectorMVTsTest, WideningIntegerMVTs) {
   EXPECT_EQ(i128Ty.widenIntegerElementType(), i256Ty);
   EXPECT_EQ(i256Ty.widenIntegerElementType(), i512Ty);
 
-#if !defined(NDEBUG) && GTEST_HAS_DEATH_TEST
-  EXPECT_DEATH(i512Ty.widenIntegerElementType(),
-               "Widening of this Integer type not supported !");
-#endif
-
   MVT v128i1Ty = MVT::v128i1;
   MVT v128i2Ty = MVT::v128i2;
   MVT v8i32Ty = MVT::v8i32;
@@ -229,5 +224,4 @@ TEST(ScalableVectorMVTsTest, WideningIntegerMVTs) {
   EXPECT_EQ(v128i1Ty.widenIntegerElementType(), v128i2Ty);
   EXPECT_EQ(v8i32Ty.widenIntegerElementType(), v8i64Ty);
 }
-
 } // end anonymous namespace

>From 83033b265fda0b36d4f47bd5427bddc69e3682b0 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Thu, 2 Jul 2026 14:55:02 +0530
Subject: [PATCH 09/12] [DAG] Adding MVT::widenIntegerElementType to widen both
 Scalar and Vectors of integer type. e.g. i16 -> i32, v8i32->v8i64.

---
 llvm/include/llvm/CodeGenTypes/MachineValueType.h | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index 5d5123195d730..a0dc40b520c0b 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -272,24 +272,17 @@ namespace llvm {
       return MVT::getVectorVT(EltVT, EltCnt * 2);
     }
 
-    MVT placeholder_206783(MVT EltVT) const {
-      EltVT = EltVT.getScalarType();
-      return isVector() ? changeVectorElementType(EltVT) : EltVT;
-    }
-
-    // Return a VT for an Integer type doubled in size
+    // Return a VT for an Integer or vetor of integer type doubled in size
     MVT widenIntegerElementType() const {
       const MVT BaseTy = getScalarType();
-      assert(BaseTy.isInteger() &&
-             "Not an integer or vector of integer MVT!");
+      assert(BaseTy.isInteger() && "Not an integer or vector of integer MVT!");
       assert((BaseTy != MVT::LAST_INTEGER_VALUETYPE) &&
              "Widening of this Integer type not supported !");
 
       MVT ResTy =
-          placeholder_206783(getIntegerVT(BaseTy.getScalarSizeInBits() * 2));
+          changeElementType(getIntegerVT(BaseTy.getScalarSizeInBits() * 2));
       assert(ResTy != MVT::INVALID_SIMPLE_VALUE_TYPE &&
              "Failed to widened to a valid MVT!");
-
       return ResTy;
     }
 

>From 8537fdb5b363704f08ba41074e780a8e919bb028 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Sat, 4 Jul 2026 15:04:53 +0530
Subject: [PATCH 10/12] Replaces uses with widenIntegerElementType and making
 requested changes.

---
 llvm/include/llvm/CodeGenTypes/MachineValueType.h |  2 +-
 llvm/lib/Target/Hexagon/HexagonISelLowering.cpp   | 11 ++++-------
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index a0dc40b520c0b..d24208d7c0432 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -274,7 +274,7 @@ namespace llvm {
 
     // Return a VT for an Integer or vetor of integer type doubled in size
     MVT widenIntegerElementType() const {
-      const MVT BaseTy = getScalarType();
+      MVT BaseTy = getScalarType();
       assert(BaseTy.isInteger() && "Not an integer or vector of integer MVT!");
       assert((BaseTy != MVT::LAST_INTEGER_VALUETYPE) &&
              "Widening of this Integer type not supported !");
diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp
index 6b5e5ef1a3c81..dede9622fafe4 100644
--- a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp
@@ -1067,8 +1067,7 @@ SDValue HexagonTargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
   if (OpTy == MVT::v2i16 || OpTy == MVT::v4i8) {
     MVT ElemTy = OpTy.getVectorElementType();
     assert(ElemTy.isScalarInteger());
-    MVT WideTy = MVT::getVectorVT(MVT::getIntegerVT(2*ElemTy.getSizeInBits()),
-                                  OpTy.getVectorNumElements());
+    MVT WideTy = OpTy.widenIntegerElementType();
     return DAG.getSetCC(dl, ResTy,
                         DAG.getSExtOrTrunc(LHS, SDLoc(LHS), WideTy),
                         DAG.getSExtOrTrunc(RHS, SDLoc(RHS), WideTy), CC);
@@ -1125,8 +1124,7 @@ HexagonTargetLowering::LowerVSELECT(SDValue Op, SelectionDAG &DAG) const {
   if (OpTy == MVT::v2i16 || OpTy == MVT::v4i8) {
     MVT ElemTy = OpTy.getVectorElementType();
     assert(ElemTy.isScalarInteger());
-    MVT WideTy = MVT::getVectorVT(MVT::getIntegerVT(2*ElemTy.getSizeInBits()),
-                                  OpTy.getVectorNumElements());
+    MVT WideTy = OpTy.widenIntegerElementType();
     // Generate (trunc (select (_, sext, sext))).
     return DAG.getSExtOrTrunc(
               DAG.getSelect(dl, WideTy, PredOp,
@@ -2856,16 +2854,15 @@ HexagonTargetLowering::getCombine(SDValue Hi, SDValue Lo, const SDLoc &dl,
 
   if (!ElemTy.isVector()) {
     assert(ElemTy.isScalarInteger());
-    MVT PairTy = MVT::getIntegerVT(2 * ElemTy.getSizeInBits());
+    MVT PairTy = ElemTy.widenIntegerElementType();
     SDValue Pair = DAG.getNode(ISD::BUILD_PAIR, dl, PairTy, Lo, Hi);
     return DAG.getBitcast(ResTy, Pair);
   }
 
   unsigned Width = ElemTy.getSizeInBits();
   MVT IntTy = MVT::getIntegerVT(Width);
-  MVT PairTy = MVT::getIntegerVT(2 * Width);
   SDValue Pair =
-      DAG.getNode(ISD::BUILD_PAIR, dl, PairTy,
+      DAG.getNode(ISD::BUILD_PAIR, dl, IntTy.widenIntegerElementType(),
                   {DAG.getBitcast(IntTy, Lo), DAG.getBitcast(IntTy, Hi)});
   return DAG.getBitcast(ResTy, Pair);
 }

>From 550611413444aaf541f85198d46580c1102c142a Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Tue, 7 Jul 2026 15:15:57 +0530
Subject: [PATCH 11/12] code refactoring. adding one more assert.

---
 llvm/include/llvm/CodeGenTypes/MachineValueType.h | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
index d24208d7c0432..7be67958cfdf9 100644
--- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h
+++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h
@@ -278,11 +278,12 @@ namespace llvm {
       assert(BaseTy.isInteger() && "Not an integer or vector of integer MVT!");
       assert((BaseTy != MVT::LAST_INTEGER_VALUETYPE) &&
              "Widening of this Integer type not supported !");
-
-      MVT ResTy =
-          changeElementType(getIntegerVT(BaseTy.getScalarSizeInBits() * 2));
-      assert(ResTy != MVT::INVALID_SIMPLE_VALUE_TYPE &&
-             "Failed to widened to a valid MVT!");
+      MVT SclTy = getIntegerVT(BaseTy.getScalarSizeInBits() * 2);
+      assert((SclTy != MVT::INVALID_SIMPLE_VALUE_TYPE) &&
+             "Failed to widen to a valid scalar MVT!");
+      MVT ResTy = changeElementType(SclTy);
+      assert((ResTy != MVT::INVALID_SIMPLE_VALUE_TYPE) &&
+             "Failed to widen to a valid vector MVT!");
       return ResTy;
     }
 

>From 2fe0844b3ad82e2067082635b20b09fce58e5a29 Mon Sep 17 00:00:00 2001
From: chirag <chirag198838 at gmail.com>
Date: Wed, 8 Jul 2026 02:12:42 +0530
Subject: [PATCH 12/12] removing unittest testcase.

---
 .../CodeGen/ScalableVectorMVTsTest.cpp        | 30 -------------------
 1 file changed, 30 deletions(-)

diff --git a/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp b/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp
index 032a9c74ba17a..c343465ae4c72 100644
--- a/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp
+++ b/llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp
@@ -194,34 +194,4 @@ TEST(ScalableVectorMVTsTest, SizeQueries) {
             nxv2i32.getSizeInBits());
 }
 
-TEST(ScalableVectorMVTsTest, WideningIntegerMVTs) {
-  MVT i1Ty = MVT::i1;
-  MVT i2Ty = MVT::i2;
-  MVT i4Ty = MVT::i4;
-  MVT i8Ty = MVT::i8;
-  MVT i16Ty = MVT::i16;
-  MVT i32Ty = MVT::i32;
-  MVT i64Ty = MVT::i64;
-  MVT i128Ty = MVT::i128;
-  MVT i256Ty = MVT::i256;
-  MVT i512Ty = MVT::i512;
-
-  EXPECT_EQ(i1Ty.widenIntegerElementType(), i2Ty);
-  EXPECT_EQ(i2Ty.widenIntegerElementType(), i4Ty);
-  EXPECT_EQ(i4Ty.widenIntegerElementType(), i8Ty);
-  EXPECT_EQ(i8Ty.widenIntegerElementType(), i16Ty);
-  EXPECT_EQ(i16Ty.widenIntegerElementType(), i32Ty);
-  EXPECT_EQ(i32Ty.widenIntegerElementType(), i64Ty);
-  EXPECT_EQ(i64Ty.widenIntegerElementType(), i128Ty);
-  EXPECT_EQ(i128Ty.widenIntegerElementType(), i256Ty);
-  EXPECT_EQ(i256Ty.widenIntegerElementType(), i512Ty);
-
-  MVT v128i1Ty = MVT::v128i1;
-  MVT v128i2Ty = MVT::v128i2;
-  MVT v8i32Ty = MVT::v8i32;
-  MVT v8i64Ty = MVT::v8i64;
-
-  EXPECT_EQ(v128i1Ty.widenIntegerElementType(), v128i2Ty);
-  EXPECT_EQ(v8i32Ty.widenIntegerElementType(), v8i64Ty);
-}
 } // end anonymous namespace



More information about the llvm-commits mailing list