https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64500
--- Comment #2 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- sassembly of section .text: │ │ 0000000000ddaba0 <push_to_top_level()>: │ _Z17push_to_top_levelv(): 0.00 │ push %r15 0.03 │ push %r14 │ mov $0xb,%edi │ push %r13 │ b: push %r12 │ push %rbp │ push %rbx │ sub $0x18,%rsp │ → callq timevar_cond_start(timevar_id_t) │ xor %edx,%edx │ xor %esi,%esi │ mov $0x1,%ecx 0.00 │ mov $0xc0,%edi │ mov %al,0xf(%rsp) │ → callq ggc_internal_cleared_alloc(unsigned long, void (*)(void*), unsigned long, unsigned long) │ mov %rax,%r15 │ mov scope_chain,%rax │ test %rax,%rax │ ↓ je 636 │ mov cfun,%rbx │ 49: test %rbx,%rbx │ ↓ jne 65b 0.01 │ mov 0xa8(%rax),%r14 │ xor %r13d,%r13d │ 5c: mov 0x50(%rax),%rbp 0.01 │ test %rbp,%rbp │ ↓ je 693 │ mov 0x28(%rbp),%rdi 0.00 │ mov %r15,%rsi │ → callq store_class_bindings(vec<cp_class_binding, va_gc, vl_embed │ test %r14,%r14 │ ↓ je 647 │ mov global_namespace,%r10 │ mov 0x68(%r10),%r11 │ cmp %r14,0x8(%r11) │ ↓ je 64a │ 93: mov (%r14),%rbx 0.03 │ movzbl guard variable for store_bindings(tree_node*, vec<cxx_saved_binding, va_gc, vl_embed,%r12d │ test %r12b,%r12b 0.01 │ ↓ je 6e5 │ mov $0xb,%edi │ → callq timevar_cond_start(timevar_id_t) │ test %rbx,%rbx │ mov %eax,%r12d │ ↓ je 6c0 │ nop 1.93 │ c0: cmpw $0x2,(%rbx) 17.12 │ ↓ je 3e3 1.87 │ mov 0x20(%rbx),%rbp 12.03 │ test %rbp,%rbp 35.44 │ ┌──je 6cc 11.90 │ │ cmpq $0x0,0x40(%rbp) 1.76 │ │↓ jne 400 8.67 │ │ mov 0x10(%rbx),%rbx 7.52 │ │ test %rbx,%rbx 0.95 │ │↑ jne c0 0.00 │ │ mov store_bindings(tree_node*, vec<cxx_saved_binding, va_gc, vl_embed,%rax 0.12 │ f2:│ test %rax,%rax 0.00 │ │ mov %rax,%rdx │ │↓ je 107 │ │ mov 0x4(%rax),%r8d │ │ test %r8d,%r8d ... 6cc is very far away.