This should always be signed chars, so use int8_t. This fixes a miscompile when
[llvm/stm8.git] / test / CodeGen / X86 / sext-i1.ll
blob574769b4308459f8cf7ba79f89921bfdfa8acf7f
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
6 define i32 @t1(i32 %x) nounwind readnone ssp {
7 entry:
8 ; 32: t1:
9 ; 32: cmpl $1
10 ; 32: sbbl
12 ; 64: 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
20 define i32 @t2(i32 %x) nounwind readnone ssp {
21 entry:
22 ; 32: t2:
23 ; 32: cmpl $1
24 ; 32: sbbl
26 ; 64: 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
34 %struct.zbookmark = type { i64, i64 }
35 %struct.zstream = type { }
37 define i32 @t3() nounwind readonly {
38 entry:
39 ; 32: t3:
40 ; 32: cmpl $1
41 ; 32: sbbl
42 ; 32: cmpl
43 ; 32: xorl
45 ; 64: 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
57 if.then:                                          ; preds = %entry
58   br label %if.end
60 if.end:                                           ; preds = %if.then, %entry
61   %xor27 = xor i32 undef, %cond                   ; <i32> [#uses=0]
62   ret i32 0