Skip to content

Commit 60c0d83

Browse files
authored
Update Binaryen (#1082)
1 parent 30f9c2a commit 60c0d83

9 files changed

+51
-66
lines changed

package-lock.json

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"url": "https://github.com/AssemblyScript/assemblyscript/issues"
2222
},
2323
"dependencies": {
24-
"binaryen": "90.0.0-nightly.20200111",
24+
"binaryen": "90.0.0-nightly.20200128",
2525
"long": "^4.0.0",
2626
"source-map-support": "^0.5.16",
2727
"ts-node": "^6.2.0"

src/glue/binaryen.d.ts

+17
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,23 @@ export declare function _BinaryenModuleSetFeatures(module: BinaryenModuleRef, fe
766766

767767
export declare function _BinaryenAddCustomSection(module: BinaryenModuleRef, name: usize, contents: usize, contentsSize: BinaryenIndex): void;
768768

769+
type BinaryenSideEffects = u32;
770+
771+
export declare function _BinaryenSideEffectNone(): BinaryenSideEffects;
772+
export declare function _BinaryenSideEffectBranches(): BinaryenSideEffects;
773+
export declare function _BinaryenSideEffectCalls(): BinaryenSideEffects;
774+
export declare function _BinaryenSideEffectReadsLocal(): BinaryenSideEffects;
775+
export declare function _BinaryenSideEffectWritesLocal(): BinaryenSideEffects;
776+
export declare function _BinaryenSideEffectReadsGlobal(): BinaryenSideEffects;
777+
export declare function _BinaryenSideEffectWritesGlobal(): BinaryenSideEffects;
778+
export declare function _BinaryenSideEffectReadsMemory(): BinaryenSideEffects;
779+
export declare function _BinaryenSideEffectWritesMemory(): BinaryenSideEffects;
780+
export declare function _BinaryenSideEffectImplicitTrap(): BinaryenSideEffects;
781+
export declare function _BinaryenSideEffectIsAtomic(): BinaryenSideEffects;
782+
export declare function _BinaryenSideEffectAny(): BinaryenSideEffects;
783+
784+
export declare function _BinaryenExpressionGetSideEffects(expr: BinaryenExpressionRef): BinaryenSideEffects;
785+
769786
type BinaryenRelooperRef = usize;
770787
type BinaryenRelooperBlockRef = usize;
771788

src/module.ts

+20-36
Original file line numberDiff line numberDiff line change
@@ -1885,43 +1885,27 @@ export class Relooper {
18851885
}
18861886
}
18871887

1888+
export enum SideEffects {
1889+
None = 0 /* _BinaryenSideEffectNone */,
1890+
Branches = 1 /* _BinaryenSideEffectBranches */,
1891+
Calls = 2 /* _BinaryenSideEffectCalls */,
1892+
ReadsLocal = 4 /* _BinaryenSideEffectReadsLocal */,
1893+
WritesLocal = 8 /* _BinaryenSideEffectWritesLocal */,
1894+
ReadsGlobal = 16 /* _BinaryenSideEffectReadsGlobal */,
1895+
WritesGlobal = 32 /* _BinaryenSideEffectWritesGlobal */,
1896+
ReadsMemory = 64 /* _BinaryenSideEffectReadsMemory */,
1897+
WritesMemory = 128 /* _BinaryenSideEffectWritesMemory */,
1898+
ImplicitTrap = 256 /* _BinaryenSideEffectImplicitTrap */,
1899+
IsAtomic = 512 /* _BinaryenSideEffectIsAtomic */,
1900+
Any = 1023 /* _BinaryenSideEffectAny */,
1901+
}
1902+
1903+
export function getSideEffects(expr: ExpressionRef): SideEffects {
1904+
return binaryen._BinaryenExpressionGetSideEffects(expr);
1905+
}
1906+
18881907
export function hasSideEffects(expr: ExpressionRef): bool {
1889-
// TODO: there's more
1890-
switch (binaryen._BinaryenExpressionGetId(expr)) {
1891-
case ExpressionId.LocalGet:
1892-
case ExpressionId.GlobalGet:
1893-
case ExpressionId.Const:
1894-
case ExpressionId.Nop: {
1895-
return false;
1896-
}
1897-
case ExpressionId.Block: {
1898-
for (let i = 0, k = binaryen._BinaryenBlockGetNumChildren(expr); i < k; ++i) {
1899-
if (hasSideEffects(binaryen._BinaryenBlockGetChild(expr, i))) return true;
1900-
}
1901-
return false;
1902-
}
1903-
case ExpressionId.If: {
1904-
return hasSideEffects(binaryen._BinaryenIfGetCondition(expr))
1905-
|| hasSideEffects(binaryen._BinaryenIfGetIfTrue(expr))
1906-
|| hasSideEffects(binaryen._BinaryenIfGetIfFalse(expr));
1907-
}
1908-
case ExpressionId.Unary: {
1909-
return hasSideEffects(binaryen._BinaryenUnaryGetValue(expr));
1910-
}
1911-
case ExpressionId.Binary: {
1912-
return hasSideEffects(binaryen._BinaryenBinaryGetLeft(expr))
1913-
|| hasSideEffects(binaryen._BinaryenBinaryGetRight(expr));
1914-
}
1915-
case ExpressionId.Drop: {
1916-
return hasSideEffects(binaryen._BinaryenDropGetValue(expr));
1917-
}
1918-
case ExpressionId.Select: {
1919-
return hasSideEffects(binaryen._BinaryenSelectGetIfTrue(expr))
1920-
|| hasSideEffects(binaryen._BinaryenSelectGetIfFalse(expr))
1921-
|| hasSideEffects(binaryen._BinaryenSelectGetCondition(expr));
1922-
}
1923-
}
1924-
return true;
1908+
return getSideEffects(expr) != SideEffects.None;
19251909
}
19261910

19271911
// helpers

tests/compiler/binary.optimized.wat

+2-6
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@
33
(type $f32_=>_f32 (func (param f32) (result f32)))
44
(type $f64_=>_f64 (func (param f64) (result f64)))
55
(memory $0 1)
6-
(data (i32.const 17) "\01\00\00\01")
7-
(data (i32.const 29) "\01\00\00\be\f3\f8y\eca\f6?\190\96[\c6\fe\de\bf=\88\afJ\edq\f5?\a4\fc\d42h\0b\db\bf\b0\10\f0\f09\95\f4?{\b7\1f\n\8bA\d7\bf\85\03\b8\b0\95\c9\f3?{\cfm\1a\e9\9d\d3\bf\a5d\88\0c\19\0d\f3?1\b6\f2\f3\9b\1d\d0\bf\a0\8e\0b{\"^\f2?\f0z;\1b\1d|\c9\bf?4\1aJJ\bb\f1?\9f<\af\93\e3\f9\c2\bf\ba\e5\8a\f0X#\f1?\\\8dx\bf\cb`\b9\bf\a7\00\99A?\95\f0?\ce_G\b6\9do\aa\bf\00\00\00\00\00\00\f0?")
8-
(data (i32.const 192) "\acG\9a\fd\8c`\ee?=\f5$\9f\ca8\b3?\a0j\02\1f\b3\a4\ec?\ba\918T\a9v\c4?\e6\fcjW6 \eb?\d2\e4\c4J\0b\84\ce?-\aa\a1c\d1\c2\e9?\1ce\c6\f0E\06\d4?\edAx\03\e6\86\e8?\f8\9f\1b,\9c\8e\d8?bHS\f5\dcg\e7?\cc{\b1N\a4\e0\dc?")
6+
(data (i32.const 17) "\01\00\00\01\00\00\00\00\00\00\00\00\01\00\00\be\f3\f8y\eca\f6?\190\96[\c6\fe\de\bf=\88\afJ\edq\f5?\a4\fc\d42h\0b\db\bf\b0\10\f0\f09\95\f4?{\b7\1f\n\8bA\d7\bf\85\03\b8\b0\95\c9\f3?{\cfm\1a\e9\9d\d3\bf\a5d\88\0c\19\0d\f3?1\b6\f2\f3\9b\1d\d0\bf\a0\8e\0b{\"^\f2?\f0z;\1b\1d|\c9\bf?4\1aJJ\bb\f1?\9f<\af\93\e3\f9\c2\bf\ba\e5\8a\f0X#\f1?\\\8dx\bf\cb`\b9\bf\a7\00\99A?\95\f0?\ce_G\b6\9do\aa\bf\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\acG\9a\fd\8c`\ee?=\f5$\9f\ca8\b3?\a0j\02\1f\b3\a4\ec?\ba\918T\a9v\c4?\e6\fcjW6 \eb?\d2\e4\c4J\0b\84\ce?-\aa\a1c\d1\c2\e9?\1ce\c6\f0E\06\d4?\edAx\03\e6\86\e8?\f8\9f\1b,\9c\8e\d8?bHS\f5\dcg\e7?\cc{\b1N\a4\e0\dc?")
97
(data (i32.const 288) "\10\00\00\00\01\00\00\00\03\00\00\00\10\00\00\00 \00\00\00 \00\00\00\00\01\00\00 ")
10-
(data (i32.const 321) "\01\00\00\01")
11-
(data (i32.const 333) "\01")
12-
(data (i32.const 342) "\f0?t\85\15\d3\b0\d9\ef?\0f\89\f9lX\b5\ef?Q[\12\d0\01\93\ef?{Q}<\b8r\ef?\aa\b9h1\87T\ef?8bunz8\ef?\e1\de\1f\f5\9d\1e\ef?\15\b71\n\fe\06\ef?\cb\a9:7\a7\f1\ee?\"4\12L\a6\de\ee?-\89a`\08\ce\ee?\'*6\d5\da\bf\ee?\82O\9dV+\b4\ee?)TH\dd\07\ab\ee?\85U:\b0~\a4\ee?\cd;\7ff\9e\a0\ee?t_\ec\e8u\9f\ee?\87\01\ebs\14\a1\ee?\13\ceL\99\89\a5\ee?\db\a0*B\e5\ac\ee?\e5\c5\cd\b07\b7\ee?\90\f0\a3\82\91\c4\ee?]%>\b2\03\d5\ee?\ad\d3Z\99\9f\e8\ee?G^\fb\f2v\ff\ee?\9cR\85\dd\9b\19\ef?i\90\ef\dc 7\ef?\87\a4\fb\dc\18X\ef?_\9b{3\97|\ef?\da\90\a4\a2\af\a4\ef?@En[v\d0\ef?")
8+
(data (i32.const 321) "\01\00\00\01\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\f0?t\85\15\d3\b0\d9\ef?\0f\89\f9lX\b5\ef?Q[\12\d0\01\93\ef?{Q}<\b8r\ef?\aa\b9h1\87T\ef?8bunz8\ef?\e1\de\1f\f5\9d\1e\ef?\15\b71\n\fe\06\ef?\cb\a9:7\a7\f1\ee?\"4\12L\a6\de\ee?-\89a`\08\ce\ee?\'*6\d5\da\bf\ee?\82O\9dV+\b4\ee?)TH\dd\07\ab\ee?\85U:\b0~\a4\ee?\cd;\7ff\9e\a0\ee?t_\ec\e8u\9f\ee?\87\01\ebs\14\a1\ee?\13\ceL\99\89\a5\ee?\db\a0*B\e5\ac\ee?\e5\c5\cd\b07\b7\ee?\90\f0\a3\82\91\c4\ee?]%>\b2\03\d5\ee?\ad\d3Z\99\9f\e8\ee?G^\fb\f2v\ff\ee?\9cR\85\dd\9b\19\ef?i\90\ef\dc 7\ef?\87\a4\fb\dc\18X\ef?_\9b{3\97|\ef?\da\90\a4\a2\af\a4\ef?@En[v\d0\ef?")
139
(data (i32.const 592) "\10\00\00\00\01\00\00\00\04\00\00\00\10\00\00\00P\01\00\00P\01\00\00\00\01\00\00 ")
1410
(global $binary/b (mut i32) (i32.const 0))
1511
(global $binary/i (mut i32) (i32.const 0))

tests/compiler/std/array.optimized.wat

+1-2
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,7 @@
204204
(data (i32.const 7664) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\00,\006\005\005\003\005\00,\000")
205205
(data (i32.const 7712) "\18\00\00\00\01\00\00\00\00\00\00\00\18\00\00\00\01\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff")
206206
(data (i32.const 7760) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\001\00,\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00,\000")
207-
(data (i32.const 7824) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff")
208-
(data (i32.const 7864) "\ff\ff\ff\ff\ff\ff\ff\7f")
207+
(data (i32.const 7824) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\7f")
209208
(data (i32.const 7872) "T\00\00\00\01\00\00\00\01\00\00\00T\00\00\00-\001\00,\00-\001\002\003\004\005\006\007\008\009\000\001\002\003\004\005\006\00,\000\00,\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007")
210209
(data (i32.const 7984) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\00\14\00\00\80\13\00\00\80\13\00\00\c0\13\00\00\a0\13\00\00\e0\13")
211210
(data (i32.const 8032) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00,\00a\00,\00a\00,\00a\00b\00,\00b\00,\00b\00a\00,")

tests/compiler/std/libm.optimized.wat

+2-6
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,9 @@
1313
(data (i32.const 224) "\10\00\00\00\01\00\00\00\03\00\00\00\10\00\00\00 \00\00\00 \00\00\00\c0\00\00\00\18")
1414
(data (i32.const 256) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00)\15DNn\83\f9\a2\c0\dd4\f5\d1W\'\fcA\90C<\99\95b\dba\c5\bb\de\abcQ\fe")
1515
(data (i32.const 304) "\10\00\00\00\01\00\00\00\03\00\00\00\10\00\00\00\10\01\00\00\10\01\00\00 \00\00\00\04")
16-
(data (i32.const 337) "\01\00\00\01")
17-
(data (i32.const 349) "\01\00\00\be\f3\f8y\eca\f6?\190\96[\c6\fe\de\bf=\88\afJ\edq\f5?\a4\fc\d42h\0b\db\bf\b0\10\f0\f09\95\f4?{\b7\1f\n\8bA\d7\bf\85\03\b8\b0\95\c9\f3?{\cfm\1a\e9\9d\d3\bf\a5d\88\0c\19\0d\f3?1\b6\f2\f3\9b\1d\d0\bf\a0\8e\0b{\"^\f2?\f0z;\1b\1d|\c9\bf?4\1aJJ\bb\f1?\9f<\af\93\e3\f9\c2\bf\ba\e5\8a\f0X#\f1?\\\8dx\bf\cb`\b9\bf\a7\00\99A?\95\f0?\ce_G\b6\9do\aa\bf\00\00\00\00\00\00\f0?")
18-
(data (i32.const 512) "\acG\9a\fd\8c`\ee?=\f5$\9f\ca8\b3?\a0j\02\1f\b3\a4\ec?\ba\918T\a9v\c4?\e6\fcjW6 \eb?\d2\e4\c4J\0b\84\ce?-\aa\a1c\d1\c2\e9?\1ce\c6\f0E\06\d4?\edAx\03\e6\86\e8?\f8\9f\1b,\9c\8e\d8?bHS\f5\dcg\e7?\cc{\b1N\a4\e0\dc?")
16+
(data (i32.const 337) "\01\00\00\01\00\00\00\00\00\00\00\00\01\00\00\be\f3\f8y\eca\f6?\190\96[\c6\fe\de\bf=\88\afJ\edq\f5?\a4\fc\d42h\0b\db\bf\b0\10\f0\f09\95\f4?{\b7\1f\n\8bA\d7\bf\85\03\b8\b0\95\c9\f3?{\cfm\1a\e9\9d\d3\bf\a5d\88\0c\19\0d\f3?1\b6\f2\f3\9b\1d\d0\bf\a0\8e\0b{\"^\f2?\f0z;\1b\1d|\c9\bf?4\1aJJ\bb\f1?\9f<\af\93\e3\f9\c2\bf\ba\e5\8a\f0X#\f1?\\\8dx\bf\cb`\b9\bf\a7\00\99A?\95\f0?\ce_G\b6\9do\aa\bf\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\acG\9a\fd\8c`\ee?=\f5$\9f\ca8\b3?\a0j\02\1f\b3\a4\ec?\ba\918T\a9v\c4?\e6\fcjW6 \eb?\d2\e4\c4J\0b\84\ce?-\aa\a1c\d1\c2\e9?\1ce\c6\f0E\06\d4?\edAx\03\e6\86\e8?\f8\9f\1b,\9c\8e\d8?bHS\f5\dcg\e7?\cc{\b1N\a4\e0\dc?")
1917
(data (i32.const 608) "\10\00\00\00\01\00\00\00\04\00\00\00\10\00\00\00`\01\00\00`\01\00\00\00\01\00\00 ")
20-
(data (i32.const 641) "\01\00\00\01")
21-
(data (i32.const 653) "\01")
22-
(data (i32.const 662) "\f0?t\85\15\d3\b0\d9\ef?\0f\89\f9lX\b5\ef?Q[\12\d0\01\93\ef?{Q}<\b8r\ef?\aa\b9h1\87T\ef?8bunz8\ef?\e1\de\1f\f5\9d\1e\ef?\15\b71\n\fe\06\ef?\cb\a9:7\a7\f1\ee?\"4\12L\a6\de\ee?-\89a`\08\ce\ee?\'*6\d5\da\bf\ee?\82O\9dV+\b4\ee?)TH\dd\07\ab\ee?\85U:\b0~\a4\ee?\cd;\7ff\9e\a0\ee?t_\ec\e8u\9f\ee?\87\01\ebs\14\a1\ee?\13\ceL\99\89\a5\ee?\db\a0*B\e5\ac\ee?\e5\c5\cd\b07\b7\ee?\90\f0\a3\82\91\c4\ee?]%>\b2\03\d5\ee?\ad\d3Z\99\9f\e8\ee?G^\fb\f2v\ff\ee?\9cR\85\dd\9b\19\ef?i\90\ef\dc 7\ef?\87\a4\fb\dc\18X\ef?_\9b{3\97|\ef?\da\90\a4\a2\af\a4\ef?@En[v\d0\ef?")
18+
(data (i32.const 641) "\01\00\00\01\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\f0?t\85\15\d3\b0\d9\ef?\0f\89\f9lX\b5\ef?Q[\12\d0\01\93\ef?{Q}<\b8r\ef?\aa\b9h1\87T\ef?8bunz8\ef?\e1\de\1f\f5\9d\1e\ef?\15\b71\n\fe\06\ef?\cb\a9:7\a7\f1\ee?\"4\12L\a6\de\ee?-\89a`\08\ce\ee?\'*6\d5\da\bf\ee?\82O\9dV+\b4\ee?)TH\dd\07\ab\ee?\85U:\b0~\a4\ee?\cd;\7ff\9e\a0\ee?t_\ec\e8u\9f\ee?\87\01\ebs\14\a1\ee?\13\ceL\99\89\a5\ee?\db\a0*B\e5\ac\ee?\e5\c5\cd\b07\b7\ee?\90\f0\a3\82\91\c4\ee?]%>\b2\03\d5\ee?\ad\d3Z\99\9f\e8\ee?G^\fb\f2v\ff\ee?\9cR\85\dd\9b\19\ef?i\90\ef\dc 7\ef?\87\a4\fb\dc\18X\ef?_\9b{3\97|\ef?\da\90\a4\a2\af\a4\ef?@En[v\d0\ef?")
2319
(data (i32.const 912) "\10\00\00\00\01\00\00\00\03\00\00\00\10\00\00\00\90\02\00\00\90\02\00\00\00\01\00\00 ")
2420
(global $../../lib/libm/assembly/libm/E f64 (f64.const 2.718281828459045))
2521
(global $../../lib/libm/assembly/libm/LN10 f64 (f64.const 2.302585092994046))

0 commit comments

Comments
 (0)