[llvm] [GlobalISel] LegalizationArtifactCombiner for merge-unmerge->unmerge where src and dst of result would be different scalar/vector types (PR #213086)

Petar Avramovic via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 4 02:05:08 PDT 2026


================
@@ -1016,14 +1017,22 @@ class LegalizationArtifactCombiner {
       // %AnotherDst:_(DstTy) = G_merge_like_opcode %2:_(EltTy), %3
       //
       // %Dst:_(DstTy), %AnotherDst = G_UNMERGE_VALUES %UnmergeSrc
-      if (((!DstTy.isVector() && !UnmergeSrcTy.isVector()) ||
-           (DstTy.isVector() && UnmergeSrcTy.isVector() &&
+      if ((!DstTy.isVector() ||
+           (UnmergeSrcTy.isVector() &&
             DstTy.getScalarType() == UnmergeSrcTy.getScalarType())) &&
           (Elt0UnmergeIdx % NumMIElts == 0) &&
+          (DstTy.getSizeInBits() < UnmergeSrcTy.getSizeInBits()) &&
           getCoverTy(UnmergeSrcTy, DstTy) == UnmergeSrcTy) {
         if (!isSequenceFromUnmerge(MI, 0, Unmerge, Elt0UnmergeIdx, NumMIElts,
                                    EltSize, false))
           return false;
+        if (!DstTy.isVector() && UnmergeSrcTy.isVector()) {
----------------
petar-avramovic wrote:

could we also do this for dst vector and src non-vec ?


https://github.com/llvm/llvm-project/pull/213086


More information about the llvm-commits mailing list