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?