summaryrefslogtreecommitdiff
path: root/lib/CodeGen/ScheduleDAGInstrs.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2016-03-31 21:55:58 +0000
committerChandler Carruth <chandlerc@gmail.com>2016-03-31 21:55:58 +0000
commite6ec1e3b8f2e8d665badff3f98b92b864ade98c8 (patch)
tree1ca1b71009f841ac90c1a0ecb3c9a6692b4e8560 /lib/CodeGen/ScheduleDAGInstrs.cpp
parent99811fe3c48970c968cb4ceb325a0e55f3beb9f0 (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.cpp63
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.