Skip to content

Conversation

@RKSimon
Copy link
Collaborator

@RKSimon RKSimon commented Nov 26, 2025

No description provided.

@llvmbot
Copy link
Member

llvmbot commented Nov 26, 2025

@llvm/pr-subscribers-backend-x86

Author: Simon Pilgrim (RKSimon)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/169716.diff

1 Files Affected:

  • (modified) llvm/test/CodeGen/X86/addcarry.ll (+38)
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
+}

@RKSimon RKSimon enabled auto-merge (squash) November 26, 2025 19:45
@RKSimon RKSimon merged commit cec837e into llvm:main Nov 26, 2025
9 of 11 checks passed
@RKSimon RKSimon deleted the x86-pr169691-test branch November 26, 2025 21:00
tanji-dg pushed a commit to tanji-dg/llvm-project that referenced this pull request Nov 27, 2025
GeneraluseAI pushed a commit to GeneraluseAI/llvm-project that referenced this pull request Nov 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants