; LLVM IR from WayneLin92/SSeqCpp :: thirdparty/sqlite3 (sqlite3)

; 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, i8, i8, i8, i8, i8, i8, 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, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, i64, ptr, i32, ptr, i32, 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.__va_list_tag = type { i32, i32, ptr, ptr }
%struct.sqlite3 = type { ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i64, i64, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i64, i64, [12 x i32], i32, %struct.sqlite3InitInfo, i32, i32, i32, i32, i32, i32, ptr, %union.anon, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %union.anon.0, %struct.Lookaside, ptr, ptr, ptr, ptr, i32, i32, %struct.Hash, ptr, ptr, ptr, %struct.Hash, %struct.Hash, %struct.BusyHandler, [2 x %struct.Db], ptr, i32, i32, i32, i32, i64, i64, ptr }
%struct.sqlite3InitInfo = type { i32, i8, i8, i8, ptr }
%union.anon = type { ptr }
%union.anon.0 = type { double }
%struct.Lookaside = type { i32, i16, i16, i8, i32, [3 x i32], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.Hash = type { i32, i32, ptr, ptr }
%struct.BusyHandler = type { ptr, ptr, i32 }
%struct.Db = type { ptr, ptr, i8, i8, ptr }
%struct.Schema = type { i32, i32, %struct.Hash, %struct.Hash, %struct.Hash, %struct.Hash, ptr, i8, i8, i16, i32 }

@sqlite3Config = external hidden global %struct.Sqlite3Config, align 8
@sqlite3PendingByte = external hidden global i32, align 4
@sqlite3TreeTrace = external hidden global i32, align 4
@sqlite3WhereTrace = external hidden global i32, align 4

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

; Function Attrs: nounwind uwtable
declare dso_local void @sqlite3_mutex_enter(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local void @sqlite3_mutex_leave(ptr noundef) #1

; 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 nosync nounwind willreturn
declare void @llvm.va_start.p0(ptr) #2

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.va_end.p0(ptr) #2

; Function Attrs: nounwind uwtable
declare dso_local void @sqlite3_randomness(i32 noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden i32 @sqlite3FindDbName(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3ResetAllSchemasOfConnection(ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @sqlite3_test_control(i32 noundef %0, ...) #1 {
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca [1 x %struct.__va_list_tag], align 16
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca double, align 8
  %26 = alloca i16, align 2
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  store i32 %0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #3
  store i32 0, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %4) #3
  %30 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  call void @llvm.va_start.p0(ptr %30)
  %31 = load i32, ptr %2, align 4, !tbaa !5
  switch i32 %31, label %701 [
    i32 5, label %32
    i32 6, label %33
    i32 28, label %34
    i32 8, label %83
    i32 9, label %119
    i32 10, label %137
    i32 11, label %172
    i32 12, label %195
    i32 13, label %197
    i32 22, label %221
    i32 15, label %222
    i32 18, label %257
    i32 17, label %295
    i32 20, label %316
    i32 29, label %333
    i32 19, label %351
    i32 21, label %368
    i32 24, label %369
    i32 23, label %404
    i32 25, label %409
    i32 27, label %523
    i32 30, label %541
    i32 31, label %576
    i32 33, label %623
  ]

32:                                               ; preds = %1
  call void @sqlite3PrngSaveState()
  br label %701

33:                                               ; preds = %1
  call void @sqlite3PrngRestoreState()
  br label %701

34:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  %35 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %36 = getelementptr inbounds %struct.__va_list_tag, ptr %35, i32 0, i32 0
  %37 = load i32, ptr %36, align 16
  %38 = icmp ule i32 %37, 40
  br i1 %38, label %39, label %44

39:                                               ; preds = %34
  %40 = getelementptr inbounds %struct.__va_list_tag, ptr %35, i32 0, i32 3
  %41 = load ptr, ptr %40, align 16
  %42 = getelementptr i8, ptr %41, i32 %37
  %43 = add i32 %37, 8
  store i32 %43, ptr %36, align 16
  br label %48

44:                                               ; preds = %34
  %45 = getelementptr inbounds %struct.__va_list_tag, ptr %35, i32 0, i32 2
  %46 = load ptr, ptr %45, align 8
  %47 = getelementptr i8, ptr %46, i32 8
  store ptr %47, ptr %45, align 8
  br label %48

48:                                               ; preds = %44, %39
  %49 = phi ptr [ %42, %39 ], [ %46, %44 ]
  %50 = load i32, ptr %49, align 4, !tbaa !5
  store i32 %50, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %51 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %52 = getelementptr inbounds %struct.__va_list_tag, ptr %51, i32 0, i32 0
  %53 = load i32, ptr %52, align 16
  %54 = icmp ule i32 %53, 40
  br i1 %54, label %55, label %60

55:                                               ; preds = %48
  %56 = getelementptr inbounds %struct.__va_list_tag, ptr %51, i32 0, i32 3
  %57 = load ptr, ptr %56, align 16
  %58 = getelementptr i8, ptr %57, i32 %53
  %59 = add i32 %53, 8
  store i32 %59, ptr %52, align 16
  br label %64

60:                                               ; preds = %48
  %61 = getelementptr inbounds %struct.__va_list_tag, ptr %51, i32 0, i32 2
  %62 = load ptr, ptr %61, align 8
  %63 = getelementptr i8, ptr %62, i32 8
  store ptr %63, ptr %61, align 8
  br label %64

64:                                               ; preds = %60, %55
  %65 = phi ptr [ %58, %55 ], [ %62, %60 ]
  %66 = load ptr, ptr %65, align 8, !tbaa !9
  store ptr %66, ptr %7, align 8, !tbaa !9
  %67 = load ptr, ptr %7, align 8, !tbaa !9
  %68 = icmp ne ptr %67, null
  br i1 %68, label %69, label %81

69:                                               ; preds = %64
  %70 = load ptr, ptr %7, align 8, !tbaa !9
  %71 = getelementptr inbounds %struct.sqlite3, ptr %70, i32 0, i32 4
  %72 = load ptr, ptr %71, align 8, !tbaa !11
  %73 = getelementptr inbounds %struct.Db, ptr %72, i64 0
  %74 = getelementptr inbounds %struct.Db, ptr %73, i32 0, i32 4
  %75 = load ptr, ptr %74, align 8, !tbaa !19
  %76 = getelementptr inbounds %struct.Schema, ptr %75, i32 0, i32 0
  %77 = load i32, ptr %76, align 8, !tbaa !21
  store i32 %77, ptr %6, align 4, !tbaa !5
  %78 = icmp ne i32 %77, 0
  br i1 %78, label %79, label %81

79:                                               ; preds = %69
  %80 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %80, ptr %5, align 4, !tbaa !5
  br label %81

81:                                               ; preds = %79, %69, %64
  %82 = load i32, ptr %5, align 4, !tbaa !5
  store i32 %82, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 42), align 8, !tbaa !23
  call void @sqlite3_randomness(i32 noundef 0, ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  br label %701

83:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  %84 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %85 = getelementptr inbounds %struct.__va_list_tag, ptr %84, i32 0, i32 0
  %86 = load i32, ptr %85, align 16
  %87 = icmp ule i32 %86, 40
  br i1 %87, label %88, label %93

88:                                               ; preds = %83
  %89 = getelementptr inbounds %struct.__va_list_tag, ptr %84, i32 0, i32 3
  %90 = load ptr, ptr %89, align 16
  %91 = getelementptr i8, ptr %90, i32 %86
  %92 = add i32 %86, 8
  store i32 %92, ptr %85, align 16
  br label %97

93:                                               ; preds = %83
  %94 = getelementptr inbounds %struct.__va_list_tag, ptr %84, i32 0, i32 2
  %95 = load ptr, ptr %94, align 8
  %96 = getelementptr i8, ptr %95, i32 8
  store ptr %96, ptr %94, align 8
  br label %97

97:                                               ; preds = %93, %88
  %98 = phi ptr [ %91, %88 ], [ %95, %93 ]
  %99 = load i32, ptr %98, align 4, !tbaa !5
  store i32 %99, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  %100 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %101 = getelementptr inbounds %struct.__va_list_tag, ptr %100, i32 0, i32 0
  %102 = load i32, ptr %101, align 16
  %103 = icmp ule i32 %102, 40
  br i1 %103, label %104, label %109

104:                                              ; preds = %97
  %105 = getelementptr inbounds %struct.__va_list_tag, ptr %100, i32 0, i32 3
  %106 = load ptr, ptr %105, align 16
  %107 = getelementptr i8, ptr %106, i32 %102
  %108 = add i32 %102, 8
  store i32 %108, ptr %101, align 16
  br label %113

109:                                              ; preds = %97
  %110 = getelementptr inbounds %struct.__va_list_tag, ptr %100, i32 0, i32 2
  %111 = load ptr, ptr %110, align 8
  %112 = getelementptr i8, ptr %111, i32 8
  store ptr %112, ptr %110, align 8
  br label %113

113:                                              ; preds = %109, %104
  %114 = phi ptr [ %107, %104 ], [ %111, %109 ]
  %115 = load ptr, ptr %114, align 8, !tbaa !9
  store ptr %115, ptr %9, align 8, !tbaa !9
  %116 = load i32, ptr %8, align 4, !tbaa !5
  %117 = load ptr, ptr %9, align 8, !tbaa !9
  %118 = call i32 @sqlite3BitvecBuiltinTest(i32 noundef %116, ptr noundef %117)
  store i32 %118, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  br label %701

119:                                              ; preds = %1
  %120 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %121 = getelementptr inbounds %struct.__va_list_tag, ptr %120, i32 0, i32 0
  %122 = load i32, ptr %121, align 16
  %123 = icmp ule i32 %122, 40
  br i1 %123, label %124, label %129

124:                                              ; preds = %119
  %125 = getelementptr inbounds %struct.__va_list_tag, ptr %120, i32 0, i32 3
  %126 = load ptr, ptr %125, align 16
  %127 = getelementptr i8, ptr %126, i32 %122
  %128 = add i32 %122, 8
  store i32 %128, ptr %121, align 16
  br label %133

129:                                              ; preds = %119
  %130 = getelementptr inbounds %struct.__va_list_tag, ptr %120, i32 0, i32 2
  %131 = load ptr, ptr %130, align 8
  %132 = getelementptr i8, ptr %131, i32 8
  store ptr %132, ptr %130, align 8
  br label %133

133:                                              ; preds = %129, %124
  %134 = phi ptr [ %127, %124 ], [ %131, %129 ]
  %135 = load ptr, ptr %134, align 8, !tbaa !9
  store ptr %135, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 37), align 8, !tbaa !28
  %136 = call i32 @sqlite3FaultSim(i32 noundef 0)
  store i32 %136, ptr %3, align 4, !tbaa !5
  br label %701

137:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  %138 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %139 = getelementptr inbounds %struct.__va_list_tag, ptr %138, i32 0, i32 0
  %140 = load i32, ptr %139, align 16
  %141 = icmp ule i32 %140, 40
  br i1 %141, label %142, label %147

142:                                              ; preds = %137
  %143 = getelementptr inbounds %struct.__va_list_tag, ptr %138, i32 0, i32 3
  %144 = load ptr, ptr %143, align 16
  %145 = getelementptr i8, ptr %144, i32 %140
  %146 = add i32 %140, 8
  store i32 %146, ptr %139, align 16
  br label %151

147:                                              ; preds = %137
  %148 = getelementptr inbounds %struct.__va_list_tag, ptr %138, i32 0, i32 2
  %149 = load ptr, ptr %148, align 8
  %150 = getelementptr i8, ptr %149, i32 8
  store ptr %150, ptr %148, align 8
  br label %151

151:                                              ; preds = %147, %142
  %152 = phi ptr [ %145, %142 ], [ %149, %147 ]
  %153 = load ptr, ptr %152, align 8, !tbaa !9
  store ptr %153, ptr %10, align 8, !tbaa !9
  %154 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %155 = getelementptr inbounds %struct.__va_list_tag, ptr %154, i32 0, i32 0
  %156 = load i32, ptr %155, align 16
  %157 = icmp ule i32 %156, 40
  br i1 %157, label %158, label %163

158:                                              ; preds = %151
  %159 = getelementptr inbounds %struct.__va_list_tag, ptr %154, i32 0, i32 3
  %160 = load ptr, ptr %159, align 16
  %161 = getelementptr i8, ptr %160, i32 %156
  %162 = add i32 %156, 8
  store i32 %162, ptr %155, align 16
  br label %167

163:                                              ; preds = %151
  %164 = getelementptr inbounds %struct.__va_list_tag, ptr %154, i32 0, i32 2
  %165 = load ptr, ptr %164, align 8
  %166 = getelementptr i8, ptr %165, i32 8
  store ptr %166, ptr %164, align 8
  br label %167

167:                                              ; preds = %163, %158
  %168 = phi ptr [ %161, %158 ], [ %165, %163 ]
  %169 = load ptr, ptr %168, align 8, !tbaa !9
  store ptr %169, ptr %11, align 8, !tbaa !9
  %170 = load ptr, ptr %10, align 8, !tbaa !9
  %171 = load ptr, ptr %11, align 8, !tbaa !9
  call void @sqlite3BenignMallocHooks(ptr noundef %170, ptr noundef %171)
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  br label %701

172:                                              ; preds = %1
  %173 = load i32, ptr @sqlite3PendingByte, align 4, !tbaa !5
  store i32 %173, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  %174 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %175 = getelementptr inbounds %struct.__va_list_tag, ptr %174, i32 0, i32 0
  %176 = load i32, ptr %175, align 16
  %177 = icmp ule i32 %176, 40
  br i1 %177, label %178, label %183

178:                                              ; preds = %172
  %179 = getelementptr inbounds %struct.__va_list_tag, ptr %174, i32 0, i32 3
  %180 = load ptr, ptr %179, align 16
  %181 = getelementptr i8, ptr %180, i32 %176
  %182 = add i32 %176, 8
  store i32 %182, ptr %175, align 16
  br label %187

183:                                              ; preds = %172
  %184 = getelementptr inbounds %struct.__va_list_tag, ptr %174, i32 0, i32 2
  %185 = load ptr, ptr %184, align 8
  %186 = getelementptr i8, ptr %185, i32 8
  store ptr %186, ptr %184, align 8
  br label %187

187:                                              ; preds = %183, %178
  %188 = phi ptr [ %181, %178 ], [ %185, %183 ]
  %189 = load i32, ptr %188, align 4, !tbaa !5
  store i32 %189, ptr %12, align 4, !tbaa !5
  %190 = load i32, ptr %12, align 4, !tbaa !5
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %194

192:                                              ; preds = %187
  %193 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %193, ptr @sqlite3PendingByte, align 4, !tbaa !5
  br label %194

194:                                              ; preds = %192, %187
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  br label %701

195:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  store volatile i32 0, ptr %13, align 4, !tbaa !5
  %196 = load volatile i32, ptr %13, align 4, !tbaa !5
  store i32 %196, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  br label %701

197:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  %198 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %199 = getelementptr inbounds %struct.__va_list_tag, ptr %198, i32 0, i32 0
  %200 = load i32, ptr %199, align 16
  %201 = icmp ule i32 %200, 40
  br i1 %201, label %202, label %207

202:                                              ; preds = %197
  %203 = getelementptr inbounds %struct.__va_list_tag, ptr %198, i32 0, i32 3
  %204 = load ptr, ptr %203, align 16
  %205 = getelementptr i8, ptr %204, i32 %200
  %206 = add i32 %200, 8
  store i32 %206, ptr %199, align 16
  br label %211

207:                                              ; preds = %197
  %208 = getelementptr inbounds %struct.__va_list_tag, ptr %198, i32 0, i32 2
  %209 = load ptr, ptr %208, align 8
  %210 = getelementptr i8, ptr %209, i32 8
  store ptr %210, ptr %208, align 8
  br label %211

211:                                              ; preds = %207, %202
  %212 = phi ptr [ %205, %202 ], [ %209, %207 ]
  %213 = load i32, ptr %212, align 4, !tbaa !5
  store i32 %213, ptr %14, align 4, !tbaa !5
  %214 = load i32, ptr %14, align 4, !tbaa !5
  %215 = icmp ne i32 %214, 0
  br i1 %215, label %216, label %218

216:                                              ; preds = %211
  %217 = load i32, ptr %14, align 4, !tbaa !5
  br label %219

218:                                              ; preds = %211
  br label %219

219:                                              ; preds = %218, %216
  %220 = phi i32 [ %217, %216 ], [ 0, %218 ]
  store i32 %220, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  br label %701

221:                                              ; preds = %1
  store i32 123410, ptr %3, align 4, !tbaa !5
  br label %701

222:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  %223 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %224 = getelementptr inbounds %struct.__va_list_tag, ptr %223, i32 0, i32 0
  %225 = load i32, ptr %224, align 16
  %226 = icmp ule i32 %225, 40
  br i1 %226, label %227, label %232

227:                                              ; preds = %222
  %228 = getelementptr inbounds %struct.__va_list_tag, ptr %223, i32 0, i32 3
  %229 = load ptr, ptr %228, align 16
  %230 = getelementptr i8, ptr %229, i32 %225
  %231 = add i32 %225, 8
  store i32 %231, ptr %224, align 16
  br label %236

232:                                              ; preds = %222
  %233 = getelementptr inbounds %struct.__va_list_tag, ptr %223, i32 0, i32 2
  %234 = load ptr, ptr %233, align 8
  %235 = getelementptr i8, ptr %234, i32 8
  store ptr %235, ptr %233, align 8
  br label %236

236:                                              ; preds = %232, %227
  %237 = phi ptr [ %230, %227 ], [ %234, %232 ]
  %238 = load ptr, ptr %237, align 8, !tbaa !9
  store ptr %238, ptr %15, align 8, !tbaa !9
  %239 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %240 = getelementptr inbounds %struct.__va_list_tag, ptr %239, i32 0, i32 0
  %241 = load i32, ptr %240, align 16
  %242 = icmp ule i32 %241, 40
  br i1 %242, label %243, label %248

243:                                              ; preds = %236
  %244 = getelementptr inbounds %struct.__va_list_tag, ptr %239, i32 0, i32 3
  %245 = load ptr, ptr %244, align 16
  %246 = getelementptr i8, ptr %245, i32 %241
  %247 = add i32 %241, 8
  store i32 %247, ptr %240, align 16
  br label %252

248:                                              ; preds = %236
  %249 = getelementptr inbounds %struct.__va_list_tag, ptr %239, i32 0, i32 2
  %250 = load ptr, ptr %249, align 8
  %251 = getelementptr i8, ptr %250, i32 8
  store ptr %251, ptr %249, align 8
  br label %252

252:                                              ; preds = %248, %243
  %253 = phi ptr [ %246, %243 ], [ %250, %248 ]
  %254 = load i32, ptr %253, align 4, !tbaa !5
  %255 = load ptr, ptr %15, align 8, !tbaa !9
  %256 = getelementptr inbounds %struct.sqlite3, ptr %255, i32 0, i32 16
  store i32 %254, ptr %256, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  br label %701

257:                                              ; preds = %1
  %258 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %259 = getelementptr inbounds %struct.__va_list_tag, ptr %258, i32 0, i32 0
  %260 = load i32, ptr %259, align 16
  %261 = icmp ule i32 %260, 40
  br i1 %261, label %262, label %267

262:                                              ; preds = %257
  %263 = getelementptr inbounds %struct.__va_list_tag, ptr %258, i32 0, i32 3
  %264 = load ptr, ptr %263, align 16
  %265 = getelementptr i8, ptr %264, i32 %260
  %266 = add i32 %260, 8
  store i32 %266, ptr %259, align 16
  br label %271

267:                                              ; preds = %257
  %268 = getelementptr inbounds %struct.__va_list_tag, ptr %258, i32 0, i32 2
  %269 = load ptr, ptr %268, align 8
  %270 = getelementptr i8, ptr %269, i32 8
  store ptr %270, ptr %268, align 8
  br label %271

271:                                              ; preds = %267, %262
  %272 = phi ptr [ %265, %262 ], [ %269, %267 ]
  %273 = load i32, ptr %272, align 4, !tbaa !5
  store i32 %273, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 38), align 8, !tbaa !30
  %274 = load i32, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 38), align 8, !tbaa !30
  %275 = icmp eq i32 %274, 2
  br i1 %275, label %276, label %293

276:                                              ; preds = %271
  %277 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %278 = getelementptr inbounds %struct.__va_list_tag, ptr %277, i32 0, i32 0
  %279 = load i32, ptr %278, align 16
  %280 = icmp ule i32 %279, 40
  br i1 %280, label %281, label %286

281:                                              ; preds = %276
  %282 = getelementptr inbounds %struct.__va_list_tag, ptr %277, i32 0, i32 3
  %283 = load ptr, ptr %282, align 16
  %284 = getelementptr i8, ptr %283, i32 %279
  %285 = add i32 %279, 8
  store i32 %285, ptr %278, align 16
  br label %290

286:                                              ; preds = %276
  %287 = getelementptr inbounds %struct.__va_list_tag, ptr %277, i32 0, i32 2
  %288 = load ptr, ptr %287, align 8
  %289 = getelementptr i8, ptr %288, i32 8
  store ptr %289, ptr %287, align 8
  br label %290

290:                                              ; preds = %286, %281
  %291 = phi ptr [ %284, %281 ], [ %288, %286 ]
  %292 = load ptr, ptr %291, align 8, !tbaa !9
  store ptr %292, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 39), align 8, !tbaa !31
  br label %294

