http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53880

--- Comment #24 from Markus Trippelsdorf <markus at trippelsdorf dot de> 
2012-07-30 11:21:54 UTC ---
(In reply to comment #23)
> (In reply to comment #22)
> > Still a 98% compile time regression on todays trunk.
> 
> What revision number is this? If it includes r189951, could you please see if
> you can get an updated profile (similar to the one in comment #3)?

I'm running revision 189954.

# Samples: 557K of event 'cycles'
# Event count (approx.): 448107030198
#
# Overhead  Command  Shared Object          Symbol        
    97.54%  cc1plus  cc1plus            [.] gt_pch_p_9line_maps
     0.12%  cc1plus  cc1plus            [.] htab_find_slot_with_hash
     0.10%  cc1plus  libc-2.16.90.so    [.] memcpy@@GLIBC_2.14
     0.10%  cc1plus  cc1plus            [.] htab_expand
     0.09%  cc1plus  libc-2.16.90.so    [.] malloc_consolidate
     0.08%  cc1plus  cc1plus            [.] htab_find_with_hash
     0.08%  cc1plus  libc-2.16.90.so    [.] msort_with_tmp.part.0

Zoom into gt_pch_p_9line_maps:

       │         if ((*x).info_macro.maps != NULL) {
       │           size_t i2;
       │           for (i2 = 0; i2 != (size_t)(l2); i2++) {
  4.10 │109:   cmp    %rcx,%rbx
  3.86 │       nop
  3.22 │     ↓ je     188
  3.26 │112:   mov    0x18(%rbp),%rax
  3.21 │       add    $0x1,%rbx
       │           break;
       │         }
       │     }
       │
       │     void
       │     gt_pch_p_9line_maps (ATTRIBUTE_UNUSED void *this_obj,
  2.94 │11a:   lea    (%rbx,%rbx,4),%r15
  3.69 │       shl    $0x3,%r15
       │       {
       │         size_t l2 = (size_t)(((*x).info_macro).used);
       │         if ((*x).info_macro.maps != NULL) {
       │           size_t i2;
       │           for (i2 = 0; i2 != (size_t)(l2); i2++) {
       │             switch (((*x).info_macro.maps[i2]).reason ==
LC_ENTER_MACRO)
  3.58 │       lea    (%rax,%r15,1),%rdi
  3.59 │       cmpb   $0x4,0x4(%rdi)
  4.26 │     ↑ jne    100
       │                   op (&((*x).info_macro.maps[i2].d.ordinary.to_file),
cookie);
       │                 break;
       │               case 1:
       │                 {
       │                   union tree_node * x3 =
       │                     ((*x).info_macro.maps[i2].d.macro.macro) ?
HT_IDENT_TO_GCC_IDENT (HT_NODE (((*x).info_macro.maps[i2].d.macro.macro))) :
  4.18 │       mov    0x8(%rdi),%rsi
  4.07 │       xor    %edx,%edx
  2.28 │       lea    -0x18(%rsi),%r8
  2.28 │       test   %rsi,%rsi
  2.70 │       cmovne %r8,%rdx
       │                   if ((void *)((*x).info_macro.maps) == this_obj)
  2.69 │       cmp    %rax,%r14
       │                 if ((void *)((*x).info_macro.maps) == this_obj)
       │                   op (&((*x).info_macro.maps[i2].d.ordinary.to_file),
cookie);
       │                 break;
       │               case 1:
       │                 {
       │                   union tree_node * x3 =
  2.55 │       mov    %rdx,0x18(%rsp)
       │                     ((*x).info_macro.maps[i2].d.macro.macro) ?
HT_IDENT_TO_GCC_IDENT (HT_NODE (((*x).info_macro.maps[i2].d.macro.macro))) :
       │                   if ((void *)((*x).info_macro.maps) == this_obj)
  2.82 │     ↓ je     1a0
       │                     op (&(x3), cookie);
       │                   (*x).info_macro.maps[i2].d.macro.macro = (x3) ?
CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT ((x3))) : NULL;
  2.80 │147:   lea    0x18(%rdx),%rsi
  3.00 │       xor    %eax,%eax
  3.28 │       test   %rdx,%rdx
  3.11 │       cmovne %rsi,%rax
  3.15 │       mov    %rax,0x8(%rdi)
       │                 }
       │                 if ((*x).info_macro.maps[i2].d.macro.macro_locations
!= NULL) {
  4.51 │       mov    0x18(%rbp),%rax
  4.45 │       add    %rax,%r15
  4.94 │       cmpq   $0x0,0x18(%r15)
  3.74 │     ↑ je     109
       │                   if ((void *)((*x).info_macro.maps) == this_obj)
  3.16 │       cmp    %rax,%r14
  3.03 │     ↑ jne    109
       │                     op
(&((*x).info_macro.maps[i2].d.macro.macro_locations), cookie);
       │       mov    %rcx,0x8(%rsp)
  0.00 │       lea    0x18(%r15),%rdi
       │       mov    %r13,%rsi
       │     → callq  *%r12
  0.00 │       mov    0x8(%rsp),%rcx
       │       }

Reply via email to