WLBSC inhibits CWLE in LACFUN when producerWL is an N_arg in sac/apex/histlpAKD/histlpAKD.sac
|
|
Bugzilla Link |
655 |
Created on |
Jan 07, 2010 20:47 |
Resolution |
FIXED |
Resolved on |
Jan 11, 2010 20:07 |
Version |
svn |
OS |
Linux |
Architecture |
PC |
Extended Description
In Build#16706:16707:MODIFIED, WLBSC causes CWLE to fail to
replace a copy-WL in a LACFUN when the "rhs" WL is an N_arg to the
LACFUN. CWLE includes a comparison of the LHS and RHS AVIS_SHAPES
to confirm that the copy covers the RHS array.
Here's a shard from the LACFUN header; r_2 is the RHS:
isaa_4831_r_2 { dim: 1, shape: [ 1 ] } ,
int[.] r_2 { dim: 1, shape: _isaa_4831_r_2 }
Here is the LHS vardec:
int[.] _pinl_3569_res { dim: 1, shape: _pinl_3576__wlbsc_2151_sc_bound } ;
Here is the copy-WL:
_pinl_3575__wlbsc_2150_sc_e = _idx_shape_sel_( 0, r_2);
_pinl_3576__wlbsc_2151_sc_bound = [ _pinl_3575__wlbsc_2150_sc_e ];
_wlbsc_5400_sc_bound = [ 0 ];
_pinl_3569_res = with {
(_wlbsc_5400_sc_bound <= _pinl_3566_iv=[_pinl_3570__eat_177] < _pinl_3576__wlbsc_2151_sc_bound genwidth [ _pinl_3575__wlbsc_2150_sc_e ])
{
_pinl_3567__flat_359 = _sel_VxA_( _pinl_3566_iv, r_2);
} : _pinl_3567__flat_359 ;
} :
genarray( _pinl_3576__wlbsc_2151_sc_bound, _pinl_3454__flat_94);
The fundamental problem here is that we have no existing method to
match the shape of the LHS to that of the RHS.
I think a reasonable way to handle this problem might be as follows:
Copy if AVIS_SHAPES match OR if shape(rhs)== S, where
s0 = _shape_sel(0, RHS);
s1 = _shape_sel(1, RHS);
s2 = _shape_sel(2, RHS);
S = [ s0, s1, s2...]
I'm not sure how to do this elegantly, but it looks like it should be PMable.
I think it should get fixed, because it's making histlpAKD.sac run about
275X slower...