293:                                              ; preds = %271
  store ptr null, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 39), align 8, !tbaa !31
  br label %294

294:                                              ; preds = %293, %290
  br label %701

295:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %296 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %297 = getelementptr inbounds %struct.__va_list_tag, ptr %296, i32 0, i32 0
  %298 = load i32, ptr %297, align 16
  %299 = icmp ule i32 %298, 40
  br i1 %299, label %300, label %305

300:                                              ; preds = %295
  %301 = getelementptr inbounds %struct.__va_list_tag, ptr %296, i32 0, i32 3
  %302 = load ptr, ptr %301, align 16
  %303 = getelementptr i8, ptr %302, i32 %298
  %304 = add i32 %298, 8
  store i32 %304, ptr %297, align 16
  br label %309

305:                                              ; preds = %295
  %306 = getelementptr inbounds %struct.__va_list_tag, ptr %296, i32 0, i32 2
  %307 = load ptr, ptr %306, align 8
  %308 = getelementptr i8, ptr %307, i32 8
  store ptr %308, ptr %306, align 8
  br label %309

309:                                              ; preds = %305, %300
  %310 = phi ptr [ %303, %300 ], [ %307, %305 ]
  %311 = load ptr, ptr %310, align 8, !tbaa !9
  store ptr %311, ptr %16, align 8, !tbaa !9
  %312 = load ptr, ptr %16, align 8, !tbaa !9
  %313 = getelementptr inbounds %struct.sqlite3, ptr %312, i32 0, i32 6
  %314 = load i32, ptr %313, align 4, !tbaa !32
  %315 = xor i32 %314, 32
  store i32 %315, ptr %313, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  br label %701

316:                                              ; preds = %1
  %317 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %318 = getelementptr inbounds %struct.__va_list_tag, ptr %317, i32 0, i32 0
  %319 = load i32, ptr %318, align 16
  %320 = icmp ule i32 %319, 40
  br i1 %320, label %321, label %326

321:                                              ; preds = %316
  %322 = getelementptr inbounds %struct.__va_list_tag, ptr %317, i32 0, i32 3
  %323 = load ptr, ptr %322, align 16
  %324 = getelementptr i8, ptr %323, i32 %319
  %325 = add i32 %319, 8
  store i32 %325, ptr %318, align 16
  br label %330

326:                                              ; preds = %316
  %327 = getelementptr inbounds %struct.__va_list_tag, ptr %317, i32 0, i32 2
  %328 = load ptr, ptr %327, align 8
  %329 = getelementptr i8, ptr %328, i32 8
  store ptr %329, ptr %327, align 8
  br label %330

330:                                              ; preds = %326, %321
  %331 = phi ptr [ %324, %321 ], [ %328, %326 ]
  %332 = load i32, ptr %331, align 4, !tbaa !5
  store i32 %332, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 8), align 8, !tbaa !33
  br label %701

333:                                              ; preds = %1
  %334 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %335 = getelementptr inbounds %struct.__va_list_tag, ptr %334, i32 0, i32 0
  %336 = load i32, ptr %335, align 16
  %337 = icmp ule i32 %336, 40
  br i1 %337, label %338, label %343

338:                                              ; preds = %333
  %339 = getelementptr inbounds %struct.__va_list_tag, ptr %334, i32 0, i32 3
  %340 = load ptr, ptr %339, align 16
  %341 = getelementptr i8, ptr %340, i32 %336
  %342 = add i32 %336, 8
  store i32 %342, ptr %335, align 16
  br label %347

343:                                              ; preds = %333
  %344 = getelementptr inbounds %struct.__va_list_tag, ptr %334, i32 0, i32 2
  %345 = load ptr, ptr %344, align 8
  %346 = getelementptr i8, ptr %345, i32 8
  store ptr %346, ptr %344, align 8
  br label %347

