; LLVM IR from facebook/redex :: libresource/ResourceTypes.ll (ZNK7android13ResStringPool13indexOfStringEPKDsm)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.android::String8" = type { ptr }
%"class.android::ResStringPool" = type <{ ptr, i32, [4 x i8], ptr, ptr, i64, %"class.std::mutex", ptr, ptr, ptr, ptr, i32, [4 x i8], ptr, i32, [4 x i8] }>
%"class.std::mutex" = type { %"class.std::__mutex_base" }
%"class.std::__mutex_base" = type { %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"struct.android::ResStringPool_header" = type { %"struct.android::ResChunk_header", i32, i32, i32, i32, i32 }
%"struct.android::ResChunk_header" = type { i16, i16, i32 }

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #2

; Function Attrs: nounwind
declare void @free(ptr noundef) #3

declare ptr @utf8_to_utf16(ptr noundef, i64 noundef, ptr noundef, i64 noundef) #4

declare void @_ZN7android7String8C1EPKDsm(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, i64 noundef) unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local noundef i64 @_ZNK7android13ResStringPool13indexOfStringEPKDsm(ptr noundef nonnull align 8 dereferenceable(132) %0, ptr noundef %1, i64 noundef %2) #5 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca %"class.android::String8", align 8
  %19 = alloca i64, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i64 %2, ptr %7, align 8, !tbaa !9
  %31 = load ptr, ptr %5, align 8
  %32 = getelementptr inbounds %"class.android::ResStringPool", ptr %31, i32 0, i32 1
  %33 = load i32, ptr %32, align 8, !tbaa !11
  %34 = icmp ne i32 %33, 0
  br i1 %34, label %35, label %39

35:                                               ; preds = %3
  %36 = getelementptr inbounds %"class.android::ResStringPool", ptr %31, i32 0, i32 1
  %37 = load i32, ptr %36, align 8, !tbaa !11
  %38 = sext i32 %37 to i64
  store i64 %38, ptr %4, align 8
  br label %294

39:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  %40 = getelementptr inbounds %"class.android::ResStringPool", ptr %31, i32 0, i32 4
  %41 = load ptr, ptr %40, align 8, !tbaa !16
  %42 = getelementptr inbounds %"struct.android::ResStringPool_header", ptr %41, i32 0, i32 3
  %43 = load i32, ptr %42, align 4, !tbaa !17
  %44 = and i32 %43, 256
  %45 = icmp ne i32 %44, 0
  br i1 %45, label %46, label %185

46:                                               ; preds = %39
  %47 = getelementptr inbounds %"class.android::ResStringPool", ptr %31, i32 0, i32 4
  %48 = load ptr, ptr %47, align 8, !tbaa !16
  %49 = getelementptr inbounds %"struct.android::ResStringPool_header", ptr %48, i32 0, i32 3
  %50 = load i32, ptr %49, align 4, !tbaa !17
  %51 = and i32 %50, 1
  %52 = icmp ne i32 %51, 0
  br i1 %52, label %53, label %124

53:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %54 = load i64, ptr %7, align 8, !tbaa !9
  %55 = add i64 %54, 4
  store i64 %55, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %56 = load i64, ptr %9, align 8, !tbaa !9
  %57 = call noalias ptr @calloc(i64 noundef %56, i64 noundef 2) #9
  store ptr %57, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  store i64 0, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %58 = getelementptr inbounds %"class.android::ResStringPool", ptr %31, i32 0, i32 4
  %59 = load ptr, ptr %58, align 8, !tbaa !16
  %60 = getelementptr inbounds %"struct.android::ResStringPool_header", ptr %59, i32 0, i32 1
  %61 = load i32, ptr %60, align 4, !tbaa !21
  %62 = sub i32 %61, 1
  %63 = zext i32 %62 to i64
  store i64 %63, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  br label %64

64:                                               ; preds = %118, %53
  %65 = load i64, ptr %11, align 8, !tbaa !9
  %66 = load i64, ptr %12, align 8, !tbaa !9
  %67 = icmp sle i64 %65, %66
  br i1 %67, label %68, label %119

68:                                               ; preds = %64
  %69 = load i64, ptr %11, align 8, !tbaa !9
  %70 = load i64, ptr %12, align 8, !tbaa !9
  %71 = load i64, ptr %11, align 8, !tbaa !9
  %72 = sub nsw i64 %70, %71
  %73 = sdiv i64 %72, 2
  %74 = add nsw i64 %69, %73
  store i64 %74, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %75 = load i64, ptr %13, align 8, !tbaa !9
  %76 = load ptr, ptr %31, align 8, !tbaa !22
  %77 = getelementptr inbounds ptr, ptr %76, i64 3
  %78 = load ptr, ptr %77, align 8
  %79 = call noundef ptr %78(ptr noundef nonnull align 8 dereferenceable(132) %31, i64 noundef %75, ptr noundef %8)
  store ptr %79, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  %80 = load ptr, ptr %14, align 8, !tbaa !5
  %81 = icmp ne ptr %80, null
  br i1 %81, label %82, label %98

82:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %83 = load ptr, ptr %14, align 8, !tbaa !5
  %84 = load i64, ptr %8, align 8, !tbaa !9
  %85 = load ptr, ptr %10, align 8, !tbaa !5
  %86 = load i64, ptr %9, align 8, !tbaa !9
  %87 = call ptr @utf8_to_utf16(ptr noundef %83, i64 noundef %84, ptr noundef %85, i64 noundef %86)
  store ptr %87, ptr %16, align 8, !tbaa !5
  %88 = load ptr, ptr %10, align 8, !tbaa !5
  %89 = load ptr, ptr %16, align 8, !tbaa !5
  %90 = load ptr, ptr %10, align 8, !tbaa !5
  %91 = ptrtoint ptr %89 to i64
  %92 = ptrtoint ptr %90 to i64
  %93 = sub i64 %91, %92
  %94 = sdiv exact i64 %93, 2
  %95 = load ptr, ptr %6, align 8, !tbaa !5
  %96 = load i64, ptr %7, align 8, !tbaa !9
  %97 = call i32 @strzcmp16(ptr noundef %88, i64 noundef %94, ptr noundef %95, i64 noundef %96)
  store i32 %97, ptr %15, align 4, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %99

98:                                               ; preds = %68
  store i32 -1, ptr %15, align 4, !tbaa !24
  br label %99

99:                                               ; preds = %98, %82
  %100 = load i32, ptr %15, align 4, !tbaa !24
  %101 = icmp eq i32 %100, 0
  br i1 %101, label %102, label %105

102:                                              ; preds = %99
  %103 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %103) #8
  %104 = load i64, ptr %13, align 8, !tbaa !9
  store i64 %104, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %116

