1; RUN: llc < %s -march=x86 | not grep btl
2
3; This tests some cases where BT must not be generated.  See also bt.ll.
4; Fixes 20040709-[12].c in gcc testsuite.
5
6define void @test2(i32 %x, i32 %n) nounwind {
7entry:
8        %tmp1 = and i32 %x, 1
9        %tmp2 = urem i32 %tmp1, 15
10	%tmp3 = and i32 %tmp2, 1		; <i32> [#uses=1]
11	%tmp4 = icmp eq i32 %tmp3, %tmp2	; <i1> [#uses=1]
12	br i1 %tmp4, label %bb, label %UnifiedReturnBlock
13
14bb:		; preds = %entry
15	call void @foo()
16	ret void
17
18UnifiedReturnBlock:		; preds = %entry
19	ret void
20}
21
22define void @test3(i32 %x, i32 %n) nounwind {
23entry:
24        %tmp1 = and i32 %x, 1
25        %tmp2 = urem i32 %tmp1, 15
26	%tmp3 = and i32 %tmp2, 1		; <i32> [#uses=1]
27	%tmp4 = icmp eq i32 %tmp2, %tmp3	; <i1> [#uses=1]
28	br i1 %tmp4, label %bb, label %UnifiedReturnBlock
29
30bb:		; preds = %entry
31	call void @foo()
32	ret void
33
34UnifiedReturnBlock:		; preds = %entry
35	ret void
36}
37
38define void @test4(i32 %x, i32 %n) nounwind {
39entry:
40        %tmp1 = and i32 %x, 1
41        %tmp2 = urem i32 %tmp1, 15
42	%tmp3 = and i32 %tmp2, 1		; <i32> [#uses=1]
43	%tmp4 = icmp ne i32 %tmp2, %tmp3	; <i1> [#uses=1]
44	br i1 %tmp4, label %bb, label %UnifiedReturnBlock
45
46bb:		; preds = %entry
47	call void @foo()
48	ret void
49
50UnifiedReturnBlock:		; preds = %entry
51	ret void
52}
53
54define void @test5(i32 %x, i32 %n) nounwind {
55entry:
56        %tmp1 = and i32 %x, 1
57        %tmp2 = urem i32 %tmp1, 15
58	%tmp3 = and i32 %tmp2, 1		; <i32> [#uses=1]
59	%tmp4 = icmp ne i32 %tmp2, %tmp3	; <i1> [#uses=1]
60	br i1 %tmp4, label %bb, label %UnifiedReturnBlock
61
62bb:		; preds = %entry
63	call void @foo()
64	ret void
65
66UnifiedReturnBlock:		; preds = %entry
67	ret void
68}
69
70declare void @foo()
71