347:                                              ; preds = %343, %338
  %348 = phi ptr [ %341, %338 ], [ %345, %343 ]
  %349 = load i32, ptr %348, align 4, !tbaa !5
  %350 = trunc i32 %349 to i8
  store i8 %350, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 6), align 1, !tbaa !34
  br label %701

351:                                              ; preds = %1
  %352 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %353 = getelementptr inbounds %struct.__va_list_tag, ptr %352, i32 0, i32 0
  %354 = load i32, ptr %353, align 16
  %355 = icmp ule i32 %354, 40
  br i1 %355, label %356, label %361

356:                                              ; preds = %351
  %357 = getelementptr inbounds %struct.__va_list_tag, ptr %352, i32 0, i32 3
  %358 = load ptr, ptr %357, align 16
  %359 = getelementptr i8, ptr %358, i32 %354
  %360 = add i32 %354, 8
  store i32 %360, ptr %353, align 16
  br label %365

361:                                              ; preds = %351
  %362 = getelementptr inbounds %struct.__va_list_tag, ptr %352, i32 0, i32 2
  %363 = load ptr, ptr %362, align 8
  %364 = getelementptr i8, ptr %363, i32 8
  store ptr %364, ptr %362, align 8
  br label %365

365:                                              ; preds = %361, %356
  %366 = phi ptr [ %359, %356 ], [ %363, %361 ]
  %367 = load i32, ptr %366, align 4, !tbaa !5
  store i32 %367, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 40), align 8, !tbaa !35
  br label %701

368:                                              ; preds = %1
  br label %701

369:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  %370 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %371 = getelementptr inbounds %struct.__va_list_tag, ptr %370, i32 0, i32 0
  %372 = load i32, ptr %371, align 16
  %373 = icmp ule i32 %372, 40
  br i1 %373, label %374, label %379

374:                                              ; preds = %369
  %375 = getelementptr inbounds %struct.__va_list_tag, ptr %370, i32 0, i32 3
  %376 = load ptr, ptr %375, align 16
  %377 = getelementptr i8, ptr %376, i32 %372
  %378 = add i32 %372, 8
  store i32 %378, ptr %371, align 16
  br label %383

379:                                              ; preds = %369
  %380 = getelementptr inbounds %struct.__va_list_tag, ptr %370, i32 0, i32 2
  %381 = load ptr, ptr %380, align 8
  %382 = getelementptr i8, ptr %381, i32 8
  store ptr %382, ptr %380, align 8
  br label %383

383:                                              ; preds = %379, %374
  %384 = phi ptr [ %377, %374 ], [ %381, %379 ]
  %385 = load ptr, ptr %384, align 8, !tbaa !9
  store ptr %385, ptr %17, align 8, !tbaa !9
  %386 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %387 = getelementptr inbounds %struct.__va_list_tag, ptr %386, i32 0, i32 0
  %388 = load i32, ptr %387, align 16
  %389 = icmp ule i32 %388, 40
  br i1 %389, label %390, label %395

390:                                              ; preds = %383
  %391 = getelementptr inbounds %struct.__va_list_tag, ptr %386, i32 0, i32 3
  %392 = load ptr, ptr %391, align 16
  %393 = getelementptr i8, ptr %392, i32 %388
  %394 = add i32 %388, 8
  store i32 %394, ptr %387, align 16
  br label %399

395:                                              ; preds = %383
  %396 = getelementptr inbounds %struct.__va_list_tag, ptr %386, i32 0, i32 2
  %397 = load ptr, ptr %396, align 8
  %398 = getelementptr i8, ptr %397, i32 8
  store ptr %398, ptr %396, align 8
  br label %399

399:                                              ; preds = %395, %390
  %400 = phi ptr [ %393, %390 ], [ %397, %395 ]
  %401 = load i32, ptr %400, align 4, !tbaa !5
  %402 = load ptr, ptr %17, align 8, !tbaa !9
  %403 = getelementptr inbounds %struct.sqlite3, ptr %402, i32 0, i32 35
  store i32 %401, ptr %403, align 8, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  br label %701

404:                                              ; preds = %1
  %405 = load i32, ptr getelementptr inbounds (%struct.Sqlite3Config, ptr @sqlite3Config, i32 0, i32 27), align 4, !tbaa !37
  %406 = icmp eq i32 %405, 0
  br i1 %406, label %407, label %408

407:                                              ; preds = %404
  store i32 1, ptr %3, align 4, !tbaa !5
  br label %408

408:                                              ; preds = %407, %404
  br label %701

409:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  %410 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %411 = getelementptr inbounds %struct.__va_list_tag, ptr %410, i32 0, i32 0
  %412 = load i32, ptr %411, align 16
  %413 = icmp ule i32 %412, 40
  br i1 %413, label %414, label %419

414:                                              ; preds = %409
  %415 = getelementptr inbounds %struct.__va_list_tag, ptr %410, i32 0, i32 3
  %416 = load ptr, ptr %415, align 16
  %417 = getelementptr i8, ptr %416, i32 %412
  %418 = add i32 %412, 8
  store i32 %418, ptr %411, align 16
  br label %423

419:                                              ; preds = %409
  %420 = getelementptr inbounds %struct.__va_list_tag, ptr %410, i32 0, i32 2
  %421 = load ptr, ptr %420, align 8
  %422 = getelementptr i8, ptr %421, i32 8
  store ptr %422, ptr %420, align 8
  br label %423

423:                                              ; preds = %419, %414
  %424 = phi ptr [ %417, %414 ], [ %421, %419 ]
  %425 = load ptr, ptr %424, align 8, !tbaa !9
  store ptr %425, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %426 = load ptr, ptr %18, align 8, !tbaa !9
  %427 = getelementptr inbounds %struct.sqlite3, ptr %426, i32 0, i32 3
  %428 = load ptr, ptr %427, align 8, !tbaa !38
  call void @sqlite3_mutex_enter(ptr noundef %428)
  %429 = load ptr, ptr %18, align 8, !tbaa !9
  %430 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %431 = getelementptr inbounds %struct.__va_list_tag, ptr %430, i32 0, i32 0
  %432 = load i32, ptr %431, align 16
  %433 = icmp ule i32 %432, 40
  br i1 %433, label %434, label %439

434:                                              ; preds = %423
  %435 = getelementptr inbounds %struct.__va_list_tag, ptr %430, i32 0, i32 3
  %436 = load ptr, ptr %435, align 16
  %437 = getelementptr i8, ptr %436, i32 %432
  %438 = add i32 %432, 8
  store i32 %438, ptr %431, align 16
  br label %443

439:                                              ; preds = %423
  %440 = getelementptr inbounds %struct.__va_list_tag, ptr %430, i32 0, i32 2
  %441 = load ptr, ptr %440, align 8
  %442 = getelementptr i8, ptr %441, i32 8
  store ptr %442, ptr %440, align 8
  br label %443

443:                                              ; preds = %439, %434
  %444 = phi ptr [ %437, %434 ], [ %441, %439 ]
  %445 = load ptr, ptr %444, align 8, !tbaa !9
  %446 = call i32 @sqlite3FindDbName(ptr noundef %429, ptr noundef %445)
  store i32 %446, ptr %19, align 4, !tbaa !5
  %447 = load i32, ptr %19, align 4, !tbaa !5
  %448 = icmp sge i32 %447, 0
  br i1 %448, label %449, label %519

449:                                              ; preds = %443
  %450 = load i32, ptr %19, align 4, !tbaa !5
  %451 = trunc i32 %450 to i8
  %452 = load ptr, ptr %18, align 8, !tbaa !9
  %453 = getelementptr inbounds %struct.sqlite3, ptr %452, i32 0, i32 36
  %454 = getelementptr inbounds %struct.sqlite3InitInfo, ptr %453, i32 0, i32 1
  store i8 %451, ptr %454, align 4, !tbaa !39
  %455 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %456 = getelementptr inbounds %struct.__va_list_tag, ptr %455, i32 0, i32 0
  %457 = load i32, ptr %456, align 16
  %458 = icmp ule i32 %457, 40
  br i1 %458, label %459, label %464

459:                                              ; preds = %449
  %460 = getelementptr inbounds %struct.__va_list_tag, ptr %455, i32 0, i32 3
  %461 = load ptr, ptr %460, align 16
  %462 = getelementptr i8, ptr %461, i32 %457
  %463 = add i32 %457, 8
  store i32 %463, ptr %456, align 16
  br label %468

464:                                              ; preds = %449
  %465 = getelementptr inbounds %struct.__va_list_tag, ptr %455, i32 0, i32 2
  %466 = load ptr, ptr %465, align 8
  %467 = getelementptr i8, ptr %466, i32 8
  store ptr %467, ptr %465, align 8
  br label %468

468:                                              ; preds = %464, %459
  %469 = phi ptr [ %462, %459 ], [ %466, %464 ]
  %470 = load i32, ptr %469, align 4, !tbaa !5
  %471 = load ptr, ptr %18, align 8, !tbaa !9
  %472 = getelementptr inbounds %struct.sqlite3, ptr %471, i32 0, i32 36
  %473 = getelementptr inbounds %struct.sqlite3InitInfo, ptr %472, i32 0, i32 3
  %474 = trunc i32 %470 to i8
  %475 = load i8, ptr %473, align 2
  %476 = and i8 %474, 1
  %477 = shl i8 %476, 1
  %478 = and i8 %475, -3
  %479 = or i8 %478, %477
  store i8 %479, ptr %473, align 2
  %480 = zext i8 %476 to i32
  %481 = trunc i32 %480 to i8
  %482 = load ptr, ptr %18, align 8, !tbaa !9
  %483 = getelementptr inbounds %struct.sqlite3, ptr %482, i32 0, i32 36
  %484 = getelementptr inbounds %struct.sqlite3InitInfo, ptr %483, i32 0, i32 2
  store i8 %481, ptr %484, align 1, !tbaa !40
  %485 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %486 = getelementptr inbounds %struct.__va_list_tag, ptr %485, i32 0, i32 0
  %487 = load i32, ptr %486, align 16
  %488 = icmp ule i32 %487, 40
  br i1 %488, label %489, label %494

489:                                              ; preds = %468
  %490 = getelementptr inbounds %struct.__va_list_tag, ptr %485, i32 0, i32 3
  %491 = load ptr, ptr %490, align 16
  %492 = getelementptr i8, ptr %491, i32 %487
  %493 = add i32 %487, 8
  store i32 %493, ptr %486, align 16
  br label %498

494:                                              ; preds = %468
  %495 = getelementptr inbounds %struct.__va_list_tag, ptr %485, i32 0, i32 2
  %496 = load ptr, ptr %495, align 8
  %497 = getelementptr i8, ptr %496, i32 8
  store ptr %497, ptr %495, align 8
  br label %498

498:                                              ; preds = %494, %489
  %499 = phi ptr [ %492, %489 ], [ %496, %494 ]
  %500 = load i32, ptr %499, align 4, !tbaa !5
  %501 = load ptr, ptr %18, align 8, !tbaa !9
  %502 = getelementptr inbounds %struct.sqlite3, ptr %501, i32 0, i32 36
  %503 = getelementptr inbounds %struct.sqlite3InitInfo, ptr %502, i32 0, i32 0
  store i32 %500, ptr %503, align 8, !tbaa !41
  %504 = load ptr, ptr %18, align 8, !tbaa !9
  %505 = getelementptr inbounds %struct.sqlite3, ptr %504, i32 0, i32 36
  %506 = getelementptr inbounds %struct.sqlite3InitInfo, ptr %505, i32 0, i32 2
  %507 = load i8, ptr %506, align 1, !tbaa !40
  %508 = zext i8 %507 to i32
  %509 = icmp eq i32 %508, 0
  br i1 %509, label %510, label %518

510:                                              ; preds = %498
  %511 = load ptr, ptr %18, align 8, !tbaa !9
  %512 = getelementptr inbounds %struct.sqlite3, ptr %511, i32 0, i32 36
  %513 = getelementptr inbounds %struct.sqlite3InitInfo, ptr %512, i32 0, i32 0
  %514 = load i32, ptr %513, align 8, !tbaa !41
  %515 = icmp ugt i32 %514, 0
  br i1 %515, label %516, label %518

516:                                              ; preds = %510
  %517 = load ptr, ptr %18, align 8, !tbaa !9
  call void @sqlite3ResetAllSchemasOfConnection(ptr noundef %517)
  br label %518

518:                                              ; preds = %516, %510, %498
  br label %519

519:                                              ; preds = %518, %443
  %520 = load ptr, ptr %18, align 8, !tbaa !9
  %521 = getelementptr inbounds %struct.sqlite3, ptr %520, i32 0, i32 3
  %522 = load ptr, ptr %521, align 8, !tbaa !38
  call void @sqlite3_mutex_leave(ptr noundef %522)
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  br label %701

523:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  %524 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %525 = getelementptr inbounds %struct.__va_list_tag, ptr %524, i32 0, i32 0
  %526 = load i32, ptr %525, align 16
  %527 = icmp ule i32 %526, 40
  br i1 %527, label %528, label %533

528:                                              ; preds = %523
  %529 = getelementptr inbounds %struct.__va_list_tag, ptr %524, i32 0, i32 3
  %530 = load ptr, ptr %529, align 16
  %531 = getelementptr i8, ptr %530, i32 %526
  %532 = add i32 %526, 8
  store i32 %532, ptr %525, align 16
  br label %537

533:                                              ; preds = %523
  %534 = getelementptr inbounds %struct.__va_list_tag, ptr %524, i32 0, i32 2
  %535 = load ptr, ptr %534, align 8
  %536 = getelementptr i8, ptr %535, i32 8
  store ptr %536, ptr %534, align 8
  br label %537

537:                                              ; preds = %533, %528
  %538 = phi ptr [ %531, %528 ], [ %535, %533 ]
  %539 = load ptr, ptr %538, align 8, !tbaa !9
  store ptr %539, ptr %20, align 8, !tbaa !9
  %540 = load ptr, ptr %20, align 8, !tbaa !9
  call void @sqlite3ResultIntReal(ptr noundef %540)
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  br label %701

541:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %542 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %543 = getelementptr inbounds %struct.__va_list_tag, ptr %542, i32 0, i32 0
  %544 = load i32, ptr %543, align 16
  %545 = icmp ule i32 %544, 40
  br i1 %545, label %546, label %551

546:                                              ; preds = %541
  %547 = getelementptr inbounds %struct.__va_list_tag, ptr %542, i32 0, i32 3
  %548 = load ptr, ptr %547, align 16
  %549 = getelementptr i8, ptr %548, i32 %544
  %550 = add i32 %544, 8
  store i32 %550, ptr %543, align 16
  br label %555

551:                                              ; preds = %541
  %552 = getelementptr inbounds %struct.__va_list_tag, ptr %542, i32 0, i32 2
  %553 = load ptr, ptr %552, align 8
  %554 = getelementptr i8, ptr %553, i32 8
  store ptr %554, ptr %552, align 8
  br label %555

555:                                              ; preds = %551, %546
  %556 = phi ptr [ %549, %546 ], [ %553, %551 ]
  %557 = load ptr, ptr %556, align 8, !tbaa !9
  store ptr %557, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  %558 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %559 = getelementptr inbounds %struct.__va_list_tag, ptr %558, i32 0, i32 0
  %560 = load i32, ptr %559, align 16
  %561 = icmp ule i32 %560, 40
  br i1 %561, label %562, label %567

562:                                              ; preds = %555
  %563 = getelementptr inbounds %struct.__va_list_tag, ptr %558, i32 0, i32 3
  %564 = load ptr, ptr %563, align 16
  %565 = getelementptr i8, ptr %564, i32 %560
  %566 = add i32 %560, 8
  store i32 %566, ptr %559, align 16
  br label %571

567:                                              ; preds = %555
  %568 = getelementptr inbounds %struct.__va_list_tag, ptr %558, i32 0, i32 2
  %569 = load ptr, ptr %568, align 8
  %570 = getelementptr i8, ptr %569, i32 8
  store ptr %570, ptr %568, align 8
  br label %571

571:                                              ; preds = %567, %562
  %572 = phi ptr [ %565, %562 ], [ %569, %567 ]
  %573 = load ptr, ptr %572, align 8, !tbaa !9
  store ptr %573, ptr %22, align 8, !tbaa !9
  %574 = load ptr, ptr %22, align 8, !tbaa !9
  store i64 0, ptr %574, align 8, !tbaa !42
  %575 = load ptr, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  br label %701

576:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %577 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %578 = getelementptr inbounds %struct.__va_list_tag, ptr %577, i32 0, i32 0
  %579 = load i32, ptr %578, align 16
  %580 = icmp ule i32 %579, 40
  br i1 %580, label %581, label %586

581:                                              ; preds = %576
  %582 = getelementptr inbounds %struct.__va_list_tag, ptr %577, i32 0, i32 3
  %583 = load ptr, ptr %582, align 16
  %584 = getelementptr i8, ptr %583, i32 %579
  %585 = add i32 %579, 8
  store i32 %585, ptr %578, align 16
  br label %590

586:                                              ; preds = %576
  %587 = getelementptr inbounds %struct.__va_list_tag, ptr %577, i32 0, i32 2
  %588 = load ptr, ptr %587, align 8
  %589 = getelementptr i8, ptr %588, i32 8
  store ptr %589, ptr %587, align 8
  br label %590

590:                                              ; preds = %586, %581
  %591 = phi ptr [ %584, %581 ], [ %588, %586 ]
  %592 = load i32, ptr %591, align 4, !tbaa !5
  store i32 %592, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  %593 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %594 = getelementptr inbounds %struct.__va_list_tag, ptr %593, i32 0, i32 0
  %595 = load i32, ptr %594, align 16
  %596 = icmp ule i32 %595, 40
  br i1 %596, label %597, label %602

597:                                              ; preds = %590
  %598 = getelementptr inbounds %struct.__va_list_tag, ptr %593, i32 0, i32 3
  %599 = load ptr, ptr %598, align 16
  %600 = getelementptr i8, ptr %599, i32 %595
  %601 = add i32 %595, 8
  store i32 %601, ptr %594, align 16
  br label %606

602:                                              ; preds = %590
  %603 = getelementptr inbounds %struct.__va_list_tag, ptr %593, i32 0, i32 2
  %604 = load ptr, ptr %603, align 8
  %605 = getelementptr i8, ptr %604, i32 8
  store ptr %605, ptr %603, align 8
  br label %606

606:                                              ; preds = %602, %597
  %607 = phi ptr [ %600, %597 ], [ %604, %602 ]
  %608 = load ptr, ptr %607, align 8, !tbaa !9
  store ptr %608, ptr %24, align 8, !tbaa !9
  %609 = load i32, ptr %23, align 4, !tbaa !5
  switch i32 %609, label %622 [
    i32 0, label %610
    i32 1, label %613
    i32 2, label %616
    i32 3, label %619
  ]

610:                                              ; preds = %606
  %611 = load i32, ptr @sqlite3TreeTrace, align 4, !tbaa !5
  %612 = load ptr, ptr %24, align 8, !tbaa !9
  store i32 %611, ptr %612, align 4, !tbaa !5
  br label %622

613:                                              ; preds = %606
  %614 = load ptr, ptr %24, align 8, !tbaa !9
  %615 = load i32, ptr %614, align 4, !tbaa !5
  store i32 %615, ptr @sqlite3TreeTrace, align 4, !tbaa !5
  br label %622

616:                                              ; preds = %606
  %617 = load i32, ptr @sqlite3WhereTrace, align 4, !tbaa !5
  %618 = load ptr, ptr %24, align 8, !tbaa !9
  store i32 %617, ptr %618, align 4, !tbaa !5
  br label %622

619:                                              ; preds = %606
  %620 = load ptr, ptr %24, align 8, !tbaa !9
  %621 = load i32, ptr %620, align 4, !tbaa !5
  store i32 %621, ptr @sqlite3WhereTrace, align 4, !tbaa !5
  br label %622

622:                                              ; preds = %619, %616, %613, %610, %606
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  br label %701

623:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  %624 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %625 = getelementptr inbounds %struct.__va_list_tag, ptr %624, i32 0, i32 1
  %626 = load i32, ptr %625, align 4
  %627 = icmp ule i32 %626, 160
  br i1 %627, label %628, label %633

628:                                              ; preds = %623
  %629 = getelementptr inbounds %struct.__va_list_tag, ptr %624, i32 0, i32 3
  %630 = load ptr, ptr %629, align 16
  %631 = getelementptr i8, ptr %630, i32 %626
  %632 = add i32 %626, 16
  store i32 %632, ptr %625, align 4
  br label %637

633:                                              ; preds = %623
  %634 = getelementptr inbounds %struct.__va_list_tag, ptr %624, i32 0, i32 2
  %635 = load ptr, ptr %634, align 8
  %636 = getelementptr i8, ptr %635, i32 8
  store ptr %636, ptr %634, align 8
  br label %637

637:                                              ; preds = %633, %628
  %638 = phi ptr [ %631, %628 ], [ %635, %633 ]
  %639 = load double, ptr %638, align 8, !tbaa !43
  store double %639, ptr %25, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #3
  %640 = load double, ptr %25, align 8, !tbaa !43
  %641 = call signext i16 @sqlite3LogEstFromDouble(double noundef %640)
  store i16 %641, ptr %26, align 2, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  %642 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %643 = getelementptr inbounds %struct.__va_list_tag, ptr %642, i32 0, i32 0
  %644 = load i32, ptr %643, align 16
  %645 = icmp ule i32 %644, 40
  br i1 %645, label %646, label %651

646:                                              ; preds = %637
  %647 = getelementptr inbounds %struct.__va_list_tag, ptr %642, i32 0, i32 3
  %648 = load ptr, ptr %647, align 16
  %649 = getelementptr i8, ptr %648, i32 %644
  %650 = add i32 %644, 8
  store i32 %650, ptr %643, align 16
  br label %655

651:                                              ; preds = %637
  %652 = getelementptr inbounds %struct.__va_list_tag, ptr %642, i32 0, i32 2
  %653 = load ptr, ptr %652, align 8
  %654 = getelementptr i8, ptr %653, i32 8
  store ptr %654, ptr %652, align 8
  br label %655

655:                                              ; preds = %651, %646
  %656 = phi ptr [ %649, %646 ], [ %653, %651 ]
  %657 = load ptr, ptr %656, align 8, !tbaa !9
  store ptr %657, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  %658 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %659 = getelementptr inbounds %struct.__va_list_tag, ptr %658, i32 0, i32 0
  %660 = load i32, ptr %659, align 16
  %661 = icmp ule i32 %660, 40
  br i1 %661, label %662, label %667

662:                                              ; preds = %655
  %663 = getelementptr inbounds %struct.__va_list_tag, ptr %658, i32 0, i32 3
  %664 = load ptr, ptr %663, align 16
  %665 = getelementptr i8, ptr %664, i32 %660
  %666 = add i32 %660, 8
  store i32 %666, ptr %659, align 16
  br label %671

667:                                              ; preds = %655
  %668 = getelementptr inbounds %struct.__va_list_tag, ptr %658, i32 0, i32 2
  %669 = load ptr, ptr %668, align 8
  %670 = getelementptr i8, ptr %669, i32 8
  store ptr %670, ptr %668, align 8
  br label %671

671:                                              ; preds = %667, %662
  %672 = phi ptr [ %665, %662 ], [ %669, %667 ]
  %673 = load ptr, ptr %672, align 8, !tbaa !9
  store ptr %673, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  %674 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  %675 = getelementptr inbounds %struct.__va_list_tag, ptr %674, i32 0, i32 0
  %676 = load i32, ptr %675, align 16
  %677 = icmp ule i32 %676, 40
  br i1 %677, label %678, label %683

678:                                              ; preds = %671
  %679 = getelementptr inbounds %struct.__va_list_tag, ptr %674, i32 0, i32 3
  %680 = load ptr, ptr %679, align 16
  %681 = getelementptr i8, ptr %680, i32 %676
  %682 = add i32 %676, 8
  store i32 %682, ptr %675, align 16
  br label %687

683:                                              ; preds = %671
  %684 = getelementptr inbounds %struct.__va_list_tag, ptr %674, i32 0, i32 2
  %685 = load ptr, ptr %684, align 8
  %686 = getelementptr i8, ptr %685, i32 8
  store ptr %686, ptr %684, align 8
  br label %687

687:                                              ; preds = %683, %678
  %688 = phi ptr [ %681, %678 ], [ %685, %683 ]
  %689 = load ptr, ptr %688, align 8, !tbaa !9
  store ptr %689, ptr %29, align 8, !tbaa !9
  %690 = load i16, ptr %26, align 2, !tbaa !45
  %691 = sext i16 %690 to i32
  %692 = load ptr, ptr %27, align 8, !tbaa !9
  store i32 %691, ptr %692, align 4, !tbaa !5
  %693 = load i16, ptr %26, align 2, !tbaa !45
  %694 = call i64 @sqlite3LogEstToInt(i16 noundef signext %693)
  %695 = load ptr, ptr %28, align 8, !tbaa !9
  store i64 %694, ptr %695, align 8, !tbaa !42
  %696 = load ptr, ptr %28, align 8, !tbaa !9
  %697 = load i64, ptr %696, align 8, !tbaa !42
  %698 = call signext i16 @sqlite3LogEst(i64 noundef %697)
  %699 = sext i16 %698 to i32
  %700 = load ptr, ptr %29, align 8, !tbaa !9
  store i32 %699, ptr %700, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  br label %701

701:                                              ; preds = %687, %622, %571, %537, %519, %408, %399, %368, %365, %347, %330, %309, %294, %252, %221, %219, %195, %194, %167, %133, %113, %81, %33, %32, %1
  %702 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %4, i64 0, i64 0
  call void @llvm.va_end.p0(ptr %702)
  %703 = load i32, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #3
  ret i32 %703
}

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3PrngSaveState() #1

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3PrngRestoreState() #1

; Function Attrs: nounwind uwtable
declare hidden i32 @sqlite3BitvecBuiltinTest(i32 noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden i32 @sqlite3FaultSim(i32 noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3BenignMallocHooks(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3ResultIntReal(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden signext i16 @sqlite3LogEstFromDouble(double noundef) #1

; Function Attrs: nounwind uwtable
declare hidden i64 @sqlite3LogEstToInt(i16 noundef signext) #1

; Function Attrs: nounwind uwtable
declare hidden signext i16 @sqlite3LogEst(i64 noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nocallback nofree nosync nounwind willreturn }
attributes #3 = { 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 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 32}
!12 = !{!"sqlite3", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !6, i64 40, !6, i64 44, !13, i64 48, !13, i64 56, !13, i64 64, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !6, i64 92, !6, i64 96, !7, i64 100, !7, i64 101, !7, i64 102, !7, i64 103, !7, i64 104, !7, i64 105, !7, i64 106, !7, i64 107, !7, i64 108, !7, i64 109, !7, i64 110, !7, i64 111, !7, i64 112, !7, i64 113, !6, i64 116, !13, i64 120, !13, i64 128, !7, i64 136, !6, i64 184, !14, i64 192, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220, !6, i64 224, !6, i64 228, !10, i64 232, !7, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !10, i64 312, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !10, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !7, i64 400, !15, i64 408, !10, i64 504, !10, i64 512, !10, i64 520, !10, i64 528, !6, i64 536, !6, i64 540, !17, i64 544, !10, i64 568, !10, i64 576, !10, i64 584, !17, i64 592, !17, i64 616, !18, i64 640, !7, i64 664, !10, i64 728, !6, i64 736, !6, i64 740, !6, i64 744, !6, i64 748, !13, i64 752, !13, i64 760, !10, i64 768}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"sqlite3InitInfo", !6, i64 0, !7, i64 4, !7, i64 5, !6, i64 6, !6, i64 6, !6, i64 6, !10, i64 8}
!15 = !{!"Lookaside", !6, i64 0, !16, i64 4, !16, i64 6, !7, i64 8, !6, i64 12, !7, i64 16, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88}
!16 = !{!"short", !7, i64 0}
!17 = !{!"Hash", !6, i64 0, !6, i64 4, !10, i64 8, !10, i64 16}
!18 = !{!"BusyHandler", !10, i64 0, !10, i64 8, !6, i64 16}
!19 = !{!20, !10, i64 24}
!20 = !{!"Db", !10, i64 0, !10, i64 8, !7, i64 16, !7, i64 17, !10, i64 24}
!21 = !{!22, !6, i64 0}
!22 = !{!"Schema", !6, i64 0, !6, i64 4, !17, i64 8, !17, i64 32, !17, i64 56, !17, i64 80, !10, i64 104, !7, i64 112, !7, i64 113, !16, i64 114, !6, i64 116}
!23 = !{!24, !6, i64 432}
!24 = !{!"Sqlite3Config", !6, i64 0, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7, !7, i64 8, !7, i64 9, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !25, i64 32, !26, i64 96, !27, i64 168, !10, i64 272, !6, i64 280, !6, i64 284, !6, i64 288, !13, i64 296, !13, i64 304, !10, i64 312, !6, i64 320, !6, i64 324, !6, i64 328, !6, i64 332, !6, i64 336, !6, i64 340, !6, i64 344, !6, i64 348, !6, i64 352, !6, i64 356, !6, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !13, i64 392, !10, i64 400, !6, i64 408, !10, i64 416, !6, i64 424, !6, i64 428, !6, i64 432}
!25 = !{!"sqlite3_mem_methods", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56}
!26 = !{!"sqlite3_mutex_methods", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64}
!27 = !{!"sqlite3_pcache_methods2", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96}
!28 = !{!24, !10, i64 400}
!29 = !{!12, !6, i64 96}
!30 = !{!24, !6, i64 408}
!31 = !{!24, !10, i64 416}
!32 = !{!12, !6, i64 44}
!33 = !{!24, !6, i64 16}
!34 = !{!24, !7, i64 9}
!35 = !{!24, !6, i64 424}
!36 = !{!12, !6, i64 184}
!37 = !{!24, !6, i64 340}
!38 = !{!12, !10, i64 24}
!39 = !{!12, !7, i64 196}
!40 = !{!12, !7, i64 197}
!41 = !{!12, !6, i64 192}
!42 = !{!13, !13, i64 0}
!43 = !{!44, !44, i64 0}
!44 = !{!"double", !7, i64 0}
!45 = !{!16, !16, i64 0}


; 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, i8, i8, i8, i8, i8, i8, 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, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, i64, ptr, i32, ptr, i32, 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.__va_list_tag = type { i32, i32, ptr, ptr }

@sqlite3Config = external hidden local_unnamed_addr global %struct.Sqlite3Config, align 8
@sqlite3PendingByte = external hidden local_unnamed_addr global i32, align 4
@sqlite3TreeTrace = external hidden local_unnamed_addr global i32, align 4
@sqlite3WhereTrace = external hidden local_unnamed_addr global i32, align 4

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

; Function Attrs: nounwind uwtable
declare dso_local void @sqlite3_mutex_enter(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @sqlite3_mutex_leave(ptr noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.va_start.p0(ptr) #2

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.va_end.p0(ptr) #2

; Function Attrs: nounwind uwtable
declare dso_local void @sqlite3_randomness(i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden i32 @sqlite3FindDbName(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3ResetAllSchemasOfConnection(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local i32 @sqlite3_test_control(i32 noundef %0, ...) local_unnamed_addr #1 {
  %2 = alloca [1 x %struct.__va_list_tag], align 16
  %3 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #3
  call void @llvm.va_start.p0(ptr nonnull %2)
  switch i32 %0, label %547 [
    i32 5, label %4
    i32 6, label %5
    i32 28, label %6
    i32 8, label %43
    i32 9, label %74
    i32 10, label %91
    i32 11, label %121
    i32 12, label %139
    i32 13, label %140
    i32 22, label %156
    i32 15, label %157
    i32 18, label %188
    i32 17, label %222
    i32 20, label %241
    i32 29, label %257
    i32 19, label %274
    i32 33, label %481
    i32 24, label %290
    i32 23, label %321
    i32 25, label %324
    i32 27, label %405
    i32 30, label %421
    i32 31, label %443
  ]

4:                                                ; preds = %1
  call void @sqlite3PrngSaveState()
  br label %547

5:                                                ; preds = %1
  call void @sqlite3PrngRestoreState()
  br label %547

6:                                                ; preds = %1
  %7 = load i32, ptr %2, align 16
  %8 = icmp ult i32 %7, 41
  br i1 %8, label %13, label %.thread

.thread:                                          ; preds = %6
  %9 = getelementptr inbounds i8, ptr %2, i64 8
  %10 = load ptr, ptr %9, align 8
  %11 = getelementptr i8, ptr %10, i64 8
  store ptr %11, ptr %9, align 8
  %12 = load i32, ptr %10, align 4, !tbaa !5
  br label %27

13:                                               ; preds = %6
  %14 = getelementptr inbounds i8, ptr %2, i64 16
  %15 = load ptr, ptr %14, align 16
  %16 = zext nneg i32 %7 to i64
  %17 = getelementptr i8, ptr %15, i64 %16
  %18 = add nuw nsw i32 %7, 8
  store i32 %18, ptr %2, align 16
  %19 = load i32, ptr %17, align 4, !tbaa !5
  %20 = icmp ult i32 %7, 33
  br i1 %20, label %21, label %27

21:                                               ; preds = %13
  %22 = getelementptr inbounds i8, ptr %2, i64 16
  %23 = load ptr, ptr %22, align 16
  %24 = zext nneg i32 %18 to i64
  %25 = getelementptr i8, ptr %23, i64 %24
  %26 = add nuw nsw i32 %7, 16
  store i32 %26, ptr %2, align 16
  br label %32

27:                                               ; preds = %.thread, %13
  %28 = phi i32 [ %12, %.thread ], [ %19, %13 ]
  %29 = getelementptr inbounds i8, ptr %2, i64 8
  %30 = load ptr, ptr %29, align 8
  %31 = getelementptr i8, ptr %30, i64 8
  store ptr %31, ptr %29, align 8
  br label %32

32:                                               ; preds = %27, %21
  %33 = phi i32 [ %19, %21 ], [ %28, %27 ]
  %34 = phi ptr [ %25, %21 ], [ %30, %27 ]
  %35 = load ptr, ptr %34, align 8, !tbaa !9
  %.not82 = icmp eq ptr %35, null
  br i1 %.not82, label %42, label %36

36:                                               ; preds = %32
  %37 = getelementptr inbounds i8, ptr %35, i64 32
  %38 = load ptr, ptr %37, align 8, !tbaa !11
  %39 = getelementptr inbounds i8, ptr %38, i64 24
  %40 = load ptr, ptr %39, align 8, !tbaa !19
  %41 = load i32, ptr %40, align 8, !tbaa !21
  %.not83 = icmp eq i32 %41, 0
  %spec.select = select i1 %.not83, i32 %33, i32 %41
  br label %42

42:                                               ; preds = %36, %32
  %.044 = phi i32 [ %33, %32 ], [ %spec.select, %36 ]
  store i32 %.044, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 432), align 8, !tbaa !23
  call void @sqlite3_randomness(i32 noundef 0, ptr noundef null)
  br label %547

43:                                               ; preds = %1
  %44 = load i32, ptr %2, align 16
  %45 = icmp ult i32 %44, 41
  br i1 %45, label %50, label %.thread93

.thread93:                                        ; preds = %43
  %46 = getelementptr inbounds i8, ptr %2, i64 8
  %47 = load ptr, ptr %46, align 8
  %48 = getelementptr i8, ptr %47, i64 8
  store ptr %48, ptr %46, align 8
  %49 = load i32, ptr %47, align 4, !tbaa !5
  br label %64

50:                                               ; preds = %43
  %51 = getelementptr inbounds i8, ptr %2, i64 16
  %52 = load ptr, ptr %51, align 16
  %53 = zext nneg i32 %44 to i64
  %54 = getelementptr i8, ptr %52, i64 %53
  %55 = add nuw nsw i32 %44, 8
  store i32 %55, ptr %2, align 16
  %56 = load i32, ptr %54, align 4, !tbaa !5
  %57 = icmp ult i32 %44, 33
  br i1 %57, label %58, label %64

58:                                               ; preds = %50
  %59 = getelementptr inbounds i8, ptr %2, i64 16
  %60 = load ptr, ptr %59, align 16
  %61 = zext nneg i32 %55 to i64
  %62 = getelementptr i8, ptr %60, i64 %61
  %63 = add nuw nsw i32 %44, 16
  store i32 %63, ptr %2, align 16
  br label %69

64:                                               ; preds = %.thread93, %50
  %65 = phi i32 [ %49, %.thread93 ], [ %56, %50 ]
  %66 = getelementptr inbounds i8, ptr %2, i64 8
  %67 = load ptr, ptr %66, align 8
  %68 = getelementptr i8, ptr %67, i64 8
  store ptr %68, ptr %66, align 8
  br label %69

69:                                               ; preds = %64, %58
  %70 = phi i32 [ %56, %58 ], [ %65, %64 ]
  %71 = phi ptr [ %62, %58 ], [ %67, %64 ]
  %72 = load ptr, ptr %71, align 8, !tbaa !9
  %73 = call i32 @sqlite3BitvecBuiltinTest(i32 noundef %70, ptr noundef %72)
  br label %547

74:                                               ; preds = %1
  %75 = load i32, ptr %2, align 16
  %76 = icmp ult i32 %75, 41
  br i1 %76, label %77, label %83

77:                                               ; preds = %74
  %78 = getelementptr inbounds i8, ptr %2, i64 16
  %79 = load ptr, ptr %78, align 16
  %80 = zext nneg i32 %75 to i64
  %81 = getelementptr i8, ptr %79, i64 %80
  %82 = add nuw nsw i32 %75, 8
  store i32 %82, ptr %2, align 16
  br label %87

83:                                               ; preds = %74
  %84 = getelementptr inbounds i8, ptr %2, i64 8
  %85 = load ptr, ptr %84, align 8
  %86 = getelementptr i8, ptr %85, i64 8
  store ptr %86, ptr %84, align 8
  br label %87

87:                                               ; preds = %83, %77
  %88 = phi ptr [ %81, %77 ], [ %85, %83 ]
  %89 = load ptr, ptr %88, align 8, !tbaa !9
  store ptr %89, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 400), align 8, !tbaa !28
  %90 = call i32 @sqlite3FaultSim(i32 noundef 0)
  br label %547

91:                                               ; preds = %1
  %92 = load i32, ptr %2, align 16
  %93 = icmp ult i32 %92, 41
  br i1 %93, label %98, label %.thread94

.thread94:                                        ; preds = %91
  %94 = getelementptr inbounds i8, ptr %2, i64 8
  %95 = load ptr, ptr %94, align 8
  %96 = getelementptr i8, ptr %95, i64 8
  store ptr %96, ptr %94, align 8
  %97 = load ptr, ptr %95, align 8, !tbaa !9
  br label %112

98:                                               ; preds = %91
  %99 = getelementptr inbounds i8, ptr %2, i64 16
  %100 = load ptr, ptr %99, align 16
  %101 = zext nneg i32 %92 to i64
  %102 = getelementptr i8, ptr %100, i64 %101
  %103 = add nuw nsw i32 %92, 8
  store i32 %103, ptr %2, align 16
  %104 = load ptr, ptr %102, align 8, !tbaa !9
  %105 = icmp ult i32 %92, 33
  br i1 %105, label %106, label %112

106:                                              ; preds = %98
  %107 = getelementptr inbounds i8, ptr %2, i64 16
  %108 = load ptr, ptr %107, align 16
  %109 = zext nneg i32 %103 to i64
  %110 = getelementptr i8, ptr %108, i64 %109
  %111 = add nuw nsw i32 %92, 16
  store i32 %111, ptr %2, align 16
  br label %117

112:                                              ; preds = %.thread94, %98
  %113 = phi ptr [ %97, %.thread94 ], [ %104, %98 ]
  %114 = getelementptr inbounds i8, ptr %2, i64 8
  %115 = load ptr, ptr %114, align 8
  %116 = getelementptr i8, ptr %115, i64 8
  store ptr %116, ptr %114, align 8
  br label %117

117:                                              ; preds = %112, %106
  %118 = phi ptr [ %104, %106 ], [ %113, %112 ]
  %119 = phi ptr [ %110, %106 ], [ %115, %112 ]
  %120 = load ptr, ptr %119, align 8, !tbaa !9
  call void @sqlite3BenignMallocHooks(ptr noundef %118, ptr noundef %120)
  br label %547

121:                                              ; preds = %1
  %122 = load i32, ptr @sqlite3PendingByte, align 4, !tbaa !5
  %123 = load i32, ptr %2, align 16
  %124 = icmp ult i32 %123, 41
  br i1 %124, label %125, label %131

125:                                              ; preds = %121
  %126 = getelementptr inbounds i8, ptr %2, i64 16
  %127 = load ptr, ptr %126, align 16
  %128 = zext nneg i32 %123 to i64
  %129 = getelementptr i8, ptr %127, i64 %128
  %130 = add nuw nsw i32 %123, 8
  store i32 %130, ptr %2, align 16
  br label %135

131:                                              ; preds = %121
  %132 = getelementptr inbounds i8, ptr %2, i64 8
  %133 = load ptr, ptr %132, align 8
  %134 = getelementptr i8, ptr %133, i64 8
  store ptr %134, ptr %132, align 8
  br label %135

135:                                              ; preds = %131, %125
  %136 = phi ptr [ %129, %125 ], [ %133, %131 ]
  %137 = load i32, ptr %136, align 4, !tbaa !5
  %.not81 = icmp eq i32 %137, 0
  br i1 %.not81, label %547, label %138

138:                                              ; preds = %135
  store i32 %137, ptr @sqlite3PendingByte, align 4, !tbaa !5
  br label %547

139:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3)
  store volatile i32 0, ptr %3, align 4, !tbaa !5
  %.0..0..0..0.31 = load volatile i32, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3)
  br label %547

140:                                              ; preds = %1
  %141 = load i32, ptr %2, align 16
  %142 = icmp ult i32 %141, 41
  br i1 %142, label %143, label %149

143:                                              ; preds = %140
  %144 = getelementptr inbounds i8, ptr %2, i64 16
  %145 = load ptr, ptr %144, align 16
  %146 = zext nneg i32 %141 to i64
  %147 = getelementptr i8, ptr %145, i64 %146
  %148 = add nuw nsw i32 %141, 8
  store i32 %148, ptr %2, align 16
  br label %153

149:                                              ; preds = %140
  %150 = getelementptr inbounds i8, ptr %2, i64 8
  %151 = load ptr, ptr %150, align 8
  %152 = getelementptr i8, ptr %151, i64 8
  store ptr %152, ptr %150, align 8
  br label %153

153:                                              ; preds = %149, %143
  %154 = phi ptr [ %147, %143 ], [ %151, %149 ]
  %155 = load i32, ptr %154, align 4, !tbaa !5
  br label %547

156:                                              ; preds = %1
  br label %547

157:                                              ; preds = %1
  %158 = load i32, ptr %2, align 16
  %159 = icmp ult i32 %158, 41
  br i1 %159, label %164, label %.thread95

.thread95:                                        ; preds = %157
  %160 = getelementptr inbounds i8, ptr %2, i64 8
  %161 = load ptr, ptr %160, align 8
  %162 = getelementptr i8, ptr %161, i64 8
  store ptr %162, ptr %160, align 8
  %163 = load ptr, ptr %161, align 8, !tbaa !9
  br label %178

164:                                              ; preds = %157
  %165 = getelementptr inbounds i8, ptr %2, i64 16
  %166 = load ptr, ptr %165, align 16
  %167 = zext nneg i32 %158 to i64
  %168 = getelementptr i8, ptr %166, i64 %167
  %169 = add nuw nsw i32 %158, 8
  store i32 %169, ptr %2, align 16
  %170 = load ptr, ptr %168, align 8, !tbaa !9
  %171 = icmp ult i32 %158, 33
  br i1 %171, label %172, label %178

172:                                              ; preds = %164
  %173 = getelementptr inbounds i8, ptr %2, i64 16
  %174 = load ptr, ptr %173, align 16
  %175 = zext nneg i32 %169 to i64
  %176 = getelementptr i8, ptr %174, i64 %175
  %177 = add nuw nsw i32 %158, 16
  store i32 %177, ptr %2, align 16
  br label %183

178:                                              ; preds = %.thread95, %164
  %179 = phi ptr [ %163, %.thread95 ], [ %170, %164 ]
  %180 = getelementptr inbounds i8, ptr %2, i64 8
  %181 = load ptr, ptr %180, align 8
  %182 = getelementptr i8, ptr %181, i64 8
  store ptr %182, ptr %180, align 8
  br label %183

183:                                              ; preds = %178, %172
  %184 = phi ptr [ %170, %172 ], [ %179, %178 ]
  %185 = phi ptr [ %176, %172 ], [ %181, %178 ]
  %186 = load i32, ptr %185, align 4, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %184, i64 96
  store i32 %186, ptr %187, align 8, !tbaa !29
  br label %547

188:                                              ; preds = %1
  %189 = load i32, ptr %2, align 16
  %190 = icmp ult i32 %189, 41
  br i1 %190, label %191, label %197

191:                                              ; preds = %188
  %192 = getelementptr inbounds i8, ptr %2, i64 16
  %193 = load ptr, ptr %192, align 16
  %194 = zext nneg i32 %189 to i64
  %195 = getelementptr i8, ptr %193, i64 %194
  %196 = add nuw nsw i32 %189, 8
  store i32 %196, ptr %2, align 16
  br label %201

197:                                              ; preds = %188
  %198 = getelementptr inbounds i8, ptr %2, i64 8
  %199 = load ptr, ptr %198, align 8
  %200 = getelementptr i8, ptr %199, i64 8
  store ptr %200, ptr %198, align 8
  br label %201

201:                                              ; preds = %197, %191
  %202 = phi i32 [ %196, %191 ], [ %189, %197 ]
  %203 = phi ptr [ %195, %191 ], [ %199, %197 ]
  %204 = load i32, ptr %203, align 4, !tbaa !5
  store i32 %204, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 408), align 8, !tbaa !30
  %205 = icmp eq i32 %204, 2
  br i1 %205, label %206, label %221

206:                                              ; preds = %201
  %207 = icmp ult i32 %202, 41
  br i1 %207, label %208, label %214

208:                                              ; preds = %206
  %209 = getelementptr inbounds i8, ptr %2, i64 16
  %210 = load ptr, ptr %209, align 16
  %211 = zext nneg i32 %202 to i64
  %212 = getelementptr i8, ptr %210, i64 %211
  %213 = add nuw nsw i32 %202, 8
  store i32 %213, ptr %2, align 16
  br label %218

214:                                              ; preds = %206
  %215 = getelementptr inbounds i8, ptr %2, i64 8
  %216 = load ptr, ptr %215, align 8
  %217 = getelementptr i8, ptr %216, i64 8
  store ptr %217, ptr %215, align 8
  br label %218

218:                                              ; preds = %214, %208
  %219 = phi ptr [ %212, %208 ], [ %216, %214 ]
  %220 = load ptr, ptr %219, align 8, !tbaa !9
  store ptr %220, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 416), align 8, !tbaa !31
  br label %547

221:                                              ; preds = %201
  store ptr null, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 416), align 8, !tbaa !31
  br label %547

222:                                              ; preds = %1
  %223 = load i32, ptr %2, align 16
  %224 = icmp ult i32 %223, 41
  br i1 %224, label %225, label %231

225:                                              ; preds = %222
  %226 = getelementptr inbounds i8, ptr %2, i64 16
  %227 = load ptr, ptr %226, align 16
  %228 = zext nneg i32 %223 to i64
  %229 = getelementptr i8, ptr %227, i64 %228
  %230 = add nuw nsw i32 %223, 8
  store i32 %230, ptr %2, align 16
  br label %235

231:                                              ; preds = %222
  %232 = getelementptr inbounds i8, ptr %2, i64 8
  %233 = load ptr, ptr %232, align 8
  %234 = getelementptr i8, ptr %233, i64 8
  store ptr %234, ptr %232, align 8
  br label %235

235:                                              ; preds = %231, %225
  %236 = phi ptr [ %229, %225 ], [ %233, %231 ]
  %237 = load ptr, ptr %236, align 8, !tbaa !9
  %238 = getelementptr inbounds i8, ptr %237, i64 44
  %239 = load i32, ptr %238, align 4, !tbaa !32
  %240 = xor i32 %239, 32
  store i32 %240, ptr %238, align 4, !tbaa !32
  br label %547

241:                                              ; preds = %1
  %242 = load i32, ptr %2, align 16
  %243 = icmp ult i32 %242, 41
  br i1 %243, label %244, label %250

244:                                              ; preds = %241
  %245 = getelementptr inbounds i8, ptr %2, i64 16
  %246 = load ptr, ptr %245, align 16
  %247 = zext nneg i32 %242 to i64
  %248 = getelementptr i8, ptr %246, i64 %247
  %249 = add nuw nsw i32 %242, 8
  store i32 %249, ptr %2, align 16
  br label %254

250:                                              ; preds = %241
  %251 = getelementptr inbounds i8, ptr %2, i64 8
  %252 = load ptr, ptr %251, align 8
  %253 = getelementptr i8, ptr %252, i64 8
  store ptr %253, ptr %251, align 8
  br label %254

254:                                              ; preds = %250, %244
  %255 = phi ptr [ %248, %244 ], [ %252, %250 ]
  %256 = load i32, ptr %255, align 4, !tbaa !5
  store i32 %256, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 16), align 8, !tbaa !33
  br label %547

