; LLVM IR from ibr-ds/STANlite :: Enclave/sqlite (main)

; 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"

%struct.Sqlite3Config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.sqlite3_mem_methods, %struct.sqlite3_mutex_methods, %struct.sqlite3_pcache_methods2, ptr, i32, i32, i32, i64, i64, ptr, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i32, i32 }
%struct.sqlite3_mem_methods = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.sqlite3_mutex_methods = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.sqlite3_pcache_methods2 = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.OpenMode = type { ptr, i32 }

@sqlite3Config = external global %struct.Sqlite3Config, align 8
@.str.31 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [28 x i8], align 1
@sqlite3CtypeMap = external constant [0 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [6 x i8], align 1
@sqlite3ParseUri.aCacheMode = external hidden global [3 x %struct.OpenMode], align 16
@.str.38 = external hidden unnamed_addr constant [5 x i8], align 1
@sqlite3ParseUri.aOpenMode = external hidden global [5 x %struct.OpenMode], align 16
@.str.43 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [16 x i8], align 1

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

declare void @sqlite3_free(ptr noundef) #2

declare i32 @sqlite3Strlen30(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @sqlite3ParseUri(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #3 {
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i8, align 1
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i64, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %37 = load ptr, ptr %10, align 8, !tbaa !5
  %38 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %38, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %39 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %39, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %40 = load ptr, ptr %9, align 8, !tbaa !5
  %41 = call i32 @sqlite3Strlen30(ptr noundef %40)
  store i32 %41, ptr %19, align 4, !tbaa !9
  %42 = load i32, ptr %15, align 4, !tbaa !9
  %43 = and i32 %42, 64
  %44 = icmp ne i32 %43, 0
  br i1 %44, label %48, label %45

45:                                               ; preds = %6
  %46 = load i32, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 3), align 4, !tbaa !11
  %47 = icmp ne i32 %46, 0
  br i1 %47, label %48, label %507

48:                                               ; preds = %45, %6
  %49 = load i32, ptr %19, align 4, !tbaa !9
  %50 = icmp sge i32 %49, 5
  br i1 %50, label %51, label %507

51:                                               ; preds = %48
  %52 = load ptr, ptr %9, align 8, !tbaa !5
  %53 = call i32 @memcmp(ptr noundef %52, ptr noundef @.str.31, i64 noundef 5) #6
  %54 = icmp eq i32 %53, 0
  br i1 %54, label %55, label %507

55:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  store i32 0, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %56 = load i32, ptr %19, align 4, !tbaa !9
  %57 = add nsw i32 %56, 2
  %58 = sext i32 %57 to i64
  store i64 %58, ptr %24, align 8, !tbaa !17
  %59 = load i32, ptr %15, align 4, !tbaa !9
  %60 = or i32 %59, 64
  store i32 %60, ptr %15, align 4, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %61

61:                                               ; preds = %77, %55
  %62 = load i32, ptr %22, align 4, !tbaa !9
  %63 = load i32, ptr %19, align 4, !tbaa !9
  %64 = icmp slt i32 %62, %63
  br i1 %64, label %65, label %80

65:                                               ; preds = %61
  %66 = load ptr, ptr %9, align 8, !tbaa !5
  %67 = load i32, ptr %22, align 4, !tbaa !9
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds i8, ptr %66, i64 %68
  %70 = load i8, ptr %69, align 1, !tbaa !18
  %71 = sext i8 %70 to i32
  %72 = icmp eq i32 %71, 38
  %73 = zext i1 %72 to i32
  %74 = sext i32 %73 to i64
  %75 = load i64, ptr %24, align 8, !tbaa !17
  %76 = add i64 %75, %74
  store i64 %76, ptr %24, align 8, !tbaa !17
  br label %77

77:                                               ; preds = %65
  %78 = load i32, ptr %22, align 4, !tbaa !9
  %79 = add nsw i32 %78, 1
  store i32 %79, ptr %22, align 4, !tbaa !9
  br label %61, !llvm.loop !19

80:                                               ; preds = %61
  %81 = load i64, ptr %24, align 8, !tbaa !17
  %82 = call ptr @sqlite3_malloc64(i64 noundef %81)
  store ptr %82, ptr %17, align 8, !tbaa !5
  %83 = load ptr, ptr %17, align 8, !tbaa !5
  %84 = icmp ne ptr %83, null
  br i1 %84, label %86, label %85

85:                                               ; preds = %80
  store i32 7, ptr %7, align 4
  store i32 1, ptr %25, align 4
  br label %504

86:                                               ; preds = %80
  store i32 5, ptr %22, align 4, !tbaa !9
  %87 = load ptr, ptr %9, align 8, !tbaa !5
  %88 = getelementptr inbounds i8, ptr %87, i64 5
  %89 = load i8, ptr %88, align 1, !tbaa !18
  %90 = sext i8 %89 to i32
  %91 = icmp eq i32 %90, 47
  br i1 %91, label %92, label %139

92:                                               ; preds = %86
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = getelementptr inbounds i8, ptr %93, i64 6
  %95 = load i8, ptr %94, align 1, !tbaa !18
  %96 = sext i8 %95 to i32
  %97 = icmp eq i32 %96, 47
  br i1 %97, label %98, label %139

98:                                               ; preds = %92
  store i32 7, ptr %22, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %117, %98
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = load i32, ptr %22, align 4, !tbaa !9
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds i8, ptr %100, i64 %102
  %104 = load i8, ptr %103, align 1, !tbaa !18
  %105 = sext i8 %104 to i32
  %106 = icmp ne i32 %105, 0
  br i1 %106, label %107, label %115

107:                                              ; preds = %99
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = load i32, ptr %22, align 4, !tbaa !9
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds i8, ptr %108, i64 %110
  %112 = load i8, ptr %111, align 1, !tbaa !18
  %113 = sext i8 %112 to i32
  %114 = icmp ne i32 %113, 47
  br label %115

115:                                              ; preds = %107, %99
  %116 = phi i1 [ false, %99 ], [ %114, %107 ]
  br i1 %116, label %117, label %120

117:                                              ; preds = %115
  %118 = load i32, ptr %22, align 4, !tbaa !9
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr %22, align 4, !tbaa !9
  br label %99, !llvm.loop !21

120:                                              ; preds = %115
  %121 = load i32, ptr %22, align 4, !tbaa !9
  %122 = icmp ne i32 %121, 7
  br i1 %122, label %123, label %138

123:                                              ; preds = %120
  %124 = load i32, ptr %22, align 4, !tbaa !9
  %125 = icmp ne i32 %124, 16
  br i1 %125, label %131, label %126

126:                                              ; preds = %123
  %127 = load ptr, ptr %9, align 8, !tbaa !5
  %128 = getelementptr inbounds i8, ptr %127, i64 7
  %129 = call i32 @memcmp(ptr noundef @.str.32, ptr noundef %128, i64 noundef 9) #6
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %131, label %138

131:                                              ; preds = %126, %123
  %132 = load i32, ptr %22, align 4, !tbaa !9
  %133 = sub nsw i32 %132, 7
  %134 = load ptr, ptr %9, align 8, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %134, i64 7
  %136 = call ptr (ptr, ...) @sqlite3_mprintf(ptr noundef @.str.33, i32 noundef %133, ptr noundef %135)
  %137 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %136, ptr %137, align 8, !tbaa !5
  store i32 1, ptr %14, align 4, !tbaa !9
  store i32 7, ptr %25, align 4
  br label %504

138:                                              ; preds = %126, %120
  br label %139

139:                                              ; preds = %138, %92, %86
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %140

140:                                              ; preds = %342, %312, %258, %139
  %141 = load ptr, ptr %9, align 8, !tbaa !5
  %142 = load i32, ptr %22, align 4, !tbaa !9
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds i8, ptr %141, i64 %143
  %145 = load i8, ptr %144, align 1, !tbaa !18
  store i8 %145, ptr %18, align 1, !tbaa !18
  %146 = sext i8 %145 to i32
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %148, label %152

148:                                              ; preds = %140
  %149 = load i8, ptr %18, align 1, !tbaa !18
  %150 = sext i8 %149 to i32
  %151 = icmp ne i32 %150, 35
  br label %152

152:                                              ; preds = %148, %140
  %153 = phi i1 [ false, %140 ], [ %151, %148 ]
  br i1 %153, label %154, label %349

154:                                              ; preds = %152
  %155 = load i32, ptr %22, align 4, !tbaa !9
  %156 = add nsw i32 %155, 1
  store i32 %156, ptr %22, align 4, !tbaa !9
  %157 = load i8, ptr %18, align 1, !tbaa !18
  %158 = sext i8 %157 to i32
  %159 = icmp eq i32 %158, 37
  br i1 %159, label %160, label %261

160:                                              ; preds = %154
  %161 = load ptr, ptr %9, align 8, !tbaa !5
  %162 = load i32, ptr %22, align 4, !tbaa !9
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds i8, ptr %161, i64 %163
  %165 = load i8, ptr %164, align 1, !tbaa !18
  %166 = zext i8 %165 to i64
  %167 = getelementptr inbounds [0 x i8], ptr @sqlite3CtypeMap, i64 0, i64 %166
  %168 = load i8, ptr %167, align 1, !tbaa !18
  %169 = zext i8 %168 to i32
  %170 = and i32 %169, 8
  %171 = icmp ne i32 %170, 0
  br i1 %171, label %172, label %261

172:                                              ; preds = %160
  %173 = load ptr, ptr %9, align 8, !tbaa !5
  %174 = load i32, ptr %22, align 4, !tbaa !9
  %175 = add nsw i32 %174, 1
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i8, ptr %173, i64 %176
  %178 = load i8, ptr %177, align 1, !tbaa !18
  %179 = zext i8 %178 to i64
  %180 = getelementptr inbounds [0 x i8], ptr @sqlite3CtypeMap, i64 0, i64 %179
  %181 = load i8, ptr %180, align 1, !tbaa !18
  %182 = zext i8 %181 to i32
  %183 = and i32 %182, 8
  %184 = icmp ne i32 %183, 0
  br i1 %184, label %185, label %261

185:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %186 = load ptr, ptr %9, align 8, !tbaa !5
  %187 = load i32, ptr %22, align 4, !tbaa !9
  %188 = add nsw i32 %187, 1
  store i32 %188, ptr %22, align 4, !tbaa !9
  %189 = sext i32 %187 to i64
  %190 = getelementptr inbounds i8, ptr %186, i64 %189
  %191 = load i8, ptr %190, align 1, !tbaa !18
  %192 = sext i8 %191 to i32
  %193 = call zeroext i8 @sqlite3HexToInt(i32 noundef %192)
  %194 = zext i8 %193 to i32
  %195 = shl i32 %194, 4
  store i32 %195, ptr %26, align 4, !tbaa !9
  %196 = load ptr, ptr %9, align 8, !tbaa !5
  %197 = load i32, ptr %22, align 4, !tbaa !9
  %198 = add nsw i32 %197, 1
  store i32 %198, ptr %22, align 4, !tbaa !9
  %199 = sext i32 %197 to i64
  %200 = getelementptr inbounds i8, ptr %196, i64 %199
  %201 = load i8, ptr %200, align 1, !tbaa !18
  %202 = sext i8 %201 to i32
  %203 = call zeroext i8 @sqlite3HexToInt(i32 noundef %202)
  %204 = zext i8 %203 to i32
  %205 = load i32, ptr %26, align 4, !tbaa !9
  %206 = add nsw i32 %205, %204
  store i32 %206, ptr %26, align 4, !tbaa !9
  %207 = load i32, ptr %26, align 4, !tbaa !9
  %208 = icmp eq i32 %207, 0
  br i1 %208, label %209, label %255

209:                                              ; preds = %185
  br label %210

210:                                              ; preds = %251, %209
  %211 = load ptr, ptr %9, align 8, !tbaa !5
  %212 = load i32, ptr %22, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i8, ptr %211, i64 %213
  %215 = load i8, ptr %214, align 1, !tbaa !18
  store i8 %215, ptr %18, align 1, !tbaa !18
  %216 = sext i8 %215 to i32
  %217 = icmp ne i32 %216, 0
  br i1 %217, label %218, label %249

218:                                              ; preds = %210
  %219 = load i8, ptr %18, align 1, !tbaa !18
  %220 = sext i8 %219 to i32
  %221 = icmp ne i32 %220, 35
  br i1 %221, label %222, label %249

222:                                              ; preds = %218
  %223 = load i32, ptr %21, align 4, !tbaa !9
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %229, label %225

225:                                              ; preds = %222
  %226 = load i8, ptr %18, align 1, !tbaa !18
  %227 = sext i8 %226 to i32
  %228 = icmp ne i32 %227, 63
  br i1 %228, label %229, label %249

229:                                              ; preds = %225, %222
  %230 = load i32, ptr %21, align 4, !tbaa !9
  %231 = icmp ne i32 %230, 1
  br i1 %231, label %240, label %232

232:                                              ; preds = %229
  %233 = load i8, ptr %18, align 1, !tbaa !18
  %234 = sext i8 %233 to i32
  %235 = icmp ne i32 %234, 61
  br i1 %235, label %236, label %249

236:                                              ; preds = %232
  %237 = load i8, ptr %18, align 1, !tbaa !18
  %238 = sext i8 %237 to i32
  %239 = icmp ne i32 %238, 38
  br i1 %239, label %240, label %249

240:                                              ; preds = %236, %229
  %241 = load i32, ptr %21, align 4, !tbaa !9
  %242 = icmp ne i32 %241, 2
  br i1 %242, label %247, label %243

243:                                              ; preds = %240
  %244 = load i8, ptr %18, align 1, !tbaa !18
  %245 = sext i8 %244 to i32
  %246 = icmp ne i32 %245, 38
  br label %247

247:                                              ; preds = %243, %240
  %248 = phi i1 [ true, %240 ], [ %246, %243 ]
  br label %249

249:                                              ; preds = %247, %236, %232, %225, %218, %210
  %250 = phi i1 [ false, %236 ], [ false, %232 ], [ false, %225 ], [ false, %218 ], [ false, %210 ], [ %248, %247 ]
  br i1 %250, label %251, label %254

251:                                              ; preds = %249
  %252 = load i32, ptr %22, align 4, !tbaa !9
  %253 = add nsw i32 %252, 1
  store i32 %253, ptr %22, align 4, !tbaa !9
  br label %210, !llvm.loop !22

254:                                              ; preds = %249
  store i32 8, ptr %25, align 4
  br label %258, !llvm.loop !23

255:                                              ; preds = %185
  %256 = load i32, ptr %26, align 4, !tbaa !9
  %257 = trunc i32 %256 to i8
  store i8 %257, ptr %18, align 1, !tbaa !18
  store i32 0, ptr %25, align 4
  br label %258

258:                                              ; preds = %255, %254
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  %259 = load i32, ptr %25, align 4
  switch i32 %259, label %560 [
    i32 0, label %260
    i32 8, label %140
  ]

260:                                              ; preds = %258
  br label %342

261:                                              ; preds = %172, %160, %154
  %262 = load i32, ptr %21, align 4, !tbaa !9
  %263 = icmp eq i32 %262, 1
  br i1 %263, label %264, label %325

264:                                              ; preds = %261
  %265 = load i8, ptr %18, align 1, !tbaa !18
  %266 = sext i8 %265 to i32
  %267 = icmp eq i32 %266, 38
  br i1 %267, label %272, label %268

268:                                              ; preds = %264
  %269 = load i8, ptr %18, align 1, !tbaa !18
  %270 = sext i8 %269 to i32
  %271 = icmp eq i32 %270, 61
  br i1 %271, label %272, label %325

272:                                              ; preds = %268, %264
  %273 = load ptr, ptr %17, align 8, !tbaa !5
  %274 = load i32, ptr %23, align 4, !tbaa !9
  %275 = sub nsw i32 %274, 1
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i8, ptr %273, i64 %276
  %278 = load i8, ptr %277, align 1, !tbaa !18
  %279 = sext i8 %278 to i32
  %280 = icmp eq i32 %279, 0
  br i1 %280, label %281, label %313

281:                                              ; preds = %272
  br label %282

282:                                              ; preds = %309, %281
  %283 = load ptr, ptr %9, align 8, !tbaa !5
  %284 = load i32, ptr %22, align 4, !tbaa !9
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds i8, ptr %283, i64 %285
  %287 = load i8, ptr %286, align 1, !tbaa !18
  %288 = sext i8 %287 to i32
  %289 = icmp ne i32 %288, 0
  br i1 %289, label %290, label %307

290:                                              ; preds = %282
  %291 = load ptr, ptr %9, align 8, !tbaa !5
  %292 = load i32, ptr %22, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i8, ptr %291, i64 %293
  %295 = load i8, ptr %294, align 1, !tbaa !18
  %296 = sext i8 %295 to i32
  %297 = icmp ne i32 %296, 35
  br i1 %297, label %298, label %307

298:                                              ; preds = %290
  %299 = load ptr, ptr %9, align 8, !tbaa !5
  %300 = load i32, ptr %22, align 4, !tbaa !9
  %301 = sub nsw i32 %300, 1
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds i8, ptr %299, i64 %302
  %304 = load i8, ptr %303, align 1, !tbaa !18
  %305 = sext i8 %304 to i32
  %306 = icmp ne i32 %305, 38
  br label %307

307:                                              ; preds = %298, %290, %282
  %308 = phi i1 [ false, %290 ], [ false, %282 ], [ %306, %298 ]
  br i1 %308, label %309, label %312

309:                                              ; preds = %307
  %310 = load i32, ptr %22, align 4, !tbaa !9
  %311 = add nsw i32 %310, 1
  store i32 %311, ptr %22, align 4, !tbaa !9
  br label %282, !llvm.loop !24

312:                                              ; preds = %307
  br label %140, !llvm.loop !23

313:                                              ; preds = %272
  %314 = load i8, ptr %18, align 1, !tbaa !18
  %315 = sext i8 %314 to i32
  %316 = icmp eq i32 %315, 38
  br i1 %316, label %317, label %323

317:                                              ; preds = %313
  %318 = load ptr, ptr %17, align 8, !tbaa !5
  %319 = load i32, ptr %23, align 4, !tbaa !9
  %320 = add nsw i32 %319, 1
  store i32 %320, ptr %23, align 4, !tbaa !9
  %321 = sext i32 %319 to i64
  %322 = getelementptr inbounds i8, ptr %318, i64 %321
  store i8 0, ptr %322, align 1, !tbaa !18
  br label %324

323:                                              ; preds = %313
  store i32 2, ptr %21, align 4, !tbaa !9
  br label %324

324:                                              ; preds = %323, %317
  store i8 0, ptr %18, align 1, !tbaa !18
  br label %341

325:                                              ; preds = %268, %261
  %326 = load i32, ptr %21, align 4, !tbaa !9
  %327 = icmp eq i32 %326, 0
  br i1 %327, label %328, label %332

328:                                              ; preds = %325
  %329 = load i8, ptr %18, align 1, !tbaa !18
  %330 = sext i8 %329 to i32
  %331 = icmp eq i32 %330, 63
  br i1 %331, label %339, label %332

332:                                              ; preds = %328, %325
  %333 = load i32, ptr %21, align 4, !tbaa !9
  %334 = icmp eq i32 %333, 2
  br i1 %334, label %335, label %340

335:                                              ; preds = %332
  %336 = load i8, ptr %18, align 1, !tbaa !18
  %337 = sext i8 %336 to i32
  %338 = icmp eq i32 %337, 38
  br i1 %338, label %339, label %340

339:                                              ; preds = %335, %328
  store i8 0, ptr %18, align 1, !tbaa !18
  store i32 1, ptr %21, align 4, !tbaa !9
  br label %340

340:                                              ; preds = %339, %335, %332
  br label %341

341:                                              ; preds = %340, %324
  br label %342

342:                                              ; preds = %341, %260
  %343 = load i8, ptr %18, align 1, !tbaa !18
  %344 = load ptr, ptr %17, align 8, !tbaa !5
  %345 = load i32, ptr %23, align 4, !tbaa !9
  %346 = add nsw i32 %345, 1
  store i32 %346, ptr %23, align 4, !tbaa !9
  %347 = sext i32 %345 to i64
  %348 = getelementptr inbounds i8, ptr %344, i64 %347
  store i8 %343, ptr %348, align 1, !tbaa !18
  br label %140, !llvm.loop !23

349:                                              ; preds = %152
  %350 = load i32, ptr %21, align 4, !tbaa !9
  %351 = icmp eq i32 %350, 1
  br i1 %351, label %352, label %358

352:                                              ; preds = %349
  %353 = load ptr, ptr %17, align 8, !tbaa !5
  %354 = load i32, ptr %23, align 4, !tbaa !9
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %23, align 4, !tbaa !9
  %356 = sext i32 %354 to i64
  %357 = getelementptr inbounds i8, ptr %353, i64 %356
  store i8 0, ptr %357, align 1, !tbaa !18
  br label %358

358:                                              ; preds = %352, %349
  %359 = load ptr, ptr %17, align 8, !tbaa !5
  %360 = load i32, ptr %23, align 4, !tbaa !9
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %23, align 4, !tbaa !9
  %362 = sext i32 %360 to i64
  %363 = getelementptr inbounds i8, ptr %359, i64 %362
  store i8 0, ptr %363, align 1, !tbaa !18
  %364 = load ptr, ptr %17, align 8, !tbaa !5
  %365 = load i32, ptr %23, align 4, !tbaa !9
  %366 = add nsw i32 %365, 1
  store i32 %366, ptr %23, align 4, !tbaa !9
  %367 = sext i32 %365 to i64
  %368 = getelementptr inbounds i8, ptr %364, i64 %367
  store i8 0, ptr %368, align 1, !tbaa !18
  %369 = load ptr, ptr %17, align 8, !tbaa !5
  %370 = load ptr, ptr %17, align 8, !tbaa !5
  %371 = call i32 @sqlite3Strlen30(ptr noundef %370)
  %372 = add nsw i32 %371, 1
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds i8, ptr %369, i64 %373
  store ptr %374, ptr %20, align 8, !tbaa !5
  br label %375

375:                                              ; preds = %502, %358
  %376 = load ptr, ptr %20, align 8, !tbaa !5
  %377 = getelementptr inbounds i8, ptr %376, i64 0
  %378 = load i8, ptr %377, align 1, !tbaa !18
  %379 = icmp ne i8 %378, 0
  br i1 %379, label %380, label %503

380:                                              ; preds = %375
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %381 = load ptr, ptr %20, align 8, !tbaa !5
  %382 = call i32 @sqlite3Strlen30(ptr noundef %381)
  store i32 %382, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %383 = load ptr, ptr %20, align 8, !tbaa !5
  %384 = load i32, ptr %27, align 4, !tbaa !9
  %385 = add nsw i32 %384, 1
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i8, ptr %383, i64 %386
  store ptr %387, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %388 = load ptr, ptr %28, align 8, !tbaa !5
  %389 = call i32 @sqlite3Strlen30(ptr noundef %388)
  store i32 %389, ptr %29, align 4, !tbaa !9
  %390 = load i32, ptr %27, align 4, !tbaa !9
  %391 = icmp eq i32 %390, 3
  br i1 %391, label %392, label %398

392:                                              ; preds = %380
  %393 = load ptr, ptr %20, align 8, !tbaa !5
  %394 = call i32 @memcmp(ptr noundef @.str.34, ptr noundef %393, i64 noundef 3) #6
  %395 = icmp eq i32 %394, 0
  br i1 %395, label %396, label %398

396:                                              ; preds = %392
  %397 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %397, ptr %16, align 8, !tbaa !5
  br label %494

398:                                              ; preds = %392, %380
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  store ptr null, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  store ptr null, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 0, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  store i32 0, ptr %33, align 4, !tbaa !9
  %399 = load i32, ptr %27, align 4, !tbaa !9
  %400 = icmp eq i32 %399, 5
  br i1 %400, label %401, label %407

401:                                              ; preds = %398
  %402 = load ptr, ptr %20, align 8, !tbaa !5
  %403 = call i32 @memcmp(ptr noundef @.str.35, ptr noundef %402, i64 noundef 5) #6
  %404 = icmp eq i32 %403, 0
  br i1 %404, label %405, label %407

405:                                              ; preds = %401
  store i32 393216, ptr %32, align 4, !tbaa !9
  store ptr @sqlite3ParseUri.aCacheMode, ptr %30, align 8, !tbaa !5
  %406 = load i32, ptr %32, align 4, !tbaa !9
  store i32 %406, ptr %33, align 4, !tbaa !9
  store ptr @.str.35, ptr %31, align 8, !tbaa !5
  br label %407

407:                                              ; preds = %405, %401, %398
  %408 = load i32, ptr %27, align 4, !tbaa !9
  %409 = icmp eq i32 %408, 4
  br i1 %409, label %410, label %418

410:                                              ; preds = %407
  %411 = load ptr, ptr %20, align 8, !tbaa !5
  %412 = call i32 @memcmp(ptr noundef @.str.38, ptr noundef %411, i64 noundef 4) #6
  %413 = icmp eq i32 %412, 0
  br i1 %413, label %414, label %418

414:                                              ; preds = %410
  store i32 135, ptr %32, align 4, !tbaa !9
  store ptr @sqlite3ParseUri.aOpenMode, ptr %30, align 8, !tbaa !5
  %415 = load i32, ptr %32, align 4, !tbaa !9
  %416 = load i32, ptr %15, align 4, !tbaa !9
  %417 = and i32 %415, %416
  store i32 %417, ptr %33, align 4, !tbaa !9
  store ptr @.str.43, ptr %31, align 8, !tbaa !5
  br label %418

418:                                              ; preds = %414, %410, %407
  %419 = load ptr, ptr %30, align 8, !tbaa !5
  %420 = icmp ne ptr %419, null
  br i1 %420, label %421, label %490

421:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  store i32 0, ptr %35, align 4, !tbaa !9
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %422

422:                                              ; preds = %459, %421
  %423 = load ptr, ptr %30, align 8, !tbaa !5
  %424 = load i32, ptr %34, align 4, !tbaa !9
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds %struct.OpenMode, ptr %423, i64 %425
  %427 = getelementptr inbounds %struct.OpenMode, ptr %426, i32 0, i32 0
  %428 = load ptr, ptr %427, align 8, !tbaa !25
  %429 = icmp ne ptr %428, null
  br i1 %429, label %430, label %462

430:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %431 = load ptr, ptr %30, align 8, !tbaa !5
  %432 = load i32, ptr %34, align 4, !tbaa !9
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds %struct.OpenMode, ptr %431, i64 %433
  %435 = getelementptr inbounds %struct.OpenMode, ptr %434, i32 0, i32 0
  %436 = load ptr, ptr %435, align 8, !tbaa !25
  store ptr %436, ptr %36, align 8, !tbaa !5
  %437 = load i32, ptr %29, align 4, !tbaa !9
  %438 = load ptr, ptr %36, align 8, !tbaa !5
  %439 = call i32 @sqlite3Strlen30(ptr noundef %438)
  %440 = icmp eq i32 %437, %439
  br i1 %440, label %441, label %455

441:                                              ; preds = %430
  %442 = load ptr, ptr %28, align 8, !tbaa !5
  %443 = load ptr, ptr %36, align 8, !tbaa !5
  %444 = load i32, ptr %29, align 4, !tbaa !9
  %445 = sext i32 %444 to i64
  %446 = call i32 @memcmp(ptr noundef %442, ptr noundef %443, i64 noundef %445) #6
  %447 = icmp eq i32 0, %446
  br i1 %447, label %448, label %455

448:                                              ; preds = %441
  %449 = load ptr, ptr %30, align 8, !tbaa !5
  %450 = load i32, ptr %34, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds %struct.OpenMode, ptr %449, i64 %451
  %453 = getelementptr inbounds %struct.OpenMode, ptr %452, i32 0, i32 1
  %454 = load i32, ptr %453, align 8, !tbaa !27
  store i32 %454, ptr %35, align 4, !tbaa !9
  store i32 16, ptr %25, align 4
  br label %456

455:                                              ; preds = %441, %430
  store i32 0, ptr %25, align 4
  br label %456

456:                                              ; preds = %455, %448
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  %457 = load i32, ptr %25, align 4
  switch i32 %457, label %560 [
    i32 0, label %458
    i32 16, label %462
  ]

458:                                              ; preds = %456
  br label %459

459:                                              ; preds = %458
  %460 = load i32, ptr %34, align 4, !tbaa !9
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %34, align 4, !tbaa !9
  br label %422, !llvm.loop !28

462:                                              ; preds = %456, %422
  %463 = load i32, ptr %35, align 4, !tbaa !9
  %464 = icmp eq i32 %463, 0
  br i1 %464, label %465, label %470

465:                                              ; preds = %462
  %466 = load ptr, ptr %31, align 8, !tbaa !5
  %467 = load ptr, ptr %28, align 8, !tbaa !5
  %468 = call ptr (ptr, ...) @sqlite3_mprintf(ptr noundef @.str.44, ptr noundef %466, ptr noundef %467)
  %469 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %468, ptr %469, align 8, !tbaa !5
  store i32 1, ptr %14, align 4, !tbaa !9
  store i32 7, ptr %25, align 4
  br label %487

470:                                              ; preds = %462
  %471 = load i32, ptr %35, align 4, !tbaa !9
  %472 = and i32 %471, -129
  %473 = load i32, ptr %33, align 4, !tbaa !9
  %474 = icmp sgt i32 %472, %473
  br i1 %474, label %475, label %480

475:                                              ; preds = %470
  %476 = load ptr, ptr %31, align 8, !tbaa !5
  %477 = load ptr, ptr %28, align 8, !tbaa !5
  %478 = call ptr (ptr, ...) @sqlite3_mprintf(ptr noundef @.str.45, ptr noundef %476, ptr noundef %477)
  %479 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %478, ptr %479, align 8, !tbaa !5
  store i32 3, ptr %14, align 4, !tbaa !9
  store i32 7, ptr %25, align 4
  br label %487

480:                                              ; preds = %470
  %481 = load i32, ptr %15, align 4, !tbaa !9
  %482 = load i32, ptr %32, align 4, !tbaa !9
  %483 = xor i32 %482, -1
  %484 = and i32 %481, %483
  %485 = load i32, ptr %35, align 4, !tbaa !9
  %486 = or i32 %484, %485
  store i32 %486, ptr %15, align 4, !tbaa !9
  store i32 0, ptr %25, align 4
  br label %487

487:                                              ; preds = %480, %475, %465
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  %488 = load i32, ptr %25, align 4
  switch i32 %488, label %491 [
    i32 0, label %489
  ]

489:                                              ; preds = %487
  br label %490

490:                                              ; preds = %489, %418
  store i32 0, ptr %25, align 4
  br label %491

491:                                              ; preds = %490, %487
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  %492 = load i32, ptr %25, align 4
  switch i32 %492, label %500 [
    i32 0, label %493
  ]

493:                                              ; preds = %491
  br label %494

494:                                              ; preds = %493, %396
  %495 = load ptr, ptr %28, align 8, !tbaa !5
  %496 = load i32, ptr %29, align 4, !tbaa !9
  %497 = add nsw i32 %496, 1
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds i8, ptr %495, i64 %498
  store ptr %499, ptr %20, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %500

500:                                              ; preds = %494, %491
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  %501 = load i32, ptr %25, align 4
  switch i32 %501, label %504 [
    i32 0, label %502
  ]

502:                                              ; preds = %500
  br label %375, !llvm.loop !29

503:                                              ; preds = %375
  store i32 0, ptr %25, align 4
  br label %504

504:                                              ; preds = %503, %500, %131, %85
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  %505 = load i32, ptr %25, align 4
  switch i32 %505, label %558 [
    i32 0, label %506
    i32 7, label %547
  ]

506:                                              ; preds = %504
  br label %535

507:                                              ; preds = %51, %48, %45
  %508 = load i32, ptr %19, align 4, !tbaa !9
  %509 = add nsw i32 %508, 2
  %510 = sext i32 %509 to i64
  %511 = call ptr @sqlite3_malloc64(i64 noundef %510)
  store ptr %511, ptr %17, align 8, !tbaa !5
  %512 = load ptr, ptr %17, align 8, !tbaa !5
  %513 = icmp ne ptr %512, null
  br i1 %513, label %515, label %514

514:                                              ; preds = %507
  store i32 7, ptr %7, align 4
  store i32 1, ptr %25, align 4
  br label %558

515:                                              ; preds = %507
  %516 = load i32, ptr %19, align 4, !tbaa !9
  %517 = icmp ne i32 %516, 0
  br i1 %517, label %518, label %523

518:                                              ; preds = %515
  %519 = load ptr, ptr %17, align 8, !tbaa !5
  %520 = load ptr, ptr %9, align 8, !tbaa !5
  %521 = load i32, ptr %19, align 4, !tbaa !9
  %522 = sext i32 %521 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %519, ptr align 1 %520, i64 %522, i1 false)
  br label %523

523:                                              ; preds = %518, %515
  %524 = load ptr, ptr %17, align 8, !tbaa !5
  %525 = load i32, ptr %19, align 4, !tbaa !9
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i8, ptr %524, i64 %526
  store i8 0, ptr %527, align 1, !tbaa !18
  %528 = load ptr, ptr %17, align 8, !tbaa !5
  %529 = load i32, ptr %19, align 4, !tbaa !9
  %530 = add nsw i32 %529, 1
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds i8, ptr %528, i64 %531
  store i8 0, ptr %532, align 1, !tbaa !18
  %533 = load i32, ptr %15, align 4, !tbaa !9
  %534 = and i32 %533, -65
  store i32 %534, ptr %15, align 4, !tbaa !9
  br label %535

535:                                              ; preds = %523, %506
  %536 = load ptr, ptr %16, align 8, !tbaa !5
  %537 = call ptr @sqlite3_vfs_find(ptr noundef %536)
  %538 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %537, ptr %538, align 8, !tbaa !5
  %539 = load ptr, ptr %11, align 8, !tbaa !5
  %540 = load ptr, ptr %539, align 8, !tbaa !5
  %541 = icmp eq ptr %540, null
  br i1 %541, label %542, label %546

542:                                              ; preds = %535
  %543 = load ptr, ptr %16, align 8, !tbaa !5
  %544 = call ptr (ptr, ...) @sqlite3_mprintf(ptr noundef @.str.46, ptr noundef %543)
  %545 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %544, ptr %545, align 8, !tbaa !5
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %546

546:                                              ; preds = %542, %535
  br label %547

547:                                              ; preds = %546, %504
  %548 = load i32, ptr %14, align 4, !tbaa !9
  %549 = icmp ne i32 %548, 0
  br i1 %549, label %550, label %552

550:                                              ; preds = %547
  %551 = load ptr, ptr %17, align 8, !tbaa !5
  call void @sqlite3_free(ptr noundef %551)
  store ptr null, ptr %17, align 8, !tbaa !5
  br label %552

552:                                              ; preds = %550, %547
  %553 = load i32, ptr %15, align 4, !tbaa !9
  %554 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %553, ptr %554, align 4, !tbaa !9
  %555 = load ptr, ptr %17, align 8, !tbaa !5
  %556 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %555, ptr %556, align 8, !tbaa !5
  %557 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %557, ptr %7, align 4
  store i32 1, ptr %25, align 4
  br label %558

558:                                              ; preds = %552, %514, %504
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  %559 = load i32, ptr %7, align 4
  ret i32 %559

560:                                              ; preds = %456, %258
  unreachable
}

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

declare ptr @sqlite3_malloc64(i64 noundef) #2

declare ptr @sqlite3_mprintf(ptr noundef, ...) #2

declare zeroext i8 @sqlite3HexToInt(i32 noundef) #2

declare ptr @sqlite3_vfs_find(ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 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 #4 = { 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 #5 = { nounwind }
attributes #6 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 12}
!12 = !{!"Sqlite3Config", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !13, i64 40, !14, i64 104, !15, i64 176, !6, i64 280, !10, i64 288, !10, i64 292, !10, i64 296, !16, i64 304, !16, i64 312, !6, i64 320, !10, i64 328, !10, i64 332, !6, i64 336, !10, i64 344, !10, i64 348, !10, i64 352, !10, i64 356, !10, i64 360, !10, i64 364, !10, i64 368, !10, i64 372, !10, i64 376, !10, i64 380, !10, i64 384, !6, i64 392, !6, i64 400, !6, i64 408, !6, i64 416, !10, i64 424, !10, i64 428}
!13 = !{!"sqlite3_mem_methods", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!14 = !{!"sqlite3_mutex_methods", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64}
!15 = !{!"sqlite3_pcache_methods2", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96}
!16 = !{!"long long", !7, i64 0}
!17 = !{!16, !16, i64 0}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = !{!26, !6, i64 0}
!26 = !{!"OpenMode", !6, i64 0, !10, i64 8}
!27 = !{!26, !10, i64 8}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}


; 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"

%struct.Sqlite3Config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.sqlite3_mem_methods, %struct.sqlite3_mutex_methods, %struct.sqlite3_pcache_methods2, ptr, i32, i32, i32, i64, i64, ptr, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i32, i32 }
%struct.sqlite3_mem_methods = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.sqlite3_mutex_methods = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.sqlite3_pcache_methods2 = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.OpenMode = type { ptr, i32 }

