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

; 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.WhereLoopBuilder = type { ptr, ptr, ptr, ptr, ptr, i32 }
%struct.Parse = type { ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, %struct.Token, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i8, i8, i8, [10 x %struct.yColCache], [8 x i32], %struct.Token, %struct.Token, i16, i8, i8, i8, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, %struct.Token, ptr, ptr, ptr, ptr, ptr }
%struct.yColCache = type { i32, i16, i8, i32, i32, i32 }
%struct.Token = type { ptr, i32 }
%struct.ExprList = type { i32, ptr }
%struct.sqlite3 = type { ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i64, i32, i32, i32, i32, i16, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i32, i32, [12 x i32], i32, %struct.sqlite3InitInfo, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %union.anon.1, %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, i64, i64, ptr }
%struct.sqlite3InitInfo = type { i32, i8, i8, i8, i8 }
%union.anon.1 = type { double }
%struct.Lookaside = type { i32, i16, i8, i32, i32, [3 x i32], 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.SrcList = type { i32, i32, [1 x %struct.SrcList_item] }
%struct.SrcList_item = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, %struct.anon.2, i8, i32, ptr, ptr, i64, %union.anon.3, ptr }
%struct.anon.2 = type { i8, i8, [2 x i8] }
%union.anon.3 = type { ptr }
%struct.WhereInfo = type { ptr, ptr, ptr, ptr, i16, [2 x i32], i32, i32, i32, i16, i8, i8, i8, i8, i8, i8, i8, i32, ptr, i64, i16, %struct.WhereClause, %struct.WhereMaskSet, [1 x %struct.WhereLevel] }
%struct.WhereClause = type { ptr, ptr, i8, i32, i32, ptr, [8 x %struct.WhereTerm] }
%struct.WhereTerm = type { ptr, ptr, i16, i16, i16, i8, i8, i32, i32, i32, %union.anon, i64, i64 }
%union.anon = type { ptr }
%struct.WhereMaskSet = type { i32, [64 x i32] }
%struct.WhereLevel = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i32, i32, %union.anon.0, ptr, i64 }
%union.anon.0 = type { %struct.anon }
%struct.anon = type { i32, ptr }
%struct.WhereLoop = type { i64, i64, i8, i8, i16, i16, i16, %union.anon.4, i32, i16, i16, i16, ptr, ptr, [3 x ptr] }
%union.anon.4 = type { %struct.anon.5 }
%struct.anon.5 = type { i16, i16, i16, ptr }
%struct.Expr = type { i8, i8, i32, %union.anon.7, ptr, ptr, %union.anon.8, i32, i32, i16, i16, i16, i8, ptr, ptr }
%union.anon.7 = type { ptr }
%union.anon.8 = type { ptr }
%struct.Table = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i16, i16, i16, i16, i8, i32, i32, ptr, ptr, ptr, ptr, ptr }
%struct.Index = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i16, i16, i16, i8, i8 }

@.str = external hidden unnamed_addr constant [28 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local ptr @sqlite3WhereBegin(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i16 noundef zeroext %5, i32 noundef %6) #1 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i16, align 2
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i64, align 8
  %21 = alloca %struct.WhereLoopBuilder, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i8, align 1
  %29 = alloca i32, align 4
  %30 = alloca i64, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i64, align 8
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store ptr %4, ptr %13, align 8, !tbaa !5
  store i16 %5, ptr %14, align 2, !tbaa !9
  store i32 %6, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.Parse, ptr %49, i32 0, i32 2
  %51 = load ptr, ptr %50, align 8, !tbaa !13
  store ptr %51, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 48, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #4
  store i8 0, ptr %28, align 1, !tbaa !16
  %52 = load ptr, ptr %9, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.Parse, ptr %52, i32 0, i32 0
  %54 = load ptr, ptr %53, align 8, !tbaa !17
  store ptr %54, ptr %26, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %21, i8 0, i64 48, i1 false)
  %55 = load ptr, ptr %12, align 8, !tbaa !5
  %56 = icmp ne ptr %55, null
  br i1 %56, label %57, label %63

57:                                               ; preds = %7
  %58 = load ptr, ptr %12, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.ExprList, ptr %58, i32 0, i32 0
  %60 = load i32, ptr %59, align 8, !tbaa !18
  %61 = icmp sge i32 %60, 64
  br i1 %61, label %62, label %63

62:                                               ; preds = %57
  store ptr null, ptr %12, align 8, !tbaa !5
  br label %63

63:                                               ; preds = %62, %57, %7
  %64 = load ptr, ptr %12, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 2
  store ptr %64, ptr %65, align 8, !tbaa !20
  %66 = load ptr, ptr %26, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.sqlite3, ptr %66, i32 0, i32 13
  %68 = load i16, ptr %67, align 8, !tbaa !22
  %69 = zext i16 %68 to i32
  %70 = and i32 %69, 32
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %72, label %77

72:                                               ; preds = %63
  %73 = load i16, ptr %14, align 2, !tbaa !9
  %74 = zext i16 %73 to i32
  %75 = and i32 %74, -257
  %76 = trunc i32 %75 to i16
  store i16 %76, ptr %14, align 2, !tbaa !9
  br label %77

77:                                               ; preds = %72, %63
  %78 = load ptr, ptr %10, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.SrcList, ptr %78, i32 0, i32 0
  %80 = load i32, ptr %79, align 8, !tbaa !29
  %81 = icmp sgt i32 %80, 64
  br i1 %81, label %82, label %84

82:                                               ; preds = %77
  %83 = load ptr, ptr %9, align 8, !tbaa !5
  call void (ptr, ptr, ...) @sqlite3ErrorMsg(ptr noundef %83, ptr noundef @.str, i32 noundef 64)
  store ptr null, ptr %8, align 8
  store i32 1, ptr %29, align 4
  br label %997

84:                                               ; preds = %77
  %85 = load i16, ptr %14, align 2, !tbaa !9
  %86 = zext i16 %85 to i32
  %87 = and i32 %86, 32
  %88 = icmp ne i32 %87, 0
  br i1 %88, label %89, label %90

89:                                               ; preds = %84
  br label %94

90:                                               ; preds = %84
  %91 = load ptr, ptr %10, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.SrcList, ptr %91, i32 0, i32 0
  %93 = load i32, ptr %92, align 8, !tbaa !29
  br label %94

94:                                               ; preds = %90, %89
  %95 = phi i32 [ 1, %89 ], [ %93, %90 ]
  store i32 %95, ptr %17, align 4, !tbaa !11
  %96 = load i32, ptr %17, align 4, !tbaa !11
  %97 = sub nsw i32 %96, 1
  %98 = sext i32 %97 to i64
  %99 = mul i64 %98, 88
  %100 = add i64 1000, %99
  %101 = add i64 %100, 7
  %102 = and i64 %101, -8
  %103 = trunc i64 %102 to i32
  store i32 %103, ptr %16, align 4, !tbaa !11
  %104 = load ptr, ptr %26, align 8, !tbaa !5
  %105 = load i32, ptr %16, align 4, !tbaa !11
  %106 = sext i32 %105 to i64
  %107 = add i64 %106, 96
  %108 = call ptr @sqlite3DbMallocRawNN(ptr noundef %104, i64 noundef %107)
  store ptr %108, ptr %18, align 8, !tbaa !5
  %109 = load ptr, ptr %26, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.sqlite3, ptr %109, i32 0, i32 17
  %111 = load i8, ptr %110, align 1, !tbaa !31
  %112 = icmp ne i8 %111, 0
  br i1 %112, label %113, label %116

113:                                              ; preds = %94
  %114 = load ptr, ptr %26, align 8, !tbaa !5
  %115 = load ptr, ptr %18, align 8, !tbaa !5
  call void @sqlite3DbFree(ptr noundef %114, ptr noundef %115)
  store ptr null, ptr %18, align 8, !tbaa !5
  br label %985

116:                                              ; preds = %94
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = load ptr, ptr %18, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.WhereInfo, ptr %118, i32 0, i32 0
  store ptr %117, ptr %119, align 8, !tbaa !32
  %120 = load ptr, ptr %10, align 8, !tbaa !5
  %121 = load ptr, ptr %18, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.WhereInfo, ptr %121, i32 0, i32 1
  store ptr %120, ptr %122, align 8, !tbaa !36
  %123 = load ptr, ptr %12, align 8, !tbaa !5
  %124 = load ptr, ptr %18, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.WhereInfo, ptr %124, i32 0, i32 2
  store ptr %123, ptr %125, align 8, !tbaa !37
  %126 = load ptr, ptr %13, align 8, !tbaa !5
  %127 = load ptr, ptr %18, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.WhereInfo, ptr %127, i32 0, i32 3
  store ptr %126, ptr %128, align 8, !tbaa !38
  %129 = load ptr, ptr %18, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.WhereInfo, ptr %129, i32 0, i32 5
  %131 = getelementptr inbounds [2 x i32], ptr %130, i64 0, i64 1
  store i32 -1, ptr %131, align 4, !tbaa !11
  %132 = load ptr, ptr %18, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.WhereInfo, ptr %132, i32 0, i32 5
  %134 = getelementptr inbounds [2 x i32], ptr %133, i64 0, i64 0
  store i32 -1, ptr %134, align 4, !tbaa !11
  %135 = load i32, ptr %17, align 4, !tbaa !11
  %136 = trunc i32 %135 to i8
  %137 = load ptr, ptr %18, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.WhereInfo, ptr %137, i32 0, i32 10
  store i8 %136, ptr %138, align 2, !tbaa !39
  %139 = load ptr, ptr %19, align 8, !tbaa !5
  %140 = call i32 @sqlite3VdbeMakeLabel(ptr noundef %139)
  %141 = load ptr, ptr %18, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.WhereInfo, ptr %141, i32 0, i32 6
  store i32 %140, ptr %142, align 4, !tbaa !40
  %143 = load ptr, ptr %18, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.WhereInfo, ptr %143, i32 0, i32 7
  store i32 %140, ptr %144, align 8, !tbaa !41
  %145 = load i16, ptr %14, align 2, !tbaa !9
  %146 = load ptr, ptr %18, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.WhereInfo, ptr %146, i32 0, i32 9
  store i16 %145, ptr %147, align 8, !tbaa !42
  %148 = load i32, ptr %15, align 4, !tbaa !11
  %149 = trunc i32 %148 to i16
  %150 = load ptr, ptr %18, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.WhereInfo, ptr %150, i32 0, i32 4
  store i16 %149, ptr %151, align 8, !tbaa !43
  %152 = load ptr, ptr %9, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.Parse, ptr %152, i32 0, i32 40
  %154 = load i32, ptr %153, align 4, !tbaa !44
  %155 = load ptr, ptr %18, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.WhereInfo, ptr %155, i32 0, i32 8
  store i32 %154, ptr %156, align 4, !tbaa !45
  %157 = load ptr, ptr %18, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.WhereInfo, ptr %157, i32 0, i32 11
  call void @llvm.memset.p0.i64(ptr align 1 %158, i8 0, i64 37, i1 false)
  %159 = load ptr, ptr %18, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.WhereInfo, ptr %159, i32 0, i32 23
  %161 = getelementptr inbounds [1 x %struct.WhereLevel], ptr %160, i64 0, i64 0
  %162 = load i32, ptr %17, align 4, !tbaa !11
  %163 = sext i32 %162 to i64
  %164 = mul i64 %163, 88
  %165 = add i64 96, %164
  call void @llvm.memset.p0.i64(ptr align 8 %161, i8 0, i64 %165, i1 false)
  %166 = load ptr, ptr %18, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.WhereInfo, ptr %166, i32 0, i32 22
  store ptr %167, ptr %22, align 8, !tbaa !5
  %168 = load ptr, ptr %18, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 0
  store ptr %168, ptr %169, align 8, !tbaa !46
  %170 = load ptr, ptr %18, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.WhereInfo, ptr %170, i32 0, i32 21
  %172 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 1
  store ptr %171, ptr %172, align 8, !tbaa !47
  %173 = load ptr, ptr %18, align 8, !tbaa !5
  %174 = load i32, ptr %16, align 4, !tbaa !11
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds i8, ptr %173, i64 %175
  %177 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 3
  store ptr %176, ptr %177, align 8, !tbaa !48
  %178 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 3
  %179 = load ptr, ptr %178, align 8, !tbaa !48
  call void @whereLoopInit(ptr noundef %179)
  %180 = load ptr, ptr %22, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.WhereMaskSet, ptr %180, i32 0, i32 0
  store i32 0, ptr %181, align 4, !tbaa !49
  %182 = load ptr, ptr %18, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.WhereInfo, ptr %182, i32 0, i32 21
  %184 = load ptr, ptr %18, align 8, !tbaa !5
  call void @sqlite3WhereClauseInit(ptr noundef %183, ptr noundef %184)
  %185 = load ptr, ptr %18, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.WhereInfo, ptr %185, i32 0, i32 21
  %187 = load ptr, ptr %11, align 8, !tbaa !5
  call void @sqlite3WhereSplit(ptr noundef %186, ptr noundef %187, i8 noundef zeroext 28)
  store i32 0, ptr %25, align 4, !tbaa !11
  br label %188

188:                                              ; preds = %237, %116
  %189 = load i32, ptr %25, align 4, !tbaa !11
  %190 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 1
  %191 = load ptr, ptr %190, align 8, !tbaa !47
  %192 = getelementptr inbounds %struct.WhereClause, ptr %191, i32 0, i32 3
  %193 = load i32, ptr %192, align 4, !tbaa !50
  %194 = icmp slt i32 %189, %193
  br i1 %194, label %195, label %240

195:                                              ; preds = %188
  %196 = load i32, ptr %17, align 4, !tbaa !11
  %197 = icmp eq i32 %196, 0
  br i1 %197, label %210, label %198

198:                                              ; preds = %195
  %199 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 1
  %200 = load ptr, ptr %199, align 8, !tbaa !47
  %201 = getelementptr inbounds %struct.WhereClause, ptr %200, i32 0, i32 5
  %202 = load ptr, ptr %201, align 8, !tbaa !51
  %203 = load i32, ptr %25, align 4, !tbaa !11
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds %struct.WhereTerm, ptr %202, i64 %204
  %206 = getelementptr inbounds %struct.WhereTerm, ptr %205, i32 0, i32 0
  %207 = load ptr, ptr %206, align 8, !tbaa !52
  %208 = call i32 @sqlite3ExprIsConstantNotJoin(ptr noundef %207)
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %210, label %236

210:                                              ; preds = %198, %195
  %211 = load ptr, ptr %9, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 1
  %213 = load ptr, ptr %212, align 8, !tbaa !47
  %214 = getelementptr inbounds %struct.WhereClause, ptr %213, i32 0, i32 5
  %215 = load ptr, ptr %214, align 8, !tbaa !51
  %216 = load i32, ptr %25, align 4, !tbaa !11
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds %struct.WhereTerm, ptr %215, i64 %217
  %219 = getelementptr inbounds %struct.WhereTerm, ptr %218, i32 0, i32 0
  %220 = load ptr, ptr %219, align 8, !tbaa !52
  %221 = load ptr, ptr %18, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.WhereInfo, ptr %221, i32 0, i32 7
  %223 = load i32, ptr %222, align 8, !tbaa !41
  call void @sqlite3ExprIfFalse(ptr noundef %211, ptr noundef %220, i32 noundef %223, i32 noundef 16)
  %224 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 1
  %225 = load ptr, ptr %224, align 8, !tbaa !47
  %226 = getelementptr inbounds %struct.WhereClause, ptr %225, i32 0, i32 5
  %227 = load ptr, ptr %226, align 8, !tbaa !51
  %228 = load i32, ptr %25, align 4, !tbaa !11
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds %struct.WhereTerm, ptr %227, i64 %229
  %231 = getelementptr inbounds %struct.WhereTerm, ptr %230, i32 0, i32 3
  %232 = load i16, ptr %231, align 2, !tbaa !54
  %233 = zext i16 %232 to i32
  %234 = or i32 %233, 4
  %235 = trunc i32 %234 to i16
  store i16 %235, ptr %231, align 2, !tbaa !54
  br label %236

