summaryrefslogtreecommitdiff
path: root/src/ir/effects.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir/effects.h')
-rw-r--r--src/ir/effects.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/ir/effects.h b/src/ir/effects.h
index 9c8887333..0d1e2c2b1 100644
--- a/src/ir/effects.h
+++ b/src/ir/effects.h
@@ -408,6 +408,57 @@ struct EffectAnalyzer
EffectAnalyzer bEffects(passOptions, b);
return !aEffects.invalidates(bEffects);
}
+
+ // C-API
+
+ enum SideEffects : uint32_t {
+ None = 0,
+ Branches = 1 << 0,
+ Calls = 1 << 1,
+ ReadsLocal = 1 << 2,
+ WritesLocal = 1 << 3,
+ ReadsGlobal = 1 << 4,
+ WritesGlobal = 1 << 5,
+ ReadsMemory = 1 << 6,
+ WritesMemory = 1 << 7,
+ ImplicitTrap = 1 << 8,
+ IsAtomic = 1 << 9,
+ Any = (1 << 10) - 1
+ };
+ uint32_t getSideEffects() const {
+ uint32_t effects = 0;
+ if (branches) {
+ effects |= SideEffects::Branches;
+ }
+ if (calls) {
+ effects |= SideEffects::Calls;
+ }
+ if (localsRead.size() > 0) {
+ effects |= SideEffects::ReadsLocal;
+ }
+ if (localsWritten.size() > 0) {
+ effects |= SideEffects::WritesLocal;
+ }
+ if (globalsRead.size() > 0) {
+ effects |= SideEffects::ReadsGlobal;
+ }
+ if (globalsWritten.size() > 0) {
+ effects |= SideEffects::WritesGlobal;
+ }
+ if (readsMemory) {
+ effects |= SideEffects::ReadsMemory;
+ }
+ if (writesMemory) {
+ effects |= SideEffects::WritesMemory;
+ }
+ if (implicitTrap) {
+ effects |= SideEffects::ImplicitTrap;
+ }
+ if (isAtomic) {
+ effects |= SideEffects::IsAtomic;
+ }
+ return effects;
+ }
};
} // namespace wasm