[DAGCombine] Remove SIGN_EXTEND-related inf-loop
[oota-llvm.git] / test / CodeGen / X86 / sext-i1.ll
1 ; RUN: llc < %s -march=x86 -disable-cgp-branch-opts    | FileCheck %s -check-prefix=32
2 ; RUN: llc < %s -march=x86-64 -disable-cgp-branch-opts | FileCheck %s -check-prefix=64
3 ; rdar://7573216
4 ; PR6146
5
6 define i32 @t1(i32 %x) nounwind readnone ssp {
7 entry:
8 ; 32-LABEL: t1:
9 ; 32: cmpl $1
10 ; 32: sbbl
11
12 ; 64-LABEL: t1:
13 ; 64: cmpl $1
14 ; 64: sbbl
15   %0 = icmp eq i32 %x, 0
16   %iftmp.0.0 = select i1 %0, i32 -1, i32 0
17   ret i32 %iftmp.0.0
18 }
19
20 define i32 @t2(i32 %x) nounwind readnone ssp {
21 entry:
22 ; 32-LABEL: t2:
23 ; 32: cmpl $1
24 ; 32: sbbl
25
26 ; 64-LABEL: t2:
27 ; 64: cmpl $1
28 ; 64: sbbl
29   %0 = icmp eq i32 %x, 0
30   %iftmp.0.0 = sext i1 %0 to i32
31   ret i32 %iftmp.0.0
32 }
33
34 %struct.zbookmark = type { i64, i64 }
35 %struct.zstream = type { }
36
37 define i32 @t3() nounwind readonly {
38 entry:
39 ; 32-LABEL: t3:
40 ; 32: cmpl $1
41 ; 32: sbbl
42 ; 32: cmpl
43 ; 32: xorl
44
45 ; 64-LABEL: t3:
46 ; 64: cmpl $1
47 ; 64: sbbq
48 ; 64: cmpq
49 ; 64: xorl
50   %not.tobool = icmp eq i32 undef, 0              ; <i1> [#uses=2]
51   %cond = sext i1 %not.tobool to i32              ; <i32> [#uses=1]
52   %conv = sext i1 %not.tobool to i64              ; <i64> [#uses=1]
53   %add13 = add i64 0, %conv                       ; <i64> [#uses=1]
54   %cmp = icmp ult i64 undef, %add13               ; <i1> [#uses=1]
55   br i1 %cmp, label %if.then, label %if.end
56
57 if.then:                                          ; preds = %entry
58   br label %if.end
59
60 if.end:                                           ; preds = %if.then, %entry
61   %xor27 = xor i32 undef, %cond                   ; <i32> [#uses=0]
62   ret i32 0
63 }
64
65 define i32 @t4(i64 %x) nounwind readnone ssp {
66 entry:
67 ; 32-LABEL: t4:
68 ; 32: movl
69 ; 32: orl
70 ; 32: movl
71 ; 32: je
72 ; 32: xorl
73
74 ; 64-LABEL: t4:
75 ; 64: cmpq $1
76 ; 64: sbbl
77   %0 = icmp eq i64 %x, 0
78   %1 = sext i1 %0 to i32
79   ret i32 %1
80 }
81
82 define i64 @t5(i32 %x) nounwind readnone ssp {
83 entry:
84 ; 32-LABEL: t5:
85 ; 32: cmpl $1
86 ; 32: sbbl
87 ; 32: movl
88
89 ; 64-LABEL: t5:
90 ; 64: cmpl $1
91 ; 64: sbbq
92   %0 = icmp eq i32 %x, 0
93   %1 = sext i1 %0 to i64
94   ret i64 %1
95 }
96