236:                                              ; preds = %210, %198
  br label %237

237:                                              ; preds = %236
  %238 = load i32, ptr %25, align 4, !tbaa !11
  %239 = add nsw i32 %238, 1
  store i32 %239, ptr %25, align 4, !tbaa !11
  br label %188, !llvm.loop !55

240:                                              ; preds = %188
  %241 = load i32, ptr %17, align 4, !tbaa !11
  %242 = icmp eq i32 %241, 0
  br i1 %242, label %243, label %262

243:                                              ; preds = %240
  %244 = load ptr, ptr %12, align 8, !tbaa !5
  %245 = icmp ne ptr %244, null
  br i1 %245, label %246, label %253

246:                                              ; preds = %243
  %247 = load ptr, ptr %12, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.ExprList, ptr %247, i32 0, i32 0
  %249 = load i32, ptr %248, align 8, !tbaa !18
  %250 = trunc i32 %249 to i8
  %251 = load ptr, ptr %18, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.WhereInfo, ptr %251, i32 0, i32 11
  store i8 %250, ptr %252, align 1, !tbaa !57
  br label %253

253:                                              ; preds = %246, %243
  %254 = load i16, ptr %14, align 2, !tbaa !9
  %255 = zext i16 %254 to i32
  %256 = and i32 %255, 256
  %257 = icmp ne i32 %256, 0
  br i1 %257, label %258, label %261

258:                                              ; preds = %253
  %259 = load ptr, ptr %18, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.WhereInfo, ptr %259, i32 0, i32 15
  store i8 1, ptr %260, align 1, !tbaa !58
  br label %261

261:                                              ; preds = %258, %253
  br label %262

262:                                              ; preds = %261, %240
  store i32 0, ptr %25, align 4, !tbaa !11
  br label %263

263:                                              ; preds = %286, %262
  %264 = load i32, ptr %25, align 4, !tbaa !11
  %265 = load ptr, ptr %10, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.SrcList, ptr %265, i32 0, i32 0
  %267 = load i32, ptr %266, align 8, !tbaa !29
  %268 = icmp slt i32 %264, %267
  br i1 %268, label %269, label %289

269:                                              ; preds = %263
  %270 = load ptr, ptr %22, align 8, !tbaa !5
  %271 = load ptr, ptr %10, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.SrcList, ptr %271, i32 0, i32 2
  %273 = load i32, ptr %25, align 4, !tbaa !11
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %272, i64 0, i64 %274
  %276 = getelementptr inbounds %struct.SrcList_item, ptr %275, i32 0, i32 11
  %277 = load i32, ptr %276, align 4, !tbaa !59
  call void @createMask(ptr noundef %270, i32 noundef %277)
  %278 = load ptr, ptr %9, align 8, !tbaa !5
  %279 = load ptr, ptr %10, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.SrcList, ptr %279, i32 0, i32 2
  %281 = load i32, ptr %25, align 4, !tbaa !11
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %280, i64 0, i64 %282
  %284 = load ptr, ptr %18, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.WhereInfo, ptr %284, i32 0, i32 21
  call void @sqlite3WhereTabFuncArgs(ptr noundef %278, ptr noundef %283, ptr noundef %285)
  br label %286

286:                                              ; preds = %269
  %287 = load i32, ptr %25, align 4, !tbaa !11
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr %25, align 4, !tbaa !11
  br label %263, !llvm.loop !62

289:                                              ; preds = %263
  %290 = load ptr, ptr %10, align 8, !tbaa !5
  %291 = load ptr, ptr %18, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.WhereInfo, ptr %291, i32 0, i32 21
  call void @sqlite3WhereExprAnalyze(ptr noundef %290, ptr noundef %292)
  %293 = load ptr, ptr %26, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.sqlite3, ptr %293, i32 0, i32 17
  %295 = load i8, ptr %294, align 1, !tbaa !31
  %296 = icmp ne i8 %295, 0
  br i1 %296, label %297, label %298

297:                                              ; preds = %289
  br label %985

298:                                              ; preds = %289
  %299 = load i16, ptr %14, align 2, !tbaa !9
  %300 = zext i16 %299 to i32
  %301 = and i32 %300, 256
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %303, label %329

303:                                              ; preds = %298
  %304 = load ptr, ptr %9, align 8, !tbaa !5
  %305 = load ptr, ptr %10, align 8, !tbaa !5
  %306 = load ptr, ptr %18, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.WhereInfo, ptr %306, i32 0, i32 21
  %308 = load ptr, ptr %13, align 8, !tbaa !5
  %309 = call i32 @isDistinctRedundant(ptr noundef %304, ptr noundef %305, ptr noundef %307, ptr noundef %308)
  %310 = icmp ne i32 %309, 0
  br i1 %310, label %311, label %314

311:                                              ; preds = %303
  %312 = load ptr, ptr %18, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.WhereInfo, ptr %312, i32 0, i32 15
  store i8 1, ptr %313, align 1, !tbaa !58
  br label %328

314:                                              ; preds = %303
  %315 = load ptr, ptr %12, align 8, !tbaa !5
  %316 = icmp eq ptr %315, null
  br i1 %316, label %317, label %327

317:                                              ; preds = %314
  %318 = load ptr, ptr %18, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.WhereInfo, ptr %318, i32 0, i32 9
  %320 = load i16, ptr %319, align 8, !tbaa !42
  %321 = zext i16 %320 to i32
  %322 = or i32 %321, 128
  %323 = trunc i32 %322 to i16
  store i16 %323, ptr %319, align 8, !tbaa !42
  %324 = load ptr, ptr %13, align 8, !tbaa !5
  %325 = load ptr, ptr %18, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.WhereInfo, ptr %325, i32 0, i32 2
  store ptr %324, ptr %326, align 8, !tbaa !37
  br label %327

327:                                              ; preds = %317, %314
  br label %328

328:                                              ; preds = %327, %311
  br label %329

329:                                              ; preds = %328, %298
  %330 = load i32, ptr %17, align 4, !tbaa !11
  %331 = icmp ne i32 %330, 1
  br i1 %331, label %335, label %332

332:                                              ; preds = %329
  %333 = call i32 @whereShortCut(ptr noundef %21)
  %334 = icmp eq i32 %333, 0
  br i1 %334, label %335, label %369

335:                                              ; preds = %332, %329
  %336 = call i32 @whereLoopAddAll(ptr noundef %21)
  store i32 %336, ptr %27, align 4, !tbaa !11
  %337 = load i32, ptr %27, align 4, !tbaa !11
  %338 = icmp ne i32 %337, 0
  br i1 %338, label %339, label %340

339:                                              ; preds = %335
  br label %985

340:                                              ; preds = %335
  %341 = load ptr, ptr %18, align 8, !tbaa !5
  %342 = call i32 @wherePathSolver(ptr noundef %341, i16 noundef signext 0)
  %343 = load ptr, ptr %26, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.sqlite3, ptr %343, i32 0, i32 17
  %345 = load i8, ptr %344, align 1, !tbaa !31
  %346 = icmp ne i8 %345, 0
  br i1 %346, label %347, label %348

347:                                              ; preds = %340
  br label %985

348:                                              ; preds = %340
  %349 = load ptr, ptr %18, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.WhereInfo, ptr %349, i32 0, i32 2
  %351 = load ptr, ptr %350, align 8, !tbaa !37
  %352 = icmp ne ptr %351, null
  br i1 %352, label %353, label %368

353:                                              ; preds = %348
  %354 = load ptr, ptr %18, align 8, !tbaa !5
  %355 = load ptr, ptr %18, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.WhereInfo, ptr %355, i32 0, i32 20
  %357 = load i16, ptr %356, align 8, !tbaa !63
  %358 = sext i16 %357 to i32
  %359 = add nsw i32 %358, 1
  %360 = trunc i32 %359 to i16
  %361 = call i32 @wherePathSolver(ptr noundef %354, i16 noundef signext %360)
  %362 = load ptr, ptr %26, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.sqlite3, ptr %362, i32 0, i32 17
  %364 = load i8, ptr %363, align 1, !tbaa !31
  %365 = icmp ne i8 %364, 0
  br i1 %365, label %366, label %367

366:                                              ; preds = %353
  br label %985

367:                                              ; preds = %353
  br label %368

368:                                              ; preds = %367, %348
  br label %369

369:                                              ; preds = %368, %332
  %370 = load ptr, ptr %18, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.WhereInfo, ptr %370, i32 0, i32 2
  %372 = load ptr, ptr %371, align 8, !tbaa !37
  %373 = icmp eq ptr %372, null
  br i1 %373, label %374, label %383

374:                                              ; preds = %369
  %375 = load ptr, ptr %26, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.sqlite3, ptr %375, i32 0, i32 6
  %377 = load i32, ptr %376, align 4, !tbaa !64
  %378 = and i32 %377, 131072
  %379 = icmp ne i32 %378, 0
  br i1 %379, label %380, label %383

380:                                              ; preds = %374
  %381 = load ptr, ptr %18, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.WhereInfo, ptr %381, i32 0, i32 19
  store i64 -1, ptr %382, align 8, !tbaa !65
  br label %383

383:                                              ; preds = %380, %374, %369
  %384 = load ptr, ptr %9, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.Parse, ptr %384, i32 0, i32 16
  %386 = load i32, ptr %385, align 8, !tbaa !66
  %387 = icmp ne i32 %386, 0
  br i1 %387, label %394, label %388

388:                                              ; preds = %383
  %389 = load ptr, ptr %26, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.sqlite3, ptr %389, i32 0, i32 17
  %391 = load i8, ptr %390, align 1, !tbaa !31
  %392 = zext i8 %391 to i32
  %393 = icmp ne i32 %392, 0
  br i1 %393, label %394, label %395

394:                                              ; preds = %388, %383
  br label %985

395:                                              ; preds = %388
  %396 = load ptr, ptr %18, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.WhereInfo, ptr %396, i32 0, i32 10
  %398 = load i8, ptr %397, align 2, !tbaa !39
  %399 = zext i8 %398 to i32
  %400 = icmp sge i32 %399, 2
  br i1 %400, label %401, label %537

401:                                              ; preds = %395
  %402 = load ptr, ptr %13, align 8, !tbaa !5
  %403 = icmp ne ptr %402, null
  br i1 %403, label %404, label %537

404:                                              ; preds = %401
  %405 = load ptr, ptr %26, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.sqlite3, ptr %405, i32 0, i32 13
  %407 = load i16, ptr %406, align 8, !tbaa !22
  %408 = zext i16 %407 to i32
  %409 = and i32 %408, 1024
  %410 = icmp eq i32 %409, 0
  br i1 %410, label %411, label %537

411:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  %412 = load ptr, ptr %22, align 8, !tbaa !5
  %413 = load ptr, ptr %13, align 8, !tbaa !5
  %414 = call i64 @sqlite3WhereExprListUsage(ptr noundef %412, ptr noundef %413)
  store i64 %414, ptr %30, align 8, !tbaa !67
  %415 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 2
  %416 = load ptr, ptr %415, align 8, !tbaa !20
  %417 = icmp ne ptr %416, null
  br i1 %417, label %418, label %425

418:                                              ; preds = %411
  %419 = load ptr, ptr %22, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 2
  %421 = load ptr, ptr %420, align 8, !tbaa !20
  %422 = call i64 @sqlite3WhereExprListUsage(ptr noundef %419, ptr noundef %421)
  %423 = load i64, ptr %30, align 8, !tbaa !67
  %424 = or i64 %423, %422
  store i64 %424, ptr %30, align 8, !tbaa !67
  br label %425

425:                                              ; preds = %418, %411
  br label %426

426:                                              ; preds = %535, %425
  %427 = load ptr, ptr %18, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.WhereInfo, ptr %427, i32 0, i32 10
  %429 = load i8, ptr %428, align 2, !tbaa !39
  %430 = zext i8 %429 to i32
  %431 = icmp sge i32 %430, 2
  br i1 %431, label %432, label %536

432:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  %433 = load ptr, ptr %18, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.WhereInfo, ptr %433, i32 0, i32 23
  %435 = load ptr, ptr %18, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.WhereInfo, ptr %435, i32 0, i32 10
  %437 = load i8, ptr %436, align 2, !tbaa !39
  %438 = zext i8 %437 to i32
  %439 = sub nsw i32 %438, 1
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds [1 x %struct.WhereLevel], ptr %434, i64 0, i64 %440
  %442 = getelementptr inbounds %struct.WhereLevel, ptr %441, i32 0, i32 18
  %443 = load ptr, ptr %442, align 8, !tbaa !68
  store ptr %443, ptr %24, align 8, !tbaa !5
  %444 = load ptr, ptr %18, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.WhereInfo, ptr %444, i32 0, i32 1
  %446 = load ptr, ptr %445, align 8, !tbaa !36
  %447 = getelementptr inbounds %struct.SrcList, ptr %446, i32 0, i32 2
  %448 = load ptr, ptr %24, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.WhereLoop, ptr %448, i32 0, i32 2
  %450 = load i8, ptr %449, align 8, !tbaa !70
  %451 = zext i8 %450 to i64
  %452 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %447, i64 0, i64 %451
  %453 = getelementptr inbounds %struct.SrcList_item, ptr %452, i32 0, i32 9
  %454 = getelementptr inbounds %struct.anon.2, ptr %453, i32 0, i32 0
  %455 = load i8, ptr %454, align 4, !tbaa !72
  %456 = zext i8 %455 to i32
  %457 = and i32 %456, 8
  %458 = icmp eq i32 %457, 0
  br i1 %458, label %459, label %460

459:                                              ; preds = %432
  store i32 10, ptr %29, align 4
  br label %533

460:                                              ; preds = %432
  %461 = load i16, ptr %14, align 2, !tbaa !9
  %462 = zext i16 %461 to i32
  %463 = and i32 %462, 256
  %464 = icmp eq i32 %463, 0
  br i1 %464, label %465, label %472

465:                                              ; preds = %460
  %466 = load ptr, ptr %24, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.WhereLoop, ptr %466, i32 0, i32 8
  %468 = load i32, ptr %467, align 8, !tbaa !73
  %469 = and i32 %468, 4096
  %470 = icmp eq i32 %469, 0
  br i1 %470, label %471, label %472

471:                                              ; preds = %465
  store i32 10, ptr %29, align 4
  br label %533

472:                                              ; preds = %465, %460
  %473 = load i64, ptr %30, align 8, !tbaa !67
  %474 = load ptr, ptr %24, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.WhereLoop, ptr %474, i32 0, i32 1
  %476 = load i64, ptr %475, align 8, !tbaa !74
  %477 = and i64 %473, %476
  %478 = icmp ne i64 %477, 0
  br i1 %478, label %479, label %480

479:                                              ; preds = %472
  store i32 10, ptr %29, align 4
  br label %533

480:                                              ; preds = %472
  %481 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 1
  %482 = load ptr, ptr %481, align 8, !tbaa !47
  %483 = getelementptr inbounds %struct.WhereClause, ptr %482, i32 0, i32 5
  %484 = load ptr, ptr %483, align 8, !tbaa !51
  %485 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 1
  %486 = load ptr, ptr %485, align 8, !tbaa !47
  %487 = getelementptr inbounds %struct.WhereClause, ptr %486, i32 0, i32 3
  %488 = load i32, ptr %487, align 4, !tbaa !50
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds %struct.WhereTerm, ptr %484, i64 %489
  store ptr %490, ptr %32, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.WhereLoopBuilder, ptr %21, i32 0, i32 1
  %492 = load ptr, ptr %491, align 8, !tbaa !47
  %493 = getelementptr inbounds %struct.WhereClause, ptr %492, i32 0, i32 5
  %494 = load ptr, ptr %493, align 8, !tbaa !51
  store ptr %494, ptr %31, align 8, !tbaa !5
  br label %495

495:                                              ; preds = %518, %480
  %496 = load ptr, ptr %31, align 8, !tbaa !5
  %497 = load ptr, ptr %32, align 8, !tbaa !5
  %498 = icmp ult ptr %496, %497
  br i1 %498, label %499, label %521

