diff options
Diffstat (limited to 'src/passes/SimplifyGlobals.cpp')
-rw-r--r-- | src/passes/SimplifyGlobals.cpp | 14 |
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(); } |