[llvm] [VectorCombine] Preserve scoped alias metadata (PR #153714)

Kyle Wang via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 17 00:53:24 PDT 2025


https://github.com/knwng updated https://github.com/llvm/llvm-project/pull/153714

>From 25cbc66fb6931c346b7118599fb98a6158548908 Mon Sep 17 00:00:00 2001
From: Kyle Wang <ec1wng at gmail.com>
Date: Fri, 15 Aug 2025 00:13:52 +0000
Subject: [PATCH 1/5] Make VectorCombine Pass Alias Info

---
 llvm/lib/Transforms/Vectorize/VectorCombine.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
index 4a681cbdab8ca..587889873a778 100644
--- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
@@ -1811,6 +1811,10 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
   // erased in the correct order.
   Worklist.push(LI);
 
+  LLVMContext &ctx = LI->getContext();
+  unsigned aliasScopeKind = ctx.getMDKindID("alias.scope");
+  unsigned noAliasKind = ctx.getMDKindID("noalias");
+
   // Replace extracts with narrow scalar loads.
   for (User *U : LI->users()) {
     auto *EI = cast<ExtractElementInst>(U);
@@ -1831,6 +1835,14 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
         LI->getAlign(), VecTy->getElementType(), Idx, *DL);
     NewLoad->setAlignment(ScalarOpAlignment);
 
+    if (MDNode *aliasScope = LI->getMetadata(aliasScopeKind)) {
+      NewLoad->setMetadata(aliasScopeKind, aliasScope);
+    }
+
+    if (MDNode *noAlias = LI->getMetadata(noAliasKind)) {
+      NewLoad->setMetadata(noAliasKind, noAlias);
+    }
+
     replaceValue(*EI, *NewLoad);
   }
 

>From adce7479712bc329a2453efc5fcdf999587b646f Mon Sep 17 00:00:00 2001
From: Kyle Wang <ec1wng at gmail.com>
Date: Fri, 15 Aug 2025 13:53:08 -0500
Subject: [PATCH 2/5] add test; address comments

---
 .../Transforms/Vectorize/VectorCombine.cpp    | 12 ++---
 llvm/test/Transforms/VectorCombine/alias.ll   | 49 +++++++++++++++++++
 2 files changed, 53 insertions(+), 8 deletions(-)
 create mode 100644 llvm/test/Transforms/VectorCombine/alias.ll

diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
index bfb71bc9c8294..c0d5d0cee6916 100644
--- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
@@ -1805,10 +1805,6 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
   // erased in the correct order.
   Worklist.push(LI);
 
-  LLVMContext &ctx = LI->getContext();
-  unsigned aliasScopeKind = ctx.getMDKindID("alias.scope");
-  unsigned noAliasKind = ctx.getMDKindID("noalias");
-
   // Replace extracts with narrow scalar loads.
   for (User *U : LI->users()) {
     auto *EI = cast<ExtractElementInst>(U);
@@ -1829,12 +1825,12 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
         LI->getAlign(), VecTy->getElementType(), Idx, *DL);
     NewLoad->setAlignment(ScalarOpAlignment);
 
