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.