New test cases for regressions in the SetCC -> ICmp patch.
[oota-llvm.git] / test / Transforms / InstCombine / 2006-12-08-Select-ICmp.ll
1 ; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | grep select
2 target datalayout = "e-p:32:32"
3 target endian = little
4 target pointersize = 32
5 target triple = "i686-pc-linux-gnu"
6         %struct.point = type { int, int }
7
8 implementation   ; Functions:
9
10 int %visible(int %direction, long %p1.0, long %p2.0, long %p3.0) {
11 entry:
12         %p1_addr = alloca %struct.point         ; <%struct.point*> [#uses=2]
13         %p2_addr = alloca %struct.point         ; <%struct.point*> [#uses=2]
14         %p3_addr = alloca %struct.point         ; <%struct.point*> [#uses=2]
15         %tmp = bitcast %struct.point* %p1_addr to { long }*             ; <{ long }*> [#uses=1]
16         %tmp = getelementptr { long }* %tmp, int 0, uint 0              ; <long*> [#uses=1]
17         store long %p1.0, long* %tmp
18         %tmp1 = bitcast %struct.point* %p2_addr to { long }*            ; <{ long }*> [#uses=1]
19         %tmp2 = getelementptr { long }* %tmp1, int 0, uint 0            ; <long*> [#uses=1]
20         store long %p2.0, long* %tmp2
21         %tmp3 = bitcast %struct.point* %p3_addr to { long }*            ; <{ long }*> [#uses=1]
22         %tmp4 = getelementptr { long }* %tmp3, int 0, uint 0            ; <long*> [#uses=1]
23         store long %p3.0, long* %tmp4
24         %tmp = seteq int %direction, 0          ; <bool> [#uses=1]
25         %tmp5 = bitcast %struct.point* %p1_addr to { long }*            ; <{ long }*> [#uses=1]
26         %tmp6 = getelementptr { long }* %tmp5, int 0, uint 0            ; <long*> [#uses=1]
27         %tmp = load long* %tmp6         ; <long> [#uses=1]
28         %tmp7 = bitcast %struct.point* %p2_addr to { long }*            ; <{ long }*> [#uses=1]
29         %tmp8 = getelementptr { long }* %tmp7, int 0, uint 0            ; <long*> [#uses=1]
30         %tmp9 = load long* %tmp8                ; <long> [#uses=1]
31         %tmp10 = bitcast %struct.point* %p3_addr to { long }*           ; <{ long }*> [#uses=1]
32         %tmp11 = getelementptr { long }* %tmp10, int 0, uint 0          ; <long*> [#uses=1]
33         %tmp12 = load long* %tmp11              ; <long> [#uses=1]
34         %tmp13 = call int %determinant( long %tmp, long %tmp9, long %tmp12 )            ; <int> [#uses=2]
35         %tmp14 = setlt int %tmp13, 0            ; <bool> [#uses=1]
36         %tmp26 = setgt int %tmp13, 0            ; <bool> [#uses=1]
37         %retval.0.in = select bool %tmp, bool %tmp14, bool %tmp26               ; <bool> [#uses=1]
38         %retval.0 = zext bool %retval.0.in to int               ; <int> [#uses=1]
39         ret int %retval.0
40 }
41
42 declare int %determinant(long, long, long)