CSE misses cases on LACFNS in apex/mconvout
|
|
Bugzilla Link |
511 |
Created on |
Jun 17, 2009 23:41 |
Version |
1.00beta |
OS |
Linux |
Architecture |
PC |
Extended Description
The following is a fragment of code generated by the apex/mconvout/mconvout.sac benchmark. I see several problems with this code:
1. CSE (I think) fails to note that _flat_134 and _flat_137 are
identical, as are the sel() operations that follow them.
I would expect, as a first step, to move the common code out of
the conditional and into the code that dominates it.
2. As a second step, the indexing operation should be totally
lifted out of Cond_3 and into the calling environment.
This would eliminate the need for k, and i,
to be passed into Cond_3.
I am not sure how much this might affect run-time performance, but I stumbled
across this while searching for your basic factor-of-4 slowdown.
This isn't it, sadly enough, because it appears in both my fast and slow
cases.
-----------------------------------------------------------------------------
int _MAIN::_dup_13852______rotrIDD__Cond_3( int[100] k { } , int i { } , int j { } , bool _flat_129 { } )
/*
* _dup_13852______rotrIDD__Cond_3 :: ---
*/
{
int _pinl_10860__flat_95 { } ;
int _pinl_10861__flat_69 { } ;
int _pinl_10862__flat_68 { } ;
int _pinl_10855__flat_95 { } ;
int _pinl_10856__flat_69 { } ;
int _hce_1__SSA0_2 { } ;
int[1] _flat_134 { } ;
int[1] _flat_137 { } ;
if (_flat_129)
{
_flat_134 = [ i ];
_pinl_10855__flat_95 = _sel_VxA_( _flat_134, k);
_pinl_10856__flat_69 = _add_SxS_( j, _pinl_10855__flat_95);
}
else
{
_flat_137 = [ i ];
_pinl_10860__flat_95 = _sel_VxA_( _flat_137, k);
_pinl_10861__flat_69 = _add_SxS_( j, _pinl_10860__flat_95);
_pinl_10862__flat_68 = _sub_SxS_( _pinl_10861__flat_69, 350099);
}
_hce_1__SSA0_2 = ( _flat_129 ? _pinl_10856__flat_69 : _pinl_10862__flat_68 );
return( _hce_1__SSA0_2);
}