499:                                              ; preds = %495
  %500 = load ptr, ptr %31, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.WhereTerm, ptr %500, i32 0, i32 12
  %502 = load i64, ptr %501, align 8, !tbaa !75
  %503 = load ptr, ptr %24, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.WhereLoop, ptr %503, i32 0, i32 1
  %505 = load i64, ptr %504, align 8, !tbaa !74
  %506 = and i64 %502, %505
  %507 = icmp ne i64 %506, 0
  br i1 %507, label %508, label %517

508:                                              ; preds = %499
  %509 = load ptr, ptr %31, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.WhereTerm, ptr %509, i32 0, i32 0
  %511 = load ptr, ptr %510, align 8, !tbaa !52
  %512 = getelementptr inbounds %struct.Expr, ptr %511, i32 0, i32 2
  %513 = load i32, ptr %512, align 4, !tbaa !76
  %514 = and i32 %513, 1
  %515 = icmp ne i32 %514, 0
  br i1 %515, label %517, label %516

516:                                              ; preds = %508
  br label %521

517:                                              ; preds = %508, %499
  br label %518

518:                                              ; preds = %517
  %519 = load ptr, ptr %31, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.WhereTerm, ptr %519, i32 1
  store ptr %520, ptr %31, align 8, !tbaa !5
  br label %495, !llvm.loop !78

521:                                              ; preds = %516, %495
  %522 = load ptr, ptr %31, align 8, !tbaa !5
  %523 = load ptr, ptr %32, align 8, !tbaa !5
  %524 = icmp ult ptr %522, %523
  br i1 %524, label %525, label %526

525:                                              ; preds = %521
  store i32 10, ptr %29, align 4
  br label %533

526:                                              ; preds = %521
  %527 = load ptr, ptr %18, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.WhereInfo, ptr %527, i32 0, i32 10
  %529 = load i8, ptr %528, align 2, !tbaa !39
  %530 = add i8 %529, -1
  store i8 %530, ptr %528, align 2, !tbaa !39
  %531 = load i32, ptr %17, align 4, !tbaa !11
  %532 = add nsw i32 %531, -1
  store i32 %532, ptr %17, align 4, !tbaa !11
  store i32 0, ptr %29, align 4
  br label %533

533:                                              ; preds = %526, %525, %479, %471, %459
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  %534 = load i32, ptr %29, align 4
  switch i32 %534, label %999 [
    i32 0, label %535
    i32 10, label %536
  ]

535:                                              ; preds = %533
  br label %426, !llvm.loop !79

536:                                              ; preds = %533, %426
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  br label %537

537:                                              ; preds = %536, %404, %401, %395
  %538 = load ptr, ptr %18, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.WhereInfo, ptr %538, i32 0, i32 20
  %540 = load i16, ptr %539, align 8, !tbaa !63
  %541 = sext i16 %540 to i32
  %542 = load ptr, ptr %18, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.WhereInfo, ptr %542, i32 0, i32 0
  %544 = load ptr, ptr %543, align 8, !tbaa !32
  %545 = getelementptr inbounds %struct.Parse, ptr %544, i32 0, i32 40
  %546 = load i32, ptr %545, align 4, !tbaa !44
  %547 = add i32 %546, %541
  store i32 %547, ptr %545, align 4, !tbaa !44
  %548 = load i16, ptr %14, align 2, !tbaa !9
  %549 = zext i16 %548 to i32
  %550 = and i32 %549, 4
  %551 = icmp ne i32 %550, 0
  br i1 %551, label %552, label %613

552:                                              ; preds = %537
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %553 = load ptr, ptr %18, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.WhereInfo, ptr %553, i32 0, i32 23
  %555 = getelementptr inbounds [1 x %struct.WhereLevel], ptr %554, i64 0, i64 0
  %556 = getelementptr inbounds %struct.WhereLevel, ptr %555, i32 0, i32 18
  %557 = load ptr, ptr %556, align 8, !tbaa !68
  %558 = getelementptr inbounds %struct.WhereLoop, ptr %557, i32 0, i32 8
  %559 = load i32, ptr %558, align 8, !tbaa !73
  store i32 %559, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %560 = load i32, ptr %33, align 4, !tbaa !11
  %561 = and i32 %560, 4096
  %562 = icmp ne i32 %561, 0
  %563 = zext i1 %562 to i32
  store i32 %563, ptr %34, align 4, !tbaa !11
  %564 = load i32, ptr %34, align 4, !tbaa !11
  %565 = icmp ne i32 %564, 0
  br i1 %565, label %575, label %566

566:                                              ; preds = %552
  %567 = load i16, ptr %14, align 2, !tbaa !9
  %568 = zext i16 %567 to i32
  %569 = and i32 %568, 8
  %570 = icmp ne i32 %569, 0
  br i1 %570, label %571, label %612

571:                                              ; preds = %566
  %572 = load i32, ptr %33, align 4, !tbaa !11
  %573 = and i32 %572, 1024
  %574 = icmp eq i32 0, %573
  br i1 %574, label %575, label %612

575:                                              ; preds = %571, %552
  %576 = load i32, ptr %34, align 4, !tbaa !11
  %577 = icmp ne i32 %576, 0
  %578 = zext i1 %577 to i64
  %579 = select i1 %577, i32 1, i32 2
  %580 = trunc i32 %579 to i8
  %581 = load ptr, ptr %18, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.WhereInfo, ptr %581, i32 0, i32 13
  store i8 %580, ptr %582, align 1, !tbaa !80
  %583 = load ptr, ptr %10, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.SrcList, ptr %583, i32 0, i32 2
  %585 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %584, i64 0, i64 0
  %586 = getelementptr inbounds %struct.SrcList_item, ptr %585, i32 0, i32 4
  %587 = load ptr, ptr %586, align 8, !tbaa !81
  %588 = getelementptr inbounds %struct.Table, ptr %587, i32 0, i32 9
  %589 = load i32, ptr %588, align 8, !tbaa !82
  %590 = and i32 %589, 32
  %591 = icmp eq i32 %590, 0
  br i1 %591, label %592, label %611

592:                                              ; preds = %575
  %593 = load i32, ptr %33, align 4, !tbaa !11
  %594 = and i32 %593, 64
  %595 = icmp ne i32 %594, 0
  br i1 %595, label %596, label %611

596:                                              ; preds = %592
  %597 = load i16, ptr %14, align 2, !tbaa !9
  %598 = zext i16 %597 to i32
  %599 = and i32 %598, 8
  %600 = icmp ne i32 %599, 0
  br i1 %600, label %601, label %602

601:                                              ; preds = %596
  store i8 8, ptr %28, align 1, !tbaa !16
  br label %602

602:                                              ; preds = %601, %596
  %603 = load i32, ptr %33, align 4, !tbaa !11
  %604 = and i32 %603, -65
  %605 = load ptr, ptr %18, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.WhereInfo, ptr %605, i32 0, i32 23
  %607 = getelementptr inbounds [1 x %struct.WhereLevel], ptr %606, i64 0, i64 0
  %608 = getelementptr inbounds %struct.WhereLevel, ptr %607, i32 0, i32 18
  %609 = load ptr, ptr %608, align 8, !tbaa !68
  %610 = getelementptr inbounds %struct.WhereLoop, ptr %609, i32 0, i32 8
  store i32 %604, ptr %610, align 8, !tbaa !73
  br label %611

611:                                              ; preds = %602, %592, %575
  br label %612

612:                                              ; preds = %611, %571, %566
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %613

613:                                              ; preds = %612, %537
  store i32 0, ptr %25, align 4, !tbaa !11
  %614 = load ptr, ptr %18, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.WhereInfo, ptr %614, i32 0, i32 23
  %616 = getelementptr inbounds [1 x %struct.WhereLevel], ptr %615, i64 0, i64 0
  store ptr %616, ptr %23, align 8, !tbaa !5
  br label %617

617:                                              ; preds = %885, %613
  %618 = load i32, ptr %25, align 4, !tbaa !11
  %619 = load i32, ptr %17, align 4, !tbaa !11
  %620 = icmp slt i32 %618, %619
  br i1 %620, label %621, label %890

621:                                              ; preds = %617
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  %622 = load ptr, ptr %10, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.SrcList, ptr %622, i32 0, i32 2
  %624 = load ptr, ptr %23, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.WhereLevel, ptr %624, i32 0, i32 11
  %626 = load i8, ptr %625, align 4, !tbaa !84
  %627 = zext i8 %626 to i64
  %628 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %623, i64 0, i64 %627
  store ptr %628, ptr %37, align 8, !tbaa !5
  %629 = load ptr, ptr %37, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.SrcList_item, ptr %629, i32 0, i32 4
  %631 = load ptr, ptr %630, align 8, !tbaa !81
  store ptr %631, ptr %35, align 8, !tbaa !5
  %632 = load ptr, ptr %26, align 8, !tbaa !5
  %633 = load ptr, ptr %35, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.Table, ptr %633, i32 0, i32 20
  %635 = load ptr, ptr %634, align 8, !tbaa !85
  %636 = call i32 @sqlite3SchemaToIndex(ptr noundef %632, ptr noundef %635)
  store i32 %636, ptr %36, align 4, !tbaa !11
  %637 = load ptr, ptr %23, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.WhereLevel, ptr %637, i32 0, i32 18
  %639 = load ptr, ptr %638, align 8, !tbaa !68
  store ptr %639, ptr %24, align 8, !tbaa !5
  %640 = load ptr, ptr %35, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.Table, ptr %640, i32 0, i32 9
  %642 = load i32, ptr %641, align 8, !tbaa !82
  %643 = and i32 %642, 2
  %644 = icmp ne i32 %643, 0
  br i1 %644, label %650, label %645

645:                                              ; preds = %621
  %646 = load ptr, ptr %35, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.Table, ptr %646, i32 0, i32 3
  %648 = load ptr, ptr %647, align 8, !tbaa !86
  %649 = icmp ne ptr %648, null
  br i1 %649, label %650, label %651

650:                                              ; preds = %645, %621
  br label %757

651:                                              ; preds = %645
  %652 = load ptr, ptr %24, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.WhereLoop, ptr %652, i32 0, i32 8
  %654 = load i32, ptr %653, align 8, !tbaa !73
  %655 = and i32 %654, 1024
  %656 = icmp ne i32 %655, 0
  br i1 %656, label %657, label %668

657:                                              ; preds = %651
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  %658 = load ptr, ptr %26, align 8, !tbaa !5
  %659 = load ptr, ptr %35, align 8, !tbaa !5
  %660 = call ptr @sqlite3GetVTable(ptr noundef %658, ptr noundef %659)
  store ptr %660, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  %661 = load ptr, ptr %37, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.SrcList_item, ptr %661, i32 0, i32 11
  %663 = load i32, ptr %662, align 4, !tbaa !59
  store i32 %663, ptr %39, align 4, !tbaa !11
  %664 = load ptr, ptr %19, align 8, !tbaa !5
  %665 = load i32, ptr %39, align 4, !tbaa !11
  %666 = load ptr, ptr %38, align 8, !tbaa !5
  %667 = call i32 @sqlite3VdbeAddOp4(ptr noundef %664, i32 noundef 156, i32 noundef %665, i32 noundef 0, i32 noundef 0, ptr noundef %666, i32 noundef -8)
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  br label %756

668:                                              ; preds = %651
  %669 = load ptr, ptr %35, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.Table, ptr %669, i32 0, i32 16
  %671 = load i32, ptr %670, align 4, !tbaa !87
  %672 = icmp ne i32 %671, 0
  br i1 %672, label %673, label %674

673:                                              ; preds = %668
  br label %755

674:                                              ; preds = %668
  %675 = load ptr, ptr %24, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.WhereLoop, ptr %675, i32 0, i32 8
  %677 = load i32, ptr %676, align 8, !tbaa !73
  %678 = and i32 %677, 64
  %679 = icmp eq i32 %678, 0
  br i1 %679, label %680, label %745

680:                                              ; preds = %674
  %681 = load i16, ptr %14, align 2, !tbaa !9
  %682 = zext i16 %681 to i32
  %683 = and i32 %682, 32
  %684 = icmp eq i32 %683, 0
  br i1 %684, label %685, label %745

685:                                              ; preds = %680
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  store i32 105, ptr %40, align 4, !tbaa !11
  %686 = load ptr, ptr %18, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.WhereInfo, ptr %686, i32 0, i32 13
  %688 = load i8, ptr %687, align 1, !tbaa !80
  %689 = zext i8 %688 to i32
  %690 = icmp ne i32 %689, 0
  br i1 %690, label %691, label %698

691:                                              ; preds = %685
  store i32 106, ptr %40, align 4, !tbaa !11
  %692 = load ptr, ptr %37, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.SrcList_item, ptr %692, i32 0, i32 11
  %694 = load i32, ptr %693, align 4, !tbaa !59
  %695 = load ptr, ptr %18, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.WhereInfo, ptr %695, i32 0, i32 5
  %697 = getelementptr inbounds [2 x i32], ptr %696, i64 0, i64 0
  store i32 %694, ptr %697, align 4, !tbaa !11
  br label %698

698:                                              ; preds = %691, %685
  %699 = load ptr, ptr %9, align 8, !tbaa !5
  %700 = load ptr, ptr %37, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.SrcList_item, ptr %700, i32 0, i32 11
  %702 = load i32, ptr %701, align 4, !tbaa !59
  %703 = load i32, ptr %36, align 4, !tbaa !11
  %704 = load ptr, ptr %35, align 8, !tbaa !5
  %705 = load i32, ptr %40, align 4, !tbaa !11
  call void @sqlite3OpenTable(ptr noundef %699, i32 noundef %702, i32 noundef %703, ptr noundef %704, i32 noundef %705)
  %706 = load ptr, ptr %18, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.WhereInfo, ptr %706, i32 0, i32 13
  %708 = load i8, ptr %707, align 1, !tbaa !80
  %709 = zext i8 %708 to i32
  %710 = icmp eq i32 %709, 0
  br i1 %710, label %711, label %741

711:                                              ; preds = %698
  %712 = load ptr, ptr %35, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.Table, ptr %712, i32 0, i32 11
  %714 = load i16, ptr %713, align 2, !tbaa !88
  %715 = sext i16 %714 to i32
  %716 = icmp slt i32 %715, 64
  br i1 %716, label %717, label %741

717:                                              ; preds = %711
  %718 = load ptr, ptr %35, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.Table, ptr %718, i32 0, i32 9
  %720 = load i32, ptr %719, align 8, !tbaa !82
  %721 = and i32 %720, 32
  %722 = icmp eq i32 %721, 0
  br i1 %722, label %723, label %741

723:                                              ; preds = %717
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  %724 = load ptr, ptr %37, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.SrcList_item, ptr %724, i32 0, i32 14
  %726 = load i64, ptr %725, align 8, !tbaa !89
  store i64 %726, ptr %41, align 8, !tbaa !67
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  store i32 0, ptr %42, align 4, !tbaa !11
  br label %727

727:                                              ; preds = %731, %723
  %728 = load i64, ptr %41, align 8, !tbaa !67
  %729 = icmp ne i64 %728, 0
  br i1 %729, label %730, label %736

730:                                              ; preds = %727
  br label %731

731:                                              ; preds = %730
  %732 = load i64, ptr %41, align 8, !tbaa !67
  %733 = lshr i64 %732, 1
  store i64 %733, ptr %41, align 8, !tbaa !67
  %734 = load i32, ptr %42, align 4, !tbaa !11
  %735 = add nsw i32 %734, 1
  store i32 %735, ptr %42, align 4, !tbaa !11
  br label %727, !llvm.loop !90

736:                                              ; preds = %727
  %737 = load ptr, ptr %19, align 8, !tbaa !5
  %738 = load i32, ptr %42, align 4, !tbaa !11
  %739 = sext i32 %738 to i64
  %740 = inttoptr i64 %739 to ptr
  call void @sqlite3VdbeChangeP4(ptr noundef %737, i32 noundef -1, ptr noundef %740, i32 noundef -11)
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  br label %741

741:                                              ; preds = %736, %717, %711, %698
  %742 = load ptr, ptr %19, align 8, !tbaa !5
  %743 = load i8, ptr %28, align 1, !tbaa !16
  %744 = zext i8 %743 to i16
  call void @sqlite3VdbeChangeP5(ptr noundef %742, i16 noundef zeroext %744)
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  br label %754