257:                                              ; preds = %1
  %258 = load i32, ptr %2, align 16
  %259 = icmp ult i32 %258, 41
  br i1 %259, label %260, label %266

260:                                              ; preds = %257
  %261 = getelementptr inbounds i8, ptr %2, i64 16
  %262 = load ptr, ptr %261, align 16
  %263 = zext nneg i32 %258 to i64
  %264 = getelementptr i8, ptr %262, i64 %263
  %265 = add nuw nsw i32 %258, 8
  store i32 %265, ptr %2, align 16
  br label %270

266:                                              ; preds = %257
  %267 = getelementptr inbounds i8, ptr %2, i64 8
  %268 = load ptr, ptr %267, align 8
  %269 = getelementptr i8, ptr %268, i64 8
  store ptr %269, ptr %267, align 8
  br label %270

270:                                              ; preds = %266, %260
  %271 = phi ptr [ %264, %260 ], [ %268, %266 ]
  %272 = load i32, ptr %271, align 4, !tbaa !5
  %273 = trunc i32 %272 to i8
  store i8 %273, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 9), align 1, !tbaa !34
  br label %547

274:                                              ; preds = %1
  %275 = load i32, ptr %2, align 16
  %276 = icmp ult i32 %275, 41
  br i1 %276, label %277, label %283