@sqlite3Config = external local_unnamed_addr global %struct.Sqlite3Config, align 8
@.str.31 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [28 x i8], align 1
@sqlite3CtypeMap = external local_unnamed_addr constant [0 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [6 x i8], align 1
@sqlite3ParseUri.aCacheMode = external hidden local_unnamed_addr global [3 x %struct.OpenMode], align 16
@.str.38 = external hidden unnamed_addr constant [5 x i8], align 1
@sqlite3ParseUri.aOpenMode = external hidden local_unnamed_addr global [5 x %struct.OpenMode], align 16
@.str.43 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [16 x i8], align 1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0

declare void @sqlite3_free(ptr noundef) local_unnamed_addr #1

declare i32 @sqlite3Strlen30(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @sqlite3ParseUri(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2, ptr nocapture noundef writeonly %3, ptr nocapture noundef writeonly %4, ptr nocapture noundef writeonly %5) local_unnamed_addr #2 {
  %7 = load i32, ptr %2, align 4, !tbaa !5
  %8 = tail call i32 @sqlite3Strlen30(ptr noundef %1) #5
  %9 = and i32 %7, 64
  %10 = icmp ne i32 %9, 0
  %11 = load i32, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 12), align 4
  %12 = icmp ne i32 %11, 0
  %or.cond = select i1 %10, i1 true, i1 %12
  %13 = icmp sgt i32 %8, 4
  %or.cond5 = select i1 %or.cond, i1 %13, i1 false
  br i1 %or.cond5, label %14, label %174

14:                                               ; preds = %6
  %bcmp = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(5) %1, ptr noundef nonnull dereferenceable(5) @.str.31, i64 5)
  %15 = icmp eq i32 %bcmp, 0
  br i1 %15, label %.lr.ph.preheader, label %174

