2009-02-20-InstCombine-SROA.ll   [plain text]


; RUN: llvm-as < %s | opt -instcombine -scalarrepl | llvm-dis | not grep { = alloca}
; rdar://6417724
; Instcombine shouldn't do anything to this function that prevents promoting the allocas inside it.

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"
target triple = "i386-apple-darwin9.6"
	%"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >" = type { i32* }
	%"struct.std::_Vector_base<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" }
	%"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" = type { i32*, i32*, i32* }
	%"struct.std::bidirectional_iterator_tag" = type <{ i8 }>
	%"struct.std::forward_iterator_tag" = type <{ i8 }>
	%"struct.std::input_iterator_tag" = type <{ i8 }>
	%"struct.std::random_access_iterator_tag" = type <{ i8 }>
	%"struct.std::vector<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >" }

define i32* @_Z3fooRSt6vectorIiSaIiEE(%"struct.std::vector<int,std::allocator<int> >"* %X) {
entry:
	%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]
	%__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]
	%__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]
	%unnamed_arg.i = alloca %"struct.std::bidirectional_iterator_tag", align 8		; <%"struct.std::bidirectional_iterator_tag"*> [#uses=1]
	%1 = alloca %"struct.std::bidirectional_iterator_tag"		; <%"struct.std::bidirectional_iterator_tag"*> [#uses=1]
	%__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]
	%2 = alloca %"struct.std::bidirectional_iterator_tag"		; <%"struct.std::bidirectional_iterator_tag"*> [#uses=2]
	%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]
	%4 = alloca i32		; <i32*> [#uses=8]
	%"alloca point" = bitcast i32 0 to i32		; <i32> [#uses=0]
	store i32 42, i32* %4, align 4
	%5 = getelementptr %"struct.std::vector<int,std::allocator<int> >"* %X, i32 0, i32 0		; <%"struct.std::_Vector_base<int,std::allocator<int> >"*> [#uses=1]
	%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]
	%7 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl"* %6, i32 0, i32 1		; <i32**> [#uses=1]
	%8 = load i32** %7, align 4		; <i32*> [#uses=1]
	%9 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %3, i32 0, i32 0		; <i32**> [#uses=1]
	store i32* %8, i32** %9, align 4
	%10 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %3, i32 0, i32 0		; <i32**> [#uses=1]
	%11 = load i32** %10, align 4		; <i32*> [#uses=1]
	%tmp2.i = ptrtoint i32* %11 to i32		; <i32> [#uses=1]
	%tmp1.i = inttoptr i32 %tmp2.i to i32*		; <i32*> [#uses=1]
	%tmp3 = ptrtoint i32* %tmp1.i to i32		; <i32> [#uses=1]
	%tmp2 = inttoptr i32 %tmp3 to i32*		; <i32*> [#uses=1]
	%12 = getelementptr %"struct.std::vector<int,std::allocator<int> >"* %X, i32 0, i32 0		; <%"struct.std::_Vector_base<int,std::allocator<int> >"*> [#uses=1]
	%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]
	%14 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl"* %13, i32 0, i32 0		; <i32**> [#uses=1]
	%15 = load i32** %14, align 4		; <i32*> [#uses=1]
	%16 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %0, i32 0, i32 0		; <i32**> [#uses=1]
	store i32* %15, i32** %16, align 4
	%17 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %0, i32 0, i32 0		; <i32**> [#uses=1]
	%18 = load i32** %17, align 4		; <i32*> [#uses=1]
	%tmp2.i17 = ptrtoint i32* %18 to i32		; <i32> [#uses=1]
	%tmp1.i18 = inttoptr i32 %tmp2.i17 to i32*		; <i32*> [#uses=1]
	%tmp8 = ptrtoint i32* %tmp1.i18 to i32		; <i32> [#uses=1]
	%tmp6 = inttoptr i32 %tmp8 to i32*		; <i32*> [#uses=1]
	%19 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"* %__first_addr.i, i32 0, i32 0		; <i32**> [#uses=1]
	store i32* %tmp6, i32** %19
	%20 = getelementptr %"struct.std::bidirectional_iterator_tag"* %1, i32 0, i32 0		; <i8*> [#uses=1]
	%21 = load i8* %20, align 1		; <i8> [#uses=1]
	%22 = or i8 %21, 0		; <i8> [#uses=1]
	%23 = or i8 %22, 0		; <i8> [#uses=1]
	%24 = or i8 %23, 0		; <i8> [#uses=0]
	%25 = getelementptr %"struct.std::bidirectional_iterator_tag"* %2, i32 0, i32 0		; <i8*> [#uses=1]
	store i8 0, i8* %25, align 1
	%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]
	%val.i = load i32** %elt.i		; <i32*> [#uses=1]
	%tmp.i = bitcast %"struct.std::bidirectional_iterator_tag"* %unnamed_arg.i to i8*		; <i8*> [#uses=1]
	%tmp9.i = bitcast %"struct.std::bidirectional_iterator_tag"* %2 to i8*		; <i8*> [#uses=1]
	call void @llvm.memcpy.i64(i8* %tmp.i, i8* %tmp9.i, i64 1, i32 1)
	%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]
	store i32* %val.i, i32** %26
	%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]
	store i32* %tmp2, i32** %27
	%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]
	%29 = load i32** %28, align 4		; <i32*> [#uses=1]
	%30 = ptrtoint i32* %29 to i32		; <i32> [#uses=1]
	%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]
	%32 = load i32** %31, align 4		; <i32*> [#uses=1]
	%33 = ptrtoint i32* %32 to i32		; <i32> [#uses=1]
	%34 = sub i32 %30, %33		; <i32> [#uses=1]
	%35 = ashr i32 %34, 2		; <i32> [#uses=1]
	%36 = ashr i32 %35, 2		; <i32> [#uses=1]
	br label %bb12.i.i

bb.i.i:		; preds = %bb12.i.i
	%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]
	%38 = load i32** %37, align 4		; <i32*> [#uses=1]
	%39 = load i32* %38, align 4		; <i32> [#uses=1]
	%40 = load i32* %4, align 4		; <i32> [#uses=1]
	%41 = icmp eq i32 %39, %40		; <i1> [#uses=1]
	%42 = zext i1 %41 to i8		; <i8> [#uses=1]
	%toBool.i.i = icmp ne i8 %42, 0		; <i1> [#uses=1]
	br i1 %toBool.i.i, label %bb1.i.i, label %bb2.i.i

bb1.i.i:		; preds = %bb.i.i
	%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]
	%44 = load i32** %43, align 4		; <i32*> [#uses=1]
	br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit

bb2.i.i:		; preds = %bb.i.i
	%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]
	%46 = load i32** %45, align 4		; <i32*> [#uses=1]
	%47 = getelementptr i32* %46, i64 1		; <i32*> [#uses=1]
	%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]
	store i32* %47, i32** %48, align 4
	%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]
	%50 = load i32** %49, align 4		; <i32*> [#uses=1]
	%51 = load i32* %50, align 4		; <i32> [#uses=1]
	%52 = load i32* %4, align 4		; <i32> [#uses=1]
	%53 = icmp eq i32 %51, %52		; <i1> [#uses=1]
	%54 = zext i1 %53 to i8		; <i8> [#uses=1]
	%toBool3.i.i = icmp ne i8 %54, 0		; <i1> [#uses=1]
	br i1 %toBool3.i.i, label %bb4.i.i, label %bb5.i.i

bb4.i.i:		; preds = %bb2.i.i
	%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]
	%56 = load i32** %55, align 4		; <i32*> [#uses=1]
	br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit

bb5.i.i:		; preds = %bb2.i.i
	%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]
	%58 = load i32** %57, align 4		; <i32*> [#uses=1]
	%59 = getelementptr i32* %58, i64 1		; <i32*> [#uses=1]
	%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]
	store i32* %59, i32** %60, align 4
	%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]
	%62 = load i32** %61, align 4		; <i32*> [#uses=1]
	%63 = load i32* %62, align 4		; <i32> [#uses=1]
	%64 = load i32* %4, align 4		; <i32> [#uses=1]
	%65 = icmp eq i32 %63, %64		; <i1> [#uses=1]
	%66 = zext i1 %65 to i8		; <i8> [#uses=1]
	%toBool6.i.i = icmp ne i8 %66, 0		; <i1> [#uses=1]
	br i1 %toBool6.i.i, label %bb7.i.i, label %bb8.i.i

bb7.i.i:		; preds = %bb5.i.i
	%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]
	%68 = load i32** %67, align 4		; <i32*> [#uses=1]
	br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit

bb8.i.i:		; preds = %bb5.i.i
	%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]
	%70 = load i32** %69, align 4		; <i32*> [#uses=1]
	%71 = getelementptr i32* %70, i64 1		; <i32*> [#uses=1]
	%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]
	store i32* %71, i32** %72, align 4
	%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]
	%74 = load i32** %73, align 4		; <i32*> [#uses=1]
	%75 = load i32* %74, align 4		; <i32> [#uses=1]
	%76 = load i32* %4, align 4		; <i32> [#uses=1]
	%77 = icmp eq i32 %75, %76		; <i1> [#uses=1]
	%78 = zext i1 %77 to i8		; <i8> [#uses=1]
	%toBool9.i.i = icmp ne i8 %78, 0		; <i1> [#uses=1]
	br i1 %toBool9.i.i, label %bb10.i.i, label %bb11.i.i

bb10.i.i:		; preds = %bb8.i.i
	%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]
	%80 = load i32** %79, align 4		; <i32*> [#uses=1]
	br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit

bb11.i.i:		; preds = %bb8.i.i
	%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]
	%82 = load i32** %81, align 4		; <i32*> [#uses=1]
	%83 = getelementptr i32* %82, i64 1		; <i32*> [#uses=1]
	%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]
	store i32* %83, i32** %84, align 4
	%85 = sub i32 %__trip_count.0.i.i, 1		; <i32> [#uses=1]
	br label %bb12.i.i

bb12.i.i:		; preds = %bb11.i.i, %entry
	%__trip_count.0.i.i = phi i32 [ %36, %entry ], [ %85, %bb11.i.i ]		; <i32> [#uses=2]
	%86 = icmp sgt i32 %__trip_count.0.i.i, 0		; <i1> [#uses=1]
	br i1 %86, label %bb.i.i, label %bb13.i.i

bb13.i.i:		; preds = %bb12.i.i
	%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]
	%88 = load i32** %87, align 4		; <i32*> [#uses=1]
	%89 = ptrtoint i32* %88 to i32		; <i32> [#uses=1]
	%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]
	%91 = load i32** %90, align 4		; <i32*> [#uses=1]
	%92 = ptrtoint i32* %91 to i32		; <i32> [#uses=1]
	%93 = sub i32 %89, %92		; <i32> [#uses=1]
	%94 = ashr i32 %93, 2		; <i32> [#uses=1]
	switch i32 %94, label %bb26.i.i [
		i32 1, label %bb22.i.i
		i32 2, label %bb18.i.i
		i32 3, label %bb14.i.i
	]

bb14.i.i:		; preds = %bb13.i.i
	%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]
	%96 = load i32** %95, align 4		; <i32*> [#uses=1]
	%97 = load i32* %96, align 4		; <i32> [#uses=1]
	%98 = load i32* %4, align 4		; <i32> [#uses=1]
	%99 = icmp eq i32 %97, %98		; <i1> [#uses=1]
	%100 = zext i1 %99 to i8		; <i8> [#uses=1]
	%toBool15.i.i = icmp ne i8 %100, 0		; <i1> [#uses=1]
	br i1 %toBool15.i.i, label %bb16.i.i, label %bb17.i.i

bb16.i.i:		; preds = %bb14.i.i
	%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]
	%102 = load i32** %101, align 4		; <i32*> [#uses=1]
	br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit

bb17.i.i:		; preds = %bb14.i.i
	%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]
	%104 = load i32** %103, align 4		; <i32*> [#uses=1]
	%105 = getelementptr i32* %104, i64 1		; <i32*> [#uses=1]
	%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]
	store i32* %105, i32** %106, align 4
	br label %bb18.i.i

bb18.i.i:		; preds = %bb17.i.i, %bb13.i.i
	%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]
	%108 = load i32** %107, align 4		; <i32*> [#uses=1]
	%109 = load i32* %108, align 4		; <i32> [#uses=1]
	%110 = load i32* %4, align 4		; <i32> [#uses=1]
	%111 = icmp eq i32 %109, %110		; <i1> [#uses=1]
	%112 = zext i1 %111 to i8		; <i8> [#uses=1]
	%toBool19.i.i = icmp ne i8 %112, 0		; <i1> [#uses=1]
	br i1 %toBool19.i.i, label %bb20.i.i, label %bb21.i.i

bb20.i.i:		; preds = %bb18.i.i
	%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]
	%114 = load i32** %113, align 4		; <i32*> [#uses=1]
	br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit

bb21.i.i:		; preds = %bb18.i.i
	%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]
	%116 = load i32** %115, align 4		; <i32*> [#uses=1]
	%117 = getelementptr i32* %116, i64 1		; <i32*> [#uses=1]
	%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]
	store i32* %117, i32** %118, align 4
	br label %bb22.i.i

bb22.i.i:		; preds = %bb21.i.i, %bb13.i.i
	%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]
	%120 = load i32** %119, align 4		; <i32*> [#uses=1]
	%121 = load i32* %120, align 4		; <i32> [#uses=1]
	%122 = load i32* %4, align 4		; <i32> [#uses=1]
	%123 = icmp eq i32 %121, %122		; <i1> [#uses=1]
	%124 = zext i1 %123 to i8		; <i8> [#uses=1]
	%toBool23.i.i = icmp ne i8 %124, 0		; <i1> [#uses=1]
	br i1 %toBool23.i.i, label %bb24.i.i, label %bb25.i.i

bb24.i.i:		; preds = %bb22.i.i
	%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]
	%126 = load i32** %125, align 4		; <i32*> [#uses=1]
	br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit

bb25.i.i:		; preds = %bb22.i.i
	%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]
	%128 = load i32** %127, align 4		; <i32*> [#uses=1]
	%129 = getelementptr i32* %128, i64 1		; <i32*> [#uses=1]
	%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]
	store i32* %129, i32** %130, align 4
	br label %bb26.i.i

bb26.i.i:		; preds = %bb25.i.i, %bb13.i.i
	%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]
	%132 = load i32** %131, align 4		; <i32*> [#uses=1]
	br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit

_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
	%.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]
	%tmp2.i.i = ptrtoint i32* %.0.0.i.i to i32		; <i32> [#uses=1]
	%tmp1.i.i = inttoptr i32 %tmp2.i.i to i32*		; <i32*> [#uses=1]
	%tmp4.i = ptrtoint i32* %tmp1.i.i to i32		; <i32> [#uses=1]
	%tmp3.i = inttoptr i32 %tmp4.i to i32*		; <i32*> [#uses=1]
	%tmp8.i = ptrtoint i32* %tmp3.i to i32		; <i32> [#uses=1]
	%tmp6.i = inttoptr i32 %tmp8.i to i32*		; <i32*> [#uses=1]
	%tmp12 = ptrtoint i32* %tmp6.i to i32		; <i32> [#uses=1]
	%tmp10 = inttoptr i32 %tmp12 to i32*		; <i32*> [#uses=1]
	%tmp16 = ptrtoint i32* %tmp10 to i32		; <i32> [#uses=1]
	br label %return

return:		; preds = %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit
	%tmp14 = inttoptr i32 %tmp16 to i32*		; <i32*> [#uses=1]
	ret i32* %tmp14
}

declare void @llvm.memcpy.i64(i8* nocapture, i8* nocapture, i64, i32) nounwind