diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2016-03-31 21:55:58 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2016-03-31 21:55:58 +0000 |
commit | e6ec1e3b8f2e8d665badff3f98b92b864ade98c8 (patch) | |
tree | 1ca1b71009f841ac90c1a0ecb3c9a6692b4e8560 /lib/CodeGen/ScheduleDAGInstrs.cpp | |
parent | 99811fe3c48970c968cb4ceb325a0e55f3beb9f0 (diff) |
Fix PR26940 where compiles times regressed massively.
Patch by Jonas Paulsson. Original description:
Bugfix in buildSchedGraph() to make -dag-maps-huge-region work properly
I found that the reduction of the maps did in fact never happen in this
test case. This was because *all* the stores / loads were made with
addresses from arguments and they thus became "unknown" stores / loads.
Fixed by removing continue statements and making sure that the test for
reduction always takes place.
Differential Revision: http://reviews.llvm.org/D18673
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@265063 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/ScheduleDAGInstrs.cpp')
-rw-r--r-- | lib/CodeGen/ScheduleDAGInstrs.cpp | 63 |
1 files changed, 30 insertions, 33 deletions
diff --git a/lib/CodeGen/ScheduleDAGInstrs.cpp b/lib/CodeGen/ScheduleDAGInstrs.cpp index f63c23f88c5..61b636d6868 100644 --- a/lib/CodeGen/ScheduleDAGInstrs.cpp +++ b/lib/CodeGen/ScheduleDAGInstrs.cpp @@ -1025,52 +1025,49 @@ void ScheduleDAGInstrs::buildSchedGraph(AliasAnalysis *AA, // Map this store to 'UnknownValue'. Stores.insert(SU, UnknownValue); - continue; - } - - // Add precise dependencies against all previously seen memory - // accesses mapped to the same Value(s). - for (auto &underlObj : Objs) { - ValueType V = underlObj.getPointer(); - bool ThisMayAlias = underlObj.getInt(); + } else { + // Add precise dependencies against all previously seen memory + // accesses mapped to the same Value(s). + for (auto &underlObj : Objs) { + ValueType V = underlObj.getPointer(); + bool ThisMayAlias = underlObj.getInt(); - Value2SUsMap &stores_ = (ThisMayAlias ? Stores : NonAliasStores); + Value2SUsMap &stores_ = (ThisMayAlias ? Stores : NonAliasStores); - // Add dependencies to previous stores and loads mapped to V. - addChainDependencies(SU, stores_, V); - addChainDependencies(SU, (ThisMayAlias ? Loads : NonAliasLoads), V); + // Add dependencies to previous stores and loads mapped to V. + addChainDependencies(SU, stores_, V); + addChainDependencies(SU, (ThisMayAlias ? Loads : NonAliasLoads), V); - // Map this store to V. - stores_.insert(SU, V); + // Map this store to V. + stores_.insert(SU, V); + } + // The store may have dependencies to unanalyzable loads and + // stores. + addChainDependencies(SU, Loads, UnknownValue); + addChainDependencies(SU, Stores, UnknownValue); } - // The store may have dependencies to unanalyzable loads and - // stores. - addChainDependencies(SU, Loads, UnknownValue); - addChainDependencies(SU, Stores, UnknownValue); - } - else { // SU is a load. + } else { // SU is a load. if (Objs.empty()) { // An unknown load depends on all stores. addChainDependencies(SU, Stores); addChainDependencies(SU, NonAliasStores); Loads.insert(SU, UnknownValue); - continue; - } + } else { + for (auto &underlObj : Objs) { + ValueType V = underlObj.getPointer(); + bool ThisMayAlias = underlObj.getInt(); - for (auto &underlObj : Objs) { - ValueType V = underlObj.getPointer(); - bool ThisMayAlias = underlObj.getInt(); + // Add precise dependencies against all previously seen stores + // mapping to the same Value(s). + addChainDependencies(SU, (ThisMayAlias ? Stores : NonAliasStores), V); - // Add precise dependencies against all previously seen stores - // mapping to the same Value(s). - addChainDependencies(SU, (ThisMayAlias ? Stores : NonAliasStores), V); - - // Map this load to V. - (ThisMayAlias ? Loads : NonAliasLoads).insert(SU, V); + // Map this load to V. + (ThisMayAlias ? Loads : NonAliasLoads).insert(SU, V); + } + // The load may have dependencies to unanalyzable stores. + addChainDependencies(SU, Stores, UnknownValue); } - // The load may have dependencies to unanalyzable stores. - addChainDependencies(SU, Stores, UnknownValue); } // Reduce maps if they grow huge. |