.lr.ph.preheader:                                 ; preds = %14
  %16 = or i32 %7, 64
  %17 = add nuw nsw i32 %8, 2
  %18 = zext nneg i32 %17 to i64
  %wide.trip.count = zext nneg i32 %8 to i64
  %min.iters.check = icmp ult i32 %8, 4
  br i1 %min.iters.check, label %.lr.ph.preheader629, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %wide.trip.count, 2147483644
  %19 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %18, i64 0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <2 x i64> [ %19, %vector.ph ], [ %26, %vector.body ]
  %vec.phi583 = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %27, %vector.body ]
  %20 = getelementptr inbounds i8, ptr %1, i64 %index
  %21 = getelementptr inbounds i8, ptr %20, i64 2
  %wide.load = load <2 x i8>, ptr %20, align 1, !tbaa !9
  %wide.load584 = load <2 x i8>, ptr %21, align 1, !tbaa !9
  %22 = icmp eq <2 x i8> %wide.load, <i8 38, i8 38>
  %23 = icmp eq <2 x i8> %wide.load584, <i8 38, i8 38>
  %24 = zext <2 x i1> %22 to <2 x i64>
  %25 = zext <2 x i1> %23 to <2 x i64>
  %26 = add <2 x i64> %vec.phi, %24
  %27 = add <2 x i64> %vec.phi583, %25
  %index.next = add nuw i64 %index, 4
  %28 = icmp eq i64 %index.next, %n.vec
  br i1 %28, label %middle.block, label %vector.body, !llvm.loop !10

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i64> %27, %26
  %29 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader629

