[llvm] cec837e - [X86] addcarry.ll - add test coverage for #169691 (#169716)

via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 26 12:14:17 PST 2025


Author: Simon Pilgrim
Date: 2025-11-26T20:14:12Z
New Revision: cec837e3e09f7751e668c89aed894d547d542ae6

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

LOG: [X86] addcarry.ll - add test coverage for #169691 (#169716)

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 97894db1188e2..f8a04f8514988 100644
--- a/llvm/test/CodeGen/X86/addcarry.ll
+++ b/llvm/test/CodeGen/X86/addcarry.ll
@@ -1513,3 +1513,41 @@ define i1 @pr84831(i64 %arg) {
   %trunc = trunc i63 %or to i1
   ret i1 %trunc
 }
+
+define void @pr169691(ptr %p0, i64 %implicit, i1 zeroext %carry) {
+; CHECK-LABEL: pr169691:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movq (%rdi), %rax
+; CHECK-NEXT:    addq %rsi, %rax
+; CHECK-NEXT:    setb %cl
+; CHECK-NEXT:    movl %edx, %edx
+; CHECK-NEXT:    addq %rax, %rdx
+; CHECK-NEXT:    setb %al
+; CHECK-NEXT:    orb %cl, %al
+; CHECK-NEXT:    movq %rdx, (%rdi)
+; CHECK-NEXT:    addq 8(%rdi), %rsi
+; CHECK-NEXT:    movzbl %al, %eax
+; CHECK-NEXT:    addq %rsi, %rax
+; CHECK-NEXT:    movq %rax, 8(%rdi)
+; CHECK-NEXT:    retq
+  %a0 = load i64, ptr %p0, align 8
+  %uaddo0 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %a0, i64 %implicit)
+  %uaddo0.1 = extractvalue { i64, i1 } %uaddo0, 1
+  %uaddo0.0 = extractvalue { i64, i1 } %uaddo0, 0
+  %zextc = zext i1 %carry to i64
+  %uaddo0b = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %uaddo0.0, i64 %zextc)
+  %uaddo0b.1 = extractvalue { i64, i1 } %uaddo0b, 1
+  %uaddo0b.0 = extractvalue { i64, i1 } %uaddo0b, 0
+  %carry0 = or i1 %uaddo0.1, %uaddo0b.1
+  store i64 %uaddo0b.0, ptr %p0, align 8
+
+  %p1 = getelementptr inbounds nuw i8, ptr %p0, i64 8
+  %a1 = load i64, ptr %p1, align 8
+  %uaddo1 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %a1, i64 %implicit)
+  %uaddo1.0 = extractvalue { i64, i1 } %uaddo1, 0
+  %zext0 = zext i1 %carry0 to i64
+  %uaddo1b = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %uaddo1.0, i64 %zext0)
+  %uaddo1b.0 = extractvalue { i64, i1 } %uaddo1b, 0
+  store i64 %uaddo1b.0, ptr %p1, align 8
+  ret void
+}


        


More information about the llvm-commits mailing list