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

--- Comment #5 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
IPA function summary for __flogr/1 inlinable builtin_constant_p_parms 0
  global time:     12.651610
  self size:       29
  global size:     0
  min size:       0
  self stack:      0 
  global stack:    0
    size:0.000000, time:0.000000
    size:3.000000, time:2.000000,  executed if:(not inlined)
    size:4.000000, time:3.320000,  nonconst if:(op0 changed)
    size:2.000000, time:0.858000,  executed if:(op0 != 0),  nonconst if:(op0
changed) && (op0 != 0)
    size:1.000000, time:0.214500,  executed if:(op0 <= 4294967295) && (op0 !=
0),  nonconst if:(op0 changed) && (op0 <= 4294967295) && (op0 != 0)
    size:19.000000, time:6.259110,  executed if:(op0 != 0)
  calls:
    __builtin_constant_p/12 function body not available
      freq:1.00 loop depth: 0 size: 0 time:  0

   Estimating body: __flogr/1
   Known to be false: not inlined  
   size:26 time:10.651610 nonspec time:12.651610 loops with known
iterations:0.000000 known strides:0.000000
a.c:66:15: missed:   not inlinable: __order_base_2.part.0/16 -> __flogr/1, call
is unlikely and code size would grow

Inliner does not track argument as a constant and predicates does not have
condition "op is not constant". So we end up accounting __builtin_constant_p
path as well as !builting_constant_p path.

This is kind of necessary, since inliner does not have enough info to tell that
__builtin_constant_p will be false after inlinng.

Reply via email to