.lr.ph.preheader629:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  %.0219386.ph = phi i64 [ %18, %.lr.ph.preheader ], [ %29, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader629, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader629 ]
  %.0219386 = phi i64 [ %34, %.lr.ph ], [ %.0219386.ph, %.lr.ph.preheader629 ]
  %30 = getelementptr inbounds i8, ptr %1, i64 %indvars.iv
  %31 = load i8, ptr %30, align 1, !tbaa !9
  %32 = icmp eq i8 %31, 38
  %33 = zext i1 %32 to i64
  %34 = add i64 %.0219386, %33
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !14

._crit_edge:                                      ; preds = %.lr.ph, %middle.block
  %.lcssa582 = phi i64 [ %29, %middle.block ], [ %34, %.lr.ph ]
  %35 = tail call ptr @sqlite3_malloc64(i64 noundef %.lcssa582) #5
  %.not253 = icmp eq ptr %35, null
  br i1 %.not253, label %.thread329, label %36

36:                                               ; preds = %._crit_edge
  %37 = getelementptr inbounds i8, ptr %1, i64 5
  %38 = load i8, ptr %37, align 1, !tbaa !9
  %39 = icmp eq i8 %38, 47
  br i1 %39, label %40, label %54

40:                                               ; preds = %36
  %41 = getelementptr inbounds i8, ptr %1, i64 6
  %42 = load i8, ptr %41, align 1, !tbaa !9
  %43 = icmp eq i8 %42, 47
  br i1 %43, label %.preheader353, label %54

.preheader353:                                    ; preds = %40, %46
  %indvars.iv457 = phi i64 [ %indvars.iv.next458, %46 ], [ 7, %40 ]
  %44 = getelementptr inbounds i8, ptr %1, i64 %indvars.iv457
  %45 = load i8, ptr %44, align 1, !tbaa !9
  switch i8 %45, label %46 [
    i8 0, label %.critedge
    i8 47, label %.critedge
  ]

