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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|tree-optimization           |middle-end

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
      /* Expand X*Y as X&-Y when Y must be zero or one.  */
...
          if (bit0_p || bit1_p)
            {
              bool speed = optimize_insn_for_speed_p ();
              int cost = add_cost (speed, mode) + neg_cost (speed, mode);
              struct algorithm algorithm;
              enum mult_variant variant;
              if (CONST_INT_P (op1)
                  ? !choose_mult_variant (mode, INTVAL (op1),
                                          &algorithm, &variant, cost)
                  : cost < mul_cost (speed, mode))


Note this should have a debug print in dump_file but that is a different story.

So maybe we are not doing the right costs here.

Or we should have another choice of how to expand `a * onezero` into `onezero ?
a : 0`

Reply via email to