745:                                              ; preds = %680, %674
  %746 = load ptr, ptr %9, align 8, !tbaa !5
  %747 = load i32, ptr %36, align 4, !tbaa !11
  %748 = load ptr, ptr %35, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.Table, ptr %748, i32 0, i32 7
  %750 = load i32, ptr %749, align 8, !tbaa !91
  %751 = load ptr, ptr %35, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.Table, ptr %751, i32 0, i32 0
  %753 = load ptr, ptr %752, align 8, !tbaa !92
  call void @sqlite3TableLock(ptr noundef %746, i32 noundef %747, i32 noundef %750, i8 noundef zeroext 0, ptr noundef %753)
  br label %754

754:                                              ; preds = %745, %741
  br label %755

755:                                              ; preds = %754, %673
  br label %756

756:                                              ; preds = %755, %657
  br label %757

757:                                              ; preds = %756, %650
  %758 = load ptr, ptr %24, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.WhereLoop, ptr %758, i32 0, i32 8
  %760 = load i32, ptr %759, align 8, !tbaa !73
  %761 = and i32 %760, 512
  %762 = icmp ne i32 %761, 0
  br i1 %762, label %763, label %878

763:                                              ; preds = %757
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  %764 = load ptr, ptr %24, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.WhereLoop, ptr %764, i32 0, i32 7
  %766 = getelementptr inbounds %struct.anon.5, ptr %765, i32 0, i32 3
  %767 = load ptr, ptr %766, align 8, !tbaa !16
  store ptr %767, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  store i32 105, ptr %45, align 4, !tbaa !11
  %768 = load ptr, ptr %35, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.Table, ptr %768, i32 0, i32 9
  %770 = load i32, ptr %769, align 8, !tbaa !82
  %771 = and i32 %770, 32
  %772 = icmp eq i32 %771, 0
  br i1 %772, label %789, label %773

773:                                              ; preds = %763
  %774 = load ptr, ptr %43, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.Index, ptr %774, i32 0, i32 16
  %776 = load i8, ptr %775, align 1
  %777 = and i8 %776, 3
  %778 = zext i8 %777 to i32
  %779 = icmp eq i32 %778, 2
  br i1 %779, label %780, label %789

780:                                              ; preds = %773
  %781 = load i16, ptr %14, align 2, !tbaa !9
  %782 = zext i16 %781 to i32
  %783 = and i32 %782, 32
  %784 = icmp ne i32 %783, 0
  br i1 %784, label %785, label %789

785:                                              ; preds = %780
  %786 = load ptr, ptr %23, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.WhereLevel, ptr %786, i32 0, i32 1
  %788 = load i32, ptr %787, align 4, !tbaa !93
  store i32 %788, ptr %44, align 4, !tbaa !11
  store i32 0, ptr %45, align 4, !tbaa !11
  br label %839

789:                                              ; preds = %780, %773, %763
  %790 = load ptr, ptr %18, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.WhereInfo, ptr %790, i32 0, i32 13
  %792 = load i8, ptr %791, align 1, !tbaa !80
  %793 = zext i8 %792 to i32
  %794 = icmp ne i32 %793, 0
  br i1 %794, label %795, label %822

795:                                              ; preds = %789
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #4
  %796 = load ptr, ptr %37, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.SrcList_item, ptr %796, i32 0, i32 4
  %798 = load ptr, ptr %797, align 8, !tbaa !81
  %799 = getelementptr inbounds %struct.Table, ptr %798, i32 0, i32 2
  %800 = load ptr, ptr %799, align 8, !tbaa !94
  store ptr %800, ptr %46, align 8, !tbaa !5
  %801 = load i32, ptr %15, align 4, !tbaa !11
  store i32 %801, ptr %44, align 4, !tbaa !11
  br label %802

802:                                              ; preds = %811, %795
  %803 = load ptr, ptr %46, align 8, !tbaa !5
  %804 = icmp ne ptr %803, null
  br i1 %804, label %805, label %809

805:                                              ; preds = %802
  %806 = load ptr, ptr %46, align 8, !tbaa !5
  %807 = load ptr, ptr %43, align 8, !tbaa !5
  %808 = icmp ne ptr %806, %807
  br label %809

809:                                              ; preds = %805, %802
  %810 = phi i1 [ false, %802 ], [ %808, %805 ]
  br i1 %810, label %811, label %817

811:                                              ; preds = %809
  %812 = load i32, ptr %44, align 4, !tbaa !11
  %813 = add nsw i32 %812, 1
  store i32 %813, ptr %44, align 4, !tbaa !11
  %814 = load ptr, ptr %46, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.Index, ptr %814, i32 0, i32 5
  %816 = load ptr, ptr %815, align 8, !tbaa !95
  store ptr %816, ptr %46, align 8, !tbaa !5
  br label %802, !llvm.loop !97

817:                                              ; preds = %809
  store i32 106, ptr %45, align 4, !tbaa !11
  %818 = load i32, ptr %44, align 4, !tbaa !11
  %819 = load ptr, ptr %18, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.WhereInfo, ptr %819, i32 0, i32 5
  %821 = getelementptr inbounds [2 x i32], ptr %820, i64 0, i64 1
  store i32 %818, ptr %821, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  br label %838

822:                                              ; preds = %789
  %823 = load i32, ptr %15, align 4, !tbaa !11
  %824 = icmp ne i32 %823, 0
  br i1 %824, label %825, label %832

825:                                              ; preds = %822
  %826 = load i16, ptr %14, align 2, !tbaa !9
  %827 = zext i16 %826 to i32
  %828 = and i32 %827, 32
  %829 = icmp ne i32 %828, 0
  br i1 %829, label %830, label %832

830:                                              ; preds = %825
  %831 = load i32, ptr %15, align 4, !tbaa !11
  store i32 %831, ptr %44, align 4, !tbaa !11
  store i32 104, ptr %45, align 4, !tbaa !11
  br label %837

832:                                              ; preds = %825, %822
  %833 = load ptr, ptr %9, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.Parse, ptr %833, i32 0, i32 17
  %835 = load i32, ptr %834, align 4, !tbaa !98
  %836 = add nsw i32 %835, 1
  store i32 %836, ptr %834, align 4, !tbaa !98
  store i32 %835, ptr %44, align 4, !tbaa !11
  br label %837

837:                                              ; preds = %832, %830
  br label %838

838:                                              ; preds = %837, %817
  br label %839

839:                                              ; preds = %838, %785
  %840 = load i32, ptr %44, align 4, !tbaa !11
  %841 = load ptr, ptr %23, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.WhereLevel, ptr %841, i32 0, i32 2
  store i32 %840, ptr %842, align 8, !tbaa !99
  %843 = load i32, ptr %45, align 4, !tbaa !11
  %844 = icmp ne i32 %843, 0
  br i1 %844, label %845, label %877

845:                                              ; preds = %839
  %846 = load ptr, ptr %19, align 8, !tbaa !5
  %847 = load i32, ptr %45, align 4, !tbaa !11
  %848 = load i32, ptr %44, align 4, !tbaa !11
  %849 = load ptr, ptr %43, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.Index, ptr %849, i32 0, i32 11
  %851 = load i32, ptr %850, align 8, !tbaa !100
  %852 = load i32, ptr %36, align 4, !tbaa !11
  %853 = call i32 @sqlite3VdbeAddOp3(ptr noundef %846, i32 noundef %847, i32 noundef %848, i32 noundef %851, i32 noundef %852)
  %854 = load ptr, ptr %9, align 8, !tbaa !5
  %855 = load ptr, ptr %43, align 8, !tbaa !5
  call void @sqlite3VdbeSetP4KeyInfo(ptr noundef %854, ptr noundef %855)
  %856 = load ptr, ptr %24, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.WhereLoop, ptr %856, i32 0, i32 8
  %858 = load i32, ptr %857, align 8, !tbaa !73
  %859 = and i32 %858, 15
  %860 = icmp ne i32 %859, 0
  br i1 %860, label %861, label %876

861:                                              ; preds = %845
  %862 = load ptr, ptr %24, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.WhereLoop, ptr %862, i32 0, i32 8
  %864 = load i32, ptr %863, align 8, !tbaa !73
  %865 = and i32 %864, 32770
  %866 = icmp eq i32 %865, 0
  br i1 %866, label %867, label %876

867:                                              ; preds = %861
  %868 = load ptr, ptr %18, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.WhereInfo, ptr %868, i32 0, i32 9
  %870 = load i16, ptr %869, align 8, !tbaa !42
  %871 = zext i16 %870 to i32
  %872 = and i32 %871, 1
  %873 = icmp eq i32 %872, 0
  br i1 %873, label %874, label %876

874:                                              ; preds = %867
  %875 = load ptr, ptr %19, align 8, !tbaa !5
  call void @sqlite3VdbeChangeP5(ptr noundef %875, i16 noundef zeroext 2)
  br label %876

876:                                              ; preds = %874, %867, %861, %845
  br label %877

877:                                              ; preds = %876, %839
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  br label %878

878:                                              ; preds = %877, %757
  %879 = load i32, ptr %36, align 4, !tbaa !11
  %880 = icmp sge i32 %879, 0
  br i1 %880, label %881, label %884

881:                                              ; preds = %878
  %882 = load ptr, ptr %9, align 8, !tbaa !5
  %883 = load i32, ptr %36, align 4, !tbaa !11
  call void @sqlite3CodeVerifySchema(ptr noundef %882, i32 noundef %883)
  br label %884

884:                                              ; preds = %881, %878
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  br label %885

885:                                              ; preds = %884
  %886 = load i32, ptr %25, align 4, !tbaa !11
  %887 = add nsw i32 %886, 1
  store i32 %887, ptr %25, align 4, !tbaa !11
  %888 = load ptr, ptr %23, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.WhereLevel, ptr %888, i32 1
  store ptr %889, ptr %23, align 8, !tbaa !5
  br label %617, !llvm.loop !101

890:                                              ; preds = %617
  %891 = load ptr, ptr %19, align 8, !tbaa !5
  %892 = call i32 @sqlite3VdbeCurrentAddr(ptr noundef %891)
  %893 = load ptr, ptr %18, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.WhereInfo, ptr %893, i32 0, i32 17
  store i32 %892, ptr %894, align 4, !tbaa !102
  %895 = load ptr, ptr %26, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.sqlite3, ptr %895, i32 0, i32 17
  %897 = load i8, ptr %896, align 1, !tbaa !31
  %898 = icmp ne i8 %897, 0
  br i1 %898, label %899, label %900

899:                                              ; preds = %890
  br label %985

900:                                              ; preds = %890
  store i64 -1, ptr %20, align 8, !tbaa !67
  store i32 0, ptr %25, align 4, !tbaa !11
  br label %901

901:                                              ; preds = %980, %900
  %902 = load i32, ptr %25, align 4, !tbaa !11
  %903 = load i32, ptr %17, align 4, !tbaa !11
  %904 = icmp slt i32 %902, %903
  br i1 %904, label %905, label %983

905:                                              ; preds = %901
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #4
  %906 = load ptr, ptr %18, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.WhereInfo, ptr %906, i32 0, i32 23
  %908 = load i32, ptr %25, align 4, !tbaa !11
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds [1 x %struct.WhereLevel], ptr %907, i64 0, i64 %909
  store ptr %910, ptr %23, align 8, !tbaa !5
  %911 = load ptr, ptr %23, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.WhereLevel, ptr %911, i32 0, i32 18
  %913 = load ptr, ptr %912, align 8, !tbaa !68
  %914 = getelementptr inbounds %struct.WhereLoop, ptr %913, i32 0, i32 8
  %915 = load i32, ptr %914, align 8, !tbaa !73
  store i32 %915, ptr %48, align 4, !tbaa !11
  %916 = load ptr, ptr %23, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.WhereLevel, ptr %916, i32 0, i32 18
  %918 = load ptr, ptr %917, align 8, !tbaa !68
  %919 = getelementptr inbounds %struct.WhereLoop, ptr %918, i32 0, i32 8
  %920 = load i32, ptr %919, align 8, !tbaa !73
  %921 = and i32 %920, 16384
  %922 = icmp ne i32 %921, 0
  br i1 %922, label %923, label %942

923:                                              ; preds = %905
  %924 = load ptr, ptr %9, align 8, !tbaa !5
  %925 = load ptr, ptr %18, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.WhereInfo, ptr %925, i32 0, i32 21
  %927 = load ptr, ptr %10, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.SrcList, ptr %927, i32 0, i32 2
  %929 = load ptr, ptr %23, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.WhereLevel, ptr %929, i32 0, i32 11
  %931 = load i8, ptr %930, align 4, !tbaa !84
  %932 = zext i8 %931 to i64
  %933 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %928, i64 0, i64 %932
  %934 = load i64, ptr %20, align 8, !tbaa !67
  %935 = load ptr, ptr %23, align 8, !tbaa !5
  call void @constructAutomaticIndex(ptr noundef %924, ptr noundef %926, ptr noundef %933, i64 noundef %934, ptr noundef %935)
  %936 = load ptr, ptr %26, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.sqlite3, ptr %936, i32 0, i32 17
  %938 = load i8, ptr %937, align 1, !tbaa !31
  %939 = icmp ne i8 %938, 0
  br i1 %939, label %940, label %941

940:                                              ; preds = %923
  store i32 2, ptr %29, align 4
  br label %977

941:                                              ; preds = %923
  br label %942

942:                                              ; preds = %941, %905
  %943 = load ptr, ptr %9, align 8, !tbaa !5
  %944 = load ptr, ptr %10, align 8, !tbaa !5
  %945 = load ptr, ptr %23, align 8, !tbaa !5
  %946 = load i32, ptr %25, align 4, !tbaa !11
  %947 = load ptr, ptr %23, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.WhereLevel, ptr %947, i32 0, i32 11
  %949 = load i8, ptr %948, align 4, !tbaa !84
  %950 = zext i8 %949 to i32
  %951 = load i16, ptr %14, align 2, !tbaa !9
  %952 = call i32 @sqlite3WhereExplainOneScan(ptr noundef %943, ptr noundef %944, ptr noundef %945, i32 noundef %946, i32 noundef %950, i16 noundef zeroext %951)
  store i32 %952, ptr %47, align 4, !tbaa !11
  %953 = load ptr, ptr %19, align 8, !tbaa !5
  %954 = call i32 @sqlite3VdbeCurrentAddr(ptr noundef %953)
  %955 = load ptr, ptr %23, align 8, !tbaa !5
  %956 = getelementptr inbounds %struct.WhereLevel, ptr %955, i32 0, i32 8
  store i32 %954, ptr %956, align 8, !tbaa !103
  %957 = load ptr, ptr %18, align 8, !tbaa !5
  %958 = load i32, ptr %25, align 4, !tbaa !11
  %959 = load i64, ptr %20, align 8, !tbaa !67
  %960 = call i64 @sqlite3WhereCodeOneLoopStart(ptr noundef %957, i32 noundef %958, i64 noundef %959)
  store i64 %960, ptr %20, align 8, !tbaa !67
  %961 = load ptr, ptr %23, align 8, !tbaa !5
  %962 = getelementptr inbounds %struct.WhereLevel, ptr %961, i32 0, i32 6
  %963 = load i32, ptr %962, align 8, !tbaa !104
  %964 = load ptr, ptr %18, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct.WhereInfo, ptr %964, i32 0, i32 6
  store i32 %963, ptr %965, align 4, !tbaa !40
  %966 = load i32, ptr %48, align 4, !tbaa !11
  %967 = and i32 %966, 8192
  %968 = icmp eq i32 %967, 0
  br i1 %968, label %969, label %976

969:                                              ; preds = %942
  %970 = load i16, ptr %14, align 2, !tbaa !9
  %971 = zext i16 %970 to i32
  %972 = and i32 %971, 32
  %973 = icmp eq i32 %972, 0
  br i1 %973, label %974, label %976

974:                                              ; preds = %969
  %975 = load i32, ptr %47, align 4, !tbaa !11
  br label %976

976:                                              ; preds = %974, %969, %942
  store i32 0, ptr %29, align 4
  br label %977