46:                                               ; preds = %.preheader353
  %indvars.iv.next458 = add nuw nsw i64 %indvars.iv457, 1
  br label %.preheader353, !llvm.loop !15

.critedge:                                        ; preds = %.preheader353, %.preheader353
  %47 = trunc nuw nsw i64 %indvars.iv457 to i32
  switch i32 %47, label %50 [
    i32 7, label %54
    i32 16, label %48
  ]

48:                                               ; preds = %.critedge
  %49 = getelementptr inbounds i8, ptr %1, i64 7
  %bcmp258 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(9) @.str.32, ptr noundef nonnull dereferenceable(9) %49, i64 9)
  %.not259 = icmp eq i32 %bcmp258, 0
  br i1 %.not259, label %54, label %50

50:                                               ; preds = %.critedge, %48
  %51 = add nsw i32 %47, -7
  %52 = getelementptr inbounds i8, ptr %1, i64 7
  %53 = tail call ptr (ptr, ...) @sqlite3_mprintf(ptr noundef nonnull @.str.33, i32 noundef %51, ptr noundef nonnull %52) #5
  br label %.thread324

54:                                               ; preds = %.critedge, %48, %40, %36
  %.2226 = phi i32 [ 16, %48 ], [ %47, %.critedge ], [ 5, %40 ], [ 5, %36 ]
  %invariant.gep = getelementptr i8, ptr %1, i64 2
  br label %.outer.outer

.outer.outer:                                     ; preds = %54, %.thread280
  %.0232.ph.ph = phi i32 [ 0, %54 ], [ %.2234, %.thread280 ]
  %.3227.ph.ph = phi i32 [ %.2226, %54 ], [ %.7231, %.thread280 ]
  %.0220.ph.ph = phi i32 [ 0, %54 ], [ %121, %.thread280 ]
  %55 = sext i32 %.0220.ph.ph to i64
  %56 = getelementptr i8, ptr %35, i64 %55
  %57 = getelementptr i8, ptr %56, i64 -1
  br label %.outer

.outer:                                           ; preds = %.outer.outer, %.critedge21
  %.0232.ph = phi i32 [ 1, %.critedge21 ], [ %.0232.ph.ph, %.outer.outer ]
  %.3227.ph = phi i32 [ %113, %.critedge21 ], [ %.3227.ph.ph, %.outer.outer ]
  %.not421 = icmp eq i32 %.0232.ph, 0
  %.not271 = icmp eq i32 %.0232.ph, 1
  %.not420 = icmp eq i32 %.0232.ph, 2
  br label %58

58:                                               ; preds = %.outer, %.critedge16
  %.3227 = phi i32 [ %.us-phi, %.critedge16 ], [ %.3227.ph, %.outer ]
  %59 = sext i32 %.3227 to i64
  %60 = getelementptr inbounds i8, ptr %1, i64 %59
  %61 = load i8, ptr %60, align 1, !tbaa !9
  switch i8 %61, label %62 [
    i8 35, label %123
    i8 0, label %123
  ]

62:                                               ; preds = %58
  %63 = add i32 %.3227, 1
  %64 = icmp eq i8 %61, 37
  br i1 %64, label %65, label %101

65:                                               ; preds = %62
  %66 = sext i32 %63 to i64
  %67 = getelementptr inbounds i8, ptr %1, i64 %66
  %68 = load i8, ptr %67, align 1, !tbaa !9
  %69 = zext i8 %68 to i64
  %70 = getelementptr inbounds [0 x i8], ptr @sqlite3CtypeMap, i64 0, i64 %69
  %71 = load i8, ptr %70, align 1, !tbaa !9
  %72 = and i8 %71, 8
  %.not266 = icmp eq i8 %72, 0
  br i1 %.not266, label %101, label %73

73:                                               ; preds = %65
  %gep = getelementptr i8, ptr %invariant.gep, i64 %59
  %74 = load i8, ptr %gep, align 1, !tbaa !9
  %75 = zext i8 %74 to i64
  %76 = getelementptr inbounds [0 x i8], ptr @sqlite3CtypeMap, i64 0, i64 %75
  %77 = load i8, ptr %76, align 1, !tbaa !9
  %78 = and i8 %77, 8
  %.not267 = icmp eq i8 %78, 0
  br i1 %.not267, label %101, label %79

79:                                               ; preds = %73
  %80 = sext i8 %68 to i32
  %81 = tail call zeroext i8 @sqlite3HexToInt(i32 noundef %80) #5
  %82 = zext i8 %81 to i32
  %83 = shl nuw nsw i32 %82, 4
  %84 = add i32 %.3227, 3
  %85 = load i8, ptr %gep, align 1, !tbaa !9
  %86 = sext i8 %85 to i32
  %87 = tail call zeroext i8 @sqlite3HexToInt(i32 noundef %86) #5
  %88 = zext i8 %87 to i32
  %89 = add nuw nsw i32 %83, %88
  %90 = icmp eq i32 %89, 0
  br i1 %90, label %.preheader352, label %.critedge16.thread

.preheader352:                                    ; preds = %79
  %91 = sext i32 %84 to i64
  br i1 %.not271, label %.preheader352.split.us.split.us, label %.preheader352.split

.preheader352.split.us.split.us:                  ; preds = %.preheader352, %.thread.us.us
  %indvars.iv472 = phi i64 [ %indvars.iv.next473, %.thread.us.us ], [ %91, %.preheader352 ]
  %92 = getelementptr inbounds i8, ptr %1, i64 %indvars.iv472
  %93 = load i8, ptr %92, align 1, !tbaa !9
  switch i8 %93, label %.thread.us.us [
    i8 35, label %.critedge16
    i8 0, label %.critedge16
    i8 61, label %.critedge16
    i8 38, label %.critedge16
  ]

.thread.us.us:                                    ; preds = %.preheader352.split.us.split.us
  %indvars.iv.next473 = add nsw i64 %indvars.iv472, 1
  br label %.preheader352.split.us.split.us, !llvm.loop !16

.preheader352.split:                              ; preds = %.preheader352
  br i1 %.not421, label %.preheader352.split.split.split.us, label %.preheader352.split.split.us

.preheader352.split.split.us:                     ; preds = %.preheader352.split
  br i1 %.not420, label %.preheader352.split.split.us.split, label %.preheader352.split.split.us.split.us

.preheader352.split.split.us.split.us:            ; preds = %.preheader352.split.split.us, %.thread.us389.us
  %indvars.iv460 = phi i64 [ %indvars.iv.next461, %.thread.us389.us ], [ %91, %.preheader352.split.split.us ]
  %94 = getelementptr inbounds i8, ptr %1, i64 %indvars.iv460
  %95 = load i8, ptr %94, align 1, !tbaa !9
  switch i8 %95, label %.thread.us389.us [
    i8 35, label %.critedge16
    i8 0, label %.critedge16
  ], !llvm.loop !17

.thread.us389.us:                                 ; preds = %.preheader352.split.split.us.split.us
  %indvars.iv.next461 = add nsw i64 %indvars.iv460, 1
  br label %.preheader352.split.split.us.split.us, !llvm.loop !16

.preheader352.split.split.us.split:               ; preds = %.preheader352.split.split.us, %.thread.us389
  %indvars.iv463 = phi i64 [ %indvars.iv.next464, %.thread.us389 ], [ %91, %.preheader352.split.split.us ]
  %96 = getelementptr inbounds i8, ptr %1, i64 %indvars.iv463
  %97 = load i8, ptr %96, align 1, !tbaa !9
  switch i8 %97, label %.thread.us389 [
    i8 35, label %.critedge16
    i8 0, label %.critedge16
    i8 38, label %.critedge16
  ]

.thread.us389:                                    ; preds = %.preheader352.split.split.us.split
  %indvars.iv.next464 = add nsw i64 %indvars.iv463, 1
  br label %.preheader352.split.split.us.split, !llvm.loop !16

.preheader352.split.split.split.us:               ; preds = %.preheader352.split, %.thread.us393
  %indvars.iv466 = phi i64 [ %indvars.iv.next467, %.thread.us393 ], [ %91, %.preheader352.split ]
  %98 = getelementptr inbounds i8, ptr %1, i64 %indvars.iv466
  %99 = load i8, ptr %98, align 1, !tbaa !9
  switch i8 %99, label %.thread.us393 [
    i8 35, label %.critedge16
    i8 0, label %.critedge16
    i8 63, label %.critedge16
  ]

