Skip to content

Commit da45d68

Browse files
committed
[x86] add test for missed opportunity to use 'inc'; NFC
Another pattern exposed in D57516. llvm-svn: 352820
1 parent ae667c4 commit da45d68

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

llvm/test/CodeGen/X86/slow-incdec.ll

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,46 @@ return:
8383
ret void
8484
}
8585

86+
@a = common global i8 0, align 1
87+
@d = common global i8 0, align 1
88+
89+
declare void @external_a()
90+
declare void @external_b()
91+
declare {i8, i1} @llvm.uadd.with.overflow.i8(i8, i8)
92+
93+
define void @test_tail_call(i32* %ptr) nounwind optsize {
94+
; CHECK-LABEL: test_tail_call:
95+
; CHECK: # %bb.0: # %entry
96+
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
97+
; CHECK-NEXT: addl $1, (%eax)
98+
; CHECK-NEXT: setae %al
99+
; CHECK-NEXT: addb $1, a
100+
; CHECK-NEXT: setb d
101+
; CHECK-NEXT: testb %al, %al
102+
; CHECK-NEXT: jne external_b # TAILCALL
103+
; CHECK-NEXT: # %bb.1: # %then
104+
; CHECK-NEXT: jmp external_a # TAILCALL
105+
entry:
106+
%val = load i32, i32* %ptr
107+
%add_ov = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %val, i32 1)
108+
%inc = extractvalue { i32, i1 } %add_ov, 0
109+
store i32 %inc, i32* %ptr
110+
%cmp = extractvalue { i32, i1 } %add_ov, 1
111+
%aval = load volatile i8, i8* @a
112+
%add_ov2 = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 %aval, i8 1)
113+
%inc2 = extractvalue { i8, i1 } %add_ov2, 0
114+
store volatile i8 %inc2, i8* @a
115+
%cmp2 = extractvalue { i8, i1 } %add_ov2, 1
116+
%conv5 = zext i1 %cmp2 to i8
117+
store i8 %conv5, i8* @d
118+
br i1 %cmp, label %then, label %else
119+
120+
then:
121+
tail call void @external_a()
122+
ret void
123+
124+
else:
125+
tail call void @external_b()
126+
ret void
127+
}
128+

0 commit comments

Comments
 (0)