diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp index 102460631379..4cdd3d553eb4 100644 --- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp @@ -399,6 +399,21 @@ adderGenerator(const int32_t From, const int32_t To, const int32_t StepSize) { }; } +// Move to the next generator if it is exhausted allowing to chain generators +CombinerHelper::GeneratorType +concatGenerators(SmallVector &Generators) { + auto *GeneratorIterator = Generators.begin(); + + return [GeneratorIterator, Generators]() mutable { + std::optional GenValue = (*GeneratorIterator)(); + if (!GenValue.has_value() && GeneratorIterator != Generators.end()) { + GeneratorIterator++; + GenValue = (*GeneratorIterator)(); + } + return GenValue; + }; +} + Register CombinerHelper::createUnmergeValue( MachineInstr &MI, const Register SrcReg, const Register DstReg, const uint8_t DestinationIndex, const uint32_t Start, const uint32_t End) {