.thread.us393:                                    ; preds = %.preheader352.split.split.split.us
  %indvars.iv.next467 = add nsw i64 %indvars.iv466, 1
  br label %.preheader352.split.split.split.us, !llvm.loop !16

.critedge16.thread:                               ; preds = %79
  %100 = trunc i32 %89 to i8
  br label %.thread280

.critedge16:                                      ; preds = %.preheader352.split.split.us.split.us, %.preheader352.split.split.us.split.us, %.preheader352.split.split.us.split, %.preheader352.split.split.us.split, %.preheader352.split.split.us.split, %.preheader352.split.split.split.us, %.preheader352.split.split.split.us, %.preheader352.split.split.split.us, %.preheader352.split.us.split.us, %.preheader352.split.us.split.us, %.preheader352.split.us.split.us, %.preheader352.split.us.split.us
  %.us-phi.in = phi i64 [ %indvars.iv472, %.preheader352.split.us.split.us ], [ %indvars.iv472, %.preheader352.split.us.split.us ], [ %indvars.iv472, %.preheader352.split.us.split.us ], [ %indvars.iv472, %.preheader352.split.us.split.us ], [ %indvars.iv466, %.preheader352.split.split.split.us ], [ %indvars.iv466, %.preheader352.split.split.split.us ], [ %indvars.iv466, %.preheader352.split.split.split.us ], [ %indvars.iv463, %.preheader352.split.split.us.split ], [ %indvars.iv463, %.preheader352.split.split.us.split ], [ %indvars.iv463, %.preheader352.split.split.us.split ], [ %indvars.iv460, %.preheader352.split.split.us.split.us ], [ %indvars.iv460, %.preheader352.split.split.us.split.us ]
  %.us-phi = trunc i64 %.us-phi.in to i32
  br label %58

101:                                              ; preds = %73, %65, %62
  br i1 %.not271, label %102, label %118

102:                                              ; preds = %101
  switch i8 %61, label %.thread280 [
    i8 61, label %103
    i8 38, label %103
  ]

103:                                              ; preds = %102, %102
  %104 = load i8, ptr %57, align 1, !tbaa !9
  %105 = icmp eq i8 %104, 0
  br i1 %105, label %.preheader.preheader, label %114

.preheader.preheader:                             ; preds = %103
  %106 = sext i32 %63 to i64
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %112
  %indvars.iv478 = phi i64 [ %106, %.preheader.preheader ], [ %indvars.iv.next479, %112 ]
  %107 = getelementptr inbounds i8, ptr %1, i64 %indvars.iv478
  %108 = load i8, ptr %107, align 1, !tbaa !9
  switch i8 %108, label %109 [
    i8 0, label %.critedge21
    i8 35, label %.critedge21
  ]

109:                                              ; preds = %.preheader
  %110 = getelementptr i8, ptr %107, i64 -1
  %111 = load i8, ptr %110, align 1, !tbaa !9
  %.not270 = icmp eq i8 %111, 38
  br i1 %.not270, label %.critedge21, label %112

112:                                              ; preds = %109
  %indvars.iv.next479 = add nsw i64 %indvars.iv478, 1
  br label %.preheader, !llvm.loop !18

.critedge21:                                      ; preds = %.preheader, %.preheader, %109
  %113 = trunc nsw i64 %indvars.iv478 to i32
  br label %.outer, !llvm.loop !17

114:                                              ; preds = %103
  %115 = icmp eq i8 %61, 38
  br i1 %115, label %116, label %.thread280

116:                                              ; preds = %114
  %117 = add nsw i32 %.0220.ph.ph, 1
  store i8 0, ptr %56, align 1, !tbaa !9
  %.pre = sext i32 %117 to i64
  br label %.thread280

118:                                              ; preds = %101
  %119 = icmp eq i8 %61, 63
  %or.cond24 = and i1 %.not421, %119
  %120 = icmp eq i8 %61, 38
  %or.cond27 = and i1 %.not420, %120
  %or.cond536 = or i1 %or.cond24, %or.cond27
  %spec.select = select i1 %or.cond536, i8 0, i8 %61
  %spec.select537 = select i1 %or.cond536, i32 1, i32 %.0232.ph
  br label %.thread280

.thread280:                                       ; preds = %102, %118, %.critedge16.thread, %116, %114
  %.pre-phi = phi i64 [ %55, %.critedge16.thread ], [ %.pre, %116 ], [ %55, %114 ], [ %55, %118 ], [ %55, %102 ]
  %.1241 = phi i8 [ %100, %.critedge16.thread ], [ 0, %116 ], [ 0, %114 ], [ %spec.select, %118 ], [ %61, %102 ]
  %.2234 = phi i32 [ %.0232.ph, %.critedge16.thread ], [ 1, %116 ], [ 2, %114 ], [ %spec.select537, %118 ], [ 1, %102 ]
  %.7231 = phi i32 [ %84, %.critedge16.thread ], [ %63, %116 ], [ %63, %114 ], [ %63, %118 ], [ %63, %102 ]
  %.2222 = phi i32 [ %.0220.ph.ph, %.critedge16.thread ], [ %117, %116 ], [ %.0220.ph.ph, %114 ], [ %.0220.ph.ph, %118 ], [ %.0220.ph.ph, %102 ]
  %121 = add nsw i32 %.2222, 1
  %122 = getelementptr inbounds i8, ptr %35, i64 %.pre-phi
  store i8 %.1241, ptr %122, align 1, !tbaa !9
  br label %.outer.outer, !llvm.loop !17

123:                                              ; preds = %58, %58
  br i1 %.not271, label %124, label %126

124:                                              ; preds = %123
  %125 = add nsw i32 %.0220.ph.ph, 1
  store i8 0, ptr %56, align 1, !tbaa !9
  %.pre484 = sext i32 %125 to i64
  br label %126

126:                                              ; preds = %124, %123
  %.pre-phi485 = phi i64 [ %.pre484, %124 ], [ %55, %123 ]
  %127 = getelementptr inbounds i8, ptr %35, i64 %.pre-phi485
  store i8 0, ptr %127, align 1, !tbaa !9
  %128 = getelementptr i8, ptr %127, i64 1
  store i8 0, ptr %128, align 1, !tbaa !9
  %129 = tail call i32 @sqlite3Strlen30(ptr noundef nonnull %35) #5
  %130 = sext i32 %129 to i64
  %131 = getelementptr i8, ptr %35, i64 %130
  %.0235411 = getelementptr i8, ptr %131, i64 1
  %132 = load i8, ptr %.0235411, align 1, !tbaa !9
  %.not260412 = icmp eq i8 %132, 0
  br i1 %.not260412, label %.loopexit, label %.lr.ph417

.lr.ph417:                                        ; preds = %126, %.thread310
  %.0235415 = phi ptr [ %.0235, %.thread310 ], [ %.0235411, %126 ]
  %.0199414 = phi i32 [ %.4203, %.thread310 ], [ %16, %126 ]
  %.0208413 = phi ptr [ %.1209, %.thread310 ], [ %0, %126 ]
  %133 = tail call i32 @sqlite3Strlen30(ptr noundef nonnull %.0235415) #5
  %134 = sext i32 %133 to i64
  %135 = getelementptr i8, ptr %.0235415, i64 %134
  %136 = getelementptr i8, ptr %135, i64 1
  %137 = tail call i32 @sqlite3Strlen30(ptr noundef nonnull %136) #5
  switch i32 %133, label %.thread310 [
    i32 3, label %138
    i32 5, label %140
    i32 4, label %142
  ]

138:                                              ; preds = %.lr.ph417
  %bcmp261 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(3) @.str.34, ptr noundef nonnull dereferenceable(3) %.0235415, i64 3)
  %139 = icmp eq i32 %bcmp261, 0
  br i1 %139, label %.thread310, label %.thread282.thread

140:                                              ; preds = %.lr.ph417
  %bcmp262 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(5) @.str.35, ptr noundef nonnull dereferenceable(5) %.0235415, i64 5)
  %141 = icmp eq i32 %bcmp262, 0
  br i1 %141, label %.thread282, label %.thread282.thread

142:                                              ; preds = %.lr.ph417
  %bcmp263 = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(4) @.str.38, ptr noundef nonnull dereferenceable(4) %.0235415, i64 4)
  %143 = icmp eq i32 %bcmp263, 0
  br i1 %143, label %144, label %.thread310

144:                                              ; preds = %142
  %145 = and i32 %.0199414, 135
  br label %.thread282

.thread282.thread:                                ; preds = %138, %140
  br label %.thread310

