Skip to content

Commit cec837e

Browse files
authored
[X86] addcarry.ll - add test coverage for llvm#169691 (llvm#169716)
1 parent f8eca64 commit cec837e

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

llvm/test/CodeGen/X86/addcarry.ll

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1513,3 +1513,41 @@ define i1 @pr84831(i64 %arg) {
15131513
%trunc = trunc i63 %or to i1
15141514
ret i1 %trunc
15151515
}
1516+
1517+
define void @pr169691(ptr %p0, i64 %implicit, i1 zeroext %carry) {
1518+
; CHECK-LABEL: pr169691:
1519+
; CHECK: # %bb.0:
1520+
; CHECK-NEXT: movq (%rdi), %rax
1521+
; CHECK-NEXT: addq %rsi, %rax
1522+
; CHECK-NEXT: setb %cl
1523+
; CHECK-NEXT: movl %edx, %edx
1524+
; CHECK-NEXT: addq %rax, %rdx
1525+
; CHECK-NEXT: setb %al
1526+
; CHECK-NEXT: orb %cl, %al
1527+
; CHECK-NEXT: movq %rdx, (%rdi)
1528+
; CHECK-NEXT: addq 8(%rdi), %rsi
1529+
; CHECK-NEXT: movzbl %al, %eax
1530+
; CHECK-NEXT: addq %rsi, %rax
1531+
; CHECK-NEXT: movq %rax, 8(%rdi)
1532+
; CHECK-NEXT: retq
1533+
%a0 = load i64, ptr %p0, align 8
1534+
%uaddo0 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %a0, i64 %implicit)
1535+
%uaddo0.1 = extractvalue { i64, i1 } %uaddo0, 1
1536+
%uaddo0.0 = extractvalue { i64, i1 } %uaddo0, 0
1537+
%zextc = zext i1 %carry to i64
1538+
%uaddo0b = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %uaddo0.0, i64 %zextc)
1539+
%uaddo0b.1 = extractvalue { i64, i1 } %uaddo0b, 1
1540+
%uaddo0b.0 = extractvalue { i64, i1 } %uaddo0b, 0
1541+
%carry0 = or i1 %uaddo0.1, %uaddo0b.1
1542+
store i64 %uaddo0b.0, ptr %p0, align 8
1543+
1544+
%p1 = getelementptr inbounds nuw i8, ptr %p0, i64 8
1545+
%a1 = load i64, ptr %p1, align 8
1546+
%uaddo1 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %a1, i64 %implicit)
1547+
%uaddo1.0 = extractvalue { i64, i1 } %uaddo1, 0
1548+
%zext0 = zext i1 %carry0 to i64
1549+
%uaddo1b = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %uaddo1.0, i64 %zext0)
1550+
%uaddo1b.0 = extractvalue { i64, i1 } %uaddo1b, 0
1551+
store i64 %uaddo1b.0, ptr %p1, align 8
1552+
ret void
1553+
}

0 commit comments

Comments
 (0)