Hello caiiycuk I just pushed an update to master - can you try pulling and trying on build.asm.js from your share?
Thanks! -Arnab On Tuesday, August 22, 2017 at 10:37:41 AM UTC-7, caiiiycuk wrote: > > > 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 Александр Гурьянов <[email protected] > <javascript:>>: > > 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 <[email protected] > <javascript:>>: > >> 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 <[email protected]>: > >>> > 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 Александр Гурьянов <[email protected]>: > >>> >> > Roll a ball project: > >>> >> > https://www.assetstore.unity3d.com/en/#!/content/77198 > >>> >> > > >>> >> > 2017-08-22 11:32 GMT+07:00 Александр Гурьянов <[email protected]>: > > >>> >> >> 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 Александр Гурьянов <[email protected]>: > > >>> >> >>> 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 <[email protected]>: > > >>> >> >>>> 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 > >>> >> >>>>> <[email protected]> > >>> >> >>>>> 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 [email protected] > <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 [email protected] > <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 [email protected] > <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 [email protected] <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 [email protected]. For more options, visit https://groups.google.com/d/optout.