.thread282:                                       ; preds = %140, %144
  %.1195 = phi ptr [ @sqlite3ParseUri.aOpenMode, %144 ], [ @sqlite3ParseUri.aCacheMode, %140 ]
  %.1193 = phi ptr [ @.str.43, %144 ], [ @.str.35, %140 ]
  %146 = phi i32 [ -136, %144 ], [ -393217, %140 ]
  %.1189 = phi i32 [ %145, %144 ], [ 393216, %140 ]
  %147 = load ptr, ptr %.1195, align 16, !tbaa !19
  %.not265402 = icmp eq ptr %147, null
  br i1 %.not265402, label %.thread299, label %.lr.ph404

.lr.ph404:                                        ; preds = %.thread282
  %148 = sext i32 %137 to i64
  br label %149

149:                                              ; preds = %.lr.ph404, %155
  %indvars.iv481 = phi i64 [ 0, %.lr.ph404 ], [ %indvars.iv.next482, %155 ]
  %150 = phi ptr [ %147, %.lr.ph404 ], [ %157, %155 ]
  %151 = tail call i32 @sqlite3Strlen30(ptr noundef nonnull %150) #5
  %152 = icmp eq i32 %137, %151
  br i1 %152, label %153, label %155

153:                                              ; preds = %149
  %bcmp350 = tail call i32 @bcmp(ptr %136, ptr nonnull %150, i64 %148)
  %154 = icmp eq i32 %bcmp350, 0
  br i1 %154, label %158, label %155

155:                                              ; preds = %153, %149
  %indvars.iv.next482 = add nuw nsw i64 %indvars.iv481, 1
  %156 = getelementptr inbounds %struct.OpenMode, ptr %.1195, i64 %indvars.iv.next482
  %157 = load ptr, ptr %156, align 16, !tbaa !19
  %.not265 = icmp eq ptr %157, null
  br i1 %.not265, label %.thread299, label %149, !llvm.loop !22

158:                                              ; preds = %153
  %159 = getelementptr inbounds %struct.OpenMode, ptr %.1195, i64 %indvars.iv481, i32 1
  %160 = load i32, ptr %159, align 8, !tbaa !23
  %161 = icmp eq i32 %160, 0
  br i1 %161, label %.thread299, label %163

.thread299:                                       ; preds = %158, %.thread282, %155
  %162 = tail call ptr (ptr, ...) @sqlite3_mprintf(ptr noundef nonnull @.str.44, ptr noundef nonnull %.1193, ptr noundef nonnull %136) #5
  br label %.thread324

163:                                              ; preds = %158
  %164 = and i32 %160, -129
  %165 = icmp sgt i32 %164, %.1189
  br i1 %165, label %166, label %168

166:                                              ; preds = %163
  %167 = tail call ptr (ptr, ...) @sqlite3_mprintf(ptr noundef nonnull @.str.45, ptr noundef nonnull %.1193, ptr noundef nonnull %136) #5
  br label %.thread324

168:                                              ; preds = %163
  %169 = and i32 %146, %.0199414
  %170 = or i32 %160, %169
  br label %.thread310

.thread310:                                       ; preds = %.lr.ph417, %.thread282.thread, %142, %168, %138
  %.1209 = phi ptr [ %136, %138 ], [ %.0208413, %168 ], [ %.0208413, %142 ], [ %.0208413, %.thread282.thread ], [ %.0208413, %.lr.ph417 ]
  %.4203 = phi i32 [ %.0199414, %138 ], [ %170, %168 ], [ %.0199414, %142 ], [ %.0199414, %.thread282.thread ], [ %.0199414, %.lr.ph417 ]
  %171 = sext i32 %137 to i64
  %172 = getelementptr i8, ptr %136, i64 %171
  %.0235 = getelementptr i8, ptr %172, i64 1
  %173 = load i8, ptr %.0235, align 1, !tbaa !9
  %.not260 = icmp eq i8 %173, 0
  br i1 %.not260, label %.loopexit, label %.lr.ph417, !llvm.loop !24

174:                                              ; preds = %6, %14
  %175 = add nsw i32 %8, 2
  %176 = sext i32 %175 to i64
  %177 = tail call ptr @sqlite3_malloc64(i64 noundef %176) #5
  %.not = icmp eq ptr %177, null
  br i1 %.not, label %.thread329, label %178

178:                                              ; preds = %174
  %.not252 = icmp eq i32 %8, 0
  br i1 %.not252, label %._crit_edge486, label %179

179:                                              ; preds = %178
  %180 = sext i32 %8 to i64
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %177, ptr align 1 %1, i64 %180, i1 false)
  br label %._crit_edge486

._crit_edge486:                                   ; preds = %178, %179
  %.pre-phi488 = phi i64 [ %180, %179 ], [ 0, %178 ]
  %181 = getelementptr inbounds i8, ptr %177, i64 %.pre-phi488
  store i8 0, ptr %181, align 1, !tbaa !9
  %182 = getelementptr i8, ptr %181, i64 1
  store i8 0, ptr %182, align 1, !tbaa !9
  %183 = and i32 %7, -65
  br label %.loopexit

.loopexit:                                        ; preds = %.thread310, %126, %._crit_edge486
  %.0237 = phi ptr [ %177, %._crit_edge486 ], [ %35, %126 ], [ %35, %.thread310 ]
  %.4212 = phi ptr [ %0, %._crit_edge486 ], [ %0, %126 ], [ %.1209, %.thread310 ]
  %.7206 = phi i32 [ %183, %._crit_edge486 ], [ %16, %126 ], [ %.4203, %.thread310 ]
  %184 = tail call ptr @sqlite3_vfs_find(ptr noundef %.4212) #5
  store ptr %184, ptr %3, align 8, !tbaa !25
  %185 = icmp eq ptr %184, null
  br i1 %185, label %186, label %188

186:                                              ; preds = %.loopexit
  %187 = tail call ptr (ptr, ...) @sqlite3_mprintf(ptr noundef nonnull @.str.46, ptr noundef %.4212) #5
  br label %.thread324

.thread324:                                       ; preds = %166, %.thread299, %50, %186
  %.sink = phi ptr [ %167, %166 ], [ %162, %.thread299 ], [ %53, %50 ], [ %187, %186 ]
  %.1238.ph = phi ptr [ %35, %166 ], [ %35, %.thread299 ], [ %35, %50 ], [ %.0237, %186 ]
  %.8207.ph = phi i32 [ %.0199414, %166 ], [ %.0199414, %.thread299 ], [ %16, %50 ], [ %.7206, %186 ]
  %.8.ph = phi i32 [ 3, %166 ], [ 1, %.thread299 ], [ 1, %50 ], [ 1, %186 ]
  store ptr %.sink, ptr %5, align 8, !tbaa !25
  tail call void @sqlite3_free(ptr noundef %.1238.ph) #5
  br label %188

188:                                              ; preds = %.loopexit, %.thread324
  %.8344 = phi i32 [ %.8.ph, %.thread324 ], [ 0, %.loopexit ]
  %.8207342 = phi i32 [ %.8207.ph, %.thread324 ], [ %.7206, %.loopexit ]
  %.2239 = phi ptr [ null, %.thread324 ], [ %.0237, %.loopexit ]
  store i32 %.8207342, ptr %2, align 4, !tbaa !5
  store ptr %.2239, ptr %4, align 8, !tbaa !25
  br label %.thread329

.thread329:                                       ; preds = %._crit_edge, %174, %188
  %.1 = phi i32 [ %.8344, %188 ], [ 7, %174 ], [ 7, %._crit_edge ]
  ret i32 %.1
}

declare ptr @sqlite3_malloc64(i64 noundef) local_unnamed_addr #1

declare ptr @sqlite3_mprintf(ptr noundef, ...) local_unnamed_addr #1

declare zeroext i8 @sqlite3HexToInt(i32 noundef) local_unnamed_addr #1

declare ptr @sqlite3_vfs_find(ptr noundef) local_unnamed_addr #1

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.vector.reduce.add.v2i64(<2 x i64>) #4

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #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 #2 = { 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 #3 = { nofree nounwind willreturn memory(argmem: read) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11, !12, !13}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!"llvm.loop.isvectorized", i32 1}
!13 = !{!"llvm.loop.unroll.runtime.disable"}
!14 = distinct !{!14, !11, !13, !12}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !11}
!17 = distinct !{!17, !11}
!18 = distinct !{!18, !11}
!19 = !{!20, !21, i64 0}
!20 = !{!"OpenMode", !21, i64 0, !6, i64 8}
!21 = !{!"any pointer", !7, i64 0}
!22 = distinct !{!22, !11}
!23 = !{!20, !6, i64 8}
!24 = distinct !{!24, !11}
!25 = !{!21, !21, i64 0}


; Effective O3 passes: ADCEPass,BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass