diff --git a/utils/TableGen/CodeGenDAGPatterns.cpp b/utils/TableGen/CodeGenDAGPatterns.cpp index 5bf84da218e..4ef437523d5 100644 --- a/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/utils/TableGen/CodeGenDAGPatterns.cpp @@ -198,15 +198,17 @@ void TypeSetByHwMode::writeToStream(const SetType &S, raw_ostream &OS) { } bool TypeSetByHwMode::operator==(const TypeSetByHwMode &VTS) const { - bool HaveDefault = hasDefault(); - if (HaveDefault != VTS.hasDefault()) - return false; + // The isSimple call is much quicker than hasDefault - check this first. + bool IsSimple = isSimple(); + bool VTSIsSimple = VTS.isSimple(); + if (IsSimple && VTSIsSimple) + return *begin() == *VTS.begin(); - if (isSimple()) { - if (VTS.isSimple()) - return *begin() == *VTS.begin(); + // Speedup: We have a default if the set is simple. + bool HaveDefault = IsSimple || hasDefault(); + bool VTSHaveDefault = VTSIsSimple || VTS.hasDefault(); + if (HaveDefault != VTSHaveDefault) return false; - } SmallDenseSet Modes; for (auto &I : *this)