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

--- Comment #12 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #5)
> It is the foperator_mult::op{1,2}_range and can be seen even on:
> double
> foo (double x, double y)
> {
>   double z = x * y;
>   if (z == 0.0)
>     return x;
>   return 42.0;
> }
> testcase.
> 2->3  (T) x_2(D) :      [frange] double [-0.0 (-0x0.0p+0), 0.0 (0x0.0p+0)]
> 2->3  (T) y_3(D) :      [frange] double [-0.0 (-0x0.0p+0), 0.0 (0x0.0p+0)]
> 2->3  (T) z_4 :         [frange] double [-0.0 (-0x0.0p+0), 0.0 (0x0.0p+0)]
> On the true edge of z == 0.0, we have [-0., 0.] range for z_4, that is

For my curiosity fow did you get such a detailed [frange] output for the
expressions? I tried -fdump-tree-all-all and best I get is a one-liner around
PHI nodes:

  # RANGE [frange] double [0.0 (0x0.0p+0), +Inf]
  # iftmp.5_6 = PHI <omww_17(3), 0.0(4), 0.0(6)>
  # .MEM_23 = PHI <.MEM_19(3), .MEM_19(4), .MEM_15(6)>
  # VUSE <.MEM_23>
  return iftmp.5_6;

Is there a magic gcc flag to dump more range details? Or you had to patch a bit
of gcc code?

Reply via email to