[llvm] r339890 - [TableGen] TypeSetByHwMode::operator== optimization
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 16 09:16:28 PDT 2018
Author: rksimon
Date: Thu Aug 16 09:16:28 2018
New Revision: 339890
URL: http://llvm.org/viewvc/llvm-project?rev=339890&view=rev
Log:
[TableGen] TypeSetByHwMode::operator== optimization
This operator is called a great deal, by checking for the cheap isSimple equality cases first (a common occurrence) we can improve performance as we avoid a lot of std::map find/iteration in hasDefault.
isSimple also means that a default value is present, so we can avoid some hasDefault calls.
This also avoids a rather dodgy piece of logic that was checking for isSimple() && !VTS.isSimple() but not the inverse - it now uses the general hasDefault mode comparison test instead.
Saves around 15secs in debug builds of x86 -gen-dag-isel.
Differential Revision: https://reviews.llvm.org/D50841
Modified:
llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp?rev=339890&r1=339889&r2=339890&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp (original)
+++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Thu Aug 16 09:16:28 2018
@@ -198,15 +198,17 @@ void TypeSetByHwMode::writeToStream(cons
}
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<unsigned, 4> Modes;
for (auto &I : *this)
More information about the llvm-commits
mailing list