summaryrefslogtreecommitdiff
path: root/src/ir/effects.h
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2020-11-24 12:36:11 -0800
committerGitHub <noreply@github.com>2020-11-24 12:36:11 -0800
commit78ccc1976bac069ae65b2ec227e8c2c515a02801 (patch)
treeb875343fa47a62a44db4370811080dc963a91233 /src/ir/effects.h
parentcecff82aff317c3132f80a764dba163bcd852a78 (diff)
downloadbinaryen-78ccc1976bac069ae65b2ec227e8c2c515a02801.tar.gz
binaryen-78ccc1976bac069ae65b2ec227e8c2c515a02801.tar.bz2
binaryen-78ccc1976bac069ae65b2ec227e8c2c515a02801.zip
[TypedFunctionReferences] Implement call_ref (#3396)
Includes minimal support in various passes. Also includes actual optimization work in Directize, which was easy to add. Almost has fuzzer support, but the actual makeCallRef is just a stub so far. Includes s-parser support for parsing typed function references types.
Diffstat (limited to 'src/ir/effects.h')
-rw-r--r--src/ir/effects.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/ir/effects.h b/src/ir/effects.h
index ab8cafcb1..c0210c221 100644
--- a/src/ir/effects.h
+++ b/src/ir/effects.h
@@ -534,6 +534,17 @@ private:
void visitTupleExtract(TupleExtract* curr) {}
void visitI31New(I31New* curr) {}
void visitI31Get(I31Get* curr) {}
+ void visitCallRef(CallRef* curr) {
+ parent.calls = true;
+ if (parent.features.hasExceptionHandling() && parent.tryDepth == 0) {
+ parent.throws = true;
+ }
+ if (curr->isReturn) {
+ parent.branchesOut = true;
+ }
+ // traps when the arg is null
+ parent.implicitTrap = true;
+ }
void visitRefTest(RefTest* curr) {
WASM_UNREACHABLE("TODO (gc): ref.test");
}