So - replacing 'Module["asm"] =' with 'var asm =' in build.asm.js followed by an attempt to run SFE succeeds. I see the following reduction (around 8%).
08/22/2017 09:15 AM 19,782,571 build.asm.js 08/22/2017 09:39 AM 18,225,058 build.asm.reduced.js I think the core problem right now is that we currently don't support running SFE on Emscripten generated JS that was built with the --separate-asm flag. I'll look into fixing this today. Thanks, Arnab On Tuesday, August 22, 2017 at 9:25:32 AM UTC-7, caiiiycuk wrote: > > Great. I will try to reproduce asm.js bug. Btw, if you build > roll-a-ball project in Unity, then output will be in Unity format > (also js, but with Unity loader, Unity staff). You can find emscripten > output in Project/Library/webgl_cache/linkresult_asm/ folder. > > 2017-08-22 23:15 GMT+07:00 arnab choudhury <achou...@gmail.com > <javascript:>>: > > Hi caiiycuk > > > > I'll have an update here shortly. I would love to be able to reproduce > the > > non-asm.js bug since we have extensive tests for this at Tableau. I'm > trying > > out the roll-a-ball project right now, will get back shortly. > > > > Regards, > > Arnab > > > > On Tuesday, August 22, 2017 at 3:07:44 AM UTC-7, caiiiycuk wrote: > >> > >> As I see using SFE breaks asm.js validity? On my another project sfe > >> produce js less on 500Kb (from 6.5Mb), but FF says: > >> TypeError: asm.js type error: double is not a subtype of intish > >> > >> 2017-08-22 11:33 GMT+07:00 Александр Гурьянов <caii...@gmail.com>: > >> > Roll a ball project: > >> > https://www.assetstore.unity3d.com/en/#!/content/77198 > >> > > >> > 2017-08-22 11:32 GMT+07:00 Александр Гурьянов <caii...@gmail.com>: > >> >> Hi. I tried to use SFE on Roll-a-ball demo project, and get same > >> >> results. Unity uses --separate-asm flag to build asm.js. Resulting > js > >> >> looks like: > >> >> > >> >> Module["asm"] = (function(global,env,buffer) { > >> >> "use asm";var a=new global.Int8Array(buffer);var b=new > >> >> global.Int16Array(buffer);... > >> >> > >> >> I tried to remove wrapping function (Module["asm"] = > >> >> (function(global,env,buffer) { ... }), and code looks like: > >> >> "use asm";var a=new global.Int8Array(buffer);var b=new > >> >> global.Int16Array(buffer);... > >> >> > >> >> When I run SFE I have another error: > >> >> > >> >> > /home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:5701 > > > >> >> throw e; > >> >> ^ > >> >> Error: Line 25: Illegal return statement > >> >> at constructError > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:2406:21) > > > >> >> at createError > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:2425:17) > > > >> >> at tolerateError > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:2460:17) > > > >> >> at parseReturnStatement > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:4533:13) > > > >> >> at parseStatement > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:4780:24) > > > >> >> at parseStatementListItem > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:3988:16) > > > >> >> at parseScriptBody > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:5489:25) > > > >> >> at parseProgram > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:5505:16) > > > >> >> at Object.parse > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/node_modules/esprima/esprima.js:5689:23) > > > >> >> at SimilarFunctionEliminator.srcToAst > >> >> > >> >> > (/home/caiiiycuk/sdk/Similar-Function-Elimination/src/similar_function_eliminator.js:35:20) > > > >> >> > >> >> > >> >> Maybe I doing something wrong. Can you try? Resulting js is here > >> >> (build.asm.js): > >> >> > >> >> > >> >> > https://drive.google.com/file/d/0B28AXjYMDNZscDFlZTdWMGMzQkU/view?usp=sharing > >> >> > >> >> Thank you! > >> >> > >> >> 2017-08-22 1:35 GMT+07:00 Александр Гурьянов <caii...@gmail.com>: > >> >>> I think that error can be reporudced on any Unity project, I will > >> >>> check and back) Btw, thanks for nice stuff! > >> >>> > >> >>> 2017-08-22 1:27 GMT+07:00 arnab choudhury <achou...@gmail.com>: > >> >>>> Thanks Alon :). > >> >>>> > >> >>>> Caiiycuk, is the codebase you are trying to run SFE on available > >> >>>> publicly? > >> >>>> Can you post the github link here if so? If not, take a look at > the > >> >>>> generated JS on which you are going to run SFE on. Make sure that > >> >>>> there is a > >> >>>> top level global variable called asm. If the asm.js is wrapped, > then > >> >>>> you > >> >>>> might have to save off the asm.js (the part of the code that > contains > >> >>>> a top > >> >>>> level variable called asm) to a separate file and try running SFE > on > >> >>>> that to > >> >>>> see the potential size reduction. > >> >>>> > >> >>>> Regards, > >> >>>> Arnab > >> >>>> > >> >>>> On Monday, August 21, 2017 at 10:47:22 AM UTC-7, Alon Zakai wrote: > >> >>>>> > >> >>>>> Very interesting stuff here! :) > >> >>>>> > >> >>>>> I opened this issue for implementation in Binaryen: > >> >>>>> https://github.com/WebAssembly/binaryen/issues/1142 > >> >>>>> > >> >>>>> On Fri, Aug 18, 2017 at 8:24 AM, arnab choudhury > >> >>>>> <achou...@gmail.com> > >> >>>>> wrote: > >> >>>>>> > >> >>>>>> Hello Emscripten-Discuss > >> >>>>>> > >> >>>>>> I just wanted to bring folks' attention to a new post-build > >> >>>>>> optimization > >> >>>>>> pass for Emscripten generated asm.js called Similar Function > >> >>>>>> Elimination > >> >>>>>> (SFE) that Tableau recently open sourced. I discussed with Alon, > >> >>>>>> and our > >> >>>>>> thinking is that we will be adding this pass to Binaryen's web > >> >>>>>> assembly > >> >>>>>> generator. Given that everyone is moving to Web Assembly, we are > >> >>>>>> thinking we > >> >>>>>> may not add this pass back to Emscripten. However, that being > said, > >> >>>>>> the > >> >>>>>> Emscripten community should feel free to use Similar Function > >> >>>>>> Elimination on > >> >>>>>> Emscripten generated asm.js if you need the additional size > >> >>>>>> reduction. > >> >>>>>> > >> >>>>>> https://github.com/achoudhury85/Similar-Function-Elimination > >> >>>>>> > >> >>>>>> At Tableau, we have observed up to 20% code size reduction when > >> >>>>>> using SFE > >> >>>>>> on template heavy codebases. > >> >>>>>> > >> >>>>>> Regards, > >> >>>>>> Arnab > >> >>>>>> > >> >>>>>> -- > >> >>>>>> You received this message because you are subscribed to the > Google > >> >>>>>> Groups > >> >>>>>> "emscripten-discuss" group. > >> >>>>>> To unsubscribe from this group and stop receiving emails from > it, > >> >>>>>> send an > >> >>>>>> email to emscripten-discuss+unsubscr...@googlegroups.com > <javascript:>. > >> >>>>>> For more options, visit https://groups.google.com/d/optout. > >> >>>>> > >> >>>>> > >> >>>> -- > >> >>>> You received this message because you are subscribed to the Google > >> >>>> Groups > >> >>>> "emscripten-discuss" group. > >> >>>> To unsubscribe from this group and stop receiving emails from it, > >> >>>> send an > >> >>>> email to emscripten-discuss+unsubscr...@googlegroups.com > <javascript:>. > >> >>>> For more options, visit https://groups.google.com/d/optout. > > > > -- > > You received this message because you are subscribed to the Google > Groups > > "emscripten-discuss" group. > > To unsubscribe from this group and stop receiving emails from it, send > an > > email to emscripten-discuss+unsubscr...@googlegroups.com <javascript:>. > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.