-    if (MDNode *aliasScope = LI->getMetadata(aliasScopeKind)) {
-      NewLoad->setMetadata(aliasScopeKind, aliasScope);
+    if (MDNode *aliasScope = LI->getMetadata(LLVMContext::MD_alias_scope)) {
+      NewLoad->setMetadata(LLVMContext::MD_alias_scope, aliasScope);
     }
 
-    if (MDNode *noAlias = LI->getMetadata(noAliasKind)) {
-      NewLoad->setMetadata(noAliasKind, noAlias);
+    if (MDNode *noAlias = LI->getMetadata(LLVMContext::MD_noalias)) {
+      NewLoad->setMetadata(LLVMContext::MD_noalias, noAlias);
     }
 
     replaceValue(*EI, *NewLoad);
diff --git a/llvm/test/Transforms/VectorCombine/alias.ll b/llvm/test/Transforms/VectorCombine/alias.ll
new file mode 100644
index 0000000000000..e4cfb33e7a534
--- /dev/null
+++ b/llvm/test/Transforms/VectorCombine/alias.ll
@@ -0,0 +1,49 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt < %s -passes=vector-combine -S | FileCheck %s --check-prefixes=CHECK
+
+define <4 x i32> @quux(ptr addrspace(3) %arg) {
+; CHECK-LABEL: define <4 x i32> @quux(
+; CHECK-SAME: ptr addrspace(3) [[ARG:%.*]]) {
+; CHECK-NEXT:  [[BB:.*:]]
+; CHECK-NEXT:    [[EXTRACTELEMENT:%.*]] = load i8, ptr addrspace(3) [[ARG]], align 4, !alias.scope [[META0:![0-9]+]], !noalias [[META0]]
+; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i32 0, i64 1
+; CHECK-NEXT:    [[EXTRACTELEMENT1:%.*]] = load i8, ptr addrspace(3) [[TMP0]], align 1, !alias.scope [[META0]], !noalias [[META0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i32 0, i64 2
+; CHECK-NEXT:    [[EXTRACTELEMENT2:%.*]] = load i8, ptr addrspace(3) [[TMP1]], align 2, !alias.scope [[META0]], !noalias [[META0]]
+; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i32 0, i64 3
+; CHECK-NEXT:    [[EXTRACTELEMENT3:%.*]] = load i8, ptr addrspace(3) [[TMP2]], align 1, !alias.scope [[META0]], !noalias [[META0]]
+; CHECK-NEXT:    [[ZEXT:%.*]] = zext i8 [[EXTRACTELEMENT]] to i32
+; CHECK-NEXT:    [[ZEXT4:%.*]] = zext i8 [[EXTRACTELEMENT1]] to i32
+; CHECK-NEXT:    [[ZEXT5:%.*]] = zext i8 [[EXTRACTELEMENT2]] to i32
+; CHECK-NEXT:    [[ZEXT6:%.*]] = zext i8 [[EXTRACTELEMENT3]] to i32
+; CHECK-NEXT:    [[INSERTELEMENT:%.*]] = insertelement <4 x i32> poison, i32 [[ZEXT]], i64 0
+; CHECK-NEXT:    [[INSERTELEMENT7:%.*]] = insertelement <4 x i32> [[INSERTELEMENT]], i32 [[ZEXT4]], i64 1
+; CHECK-NEXT:    [[INSERTELEMENT8:%.*]] = insertelement <4 x i32> [[INSERTELEMENT7]], i32 [[ZEXT5]], i64 2
+; CHECK-NEXT:    [[INSERTELEMENT9:%.*]] = insertelement <4 x i32> [[INSERTELEMENT8]], i32 [[ZEXT6]], i64 3
+; CHECK-NEXT:    ret <4 x i32> [[INSERTELEMENT9]]
+;
+bb:
+  %load = load <4 x i8>, ptr addrspace(3) %arg, align 4, !alias.scope !0, !noalias !0
+  %extractelement = extractelement <4 x i8> %load, i64 0
+  %extractelement1 = extractelement <4 x i8> %load, i64 1
+  %extractelement2 = extractelement <4 x i8> %load, i64 2
+  %extractelement3 = extractelement <4 x i8> %load, i64 3
+  %zext = zext i8 %extractelement to i32
+  %zext4 = zext i8 %extractelement1 to i32
+  %zext5 = zext i8 %extractelement2 to i32
+  %zext6 = zext i8 %extractelement3 to i32
+  %insertelement = insertelement <4 x i32> poison, i32 %zext, i64 0
+  %insertelement7 = insertelement <4 x i32> %insertelement, i32 %zext4, i64 1
+  %insertelement8 = insertelement <4 x i32> %insertelement7, i32 %zext5, i64 2
+  %insertelement9 = insertelement <4 x i32> %insertelement8, i32 %zext6, i64 3
+  ret <4 x i32> %insertelement9
+}
+
+!0 = !{!1}
+!1 = distinct !{!1, !2}
+!2 = distinct !{!2}
+;.
+; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
+; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
+; CHECK: [[META2]] = distinct !{[[META2]]}
+;.
\ No newline at end of file

>From 2148978da8849ff5ada136d70a6e3b48f87fbde7 Mon Sep 17 00:00:00 2001
From: Kyle Wang <ec1wng at gmail.com>
Date: Sat, 16 Aug 2025 18:56:41 -0500
Subject: [PATCH 3/5] address comments

---
 llvm/lib/Transforms/Vectorize/VectorCombine.cpp | 16 ++++++++--------
 llvm/test/Transforms/VectorCombine/alias.ll     | 13 ++++++++-----
 2 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
index c0d5d0cee6916..afed1456bfe3b 100644
--- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
@@ -1805,6 +1805,8 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
   // erased in the correct order.
   Worklist.push(LI);
 
+  Type *ElemType = VecTy->getElementType();
+
   // Replace extracts with narrow scalar loads.
   for (User *U : LI->users()) {
     auto *EI = cast<ExtractElementInst>(U);
@@ -1819,18 +1821,16 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
     Value *GEP =
         Builder.CreateInBoundsGEP(VecTy, Ptr, {Builder.getInt32(0), Idx});
     auto *NewLoad = cast<LoadInst>(Builder.CreateLoad(
-        VecTy->getElementType(), GEP, EI->getName() + ".scalar"));
+        ElemType, GEP, EI->getName() + ".scalar"));
 
     Align ScalarOpAlignment = computeAlignmentAfterScalarization(
-        LI->getAlign(), VecTy->getElementType(), Idx, *DL);
+        LI->getAlign(), ElemType, Idx, *DL);
     NewLoad->setAlignment(ScalarOpAlignment);
 
-    if (MDNode *aliasScope = LI->getMetadata(LLVMContext::MD_alias_scope)) {
-      NewLoad->setMetadata(LLVMContext::MD_alias_scope, aliasScope);
-    }
-
-    if (MDNode *noAlias = LI->getMetadata(LLVMContext::MD_noalias)) {
-      NewLoad->setMetadata(LLVMContext::MD_noalias, noAlias);
+    if (auto *ConstIdx = dyn_cast<ConstantInt>(Idx)) {
+      size_t Offset = ConstIdx->getZExtValue() * DL->getTypeStoreSize(ElemType);
+      AAMDNodes OldAAMD = LI->getAAMetadata();
+      NewLoad->setAAMetadata(OldAAMD.adjustForAccess(Offset, ElemType, *DL));
     }
 
     replaceValue(*EI, *NewLoad);
diff --git a/llvm/test/Transforms/VectorCombine/alias.ll b/llvm/test/Transforms/VectorCombine/alias.ll
index e4cfb33e7a534..d4f761fda4a90 100644
--- a/llvm/test/Transforms/VectorCombine/alias.ll
+++ b/llvm/test/Transforms/VectorCombine/alias.ll
@@ -5,13 +5,13 @@ define <4 x i32> @quux(ptr addrspace(3) %arg) {
 ; CHECK-LABEL: define <4 x i32> @quux(
 ; CHECK-SAME: ptr addrspace(3) [[ARG:%.*]]) {
 ; CHECK-NEXT:  [[BB:.*:]]
-; CHECK-NEXT:    [[EXTRACTELEMENT:%.*]] = load i8, ptr addrspace(3) [[ARG]], align 4, !alias.scope [[META0:![0-9]+]], !noalias [[META0]]
+; CHECK-NEXT:    [[EXTRACTELEMENT:%.*]] = load i8, ptr addrspace(3) [[ARG]], align 4, !tbaa [[TBAA0:![0-9]+]], !alias.scope [[META0:![0-9]+]], !noalias [[META0]]
 ; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i32 0, i64 1
-; CHECK-NEXT:    [[EXTRACTELEMENT1:%.*]] = load i8, ptr addrspace(3) [[TMP0]], align 1, !alias.scope [[META0]], !noalias [[META0]]
+; CHECK-NEXT:    [[EXTRACTELEMENT1:%.*]] = load i8, ptr addrspace(3) [[TMP0]], align 1, !tbaa [[TBAA0]], !alias.scope [[META0]], !noalias [[META0]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i32 0, i64 2
-; CHECK-NEXT:    [[EXTRACTELEMENT2:%.*]] = load i8, ptr addrspace(3) [[TMP1]], align 2, !alias.scope [[META0]], !noalias [[META0]]
+; CHECK-NEXT:    [[EXTRACTELEMENT2:%.*]] = load i8, ptr addrspace(3) [[TMP1]], align 2, !tbaa [[TBAA0]], !alias.scope [[META0]], !noalias [[META0]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i32 0, i64 3
-; CHECK-NEXT:    [[EXTRACTELEMENT3:%.*]] = load i8, ptr addrspace(3) [[TMP2]], align 1, !alias.scope [[META0]], !noalias [[META0]]
+; CHECK-NEXT:    [[EXTRACTELEMENT3:%.*]] = load i8, ptr addrspace(3) [[TMP2]], align 1, !tbaa [[TBAA0]], !alias.scope [[META0]], !noalias [[META0]]
 ; CHECK-NEXT:    [[ZEXT:%.*]] = zext i8 [[EXTRACTELEMENT]] to i32
 ; CHECK-NEXT:    [[ZEXT4:%.*]] = zext i8 [[EXTRACTELEMENT1]] to i32
 ; CHECK-NEXT:    [[ZEXT5:%.*]] = zext i8 [[EXTRACTELEMENT2]] to i32
@@ -23,7 +23,7 @@ define <4 x i32> @quux(ptr addrspace(3) %arg) {
 ; CHECK-NEXT:    ret <4 x i32> [[INSERTELEMENT9]]
 ;
 bb:
-  %load = load <4 x i8>, ptr addrspace(3) %arg, align 4, !alias.scope !0, !noalias !0
+  %load = load <4 x i8>, ptr addrspace(3) %arg, align 4, !alias.scope !0, !noalias !0, !tbaa !5
   %extractelement = extractelement <4 x i8> %load, i64 0
   %extractelement1 = extractelement <4 x i8> %load, i64 1
   %extractelement2 = extractelement <4 x i8> %load, i64 2
@@ -42,6 +42,9 @@ bb:
 !0 = !{!1}
 !1 = distinct !{!1, !2}
 !2 = distinct !{!2}
+!3 = !{!"Simple C/C++ TBAA"}
+!4 = !{!"omnipotent char", !3, i64 0}
+!5 = !{!"i8", !4, i64 0}
 ;.
 ; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
 ; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}

>From 6574cf4ddbf8ef558eff2e3976fb4fbad6cdfd88 Mon Sep 17 00:00:00 2001
From: Kyle Wang <ec1wng at gmail.com>
Date: Sat, 16 Aug 2025 19:02:14 -0500
Subject: [PATCH 4/5] fix lint

---
 .../Transforms/Vectorize/VectorCombine.cpp    | 26 +++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
index afed1456bfe3b..1d791780b3014 100644
--- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
@@ -56,9 +56,9 @@ STATISTIC(NumScalarOps, "Number of scalar unary + binary ops formed");
 STATISTIC(NumScalarCmp, "Number of scalar compares formed");
 STATISTIC(NumScalarIntrinsic, "Number of scalar intrinsic calls formed");
 
-static cl::opt<bool> DisableVectorCombine(
-    "disable-vector-combine", cl::init(false), cl::Hidden,
-    cl::desc("Disable all vector combine transforms"));
+static cl::opt<bool>
+    DisableVectorCombine("disable-vector-combine", cl::init(false), cl::Hidden,
+                         cl::desc("Disable all vector combine transforms"));
 
 static cl::opt<bool> DisableBinopExtractShuffle(
     "disable-binop-extract-shuffle", cl::init(false), cl::Hidden,
@@ -1074,8 +1074,7 @@ bool VectorCombine::scalarizeVPIntrinsic(Instruction &I) {
   InstructionCost OldCost = 2 * SplatCost + VectorOpCost;
 
   // Determine scalar opcode
-  std::optional<unsigned> FunctionalOpcode =
-      VPI.getFunctionalOpcode();
+  std::optional<unsigned> FunctionalOpcode = VPI.getFunctionalOpcode();
   std::optional<Intrinsic::ID> ScalarIntrID = std::nullopt;
   if (!FunctionalOpcode) {
     ScalarIntrID = VPI.getFunctionalIntrinsicID();
@@ -1098,8 +1097,7 @@ bool VectorCombine::scalarizeVPIntrinsic(Instruction &I) {
       (SplatCost * !Op0->hasOneUse()) + (SplatCost * !Op1->hasOneUse());
   InstructionCost NewCost = ScalarOpCost + SplatCost + CostToKeepSplats;
 
-  LLVM_DEBUG(dbgs() << "Found a VP Intrinsic to scalarize: " << VPI
-                    << "\n");
+  LLVM_DEBUG(dbgs() << "Found a VP Intrinsic to scalarize: " << VPI << "\n");
   LLVM_DEBUG(dbgs() << "Cost of Intrinsic: " << OldCost
                     << ", Cost of scalarizing:" << NewCost << "\n");
 
@@ -1820,11 +1818,11 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
     Builder.SetInsertPoint(EI);
     Value *GEP =
         Builder.CreateInBoundsGEP(VecTy, Ptr, {Builder.getInt32(0), Idx});
-    auto *NewLoad = cast<LoadInst>(Builder.CreateLoad(
-        ElemType, GEP, EI->getName() + ".scalar"));
+    auto *NewLoad = cast<LoadInst>(
+        Builder.CreateLoad(ElemType, GEP, EI->getName() + ".scalar"));
 
-    Align ScalarOpAlignment = computeAlignmentAfterScalarization(
-        LI->getAlign(), ElemType, Idx, *DL);
+    Align ScalarOpAlignment =
+        computeAlignmentAfterScalarization(LI->getAlign(), ElemType, Idx, *DL);
     NewLoad->setAlignment(ScalarOpAlignment);
 
     if (auto *ConstIdx = dyn_cast<ConstantInt>(Idx)) {
@@ -2078,10 +2076,12 @@ bool VectorCombine::foldPermuteOfBinops(Instruction &I) {
   }
 
   unsigned NumOpElts = Op0Ty->getNumElements();
-  bool IsIdentity0 = ShuffleDstTy == Op0Ty &&
+  bool IsIdentity0 =
+      ShuffleDstTy == Op0Ty &&
       all_of(NewMask0, [NumOpElts](int M) { return M < (int)NumOpElts; }) &&
       ShuffleVectorInst::isIdentityMask(NewMask0, NumOpElts);
-  bool IsIdentity1 = ShuffleDstTy == Op1Ty &&
+  bool IsIdentity1 =
+      ShuffleDstTy == Op1Ty &&
       all_of(NewMask1, [NumOpElts](int M) { return M < (int)NumOpElts; }) &&
       ShuffleVectorInst::isIdentityMask(NewMask1, NumOpElts);
 

>From 9f4a0a0a172875f5261ece1911222c11f43d5c81 Mon Sep 17 00:00:00 2001
From: Kyle Wang <ec1wng at gmail.com>
Date: Sun, 17 Aug 2025 02:53:08 -0500
Subject: [PATCH 5/5] fix lint and test

---
 llvm/lib/Transforms/Vectorize/VectorCombine.cpp | 16 ++++++++--------
 llvm/test/Transforms/VectorCombine/alias.ll     |  4 ++++
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
index 1d791780b3014..039bb913b9c49 100644
--- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
@@ -56,8 +56,8 @@ STATISTIC(NumScalarOps, "Number of scalar unary + binary ops formed");
 STATISTIC(NumScalarCmp, "Number of scalar compares formed");
 STATISTIC(NumScalarIntrinsic, "Number of scalar intrinsic calls formed");
 
-static cl::opt<bool>
-    DisableVectorCombine("disable-vector-combine", cl::init(false), cl::Hidden,
+static cl::opt<bool> DisableVectorCombine(
+    "disable-vector-combine", cl::init(false), cl::Hidden,
                          cl::desc("Disable all vector combine transforms"));
 
 static cl::opt<bool> DisableBinopExtractShuffle(
@@ -1074,7 +1074,8 @@ bool VectorCombine::scalarizeVPIntrinsic(Instruction &I) {
   InstructionCost OldCost = 2 * SplatCost + VectorOpCost;
 
   // Determine scalar opcode
-  std::optional<unsigned> FunctionalOpcode = VPI.getFunctionalOpcode();
+  std::optional<unsigned> FunctionalOpcode =
+      VPI.getFunctionalOpcode();
   std::optional<Intrinsic::ID> ScalarIntrID = std::nullopt;
   if (!FunctionalOpcode) {
     ScalarIntrID = VPI.getFunctionalIntrinsicID();
@@ -1097,7 +1098,8 @@ bool VectorCombine::scalarizeVPIntrinsic(Instruction &I) {
       (SplatCost * !Op0->hasOneUse()) + (SplatCost * !Op1->hasOneUse());
   InstructionCost NewCost = ScalarOpCost + SplatCost + CostToKeepSplats;
 
-  LLVM_DEBUG(dbgs() << "Found a VP Intrinsic to scalarize: " << VPI << "\n");
+  LLVM_DEBUG(dbgs() << "Found a VP Intrinsic to scalarize: " << VPI
+                    << "\n");
   LLVM_DEBUG(dbgs() << "Cost of Intrinsic: " << OldCost
                     << ", Cost of scalarizing:" << NewCost << "\n");
 
@@ -2076,12 +2078,10 @@ bool VectorCombine::foldPermuteOfBinops(Instruction &I) {
   }
 
   unsigned NumOpElts = Op0Ty->getNumElements();
-  bool IsIdentity0 =
-      ShuffleDstTy == Op0Ty &&
+  bool IsIdentity0 = ShuffleDstTy == Op0Ty &&
       all_of(NewMask0, [NumOpElts](int M) { return M < (int)NumOpElts; }) &&
       ShuffleVectorInst::isIdentityMask(NewMask0, NumOpElts);
-  bool IsIdentity1 =
-      ShuffleDstTy == Op1Ty &&
+  bool IsIdentity1 = ShuffleDstTy == Op1Ty &&
       all_of(NewMask1, [NumOpElts](int M) { return M < (int)NumOpElts; }) &&
       ShuffleVectorInst::isIdentityMask(NewMask1, NumOpElts);
 
diff --git a/llvm/test/Transforms/VectorCombine/alias.ll b/llvm/test/Transforms/VectorCombine/alias.ll
index d4f761fda4a90..459956cd997d8 100644
--- a/llvm/test/Transforms/VectorCombine/alias.ll
+++ b/llvm/test/Transforms/VectorCombine/alias.ll
@@ -46,6 +46,10 @@ bb:
 !4 = !{!"omnipotent char", !3, i64 0}
 !5 = !{!"i8", !4, i64 0}
 ;.
+; CHECK: [[TBAA0]] = !{[[META3:![0-9]+]], [[META3]], i64 0, i64 0}
+; CHECK: [[META3]] = !{!"i8", [[META4:![0-9]+]]}
+; CHECK: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}
+; CHECK: [[META5]] = !{!"Simple C/C++ TBAA"}
 ; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
 ; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
 ; CHECK: [[META2]] = distinct !{[[META2]]}



More information about the llvm-commits mailing list