Skip to content

Commit ea0698f

Browse files
committed
Add comments and fix checking dead instructions
1 parent 7304d5a commit ea0698f

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

lib/SILOptimizer/IPO/GlobalOpt.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ bool SILGlobalOpt::tryRemoveGlobalAlloc(SILGlobalVariable *global,
872872
std::any_of(GlobalAddrMap[global].begin(), GlobalAddrMap[global].end(),
873873
[=](GlobalAddrInst *addr) {
874874
return std::find(InstToRemove.begin(), InstToRemove.end(),
875-
addr) != InstToRemove.end();
875+
addr) == InstToRemove.end();
876876
})))
877877
return false;
878878

@@ -890,12 +890,18 @@ bool SILGlobalOpt::tryRemoveGlobalAddr(SILGlobalVariable *global) {
890890
GlobalAccessMap[global].size())
891891
return false;
892892

893+
// Check if the address is used in anything but a store. If any global_addr
894+
// instruction associated with a global is used in anything but a store, we
895+
// can't remove ANY global_addr instruction associated with that global.
893896
for (auto *addr : GlobalAddrMap[global]) {
894897
for (auto *use : addr->getUses()) {
895898
if (!isa<StoreInst>(use->getUser()))
896899
return false;
897900
}
898-
901+
}
902+
903+
// Now that it's safe, remove all global addresses associated with this global
904+
for (auto *addr : GlobalAddrMap[global]) {
899905
InstToRemove.push_back(addr);
900906
}
901907

@@ -931,15 +937,15 @@ bool SILGlobalOpt::tryRemoveUnusedGlobal(SILGlobalVariable *global) {
931937
std::any_of(GlobalAddrMap[global].begin(), GlobalAddrMap[global].end(),
932938
[=](GlobalAddrInst *addr) {
933939
return std::find(InstToRemove.begin(), InstToRemove.end(),
934-
addr) != InstToRemove.end();
940+
addr) == InstToRemove.end();
935941
}))
936942
return false;
937943

938944
if (GlobalAccessMap[global].size() &&
939945
std::any_of(GlobalAccessMap[global].begin(),
940946
GlobalAccessMap[global].end(), [=](BeginAccessInst *access) {
941947
return std::find(InstToRemove.begin(), InstToRemove.end(),
942-
access) != InstToRemove.end();
948+
access) == InstToRemove.end();
943949
}))
944950
return false;
945951

0 commit comments

Comments
 (0)