[PATCH] D39352: [SimplifyCFG] Don't do if-conversion if there is a long dependence chain

Guozhi Wei via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 26 16:34:08 PDT 2017


Carrot added a comment.

Don't know why llvm generated code formatted like a mess. Try again.

The original llvm generated code:

  0.49 │40e200:   mov    %rcx,%rbx                                                     

45.49 │40e203:   mov    0x20(%rbx),%rcx                                                                          
 29.17 │40e207:   mov    (%rcx),%edx

  0.06 │40e209:   lea    0x18(%rbx),%rcx                                                                
       │40e20d:   lea    0x10(%rbx),%rsi                                                                 
  1.95 │40e211:   cmp    %edx,%eax                                                                    
  3.12 │40e213:   cmovl  %rsi,%rcx                                                               

13.21 │40e217:   mov    (%rcx),%rcx

  0.00 │40e21a:   test   %rcx,%rcx                                                  
  1.57 │40e21d: ↑ jne    40e200 <std::pair<std::_Rb_tree_iterator<Lock*>, bool> std::_Rb_tree<Lock*, Lock*, std::_Identity<Lock*>, LCmp, std::allocator<Lock*> >::_M_insert_unique<Lock* const&>(Lock* const&)+0x30>         

The llvm generated code with this patch

// -O2
.LBB1_3:

  movq    %rdx, %rbx
  movq    32(%rbx), %rcx
  movl    (%rcx), %ecx
  cmpl    %ecx, %eax
  jge     .LBB1_5
  
  leaq    16(%rbx), %rdx
  jmp     .LBB1_6
  .p2align        4, 0x90

.LBB1_5:

  leaq    24(%rbx), %rdx

.LBB1_6:

  movq    (%rdx), %rdx
  testq   %rdx, %rdx
  jne     .LBB1_3

// -O3
.LBB1_3:

  movq    %rdx, %rbx
  movq    32(%rbx), %rcx
  movl    (%rcx), %ecx
  cmpl    %ecx, %eax
  jge     .LBB1_5
  
  leaq    16(%rbx), %rdx
  movq    (%rdx), %rdx
  testq   %rdx, %rdx
  jne     .LBB1_3
  jmp     .LBB1_7
  .p2align        4, 0x90

.LBB1_5:

  leaq    24(%rbx), %rdx
  movq    (%rdx), %rdx
  testq   %rdx, %rdx
  jne     .LBB1_3

.LBB1_7:


https://reviews.llvm.org/D39352





More information about the llvm-commits mailing list