105:                                              ; preds = %99
  %106 = load i32, ptr %15, align 4, !tbaa !24
  %107 = icmp slt i32 %106, 0
  br i1 %107, label %108, label %111

108:                                              ; preds = %105
  %109 = load i64, ptr %13, align 8, !tbaa !9
  %110 = add nsw i64 %109, 1
  store i64 %110, ptr %11, align 8, !tbaa !9
  br label %114

111:                                              ; preds = %105
  %112 = load i64, ptr %13, align 8, !tbaa !9
  %113 = sub nsw i64 %112, 1
  store i64 %113, ptr %12, align 8, !tbaa !9
  br label %114

114:                                              ; preds = %111, %108
  br label %115

115:                                              ; preds = %114
  store i32 0, ptr %17, align 4
  br label %116

116:                                              ; preds = %115, %102
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  %117 = load i32, ptr %17, align 4
  switch i32 %117, label %121 [
    i32 0, label %118
  ]

118:                                              ; preds = %116
  br label %64, !llvm.loop !25

119:                                              ; preds = %64
  %120 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %120) #8
  store i32 0, ptr %17, align 4
  br label %121

121:                                              ; preds = %119, %116
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  %122 = load i32, ptr %17, align 4
  switch i32 %122, label %293 [
    i32 0, label %123
  ]

123:                                              ; preds = %121
  br label %184

