diff --git a/llvm/test/MC/Mips/micromips32r6/valid.s b/llvm/test/MC/Mips/micromips32r6/valid.s index b6af2b951c77c..35eef58ae482d 100644 --- a/llvm/test/MC/Mips/micromips32r6/valid.s +++ b/llvm/test/MC/Mips/micromips32r6/valid.s @@ -85,7 +85,7 @@ # CHECK-NEXT: # RHS.RequiredFeatures.size(); + // Sort by the alphabetical naming of the required features. + for (unsigned i = 0, e = RequiredFeatures.size(); i != e; ++i) { + if (RequiredFeatures[i]->TheDef->getName() < + RHS.RequiredFeatures[i]->TheDef->getName()) + return true; + if (RHS.RequiredFeatures[i]->TheDef->getName() < + RequiredFeatures[i]->TheDef->getName()) + return false; + } + return false; } @@ -689,7 +699,21 @@ struct MatchableInfo { HasGT = true; } - return HasLT == HasGT; + if (HasLT != HasGT) + return false; + + // Check if can distringuish by the alphabetical ordering of features. + if (RequiredFeatures.size() != RHS.RequiredFeatures.size()) + return false; + for (unsigned i = 0, e = RequiredFeatures.size(); i != e; ++i) { + if (RequiredFeatures[i]->TheDef->getName() < + RHS.RequiredFeatures[i]->TheDef->getName() || + RHS.RequiredFeatures[i]->TheDef->getName() < + RequiredFeatures[i]->TheDef->getName()) + return false; + } + + return true; } void dump() const;