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.