@@ -1015,6 +1015,7 @@ void LoopTreeOptimization::hoistLoadsAndStores(SILValue addr, SILLoop *loop, Ins
1015
1015
SILBuilder B (preheader->getTerminator ());
1016
1016
auto *initialLoad = B.createLoad (preheader->getTerminator ()->getLoc (), addr,
1017
1017
LoadOwnershipQualifier::Unqualified);
1018
+ LLVM_DEBUG (llvm::dbgs () << " Creating preload " << *initialLoad);
1018
1019
1019
1020
SILSSAUpdater ssaUpdater;
1020
1021
ssaUpdater.Initialize (initialLoad->getType ());
@@ -1047,6 +1048,7 @@ void LoopTreeOptimization::hoistLoadsAndStores(SILValue addr, SILLoop *loop, Ins
1047
1048
currentVal = SILValue ();
1048
1049
}
1049
1050
if (auto *SI = isStoreToAddr (I, addr)) {
1051
+ LLVM_DEBUG (llvm::dbgs () << " Deleting reloaded store " << *SI);
1050
1052
currentVal = SI->getSrc ();
1051
1053
toDelete.push_back (SI);
1052
1054
} else if (auto *LI = isLoadFromAddr (I, addr)) {
@@ -1056,6 +1058,8 @@ void LoopTreeOptimization::hoistLoadsAndStores(SILValue addr, SILLoop *loop, Ins
1056
1058
currentVal = ssaUpdater.GetValueInMiddleOfBlock (block);
1057
1059
SILValue projectedValue = projectLoadValue (LI->getOperand (), addr,
1058
1060
currentVal, LI);
1061
+ LLVM_DEBUG (llvm::dbgs () << " Replacing stored load " << *LI << " with "
1062
+ << projectedValue);
1059
1063
LI->replaceAllUsesWith (projectedValue);
1060
1064
toDelete.push_back (LI);
1061
1065
}
@@ -1068,8 +1072,11 @@ void LoopTreeOptimization::hoistLoadsAndStores(SILValue addr, SILLoop *loop, Ins
1068
1072
assert (succ->getSinglePredecessorBlock () &&
1069
1073
" should have split critical edges" );
1070
1074
SILBuilder B (succ->begin ());
1071
- B.createStore (loc.getValue (), ssaUpdater.GetValueInMiddleOfBlock (succ),
1072
- addr, StoreOwnershipQualifier::Unqualified);
1075
+ auto *SI = B.createStore (loc.getValue (),
1076
+ ssaUpdater.GetValueInMiddleOfBlock (succ),
1077
+ addr, StoreOwnershipQualifier::Unqualified);
1078
+ (void )SI;
1079
+ LLVM_DEBUG (llvm::dbgs () << " Creating loop-exit store " << *SI);
1073
1080
}
1074
1081
}
1075
1082
}
0 commit comments