[llvm] 6766ece - [x86] add tests for rmw add with cmov; NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 21 13:35:50 PST 2022


Author: Sanjay Patel
Date: 2022-02-21T16:34:05-05:00
New Revision: 6766ece133b7c6aa8643d5e348488ab2fad5d13b

URL: https://github.com/llvm/llvm-project/commit/6766ece133b7c6aa8643d5e348488ab2fad5d13b
DIFF: https://github.com/llvm/llvm-project/commit/6766ece133b7c6aa8643d5e348488ab2fad5d13b.diff

LOG: [x86] add tests for rmw add with cmov; NFC

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/add-cmov.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/add-cmov.ll b/llvm/test/CodeGen/X86/add-cmov.ll
index 4bb9bc9146488..a47cad269da96 100644
--- a/llvm/test/CodeGen/X86/add-cmov.ll
+++ b/llvm/test/CodeGen/X86/add-cmov.ll
@@ -136,7 +136,7 @@ define i64 @select_max32_2_i64(i64 %offset, i64 %x) {
 ; CHECK-LABEL: select_max32_2_i64:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    leaq 2(%rdi), %rax
-; CHECK-NEXT:    2147483647(%rdi), %rcx
+; CHECK-NEXT:    leaq 2147483647(%rdi), %rcx
 ; CHECK-NEXT:    cmpq $41, %rsi
 ; CHECK-NEXT:    cmovneq %rcx, %rax
 ; CHECK-NEXT:    retq
@@ -210,7 +210,7 @@ define i32 @select_20_43_i32(i32 %offset, i64 %x) {
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    # kill: def $edi killed $edi def $rdi
 ; CHECK-NEXT:    leal 43(%rdi), %ecx
-; CHECK-NEXT:    20(%rdi), %eax
+; CHECK-NEXT:    leal 20(%rdi), %eax
 ; CHECK-NEXT:    cmpq $42, %rsi
 ; CHECK-NEXT:    cmovll %ecx, %eax
 ; CHECK-NEXT:    retq
@@ -473,3 +473,101 @@ define void @complex_lea_alt8(i1 %b, i16* readnone %ptr, i64 %idx) {
   store i16 %dec, i16* %sel, align 4
   ret void
 }
+
+define i32 @loadfold_select_const_arms(i32* %x, i1 %y) {
+; CHECK-LABEL: loadfold_select_const_arms:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movl (%rdi), %eax
+; CHECK-NEXT:    leal -10(%rax), %ecx
+; CHECK-NEXT:    addl $10, %eax
+; CHECK-NEXT:    testb $1, %sil
+; CHECK-NEXT:    cmovel %ecx, %eax
+; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax
+; CHECK-NEXT:    retq
+  %cond = select i1 %y, i32 10, i32 -10
+  %t0 = load i32, i32* %x, align 4
+  %add = add nsw i32 %t0, %cond
+  ret i32 %add
+}
+
+define void @rmw_add(i32* %x, i1 %y, i32 %z, i32 %w) {
+; CHECK-LABEL: rmw_add:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    testb $1, %sil
+; CHECK-NEXT:    cmovel %ecx, %edx
+; CHECK-NEXT:    addl %edx, (%rdi)
+; CHECK-NEXT:    retq
+  %cond = select i1 %y, i32 %z, i32 %w
+  %t0 = load i32, i32* %x, align 4
+  %add = add nsw i32 %t0, %cond
+  store i32 %add, i32* %x, align 4
+  ret void
+}
+
+define void @rmw_add_select_const_arm(i32* %x, i1 %y, i32 %z) {
+; CHECK-LABEL: rmw_add_select_const_arm:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    testb $1, %sil
+; CHECK-NEXT:    movl $-10, %eax
+; CHECK-NEXT:    cmovnel %edx, %eax
+; CHECK-NEXT:    addl %eax, (%rdi)
+; CHECK-NEXT:    retq
+  %cond = select i1 %y, i32 %z, i32 -10
+  %t0 = load i32, i32* %x, align 4
+  %add = add nsw i32 %t0, %cond
+  store i32 %add, i32* %x, align 4
+  ret void
+}
+
+define void @rmw_select_const_arms(i32* %x, i1 %y) {
+; CHECK-LABEL: rmw_select_const_arms:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movl (%rdi), %eax
+; CHECK-NEXT:    leal -10(%rax), %ecx
+; CHECK-NEXT:    addl $10, %eax
+; CHECK-NEXT:    testb $1, %sil
+; CHECK-NEXT:    cmovel %ecx, %eax
+; CHECK-NEXT:    movl %eax, (%rdi)
+; CHECK-NEXT:    retq
+  %cond = select i1 %y, i32 10, i32 -10
+  %t0 = load i32, i32* %x, align 4
+  %add = add nsw i32 %t0, %cond
+  store i32 %add, i32* %x, align 4
+  ret void
+}
+
+define i32 @rmw_select_const_arms_extra_load_use(i32* %x, i1 %y) {
+; CHECK-LABEL: rmw_select_const_arms_extra_load_use:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movl (%rdi), %eax
+; CHECK-NEXT:    leal -10(%rax), %ecx
+; CHECK-NEXT:    leal 10(%rax), %edx
+; CHECK-NEXT:    testb $1, %sil
+; CHECK-NEXT:    cmovel %ecx, %edx
+; CHECK-NEXT:    movl %edx, (%rdi)
+; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax
+; CHECK-NEXT:    retq
+  %cond = select i1 %y, i32 10, i32 -10
+  %t0 = load i32, i32* %x, align 4
+  %add = add nsw i32 %t0, %cond
+  store i32 %add, i32* %x, align 4
+  ret i32 %t0
+}
+
+define i32 @rmw_select_const_arms_extra_add_use(i32* %x, i1 %y) {
+; CHECK-LABEL: rmw_select_const_arms_extra_add_use:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movl (%rdi), %eax
+; CHECK-NEXT:    leal -10(%rax), %ecx
+; CHECK-NEXT:    addl $10, %eax
+; CHECK-NEXT:    testb $1, %sil
+; CHECK-NEXT:    cmovel %ecx, %eax
+; CHECK-NEXT:    movl %eax, (%rdi)
+; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax
+; CHECK-NEXT:    retq
+  %cond = select i1 %y, i32 10, i32 -10
+  %t0 = load i32, i32* %x, align 4
+  %add = add nsw i32 %t0, %cond
+  store i32 %add, i32* %x, align 4
+  ret i32 %add
+}


        


More information about the llvm-commits mailing list