diff --git a/variablemanager.cpp b/variablemanager.cpp index 43e4adfe5..f25305351 100644 --- a/variablemanager.cpp +++ b/variablemanager.cpp @@ -313,6 +313,20 @@ bool CorrectCPUStateUsagePass::runOnModule(Module& TheModule) { // If the callee was already a specialization, preserve its // specialized arguments if (CurrentSpecialization != Specializations.end()) { + + // Check if we're good with this specialization + bool SpecializationMatches = false; + for (auto &P : CurrentSpecialization->SpecializedArgs) { + if (P.first == TheUse.getOperandNo()) { + assert(P.second == CurrentOffset); + SpecializationMatches = true; + break; + } + } + + if (SpecializationMatches) + continue; + Original = CurrentSpecialization->Original; SpecializedArgs = CurrentSpecialization->SpecializedArgs; }