mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-29 08:52:15 +00:00
add binaryen fiddles for indirect to direct call optimization
This commit is contained in:
parent
3e3c393856
commit
c4a57025d2
26
tests/binaryen/constant-indirect-arg.js
Normal file
26
tests/binaryen/constant-indirect-arg.js
Normal file
@ -0,0 +1,26 @@
|
||||
var binaryen = require("binaryen");
|
||||
|
||||
var mod = new binaryen.Module();
|
||||
|
||||
var ftype_v = mod.addFunctionType("v", binaryen.none, []);
|
||||
var ftype_vi = mod.addFunctionType("vi", binaryen.none, [ binaryen.i32 ]);
|
||||
|
||||
mod.addFunction("callee-2", ftype_v, [], mod.block(null, [
|
||||
]));
|
||||
mod.addFunction("callee-1", ftype_vi, [], mod.block(null, [
|
||||
mod.call_indirect(mod.getLocal(0, binaryen.i32), [], "v"),
|
||||
]));
|
||||
mod.setFunctionTable(2, 2, [ "callee-1", "callee-2" ]);
|
||||
|
||||
mod.addFunction("caller", ftype_vi, [ binaryen.i32 ], mod.block(null, [
|
||||
mod.call_indirect(mod.getLocal(0, binaryen.i32), [ mod.i32.const(1) ], "vi"),
|
||||
]));
|
||||
mod.addFunctionExport("caller", "main");
|
||||
|
||||
binaryen.setOptimizeLevel(4);
|
||||
binaryen.setShrinkLevel(0);
|
||||
binaryen.setDebugInfo(false);
|
||||
mod.optimize();
|
||||
if (!mod.validate())
|
||||
console.log("-> does not validate");
|
||||
console.log(mod.emitText());
|
22
tests/binaryen/constant-indirect.js
Normal file
22
tests/binaryen/constant-indirect.js
Normal file
@ -0,0 +1,22 @@
|
||||
var binaryen = require("binaryen");
|
||||
|
||||
var mod = new binaryen.Module();
|
||||
|
||||
var ftype = mod.addFunctionType("v", binaryen.none, []);
|
||||
|
||||
mod.addFunction("callee", ftype, [], mod.block(null, [
|
||||
]));
|
||||
mod.setFunctionTable(1, 1, [ "callee" ]);
|
||||
|
||||
mod.addFunction("caller", ftype, [], mod.block(null, [
|
||||
mod.call_indirect(mod.i32.const(0), [], "v"),
|
||||
]));
|
||||
mod.addFunctionExport("caller", "main");
|
||||
|
||||
binaryen.setOptimizeLevel(4);
|
||||
binaryen.setShrinkLevel(0);
|
||||
binaryen.setDebugInfo(false);
|
||||
mod.optimize();
|
||||
if (!mod.validate())
|
||||
console.log("-> does not validate");
|
||||
console.log(mod.emitText());
|
Loading…
x
Reference in New Issue
Block a user