124:                                              ; preds = %46
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = load i64, ptr %7, align 8, !tbaa !9
  call void @_ZN7android7String8C1EPKDsm(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef %125, i64 noundef %126)
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %127 = invoke noundef i64 @_ZNK7android7String84sizeEv(ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %128 unwind label %138

128:                                              ; preds = %124
  store i64 %127, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  %129 = getelementptr inbounds %"class.android::ResStringPool", ptr %31, i32 0, i32 4
  %130 = load ptr, ptr %129, align 8, !tbaa !16
  %131 = getelementptr inbounds %"struct.android::ResStringPool_header", ptr %130, i32 0, i32 1
  %132 = load i32, ptr %131, align 4, !tbaa !21
  %133 = sub i32 %132, 1
  store i32 %133, ptr %22, align 4, !tbaa !24
  br label %134

134:                                              ; preds = %174, %128
  %135 = load i32, ptr %22, align 4, !tbaa !24
  %136 = icmp sge i32 %135, 0
  br i1 %136, label %142, label %137

137:                                              ; preds = %134
  store i32 4, ptr %17, align 4
  br label %177

138:                                              ; preds = %124
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %20, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %21, align 4
  br label %183

142:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %143 = load i32, ptr %22, align 4, !tbaa !24
  %144 = sext i32 %143 to i64
  %145 = load ptr, ptr %31, align 8, !tbaa !22
  %146 = getelementptr inbounds ptr, ptr %145, i64 3
  %147 = load ptr, ptr %146, align 8
  %148 = invoke noundef ptr %147(ptr noundef nonnull align 8 dereferenceable(132) %31, i64 noundef %144, ptr noundef %8)
          to label %149 unwind label %166

149:                                              ; preds = %142
  store ptr %148, ptr %23, align 8, !tbaa !5
  %150 = load ptr, ptr %23, align 8, !tbaa !5
  %151 = icmp ne ptr %150, null
  br i1 %151, label %152, label %170

152:                                              ; preds = %149
  %153 = load i64, ptr %19, align 8, !tbaa !9
  %154 = load i64, ptr %8, align 8, !tbaa !9
  %155 = icmp eq i64 %153, %154
  br i1 %155, label %156, label %170

156:                                              ; preds = %152
  %157 = load ptr, ptr %23, align 8, !tbaa !5
  %158 = invoke noundef ptr @_ZNK7android7String86stringEv(ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %159 unwind label %166

159:                                              ; preds = %156
  %160 = load i64, ptr %19, align 8, !tbaa !9
  %161 = call i32 @memcmp(ptr noundef %157, ptr noundef %158, i64 noundef %160) #10
  %162 = icmp eq i32 %161, 0
  br i1 %162, label %163, label %170

163:                                              ; preds = %159
  %164 = load i32, ptr %22, align 4, !tbaa !24
  %165 = sext i32 %164 to i64
  store i64 %165, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %171

166:                                              ; preds = %156, %142
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %20, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %183

170:                                              ; preds = %159, %152, %149
  store i32 0, ptr %17, align 4
  br label %171

171:                                              ; preds = %170, %163
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  %172 = load i32, ptr %17, align 4
  switch i32 %172, label %177 [
    i32 0, label %173
  ]

173:                                              ; preds = %171
  br label %174

174:                                              ; preds = %173
  %175 = load i32, ptr %22, align 4, !tbaa !24
  %176 = add nsw i32 %175, -1
  store i32 %176, ptr %22, align 4, !tbaa !24
  br label %134, !llvm.loop !27

177:                                              ; preds = %171, %137
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  %178 = load i32, ptr %17, align 4
  switch i32 %178, label %180 [
    i32 4, label %179
  ]

179:                                              ; preds = %177
  store i32 0, ptr %17, align 4
  br label %180

180:                                              ; preds = %179, %177
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @_ZN7android7String8D1Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  %181 = load i32, ptr %17, align 4
  switch i32 %181, label %293 [
    i32 0, label %182
  ]

182:                                              ; preds = %180
  br label %184

183:                                              ; preds = %166, %138
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @_ZN7android7String8D1Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  br label %296

184:                                              ; preds = %182, %123
  br label %292

185:                                              ; preds = %39
  %186 = getelementptr inbounds %"class.android::ResStringPool", ptr %31, i32 0, i32 4
  %187 = load ptr, ptr %186, align 8, !tbaa !16
  %188 = getelementptr inbounds %"struct.android::ResStringPool_header", ptr %187, i32 0, i32 3
  %189 = load i32, ptr %188, align 4, !tbaa !17
  %190 = and i32 %189, 1
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %248

192:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  store i64 0, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %193 = getelementptr inbounds %"class.android::ResStringPool", ptr %31, i32 0, i32 4
  %194 = load ptr, ptr %193, align 8, !tbaa !16
  %195 = getelementptr inbounds %"struct.android::ResStringPool_header", ptr %194, i32 0, i32 1
  %196 = load i32, ptr %195, align 4, !tbaa !21
  %197 = sub i32 %196, 1
  %198 = zext i32 %197 to i64
  store i64 %198, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  br label %199

199:                                              ; preds = %243, %192
  %200 = load i64, ptr %24, align 8, !tbaa !9
  %201 = load i64, ptr %25, align 8, !tbaa !9
  %202 = icmp sle i64 %200, %201
  br i1 %202, label %203, label %244

203:                                              ; preds = %199
  %204 = load i64, ptr %24, align 8, !tbaa !9
  %205 = load i64, ptr %25, align 8, !tbaa !9
  %206 = load i64, ptr %24, align 8, !tbaa !9
  %207 = sub nsw i64 %205, %206
  %208 = sdiv i64 %207, 2
  %209 = add nsw i64 %204, %208
  store i64 %209, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %210 = load i64, ptr %26, align 8, !tbaa !9
  %211 = load ptr, ptr %31, align 8, !tbaa !22
  %212 = getelementptr inbounds ptr, ptr %211, i64 2
  %213 = load ptr, ptr %212, align 8
  %214 = call noundef ptr %213(ptr noundef nonnull align 8 dereferenceable(132) %31, i64 noundef %210, ptr noundef %8)
  store ptr %214, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  %215 = load ptr, ptr %27, align 8, !tbaa !5
  %216 = icmp ne ptr %215, null
  br i1 %216, label %217, label %223

217:                                              ; preds = %203
  %218 = load ptr, ptr %27, align 8, !tbaa !5
  %219 = load i64, ptr %8, align 8, !tbaa !9
  %220 = load ptr, ptr %6, align 8, !tbaa !5
  %221 = load i64, ptr %7, align 8, !tbaa !9
  %222 = call i32 @strzcmp16(ptr noundef %218, i64 noundef %219, ptr noundef %220, i64 noundef %221)
  br label %224

223:                                              ; preds = %203
  br label %224

224:                                              ; preds = %223, %217
  %225 = phi i32 [ %222, %217 ], [ -1, %223 ]
  store i32 %225, ptr %28, align 4, !tbaa !24
  %226 = load i32, ptr %28, align 4, !tbaa !24
  %227 = icmp eq i32 %226, 0
  br i1 %227, label %228, label %230

228:                                              ; preds = %224
  %229 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %229, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %241

230:                                              ; preds = %224
  %231 = load i32, ptr %28, align 4, !tbaa !24
  %232 = icmp slt i32 %231, 0
  br i1 %232, label %233, label %236

233:                                              ; preds = %230
  %234 = load i64, ptr %26, align 8, !tbaa !9
  %235 = add nsw i64 %234, 1
  store i64 %235, ptr %24, align 8, !tbaa !9
  br label %239

236:                                              ; preds = %230
  %237 = load i64, ptr %26, align 8, !tbaa !9
  %238 = sub nsw i64 %237, 1
  store i64 %238, ptr %25, align 8, !tbaa !9
  br label %239

239:                                              ; preds = %236, %233
  br label %240

240:                                              ; preds = %239
  store i32 0, ptr %17, align 4
  br label %241

241:                                              ; preds = %240, %228
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  %242 = load i32, ptr %17, align 4
  switch i32 %242, label %245 [
    i32 0, label %243
  ]

243:                                              ; preds = %241
  br label %199, !llvm.loop !28

244:                                              ; preds = %199
  store i32 0, ptr %17, align 4
  br label %245

245:                                              ; preds = %244, %241
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  %246 = load i32, ptr %17, align 4
  switch i32 %246, label %293 [
    i32 0, label %247
  ]

247:                                              ; preds = %245
  br label %291

248:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  %249 = getelementptr inbounds %"class.android::ResStringPool", ptr %31, i32 0, i32 4
  %250 = load ptr, ptr %249, align 8, !tbaa !16
  %251 = getelementptr inbounds %"struct.android::ResStringPool_header", ptr %250, i32 0, i32 1
  %252 = load i32, ptr %251, align 4, !tbaa !21
  %253 = sub i32 %252, 1
  store i32 %253, ptr %29, align 4, !tbaa !24
  br label %254

254:                                              ; preds = %285, %248
  %255 = load i32, ptr %29, align 4, !tbaa !24
  %256 = icmp sge i32 %255, 0
  br i1 %256, label %258, label %257

257:                                              ; preds = %254
  store i32 9, ptr %17, align 4
  br label %288

258:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %259 = load i32, ptr %29, align 4, !tbaa !24
  %260 = sext i32 %259 to i64
  %261 = load ptr, ptr %31, align 8, !tbaa !22
  %262 = getelementptr inbounds ptr, ptr %261, i64 2
  %263 = load ptr, ptr %262, align 8
  %264 = call noundef ptr %263(ptr noundef nonnull align 8 dereferenceable(132) %31, i64 noundef %260, ptr noundef %8)
  store ptr %264, ptr %30, align 8, !tbaa !5
  %265 = load ptr, ptr %30, align 8, !tbaa !5
  %266 = icmp ne ptr %265, null
  br i1 %266, label %267, label %281

267:                                              ; preds = %258
  %268 = load i64, ptr %7, align 8, !tbaa !9
  %269 = load i64, ptr %8, align 8, !tbaa !9
  %270 = icmp eq i64 %268, %269
  br i1 %270, label %271, label %281

271:                                              ; preds = %267
  %272 = load ptr, ptr %30, align 8, !tbaa !5
  %273 = load i64, ptr %8, align 8, !tbaa !9
  %274 = load ptr, ptr %6, align 8, !tbaa !5
  %275 = load i64, ptr %7, align 8, !tbaa !9
  %276 = call i32 @strzcmp16(ptr noundef %272, i64 noundef %273, ptr noundef %274, i64 noundef %275)
  %277 = icmp eq i32 %276, 0
  br i1 %277, label %278, label %281

278:                                              ; preds = %271
  %279 = load i32, ptr %29, align 4, !tbaa !24
  %280 = sext i32 %279 to i64
  store i64 %280, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %282

281:                                              ; preds = %271, %267, %258
  store i32 0, ptr %17, align 4
  br label %282

282:                                              ; preds = %281, %278
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  %283 = load i32, ptr %17, align 4
  switch i32 %283, label %288 [
    i32 0, label %284
  ]

284:                                              ; preds = %282
  br label %285

285:                                              ; preds = %284
  %286 = load i32, ptr %29, align 4, !tbaa !24
  %287 = add nsw i32 %286, -1
  store i32 %287, ptr %29, align 4, !tbaa !24
  br label %254, !llvm.loop !29

288:                                              ; preds = %282, %257
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  %289 = load i32, ptr %17, align 4
  switch i32 %289, label %293 [
    i32 9, label %290
  ]

290:                                              ; preds = %288
  br label %291

291:                                              ; preds = %290, %247
  br label %292

292:                                              ; preds = %291, %184
  store i64 -2, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %293

293:                                              ; preds = %292, %288, %245, %180, %121
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  br label %294

294:                                              ; preds = %293, %35
  %295 = load i64, ptr %4, align 8
  ret i64 %295

296:                                              ; preds = %183
  %297 = load ptr, ptr %20, align 8
  %298 = load i32, ptr %21, align 4
  %299 = insertvalue { ptr, i32 } poison, ptr %297, 0
  %300 = insertvalue { ptr, i32 } %299, i32 %298, 1
  resume { ptr, i32 } %300
}

declare i32 @strzcmp16(ptr noundef, i64 noundef, ptr noundef, i64 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i64 @_ZNK7android7String84sizeEv(ptr noundef nonnull align 8 dereferenceable(8)) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK7android7String86stringEv(ptr noundef nonnull align 8 dereferenceable(8)) #7 align 2

; Function Attrs: nounwind
declare void @_ZN7android7String8D1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3

attributes #0 = { nounwind allocsize(0,1) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { nounwind allocsize(0,1) }
attributes #10 = { nounwind willreturn memory(read) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !13, i64 8}
!12 = !{!"_ZTSN7android13ResStringPoolE", !13, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !14, i64 40, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !13, i64 112, !6, i64 120, !13, i64 128}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTSSt5mutex", !15, i64 0}
!15 = !{!"_ZTSSt12__mutex_base", !7, i64 0}
!16 = !{!12, !6, i64 24}
!17 = !{!18, !13, i64 16}
!18 = !{!"_ZTSN7android20ResStringPool_headerE", !19, i64 0, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24}
!19 = !{!"_ZTSN7android15ResChunk_headerE", !20, i64 0, !20, i64 2, !13, i64 4}
!20 = !{!"short", !7, i64 0}
!21 = !{!18, !13, i64 8}
!22 = !{!23, !23, i64 0}
!23 = !{!"vtable pointer", !8, i64 0}
!24 = !{!13, !13, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = distinct !{!28, !26}
!29 = distinct !{!29, !26}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.android::String8" = type { ptr }

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #2

declare ptr @utf8_to_utf16(ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @_ZN7android7String8C1EPKDsm(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, i64 noundef) unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local noundef i64 @_ZNK7android13ResStringPool13indexOfStringEPKDsm(ptr noundef nonnull align 8 dereferenceable(132) %0, ptr noundef %1, i64 noundef %2) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i64, align 8
  %5 = alloca %"class.android::String8", align 8
  %6 = getelementptr inbounds i8, ptr %0, i64 8
  %7 = load i32, ptr %6, align 8, !tbaa !5
  %.not = icmp eq i32 %7, 0
  br i1 %.not, label %10, label %8

8:                                                ; preds = %3
  %9 = sext i32 %7 to i64
  br label %105

10:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #9
  %11 = getelementptr inbounds i8, ptr %0, i64 24
  %12 = load ptr, ptr %11, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %12, i64 16
  %14 = load i32, ptr %13, align 4, !tbaa !15
  %15 = and i32 %14, 256
  %.not112 = icmp eq i32 %15, 0
  %16 = and i32 %14, 1
  %.not113 = icmp eq i32 %16, 0
  br i1 %.not112, label %71, label %17

17:                                               ; preds = %10
  br i1 %.not113, label %45, label %18

18:                                               ; preds = %17
  %19 = add i64 %2, 4
  %20 = tail call noalias ptr @calloc(i64 noundef %19, i64 noundef 2) #10
  %21 = getelementptr inbounds i8, ptr %12, i64 8
  %22 = load i32, ptr %21, align 4, !tbaa !19
  %23 = add i32 %22, -1
  %24 = zext i32 %23 to i64
  %25 = ptrtoint ptr %20 to i64
  br label %26

26:                                               ; preds = %18, %.thread
  %.079162 = phi i64 [ 0, %18 ], [ %.180, %.thread ]
  %.082161 = phi i64 [ %24, %18 ], [ %.183, %.thread ]
  %27 = sub nsw i64 %.082161, %.079162
  %28 = sdiv i64 %27, 2
  %29 = add nsw i64 %28, %.079162
  %30 = load ptr, ptr %0, align 8, !tbaa !20
  %31 = getelementptr inbounds i8, ptr %30, i64 24
  %32 = load ptr, ptr %31, align 8
  %33 = call noundef ptr %32(ptr noundef nonnull align 8 dereferenceable(132) %0, i64 noundef %29, ptr noundef nonnull %4)
  %.not122 = icmp eq ptr %33, null
  br i1 %.not122, label %.thread, label %34

34:                                               ; preds = %26
  %35 = load i64, ptr %4, align 8, !tbaa !22
  %36 = call ptr @utf8_to_utf16(ptr noundef nonnull %33, i64 noundef %35, ptr noundef %20, i64 noundef %19)
  %37 = ptrtoint ptr %36 to i64
  %38 = sub i64 %37, %25
  %39 = ashr exact i64 %38, 1
  %40 = call i32 @strzcmp16(ptr noundef %20, i64 noundef %39, ptr noundef %1, i64 noundef %2)
  %.not123 = icmp eq i32 %40, 0
  br i1 %.not123, label %44, label %.thread

.thread:                                          ; preds = %26, %34
  %.085127 = phi i32 [ %40, %34 ], [ -1, %26 ]
  %41 = icmp slt i32 %.085127, 0
  %42 = add nsw i64 %29, 1
  %43 = add nsw i64 %29, -1
  %.183 = select i1 %41, i64 %.082161, i64 %43
  %.180 = select i1 %41, i64 %42, i64 %.079162
  %.not121 = icmp sgt i64 %.180, %.183
  br i1 %.not121, label %.thread135, label %26

.thread135:                                       ; preds = %.thread
  call void @free(ptr noundef %20) #9
  br label %.thread151

44:                                               ; preds = %34
  call void @free(ptr noundef %20) #9
  br label %.thread151

45:                                               ; preds = %17
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #9
  call void @_ZN7android7String8C1EPKDsm(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef %1, i64 noundef %2)
  %46 = invoke noundef i64 @_ZNK7android7String84sizeEv(ptr noundef nonnull align 8 dereferenceable(8) %5)
          to label %47 unwind label %53

47:                                               ; preds = %45
  %48 = load ptr, ptr %11, align 8, !tbaa !14
  %49 = getelementptr inbounds i8, ptr %48, i64 8
  %50 = load i32, ptr %49, align 4, !tbaa !19
  %.0100163 = add i32 %50, -1
  %51 = icmp slt i32 %.0100163, 0
  br i1 %51, label %.thread140, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %47
  %52 = zext nneg i32 %.0100163 to i64
  br label %.lr.ph

.thread140:                                       ; preds = %67, %47
  call void @_ZN7android7String8D1Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  br label %.thread151

53:                                               ; preds = %45
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %70

.lr.ph:                                           ; preds = %.lr.ph.preheader, %67
  %indvars.iv = phi i64 [ %52, %.lr.ph.preheader ], [ %indvars.iv.next, %67 ]
  %55 = load ptr, ptr %0, align 8, !tbaa !20
  %56 = getelementptr inbounds i8, ptr %55, i64 24
  %57 = load ptr, ptr %56, align 8
  %58 = invoke noundef ptr %57(ptr noundef nonnull align 8 dereferenceable(132) %0, i64 noundef %indvars.iv, ptr noundef nonnull %4)
          to label %59 unwind label %65

59:                                               ; preds = %.lr.ph
  %.not120 = icmp ne ptr %58, null
  %60 = load i64, ptr %4, align 8
  %61 = icmp eq i64 %46, %60
  %or.cond = select i1 %.not120, i1 %61, i1 false
  br i1 %or.cond, label %62, label %67

62:                                               ; preds = %59
  %63 = call noundef ptr @_ZNK7android7String86stringEv(ptr noundef nonnull align 8 dereferenceable(8) %5)
  %bcmp = call i32 @bcmp(ptr nonnull %58, ptr %63, i64 %46)
  %64 = icmp eq i32 %bcmp, 0
  br i1 %64, label %69, label %67

65:                                               ; preds = %.lr.ph
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %70

67:                                               ; preds = %59, %62
  %indvars.iv.next = add nsw i64 %indvars.iv, -1
  %68 = icmp slt i64 %indvars.iv, 1
  br i1 %68, label %.thread140, label %.lr.ph, !llvm.loop !23

69:                                               ; preds = %62
  call void @_ZN7android7String8D1Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  br label %.thread151

70:                                               ; preds = %65, %53
  %.pn = phi { ptr, i32 } [ %66, %65 ], [ %54, %53 ]
  call void @_ZN7android7String8D1Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  resume { ptr, i32 } %.pn

71:                                               ; preds = %10
  %72 = getelementptr inbounds i8, ptr %12, i64 8
  %73 = load i32, ptr %72, align 4, !tbaa !19
  %.078167 = add i32 %73, -1
  br i1 %.not113, label %91, label %74

74:                                               ; preds = %71
  %75 = zext i32 %.078167 to i64
  br label %76

76:                                               ; preds = %74, %.thread142
  %.086166 = phi i64 [ %75, %74 ], [ %.187, %.thread142 ]
  %.089165 = phi i64 [ 0, %74 ], [ %.190, %.thread142 ]
  %77 = sub nsw i64 %.086166, %.089165
  %78 = sdiv i64 %77, 2
  %79 = add nsw i64 %78, %.089165
  %80 = load ptr, ptr %0, align 8, !tbaa !20
  %81 = getelementptr inbounds i8, ptr %80, i64 16
  %82 = load ptr, ptr %81, align 8
  %83 = call noundef ptr %82(ptr noundef nonnull align 8 dereferenceable(132) %0, i64 noundef %79, ptr noundef nonnull %4)
  %.not116 = icmp eq ptr %83, null
  br i1 %.not116, label %.thread142, label %84

84:                                               ; preds = %76
  %85 = load i64, ptr %4, align 8, !tbaa !22
  %86 = call i32 @strzcmp16(ptr noundef nonnull %83, i64 noundef %85, ptr noundef %1, i64 noundef %2)
  %.not117 = icmp eq i32 %86, 0
  br i1 %.not117, label %.thread151, label %.thread142

.thread142:                                       ; preds = %76, %84
  %87 = phi i32 [ %86, %84 ], [ -1, %76 ]
  %88 = icmp slt i32 %87, 0
  %89 = add nsw i64 %79, 1
  %90 = add nsw i64 %79, -1
  %.190 = select i1 %88, i64 %89, i64 %.089165
  %.187 = select i1 %88, i64 %.086166, i64 %90
  %.not115 = icmp sgt i64 %.190, %.187
  br i1 %.not115, label %.thread151, label %76

91:                                               ; preds = %71
  %92 = icmp slt i32 %.078167, 0
  br i1 %92, label %.thread151, label %.lr.ph169.preheader

.lr.ph169.preheader:                              ; preds = %91
  %93 = zext nneg i32 %.078167 to i64
  br label %.lr.ph169

.lr.ph169:                                        ; preds = %.lr.ph169.preheader, %103
  %indvars.iv178 = phi i64 [ %93, %.lr.ph169.preheader ], [ %indvars.iv.next179, %103 ]
  %94 = load ptr, ptr %0, align 8, !tbaa !20
  %95 = getelementptr inbounds i8, ptr %94, i64 16
  %96 = load ptr, ptr %95, align 8
  %97 = call noundef ptr %96(ptr noundef nonnull align 8 dereferenceable(132) %0, i64 noundef %indvars.iv178, ptr noundef nonnull %4)
  %.not114 = icmp ne ptr %97, null
  %98 = load i64, ptr %4, align 8
  %99 = icmp eq i64 %98, %2
  %or.cond187 = select i1 %.not114, i1 %99, i1 false
  br i1 %or.cond187, label %100, label %103

100:                                              ; preds = %.lr.ph169
  %101 = call i32 @strzcmp16(ptr noundef nonnull %97, i64 noundef %2, ptr noundef %1, i64 noundef %2)
  %102 = icmp eq i32 %101, 0
  br i1 %102, label %.thread151, label %103

103:                                              ; preds = %.lr.ph169, %100
  %indvars.iv.next179 = add nsw i64 %indvars.iv178, -1
  %104 = icmp slt i64 %indvars.iv178, 1
  br i1 %104, label %.thread151, label %.lr.ph169, !llvm.loop !25

.thread151:                                       ; preds = %.thread142, %84, %100, %103, %91, %.thread135, %.thread140, %69, %44
  %.12 = phi i64 [ %29, %44 ], [ %indvars.iv, %69 ], [ -2, %.thread140 ], [ -2, %.thread135 ], [ -2, %91 ], [ %indvars.iv178, %100 ], [ -2, %103 ], [ -2, %.thread142 ], [ %79, %84 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  br label %105

105:                                              ; preds = %.thread151, %8
  %.13 = phi i64 [ %9, %8 ], [ %.12, %.thread151 ]
  ret i64 %.13
}

declare i32 @strzcmp16(ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i64 @_ZNK7android7String84sizeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK7android7String86stringEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6 align 2

; Function Attrs: nounwind
declare void @_ZN7android7String8D1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #8

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nofree nounwind willreturn memory(argmem: read) }
attributes #9 = { nounwind }
attributes #10 = { nounwind allocsize(0,1) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 8}
!6 = !{!"_ZTSN7android13ResStringPoolE", !7, i64 8, !10, i64 16, !10, i64 24, !11, i64 32, !12, i64 40, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !10, i64 120, !7, i64 128}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!"_ZTSSt5mutex", !13, i64 0}
!13 = !{!"_ZTSSt12__mutex_base", !8, i64 0}
!14 = !{!6, !10, i64 24}
!15 = !{!16, !7, i64 16}
!16 = !{!"_ZTSN7android20ResStringPool_headerE", !17, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24}
!17 = !{!"_ZTSN7android15ResChunk_headerE", !18, i64 0, !18, i64 2, !7, i64 4}
!18 = !{!"short", !8, i64 0}
!19 = !{!16, !7, i64 8}
!20 = !{!21, !21, i64 0}
!21 = !{!"vtable pointer", !9, i64 0}
!22 = !{!11, !11, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass