https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118125
--- Comment #2 from Martin Jambor <jamborm at gcc dot gnu.org> --- On top if r15-7055-g459816efa13d9d I added a patch adding a dbg_counter to limit the updates. The slow-down is caused by two updates of value ranges in jump function, both of which are necessary to get the slow-down: +***dbgcnt: lower limit 2175 reached for ipa_update_vr.*** +***dbgcnt: upper limit 2175 reached for ipa_update_vr.*** +ipa-prop: Updating jump function VR of _M_create_storage/62058 -> allocate.constprop/58360 1 based on info from __ct_base /216 -> _M_create_storage/62058 1 (which is being inlined). + After intersecting: [irange] size_type [1, +INF] and [irange] size_type [0, 1152921504606846975] MASK 0xfffffffffffffff VALUE 0x0, setting it to: [irange] size_type [1, 1152921504606846975] and later +***dbgcnt: lower limit 2175 reached for ipa_update_vr.*** +***dbgcnt: upper limit 2175 reached for ipa_update_vr.*** +ipa-prop: Updating jump function VR of _M_create_storage/62058 -> allocate.constprop/58360 1 based on info from __ct_base /216 -> _M_create_storage/62058 1 (which is being inlined). + After intersecting: [irange] size_type [1, +INF] and [irange] size_type [0, 1152921504606846975] MASK 0xfffffffffffffff VALUE 0x0, setting it to: [irange] size_type [1, 1152921504606846975] + Apart from slight inlining ordering differences, this leads to the following differences in inlining results for hottest function that has slowed down (excluding differences only in symtab_node UIDs): ---------------------------------------------------------------------- --- sum-fast 2025-01-22 14:34:31.711998384 +0100 +++ sum-slow 2025-01-22 14:35:05.579500645 +0100 @@ -1,12 +1,12 @@ IPA function summary for solve/39387 inlinable fp_expression - global time: 584936.726562 + global time: 584902.237305 self size: 55 - global size: 1305 - min size: 1296 + global size: 1301 + min size: 1292 self stack: 648 global stack: 1194 estimated growth:329 - size:891.500000, time:571399.283203 + size:889.500000, time:571399.283203 size:3.000000, time:2.000000, executed if:(not inlined) size:0.500000, time:0.500000, executed if:(op1 not sra candidate) && (not inlined), nonconst if:(op1 not sra candidate) && (op1[ref offset: 576] changed) && (not inlined) size:0.500000, time:0.500000, executed if:(op1 not sra candidate), nonconst if:(op1 not sra candidate) && (op1[ref offset: 576] changed) @@ -298,18 +298,18 @@ __ct_base /66382 inlined freq:17.25 cross module Stack frame offset 1194, callee self size 0 - reinit.constprop/66851 inlined + reinit.constprop/66419 inlined freq:17.25 Stack frame offset 1194, callee self size 0 operator new []/151 function body not available freq:5.69 loop depth: 2 size: 3 time: 12 operator delete []/146 function body not available freq:3.04 loop depth: 2 size: 2 time: 11 - _ZN6dealii6VectorIdE6reinitEjb.part.0/66852 inlined + _ZN6dealii6VectorIdE6reinitEjb.part.0/66420 inlined freq:5.86 Stack frame offset 1194, callee self size 0 - operator delete []/146 function body not available - freq:3.14 loop depth: 2 size: 2 time: 11 + __builtin_unreachable/57309 unreachable + freq:0.00 cross module loop depth: 2 size: 0 time: 0 predicate: (false) __dt_base /7005 call is unlikely and code size would grow freq:0.00 cross module loop depth: 2 size: 2 time: 11 callee size: 7 stack: 0 op0 is compile time invariant ---------------------------------------------------------------------- I.e. one call of operator delete[](void*) from function dealii::Vector<double>::reinit(unsigned int, bool) is determined to never be executed.