diff options
author | Daniel Wirtz <dcode@dcode.io> | 2020-01-17 18:43:45 +0100 |
---|---|---|
committer | Alon Zakai <azakai@google.com> | 2020-01-17 09:43:44 -0800 |
commit | 98f5507c508d6fde326347df3fcad70740b634ea (patch) | |
tree | 3b8a7f1420ba81ca8e8df5b10a9e744a3602e6b4 /src/binaryen-c.h | |
parent | e873e2a84db3fda3c8df5ed8e0b39578a1fb2f2d (diff) | |
download | binaryen-98f5507c508d6fde326347df3fcad70740b634ea.tar.gz binaryen-98f5507c508d6fde326347df3fcad70740b634ea.tar.bz2 binaryen-98f5507c508d6fde326347df3fcad70740b634ea.zip |
Expose ExpressionAnalyzer in C-/JS-API (#2585)
Instead of reinventing the wheel on our side, this adds ExpressionAnalyzer
bindings to the C- and JS-APIs, which can be useful for generators. For
example, a generator may decide to simplify a compilation step if a
subexpression doesn't have any side effects, or simply skip emitting
something that is likely to compile to a drop or an empty block right away.
Diffstat (limited to 'src/binaryen-c.h')
-rw-r--r-- | src/binaryen-c.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 36d82ecb0..067812438 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -1479,6 +1479,28 @@ BINARYEN_API void BinaryenAddCustomSection(BinaryenModuleRef module, BinaryenIndex contentsSize); // +// ========= Effect analyzer ========= +// + +typedef uint32_t BinaryenSideEffects; + +BINARYEN_API BinaryenSideEffects BinaryenSideEffectNone(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectBranches(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectCalls(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectReadsLocal(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectWritesLocal(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectReadsGlobal(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectWritesGlobal(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectReadsMemory(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectWritesMemory(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectImplicitTrap(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectIsAtomic(void); +BINARYEN_API BinaryenSideEffects BinaryenSideEffectAny(void); + +BINARYEN_API BinaryenSideEffects +BinaryenExpressionGetSideEffects(BinaryenExpressionRef expr); + +// // ========== CFG / Relooper ========== // // General usage is (1) create a relooper, (2) create blocks, (3) add |