277:                                              ; preds = %274
  %278 = getelementptr inbounds i8, ptr %2, i64 16
  %279 = load ptr, ptr %278, align 16
  %280 = zext nneg i32 %275 to i64
  %281 = getelementptr i8, ptr %279, i64 %280
  %282 = add nuw nsw i32 %275, 8
  store i32 %282, ptr %2, align 16
  br label %287

283:                                              ; preds = %274
  %284 = getelementptr inbounds i8, ptr %2, i64 8
  %285 = load ptr, ptr %284, align 8
  %286 = getelementptr i8, ptr %285, i64 8
  store ptr %286, ptr %284, align 8
  br label %287

287:                                              ; preds = %283, %277
  %288 = phi ptr [ %281, %277 ], [ %285, %283 ]
  %289 = load i32, ptr %288, align 4, !tbaa !5
  store i32 %289, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 424), align 8, !tbaa !35
  br label %547

290:                                              ; preds = %1
  %291 = load i32, ptr %2, align 16
  %292 = icmp ult i32 %291, 41
  br i1 %292, label %297, label %.thread96

.thread96:                                        ; preds = %290
  %293 = getelementptr inbounds i8, ptr %2, i64 8
  %294 = load ptr, ptr %293, align 8
  %295 = getelementptr i8, ptr %294, i64 8
  store ptr %295, ptr %293, align 8
  %296 = load ptr, ptr %294, align 8, !tbaa !9
  br label %311

297:                                              ; preds = %290
  %298 = getelementptr inbounds i8, ptr %2, i64 16
  %299 = load ptr, ptr %298, align 16
  %300 = zext nneg i32 %291 to i64
  %301 = getelementptr i8, ptr %299, i64 %300
  %302 = add nuw nsw i32 %291, 8
  store i32 %302, ptr %2, align 16
  %303 = load ptr, ptr %301, align 8, !tbaa !9
  %304 = icmp ult i32 %291, 33
  br i1 %304, label %305, label %311

305:                                              ; preds = %297
  %306 = getelementptr inbounds i8, ptr %2, i64 16
  %307 = load ptr, ptr %306, align 16
  %308 = zext nneg i32 %302 to i64
  %309 = getelementptr i8, ptr %307, i64 %308
  %310 = add nuw nsw i32 %291, 16
  store i32 %310, ptr %2, align 16
  br label %316

311:                                              ; preds = %.thread96, %297
  %312 = phi ptr [ %296, %.thread96 ], [ %303, %297 ]
  %313 = getelementptr inbounds i8, ptr %2, i64 8
  %314 = load ptr, ptr %313, align 8
  %315 = getelementptr i8, ptr %314, i64 8
  store ptr %315, ptr %313, align 8
  br label %316

316:                                              ; preds = %311, %305
  %317 = phi ptr [ %303, %305 ], [ %312, %311 ]
  %318 = phi ptr [ %309, %305 ], [ %314, %311 ]
  %319 = load i32, ptr %318, align 4, !tbaa !5
  %320 = getelementptr inbounds i8, ptr %317, i64 184
  store i32 %319, ptr %320, align 8, !tbaa !36
  br label %547

321:                                              ; preds = %1
  %322 = load i32, ptr getelementptr inbounds (i8, ptr @sqlite3Config, i64 340), align 4, !tbaa !37
  %323 = icmp eq i32 %322, 0
  %spec.select84 = zext i1 %323 to i32
  br label %547

324:                                              ; preds = %1
  %325 = load i32, ptr %2, align 16
  %326 = icmp ult i32 %325, 41
  br i1 %326, label %327, label %333

327:                                              ; preds = %324
  %328 = getelementptr inbounds i8, ptr %2, i64 16
  %329 = load ptr, ptr %328, align 16
  %330 = zext nneg i32 %325 to i64
  %331 = getelementptr i8, ptr %329, i64 %330
  %332 = add nuw nsw i32 %325, 8
  store i32 %332, ptr %2, align 16
  br label %337

333:                                              ; preds = %324
  %334 = getelementptr inbounds i8, ptr %2, i64 8
  %335 = load ptr, ptr %334, align 8
  %336 = getelementptr i8, ptr %335, i64 8
  store ptr %336, ptr %334, align 8
  br label %337

337:                                              ; preds = %333, %327
  %338 = phi ptr [ %331, %327 ], [ %335, %333 ]
  %339 = load ptr, ptr %338, align 8, !tbaa !9
  %340 = getelementptr inbounds i8, ptr %339, i64 24
  %341 = load ptr, ptr %340, align 8, !tbaa !38
  call void @sqlite3_mutex_enter(ptr noundef %341)
  %342 = load i32, ptr %2, align 16
  %343 = icmp ult i32 %342, 41
  br i1 %343, label %344, label %350

344:                                              ; preds = %337
  %345 = getelementptr inbounds i8, ptr %2, i64 16
  %346 = load ptr, ptr %345, align 16
  %347 = zext nneg i32 %342 to i64
  %348 = getelementptr i8, ptr %346, i64 %347
  %349 = add nuw nsw i32 %342, 8
  store i32 %349, ptr %2, align 16
  br label %354

350:                                              ; preds = %337
  %351 = getelementptr inbounds i8, ptr %2, i64 8
  %352 = load ptr, ptr %351, align 8
  %353 = getelementptr i8, ptr %352, i64 8
  store ptr %353, ptr %351, align 8
  br label %354

354:                                              ; preds = %350, %344
  %355 = phi ptr [ %348, %344 ], [ %352, %350 ]
  %356 = load ptr, ptr %355, align 8, !tbaa !9
  %357 = call i32 @sqlite3FindDbName(ptr noundef nonnull %339, ptr noundef %356)
  %358 = icmp sgt i32 %357, -1
  br i1 %358, label %359, label %403

359:                                              ; preds = %354
  %360 = trunc i32 %357 to i8
  %361 = getelementptr inbounds i8, ptr %339, i64 192
  %362 = getelementptr inbounds i8, ptr %339, i64 196
  store i8 %360, ptr %362, align 4, !tbaa !39
  %363 = load i32, ptr %2, align 16
  %364 = icmp ult i32 %363, 41
  br i1 %364, label %365, label %371

365:                                              ; preds = %359
  %366 = getelementptr inbounds i8, ptr %2, i64 16
  %367 = load ptr, ptr %366, align 16
  %368 = zext nneg i32 %363 to i64
  %369 = getelementptr i8, ptr %367, i64 %368
  %370 = add nuw nsw i32 %363, 8
  store i32 %370, ptr %2, align 16
  br label %375

371:                                              ; preds = %359
  %372 = getelementptr inbounds i8, ptr %2, i64 8
  %373 = load ptr, ptr %372, align 8
  %374 = getelementptr i8, ptr %373, i64 8
  store ptr %374, ptr %372, align 8
  br label %375

375:                                              ; preds = %371, %365
  %376 = phi i32 [ %370, %365 ], [ %363, %371 ]
  %377 = phi ptr [ %369, %365 ], [ %373, %371 ]
  %378 = load i32, ptr %377, align 4, !tbaa !5
  %379 = getelementptr inbounds i8, ptr %339, i64 198
  %380 = trunc i32 %378 to i8
  %381 = load i8, ptr %379, align 2
  %382 = and i8 %380, 1
  %383 = shl nuw nsw i8 %382, 1
  %384 = and i8 %381, -3
  %385 = or disjoint i8 %383, %384
  store i8 %385, ptr %379, align 2
  %386 = getelementptr inbounds i8, ptr %339, i64 197
  store i8 %382, ptr %386, align 1, !tbaa !40
  %387 = icmp ult i32 %376, 41
  br i1 %387, label %388, label %394

388:                                              ; preds = %375
  %389 = getelementptr inbounds i8, ptr %2, i64 16
  %390 = load ptr, ptr %389, align 16
  %391 = zext nneg i32 %376 to i64
  %392 = getelementptr i8, ptr %390, i64 %391
  %393 = add nuw nsw i32 %376, 8
  store i32 %393, ptr %2, align 16
  br label %398

394:                                              ; preds = %375
  %395 = getelementptr inbounds i8, ptr %2, i64 8
  %396 = load ptr, ptr %395, align 8
  %397 = getelementptr i8, ptr %396, i64 8
  store ptr %397, ptr %395, align 8
  br label %398

398:                                              ; preds = %394, %388
  %399 = phi ptr [ %392, %388 ], [ %396, %394 ]
  %400 = load i32, ptr %399, align 4, !tbaa !5
  store i32 %400, ptr %361, align 8, !tbaa !41
  %401 = icmp ne i8 %382, 0
  %.not = icmp eq i32 %400, 0
  %or.cond = select i1 %401, i1 true, i1 %.not
  br i1 %or.cond, label %403, label %402

402:                                              ; preds = %398
  call void @sqlite3ResetAllSchemasOfConnection(ptr noundef nonnull %339)
  br label %403

403:                                              ; preds = %398, %402, %354
  %404 = load ptr, ptr %340, align 8, !tbaa !38
  call void @sqlite3_mutex_leave(ptr noundef %404)
  br label %547

405:                                              ; preds = %1
  %406 = load i32, ptr %2, align 16
  %407 = icmp ult i32 %406, 41
  br i1 %407, label %408, label %414

408:                                              ; preds = %405
  %409 = getelementptr inbounds i8, ptr %2, i64 16
  %410 = load ptr, ptr %409, align 16
  %411 = zext nneg i32 %406 to i64
  %412 = getelementptr i8, ptr %410, i64 %411
  %413 = add nuw nsw i32 %406, 8
  store i32 %413, ptr %2, align 16
  br label %418

414:                                              ; preds = %405
  %415 = getelementptr inbounds i8, ptr %2, i64 8
  %416 = load ptr, ptr %415, align 8
  %417 = getelementptr i8, ptr %416, i64 8
  store ptr %417, ptr %415, align 8
  br label %418

418:                                              ; preds = %414, %408
  %419 = phi ptr [ %412, %408 ], [ %416, %414 ]
  %420 = load ptr, ptr %419, align 8, !tbaa !9
  call void @sqlite3ResultIntReal(ptr noundef %420)
  br label %547

421:                                              ; preds = %1
  %422 = load i32, ptr %2, align 16
  %423 = icmp ult i32 %422, 41
  br i1 %423, label %427, label %.thread97

.thread97:                                        ; preds = %421
  %424 = getelementptr inbounds i8, ptr %2, i64 8
  %425 = load ptr, ptr %424, align 8
  %426 = getelementptr i8, ptr %425, i64 8
  store ptr %426, ptr %424, align 8
  br label %436

427:                                              ; preds = %421
  %428 = add nuw nsw i32 %422, 8
  store i32 %428, ptr %2, align 16
  %429 = icmp ult i32 %422, 33
  br i1 %429, label %430, label %436

430:                                              ; preds = %427
  %431 = getelementptr inbounds i8, ptr %2, i64 16
  %432 = load ptr, ptr %431, align 16
  %433 = zext nneg i32 %428 to i64
  %434 = getelementptr i8, ptr %432, i64 %433
  %435 = add nuw nsw i32 %422, 16
  store i32 %435, ptr %2, align 16
  br label %440

436:                                              ; preds = %.thread97, %427
  %437 = getelementptr inbounds i8, ptr %2, i64 8
  %438 = load ptr, ptr %437, align 8
  %439 = getelementptr i8, ptr %438, i64 8
  store ptr %439, ptr %437, align 8
  br label %440

440:                                              ; preds = %436, %430
  %441 = phi ptr [ %434, %430 ], [ %438, %436 ]
  %442 = load ptr, ptr %441, align 8, !tbaa !9
  store i64 0, ptr %442, align 8, !tbaa !42
  br label %547

443:                                              ; preds = %1
  %444 = load i32, ptr %2, align 16
  %445 = icmp ult i32 %444, 41
  br i1 %445, label %450, label %.thread98

.thread98:                                        ; preds = %443
  %446 = getelementptr inbounds i8, ptr %2, i64 8
  %447 = load ptr, ptr %446, align 8
  %448 = getelementptr i8, ptr %447, i64 8
  store ptr %448, ptr %446, align 8
  %449 = load i32, ptr %447, align 4, !tbaa !5
  br label %464

