> 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.

Reply via email to