https://gcc.gnu.org/bugzilla/show_bug.cgi?id=22326
--- Comment #14 from luoxhu at gcc dot gnu.org ---
(In reply to luoxhu from comment #13)
>
> 2) mad2.c
>
> float foo (double x, float y, float z)
> {
> return ( y * fabs (x) + z );
> }
>
>
> mad2.c.098t.cunrolli:
>
> foo (double x, float y, float z)
> {
> double _1;
> double _2;
> double _3;
> double _4;
> double _5;
> float _9;
>
> <bb 2> [local count: 1073741824]:
> _1 = (double) y_6(D);
> _2 = ABS_EXPR <x_7(D)>;
> _3 = _1 * _2;
> _4 = (double) z_8(D);
> _5 = _3 + _4;
> _9 = (float) _5;
> return _9;
>
> }
>
Maybe should use forward propagation here to save [_1, _2, _3 ... _9] to m_vars
and set ignore_convert status in usage_info if rhs of the expression could
remove double conversion, for stmt which has two rhs, need intersect status
with AND operation of rhs1 ignore_convert and rhs2 ignore_convert, also clear
the ignore_convert status if any of it is false. Not sure whether this works,
also a bit more complicated then expected...