450:                                              ; preds = %443
  %451 = getelementptr inbounds i8, ptr %2, i64 16
  %452 = load ptr, ptr %451, align 16
  %453 = zext nneg i32 %444 to i64
  %454 = getelementptr i8, ptr %452, i64 %453
  %455 = add nuw nsw i32 %444, 8
  store i32 %455, ptr %2, align 16
  %456 = load i32, ptr %454, align 4, !tbaa !5
  %457 = icmp ult i32 %444, 33
  br i1 %457, label %458, label %464

458:                                              ; preds = %450
  %459 = getelementptr inbounds i8, ptr %2, i64 16
  %460 = load ptr, ptr %459, align 16
  %461 = zext nneg i32 %455 to i64
  %462 = getelementptr i8, ptr %460, i64 %461
  %463 = add nuw nsw i32 %444, 16
  store i32 %463, ptr %2, align 16
  br label %469

464:                                              ; preds = %.thread98, %450
  %465 = phi i32 [ %449, %.thread98 ], [ %456, %450 ]
  %466 = getelementptr inbounds i8, ptr %2, i64 8
  %467 = load ptr, ptr %466, align 8
  %468 = getelementptr i8, ptr %467, i64 8
  store ptr %468, ptr %466, align 8
  br label %469

469:                                              ; preds = %464, %458
  %470 = phi i32 [ %456, %458 ], [ %465, %464 ]
  %471 = phi ptr [ %462, %458 ], [ %467, %464 ]
  %472 = load ptr, ptr %471, align 8, !tbaa !9
  switch i32 %470, label %547 [
    i32 0, label %473
    i32 1, label %475
    i32 2, label %477
    i32 3, label %479
  ]

473:                                              ; preds = %469
  %474 = load i32, ptr @sqlite3TreeTrace, align 4, !tbaa !5
  store i32 %474, ptr %472, align 4, !tbaa !5
  br label %547

475:                                              ; preds = %469
  %476 = load i32, ptr %472, align 4, !tbaa !5
  store i32 %476, ptr @sqlite3TreeTrace, align 4, !tbaa !5
  br label %547

477:                                              ; preds = %469
  %478 = load i32, ptr @sqlite3WhereTrace, align 4, !tbaa !5
  store i32 %478, ptr %472, align 4, !tbaa !5
  br label %547

479:                                              ; preds = %469
  %480 = load i32, ptr %472, align 4, !tbaa !5
  store i32 %480, ptr @sqlite3WhereTrace, align 4, !tbaa !5
  br label %547

481:                                              ; preds = %1
  %482 = getelementptr inbounds i8, ptr %2, i64 4
  %483 = load i32, ptr %482, align 4
  %484 = icmp ult i32 %483, 161
  br i1 %484, label %485, label %491

485:                                              ; preds = %481
  %486 = getelementptr inbounds i8, ptr %2, i64 16
  %487 = load ptr, ptr %486, align 16
  %488 = zext nneg i32 %483 to i64
  %489 = getelementptr i8, ptr %487, i64 %488
  %490 = add nuw nsw i32 %483, 16
  store i32 %490, ptr %482, align 4
  br label %495

491:                                              ; preds = %481
  %492 = getelementptr inbounds i8, ptr %2, i64 8
  %493 = load ptr, ptr %492, align 8
  %494 = getelementptr i8, ptr %493, i64 8
  store ptr %494, ptr %492, align 8
  br label %495

495:                                              ; preds = %491, %485
  %496 = phi ptr [ %489, %485 ], [ %493, %491 ]
  %497 = load double, ptr %496, align 8, !tbaa !43
  %498 = call signext i16 @sqlite3LogEstFromDouble(double noundef %497)
  %499 = load i32, ptr %2, align 16
  %500 = icmp ult i32 %499, 41
  br i1 %500, label %505, label %.thread99

.thread99:                                        ; preds = %495
  %501 = getelementptr inbounds i8, ptr %2, i64 8
  %502 = load ptr, ptr %501, align 8
  %503 = getelementptr i8, ptr %502, i64 8
  store ptr %503, ptr %501, align 8
  %504 = load ptr, ptr %502, align 8, !tbaa !9
  br label %.thread102

505:                                              ; preds = %495
  %506 = getelementptr inbounds i8, ptr %2, i64 16
  %507 = load ptr, ptr %506, align 16
  %508 = zext nneg i32 %499 to i64
  %509 = getelementptr i8, ptr %507, i64 %508
  %510 = add nuw nsw i32 %499, 8
  store i32 %510, ptr %2, align 16
  %511 = load ptr, ptr %509, align 8, !tbaa !9
  %512 = icmp ult i32 %499, 33
  br i1 %512, label %518, label %.thread102

.thread102:                                       ; preds = %505, %.thread99
  %513 = phi ptr [ %504, %.thread99 ], [ %511, %505 ]
  %514 = getelementptr inbounds i8, ptr %2, i64 8
  %515 = load ptr, ptr %514, align 8
  %516 = getelementptr i8, ptr %515, i64 8
  store ptr %516, ptr %514, align 8
  %517 = load ptr, ptr %515, align 8, !tbaa !9
  br label %532

518:                                              ; preds = %505
  %519 = getelementptr inbounds i8, ptr %2, i64 16
  %520 = load ptr, ptr %519, align 16
  %521 = zext nneg i32 %510 to i64
  %522 = getelementptr i8, ptr %520, i64 %521
  %523 = add nuw nsw i32 %499, 16
  store i32 %523, ptr %2, align 16
  %524 = load ptr, ptr %522, align 8, !tbaa !9
  %525 = icmp ult i32 %499, 25
  br i1 %525, label %526, label %532

526:                                              ; preds = %518
  %527 = getelementptr inbounds i8, ptr %2, i64 16
  %528 = load ptr, ptr %527, align 16
  %529 = zext nneg i32 %523 to i64
  %530 = getelementptr i8, ptr %528, i64 %529
  %531 = add nuw nsw i32 %499, 24
  store i32 %531, ptr %2, align 16
  br label %538

532:                                              ; preds = %.thread102, %518
  %533 = phi ptr [ %517, %.thread102 ], [ %524, %518 ]
  %534 = phi ptr [ %513, %.thread102 ], [ %511, %518 ]
  %535 = getelementptr inbounds i8, ptr %2, i64 8
  %536 = load ptr, ptr %535, align 8
  %537 = getelementptr i8, ptr %536, i64 8
  store ptr %537, ptr %535, align 8
  br label %538

538:                                              ; preds = %532, %526
  %539 = phi ptr [ %524, %526 ], [ %533, %532 ]
  %540 = phi ptr [ %511, %526 ], [ %534, %532 ]
  %541 = phi ptr [ %530, %526 ], [ %536, %532 ]
  %542 = load ptr, ptr %541, align 8, !tbaa !9
  %543 = sext i16 %498 to i32
  store i32 %543, ptr %540, align 4, !tbaa !5
  %544 = call i64 @sqlite3LogEstToInt(i16 noundef signext %498)
  store i64 %544, ptr %539, align 8, !tbaa !42
  %545 = call signext i16 @sqlite3LogEst(i64 noundef %544)
  %546 = sext i16 %545 to i32
  store i32 %546, ptr %542, align 4, !tbaa !5
  br label %547

547:                                              ; preds = %321, %469, %473, %475, %477, %479, %135, %138, %218, %221, %538, %440, %418, %403, %316, %287, %270, %254, %235, %183, %156, %153, %139, %117, %87, %69, %42, %5, %4, %1
  %.0 = phi i32 [ 0, %1 ], [ 0, %440 ], [ 0, %418 ], [ 0, %403 ], [ 0, %316 ], [ 0, %538 ], [ 0, %287 ], [ 0, %270 ], [ 0, %254 ], [ 0, %235 ], [ 0, %218 ], [ 0, %221 ], [ 0, %183 ], [ 123410, %156 ], [ %155, %153 ], [ %.0..0..0..0.31, %139 ], [ 0, %117 ], [ %90, %87 ], [ %73, %69 ], [ 0, %42 ], [ 0, %5 ], [ 0, %4 ], [ %122, %138 ], [ %122, %135 ], [ %spec.select84, %321 ], [ 0, %479 ], [ 0, %477 ], [ 0, %475 ], [ 0, %473 ], [ 0, %469 ]
  call void @llvm.va_end.p0(ptr nonnull %2)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #3
  ret i32 %.0
}

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3PrngSaveState() local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3PrngRestoreState() local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden i32 @sqlite3BitvecBuiltinTest(i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden i32 @sqlite3FaultSim(i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3BenignMallocHooks(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @sqlite3ResultIntReal(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden signext i16 @sqlite3LogEstFromDouble(double noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden i64 @sqlite3LogEstToInt(i16 noundef signext) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden signext i16 @sqlite3LogEst(i64 noundef) local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nosync nounwind willreturn }
attributes #3 = { 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 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 32}
!12 = !{!"sqlite3", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !6, i64 40, !6, i64 44, !13, i64 48, !13, i64 56, !13, i64 64, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !6, i64 92, !6, i64 96, !7, i64 100, !7, i64 101, !7, i64 102, !7, i64 103, !7, i64 104, !7, i64 105, !7, i64 106, !7, i64 107, !7, i64 108, !7, i64 109, !7, i64 110, !7, i64 111, !7, i64 112, !7, i64 113, !6, i64 116, !13, i64 120, !13, i64 128, !7, i64 136, !6, i64 184, !14, i64 192, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220, !6, i64 224, !6, i64 228, !10, i64 232, !7, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !10, i64 312, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !10, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !7, i64 400, !15, i64 408, !10, i64 504, !10, i64 512, !10, i64 520, !10, i64 528, !6, i64 536, !6, i64 540, !17, i64 544, !10, i64 568, !10, i64 576, !10, i64 584, !17, i64 592, !17, i64 616, !18, i64 640, !7, i64 664, !10, i64 728, !6, i64 736, !6, i64 740, !6, i64 744, !6, i64 748, !13, i64 752, !13, i64 760, !10, i64 768}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"sqlite3InitInfo", !6, i64 0, !7, i64 4, !7, i64 5, !6, i64 6, !6, i64 6, !6, i64 6, !10, i64 8}
!15 = !{!"Lookaside", !6, i64 0, !16, i64 4, !16, i64 6, !7, i64 8, !6, i64 12, !7, i64 16, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88}
!16 = !{!"short", !7, i64 0}
!17 = !{!"Hash", !6, i64 0, !6, i64 4, !10, i64 8, !10, i64 16}
!18 = !{!"BusyHandler", !10, i64 0, !10, i64 8, !6, i64 16}
!19 = !{!20, !10, i64 24}
!20 = !{!"Db", !10, i64 0, !10, i64 8, !7, i64 16, !7, i64 17, !10, i64 24}
!21 = !{!22, !6, i64 0}
!22 = !{!"Schema", !6, i64 0, !6, i64 4, !17, i64 8, !17, i64 32, !17, i64 56, !17, i64 80, !10, i64 104, !7, i64 112, !7, i64 113, !16, i64 114, !6, i64 116}
!23 = !{!24, !6, i64 432}
!24 = !{!"Sqlite3Config", !6, i64 0, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7, !7, i64 8, !7, i64 9, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !25, i64 32, !26, i64 96, !27, i64 168, !10, i64 272, !6, i64 280, !6, i64 284, !6, i64 288, !13, i64 296, !13, i64 304, !10, i64 312, !6, i64 320, !6, i64 324, !6, i64 328, !6, i64 332, !6, i64 336, !6, i64 340, !6, i64 344, !6, i64 348, !6, i64 352, !6, i64 356, !6, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !13, i64 392, !10, i64 400, !6, i64 408, !10, i64 416, !6, i64 424, !6, i64 428, !6, i64 432}
!25 = !{!"sqlite3_mem_methods", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56}
!26 = !{!"sqlite3_mutex_methods", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64}
!27 = !{!"sqlite3_pcache_methods2", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96}
!28 = !{!24, !10, i64 400}
!29 = !{!12, !6, i64 96}
!30 = !{!24, !6, i64 408}
!31 = !{!24, !10, i64 416}
!32 = !{!12, !6, i64 44}
!33 = !{!24, !6, i64 16}
!34 = !{!24, !7, i64 9}
!35 = !{!24, !6, i64 424}
!36 = !{!12, !6, i64 184}
!37 = !{!24, !6, i64 340}
!38 = !{!12, !10, i64 24}
!39 = !{!12, !7, i64 196}
!40 = !{!12, !7, i64 197}
!41 = !{!12, !6, i64 192}
!42 = !{!13, !13, i64 0}
!43 = !{!44, !44, i64 0}
!44 = !{!"double", !7, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass