Dan Gohman | 1880092 | 2009-09-11 18:01:28 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -instcombine -scalarrepl -S | not grep { = alloca} |
Chris Lattner | bef6b20 | 2009-02-21 00:46:50 +0000 | [diff] [blame] | 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 |