[llvm] r340706 - [X86] Add FeatureCMOV to athlon and athlon-tbird cpus.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 26 11:29:27 PDT 2018


Author: ctopper
Date: Sun Aug 26 11:29:27 2018
New Revision: 340706

URL: http://llvm.org/viewvc/llvm-project?rev=340706&view=rev
Log:
[X86] Add FeatureCMOV to athlon and athlon-tbird cpus.

Summary: This matches gcc and one cpuid dump I found online. Given that these are considered 7th generation x86 CPU it seems likely they support cmov since cmov was added by Intel in their 6th generation.

Reviewers: RKSimon, spatel

Reviewed By: RKSimon

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D51264

Modified:
    llvm/trunk/lib/Target/X86/X86.td
    llvm/trunk/test/CodeGen/X86/select.ll

Modified: llvm/trunk/lib/Target/X86/X86.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86.td?rev=340706&r1=340705&r2=340706&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86.td (original)
+++ llvm/trunk/lib/Target/X86/X86.td Sun Aug 26 11:29:27 2018
@@ -904,7 +904,7 @@ def : Proc<"k6-2",            [FeatureX8
 def : Proc<"k6-3",            [FeatureX87, FeatureSlowUAMem16, Feature3DNow]>;
 
 foreach P = ["athlon", "athlon-tbird"] in {
-  def : Proc<P, [FeatureX87, FeatureSlowUAMem16, Feature3DNowA,
+  def : Proc<P, [FeatureX87, FeatureSlowUAMem16, FeatureCMOV, Feature3DNowA,
                  FeatureNOPL, FeatureSlowSHLD]>;
 }
 

Modified: llvm/trunk/test/CodeGen/X86/select.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/select.ll?rev=340706&r1=340705&r2=340706&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/select.ll (original)
+++ llvm/trunk/test/CodeGen/X86/select.ll Sun Aug 26 11:29:27 2018
@@ -1,6 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -mcpu=generic | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -mcpu=atom    | FileCheck %s --check-prefix=CHECK --check-prefix=ATOM
+; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -mcpu=athlon  | FileCheck %s --check-prefix=ATHLON
 ; RUN: llc < %s -mtriple=i386-intel-elfiamcu                 | FileCheck %s --check-prefix=MCU
 
 ; PR5757
@@ -16,6 +17,15 @@ define i32 @test1(%0* %p, %0* %q, i1 %r)
 ; CHECK-NEXT:    movl (%rsi), %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: test1:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    addq $8, %rdi
+; ATHLON-NEXT:    addq $8, %rsi
+; ATHLON-NEXT:    testb $1, %dl
+; ATHLON-NEXT:    cmovneq %rdi, %rsi
+; ATHLON-NEXT:    movl (%rsi), %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test1:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    testb $1, %cl
@@ -73,6 +83,24 @@ define i32 @test2() nounwind {
 ; ATOM-NEXT:  LBB1_1: ## %bb90
 ; ATOM-NEXT:    ud2
 ;
+; ATHLON-LABEL: test2:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    pushq %rax
+; ATHLON-NEXT:    callq _return_false
+; ATHLON-NEXT:    xorl %ecx, %ecx
+; ATHLON-NEXT:    testb $1, %al
+; ATHLON-NEXT:    movl $-480, %eax ## imm = 0xFE20
+; ATHLON-NEXT:    cmovnel %ecx, %eax
+; ATHLON-NEXT:    shll $3, %eax
+; ATHLON-NEXT:    cmpl $32768, %eax ## imm = 0x8000
+; ATHLON-NEXT:    jge LBB1_1
+; ATHLON-NEXT:  ## %bb.2: ## %bb91
+; ATHLON-NEXT:    xorl %eax, %eax
+; ATHLON-NEXT:    popq %rcx
+; ATHLON-NEXT:    retq
+; ATHLON-NEXT:  LBB1_1: ## %bb90
+; ATHLON-NEXT:    ud2
+;
 ; MCU-LABEL: test2:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    calll return_false
@@ -124,6 +152,15 @@ define float @test3(i32 %x) nounwind rea
 ; ATOM-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test3:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    xorl %eax, %eax
+; ATHLON-NEXT:    testl %edi, %edi
+; ATHLON-NEXT:    sete %al
+; ATHLON-NEXT:    leaq {{.*}}(%rip), %rcx
+; ATHLON-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test3:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    xorl %ecx, %ecx
@@ -147,6 +184,15 @@ define signext i8 @test4(i8* nocapture %
 ; CHECK-NEXT:    movsbl (%rdi,%rax,4), %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: test4:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
+; ATHLON-NEXT:    xorl %eax, %eax
+; ATHLON-NEXT:    ucomisd %xmm0, %xmm1
+; ATHLON-NEXT:    seta %al
+; ATHLON-NEXT:    movsbl (%rdi,%rax,4), %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test4:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    movl %eax, %ecx
@@ -181,6 +227,18 @@ define void @test5(i1 %c, <2 x i16> %a,
 ; CHECK-NEXT:    movd %xmm0, (%rsi)
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: test5:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    testb $1, %dil
+; ATHLON-NEXT:    jne LBB4_2
+; ATHLON-NEXT:  ## %bb.1:
+; ATHLON-NEXT:    movdqa %xmm1, %xmm0
+; ATHLON-NEXT:  LBB4_2:
+; ATHLON-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; ATHLON-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
+; ATHLON-NEXT:    movd %xmm0, (%rsi)
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test5:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    pushl %esi
@@ -216,6 +274,20 @@ define void @test6(i32 %C, <4 x float>*
 ; CHECK-NEXT:    movaps %xmm0, (%rsi)
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: test6:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    testl %edi, %edi
+; ATHLON-NEXT:    je LBB5_1
+; ATHLON-NEXT:  ## %bb.2:
+; ATHLON-NEXT:    movaps (%rsi), %xmm0
+; ATHLON-NEXT:    movaps %xmm0, (%rsi)
+; ATHLON-NEXT:    retq
+; ATHLON-NEXT:  LBB5_1:
+; ATHLON-NEXT:    movaps (%rdx), %xmm0
+; ATHLON-NEXT:    mulps %xmm0, %xmm0
+; ATHLON-NEXT:    movaps %xmm0, (%rsi)
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test6:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    pushl %eax
@@ -297,6 +369,16 @@ define x86_fp80 @test7(i32 %tmp8) nounwi
 ; ATOM-NEXT:    fldt (%rax,%rcx)
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test7:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    xorl %eax, %eax
+; ATHLON-NEXT:    testl %edi, %edi
+; ATHLON-NEXT:    setns %al
+; ATHLON-NEXT:    shlq $4, %rax
+; ATHLON-NEXT:    leaq {{.*}}(%rip), %rcx
+; ATHLON-NEXT:    fldt (%rax,%rcx)
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test7:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    notl %eax
@@ -378,6 +460,40 @@ define void @test8(i1 %c, <6 x i32>* %ds
 ; ATOM-NEXT:    movdqa %xmm0, (%rsi)
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test8:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    testb $1, %dil
+; ATHLON-NEXT:    jne LBB7_1
+; ATHLON-NEXT:  ## %bb.2:
+; ATHLON-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; ATHLON-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; ATHLON-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; ATHLON-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
+; ATHLON-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; ATHLON-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
+; ATHLON-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; ATHLON-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
+; ATHLON-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; ATHLON-NEXT:    jmp LBB7_3
+; ATHLON-NEXT:  LBB7_1:
+; ATHLON-NEXT:    movd %r9d, %xmm0
+; ATHLON-NEXT:    movd %r8d, %xmm1
+; ATHLON-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; ATHLON-NEXT:    movd %ecx, %xmm2
+; ATHLON-NEXT:    movd %edx, %xmm0
+; ATHLON-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
+; ATHLON-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; ATHLON-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
+; ATHLON-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; ATHLON-NEXT:  LBB7_3:
+; ATHLON-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
+; ATHLON-NEXT:    pcmpeqd %xmm2, %xmm2
+; ATHLON-NEXT:    paddd %xmm2, %xmm0
+; ATHLON-NEXT:    paddd %xmm2, %xmm1
+; ATHLON-NEXT:    movq %xmm1, 16(%rsi)
+; ATHLON-NEXT:    movdqa %xmm0, (%rsi)
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test8:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    pushl %ebp
@@ -476,6 +592,13 @@ define i64 @test9(i64 %x, i64 %y) nounwi
 ; ATOM-NEXT:    nop
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test9:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    cmpq $1, %rdi
+; ATHLON-NEXT:    sbbq %rax, %rax
+; ATHLON-NEXT:    orq %rsi, %rax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test9:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    orl %edx, %eax
@@ -511,6 +634,13 @@ define i64 @test9a(i64 %x, i64 %y) nounw
 ; ATOM-NEXT:    nop
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test9a:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    cmpq $1, %rdi
+; ATHLON-NEXT:    sbbq %rax, %rax
+; ATHLON-NEXT:    orq %rsi, %rax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test9a:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    orl %edx, %eax
@@ -544,6 +674,13 @@ define i64 @test9b(i64 %x, i64 %y) nounw
 ; ATOM-NEXT:    nop
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test9b:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    cmpq $1, %rdi
+; ATHLON-NEXT:    sbbq %rax, %rax
+; ATHLON-NEXT:    orq %rsi, %rax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test9b:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    movl %edx, %ecx
@@ -571,6 +708,14 @@ define i64 @test10(i64 %x, i64 %y) nounw
 ; CHECK-NEXT:    leaq -1(%rax,%rax), %rax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: test10:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    xorl %eax, %eax
+; ATHLON-NEXT:    testq %rdi, %rdi
+; ATHLON-NEXT:    setne %al
+; ATHLON-NEXT:    leaq -1(%rax,%rax), %rax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test10:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    orl %edx, %eax
@@ -596,6 +741,14 @@ define i64 @test11(i64 %x, i64 %y) nounw
 ; CHECK-NEXT:    orq %rsi, %rax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: test11:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    cmpq $1, %rdi
+; ATHLON-NEXT:    sbbq %rax, %rax
+; ATHLON-NEXT:    notq %rax
+; ATHLON-NEXT:    orq %rsi, %rax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test11:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    orl %edx, %eax
@@ -622,6 +775,14 @@ define i64 @test11a(i64 %x, i64 %y) noun
 ; CHECK-NEXT:    orq %rsi, %rax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: test11a:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    cmpq $1, %rdi
+; ATHLON-NEXT:    sbbq %rax, %rax
+; ATHLON-NEXT:    notq %rax
+; ATHLON-NEXT:    orq %rsi, %rax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test11a:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    orl %edx, %eax
@@ -655,6 +816,12 @@ define i32 @test13(i32 %a, i32 %b) nounw
 ; ATOM-NEXT:    nop
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test13:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    cmpl %esi, %edi
+; ATHLON-NEXT:    sbbl %eax, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test13:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    cmpl %edx, %eax
@@ -674,6 +841,14 @@ define i32 @test14(i32 %a, i32 %b) nounw
 ; CHECK-NEXT:    negl %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: test14:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    xorl %eax, %eax
+; ATHLON-NEXT:    cmpl %esi, %edi
+; ATHLON-NEXT:    setae %al
+; ATHLON-NEXT:    negl %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test14:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    xorl %ecx, %ecx
@@ -705,6 +880,12 @@ define i32 @test15(i32 %x) nounwind {
 ; ATOM-NEXT:    nop
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test15:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    negl %edi
+; ATHLON-NEXT:    sbbl %eax, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test15:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    negl %eax
@@ -733,6 +914,12 @@ define i64 @test16(i64 %x) nounwind uwta
 ; ATOM-NEXT:    nop
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test16:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    negq %rdi
+; ATHLON-NEXT:    sbbq %rax, %rax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test16:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    movl %eax, %ecx
@@ -767,6 +954,13 @@ define i16 @test17(i16 %x) nounwind {
 ; ATOM-NEXT:    nop
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test17:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    negw %di
+; ATHLON-NEXT:    sbbl %eax, %eax
+; ATHLON-NEXT:    ## kill: def $ax killed $ax killed $eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test17:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    negw %ax
@@ -796,6 +990,13 @@ define i8 @test18(i32 %x, i8 zeroext %a,
 ; ATOM-NEXT:    nop
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: test18:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    cmpl $15, %edi
+; ATHLON-NEXT:    cmovgel %edx, %esi
+; ATHLON-NEXT:    movl %esi, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test18:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    cmpl $15, %eax
@@ -819,6 +1020,14 @@ define i32 @trunc_select_miscompile(i32
 ; CHECK-NEXT:    movl %edi, %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: trunc_select_miscompile:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    orb $2, %sil
+; ATHLON-NEXT:    movl %esi, %ecx
+; ATHLON-NEXT:    shll %cl, %edi
+; ATHLON-NEXT:    movl %edi, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: trunc_select_miscompile:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    orb $2, %dl
@@ -860,6 +1069,20 @@ define void @clamp_i8(i32 %src, i8* %dst
 ; ATOM-NEXT:    movb %cl, (%rsi)
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: clamp_i8:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    cmpl $127, %edi
+; ATHLON-NEXT:    movl $127, %eax
+; ATHLON-NEXT:    cmovlel %edi, %eax
+; ATHLON-NEXT:    cmpl $-128, %eax
+; ATHLON-NEXT:    movb $-128, %cl
+; ATHLON-NEXT:    jl LBB21_2
+; ATHLON-NEXT:  ## %bb.1:
+; ATHLON-NEXT:    movl %eax, %ecx
+; ATHLON-NEXT:  LBB21_2:
+; ATHLON-NEXT:    movb %cl, (%rsi)
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: clamp_i8:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    cmpl $127, %eax
@@ -909,6 +1132,17 @@ define void @clamp(i32 %src, i16* %dst)
 ; ATOM-NEXT:    movw %cx, (%rsi)
 ; ATOM-NEXT:    retq
 ;
+; ATHLON-LABEL: clamp:
+; ATHLON:       ## %bb.0:
+; ATHLON-NEXT:    cmpl $32767, %edi ## imm = 0x7FFF
+; ATHLON-NEXT:    movl $32767, %eax ## imm = 0x7FFF
+; ATHLON-NEXT:    cmovlel %edi, %eax
+; ATHLON-NEXT:    cmpl $-32768, %eax ## imm = 0x8000
+; ATHLON-NEXT:    movl $32768, %ecx ## imm = 0x8000
+; ATHLON-NEXT:    cmovgel %eax, %ecx
+; ATHLON-NEXT:    movw %cx, (%rsi)
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: clamp:
 ; MCU:       # %bb.0:
 ; MCU-NEXT:    cmpl $32767, %eax # imm = 0x7FFF
@@ -962,6 +1196,27 @@ define void @test19() {
 ; CHECK-NEXT:  ## %bb.4: ## %CF244
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: test19:
+; ATHLON:       ## %bb.0: ## %BB
+; ATHLON-NEXT:    movl $-1, %eax
+; ATHLON-NEXT:    movb $1, %cl
+; ATHLON-NEXT:    .p2align 4, 0x90
+; ATHLON-NEXT:  LBB23_1: ## %CF
+; ATHLON-NEXT:    ## =>This Inner Loop Header: Depth=1
+; ATHLON-NEXT:    testb %cl, %cl
+; ATHLON-NEXT:    jne LBB23_1
+; ATHLON-NEXT:  ## %bb.2: ## %CF250
+; ATHLON-NEXT:    ## in Loop: Header=BB23_1 Depth=1
+; ATHLON-NEXT:    jne LBB23_1
+; ATHLON-NEXT:    .p2align 4, 0x90
+; ATHLON-NEXT:  LBB23_3: ## %CF242
+; ATHLON-NEXT:    ## =>This Inner Loop Header: Depth=1
+; ATHLON-NEXT:    cmpl %eax, %eax
+; ATHLON-NEXT:    ucomiss %xmm0, %xmm0
+; ATHLON-NEXT:    jp LBB23_3
+; ATHLON-NEXT:  ## %bb.4: ## %CF244
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: test19:
 ; MCU:       # %bb.0: # %BB
 ; MCU-NEXT:    movl $-1, %ecx
@@ -1022,6 +1277,15 @@ define i16 @select_xor_1(i16 %A, i8 %con
 ; CHECK-NEXT:    ## kill: def $ax killed $ax killed $eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: select_xor_1:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    movl %edi, %eax
+; ATHLON-NEXT:    xorl $43, %eax
+; ATHLON-NEXT:    testb $1, %sil
+; ATHLON-NEXT:    cmovel %edi, %eax
+; ATHLON-NEXT:    ## kill: def $ax killed $ax killed $eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: select_xor_1:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    andl $1, %edx
@@ -1050,6 +1314,15 @@ define i16 @select_xor_1b(i16 %A, i8 %co
 ; CHECK-NEXT:    ## kill: def $ax killed $ax killed $eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: select_xor_1b:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    movl %edi, %eax
+; ATHLON-NEXT:    xorl $43, %eax
+; ATHLON-NEXT:    testb $1, %sil
+; ATHLON-NEXT:    cmovel %edi, %eax
+; ATHLON-NEXT:    ## kill: def $ax killed $ax killed $eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: select_xor_1b:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    testb $1, %dl
@@ -1076,6 +1349,14 @@ define i32 @select_xor_2(i32 %A, i32 %B,
 ; CHECK-NEXT:    movl %esi, %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: select_xor_2:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    xorl %edi, %esi
+; ATHLON-NEXT:    testb $1, %dl
+; ATHLON-NEXT:    cmovel %edi, %esi
+; ATHLON-NEXT:    movl %esi, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: select_xor_2:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    andl $1, %ecx
@@ -1102,6 +1383,14 @@ define i32 @select_xor_2b(i32 %A, i32 %B
 ; CHECK-NEXT:    movl %esi, %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: select_xor_2b:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    xorl %edi, %esi
+; ATHLON-NEXT:    testb $1, %dl
+; ATHLON-NEXT:    cmovel %edi, %esi
+; ATHLON-NEXT:    movl %esi, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: select_xor_2b:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    testb $1, %cl
@@ -1127,6 +1416,14 @@ define i32 @select_or(i32 %A, i32 %B, i8
 ; CHECK-NEXT:    movl %esi, %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: select_or:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    orl %edi, %esi
+; ATHLON-NEXT:    testb $1, %dl
+; ATHLON-NEXT:    cmovel %edi, %esi
+; ATHLON-NEXT:    movl %esi, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: select_or:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    andl $1, %ecx
@@ -1153,6 +1450,14 @@ define i32 @select_or_b(i32 %A, i32 %B,
 ; CHECK-NEXT:    movl %esi, %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: select_or_b:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    orl %edi, %esi
+; ATHLON-NEXT:    testb $1, %dl
+; ATHLON-NEXT:    cmovel %edi, %esi
+; ATHLON-NEXT:    movl %esi, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: select_or_b:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    testb $1, %cl
@@ -1178,6 +1483,14 @@ define i32 @select_or_1(i32 %A, i32 %B,
 ; CHECK-NEXT:    movl %esi, %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: select_or_1:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    orl %edi, %esi
+; ATHLON-NEXT:    testb $1, %dl
+; ATHLON-NEXT:    cmovel %edi, %esi
+; ATHLON-NEXT:    movl %esi, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: select_or_1:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    andl $1, %ecx
@@ -1204,6 +1517,14 @@ define i32 @select_or_1b(i32 %A, i32 %B,
 ; CHECK-NEXT:    movl %esi, %eax
 ; CHECK-NEXT:    retq
 ;
+; ATHLON-LABEL: select_or_1b:
+; ATHLON:       ## %bb.0: ## %entry
+; ATHLON-NEXT:    orl %edi, %esi
+; ATHLON-NEXT:    testb $1, %dl
+; ATHLON-NEXT:    cmovel %edi, %esi
+; ATHLON-NEXT:    movl %esi, %eax
+; ATHLON-NEXT:    retq
+;
 ; MCU-LABEL: select_or_1b:
 ; MCU:       # %bb.0: # %entry
 ; MCU-NEXT:    testb $1, %cl




More information about the llvm-commits mailing list