977:                                              ; preds = %976, %940
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  %978 = load i32, ptr %29, align 4
  switch i32 %978, label %997 [
    i32 0, label %979
    i32 2, label %985
  ]

979:                                              ; preds = %977
  br label %980

980:                                              ; preds = %979
  %981 = load i32, ptr %25, align 4, !tbaa !11
  %982 = add nsw i32 %981, 1
  store i32 %982, ptr %25, align 4, !tbaa !11
  br label %901, !llvm.loop !105

983:                                              ; preds = %901
  %984 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %984, ptr %8, align 8
  store i32 1, ptr %29, align 4
  br label %997

985:                                              ; preds = %977, %899, %394, %366, %347, %339, %297, %113
  %986 = load ptr, ptr %18, align 8, !tbaa !5
  %987 = icmp ne ptr %986, null
  br i1 %987, label %988, label %996

988:                                              ; preds = %985
  %989 = load ptr, ptr %18, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.WhereInfo, ptr %989, i32 0, i32 8
  %991 = load i32, ptr %990, align 4, !tbaa !45
  %992 = load ptr, ptr %9, align 8, !tbaa !5
  %993 = getelementptr inbounds %struct.Parse, ptr %992, i32 0, i32 40
  store i32 %991, ptr %993, align 4, !tbaa !44
  %994 = load ptr, ptr %26, align 8, !tbaa !5
  %995 = load ptr, ptr %18, align 8, !tbaa !5
  call void @whereInfoFree(ptr noundef %994, ptr noundef %995)
  br label %996

996:                                              ; preds = %988, %985
  store ptr null, ptr %8, align 8
  store i32 1, ptr %29, align 4
  br label %997

997:                                              ; preds = %996, %983, %977, %82
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 48, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  %998 = load ptr, ptr %8, align 8
  ret ptr %998

999:                                              ; preds = %533
  unreachable
}

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

declare void @sqlite3ErrorMsg(ptr noundef, ptr noundef, ...) #3

declare ptr @sqlite3DbMallocRawNN(ptr noundef, i64 noundef) #3

declare void @sqlite3DbFree(ptr noundef, ptr noundef) #3

declare i32 @sqlite3VdbeMakeLabel(ptr noundef) #3

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

declare void @sqlite3WhereClauseInit(ptr noundef, ptr noundef) #3

declare void @sqlite3WhereSplit(ptr noundef, ptr noundef, i8 noundef zeroext) #3

declare i32 @sqlite3ExprIsConstantNotJoin(ptr noundef) #3

declare void @sqlite3ExprIfFalse(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #3

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

declare void @sqlite3WhereTabFuncArgs(ptr noundef, ptr noundef, ptr noundef) #3

declare void @sqlite3WhereExprAnalyze(ptr noundef, ptr noundef) #3

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

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

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

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

declare i64 @sqlite3WhereExprListUsage(ptr noundef, ptr noundef) #3

declare i32 @sqlite3SchemaToIndex(ptr noundef, ptr noundef) #3

declare ptr @sqlite3GetVTable(ptr noundef, ptr noundef) #3

declare i32 @sqlite3VdbeAddOp4(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) #3

declare void @sqlite3OpenTable(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) #3

declare void @sqlite3VdbeChangeP4(ptr noundef, i32 noundef, ptr noundef, i32 noundef) #3

declare void @sqlite3VdbeChangeP5(ptr noundef, i16 noundef zeroext) #3

declare void @sqlite3TableLock(ptr noundef, i32 noundef, i32 noundef, i8 noundef zeroext, ptr noundef) #3

declare i32 @sqlite3VdbeAddOp3(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare void @sqlite3VdbeSetP4KeyInfo(ptr noundef, ptr noundef) #3

declare void @sqlite3CodeVerifySchema(ptr noundef, i32 noundef) #3

declare i32 @sqlite3VdbeCurrentAddr(ptr noundef) #3

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

declare i32 @sqlite3WhereExplainOneScan(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i16 noundef zeroext) #3

declare i64 @sqlite3WhereCodeOneLoopStart(ptr noundef, i32 noundef, i64 noundef) #3

; Function Attrs: nounwind uwtable
declare hidden void @whereInfoFree(ptr noundef, ptr 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 nounwind willreturn memory(argmem: write) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 16}
!14 = !{!"Parse", !6, i64 0, !6, i64 8, !6, i64 16, !12, i64 24, !7, i64 28, !7, i64 29, !7, i64 30, !7, i64 31, !7, i64 32, !7, i64 33, !7, i64 34, !7, i64 35, !7, i64 36, !7, i64 37, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84, !6, i64 88, !6, i64 96, !15, i64 104, !12, i64 120, !12, i64 124, !12, i64 128, !12, i64 132, !12, i64 136, !12, i64 140, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !12, i64 176, !12, i64 180, !12, i64 184, !12, i64 188, !7, i64 192, !7, i64 193, !7, i64 194, !7, i64 196, !7, i64 396, !15, i64 432, !15, i64 448, !10, i64 464, !7, i64 466, !7, i64 467, !7, i64 468, !12, i64 472, !12, i64 476, !12, i64 480, !12, i64 484, !6, i64 488, !6, i64 496, !6, i64 504, !6, i64 512, !6, i64 520, !6, i64 528, !15, i64 536, !6, i64 552, !6, i64 560, !6, i64 568, !6, i64 576, !6, i64 584}
!15 = !{!"Token", !6, i64 0, !12, i64 8}
!16 = !{!7, !7, i64 0}
!17 = !{!14, !6, i64 0}
!18 = !{!19, !12, i64 0}
!19 = !{!"ExprList", !12, i64 0, !6, i64 8}
!20 = !{!21, !6, i64 16}
!21 = !{!"WhereLoopBuilder", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !12, i64 40}
!22 = !{!23, !10, i64 80}
!23 = !{!"sqlite3", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !12, i64 40, !12, i64 44, !24, i64 48, !24, i64 56, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !10, i64 80, !7, i64 82, !7, i64 83, !7, i64 84, !7, i64 85, !7, i64 86, !7, i64 87, !7, i64 88, !7, i64 89, !7, i64 90, !7, i64 91, !7, i64 92, !7, i64 93, !7, i64 94, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !7, i64 112, !12, i64 160, !25, i64 164, !12, i64 172, !12, i64 176, !12, i64 180, !12, i64 184, !12, i64 188, !12, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !7, i64 336, !26, i64 344, !6, i64 400, !6, i64 408, !6, i64 416, !6, i64 424, !12, i64 432, !12, i64 436, !27, i64 440, !6, i64 464, !6, i64 472, !6, i64 480, !27, i64 488, !27, i64 512, !28, i64 536, !7, i64 560, !6, i64 624, !12, i64 632, !12, i64 636, !12, i64 640, !24, i64 648, !24, i64 656, !6, i64 664}
!24 = !{!"long long", !7, i64 0}
!25 = !{!"sqlite3InitInfo", !12, i64 0, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7}
!26 = !{!"Lookaside", !12, i64 0, !10, i64 4, !7, i64 6, !12, i64 8, !12, i64 12, !7, i64 16, !6, i64 32, !6, i64 40, !6, i64 48}
!27 = !{!"Hash", !12, i64 0, !12, i64 4, !6, i64 8, !6, i64 16}
!28 = !{!"BusyHandler", !6, i64 0, !6, i64 8, !12, i64 16}
!29 = !{!30, !12, i64 0}
!30 = !{!"SrcList", !12, i64 0, !12, i64 4, !7, i64 8}
!31 = !{!23, !7, i64 85}
!32 = !{!33, !6, i64 0}
!33 = !{!"WhereInfo", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !7, i64 36, !12, i64 44, !12, i64 48, !12, i64 52, !10, i64 56, !7, i64 58, !7, i64 59, !7, i64 60, !7, i64 61, !7, i64 62, !7, i64 63, !7, i64 64, !12, i64 68, !6, i64 72, !24, i64 80, !10, i64 88, !34, i64 96, !35, i64 648, !7, i64 912}
!34 = !{!"WhereClause", !6, i64 0, !6, i64 8, !7, i64 16, !12, i64 20, !12, i64 24, !6, i64 32, !7, i64 40}
!35 = !{!"WhereMaskSet", !12, i64 0, !7, i64 4}
!36 = !{!33, !6, i64 8}
!37 = !{!33, !6, i64 16}
!38 = !{!33, !6, i64 24}
!39 = !{!33, !7, i64 58}
!40 = !{!33, !12, i64 44}
!41 = !{!33, !12, i64 48}
!42 = !{!33, !10, i64 56}
!43 = !{!33, !10, i64 32}
!44 = !{!14, !12, i64 180}
!45 = !{!33, !12, i64 52}
!46 = !{!21, !6, i64 0}
!47 = !{!21, !6, i64 8}
!48 = !{!21, !6, i64 24}
!49 = !{!35, !12, i64 0}
!50 = !{!34, !12, i64 20}
!51 = !{!34, !6, i64 32}
!52 = !{!53, !6, i64 0}
!53 = !{!"WhereTerm", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 18, !10, i64 20, !7, i64 22, !7, i64 23, !12, i64 24, !12, i64 28, !12, i64 32, !7, i64 40, !24, i64 48, !24, i64 56}
!54 = !{!53, !10, i64 18}
!55 = distinct !{!55, !56}
!56 = !{!"llvm.loop.mustprogress"}
!57 = !{!33, !7, i64 59}
!58 = !{!33, !7, i64 63}
!59 = !{!60, !12, i64 68}
!60 = !{!"SrcList_item", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !12, i64 48, !12, i64 52, !12, i64 56, !61, i64 60, !7, i64 64, !12, i64 68, !6, i64 72, !6, i64 80, !24, i64 88, !7, i64 96, !6, i64 104}
!61 = !{!"", !7, i64 0, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1}
!62 = distinct !{!62, !56}
!63 = !{!33, !10, i64 88}
!64 = !{!23, !12, i64 44}
!65 = !{!33, !24, i64 80}
!66 = !{!14, !12, i64 48}
!67 = !{!24, !24, i64 0}
!68 = !{!69, !6, i64 72}
!69 = !{!"WhereLevel", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !7, i64 44, !7, i64 45, !7, i64 46, !7, i64 47, !12, i64 48, !12, i64 52, !7, i64 56, !6, i64 72, !24, i64 80}
!70 = !{!71, !7, i64 16}
!71 = !{!"WhereLoop", !24, i64 0, !24, i64 8, !7, i64 16, !7, i64 17, !10, i64 18, !10, i64 20, !10, i64 22, !7, i64 24, !12, i64 40, !10, i64 44, !10, i64 46, !10, i64 48, !6, i64 56, !6, i64 64, !7, i64 72}
!72 = !{!60, !7, i64 60}
!73 = !{!71, !12, i64 40}
!74 = !{!71, !24, i64 8}
!75 = !{!53, !24, i64 56}
!76 = !{!77, !12, i64 4}
!77 = !{!"Expr", !7, i64 0, !7, i64 1, !12, i64 4, !7, i64 8, !6, i64 16, !6, i64 24, !7, i64 32, !12, i64 40, !12, i64 44, !10, i64 48, !10, i64 50, !10, i64 52, !7, i64 54, !6, i64 56, !6, i64 64}
!78 = distinct !{!78, !56}
!79 = distinct !{!79, !56}
!80 = !{!33, !7, i64 61}
!81 = !{!60, !6, i64 32}
!82 = !{!83, !12, i64 64}
!83 = !{!"Table", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !12, i64 56, !12, i64 60, !12, i64 64, !10, i64 68, !10, i64 70, !10, i64 72, !10, i64 74, !7, i64 76, !12, i64 80, !12, i64 84, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120}
!84 = !{!69, !7, i64 44}
!85 = !{!83, !6, i64 112}
!86 = !{!83, !6, i64 24}
!87 = !{!83, !12, i64 84}
!88 = !{!83, !10, i64 70}
!89 = !{!60, !24, i64 88}
!90 = distinct !{!90, !56}
!91 = !{!83, !12, i64 56}
!92 = !{!83, !6, i64 0}
!93 = !{!69, !12, i64 4}
!94 = !{!83, !6, i64 16}
!95 = !{!96, !6, i64 40}
!96 = !{!"Index", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !12, i64 88, !10, i64 92, !10, i64 94, !10, i64 96, !7, i64 98, !12, i64 99, !12, i64 99, !12, i64 99, !12, i64 99, !12, i64 99, !12, i64 99, !12, i64 99}
!97 = distinct !{!97, !56}
!98 = !{!14, !12, i64 52}
!99 = !{!69, !12, i64 8}
!100 = !{!96, !12, i64 88}
!101 = distinct !{!101, !56}
!102 = !{!33, !12, i64 68}
!103 = !{!69, !12, i64 32}
!104 = !{!69, !12, i64 24}
!105 = distinct !{!105, !56}


; 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.WhereLoopBuilder = type { ptr, ptr, ptr, ptr, ptr, i32 }
%struct.WhereTerm = type { ptr, ptr, i16, i16, i16, i8, i8, i32, i32, i32, %union.anon, i64, i64 }
%union.anon = type { ptr }
%struct.SrcList_item = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, %struct.anon.2, i8, i32, ptr, ptr, i64, %union.anon.3, ptr }
%struct.anon.2 = type { i8, i8, [2 x i8] }
%union.anon.3 = type { ptr }
%struct.WhereLevel = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i32, i32, %union.anon.0, ptr, i64 }
%union.anon.0 = type { %struct.anon }
%struct.anon = type { i32, ptr }

@.str = external hidden unnamed_addr constant [28 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local ptr @sqlite3WhereBegin(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i16 noundef zeroext %5, i32 noundef %6) local_unnamed_addr #1 {
  %8 = alloca %struct.WhereLoopBuilder, align 8
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) #5
  %11 = load ptr, ptr %0, align 8, !tbaa !13
  %12 = getelementptr inbounds i8, ptr %8, i64 32
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %12, i8 0, i64 16, i1 false)
  %.not = icmp eq ptr %3, null
  br i1 %.not, label %16, label %13

13:                                               ; preds = %7
  %14 = load i32, ptr %3, align 8, !tbaa !14
  %15 = icmp sgt i32 %14, 63
  %spec.store.select = select i1 %15, ptr null, ptr %3
  br label %16

16:                                               ; preds = %13, %7
  %.0267 = phi ptr [ %spec.store.select, %13 ], [ null, %7 ]
  %17 = getelementptr inbounds i8, ptr %8, i64 16
  store ptr %.0267, ptr %17, align 8, !tbaa !16
  %18 = getelementptr inbounds i8, ptr %11, i64 80
  %19 = load i16, ptr %18, align 8, !tbaa !18
  %20 = and i16 %19, 32
  %.not300 = icmp eq i16 %20, 0
  %21 = and i16 %5, -257
  %spec.select = select i1 %.not300, i16 %5, i16 %21
  %22 = load i32, ptr %1, align 8, !tbaa !25
  %23 = icmp sgt i32 %22, 64
  br i1 %23, label %24, label %25

24:                                               ; preds = %16
  tail call void (ptr, ptr, ...) @sqlite3ErrorMsg(ptr noundef nonnull %0, ptr noundef nonnull @.str, i32 noundef 64) #5
  br label %.loopexit

25:                                               ; preds = %16
  %26 = zext i16 %spec.select to i32
  %27 = and i32 %26, 32
  %.not301 = icmp eq i32 %27, 0
  %spec.select341 = select i1 %.not301, i32 %22, i32 1
  %28 = mul i32 %spec.select341, 88
  %29 = add i32 %28, 919
  %30 = and i32 %29, -8
  %31 = sext i32 %30 to i64
  %32 = add nsw i64 %31, 96
  %33 = tail call ptr @sqlite3DbMallocRawNN(ptr noundef nonnull %11, i64 noundef %32) #5
  %34 = getelementptr inbounds i8, ptr %11, i64 85
  %35 = load i8, ptr %34, align 1, !tbaa !27
  %.not302 = icmp eq i8 %35, 0
  br i1 %.not302, label %36, label %.thread376

.thread376:                                       ; preds = %25
  tail call void @sqlite3DbFree(ptr noundef nonnull %11, ptr noundef %33) #5
  br label %.loopexit

