summaryrefslogtreecommitdiff
path: root/src/passes/SimplifyGlobals.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/SimplifyGlobals.cpp')
-rw-r--r--src/passes/SimplifyGlobals.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/passes/SimplifyGlobals.cpp b/src/passes/SimplifyGlobals.cpp
index 0943c04fe..be7cc6ca1 100644
--- a/src/passes/SimplifyGlobals.cpp
+++ b/src/passes/SimplifyGlobals.cpp
@@ -123,11 +123,19 @@ struct GlobalUseScanner : public WalkerPass<PostWalker<GlobalUseScanner>> {
// See if reading a specific global is the only effect the first has.
EffectAnalyzer firstEffects(getPassOptions(), *getModule(), first);
- if (firstEffects.globalsRead.size() != 1) {
+ if (firstEffects.immutableGlobalsRead.size() +
+ firstEffects.mutableGlobalsRead.size() !=
+ 1) {
return Name();
}
- auto global = *firstEffects.globalsRead.begin();
- firstEffects.globalsRead.clear();
+ Name global;
+ if (firstEffects.immutableGlobalsRead.size() == 1) {
+ global = *firstEffects.immutableGlobalsRead.begin();
+ firstEffects.immutableGlobalsRead.clear();
+ } else {
+ global = *firstEffects.mutableGlobalsRead.begin();
+ firstEffects.mutableGlobalsRead.clear();
+ }
if (firstEffects.hasAnything()) {
return Name();
}