> 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%).
Hmm, no luck. Do you build Roll-a-ball with unity or you use my archive. I tried you soultion on my build and it's does not work. Steps: git clone https://github.com/achoudhury85/Similar-Function-Elimination unzip roll-a-ball.zip (from google drive) sed s'/Module\["asm"\]/var asm/' build.asm.js > build.asm.var.js node --max-old-space-size=8192 Similar-Function-Elimination/src/run_sfe.js --file build.asm.var.js > build.asm.compat.js Similar-Function-Elimination/src/similar_function_eliminator.js:179 asmAst = node.declarations[0].init.callee.body; ^ TypeError: Cannot read property 'body' of undefined at SimilarFunctionEliminator.getAsmAst (/home/caiiiycuk/tmp/Similar-Function-Elimination/src/similar_function_eliminator.js:179:48) at SimilarFunctionEliminator.initialize (/home/caiiiycuk/tmp/Similar-Function-Elimination/src/similar_function_eliminator.js:132:22) at SimilarFunctionEliminator.run (/home/caiiiycuk/tmp/Similar-Function-Elimination/src/similar_function_eliminator.js:1214:8) at Object.run (/home/caiiiycuk/tmp/Similar-Function-Elimination/src/similar_function_eliminator.js:1299:23) at Object.<anonymous> (/home/caiiiycuk/tmp/Similar-Function-Elimination/src/run_sfe.js:28:5) at Module._compile (module.js:410:26) at Object.Module._extensions..js (module.js:417:10) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Function.Module.runMain (module.js:442:10) 2017-08-23 0:16 GMT+07:00 Александр Гурьянов <caiiiy...@gmail.com>: > While trying to reproduce asm.js error, I found another problem. SFE > wan't work with -g2 flag, you can reporduce this problem with latest > emscripten: > > ./emcc -O2 -g2 -s USE_COCOS2D=3 -s ASM_JS=1 --std=c++11 > ./tests/cocos2d_hello.cpp --preload-file > ~/.emscripten_ports/Cocos2d/Cocos2d-version_3_2/samples/Cpp/HelloCpp/Resources@ > -o cocos.html > > node --max-old-space-size=8192 run_sfe.js --file cocos.js | sponge cocos.js > > > firefox cocos.html > > error: > cocos.html:1249 exception thrown: TypeError: $[(A & 3)] is not a > function,TypeError: $[(A & 3)] is not a function > at BY > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:2320580) > at __ZNSt3__26locale8__globalEv > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:2159273) > at __ZNSt3__26localeC2Ev > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:2160617) > at __ZNSt3__28ios_base4initEPv > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:2048889) > at __ZN7cocos2d8BitmapDC12divideStringEP9_TTF_FontPKcii > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:350499) > at __ZN7cocos2d8BitmapDC9getBitmapEPKciiNS_5Image9TextAlignES2_f > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:748315) > at __ZN7cocos2d5Image14initWithStringEPKciiNS0_9TextAlignES2_i > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:1308234) > at __ZN7cocos2d9Texture2D14initWithStringEPKcRKNS_14FontDefinitionE > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:1778238) > at > __ZN7cocos2d9Texture2D14initWithStringEPKcS2_fRKNS_4SizeENS_14TextHAlignmentENS_14TextVAlignmentE > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:1354460) > at __ZN7cocos2d8LabelTTF13updateTextureEv > (file:///home/caiiiycuk/emscripten/sdk/emscripten/cocos2d/cocos.js:10311:1666246) > > > Error only occurs in chrome, or is you disable asm.js mode (for > example by debugger) > > 2017-08-22 23:42 GMT+07:00 arnab choudhury <achoudh...@gmail.com>: >> 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>: >>> > 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. >>> >> >>>>>> 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. >>> > >>> > -- >>> > 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. >> >> -- >> 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. -- 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.