36:                                               ; preds = %25
  store ptr %0, ptr %33, align 8, !tbaa !28
  %37 = getelementptr inbounds i8, ptr %33, i64 8
  store ptr %1, ptr %37, align 8, !tbaa !32
  %38 = getelementptr inbounds i8, ptr %33, i64 16
  store ptr %.0267, ptr %38, align 8, !tbaa !33
  %39 = getelementptr inbounds i8, ptr %33, i64 24
  store ptr %4, ptr %39, align 8, !tbaa !34
  %40 = getelementptr inbounds i8, ptr %33, i64 36
  %41 = getelementptr inbounds i8, ptr %33, i64 40
  store i32 -1, ptr %41, align 4, !tbaa !35
  store i32 -1, ptr %40, align 4, !tbaa !35
  %42 = trunc i32 %spec.select341 to i8
  %43 = getelementptr inbounds i8, ptr %33, i64 58
  store i8 %42, ptr %43, align 2, !tbaa !36
  %44 = tail call i32 @sqlite3VdbeMakeLabel(ptr noundef %10) #5
  %45 = getelementptr inbounds i8, ptr %33, i64 44
  store i32 %44, ptr %45, align 4, !tbaa !37
  %46 = getelementptr inbounds i8, ptr %33, i64 48
  store i32 %44, ptr %46, align 8, !tbaa !38
  %47 = getelementptr inbounds i8, ptr %33, i64 56
  store i16 %spec.select, ptr %47, align 8, !tbaa !39
  %48 = trunc i32 %6 to i16
  %49 = getelementptr inbounds i8, ptr %33, i64 32
  store i16 %48, ptr %49, align 8, !tbaa !40
  %50 = getelementptr inbounds i8, ptr %0, i64 180
  %51 = load i32, ptr %50, align 4, !tbaa !41
  %52 = getelementptr inbounds i8, ptr %33, i64 52
  store i32 %51, ptr %52, align 4, !tbaa !42
  %53 = getelementptr inbounds i8, ptr %33, i64 59
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(37) %53, i8 0, i64 37, i1 false)
  %54 = getelementptr inbounds i8, ptr %33, i64 912
  %55 = sext i32 %spec.select341 to i64
  %56 = mul nsw i64 %55, 88
  %57 = add nsw i64 %56, 96
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %54, i8 0, i64 %57, i1 false)
  %58 = getelementptr inbounds i8, ptr %33, i64 648
  store ptr %33, ptr %8, align 8, !tbaa !43
  %59 = getelementptr inbounds i8, ptr %33, i64 96
  %60 = getelementptr inbounds i8, ptr %8, i64 8
  store ptr %59, ptr %60, align 8, !tbaa !44
  %61 = getelementptr inbounds i8, ptr %33, i64 %31
  %62 = getelementptr inbounds i8, ptr %8, i64 24
  store ptr %61, ptr %62, align 8, !tbaa !45
  tail call void @whereLoopInit(ptr noundef nonnull %61)
  store i32 0, ptr %58, align 4, !tbaa !46
  tail call void @sqlite3WhereClauseInit(ptr noundef nonnull %59, ptr noundef nonnull %33) #5
  tail call void @sqlite3WhereSplit(ptr noundef nonnull %59, ptr noundef %2, i8 noundef zeroext 28) #5
  %63 = getelementptr inbounds i8, ptr %33, i64 116
  %64 = load i32, ptr %63, align 4, !tbaa !47
  %65 = icmp sgt i32 %64, 0
  br i1 %65, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %36
  %66 = icmp eq i32 %spec.select341, 0
  %67 = getelementptr inbounds i8, ptr %33, i64 128
  br i1 %66, label %.lr.ph.split.us.preheader, label %.lr.ph.split

.lr.ph.split.us.preheader:                        ; preds = %.lr.ph
  %.pre = load ptr, ptr %67, align 8, !tbaa !48
  br label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph.split.us.preheader, %.lr.ph.split.us
  %68 = phi ptr [ %.pre, %.lr.ph.split.us.preheader ], [ %72, %.lr.ph.split.us ]
  %indvars.iv427 = phi i64 [ 0, %.lr.ph.split.us.preheader ], [ %indvars.iv.next428, %.lr.ph.split.us ]
  %69 = getelementptr inbounds %struct.WhereTerm, ptr %68, i64 %indvars.iv427
  %70 = load ptr, ptr %69, align 8, !tbaa !49
  %71 = load i32, ptr %46, align 8, !tbaa !38
  tail call void @sqlite3ExprIfFalse(ptr noundef nonnull %0, ptr noundef %70, i32 noundef %71, i32 noundef 16) #5
  %72 = load ptr, ptr %67, align 8, !tbaa !48
  %73 = getelementptr inbounds %struct.WhereTerm, ptr %72, i64 %indvars.iv427, i32 3
  %74 = load i16, ptr %73, align 2, !tbaa !51
  %75 = or i16 %74, 4
  store i16 %75, ptr %73, align 2, !tbaa !51
  %indvars.iv.next428 = add nuw nsw i64 %indvars.iv427, 1
  %76 = load i32, ptr %63, align 4, !tbaa !47
  %77 = sext i32 %76 to i64
  %78 = icmp slt i64 %indvars.iv.next428, %77
  br i1 %78, label %.lr.ph.split.us, label %._crit_edge, !llvm.loop !52

.lr.ph.split:                                     ; preds = %.lr.ph, %92
  %indvars.iv = phi i64 [ %indvars.iv.next, %92 ], [ 0, %.lr.ph ]
  %79 = load ptr, ptr %67, align 8, !tbaa !48
  %80 = getelementptr inbounds %struct.WhereTerm, ptr %79, i64 %indvars.iv
  %81 = load ptr, ptr %80, align 8, !tbaa !49
  %82 = tail call i32 @sqlite3ExprIsConstantNotJoin(ptr noundef %81) #5
  %.not339 = icmp eq i32 %82, 0
  br i1 %.not339, label %92, label %83

83:                                               ; preds = %.lr.ph.split
  %84 = load ptr, ptr %67, align 8, !tbaa !48
  %85 = getelementptr inbounds %struct.WhereTerm, ptr %84, i64 %indvars.iv
  %86 = load ptr, ptr %85, align 8, !tbaa !49
  %87 = load i32, ptr %46, align 8, !tbaa !38
  tail call void @sqlite3ExprIfFalse(ptr noundef nonnull %0, ptr noundef %86, i32 noundef %87, i32 noundef 16) #5
  %88 = load ptr, ptr %67, align 8, !tbaa !48
  %89 = getelementptr inbounds %struct.WhereTerm, ptr %88, i64 %indvars.iv, i32 3
  %90 = load i16, ptr %89, align 2, !tbaa !51
  %91 = or i16 %90, 4
  store i16 %91, ptr %89, align 2, !tbaa !51
  br label %92

92:                                               ; preds = %.lr.ph.split, %83
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %93 = load i32, ptr %63, align 4, !tbaa !47
  %94 = sext i32 %93 to i64
  %95 = icmp slt i64 %indvars.iv.next, %94
  br i1 %95, label %.lr.ph.split, label %._crit_edge, !llvm.loop !52

._crit_edge:                                      ; preds = %92, %.lr.ph.split.us, %36
  %96 = icmp eq i32 %spec.select341, 0
  br i1 %96, label %97, label %105

97:                                               ; preds = %._crit_edge
  %.not303 = icmp eq ptr %.0267, null
  br i1 %.not303, label %101, label %98

98:                                               ; preds = %97
  %99 = load i32, ptr %.0267, align 8, !tbaa !14
  %100 = trunc i32 %99 to i8
  store i8 %100, ptr %53, align 1, !tbaa !54
  br label %101

101:                                              ; preds = %98, %97
  %102 = and i32 %26, 256
  %.not304 = icmp eq i32 %102, 0
  br i1 %.not304, label %105, label %103

103:                                              ; preds = %101
  %104 = getelementptr inbounds i8, ptr %33, i64 63
  store i8 1, ptr %104, align 1, !tbaa !55
  br label %105

105:                                              ; preds = %101, %103, %._crit_edge
  %106 = load i32, ptr %1, align 8, !tbaa !25
  %107 = icmp sgt i32 %106, 0
  br i1 %107, label %.lr.ph385, label %._crit_edge386

.lr.ph385:                                        ; preds = %105
  %108 = getelementptr inbounds i8, ptr %1, i64 8
  br label %109

109:                                              ; preds = %.lr.ph385, %109
  %indvars.iv430 = phi i64 [ 0, %.lr.ph385 ], [ %indvars.iv.next431, %109 ]
  %110 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %108, i64 0, i64 %indvars.iv430
  %111 = getelementptr inbounds i8, ptr %110, i64 68
  %112 = load i32, ptr %111, align 4, !tbaa !56
  tail call void @createMask(ptr noundef nonnull %58, i32 noundef %112)
  tail call void @sqlite3WhereTabFuncArgs(ptr noundef nonnull %0, ptr noundef nonnull %110, ptr noundef nonnull %59) #5
  %indvars.iv.next431 = add nuw nsw i64 %indvars.iv430, 1
  %113 = load i32, ptr %1, align 8, !tbaa !25
  %114 = sext i32 %113 to i64
  %115 = icmp slt i64 %indvars.iv.next431, %114
  br i1 %115, label %109, label %._crit_edge386, !llvm.loop !59

._crit_edge386:                                   ; preds = %109, %105
  tail call void @sqlite3WhereExprAnalyze(ptr noundef nonnull %1, ptr noundef nonnull %59) #5
  %116 = load i8, ptr %34, align 1, !tbaa !27
  %.not305 = icmp eq i8 %116, 0
  br i1 %.not305, label %117, label %397

117:                                              ; preds = %._crit_edge386
  %118 = and i32 %26, 256
  %.not306 = icmp eq i32 %118, 0
  br i1 %.not306, label %128, label %119

119:                                              ; preds = %117
  %120 = tail call i32 @isDistinctRedundant(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %59, ptr noundef %4)
  %.not307 = icmp eq i32 %120, 0
  br i1 %.not307, label %123, label %121

121:                                              ; preds = %119
  %122 = getelementptr inbounds i8, ptr %33, i64 63
  store i8 1, ptr %122, align 1, !tbaa !55
  br label %128

123:                                              ; preds = %119
  %124 = icmp eq ptr %.0267, null
  br i1 %124, label %125, label %128

125:                                              ; preds = %123
  %126 = load i16, ptr %47, align 8, !tbaa !39
  %127 = or i16 %126, 128
  store i16 %127, ptr %47, align 8, !tbaa !39
  store ptr %4, ptr %38, align 8, !tbaa !33
  br label %128

128:                                              ; preds = %121, %125, %123, %117
  %.not308 = icmp eq i32 %spec.select341, 1
  br i1 %.not308, label %129, label %132

129:                                              ; preds = %128
  %130 = call i32 @whereShortCut(ptr noundef nonnull %8)
  %131 = icmp eq i32 %130, 0
  br i1 %131, label %132, label %145

132:                                              ; preds = %129, %128
  %133 = call i32 @whereLoopAddAll(ptr noundef nonnull %8)
  %.not309 = icmp eq i32 %133, 0
  br i1 %.not309, label %134, label %397

134:                                              ; preds = %132
  %135 = call i32 @wherePathSolver(ptr noundef nonnull %33, i16 noundef signext 0)
  %136 = load i8, ptr %34, align 1, !tbaa !27
  %.not310 = icmp eq i8 %136, 0
  br i1 %.not310, label %137, label %397

137:                                              ; preds = %134
  %138 = load ptr, ptr %38, align 8, !tbaa !33
  %.not311 = icmp eq ptr %138, null
  br i1 %.not311, label %.thread, label %139

139:                                              ; preds = %137
  %140 = getelementptr inbounds i8, ptr %33, i64 88
  %141 = load i16, ptr %140, align 8, !tbaa !60
  %142 = add i16 %141, 1
  %143 = call i32 @wherePathSolver(ptr noundef nonnull %33, i16 noundef signext %142)
  %144 = load i8, ptr %34, align 1, !tbaa !27
  %.not312 = icmp eq i8 %144, 0
  br i1 %.not312, label %145, label %.thread372

145:                                              ; preds = %139, %129
  %.pr = load ptr, ptr %38, align 8, !tbaa !33
  %146 = icmp eq ptr %.pr, null
  br i1 %146, label %.thread, label %152

.thread:                                          ; preds = %137, %145
  %147 = getelementptr inbounds i8, ptr %11, i64 44
  %148 = load i32, ptr %147, align 4, !tbaa !61
  %149 = and i32 %148, 131072
  %.not313 = icmp eq i32 %149, 0
  br i1 %.not313, label %152, label %150

150:                                              ; preds = %.thread
  %151 = getelementptr inbounds i8, ptr %33, i64 80
  store i64 -1, ptr %151, align 8, !tbaa !62
  br label %152

152:                                              ; preds = %150, %.thread, %145
  %153 = getelementptr inbounds i8, ptr %0, i64 48
  %154 = load i32, ptr %153, align 8, !tbaa !63
  %.not314 = icmp eq i32 %154, 0
  br i1 %.not314, label %155, label %.thread372

155:                                              ; preds = %152
  %156 = load i8, ptr %34, align 1, !tbaa !27
  %.not315 = icmp eq i8 %156, 0
  br i1 %.not315, label %157, label %.thread372

157:                                              ; preds = %155
  %158 = load i8, ptr %43, align 2, !tbaa !36
  %159 = icmp ugt i8 %158, 1
  %160 = icmp ne ptr %4, null
  %or.cond = and i1 %160, %159
  br i1 %or.cond, label %161, label %.thread355

161:                                              ; preds = %157
  %162 = load i16, ptr %18, align 8, !tbaa !18
  %163 = and i16 %162, 1024
  %164 = icmp eq i16 %163, 0
  br i1 %164, label %165, label %.thread355

165:                                              ; preds = %161
  %166 = call i64 @sqlite3WhereExprListUsage(ptr noundef nonnull %58, ptr noundef nonnull %4) #5
  %167 = load ptr, ptr %17, align 8, !tbaa !16
  %.not316 = icmp eq ptr %167, null
  br i1 %.not316, label %171, label %168

168:                                              ; preds = %165
  %169 = call i64 @sqlite3WhereExprListUsage(ptr noundef nonnull %58, ptr noundef nonnull %167) #5
  %170 = or i64 %169, %166
  br label %171

171:                                              ; preds = %168, %165
  %.0291 = phi i64 [ %170, %168 ], [ %166, %165 ]
  %.pr379 = load i8, ptr %43, align 2, !tbaa !36
  %172 = icmp ugt i8 %.pr379, 1
  br i1 %172, label %.lr.ph393, label %.thread355

.lr.ph393:                                        ; preds = %171
  %173 = load ptr, ptr %37, align 8, !tbaa !32
  %174 = getelementptr inbounds i8, ptr %173, i64 8
  %175 = load ptr, ptr %60, align 8
  %176 = getelementptr inbounds i8, ptr %175, i64 32
  %177 = getelementptr inbounds i8, ptr %175, i64 20
  br label %178

178:                                              ; preds = %.lr.ph393, %._crit_edge390
  %.0275391 = phi i32 [ %spec.select341, %.lr.ph393 ], [ %220, %._crit_edge390 ]
  %179 = phi i8 [ %.pr379, %.lr.ph393 ], [ %219, %._crit_edge390 ]
  %180 = zext i8 %179 to i64
  %181 = add nuw nsw i64 %180, 4294967295
  %182 = and i64 %181, 4294967295
  %183 = getelementptr inbounds [1 x %struct.WhereLevel], ptr %54, i64 0, i64 %182, i32 18
  %184 = load ptr, ptr %183, align 8, !tbaa !64
  %185 = getelementptr inbounds i8, ptr %184, i64 16
  %186 = load i8, ptr %185, align 8, !tbaa !66
  %187 = zext i8 %186 to i64
  %188 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %174, i64 0, i64 %187, i32 9
  %189 = load i8, ptr %188, align 4, !tbaa !68
  %190 = and i8 %189, 8
  %191 = icmp eq i8 %190, 0
  br i1 %191, label %.thread355, label %192

