From 829f2f2448f53572d097420e0df0f62b11fa0417 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Tue, 1 Jul 2025 21:35:25 +0100 Subject: [PATCH] [VectorCombine] Mark function as changed if shuffle is created. 777d6b5de90b7e0 exposed a code path where a function is modified but not marked accordingly. Make sure we return true from foldShuffleFromReductions if only a shuffle has been inserted/replaced. Should fix https://lab.llvm.org/buildbot/#/builders/187/builds/7578. --- llvm/lib/Transforms/Vectorize/VectorCombine.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp index 9a42ed20d697..b2fced47b952 100644 --- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp +++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp @@ -2979,17 +2979,20 @@ bool VectorCombine::foldShuffleFromReductions(Instruction &I) { << "\n"); LLVM_DEBUG(dbgs() << " OldCost: " << OldCost << " vs NewCost: " << NewCost << "\n"); + bool MadeChanges = false; if (NewCost < OldCost) { Builder.SetInsertPoint(Shuffle); Value *NewShuffle = Builder.CreateShuffleVector( Shuffle->getOperand(0), Shuffle->getOperand(1), ConcatMask); LLVM_DEBUG(dbgs() << "Created new shuffle: " << *NewShuffle << "\n"); replaceValue(*Shuffle, *NewShuffle); + MadeChanges = true; } // See if we can re-use foldSelectShuffle, getting it to reduce the size of // the shuffle into a nicer order, as it can ignore the order of the shuffles. - return foldSelectShuffle(*Shuffle, true); + MadeChanges |= foldSelectShuffle(*Shuffle, true); + return MadeChanges; } /// Determine if its more efficient to fold: