On Saturday, February 14, 2015 at 8:07:59 AM UTC+1, Clifford Wolf wrote:

> My default is -Os without the other options. With that I get a JavaScript 
> function with 10530 local variables.
>

I have now done a little more analysis over my project. This is not even 
the function with the most local variables, there are two larger ones. One 
with 12919 and one with 16594 variables:

<skipping first 4979 results>
  4302 
__ZN12_GLOBAL__N_114dump_cell_exprERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEENS0_12basic_stringIcS3_NS0_9allocatorIcEEEEPN5Yosys5RTLIL4CellE
  4554 __Z24frontend_verilog_yyparsev
  4592 
__ZN12_GLOBAL__N_110ExposePass7executeENSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEEPN5Yosys5RTLIL6DesignE
  4700 __ZN12_GLOBAL__N_110BtorDumper9dump_cellEPKN5Yosys5RTLIL4CellE
  5023 __ZN5Yosys3AST7AstNode8genRTLILEib
  5212 
__ZN12_GLOBAL__N_113TechmapWorker14techmap_moduleEPN5Yosys5RTLIL6DesignEPNS2_6ModuleES4_RNSt3__13setIPNS2_4CellENS7_4lessISA_EENS7_9allocatorISA_EEEERKNS7_3mapINS2_8IdStringENS8_ISI_NS2_14sort_by_id_strENSD_ISI_EEEENSB_ISI_EENSD_INS7_4pairIKSI_SL_EEEEEEb
  5512 
__ZN12_GLOBAL__N_112replace_cellEPN5Yosys5RTLIL4CellERKNS_7rules_tERKNS4_6bram_tERKNS4_7match_tERNS0_7hashlib4dictINSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEEiNSD_8hash_opsISL_EEEEi
 10604 __ZN5Yosys3AST7AstNode8simplifyEbbbiibb
 12919 __ZN5Yosys6SatGen10importCellEPNS_5RTLIL4CellEi
 16594 
__ZN12_GLOBAL__N_119replace_const_cellsEPN5Yosys5RTLIL6DesignEPNS1_6ModuleEbbbbb


     0 -   100 vars:  4270 functions
   100 -   200 vars:   365 functions
   200 -   500 vars:   188 functions
   500 -  1000 vars:    76 functions
  1000 -  2000 vars:    51 functions
  2000 -  5000 vars:    33 functions
  5000 - 10000 vars:     3 functions
 10000 - 16594 vars:     3 functions

(the difference in number of variables for the simply() function is most 
likely because I am now using a script to count, before it was just doing 
some hacks in my text editor..)

The frontend_verilog_yyparse at 4554 variables is a parser generated with 
bison. So whatever that looks like should not be too uncommon in larger 
projects. (But I'm not sure how many of those are ported to JavaScript. ;)

On Saturday, February 14, 2015 at 5:44:36 AM UTC+1, Alon Zakai wrote:
>
> 7044 local variables? wow! :) Is this on an unoptimized build, or -O1? I 
> would be surprised to see that on -O2 or -O3.
>
 
So either I am doing something fundamentally wrong in my project or 
functions with thousands of local javascript variables is something one 
just gets on occasion..

Under what circumstances does emcc create additional local variables? I 
would have assumed that the number local variables would rather be in the 
order of number of register you'd usually have in a CPU.. I'm thankful for 
any insights or pointers to documentation. (I haven't found any 
documentation on those implementation details, but maybe I was just looking 
in the wrong places..).

What this functions in my list above all have in common is that they are 
rather large, usually built around one large switch statement or series of 
if-statements. The sourcecode to the two functions with the most javascript 
vars (importCell and replace_cost_cells) can be found here, just an case 
anyone is curious:

https://github.com/cliffordwolf/yosys/blob/bc86b4a7e9c847180e6fd7ed81e0a15d5aee00a0/kernel/satgen.h
https://github.com/cliffordwolf/yosys/blob/a8f4a099b5f1c51ccd46d875c874bbb1e7e5766b/passes/opt/opt_const.cc

regards,
 - clifford

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

Reply via email to