192:                                              ; preds = %178
  br i1 %.not306, label %193, label %198

193:                                              ; preds = %192
  %194 = getelementptr inbounds i8, ptr %184, i64 40
  %195 = load i32, ptr %194, align 8, !tbaa !69
  %196 = and i32 %195, 4096
  %197 = icmp eq i32 %196, 0
  br i1 %197, label %.thread355, label %198

198:                                              ; preds = %193, %192
  %199 = getelementptr inbounds i8, ptr %184, i64 8
  %200 = load i64, ptr %199, align 8, !tbaa !70
  %201 = and i64 %200, %.0291
  %.not317 = icmp eq i64 %201, 0
  br i1 %.not317, label %202, label %.thread355

202:                                              ; preds = %198
  %203 = load ptr, ptr %176, align 8, !tbaa !48
  %204 = load i32, ptr %177, align 4, !tbaa !47
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds %struct.WhereTerm, ptr %203, i64 %205
  %207 = icmp sgt i32 %204, 0
  br i1 %207, label %.lr.ph389, label %._crit_edge390

.lr.ph389:                                        ; preds = %202, %216
  %.0290387 = phi ptr [ %217, %216 ], [ %203, %202 ]
  %208 = getelementptr inbounds i8, ptr %.0290387, i64 56
  %209 = load i64, ptr %208, align 8, !tbaa !71
  %210 = and i64 %209, %200
  %.not318 = icmp eq i64 %210, 0
  br i1 %.not318, label %216, label %211

211:                                              ; preds = %.lr.ph389
  %212 = load ptr, ptr %.0290387, align 8, !tbaa !49
  %213 = getelementptr inbounds i8, ptr %212, i64 4
  %214 = load i32, ptr %213, align 4, !tbaa !72
  %215 = and i32 %214, 1
  %.not319 = icmp eq i32 %215, 0
  br i1 %.not319, label %.thread355, label %216

216:                                              ; preds = %.lr.ph389, %211
  %217 = getelementptr inbounds i8, ptr %.0290387, i64 64
  %218 = icmp ult ptr %217, %206
  br i1 %218, label %.lr.ph389, label %._crit_edge390, !llvm.loop !74

._crit_edge390:                                   ; preds = %216, %202
  %219 = add i8 %179, -1
  store i8 %219, ptr %43, align 2, !tbaa !36
  %220 = add nsw i32 %.0275391, -1
  %221 = icmp ugt i8 %219, 1
  br i1 %221, label %178, label %.thread355

.thread355:                                       ; preds = %._crit_edge390, %178, %193, %198, %211, %171, %161, %157
  %.3 = phi i32 [ %spec.select341, %161 ], [ %spec.select341, %157 ], [ %spec.select341, %171 ], [ %.0275391, %211 ], [ %220, %._crit_edge390 ], [ %.0275391, %178 ], [ %.0275391, %193 ], [ %.0275391, %198 ]
  %222 = getelementptr inbounds i8, ptr %33, i64 88
  %223 = load i16, ptr %222, align 8, !tbaa !60
  %224 = sext i16 %223 to i32
  %225 = load ptr, ptr %33, align 8, !tbaa !28
  %226 = getelementptr inbounds i8, ptr %225, i64 180
  %227 = load i32, ptr %226, align 4, !tbaa !41
  %228 = add i32 %227, %224
  store i32 %228, ptr %226, align 4, !tbaa !41
  %229 = and i32 %26, 4
  %.not320 = icmp eq i32 %229, 0
  br i1 %.not320, label %252, label %230

230:                                              ; preds = %.thread355
  %231 = getelementptr inbounds i8, ptr %33, i64 984
  %232 = load ptr, ptr %231, align 8, !tbaa !64
  %233 = getelementptr inbounds i8, ptr %232, i64 40
  %234 = load i32, ptr %233, align 8, !tbaa !69
  %235 = and i32 %234, 4096
  %.not321 = icmp eq i32 %235, 0
  br i1 %.not321, label %236, label %240

236:                                              ; preds = %230
  %237 = and i32 %26, 8
  %.not322 = icmp ne i32 %237, 0
  %238 = and i32 %234, 1024
  %239 = icmp eq i32 %238, 0
  %or.cond343 = and i1 %.not322, %239
  br i1 %or.cond343, label %240, label %252

240:                                              ; preds = %236, %230
  %241 = phi i8 [ 1, %230 ], [ 2, %236 ]
  %242 = getelementptr inbounds i8, ptr %33, i64 61
  store i8 %241, ptr %242, align 1, !tbaa !75
  %243 = getelementptr inbounds i8, ptr %1, i64 40
  %244 = load ptr, ptr %243, align 8, !tbaa !76
  %245 = getelementptr inbounds i8, ptr %244, i64 64
  %246 = load i32, ptr %245, align 8, !tbaa !77
  %247 = and i32 %246, 32
  %248 = icmp ne i32 %247, 0
  %249 = and i32 %234, 64
  %.not323 = icmp eq i32 %249, 0
  %or.cond344 = or i1 %.not323, %248
  br i1 %or.cond344, label %252, label %250

250:                                              ; preds = %240
  %spec.select345 = and i16 %spec.select, 8
  %251 = and i32 %234, -65
  store i32 %251, ptr %233, align 8, !tbaa !69
  br label %252

252:                                              ; preds = %236, %250, %240, %.thread355
  %.2287 = phi i16 [ 0, %.thread355 ], [ %spec.select345, %250 ], [ 0, %240 ], [ 0, %236 ]
  %253 = icmp sgt i32 %.3, 0
  br i1 %253, label %.lr.ph417, label %._crit_edge418

.lr.ph417:                                        ; preds = %252
  %254 = getelementptr inbounds i8, ptr %1, i64 8
  %255 = getelementptr inbounds i8, ptr %33, i64 61
  %.not336 = icmp eq i32 %6, 0
  %brmerge348 = or i1 %.not336, %.not301
  %256 = getelementptr inbounds i8, ptr %0, i64 52
  br label %257

257:                                              ; preds = %.lr.ph417, %366
  %.0280415 = phi ptr [ %54, %.lr.ph417 ], [ %368, %366 ]
  %.2283414 = phi i32 [ 0, %.lr.ph417 ], [ %367, %366 ]
  %258 = getelementptr inbounds i8, ptr %.0280415, i64 44
  %259 = load i8, ptr %258, align 4, !tbaa !79
  %260 = zext i8 %259 to i64
  %261 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %254, i64 0, i64 %260
  %262 = getelementptr inbounds i8, ptr %261, i64 32
  %263 = load ptr, ptr %262, align 8, !tbaa !76
  %264 = getelementptr inbounds i8, ptr %263, i64 112
  %265 = load ptr, ptr %264, align 8, !tbaa !80
  %266 = call i32 @sqlite3SchemaToIndex(ptr noundef %11, ptr noundef %265) #5
  %267 = getelementptr inbounds i8, ptr %.0280415, i64 72
  %268 = load ptr, ptr %267, align 8, !tbaa !64
  %269 = getelementptr inbounds i8, ptr %263, i64 64
  %270 = load i32, ptr %269, align 8, !tbaa !77
  %271 = and i32 %270, 2
  %.not328 = icmp eq i32 %271, 0
  br i1 %.not328, label %272, label %313

272:                                              ; preds = %257
  %273 = getelementptr inbounds i8, ptr %263, i64 24
  %274 = load ptr, ptr %273, align 8, !tbaa !81
  %.not329 = icmp eq ptr %274, null
  br i1 %.not329, label %275, label %313

275:                                              ; preds = %272
  %276 = getelementptr inbounds i8, ptr %268, i64 40
  %277 = load i32, ptr %276, align 8, !tbaa !69
  %278 = and i32 %277, 1024
  %.not330 = icmp eq i32 %278, 0
  br i1 %.not330, label %284, label %279

279:                                              ; preds = %275
  %280 = call ptr @sqlite3GetVTable(ptr noundef %11, ptr noundef nonnull %263) #5
  %281 = getelementptr inbounds i8, ptr %261, i64 68
  %282 = load i32, ptr %281, align 4, !tbaa !56
  %283 = call i32 @sqlite3VdbeAddOp4(ptr noundef %10, i32 noundef 156, i32 noundef %282, i32 noundef 0, i32 noundef 0, ptr noundef %280, i32 noundef -8) #5
  br label %313

284:                                              ; preds = %275
  %285 = getelementptr inbounds i8, ptr %263, i64 84
  %286 = load i32, ptr %285, align 4, !tbaa !82
  %.not331 = icmp eq i32 %286, 0
  br i1 %.not331, label %287, label %313

287:                                              ; preds = %284
  %288 = and i32 %277, 64
  %289 = or disjoint i32 %288, %27
  %or.cond346 = icmp eq i32 %289, 0
  br i1 %or.cond346, label %290, label %309

290:                                              ; preds = %287
  %291 = load i8, ptr %255, align 1, !tbaa !75
  %.not332 = icmp eq i8 %291, 0
  %.phi.trans.insert = getelementptr inbounds i8, ptr %261, i64 68
  %.pre438 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !56
  br i1 %.not332, label %._crit_edge437, label %292

292:                                              ; preds = %290
  store i32 %.pre438, ptr %40, align 4, !tbaa !35
  br label %._crit_edge437

._crit_edge437:                                   ; preds = %290, %292
  %.0274 = phi i32 [ 106, %292 ], [ 105, %290 ]
  call void @sqlite3OpenTable(ptr noundef nonnull %0, i32 noundef %.pre438, i32 noundef %266, ptr noundef nonnull %263, i32 noundef %.0274) #5
  %293 = load i8, ptr %255, align 1, !tbaa !75
  %294 = icmp eq i8 %293, 0
  br i1 %294, label %295, label %308

295:                                              ; preds = %._crit_edge437
  %296 = getelementptr inbounds i8, ptr %263, i64 70
  %297 = load i16, ptr %296, align 2, !tbaa !83
  %298 = icmp slt i16 %297, 64
  br i1 %298, label %299, label %308

299:                                              ; preds = %295
  %300 = load i32, ptr %269, align 8, !tbaa !77
  %301 = and i32 %300, 32
  %302 = icmp eq i32 %301, 0
  br i1 %302, label %._crit_edge405, label %308

._crit_edge405:                                   ; preds = %299
  %303 = getelementptr inbounds i8, ptr %261, i64 88
  %304 = load i64, ptr %303, align 8, !tbaa !84
  %.not333400 = icmp eq i64 %304, 0
  %305 = call range(i64 0, 65) i64 @llvm.ctlz.i64(i64 %304, i1 true)
  %306 = sub nuw nsw i64 64, %305
  %.0272.lcssa = select i1 %.not333400, i64 0, i64 %306
  %307 = inttoptr i64 %.0272.lcssa to ptr
  call void @sqlite3VdbeChangeP4(ptr noundef %10, i32 noundef -1, ptr noundef %307, i32 noundef -11) #5
  br label %308

308:                                              ; preds = %._crit_edge405, %299, %295, %._crit_edge437
  call void @sqlite3VdbeChangeP5(ptr noundef %10, i16 noundef zeroext %.2287) #5
  br label %313

309:                                              ; preds = %287
  %310 = getelementptr inbounds i8, ptr %263, i64 56
  %311 = load i32, ptr %310, align 8, !tbaa !85
  %312 = load ptr, ptr %263, align 8, !tbaa !86
  call void @sqlite3TableLock(ptr noundef nonnull %0, i32 noundef %266, i32 noundef %311, i8 noundef zeroext 0, ptr noundef %312) #5
  br label %313

313:                                              ; preds = %279, %308, %309, %284, %257, %272
  %314 = getelementptr inbounds i8, ptr %268, i64 40
  %315 = load i32, ptr %314, align 8, !tbaa !69
  %316 = and i32 %315, 512
  %.not334 = icmp eq i32 %316, 0
  br i1 %.not334, label %363, label %317

317:                                              ; preds = %313
  %318 = getelementptr inbounds i8, ptr %268, i64 32
  %319 = load ptr, ptr %318, align 8, !tbaa !87
  %320 = load i32, ptr %269, align 8, !tbaa !77
  %321 = and i32 %320, 32
  %322 = icmp eq i32 %321, 0
  br i1 %322, label %328, label %323

323:                                              ; preds = %317
  %324 = getelementptr inbounds i8, ptr %319, i64 99
  %325 = load i8, ptr %324, align 1
  %326 = and i8 %325, 3
  %327 = icmp ne i8 %326, 2
  %brmerge = or i1 %.not301, %327
  br i1 %brmerge, label %328, label %345

328:                                              ; preds = %323, %317
  %329 = load i8, ptr %255, align 1, !tbaa !75
  %.not335 = icmp eq i8 %329, 0
  br i1 %.not335, label %341, label %330

330:                                              ; preds = %328
  %331 = load ptr, ptr %262, align 8, !tbaa !76
  %332 = getelementptr inbounds i8, ptr %331, i64 16
  %.0268407 = load ptr, ptr %332, align 8, !tbaa !88
  %333 = icmp ne ptr %.0268407, null
  %334 = icmp ne ptr %.0268407, %319
  %335 = select i1 %333, i1 %334, i1 false
  br i1 %335, label %.lr.ph411, label %._crit_edge412

.lr.ph411:                                        ; preds = %330, %.lr.ph411
  %.0268409 = phi ptr [ %.0268, %.lr.ph411 ], [ %.0268407, %330 ]
  %.0270408 = phi i32 [ %336, %.lr.ph411 ], [ %6, %330 ]
  %336 = add nsw i32 %.0270408, 1
  %337 = getelementptr inbounds i8, ptr %.0268409, i64 40
  %.0268 = load ptr, ptr %337, align 8, !tbaa !88
  %338 = icmp ne ptr %.0268, null
  %339 = icmp ne ptr %.0268, %319
  %340 = select i1 %338, i1 %339, i1 false
  br i1 %340, label %.lr.ph411, label %._crit_edge412, !llvm.loop !89

._crit_edge412:                                   ; preds = %.lr.ph411, %330
  %.0270.lcssa = phi i32 [ %6, %330 ], [ %336, %.lr.ph411 ]
  store i32 %.0270.lcssa, ptr %41, align 4, !tbaa !35
  br label %349

341:                                              ; preds = %328
  br i1 %brmerge348, label %342, label %349

342:                                              ; preds = %341
  %343 = load i32, ptr %256, align 4, !tbaa !90
  %344 = add nsw i32 %343, 1
  store i32 %344, ptr %256, align 4, !tbaa !90
  br label %349

345:                                              ; preds = %323
  %346 = getelementptr inbounds i8, ptr %.0280415, i64 4
  %347 = load i32, ptr %346, align 4, !tbaa !91
  %348 = getelementptr inbounds i8, ptr %.0280415, i64 8
  store i32 %347, ptr %348, align 8, !tbaa !92
  br label %363

349:                                              ; preds = %._crit_edge412, %342, %341
  %.1.ph = phi i32 [ %6, %341 ], [ %343, %342 ], [ %.0270.lcssa, %._crit_edge412 ]
  %.0269.ph = phi i32 [ 104, %341 ], [ 105, %342 ], [ 106, %._crit_edge412 ]
  %350 = getelementptr inbounds i8, ptr %.0280415, i64 8
  store i32 %.1.ph, ptr %350, align 8, !tbaa !92
  %351 = getelementptr inbounds i8, ptr %319, i64 88
  %352 = load i32, ptr %351, align 8, !tbaa !93
  %353 = call i32 @sqlite3VdbeAddOp3(ptr noundef %10, i32 noundef %.0269.ph, i32 noundef %.1.ph, i32 noundef %352, i32 noundef %266) #5
  call void @sqlite3VdbeSetP4KeyInfo(ptr noundef nonnull %0, ptr noundef %319) #5
  %354 = load i32, ptr %314, align 8, !tbaa !69
  %355 = and i32 %354, 15
  %.not338 = icmp ne i32 %355, 0
  %356 = and i32 %354, 32770
  %357 = icmp eq i32 %356, 0
  %or.cond350 = and i1 %.not338, %357
  br i1 %or.cond350, label %358, label %363

