https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115863

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Uroš Bizjak from comment #6)
> Please note that w/o .SAT_TRUNC the compiler is able to optimize hot loop in
> compress2 to:
> 
>   <bb 5> [local count: 536870912]:
>   _18 = MIN_EXPR <left_8, 4294967295>;
>   iftmp.0_11 = (unsigned int) _18;
>   stream.avail_out = iftmp.0_11;
>   left_37 = left_8 - _18;
> 
> while .SAT_TRUNC somehow interferes with this optimization to produce:
> 
>   <bb 5> [local count: 536870912]:
>   _45 = MIN_EXPR <left_8, 4294967295>;
>   iftmp.0_11 = .SAT_TRUNC (left_8);
>   stream.avail_out = iftmp.0_11;
>   left_37 = left_8 - _45;

it looks like whatever recognizes .SAT_TRUNC doesn't pay attention that
there are other uses of the MIN_EXPR and thus the MIN_EXPR stays live.

IIRC :s on (match (...) is ignored (and that's good IMO) at the moment so
the user of the match predicate has to check.

Reply via email to