[llvm] 8f5b1d9 - [test][DAGCombine] Add tests for cmp+add -> addcarry

Paweł Bylica via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 25 13:17:34 PST 2022


Author: Paweł Bylica
Date: 2022-01-25T22:17:09+01:00
New Revision: 8f5b1d9e146250affd69c08989a2885b77f8463c

URL: https://github.com/llvm/llvm-project/commit/8f5b1d9e146250affd69c08989a2885b77f8463c
DIFF: https://github.com/llvm/llvm-project/commit/8f5b1d9e146250affd69c08989a2885b77f8463c.diff

LOG: [test][DAGCombine] Add tests for cmp+add -> addcarry

Tests for https://reviews.llvm.org/D118037.

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/addcarry.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/addcarry.ll b/llvm/test/CodeGen/X86/addcarry.ll
index f8f7d7ed2c556..1f66d2c5a6c9d 100644
--- a/llvm/test/CodeGen/X86/addcarry.ll
+++ b/llvm/test/CodeGen/X86/addcarry.ll
@@ -1033,3 +1033,67 @@ define void @add_U256_without_i128_or_recursive(%uint256* sret(%uint256) %0, %ui
   store i64 %37, i64* %41, align 8
   ret void
 }
+
+define i32 @addcarry_ult(i32 %a, i32 %b, i32 %x, i32 %y) {
+; CHECK-LABEL: addcarry_ult:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    # kill: def $esi killed $esi def $rsi
+; CHECK-NEXT:    # kill: def $edi killed $edi def $rdi
+; CHECK-NEXT:    leal (%rdi,%rsi), %eax
+; CHECK-NEXT:    cmpl %ecx, %edx
+; CHECK-NEXT:    adcl $0, %eax
+; CHECK-NEXT:    retq
+  %s = add i32 %a, %b
+  %k = icmp ult i32 %x, %y
+  %z = zext i1 %k to i32
+  %r = add i32 %s, %z
+  ret i32 %r
+}
+
+define i32 @addcarry_ugt(i32 %a, i32 %b, i32 %x, i32 %y) {
+; CHECK-LABEL: addcarry_ugt:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    # kill: def $esi killed $esi def $rsi
+; CHECK-NEXT:    # kill: def $edi killed $edi def $rdi
+; CHECK-NEXT:    leal (%rdi,%rsi), %eax
+; CHECK-NEXT:    cmpl %edx, %ecx
+; CHECK-NEXT:    adcl $0, %eax
+; CHECK-NEXT:    retq
+  %s = add i32 %a, %b
+  %k = icmp ugt i32 %x, %y
+  %z = zext i1 %k to i32
+  %r = add i32 %s, %z
+  ret i32 %r
+}
+
+define i32 @addcarry_ule(i32 %a, i32 %b, i32 %x, i32 %y) {
+; CHECK-LABEL: addcarry_ule:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    # kill: def $esi killed $esi def $rsi
+; CHECK-NEXT:    # kill: def $edi killed $edi def $rdi
+; CHECK-NEXT:    leal (%rdi,%rsi), %eax
+; CHECK-NEXT:    cmpl %edx, %ecx
+; CHECK-NEXT:    sbbl $-1, %eax
+; CHECK-NEXT:    retq
+  %s = add i32 %a, %b
+  %k = icmp ule i32 %x, %y
+  %z = zext i1 %k to i32
+  %r = add i32 %s, %z
+  ret i32 %r
+}
+
+define i32 @addcarry_uge(i32 %a, i32 %b, i32 %x, i32 %y) {
+; CHECK-LABEL: addcarry_uge:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    # kill: def $esi killed $esi def $rsi
+; CHECK-NEXT:    # kill: def $edi killed $edi def $rdi
+; CHECK-NEXT:    leal (%rdi,%rsi), %eax
+; CHECK-NEXT:    cmpl %ecx, %edx
+; CHECK-NEXT:    sbbl $-1, %eax
+; CHECK-NEXT:    retq
+  %s = add i32 %a, %b
+  %k = icmp uge i32 %x, %y
+  %z = zext i1 %k to i32
+  %r = add i32 %s, %z
+  ret i32 %r
+}


        


More information about the llvm-commits mailing list