358:                                              ; preds = %349
  %359 = load i16, ptr %47, align 8, !tbaa !39
  %360 = and i16 %359, 1
  %361 = icmp eq i16 %360, 0
  br i1 %361, label %362, label %363

362:                                              ; preds = %358
  call void @sqlite3VdbeChangeP5(ptr noundef %10, i16 noundef zeroext 2) #5
  br label %363

363:                                              ; preds = %345, %362, %358, %349, %313
  %364 = icmp sgt i32 %266, -1
  br i1 %364, label %365, label %366

365:                                              ; preds = %363
  call void @sqlite3CodeVerifySchema(ptr noundef nonnull %0, i32 noundef %266) #5
  br label %366

366:                                              ; preds = %365, %363
  %367 = add nuw nsw i32 %.2283414, 1
  %368 = getelementptr inbounds i8, ptr %.0280415, i64 88
  %exitcond.not = icmp eq i32 %367, %.3
  br i1 %exitcond.not, label %._crit_edge418, label %257, !llvm.loop !95

._crit_edge418:                                   ; preds = %366, %252
  %369 = call i32 @sqlite3VdbeCurrentAddr(ptr noundef %10) #5
  %370 = getelementptr inbounds i8, ptr %33, i64 68
  store i32 %369, ptr %370, align 4, !tbaa !96
  %371 = load i8, ptr %34, align 1, !tbaa !27
  %.not325 = icmp eq i8 %371, 0
  br i1 %.not325, label %.preheader, label %.thread372

.preheader:                                       ; preds = %._crit_edge418
  br i1 %253, label %.lr.ph421, label %.loopexit

.lr.ph421:                                        ; preds = %.preheader
  %372 = getelementptr inbounds i8, ptr %1, i64 8
  %wide.trip.count = zext nneg i32 %.3 to i64
  br label %373

373:                                              ; preds = %.lr.ph421, %386
  %indvars.iv433 = phi i64 [ 0, %.lr.ph421 ], [ %indvars.iv.next434, %386 ]
  %.0278420 = phi i64 [ -1, %.lr.ph421 ], [ %394, %386 ]
  %374 = getelementptr inbounds [1 x %struct.WhereLevel], ptr %54, i64 0, i64 %indvars.iv433
  %375 = getelementptr inbounds i8, ptr %374, i64 72
  %376 = load ptr, ptr %375, align 8, !tbaa !64
  %377 = getelementptr inbounds i8, ptr %376, i64 40
  %378 = load i32, ptr %377, align 8, !tbaa !69
  %379 = and i32 %378, 16384
  %.not326 = icmp eq i32 %379, 0
  br i1 %.not326, label %386, label %380

380:                                              ; preds = %373
  %381 = getelementptr inbounds i8, ptr %374, i64 44
  %382 = load i8, ptr %381, align 4, !tbaa !79
  %383 = zext i8 %382 to i64
  %384 = getelementptr inbounds [1 x %struct.SrcList_item], ptr %372, i64 0, i64 %383
  call void @constructAutomaticIndex(ptr noundef nonnull %0, ptr noundef nonnull %59, ptr noundef nonnull %384, i64 noundef %.0278420, ptr noundef nonnull %374)
  %385 = load i8, ptr %34, align 1, !tbaa !27
  %.not327 = icmp eq i8 %385, 0
  br i1 %.not327, label %386, label %.thread372

386:                                              ; preds = %373, %380
  %387 = getelementptr inbounds i8, ptr %374, i64 44
  %388 = load i8, ptr %387, align 4, !tbaa !79
  %389 = zext i8 %388 to i32
  %390 = trunc nuw nsw i64 %indvars.iv433 to i32
  %391 = call i32 @sqlite3WhereExplainOneScan(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %374, i32 noundef %390, i32 noundef %389, i16 noundef zeroext %spec.select) #5
  %392 = call i32 @sqlite3VdbeCurrentAddr(ptr noundef %10) #5
  %393 = getelementptr inbounds i8, ptr %374, i64 32
  store i32 %392, ptr %393, align 8, !tbaa !97
  %394 = call i64 @sqlite3WhereCodeOneLoopStart(ptr noundef nonnull %33, i32 noundef %390, i64 noundef %.0278420) #5
  %395 = getelementptr inbounds i8, ptr %374, i64 24
  %396 = load i32, ptr %395, align 8, !tbaa !98
  store i32 %396, ptr %45, align 4, !tbaa !37
  %indvars.iv.next434 = add nuw nsw i64 %indvars.iv433, 1
  %exitcond436.not = icmp eq i64 %indvars.iv.next434, %wide.trip.count
  br i1 %exitcond436.not, label %.loopexit, label %373, !llvm.loop !99

397:                                              ; preds = %134, %132, %._crit_edge386
  %.not340 = icmp eq ptr %33, null
  br i1 %.not340, label %.loopexit, label %.thread372

.thread372:                                       ; preds = %380, %._crit_edge418, %155, %152, %139, %397
  %398 = load i32, ptr %52, align 4, !tbaa !42
  store i32 %398, ptr %50, align 4, !tbaa !41
  call void @whereInfoFree(ptr noundef nonnull %11, ptr noundef nonnull %33)
  br label %.loopexit

.loopexit:                                        ; preds = %386, %.preheader, %.thread376, %397, %.thread372, %24
  %.0 = phi ptr [ null, %24 ], [ null, %.thread372 ], [ null, %397 ], [ null, %.thread376 ], [ %33, %.preheader ], [ %33, %386 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #5
  ret ptr %.0
}

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

declare void @sqlite3ErrorMsg(ptr noundef, ptr noundef, ...) local_unnamed_addr #3

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

declare void @sqlite3DbFree(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @sqlite3VdbeMakeLabel(ptr noundef) local_unnamed_addr #3

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

declare void @sqlite3WhereClauseInit(ptr noundef, ptr noundef) local_unnamed_addr #3

declare void @sqlite3WhereSplit(ptr noundef, ptr noundef, i8 noundef zeroext) local_unnamed_addr #3

declare i32 @sqlite3ExprIsConstantNotJoin(ptr noundef) local_unnamed_addr #3

declare void @sqlite3ExprIfFalse(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

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

declare void @sqlite3WhereTabFuncArgs(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare void @sqlite3WhereExprAnalyze(ptr noundef, ptr noundef) local_unnamed_addr #3

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

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

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

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

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

declare i32 @sqlite3SchemaToIndex(ptr noundef, ptr noundef) local_unnamed_addr #3

declare ptr @sqlite3GetVTable(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @sqlite3VdbeAddOp4(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @sqlite3OpenTable(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @sqlite3VdbeChangeP4(ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @sqlite3VdbeChangeP5(ptr noundef, i16 noundef zeroext) local_unnamed_addr #3

declare void @sqlite3TableLock(ptr noundef, i32 noundef, i32 noundef, i8 noundef zeroext, ptr noundef) local_unnamed_addr #3

declare i32 @sqlite3VdbeAddOp3(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

declare void @sqlite3VdbeSetP4KeyInfo(ptr noundef, ptr noundef) local_unnamed_addr #3

declare void @sqlite3CodeVerifySchema(ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @sqlite3VdbeCurrentAddr(ptr noundef) local_unnamed_addr #3

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

declare i32 @sqlite3WhereExplainOneScan(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i16 noundef zeroext) local_unnamed_addr #3

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.ctlz.i64(i64, i1 immarg) #4

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 nounwind willreturn memory(argmem: write) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 16}
!6 = !{!"Parse", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !8, i64 28, !8, i64 29, !8, i64 30, !8, i64 31, !8, i64 32, !8, i64 33, !8, i64 34, !8, i64 35, !8, i64 36, !8, i64 37, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !7, i64 88, !7, i64 96, !11, i64 104, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !7, i64 144, !7, i64 152, !7, i64 160, !7, i64 168, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !8, i64 192, !8, i64 193, !8, i64 194, !8, i64 196, !8, i64 396, !11, i64 432, !11, i64 448, !12, i64 464, !8, i64 466, !8, i64 467, !8, i64 468, !10, i64 472, !10, i64 476, !10, i64 480, !10, i64 484, !7, i64 488, !7, i64 496, !7, i64 504, !7, i64 512, !7, i64 520, !7, i64 528, !11, i64 536, !7, i64 552, !7, i64 560, !7, i64 568, !7, i64 576, !7, i64 584}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"Token", !7, i64 0, !10, i64 8}
!12 = !{!"short", !8, i64 0}
!13 = !{!6, !7, i64 0}
!14 = !{!15, !10, i64 0}
!15 = !{!"ExprList", !10, i64 0, !7, i64 8}
!16 = !{!17, !7, i64 16}
!17 = !{!"WhereLoopBuilder", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !10, i64 40}
!18 = !{!19, !12, i64 80}
!19 = !{!"sqlite3", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !10, i64 40, !10, i64 44, !20, i64 48, !20, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !12, i64 80, !8, i64 82, !8, i64 83, !8, i64 84, !8, i64 85, !8, i64 86, !8, i64 87, !8, i64 88, !8, i64 89, !8, i64 90, !8, i64 91, !8, i64 92, !8, i64 93, !8, i64 94, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !8, i64 112, !10, i64 160, !21, i64 164, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !7, i64 200, !7, i64 208, !7, i64 216, !7, i64 224, !7, i64 232, !7, i64 240, !7, i64 248, !7, i64 256, !7, i64 264, !7, i64 272, !7, i64 280, !7, i64 288, !7, i64 296, !7, i64 304, !7, i64 312, !7, i64 320, !7, i64 328, !8, i64 336, !22, i64 344, !7, i64 400, !7, i64 408, !7, i64 416, !7, i64 424, !10, i64 432, !10, i64 436, !23, i64 440, !7, i64 464, !7, i64 472, !7, i64 480, !23, i64 488, !23, i64 512, !24, i64 536, !8, i64 560, !7, i64 624, !10, i64 632, !10, i64 636, !10, i64 640, !20, i64 648, !20, i64 656, !7, i64 664}
!20 = !{!"long long", !8, i64 0}
!21 = !{!"sqlite3InitInfo", !10, i64 0, !8, i64 4, !8, i64 5, !8, i64 6, !8, i64 7}
!22 = !{!"Lookaside", !10, i64 0, !12, i64 4, !8, i64 6, !10, i64 8, !10, i64 12, !8, i64 16, !7, i64 32, !7, i64 40, !7, i64 48}
!23 = !{!"Hash", !10, i64 0, !10, i64 4, !7, i64 8, !7, i64 16}
!24 = !{!"BusyHandler", !7, i64 0, !7, i64 8, !10, i64 16}
!25 = !{!26, !10, i64 0}
!26 = !{!"SrcList", !10, i64 0, !10, i64 4, !8, i64 8}
!27 = !{!19, !8, i64 85}
!28 = !{!29, !7, i64 0}
!29 = !{!"WhereInfo", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !12, i64 32, !8, i64 36, !10, i64 44, !10, i64 48, !10, i64 52, !12, i64 56, !8, i64 58, !8, i64 59, !8, i64 60, !8, i64 61, !8, i64 62, !8, i64 63, !8, i64 64, !10, i64 68, !7, i64 72, !20, i64 80, !12, i64 88, !30, i64 96, !31, i64 648, !8, i64 912}
!30 = !{!"WhereClause", !7, i64 0, !7, i64 8, !8, i64 16, !10, i64 20, !10, i64 24, !7, i64 32, !8, i64 40}
!31 = !{!"WhereMaskSet", !10, i64 0, !8, i64 4}
!32 = !{!29, !7, i64 8}
!33 = !{!29, !7, i64 16}
!34 = !{!29, !7, i64 24}
!35 = !{!10, !10, i64 0}
!36 = !{!29, !8, i64 58}
!37 = !{!29, !10, i64 44}
!38 = !{!29, !10, i64 48}
!39 = !{!29, !12, i64 56}
!40 = !{!29, !12, i64 32}
!41 = !{!6, !10, i64 180}
!42 = !{!29, !10, i64 52}
!43 = !{!17, !7, i64 0}
!44 = !{!17, !7, i64 8}
!45 = !{!17, !7, i64 24}
!46 = !{!31, !10, i64 0}
!47 = !{!30, !10, i64 20}
!48 = !{!30, !7, i64 32}
!49 = !{!50, !7, i64 0}
!50 = !{!"WhereTerm", !7, i64 0, !7, i64 8, !12, i64 16, !12, i64 18, !12, i64 20, !8, i64 22, !8, i64 23, !10, i64 24, !10, i64 28, !10, i64 32, !8, i64 40, !20, i64 48, !20, i64 56}
!51 = !{!50, !12, i64 18}
!52 = distinct !{!52, !53}
!53 = !{!"llvm.loop.mustprogress"}
!54 = !{!29, !8, i64 59}
!55 = !{!29, !8, i64 63}
!56 = !{!57, !10, i64 68}
!57 = !{!"SrcList_item", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !58, i64 60, !8, i64 64, !10, i64 68, !7, i64 72, !7, i64 80, !20, i64 88, !8, i64 96, !7, i64 104}
!58 = !{!"", !8, i64 0, !10, i64 1, !10, i64 1, !10, i64 1, !10, i64 1, !10, i64 1, !10, i64 1}
!59 = distinct !{!59, !53}
!60 = !{!29, !12, i64 88}
!61 = !{!19, !10, i64 44}
!62 = !{!29, !20, i64 80}
!63 = !{!6, !10, i64 48}
!64 = !{!65, !7, i64 72}
!65 = !{!"WhereLevel", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !8, i64 44, !8, i64 45, !8, i64 46, !8, i64 47, !10, i64 48, !10, i64 52, !8, i64 56, !7, i64 72, !20, i64 80}
!66 = !{!67, !8, i64 16}
!67 = !{!"WhereLoop", !20, i64 0, !20, i64 8, !8, i64 16, !8, i64 17, !12, i64 18, !12, i64 20, !12, i64 22, !8, i64 24, !10, i64 40, !12, i64 44, !12, i64 46, !12, i64 48, !7, i64 56, !7, i64 64, !8, i64 72}
!68 = !{!57, !8, i64 60}
!69 = !{!67, !10, i64 40}
!70 = !{!67, !20, i64 8}
!71 = !{!50, !20, i64 56}
!72 = !{!73, !10, i64 4}
!73 = !{!"Expr", !8, i64 0, !8, i64 1, !10, i64 4, !8, i64 8, !7, i64 16, !7, i64 24, !8, i64 32, !10, i64 40, !10, i64 44, !12, i64 48, !12, i64 50, !12, i64 52, !8, i64 54, !7, i64 56, !7, i64 64}
!74 = distinct !{!74, !53}
!75 = !{!29, !8, i64 61}
!76 = !{!57, !7, i64 32}
!77 = !{!78, !10, i64 64}
!78 = !{!"Table", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !10, i64 56, !10, i64 60, !10, i64 64, !12, i64 68, !12, i64 70, !12, i64 72, !12, i64 74, !8, i64 76, !10, i64 80, !10, i64 84, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120}
!79 = !{!65, !8, i64 44}
!80 = !{!78, !7, i64 112}
!81 = !{!78, !7, i64 24}
!82 = !{!78, !10, i64 84}
!83 = !{!78, !12, i64 70}
!84 = !{!57, !20, i64 88}
!85 = !{!78, !10, i64 56}
!86 = !{!78, !7, i64 0}
!87 = !{!8, !8, i64 0}
!88 = !{!7, !7, i64 0}
!89 = distinct !{!89, !53}
!90 = !{!6, !10, i64 52}
!91 = !{!65, !10, i64 4}
!92 = !{!65, !10, i64 8}
!93 = !{!94, !10, i64 88}
!94 = !{!"Index", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !10, i64 88, !12, i64 92, !12, i64 94, !12, i64 96, !8, i64 98, !10, i64 99, !10, i64 99, !10, i64 99, !10, i64 99, !10, i64 99, !10, i64 99, !10, i64 99}
!95 = distinct !{!95, !53}
!96 = !{!29, !10, i64 68}
!97 = !{!65, !10, i64 32}
!98 = !{!65, !10, i64 24}
!99 = distinct !{!99, !53}


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