| # REQUIRES: system-linux |
| |
| # RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o |
| # RUN: link_fdata %s %t.o %t.fdata |
| # RUN: llvm-strip --strip-unneeded %t.o |
| # RUN: %clang %cflags %t.o -o %t.exe -Wl,-q -nostdlib |
| # RUN: llvm-bolt %t.exe --data %t.fdata -o %t --lite=0 -v=2 \ |
| # RUN: --cmov-conversion --cmov-conversion-misprediction-threshold=-1 \ |
| # RUN: --cmov-conversion-bias-threshold=-1 --print-all | FileCheck %s |
| # CHECK: BOLT-INFO: CMOVConversion: CmovInHotPath, converted static 1/1 |
| # CHECK: BOLT-INFO: CMOVConversion: CmovNotInHotPath, converted static 1/1 |
| # CHECK: BOLT-INFO: CMOVConversion: MaxIndex, converted static 1/1 |
| # CHECK: BOLT-INFO: CMOVConversion: MaxIndex_unpredictable, converted static 1/1 |
| # CHECK: BOLT-INFO: CMOVConversion: MaxValue, converted static 1/1 |
| # CHECK: BOLT-INFO: CMOVConversion: BinarySearch, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: Transform, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: test_cmov_memoperand, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: test_cmov_memoperand_unpredictable, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: test_cmov_memoperand_in_group, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: test_cmov_memoperand_in_group2, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: test_cmov_memoperand_conflicting_dir, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: test_cmov_memoperand_in_group_reuse_for_addr, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: test_cmov_memoperand_in_group_reuse_for_addr2, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: test_cmov_memoperand_in_group_reuse_for_addr3, converted static 0/0 |
| # CHECK: BOLT-INFO: CMOVConversion: test_memoperand_loop, converted static 1/1 |
| # CHECK: BOLT-INFO: CMOVConversion: CmovBackToBack, converted static 2/2 |
| # CHECK: BOLT-INFO: CMOVConversion total: converted static 8/8 |
| |
| .globl _start |
| _start: |
| .globl CmovInHotPath # -- Begin function CmovInHotPath |
| .p2align 4, 0x90 |
| .type CmovInHotPath,@function |
| CmovInHotPath: # @CmovInHotPath |
| # CHECK-LABEL: Binary Function "CmovInHotPath" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 CmovInHotPath 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| testl %edi, %edi |
| jle LBB0_5 |
| # %bb.1: # %for.body.preheader |
| movl %edi, %r8d |
| xorl %edi, %edi |
| # FDATA: 0 [unknown] 0 1 CmovInHotPath #LBB0_2# 1 2 |
| LBB0_2: # %for.body |
| movl (%rcx,%rdi,4), %eax |
| leal 1(%rax), %r9d |
| imull %esi, %eax |
| movl $10, %r10d |
| cmpl %edx, %eax |
| # CHECK: cmpl %edx, %eax |
| # CHECK-NEXT: cmovlel %r9d, %r10d |
| LBB0_2_br: |
| jg LBB0_4 |
| # FDATA: 1 CmovInHotPath #LBB0_2_br# 1 CmovInHotPath #LBB0_3# 1 2 |
| # FDATA: 1 CmovInHotPath #LBB0_2_br# 1 CmovInHotPath #LBB0_4# 1 2 |
| # %bb.3: # %for.body |
| LBB0_3: |
| movl %r9d, %r10d |
| LBB0_4: # %for.body |
| imull %r9d, %r10d |
| movl %r10d, (%rcx,%rdi,4) |
| addq $1, %rdi |
| cmpq %rdi, %r8 |
| jne LBB0_2 |
| LBB0_5: # %for.cond.cleanup |
| retq |
| Lfunc_end0: |
| .size CmovInHotPath, Lfunc_end0-CmovInHotPath |
| .cfi_endproc |
| # -- End function |
| .globl CmovNotInHotPath # -- Begin function CmovNotInHotPath |
| .p2align 4, 0x90 |
| .type CmovNotInHotPath,@function |
| CmovNotInHotPath: # @CmovNotInHotPath |
| # CHECK-LABEL: Binary Function "CmovNotInHotPath" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 CmovNotInHotPath 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| testl %edi, %edi |
| jle LBB1_5 |
| # %bb.1: # %for.body.preheader |
| movl %edx, %r9d |
| movl %edi, %r10d |
| xorl %edi, %edi |
| # FDATA: 0 [unknown] 0 1 CmovNotInHotPath #LBB1_2# 1 2 |
| LBB1_2: # %for.body |
| movl (%rcx,%rdi,4), %r11d |
| movl %r11d, %eax |
| imull %esi, %eax |
| movl $10, %edx |
| cmpl %r9d, %eax |
| # CHECK: cmpl %r9d, %eax |
| # CHECK-NEXT: cmovlel %r11d, %edx |
| LBB1_4_br: |
| jg LBB1_4 |
| # FDATA: 1 CmovNotInHotPath #LBB1_4_br# 1 CmovNotInHotPath #LBB1_3# 1 2 |
| # FDATA: 1 CmovNotInHotPath #LBB1_4_br# 1 CmovNotInHotPath #LBB1_4# 1 2 |
| # %bb.3: # %for.body |
| LBB1_3: |
| movl %r11d, %edx |
| LBB1_4: # %for.body |
| movl %edx, (%rcx,%rdi,4) |
| movl (%r8,%rdi,4), %eax |
| cltd |
| idivl %r9d |
| movl %eax, (%r8,%rdi,4) |
| addq $1, %rdi |
| cmpq %rdi, %r10 |
| jne LBB1_2 |
| LBB1_5: # %for.cond.cleanup |
| retq |
| Lfunc_end1: |
| .size CmovNotInHotPath, Lfunc_end1-CmovNotInHotPath |
| .cfi_endproc |
| # -- End function |
| .globl MaxIndex # -- Begin function MaxIndex |
| .p2align 4, 0x90 |
| .type MaxIndex,@function |
| MaxIndex: # @MaxIndex |
| # CHECK-LABEL: Binary Function "MaxIndex" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 MaxIndex 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| xorl %eax, %eax |
| cmpl $2, %edi |
| jl LBB2_5 |
| # %bb.1: # %for.body.preheader |
| movl %edi, %r8d |
| xorl %edi, %edi |
| movl $1, %edx |
| # FDATA: 0 [unknown] 0 1 MaxIndex #LBB2_2# 1 2 |
| LBB2_2: # %for.body |
| movl (%rsi,%rdx,4), %r9d |
| movslq %edi, %rcx |
| movl %edx, %eax |
| cmpl (%rsi,%rcx,4), %r9d |
| # CHECK: cmpl (%rsi,%rcx,4), %r9d |
| # CHECK-NEXT: cmovlel %edi, %eax |
| LBB2_2_br: |
| jg LBB2_4 |
| # FDATA: 1 MaxIndex #LBB2_2_br# 1 MaxIndex #LBB2_3# 1 2 |
| # FDATA: 1 MaxIndex #LBB2_2_br# 1 MaxIndex #LBB2_4# 1 2 |
| # %bb.3: # %for.body |
| LBB2_3: |
| movl %edi, %eax |
| LBB2_4: # %for.body |
| addq $1, %rdx |
| movl %eax, %edi |
| cmpq %rdx, %r8 |
| jne LBB2_2 |
| LBB2_5: # %for.cond.cleanup |
| retq |
| Lfunc_end2: |
| .size MaxIndex, Lfunc_end2-MaxIndex |
| .cfi_endproc |
| # -- End function |
| .globl MaxIndex_unpredictable # -- Begin function MaxIndex_unpredictable |
| .p2align 4, 0x90 |
| .type MaxIndex_unpredictable,@function |
| MaxIndex_unpredictable: # @MaxIndex_unpredictable |
| # CHECK-LABEL: Binary Function "MaxIndex_unpredictable" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 MaxIndex_unpredictable 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| xorl %eax, %eax |
| cmpl $2, %edi |
| jl LBB3_5 |
| # %bb.1: # %for.body.preheader |
| movl %edi, %r8d |
| xorl %edi, %edi |
| movl $1, %edx |
| # FDATA: 0 [unknown] 0 1 MaxIndex_unpredictable #LBB3_2# 1 2 |
| LBB3_2: # %for.body |
| movl (%rsi,%rdx,4), %r9d |
| movslq %edi, %rcx |
| movl %edx, %eax |
| cmpl (%rsi,%rcx,4), %r9d |
| # CHECK: cmpl (%rsi,%rcx,4), %r9d |
| # CHECK-NEXT: cmovlel %edi, %eax |
| LBB3_2_br: |
| jg LBB3_4 |
| # FDATA: 1 MaxIndex_unpredictable #LBB3_2_br# 1 MaxIndex_unpredictable #LBB3_3# 1 2 |
| # FDATA: 1 MaxIndex_unpredictable #LBB3_2_br# 1 MaxIndex_unpredictable #LBB3_4# 1 2 |
| # %bb.3: # %for.body |
| LBB3_3: |
| movl %edi, %eax |
| LBB3_4: # %for.body |
| addq $1, %rdx |
| movl %eax, %edi |
| cmpq %rdx, %r8 |
| jne LBB3_2 |
| LBB3_5: # %for.cond.cleanup |
| retq |
| Lfunc_end3: |
| .size MaxIndex_unpredictable, Lfunc_end3-MaxIndex_unpredictable |
| .cfi_endproc |
| # -- End function |
| .globl MaxValue # -- Begin function MaxValue |
| .p2align 4, 0x90 |
| .type MaxValue,@function |
| MaxValue: # @MaxValue |
| # CHECK-LABEL: Binary Function "MaxValue" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 MaxValue 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movl (%rsi), %ecx |
| cmpl $2, %edi |
| jge LBB4_3 |
| # %bb.1: |
| LBB4_1: |
| movl %ecx, %eax |
| LBB4_2: # %for.cond.cleanup |
| retq |
| LBB4_3: # %for.body.preheader |
| movl %edi, %edi |
| movl $1, %edx |
| LBB4_4: # %for.body |
| movl (%rsi,%rdx,4), %eax |
| cmpl %ecx, %eax |
| # CHECK: cmpl %ecx, %eax |
| # CHECK-NEXT: cmovlel %ecx, %eax |
| LBB4_4_br: |
| jg LBB4_6 |
| # FDATA: 1 MaxValue #LBB4_4_br# 1 MaxValue #LBB4_5# 1 2 |
| # FDATA: 1 MaxValue #LBB4_4_br# 1 MaxValue #LBB4_6# 1 2 |
| # %bb.5: # %for.body |
| LBB4_5: |
| movl %ecx, %eax |
| LBB4_6: # %for.body |
| addq $1, %rdx |
| movl %eax, %ecx |
| cmpq %rdx, %rdi |
| je LBB4_2 |
| jmp LBB4_4 |
| Lfunc_end4: |
| .size MaxValue, Lfunc_end4-MaxValue |
| .cfi_endproc |
| # -- End function |
| .globl BinarySearch # -- Begin function BinarySearch |
| .p2align 4, 0x90 |
| .type BinarySearch,@function |
| BinarySearch: # @BinarySearch |
| # CHECK-LABEL: Binary Function "BinarySearch" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 BinarySearch 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movl (%rsi), %eax |
| jmp LBB5_2 |
| LBB5_1: # %while.body |
| movl %ecx, %eax |
| xorl %ecx, %ecx |
| btl %eax, %edi |
| setae %cl |
| movq 8(%rdx,%rcx,8), %rdx |
| LBB5_2: # %while.body |
| movl (%rdx), %ecx |
| cmpl %ecx, %eax |
| ja LBB5_1 |
| # %bb.3: # %while.end |
| retq |
| Lfunc_end5: |
| .size BinarySearch, Lfunc_end5-BinarySearch |
| .cfi_endproc |
| # -- End function |
| .globl Transform # -- Begin function Transform |
| .p2align 4, 0x90 |
| .type Transform,@function |
| Transform: # @Transform |
| # CHECK-LABEL: Binary Function "Transform" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 Transform 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movb $1, %al |
| testb %al, %al |
| jne LBB6_5 |
| # %bb.1: # %while.body.preheader |
| movl %edx, %r8d |
| xorl %esi, %esi |
| LBB6_2: # %while.body |
| movslq %esi, %rsi |
| movl (%rdi,%rsi,4), %eax |
| xorl %edx, %edx |
| divl %r8d |
| movl %eax, %edx |
| movl $11, %eax |
| movl %r8d, %ecx |
| cmpl %r8d, %edx |
| ja LBB6_4 |
| # %bb.3: # %while.body |
| movl $22, %eax |
| movl $22, %ecx |
| LBB6_4: # %while.body |
| xorl %edx, %edx |
| divl %ecx |
| movl %edx, (%rdi,%rsi,4) |
| addl $1, %esi |
| cmpl %r9d, %esi |
| ja LBB6_2 |
| LBB6_5: # %while.end |
| retq |
| Lfunc_end6: |
| .size Transform, Lfunc_end6-Transform |
| .cfi_endproc |
| # -- End function |
| .globl test_cmov_memoperand # -- Begin function test_cmov_memoperand |
| .p2align 4, 0x90 |
| .type test_cmov_memoperand,@function |
| test_cmov_memoperand: # @test_cmov_memoperand |
| # CHECK-LABEL: Binary Function "test_cmov_memoperand" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 test_cmov_memoperand 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movl %edx, %eax |
| cmpl %esi, %edi |
| ja LBB7_2 |
| # %bb.1: # %entry |
| movl (%rcx), %eax |
| LBB7_2: # %entry |
| retq |
| Lfunc_end7: |
| .size test_cmov_memoperand, Lfunc_end7-test_cmov_memoperand |
| .cfi_endproc |
| # -- End function |
| .globl test_cmov_memoperand_unpredictable # -- Begin function test_cmov_memoperand_unpredictable |
| .p2align 4, 0x90 |
| .type test_cmov_memoperand_unpredictable,@function |
| test_cmov_memoperand_unpredictable: # @test_cmov_memoperand_unpredictable |
| # CHECK-LABEL: Binary Function "test_cmov_memoperand_unpredictable" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 test_cmov_memoperand_unpredictable 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movl %edx, %eax |
| cmpl %esi, %edi |
| ja LBB8_2 |
| # %bb.1: # %entry |
| movl (%rcx), %eax |
| LBB8_2: # %entry |
| retq |
| Lfunc_end8: |
| .size test_cmov_memoperand_unpredictable, Lfunc_end8-test_cmov_memoperand_unpredictable |
| .cfi_endproc |
| # -- End function |
| .globl test_cmov_memoperand_in_group # -- Begin function test_cmov_memoperand_in_group |
| .p2align 4, 0x90 |
| .type test_cmov_memoperand_in_group,@function |
| test_cmov_memoperand_in_group: # @test_cmov_memoperand_in_group |
| # CHECK-LABEL: Binary Function "test_cmov_memoperand_in_group" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 test_cmov_memoperand_in_group 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movl %edx, %eax |
| movl %edx, %r8d |
| cmpl %esi, %edi |
| ja LBB9_2 |
| # %bb.1: # %entry |
| movl (%rcx), %r8d |
| movl %edi, %eax |
| movl %esi, %edx |
| LBB9_2: # %entry |
| addl %r8d, %eax |
| addl %edx, %eax |
| retq |
| Lfunc_end9: |
| .size test_cmov_memoperand_in_group, Lfunc_end9-test_cmov_memoperand_in_group |
| .cfi_endproc |
| # -- End function |
| .globl test_cmov_memoperand_in_group2 # -- Begin function test_cmov_memoperand_in_group2 |
| .p2align 4, 0x90 |
| .type test_cmov_memoperand_in_group2,@function |
| test_cmov_memoperand_in_group2: # @test_cmov_memoperand_in_group2 |
| # CHECK-LABEL: Binary Function "test_cmov_memoperand_in_group2" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 test_cmov_memoperand_in_group2 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movl %edx, %eax |
| movl %edx, %r8d |
| cmpl %esi, %edi |
| jbe LBB10_2 |
| # %bb.1: # %entry |
| movl (%rcx), %r8d |
| movl %edi, %eax |
| movl %esi, %edx |
| LBB10_2: # %entry |
| addl %r8d, %eax |
| addl %edx, %eax |
| retq |
| Lfunc_end10: |
| .size test_cmov_memoperand_in_group2, Lfunc_end10-test_cmov_memoperand_in_group2 |
| .cfi_endproc |
| # -- End function |
| .globl test_cmov_memoperand_conflicting_dir # -- Begin function test_cmov_memoperand_conflicting_dir |
| .p2align 4, 0x90 |
| .type test_cmov_memoperand_conflicting_dir,@function |
| test_cmov_memoperand_conflicting_dir: # @test_cmov_memoperand_conflicting_dir |
| # CHECK-LABEL: Binary Function "test_cmov_memoperand_conflicting_dir" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 test_cmov_memoperand_conflicting_dir 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| cmpl %esi, %edi |
| movl (%rcx), %eax |
| cmoval %edx, %eax |
| cmoval (%r8), %edx |
| addl %edx, %eax |
| retq |
| Lfunc_end11: |
| .size test_cmov_memoperand_conflicting_dir, Lfunc_end11-test_cmov_memoperand_conflicting_dir |
| .cfi_endproc |
| # -- End function |
| .globl test_cmov_memoperand_in_group_reuse_for_addr # -- Begin function test_cmov_memoperand_in_group_reuse_for_addr |
| .p2align 4, 0x90 |
| .type test_cmov_memoperand_in_group_reuse_for_addr,@function |
| test_cmov_memoperand_in_group_reuse_for_addr: # @test_cmov_memoperand_in_group_reuse_for_addr |
| # CHECK-LABEL: Binary Function "test_cmov_memoperand_in_group_reuse_for_addr" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 test_cmov_memoperand_in_group_reuse_for_addr 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movl %edi, %eax |
| cmpl %esi, %edi |
| ja LBB12_2 |
| # %bb.1: # %entry |
| movl (%rcx), %eax |
| LBB12_2: # %entry |
| retq |
| Lfunc_end12: |
| .size test_cmov_memoperand_in_group_reuse_for_addr, Lfunc_end12-test_cmov_memoperand_in_group_reuse_for_addr |
| .cfi_endproc |
| # -- End function |
| .globl test_cmov_memoperand_in_group_reuse_for_addr2 # -- Begin function test_cmov_memoperand_in_group_reuse_for_addr2 |
| .p2align 4, 0x90 |
| .type test_cmov_memoperand_in_group_reuse_for_addr2,@function |
| test_cmov_memoperand_in_group_reuse_for_addr2: # @test_cmov_memoperand_in_group_reuse_for_addr2 |
| # CHECK-LABEL: Binary Function "test_cmov_memoperand_in_group_reuse_for_addr2" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 test_cmov_memoperand_in_group_reuse_for_addr2 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movl %edi, %eax |
| cmpl %esi, %edi |
| ja LBB13_2 |
| # %bb.1: # %entry |
| movq (%rcx), %rax |
| movl (%rax), %eax |
| LBB13_2: # %entry |
| retq |
| Lfunc_end13: |
| .size test_cmov_memoperand_in_group_reuse_for_addr2, Lfunc_end13-test_cmov_memoperand_in_group_reuse_for_addr2 |
| .cfi_endproc |
| # -- End function |
| .globl test_cmov_memoperand_in_group_reuse_for_addr3 # -- Begin function test_cmov_memoperand_in_group_reuse_for_addr3 |
| .p2align 4, 0x90 |
| .type test_cmov_memoperand_in_group_reuse_for_addr3,@function |
| test_cmov_memoperand_in_group_reuse_for_addr3: # @test_cmov_memoperand_in_group_reuse_for_addr3 |
| # CHECK-LABEL: Binary Function "test_cmov_memoperand_in_group_reuse_for_addr3" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 test_cmov_memoperand_in_group_reuse_for_addr3 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movl %edi, %eax |
| cmpl %esi, %edi |
| ja LBB14_2 |
| # %bb.1: # %entry |
| movl (%rcx), %eax |
| LBB14_2: # %entry |
| retq |
| Lfunc_end14: |
| .size test_cmov_memoperand_in_group_reuse_for_addr3, Lfunc_end14-test_cmov_memoperand_in_group_reuse_for_addr3 |
| .cfi_endproc |
| # -- End function |
| .globl test_memoperand_loop # -- Begin function test_memoperand_loop |
| .p2align 4, 0x90 |
| .type test_memoperand_loop,@function |
| test_memoperand_loop: # @test_memoperand_loop |
| # CHECK-LABEL: Binary Function "test_memoperand_loop" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 test_memoperand_loop 0 1 2 |
| .cfi_startproc |
| # %bb.0: # %entry |
| movq begin@GOTPCREL(%rip), %r8 |
| movq (%r8), %rax |
| movq end@GOTPCREL(%rip), %rcx |
| movq (%rcx), %rdx |
| xorl %esi, %esi |
| movq %rax, %rcx |
| LBB15_1: # %loop.body |
| addq $8, %rcx |
| cmpq %rdx, %rcx |
| ja LBB15_3 |
| # %bb.2: # %loop.body |
| movq (%r8), %rcx |
| LBB15_3: # %loop.body |
| movl %edi, (%rcx) |
| addq $8, %rcx |
| cmpq %rdx, %rcx |
| # CHECK: movl %edi, (%rcx) |
| # CHECK-NEXT: addq $0x8, %rcx |
| # CHECK-NEXT: cmpq %rdx, %rcx |
| # CHECK-NEXT: cmovbeq %rax, %rcx |
| LBB15_3_br: |
| ja LBB15_5 |
| # FDATA: 1 test_memoperand_loop #LBB15_3_br# 1 test_memoperand_loop #LBB15_4# 1 2 |
| # FDATA: 1 test_memoperand_loop #LBB15_3_br# 1 test_memoperand_loop #LBB15_5# 1 2 |
| # %bb.4: # %loop.body |
| LBB15_4: |
| movq %rax, %rcx |
| LBB15_5: # %loop.body |
| movl %edi, (%rcx) |
| addl $1, %esi |
| cmpl $1024, %esi # imm = 0x400 |
| jl LBB15_1 |
| # %bb.6: # %exit |
| retq |
| Lfunc_end15: |
| .size test_memoperand_loop, Lfunc_end15-test_memoperand_loop |
| .cfi_endproc |
| # -- End function |
| .globl CmovBackToBack # -- Begin function CmovBackToBack |
| .p2align 4, 0x90 |
| .type CmovBackToBack,@function |
| CmovBackToBack: # @CmovBackToBack |
| # CHECK-LABEL: Binary Function "CmovBackToBack" after CMOV conversion |
| # FDATA: 0 [unknown] 0 1 CmovBackToBack 0 1 2 |
| .cfi_startproc |
| testl %edi, %edi |
| jle LBB16_5 |
| movl %edi, %r8d |
| xorl %edi, %edi |
| # FDATA: 0 [unknown] 0 1 CmovBackToBack #LBB16_2# 1 2 |
| LBB16_2: # %for.body |
| movl (%rcx,%rdi,4), %eax |
| leal 1(%rax), %r9d |
| imull %esi, %eax |
| movl $10, %r10d |
| cmpl %edx, %eax |
| # CHECK: cmpl %edx, %eax |
| # CHECK-NEXT: cmovlel %r9d, %r10d |
| LBB16_2_br: |
| jg LBB16_4 |
| # FDATA: 1 CmovBackToBack #LBB16_2_br# 1 CmovBackToBack #LBB16_3# 1 2 |
| # FDATA: 1 CmovBackToBack #LBB16_2_br# 1 CmovBackToBack #LBB16_4# 1 2 |
| LBB16_3: |
| movl %r9d, %r10d |
| LBB16_4: # %for.body |
| # CHECK-NEXT: cmovlel %r9d, %r10d |
| LBB16_6_br: |
| jg LBB16_8 |
| # FDATA: 1 CmovBackToBack #LBB16_6_br# 1 CmovBackToBack #LBB16_7# 1 2 |
| # FDATA: 1 CmovBackToBack #LBB16_6_br# 1 CmovBackToBack #LBB16_8# 1 2 |
| LBB16_7: |
| movl %r9d, %r10d |
| LBB16_8: # %for.body |
| imull %r9d, %r10d |
| movl %r10d, (%rcx,%rdi,4) |
| addq $1, %rdi |
| cmpq %rdi, %r8 |
| jne LBB16_2 |
| LBB16_5: # %for.cond.cleanup |
| retq |
| Lfunc_end16: |
| .size CmovBackToBack, Lfunc_end16-CmovBackToBack |
| .cfi_endproc |
| # -- End function |
| .data |
| .globl begin |
| begin: |
| .quad 0xdeadbeef |
| .globl end |
| end: |
| .quad 0xfaceb00c |
| |