InstCombine: Match min/max hidden by sext/zext
[oota-llvm.git] / test / Transforms / InstCombine / 2009-02-20-InstCombine-SROA.ll
1 ; RUN: opt < %s -instcombine -scalarrepl -S | not grep { = alloca}
2 ; rdar://6417724
3 ; Instcombine shouldn't do anything to this function that prevents promoting the allocas inside it.
4
5 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
6 target triple = "i386-apple-darwin9.6"
7         %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >" = type { i32* }
8         %"struct.std::_Vector_base<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" }
9         %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" = type { i32*, i32*, i32* }
10         %"struct.std::bidirectional_iterator_tag" = type <{ i8 }>
11         %"struct.std::forward_iterator_tag" = type <{ i8 }>
12         %"struct.std::input_iterator_tag" = type <{ i8 }>
13         %"struct.std::random_access_iterator_tag" = type <{ i8 }>
14         %"struct.std::vector<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >" }
15
16 define i32* @_Z3fooRSt6vectorIiSaIiEE(%"struct.std::vector<int,std::allocator<int> >"* %X) {
17 entry:
18         %0 = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"                ; <%"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"*> [#uses=2]
19         %__first_addr.i.i = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"         ; <%"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"*> [#uses=31]
20         %__last_addr.i.i = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"          ; <%"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"*> [#uses=4]
21         %unnamed_arg.i = alloca %"struct.std::bidirectional_iterator_tag", align 8              ; <%"struct.std::bidirectional_iterator_tag"*> [#uses=1]
22         %1 = alloca %"struct.std::bidirectional_iterator_tag"           ; <%"struct.std::bidirectional_iterator_tag"*> [#uses=1]
23         %__first_addr.i = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"           ; <%"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"*> [#uses=2]
24         %2 = alloca %"struct.std::bidirectional_iterator_tag"           ; <%"struct.std::bidirectional_iterator_tag"*> [#uses=2]
25         %3 = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"                ; <%"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"*> [#uses=2]
26         %4 = alloca i32         ; <i32*> [#uses=8]
27         %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
28         store i32 42, i32* %4, align 4
29         %5 = getelementptr %"struct.std::vector<int,std::allocator<int> >"* %X, i32 0, i32 0            ; <%"struct.std::_Vector_base<int,std::allocator<int> >"*> [#uses=1]
30         %6 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >"* %5, i32 0, i32 0              ; <%"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl"*> [#uses=1]
31         %7 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl"* %6, i32 0, i32 1                ; <i32**> [#uses=1]
32         %8 = load i32** %7, align 4             ; <i32*> [#uses=1]
33         %9 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %3, i32 0, i32 0               ; <i32**> [#uses=1]
34         store i32* %8, i32** %9, align 4
35         %10 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %3, i32 0, i32 0              ; <i32**> [#uses=1]
36         %11 = load i32** %10, align 4           ; <i32*> [#uses=1]
37         %tmp2.i = ptrtoint i32* %11 to i32              ; <i32> [#uses=1]
38         %tmp1.i = inttoptr i32 %tmp2.i to i32*          ; <i32*> [#uses=1]
39         %tmp3 = ptrtoint i32* %tmp1.i to i32            ; <i32> [#uses=1]
40         %tmp2 = inttoptr i32 %tmp3 to i32*              ; <i32*> [#uses=1]
41         %12 = getelementptr %"struct.std::vector<int,std::allocator<int> >"* %X, i32 0, i32 0           ; <%"struct.std::_Vector_base<int,std::allocator<int> >"*> [#uses=1]
42         %13 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >"* %12, i32 0, i32 0            ; <%"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl"*> [#uses=1]
43         %14 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl"* %13, i32 0, i32 0              ; <i32**> [#uses=1]
44         %15 = load i32** %14, align 4           ; <i32*> [#uses=1]
45         %16 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %0, i32 0, i32 0              ; <i32**> [#uses=1]
46         store i32* %15, i32** %16, align 4
47         %17 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %0, i32 0, i32 0              ; <i32**> [#uses=1]
48         %18 = load i32** %17, align 4           ; <i32*> [#uses=1]
49         %tmp2.i17 = ptrtoint i32* %18 to i32            ; <i32> [#uses=1]
50         %tmp1.i18 = inttoptr i32 %tmp2.i17 to i32*              ; <i32*> [#uses=1]
51         %tmp8 = ptrtoint i32* %tmp1.i18 to i32          ; <i32> [#uses=1]
52         %tmp6 = inttoptr i32 %tmp8 to i32*              ; <i32*> [#uses=1]
53         %19 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i, i32 0, i32 0         ; <i32**> [#uses=1]
54         store i32* %tmp6, i32** %19
55         %20 = getelementptr %"struct.std::bidirectional_iterator_tag"* %1, i32 0, i32 0         ; <i8*> [#uses=1]
56         %21 = load i8* %20, align 1             ; <i8> [#uses=1]
57         %22 = or i8 %21, 0              ; <i8> [#uses=1]
58         %23 = or i8 %22, 0              ; <i8> [#uses=1]
59         %24 = or i8 %23, 0              ; <i8> [#uses=0]
60         %25 = getelementptr %"struct.std::bidirectional_iterator_tag"* %2, i32 0, i32 0         ; <i8*> [#uses=1]
61         store i8 0, i8* %25, align 1
62         %elt.i = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i, i32 0, i32 0              ; <i32**> [#uses=1]
63         %val.i = load i32** %elt.i              ; <i32*> [#uses=1]
64         %tmp.i = bitcast %"struct.std::bidirectional_iterator_tag"* %unnamed_arg.i to i8*               ; <i8*> [#uses=1]
65         %tmp9.i = bitcast %"struct.std::bidirectional_iterator_tag"* %2 to i8*          ; <i8*> [#uses=1]
66         call void @llvm.memcpy.i64(i8* %tmp.i, i8* %tmp9.i, i64 1, i32 1)
67         %26 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
68         store i32* %val.i, i32** %26
69         %27 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__last_addr.i.i, i32 0, i32 0                ; <i32**> [#uses=1]
70         store i32* %tmp2, i32** %27
71         %28 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__last_addr.i.i, i32 0, i32 0                ; <i32**> [#uses=1]
72         %29 = load i32** %28, align 4           ; <i32*> [#uses=1]
73         %30 = ptrtoint i32* %29 to i32          ; <i32> [#uses=1]
74         %31 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
75         %32 = load i32** %31, align 4           ; <i32*> [#uses=1]
76         %33 = ptrtoint i32* %32 to i32          ; <i32> [#uses=1]
77         %34 = sub i32 %30, %33          ; <i32> [#uses=1]
78         %35 = ashr i32 %34, 2           ; <i32> [#uses=1]
79         %36 = ashr i32 %35, 2           ; <i32> [#uses=1]
80         br label %bb12.i.i
81
82 bb.i.i:         ; preds = %bb12.i.i
83         %37 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
84         %38 = load i32** %37, align 4           ; <i32*> [#uses=1]
85         %39 = load i32* %38, align 4            ; <i32> [#uses=1]
86         %40 = load i32* %4, align 4             ; <i32> [#uses=1]
87         %41 = icmp eq i32 %39, %40              ; <i1> [#uses=1]
88         %42 = zext i1 %41 to i8         ; <i8> [#uses=1]
89         %toBool.i.i = icmp ne i8 %42, 0         ; <i1> [#uses=1]
90         br i1 %toBool.i.i, label %bb1.i.i, label %bb2.i.i
91
92 bb1.i.i:                ; preds = %bb.i.i
93         %43 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
94         %44 = load i32** %43, align 4           ; <i32*> [#uses=1]
95         br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
96
97 bb2.i.i:                ; preds = %bb.i.i
98         %45 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
99         %46 = load i32** %45, align 4           ; <i32*> [#uses=1]
100         %47 = getelementptr i32* %46, i64 1             ; <i32*> [#uses=1]
101         %48 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
102         store i32* %47, i32** %48, align 4
103         %49 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
104         %50 = load i32** %49, align 4           ; <i32*> [#uses=1]
105         %51 = load i32* %50, align 4            ; <i32> [#uses=1]
106         %52 = load i32* %4, align 4             ; <i32> [#uses=1]
107         %53 = icmp eq i32 %51, %52              ; <i1> [#uses=1]
108         %54 = zext i1 %53 to i8         ; <i8> [#uses=1]
109         %toBool3.i.i = icmp ne i8 %54, 0                ; <i1> [#uses=1]
110         br i1 %toBool3.i.i, label %bb4.i.i, label %bb5.i.i
111
112 bb4.i.i:                ; preds = %bb2.i.i
113         %55 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
114         %56 = load i32** %55, align 4           ; <i32*> [#uses=1]
115         br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
116
117 bb5.i.i:                ; preds = %bb2.i.i
118         %57 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
119         %58 = load i32** %57, align 4           ; <i32*> [#uses=1]
120         %59 = getelementptr i32* %58, i64 1             ; <i32*> [#uses=1]
121         %60 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
122         store i32* %59, i32** %60, align 4
123         %61 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
124         %62 = load i32** %61, align 4           ; <i32*> [#uses=1]
125         %63 = load i32* %62, align 4            ; <i32> [#uses=1]
126         %64 = load i32* %4, align 4             ; <i32> [#uses=1]
127         %65 = icmp eq i32 %63, %64              ; <i1> [#uses=1]
128         %66 = zext i1 %65 to i8         ; <i8> [#uses=1]
129         %toBool6.i.i = icmp ne i8 %66, 0                ; <i1> [#uses=1]
130         br i1 %toBool6.i.i, label %bb7.i.i, label %bb8.i.i
131
132 bb7.i.i:                ; preds = %bb5.i.i
133         %67 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
134         %68 = load i32** %67, align 4           ; <i32*> [#uses=1]
135         br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
136
137 bb8.i.i:                ; preds = %bb5.i.i
138         %69 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
139         %70 = load i32** %69, align 4           ; <i32*> [#uses=1]
140         %71 = getelementptr i32* %70, i64 1             ; <i32*> [#uses=1]
141         %72 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
142         store i32* %71, i32** %72, align 4
143         %73 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
144         %74 = load i32** %73, align 4           ; <i32*> [#uses=1]
145         %75 = load i32* %74, align 4            ; <i32> [#uses=1]
146         %76 = load i32* %4, align 4             ; <i32> [#uses=1]
147         %77 = icmp eq i32 %75, %76              ; <i1> [#uses=1]
148         %78 = zext i1 %77 to i8         ; <i8> [#uses=1]
149         %toBool9.i.i = icmp ne i8 %78, 0                ; <i1> [#uses=1]
150         br i1 %toBool9.i.i, label %bb10.i.i, label %bb11.i.i
151
152 bb10.i.i:               ; preds = %bb8.i.i
153         %79 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
154         %80 = load i32** %79, align 4           ; <i32*> [#uses=1]
155         br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
156
157 bb11.i.i:               ; preds = %bb8.i.i
158         %81 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
159         %82 = load i32** %81, align 4           ; <i32*> [#uses=1]
160         %83 = getelementptr i32* %82, i64 1             ; <i32*> [#uses=1]
161         %84 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
162         store i32* %83, i32** %84, align 4
163         %85 = sub i32 %__trip_count.0.i.i, 1            ; <i32> [#uses=1]
164         br label %bb12.i.i
165
166 bb12.i.i:               ; preds = %bb11.i.i, %entry
167         %__trip_count.0.i.i = phi i32 [ %36, %entry ], [ %85, %bb11.i.i ]               ; <i32> [#uses=2]
168         %86 = icmp sgt i32 %__trip_count.0.i.i, 0               ; <i1> [#uses=1]
169         br i1 %86, label %bb.i.i, label %bb13.i.i
170
171 bb13.i.i:               ; preds = %bb12.i.i
172         %87 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__last_addr.i.i, i32 0, i32 0                ; <i32**> [#uses=1]
173         %88 = load i32** %87, align 4           ; <i32*> [#uses=1]
174         %89 = ptrtoint i32* %88 to i32          ; <i32> [#uses=1]
175         %90 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
176         %91 = load i32** %90, align 4           ; <i32*> [#uses=1]
177         %92 = ptrtoint i32* %91 to i32          ; <i32> [#uses=1]
178         %93 = sub i32 %89, %92          ; <i32> [#uses=1]
179         %94 = ashr i32 %93, 2           ; <i32> [#uses=1]
180         switch i32 %94, label %bb26.i.i [
181                 i32 1, label %bb22.i.i
182                 i32 2, label %bb18.i.i
183                 i32 3, label %bb14.i.i
184         ]
185
186 bb14.i.i:               ; preds = %bb13.i.i
187         %95 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
188         %96 = load i32** %95, align 4           ; <i32*> [#uses=1]
189         %97 = load i32* %96, align 4            ; <i32> [#uses=1]
190         %98 = load i32* %4, align 4             ; <i32> [#uses=1]
191         %99 = icmp eq i32 %97, %98              ; <i1> [#uses=1]
192         %100 = zext i1 %99 to i8                ; <i8> [#uses=1]
193         %toBool15.i.i = icmp ne i8 %100, 0              ; <i1> [#uses=1]
194         br i1 %toBool15.i.i, label %bb16.i.i, label %bb17.i.i
195
196 bb16.i.i:               ; preds = %bb14.i.i
197         %101 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
198         %102 = load i32** %101, align 4         ; <i32*> [#uses=1]
199         br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
200
201 bb17.i.i:               ; preds = %bb14.i.i
202         %103 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
203         %104 = load i32** %103, align 4         ; <i32*> [#uses=1]
204         %105 = getelementptr i32* %104, i64 1           ; <i32*> [#uses=1]
205         %106 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
206         store i32* %105, i32** %106, align 4
207         br label %bb18.i.i
208
209 bb18.i.i:               ; preds = %bb17.i.i, %bb13.i.i
210         %107 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
211         %108 = load i32** %107, align 4         ; <i32*> [#uses=1]
212         %109 = load i32* %108, align 4          ; <i32> [#uses=1]
213         %110 = load i32* %4, align 4            ; <i32> [#uses=1]
214         %111 = icmp eq i32 %109, %110           ; <i1> [#uses=1]
215         %112 = zext i1 %111 to i8               ; <i8> [#uses=1]
216         %toBool19.i.i = icmp ne i8 %112, 0              ; <i1> [#uses=1]
217         br i1 %toBool19.i.i, label %bb20.i.i, label %bb21.i.i
218
219 bb20.i.i:               ; preds = %bb18.i.i
220         %113 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
221         %114 = load i32** %113, align 4         ; <i32*> [#uses=1]
222         br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
223
224 bb21.i.i:               ; preds = %bb18.i.i
225         %115 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
226         %116 = load i32** %115, align 4         ; <i32*> [#uses=1]
227         %117 = getelementptr i32* %116, i64 1           ; <i32*> [#uses=1]
228         %118 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
229         store i32* %117, i32** %118, align 4
230         br label %bb22.i.i
231
232 bb22.i.i:               ; preds = %bb21.i.i, %bb13.i.i
233         %119 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
234         %120 = load i32** %119, align 4         ; <i32*> [#uses=1]
235         %121 = load i32* %120, align 4          ; <i32> [#uses=1]
236         %122 = load i32* %4, align 4            ; <i32> [#uses=1]
237         %123 = icmp eq i32 %121, %122           ; <i1> [#uses=1]
238         %124 = zext i1 %123 to i8               ; <i8> [#uses=1]
239         %toBool23.i.i = icmp ne i8 %124, 0              ; <i1> [#uses=1]
240         br i1 %toBool23.i.i, label %bb24.i.i, label %bb25.i.i
241
242 bb24.i.i:               ; preds = %bb22.i.i
243         %125 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
244         %126 = load i32** %125, align 4         ; <i32*> [#uses=1]
245         br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
246
247 bb25.i.i:               ; preds = %bb22.i.i
248         %127 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
249         %128 = load i32** %127, align 4         ; <i32*> [#uses=1]
250         %129 = getelementptr i32* %128, i64 1           ; <i32*> [#uses=1]
251         %130 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i.i, i32 0, i32 0              ; <i32**> [#uses=1]
252         store i32* %129, i32** %130, align 4
253         br label %bb26.i.i
254
255 bb26.i.i:               ; preds = %bb25.i.i, %bb13.i.i
256         %131 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__last_addr.i.i, i32 0, i32 0               ; <i32**> [#uses=1]
257         %132 = load i32** %131, align 4         ; <i32*> [#uses=1]
258         br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
259
260 _ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit:             ; preds = %bb26.i.i, %bb24.i.i, %bb20.i.i, %bb16.i.i, %bb10.i.i, %bb7.i.i, %bb4.i.i, %bb1.i.i
261         %.0.0.i.i = phi i32* [ %132, %bb26.i.i ], [ %126, %bb24.i.i ], [ %114, %bb20.i.i ], [ %102, %bb16.i.i ], [ %80, %bb10.i.i ], [ %68, %bb7.i.i ], [ %56, %bb4.i.i ], [ %44, %bb1.i.i ]            ; <i32*> [#uses=1]
262         %tmp2.i.i = ptrtoint i32* %.0.0.i.i to i32              ; <i32> [#uses=1]
263         %tmp1.i.i = inttoptr i32 %tmp2.i.i to i32*              ; <i32*> [#uses=1]
264         %tmp4.i = ptrtoint i32* %tmp1.i.i to i32                ; <i32> [#uses=1]
265         %tmp3.i = inttoptr i32 %tmp4.i to i32*          ; <i32*> [#uses=1]
266         %tmp8.i = ptrtoint i32* %tmp3.i to i32          ; <i32> [#uses=1]
267         %tmp6.i = inttoptr i32 %tmp8.i to i32*          ; <i32*> [#uses=1]
268         %tmp12 = ptrtoint i32* %tmp6.i to i32           ; <i32> [#uses=1]
269         %tmp10 = inttoptr i32 %tmp12 to i32*            ; <i32*> [#uses=1]
270         %tmp16 = ptrtoint i32* %tmp10 to i32            ; <i32> [#uses=1]
271         br label %return
272
273 return:         ; preds = %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
274         %tmp14 = inttoptr i32 %tmp16 to i32*            ; <i32*> [#uses=1]
275         ret i32* %tmp14
276 }
277
278 declare void @llvm.memcpy.i64(i8* nocapture, i8* nocapture, i64, i32) nounwind