https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65654
--- Comment #2 from Jan Hubicka <hubicka at gcc dot gnu.org> --- OK, it reproduces for me. The size difference is 2 Caller size is: Inline summary for set_laplace_on_hex_vector/158341 inlinable self time: 1602 global time: 1602 self size: 43 global size: 43 min size: 31 self stack: 8 global stack: 8 estimated growth:23 size:24.500000, time:1436.340500, predicate:(true) size:5.500000, time:146.532500, predicate:(not inlined) size:0.500000, time:0.500000, predicate:(op0[ref offset: 960] changed) && (not inlined) size:4.500000, time:4.500000, predicate:(op0[ref offset: 960] changed) size:0.500000, time:0.423500, predicate:(op0[ref offset: 1024] changed) && (not inlined) size:0.500000, time:0.423500, predicate:(op0[ref offset: 1024] changed) size:0.500000, time:0.423500, predicate:(op0[ref offset: 992] changed) && (not inlined) size:0.500000, time:0.423500, predicate:(op0[ref offset: 992] changed) calls: compute_laplace_vector/158368 --param large-stack-frame-growth limit reached loop depth: 0 freq: 110 size: 3 time: 12 callee size:120 stack:920 reinit/13143 --param max-inline-insns-auto limit reached loop depth: 0 freq: 616 size: 3 time: 12 callee size:29 stack: 0 op1 is compile time invariant While callee summary has a lot of calls Inline summary for compute_laplace_vector/158368 inlinable self time: 10734 global time: 8632 self size: 228 global size: 240 min size: 224 self stack: 912 global stack: 920 estimated growth:-16 size:156.500000, time:8055.395000, predicate:(true) size:12.500000, time:302.000000, predicate:(not inlined) size:0.500000, time:0.500000, predicate:(op0[ref offset: 960] changed) && (not inlined) size:1.500000, time:1.500000, predicate:(op0[ref offset: 960] changed) calls: ... My guess is that this actualy is an roundoff issue with updating. There is nothing interesting propagated and/or optimized out. This code will change early next stage with conversion to sreals, so I tend to believe we can drop the assert for this stage4