diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/GlobalTypeOptimization.cpp | 28 |
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) { |