[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