summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/GlobalTypeOptimization.cpp28
1 files changed, 7 insertions, 21 deletions
diff --git a/src/passes/GlobalTypeOptimization.cpp b/src/passes/GlobalTypeOptimization.cpp
index e5cd4e410..536213561 100644
--- a/src/passes/GlobalTypeOptimization.cpp
+++ b/src/passes/GlobalTypeOptimization.cpp
@@ -22,7 +22,6 @@
// * Fields that are never read from can be removed entirely.
//
-#include "ir/effects.h"
#include "ir/localize.h"
#include "ir/ordering.h"
#include "ir/struct-utils.h"
@@ -348,26 +347,11 @@ struct GlobalTypeOptimization : public Pass {
auto& operands = curr->operands;
assert(indexesAfterRemoval.size() == operands.size());
- // Check for side effects in removed fields. If there are any, we must
- // use locals to save the values (while keeping them in order).
- bool useLocals = false;
- for (Index i = 0; i < operands.size(); i++) {
- auto newIndex = indexesAfterRemoval[i];
- if (newIndex == RemovedField &&
- EffectAnalyzer(getPassOptions(), *getModule(), operands[i])
- .hasUnremovableSideEffects()) {
- useLocals = true;
- break;
- }
- }
- if (useLocals) {
- auto* func = getFunction();
- if (!func) {
- Fatal() << "TODO: side effects in removed fields in globals\n";
- }
- ChildLocalizer localizer(curr, func, *getModule(), getPassOptions());
- replaceCurrent(localizer.getReplacement());
- }
+ // Localize things so that we can simply remove the operands we no
+ // longer need.
+ ChildLocalizer localizer(
+ curr, getFunction(), *getModule(), getPassOptions());
+ replaceCurrent(localizer.getReplacement());
// Remove the unneeded operands.
Index removed = 0;
@@ -381,6 +365,8 @@ struct GlobalTypeOptimization : public Pass {
}
}
operands.resize(operands.size() - removed);
+ // We should only get here if we did actual work.
+ assert(removed > 0);
}
void visitStructSet(StructSet* curr) {