WLF doesn't fold; WLgenerator bounds not always N_id nodes
|
|
Bugzilla Link |
623 |
Created on |
Dec 13, 2009 18:00 |
Version |
svn |
OS |
Linux |
Architecture |
PC |
Extended Description
If you compile this:
use Array: {reverse,sel,iota,sum};
int main()
{
XXX = iota(50);
ZZZ = sum(reverse(XXX));
z = _sub_SxS_(ZZZ, 1225);
return(z);
}
with sac2c -b11 crud.sac >crud, you get this in main(),
with Build # product rev 16673:MODIFIED linux-gnu_x86_64:
_flat_0 = 50;
_pinl_127__flat_5 = [ _flat_0 ];
_pinl_129__flat_3 = 0;
_pinl_246_max_lower = [ _pinl_129__flat_3 ];
XXX = with {
(_pinl_246_max_lower <= _pinl_133__flat_6=[_pinl_134_i] (IDXS:_wlidx_908_XXX) < _pinl_127__flat_5)
{
/* empty */
} : _pinl_134_i ;
} :
genarray( _pinl_127__flat_5, _pinl_129__flat_3, IDX(_wlidx_908_XXX));
_pinl_168_maxidx0 = 49;
_pinl_223_res = with {
([ 0 ] <= _pinl_221_iv=[_pinl_224__eat_3] < [ 50 ])
{
_pinl_225__ea_33_res = _accu_( _pinl_221_iv);
_pinl_175__flat_870__SSA3_1 = _sub_SxS_( _pinl_168_maxidx0, _pinl_224__eat_3);
_ivesplit_915 = _pinl_175__flat_870__SSA3_1;
_pinl_211__flat_104__SSA3_1 = _idx_sel_( _ivesplit_915, XXX);
_pinl_233__flat_83 = _add_SxS_( _pinl_225__ea_33_res, _pinl_211__flat_104__SSA3_1);
} : _pinl_233__flat_83 ;
} :
fold( ScalarArith::+, _pinl_129__flat_3);
I am guessing ( but have not looked) that WLF is getting confused
by:
(a) a mix of N_array nodes and N_id nodes in WL generator bounds,
and/or:
(b) Flattened vs. non-flattened N_array node contents.