From 25cbc66fb6931c346b7118599fb98a6158548908 Mon Sep 17 00:00:00 2001 From: Kyle Wang Date: Fri, 15 Aug 2025 00:13:52 +0000 Subject: [PATCH 1/6] 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(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 Date: Fri, 15 Aug 2025 13:53:08 -0500 Subject: [PATCH 2/6] 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(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 Date: Sat, 16 Aug 2025 18:56:41 -0500 Subject: [PATCH 3/6] 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(U); @@ -1819,18 +1821,16 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) { Value *GEP = Builder.CreateInBoundsGEP(VecTy, Ptr, {Builder.getInt32(0), Idx}); auto *NewLoad = cast(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(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 Date: Sat, 16 Aug 2025 19:02:14 -0500 Subject: [PATCH 4/6] 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 DisableVectorCombine( - "disable-vector-combine", cl::init(false), cl::Hidden, - cl::desc("Disable all vector combine transforms")); +static cl::opt + DisableVectorCombine("disable-vector-combine", cl::init(false), cl::Hidden, + cl::desc("Disable all vector combine transforms")); static cl::opt 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 FunctionalOpcode = - VPI.getFunctionalOpcode(); + std::optional FunctionalOpcode = VPI.getFunctionalOpcode(); std::optional 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(Builder.CreateLoad( - ElemType, GEP, EI->getName() + ".scalar")); + auto *NewLoad = cast( + 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(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 Date: Sun, 17 Aug 2025 02:53:08 -0500 Subject: [PATCH 5/6] 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 - DisableVectorCombine("disable-vector-combine", cl::init(false), cl::Hidden, +static cl::opt DisableVectorCombine( + "disable-vector-combine", cl::init(false), cl::Hidden, cl::desc("Disable all vector combine transforms")); static cl::opt DisableBinopExtractShuffle( @@ -1074,7 +1074,8 @@ bool VectorCombine::scalarizeVPIntrinsic(Instruction &I) { InstructionCost OldCost = 2 * SplatCost + VectorOpCost; // Determine scalar opcode - std::optional FunctionalOpcode = VPI.getFunctionalOpcode(); + std::optional FunctionalOpcode = + VPI.getFunctionalOpcode(); std::optional 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]]} From 8dd44677a4d44bbb7c5caa40a72a71b254456f88 Mon Sep 17 00:00:00 2001 From: Kyle Wang Date: Sun, 17 Aug 2025 02:58:43 -0500 Subject: [PATCH 6/6] fix lint --- llvm/lib/Transforms/Vectorize/VectorCombine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp index 039bb913b9c49..3abb8a6434129 100644 --- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp +++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp @@ -58,7 +58,7 @@ STATISTIC(NumScalarIntrinsic, "Number of scalar intrinsic calls formed"); static cl::opt DisableVectorCombine( "disable-vector-combine", cl::init(false), cl::Hidden, - cl::desc("Disable all vector combine transforms")); + cl::desc("Disable all vector combine transforms")); static cl::opt DisableBinopExtractShuffle( "disable-binop-extract-shuffle", cl::init(false), cl::Hidden,