summaryrefslogtreecommitdiff
path: root/src/ast_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast_utils.h')
-rw-r--r--src/ast_utils.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/ast_utils.h b/src/ast_utils.h
index 77bfaf1f3..3e45d0e33 100644
--- a/src/ast_utils.h
+++ b/src/ast_utils.h
@@ -160,6 +160,8 @@ struct EffectAnalyzer : public PostWalker<EffectAnalyzer, Visitor<EffectAnalyzer
void visitSetLocal(SetLocal *curr) {
localsWritten.insert(curr->index);
}
+ void visitGetGlobal(GetGlobal *curr) { readsMemory = true; } // TODO: global-specific
+ void visitSetGlobal(SetGlobal *curr) { writesMemory = true; } // stuff?
void visitLoad(Load *curr) { readsMemory = true; }
void visitStore(Store *curr) { writesMemory = true; }
void visitReturn(Return *curr) { branches = true; }
@@ -277,6 +279,12 @@ struct ExpressionManipulator {
Expression* visitSetLocal(SetLocal *curr) {
return builder.makeSetLocal(curr->index, copy(curr->value));
}
+ Expression* visitGetGlobal(GetGlobal *curr) {
+ return builder.makeGetGlobal(curr->index, curr->type);
+ }
+ Expression* visitSetGlobal(SetGlobal *curr) {
+ return builder.makeSetGlobal(curr->index, copy(curr->value));
+ }
Expression* visitLoad(Load *curr) {
return builder.makeLoad(curr->bytes, curr->signed_, curr->offset, curr->align, copy(curr->ptr), curr->type);
}
@@ -476,6 +484,15 @@ struct ExpressionAnalyzer {
PUSH(SetLocal, value);
break;
}
+ case Expression::Id::GetGlobalId: {
+ CHECK(GetGlobal, index);
+ break;
+ }
+ case Expression::Id::SetGlobalId: {
+ CHECK(SetGlobal, index);
+ PUSH(SetGlobal, value);
+ break;
+ }
case Expression::Id::LoadId: {
CHECK(Load, bytes);
CHECK(Load, signed_);
@@ -678,6 +695,15 @@ struct ExpressionAnalyzer {
PUSH(SetLocal, value);
break;
}
+ case Expression::Id::GetGlobalId: {
+ HASH(GetGlobal, index);
+ break;
+ }
+ case Expression::Id::SetGlobalId: {
+ HASH(SetGlobal, index);
+ PUSH(SetGlobal, value);
+ break;
+ }
case Expression::Id::LoadId: {
HASH(Load, bytes);
HASH(Load, signed_);