; LLVM IR from mncoppola/rpef :: utilities_src/squashfs2.1/lzma/C/7zip/Compress/LZMA (LZMAEncoder)

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

%class.CLZInWindow = type { ptr, ptr, ptr, i32, i8, ptr, ptr, i32, i32, i32, i32, i32, i32 }
%"class.NPat2H::CPatricia" = type { %struct.IMatchFinder, %struct.IMatchFinderSetCallback, %class.CMyUnknownImp, %class.CLZInWindow, i32, i32, ptr, ptr, ptr, i32, i32, i32, i32, i8, i32, ptr, %class.CMyComPtr }
%struct.IMatchFinder = type { %struct.IInWindowStream }
%struct.IInWindowStream = type { %struct.IUnknown }
%struct.IUnknown = type { ptr }
%struct.IMatchFinderSetCallback = type { %struct.IUnknown }
%class.CMyUnknownImp = type { i32 }
%class.CMyComPtr = type { ptr }
%"union.NPat2H::CDescendant" = type { i32 }
%"struct.NPat2H::CNode" = type { i32, i32, %union.anon.0 }
%union.anon.0 = type { [4 x %"union.NPat2H::CDescendant"] }

; 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: mustprogress uwtable
declare dso_local void @_ZN6NPat2H9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(168), i32 noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6NPat2H11CDescendant6IsNodeEv(ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN6NPat2H9CPatricia15GetLongestMatchEPj(ptr noundef nonnull align 8 dereferenceable(168) %0, ptr noundef %1) unnamed_addr #1 align 2 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca i8, align 1
  %28 = alloca i8, align 1
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i8, align 1
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i8, align 1
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i8, align 1
  %49 = alloca i32, align 4
  %50 = alloca i8, align 1
  %51 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %52 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  %53 = getelementptr inbounds i8, ptr %52, i64 24
  %54 = getelementptr inbounds %class.CLZInWindow, ptr %53, i32 0, i32 8
  %55 = load i32, ptr %54, align 4, !tbaa !9
  %56 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 5
  %57 = load i32, ptr %56, align 4, !tbaa !13
  %58 = add i32 %55, %57
  %59 = getelementptr inbounds i8, ptr %52, i64 24
  %60 = getelementptr inbounds %class.CLZInWindow, ptr %59, i32 0, i32 12
  %61 = load i32, ptr %60, align 4, !tbaa !21
  %62 = icmp ule i32 %58, %61
  br i1 %62, label %63, label %66

63:                                               ; preds = %2
  %64 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 5
  %65 = load i32, ptr %64, align 4, !tbaa !13
  store i32 %65, ptr %6, align 4, !tbaa !22
  br label %78

66:                                               ; preds = %2
  %67 = getelementptr inbounds i8, ptr %52, i64 24
  %68 = getelementptr inbounds %class.CLZInWindow, ptr %67, i32 0, i32 12
  %69 = load i32, ptr %68, align 4, !tbaa !21
  %70 = getelementptr inbounds i8, ptr %52, i64 24
  %71 = getelementptr inbounds %class.CLZInWindow, ptr %70, i32 0, i32 8
  %72 = load i32, ptr %71, align 4, !tbaa !9
  %73 = sub i32 %69, %72
  store i32 %73, ptr %6, align 4, !tbaa !22
  %74 = load i32, ptr %6, align 4, !tbaa !22
  %75 = icmp ult i32 %74, 3
  br i1 %75, label %76, label %77

76:                                               ; preds = %66
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %923

77:                                               ; preds = %66
  br label %78

78:                                               ; preds = %77, %63
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  %79 = getelementptr inbounds i8, ptr %52, i64 24
  %80 = getelementptr inbounds %class.CLZInWindow, ptr %79, i32 0, i32 8
  %81 = load i32, ptr %80, align 4, !tbaa !9
  %82 = add i32 %81, 3
  store i32 %82, ptr %8, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  %83 = getelementptr inbounds i8, ptr %52, i64 24
  %84 = getelementptr inbounds %class.CLZInWindow, ptr %83, i32 0, i32 6
  %85 = load ptr, ptr %84, align 8, !tbaa !23
  %86 = getelementptr inbounds i8, ptr %52, i64 24
  %87 = getelementptr inbounds %class.CLZInWindow, ptr %86, i32 0, i32 8
  %88 = load i32, ptr %87, align 4, !tbaa !9
  %89 = zext i32 %88 to i64
  %90 = getelementptr inbounds i8, ptr %85, i64 %89
  %91 = load i8, ptr %90, align 1, !tbaa !24
  %92 = zext i8 %91 to i32
  %93 = shl i32 %92, 8
  %94 = getelementptr inbounds i8, ptr %52, i64 24
  %95 = getelementptr inbounds %class.CLZInWindow, ptr %94, i32 0, i32 6
  %96 = load ptr, ptr %95, align 8, !tbaa !23
  %97 = getelementptr inbounds i8, ptr %52, i64 24
  %98 = getelementptr inbounds %class.CLZInWindow, ptr %97, i32 0, i32 8
  %99 = load i32, ptr %98, align 4, !tbaa !9
  %100 = add i32 %99, 1
  %101 = zext i32 %100 to i64
  %102 = getelementptr inbounds i8, ptr %96, i64 %101
  %103 = load i8, ptr %102, align 1, !tbaa !24
  %104 = zext i8 %103 to i32
  %105 = or i32 %93, %104
  store i32 %105, ptr %9, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  %106 = load i32, ptr %9, align 4, !tbaa !22
  %107 = shl i32 %106, 8
  %108 = getelementptr inbounds i8, ptr %52, i64 24
  %109 = getelementptr inbounds %class.CLZInWindow, ptr %108, i32 0, i32 6
  %110 = load ptr, ptr %109, align 8, !tbaa !23
  %111 = getelementptr inbounds i8, ptr %52, i64 24
  %112 = getelementptr inbounds %class.CLZInWindow, ptr %111, i32 0, i32 8
  %113 = load i32, ptr %112, align 4, !tbaa !9
  %114 = add i32 %113, 2
  %115 = zext i32 %114 to i64
  %116 = getelementptr inbounds i8, ptr %110, i64 %115
  %117 = load i8, ptr %116, align 1, !tbaa !24
  %118 = zext i8 %117 to i32
  %119 = or i32 %107, %118
  store i32 %119, ptr %10, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  %120 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 7
  %121 = load ptr, ptr %120, align 8, !tbaa !25
  %122 = load i32, ptr %9, align 4, !tbaa !22
  %123 = zext i32 %122 to i64
  %124 = getelementptr inbounds %"union.NPat2H::CDescendant", ptr %121, i64 %123
  store ptr %124, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %125 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 6
  %126 = load ptr, ptr %125, align 8, !tbaa !26
  %127 = load i32, ptr %10, align 4, !tbaa !22
  %128 = zext i32 %127 to i64
  %129 = getelementptr inbounds %"union.NPat2H::CDescendant", ptr %126, i64 %128
  store ptr %129, ptr %12, align 8, !tbaa !5
  %130 = load ptr, ptr %11, align 8, !tbaa !5
  %131 = load i32, ptr %130, align 4, !tbaa !24
  %132 = icmp ule i32 %131, 1
  br i1 %132, label %133, label %163

133:                                              ; preds = %78
  %134 = load ptr, ptr %11, align 8, !tbaa !5
  %135 = load i32, ptr %134, align 4, !tbaa !24
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %156

137:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  %138 = load i32, ptr %10, align 4, !tbaa !22
  %139 = and i32 %138, 16776960
  store i32 %139, ptr %13, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  store i32 0, ptr %14, align 4, !tbaa !22
  br label %140

140:                                              ; preds = %152, %137
  %141 = load i32, ptr %14, align 4, !tbaa !22
  %142 = icmp ult i32 %141, 256
  br i1 %142, label %144, label %143

143:                                              ; preds = %140
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  br label %155

144:                                              ; preds = %140
  %145 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 6
  %146 = load ptr, ptr %145, align 8, !tbaa !26
  %147 = load i32, ptr %13, align 4, !tbaa !22
  %148 = load i32, ptr %14, align 4, !tbaa !22
  %149 = add i32 %147, %148
  %150 = zext i32 %149 to i64
  %151 = getelementptr inbounds %"union.NPat2H::CDescendant", ptr %146, i64 %150
  call void @_ZN6NPat2H11CDescendant9MakeEmptyEv(ptr noundef nonnull align 4 dereferenceable(4) %151)
  br label %152

152:                                              ; preds = %144
  %153 = load i32, ptr %14, align 4, !tbaa !22
  %154 = add i32 %153, 1
  store i32 %154, ptr %14, align 4, !tbaa !22
  br label %140, !llvm.loop !27

155:                                              ; preds = %143
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  br label %156

156:                                              ; preds = %155, %133
  %157 = load i32, ptr %8, align 4, !tbaa !22
  %158 = add i32 %157, 2
  %159 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 %158, ptr %159, align 4, !tbaa !24
  %160 = load i32, ptr %8, align 4, !tbaa !22
  %161 = add i32 %160, -2147483648
  %162 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 %161, ptr %162, align 4, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %922

163:                                              ; preds = %78
  %164 = load i32, ptr %8, align 4, !tbaa !22
  %165 = load ptr, ptr %11, align 8, !tbaa !5
  %166 = load i32, ptr %165, align 4, !tbaa !24
  %167 = sub i32 %166, 2
  %168 = sub i32 %164, %167
  %169 = sub i32 %168, 1
  %170 = load ptr, ptr %5, align 8, !tbaa !5
  %171 = getelementptr inbounds i32, ptr %170, i64 2
  store i32 %169, ptr %171, align 4, !tbaa !22
  %172 = load i32, ptr %8, align 4, !tbaa !22
  %173 = add i32 %172, 2
  %174 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 %173, ptr %174, align 4, !tbaa !24
  %175 = load ptr, ptr %5, align 8, !tbaa !5
  %176 = getelementptr inbounds i32, ptr %175, i64 2
  %177 = load i32, ptr %176, align 4, !tbaa !22
  %178 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 4
  %179 = load i32, ptr %178, align 8, !tbaa !29
  %180 = icmp uge i32 %177, %179
  br i1 %180, label %181, label %191

181:                                              ; preds = %163
  %182 = load ptr, ptr %12, align 8, !tbaa !5
  %183 = call noundef zeroext i1 @_ZNK6NPat2H11CDescendant6IsNodeEv(ptr noundef nonnull align 4 dereferenceable(4) %182)
  br i1 %183, label %184, label %187

184:                                              ; preds = %181
  %185 = load ptr, ptr %12, align 8, !tbaa !5
  %186 = load i32, ptr %185, align 4, !tbaa !24
  call void @_ZN6NPat2H9CPatricia10RemoveNodeEj(ptr noundef nonnull align 8 dereferenceable(168) %52, i32 noundef %186)
  br label %187

187:                                              ; preds = %184, %181
  %188 = load i32, ptr %8, align 4, !tbaa !22
  %189 = add i32 %188, -2147483648
  %190 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 %189, ptr %190, align 4, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %922

191:                                              ; preds = %163
  %192 = load i32, ptr %6, align 4, !tbaa !22
  %193 = icmp eq i32 %192, 2
  br i1 %193, label %194, label %195

194:                                              ; preds = %191
  store i32 2, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %922

195:                                              ; preds = %191
  %196 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 13
  %197 = load i8, ptr %196, align 8, !tbaa !30, !range !31, !noundef !32
  %198 = trunc i8 %197 to i1
  br i1 %198, label %199, label %266

199:                                              ; preds = %195
  %200 = load ptr, ptr %12, align 8, !tbaa !5
  %201 = call noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %200)
  br i1 %201, label %202, label %204

202:                                              ; preds = %199
  %203 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 14
  store i32 0, ptr %203, align 4, !tbaa !33
  br label %204

204:                                              ; preds = %202, %199
  %205 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 14
  %206 = load i32, ptr %205, align 4, !tbaa !33
  %207 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 4
  %208 = load i32, ptr %207, align 8, !tbaa !29
  %209 = sub i32 %208, 1
  %210 = icmp uge i32 %206, %209
  br i1 %210, label %211, label %214

211:                                              ; preds = %204
  %212 = load i32, ptr %10, align 4, !tbaa !22
  call void @_ZN6NPat2H9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(168) %52, i32 noundef %212)
  %213 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 14
  store i32 0, ptr %213, align 4, !tbaa !33
  br label %214

214:                                              ; preds = %211, %204
  %215 = load i32, ptr %6, align 4, !tbaa !22
  %216 = sub i32 %215, 1
  %217 = load ptr, ptr %52, align 8, !tbaa !34
  %218 = getelementptr inbounds ptr, ptr %217, i64 6
  %219 = load ptr, ptr %218, align 8
  %220 = call noundef zeroext i8 %219(ptr noundef nonnull align 8 dereferenceable(168) %52, i32 noundef %216)
  %221 = zext i8 %220 to i32
  %222 = load i32, ptr %6, align 4, !tbaa !22
  %223 = sub i32 %222, 2
  %224 = load ptr, ptr %52, align 8, !tbaa !34
  %225 = getelementptr inbounds ptr, ptr %224, i64 6
  %226 = load ptr, ptr %225, align 8
  %227 = call noundef zeroext i8 %226(ptr noundef nonnull align 8 dereferenceable(168) %52, i32 noundef %223)
  %228 = zext i8 %227 to i32
  %229 = icmp eq i32 %221, %228
  br i1 %229, label %230, label %257

230:                                              ; preds = %214
  %231 = load ptr, ptr %12, align 8, !tbaa !5
  %232 = call noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %231)
  br i1 %232, label %233, label %237

233:                                              ; preds = %230
  %234 = load i32, ptr %8, align 4, !tbaa !22
  %235 = add i32 %234, -2147483648
  %236 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 %235, ptr %236, align 4, !tbaa !24
  br label %241

237:                                              ; preds = %230
  %238 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 14
  %239 = load i32, ptr %238, align 4, !tbaa !33
  %240 = add i32 %239, 1
  store i32 %240, ptr %238, align 4, !tbaa !33
  br label %241

241:                                              ; preds = %237, %233
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  store i32 3, ptr %15, align 4, !tbaa !22
  br label %242

242:                                              ; preds = %252, %241
  %243 = load i32, ptr %15, align 4, !tbaa !22
  %244 = load i32, ptr %6, align 4, !tbaa !22
  %245 = icmp ule i32 %243, %244
  br i1 %245, label %247, label %246

246:                                              ; preds = %242
  store i32 5, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  br label %255

247:                                              ; preds = %242
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = load i32, ptr %15, align 4, !tbaa !22
  %250 = zext i32 %249 to i64
  %251 = getelementptr inbounds i32, ptr %248, i64 %250
  store i32 0, ptr %251, align 4, !tbaa !22
  br label %252

252:                                              ; preds = %247
  %253 = load i32, ptr %15, align 4, !tbaa !22
  %254 = add i32 %253, 1
  store i32 %254, ptr %15, align 4, !tbaa !22
  br label %242, !llvm.loop !36

255:                                              ; preds = %246
  %256 = load i32, ptr %6, align 4, !tbaa !22
  store i32 %256, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %922

257:                                              ; preds = %214
  %258 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 14
  %259 = load i32, ptr %258, align 4, !tbaa !33
  %260 = icmp ugt i32 %259, 0
  br i1 %260, label %261, label %263

261:                                              ; preds = %257
  %262 = load i32, ptr %10, align 4, !tbaa !22
  call void @_ZN6NPat2H9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(168) %52, i32 noundef %262)
  br label %263

263:                                              ; preds = %261, %257
  br label %264

264:                                              ; preds = %263
  %265 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 13
  store i8 0, ptr %265, align 8, !tbaa !30
  br label %266

266:                                              ; preds = %264, %195
  %267 = load ptr, ptr %12, align 8, !tbaa !5
  %268 = call noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsEmptyEv(ptr noundef nonnull align 4 dereferenceable(4) %267)
  br i1 %268, label %269, label %273

269:                                              ; preds = %266
  %270 = load i32, ptr %8, align 4, !tbaa !22
  %271 = add i32 %270, -2147483648
  %272 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 %271, ptr %272, align 4, !tbaa !24
  store i32 2, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %922

273:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %274 = load i32, ptr %6, align 4, !tbaa !22
  %275 = sub i32 %274, 3
  store i32 %275, ptr %16, align 4, !tbaa !22
  %276 = load ptr, ptr %12, align 8, !tbaa !5
  %277 = call noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %276)
  br i1 %277, label %278, label %457

278:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %279 = load ptr, ptr %12, align 8, !tbaa !5
  %280 = load i32, ptr %279, align 4, !tbaa !24
  store i32 %280, ptr %17, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  %281 = load i32, ptr %8, align 4, !tbaa !22
  %282 = load i32, ptr %17, align 4, !tbaa !22
  %283 = sub i32 %282, -2147483648
  %284 = sub i32 %281, %283
  store i32 %284, ptr %18, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %285 = load i32, ptr %18, align 4, !tbaa !22
  %286 = sub i32 %285, 1
  store i32 %286, ptr %19, align 4, !tbaa !22
  %287 = load i32, ptr %19, align 4, !tbaa !22
  %288 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 4
  %289 = load i32, ptr %288, align 8, !tbaa !29
  %290 = icmp uge i32 %287, %289
  br i1 %290, label %291, label %295

291:                                              ; preds = %278
  %292 = load i32, ptr %8, align 4, !tbaa !22
  %293 = add i32 %292, -2147483648
  %294 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 %293, ptr %294, align 4, !tbaa !24
  store i32 2, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %456

295:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %296 = load ptr, ptr %5, align 8, !tbaa !5
  %297 = getelementptr inbounds i32, ptr %296, i64 3
  store ptr %297, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %298 = getelementptr inbounds i8, ptr %52, i64 24
  %299 = getelementptr inbounds %class.CLZInWindow, ptr %298, i32 0, i32 6
  %300 = load ptr, ptr %299, align 8, !tbaa !23
  %301 = load i32, ptr %8, align 4, !tbaa !22
  %302 = zext i32 %301 to i64
  %303 = getelementptr inbounds i8, ptr %300, i64 %302
  store ptr %303, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %20, align 4, !tbaa !22
  br label %304

304:                                              ; preds = %337, %295
  br i1 true, label %305, label %340

305:                                              ; preds = %304
  %306 = load i32, ptr %19, align 4, !tbaa !22
  %307 = load ptr, ptr %5, align 8, !tbaa !5
  %308 = getelementptr inbounds i32, ptr %307, i32 1
  store ptr %308, ptr %5, align 8, !tbaa !5
  store i32 %306, ptr %307, align 4, !tbaa !22
  %309 = load i32, ptr %20, align 4, !tbaa !22
  %310 = load i32, ptr %16, align 4, !tbaa !22
  %311 = icmp eq i32 %309, %310
  br i1 %311, label %312, label %318

312:                                              ; preds = %305
  %313 = load i32, ptr %8, align 4, !tbaa !22
  %314 = add i32 %313, -2147483648
  %315 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 %314, ptr %315, align 4, !tbaa !24
  %316 = load i32, ptr %20, align 4, !tbaa !22
  %317 = add i32 3, %316
  store i32 %317, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %455

318:                                              ; preds = %305
  %319 = load ptr, ptr %21, align 8, !tbaa !5
  %320 = load i32, ptr %20, align 4, !tbaa !22
  %321 = zext i32 %320 to i64
  %322 = getelementptr inbounds i8, ptr %319, i64 %321
  %323 = load i8, ptr %322, align 1, !tbaa !24
  %324 = zext i8 %323 to i32
  %325 = load ptr, ptr %21, align 8, !tbaa !5
  %326 = load i32, ptr %20, align 4, !tbaa !22
  %327 = zext i32 %326 to i64
  %328 = load i32, ptr %18, align 4, !tbaa !22
  %329 = zext i32 %328 to i64
  %330 = sub i64 %327, %329
  %331 = getelementptr inbounds i8, ptr %325, i64 %330
  %332 = load i8, ptr %331, align 1, !tbaa !24
  %333 = zext i8 %332 to i32
  %334 = icmp ne i32 %324, %333
  br i1 %334, label %335, label %336

335:                                              ; preds = %318
  br label %340

336:                                              ; preds = %318
  br label %337

337:                                              ; preds = %336
  %338 = load i32, ptr %20, align 4, !tbaa !22
  %339 = add i32 %338, 1
  store i32 %339, ptr %20, align 4, !tbaa !22
  br label %304, !llvm.loop !37

340:                                              ; preds = %335, %304
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %341 = load i32, ptr %20, align 4, !tbaa !22
  %342 = add i32 %341, 3
  store i32 %342, ptr %22, align 4, !tbaa !22
  %343 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 9
  %344 = load i32, ptr %343, align 8, !tbaa !38
  %345 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 %344, ptr %345, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  %346 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 8
  %347 = load ptr, ptr %346, align 8, !tbaa !39
  %348 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 9
  %349 = load i32, ptr %348, align 8, !tbaa !38
  %350 = zext i32 %349 to i64
  %351 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %347, i64 %350
  store ptr %351, ptr %23, align 8, !tbaa !5
  %352 = load ptr, ptr %23, align 8, !tbaa !5
  %353 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %352, i32 0, i32 2
  %354 = load i32, ptr %353, align 4, !tbaa !24
  %355 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 9
  store i32 %354, ptr %355, align 8, !tbaa !38
  %356 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 11
  %357 = load i32, ptr %356, align 8, !tbaa !40
  %358 = add i32 %357, 1
  store i32 %358, ptr %356, align 8, !tbaa !40
  %359 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 9
  %360 = load i32, ptr %359, align 8, !tbaa !38
  %361 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 10
  %362 = load i32, ptr %361, align 4, !tbaa !41
  %363 = icmp ugt i32 %360, %362
  br i1 %363, label %364, label %378

364:                                              ; preds = %340
  %365 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 9
  %366 = load i32, ptr %365, align 8, !tbaa !38
  %367 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 10
  store i32 %366, ptr %367, align 4, !tbaa !41
  %368 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 9
  %369 = load i32, ptr %368, align 8, !tbaa !38
  %370 = add i32 %369, 1
  %371 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 8
  %372 = load ptr, ptr %371, align 8, !tbaa !39
  %373 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 9
  %374 = load i32, ptr %373, align 8, !tbaa !38
  %375 = zext i32 %374 to i64
  %376 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %372, i64 %375
  %377 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %376, i32 0, i32 2
  store i32 %370, ptr %377, align 4, !tbaa !24
  br label %378

378:                                              ; preds = %364, %340
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  store i32 0, ptr %24, align 4, !tbaa !22
  br label %379

379:                                              ; preds = %389, %378
  %380 = load i32, ptr %24, align 4, !tbaa !22
  %381 = icmp ult i32 %380, 4
  br i1 %381, label %383, label %382

382:                                              ; preds = %379
  store i32 11, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  br label %392

383:                                              ; preds = %379
  %384 = load ptr, ptr %23, align 8, !tbaa !5
  %385 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %384, i32 0, i32 2
  %386 = load i32, ptr %24, align 4, !tbaa !22
  %387 = zext i32 %386 to i64
  %388 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %385, i64 0, i64 %387
  store i32 2147483647, ptr %388, align 4, !tbaa !24
  br label %389

389:                                              ; preds = %383
  %390 = load i32, ptr %24, align 4, !tbaa !22
  %391 = add i32 %390, 1
  store i32 %391, ptr %24, align 4, !tbaa !22
  br label %379, !llvm.loop !42

392:                                              ; preds = %382
  %393 = load i32, ptr %8, align 4, !tbaa !22
  %394 = load ptr, ptr %23, align 8, !tbaa !5
  %395 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %394, i32 0, i32 0
  store i32 %393, ptr %395, align 4, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #3
  %396 = load i32, ptr %22, align 4, !tbaa !22
  %397 = load ptr, ptr %52, align 8, !tbaa !34
  %398 = getelementptr inbounds ptr, ptr %397, i64 6
  %399 = load ptr, ptr %398, align 8
  %400 = call noundef zeroext i8 %399(ptr noundef nonnull align 8 dereferenceable(168) %52, i32 noundef %396)
  store i8 %400, ptr %25, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #3
  %401 = load i32, ptr %22, align 4, !tbaa !22
  %402 = load i32, ptr %18, align 4, !tbaa !22
  %403 = sub i32 %401, %402
  %404 = load ptr, ptr %52, align 8, !tbaa !34
  %405 = getelementptr inbounds ptr, ptr %404, i64 6
  %406 = load ptr, ptr %405, align 8
  %407 = call noundef zeroext i8 %406(ptr noundef nonnull align 8 dereferenceable(168) %52, i32 noundef %403)
  store i8 %407, ptr %26, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  %408 = load i32, ptr %20, align 4, !tbaa !22
  %409 = mul i32 %408, 8
  store i32 %409, ptr %29, align 4, !tbaa !22
  br label %410

410:                                              ; preds = %426, %392
  br label %411

411:                                              ; preds = %410
  %412 = load i8, ptr %25, align 1, !tbaa !24
  %413 = zext i8 %412 to i32
  %414 = and i32 %413, 3
  %415 = trunc i32 %414 to i8
  store i8 %415, ptr %27, align 1, !tbaa !24
  %416 = load i8, ptr %26, align 1, !tbaa !24
  %417 = zext i8 %416 to i32
  %418 = and i32 %417, 3
  %419 = trunc i32 %418 to i8
  store i8 %419, ptr %28, align 1, !tbaa !24
  %420 = load i8, ptr %27, align 1, !tbaa !24
  %421 = zext i8 %420 to i32
  %422 = load i8, ptr %28, align 1, !tbaa !24
  %423 = zext i8 %422 to i32
  %424 = icmp ne i32 %421, %423
  br i1 %424, label %425, label %426

425:                                              ; preds = %411
  br label %437

426:                                              ; preds = %411
  %427 = load i8, ptr %25, align 1, !tbaa !24
  %428 = zext i8 %427 to i32
  %429 = ashr i32 %428, 2
  %430 = trunc i32 %429 to i8
  store i8 %430, ptr %25, align 1, !tbaa !24
  %431 = load i8, ptr %26, align 1, !tbaa !24
  %432 = zext i8 %431 to i32
  %433 = ashr i32 %432, 2
  %434 = trunc i32 %433 to i8
  store i8 %434, ptr %26, align 1, !tbaa !24
  %435 = load i32, ptr %29, align 4, !tbaa !22
  %436 = add i32 %435, 2
  store i32 %436, ptr %29, align 4, !tbaa !22
  br label %410, !llvm.loop !45

437:                                              ; preds = %425
  %438 = load i32, ptr %29, align 4, !tbaa !22
  %439 = load ptr, ptr %23, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %439, i32 0, i32 1
  store i32 %438, ptr %440, align 4, !tbaa !46
  %441 = load i32, ptr %8, align 4, !tbaa !22
  %442 = add i32 %441, -2147483648
  %443 = load ptr, ptr %23, align 8, !tbaa !5
  %444 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %443, i32 0, i32 2
  %445 = load i8, ptr %27, align 1, !tbaa !24
  %446 = zext i8 %445 to i64
  %447 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %444, i64 0, i64 %446
  store i32 %442, ptr %447, align 4, !tbaa !24
  %448 = load i32, ptr %17, align 4, !tbaa !22
  %449 = load ptr, ptr %23, align 8, !tbaa !5
  %450 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %449, i32 0, i32 2
  %451 = load i8, ptr %28, align 1, !tbaa !24
  %452 = zext i8 %451 to i64
  %453 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %450, i64 0, i64 %452
  store i32 %448, ptr %453, align 4, !tbaa !24
  %454 = load i32, ptr %22, align 4, !tbaa !22
  store i32 %454, ptr %3, align 4
  store i32 1, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  br label %455

455:                                              ; preds = %437, %312
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  br label %456

456:                                              ; preds = %455, %291
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  br label %921

457:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  %458 = getelementptr inbounds i8, ptr %52, i64 24
  %459 = getelementptr inbounds %class.CLZInWindow, ptr %458, i32 0, i32 6
  %460 = load ptr, ptr %459, align 8, !tbaa !23
  %461 = load i32, ptr %8, align 4, !tbaa !22
  %462 = zext i32 %461 to i64
  %463 = getelementptr inbounds i8, ptr %460, i64 %462
  store ptr %463, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  %464 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %464, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  store i32 0, ptr %32, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #3
  store i8 0, ptr %33, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  %465 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %465, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  %466 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 8
  %467 = load ptr, ptr %466, align 8, !tbaa !39
  %468 = load ptr, ptr %34, align 8, !tbaa !5
  %469 = load i32, ptr %468, align 4, !tbaa !22
  %470 = zext i32 %469 to i64
  %471 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %467, i64 %470
  store ptr %471, ptr %35, align 8, !tbaa !5
  %472 = load ptr, ptr %5, align 8, !tbaa !5
  %473 = getelementptr inbounds i32, ptr %472, i64 3
  store ptr %473, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  %474 = load ptr, ptr %30, align 8, !tbaa !5
  %475 = load i32, ptr %16, align 4, !tbaa !22
  %476 = zext i32 %475 to i64
  %477 = getelementptr inbounds i8, ptr %474, i64 %476
  store ptr %477, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  %478 = getelementptr inbounds i8, ptr %52, i64 24
  %479 = getelementptr inbounds %class.CLZInWindow, ptr %478, i32 0, i32 6
  %480 = load ptr, ptr %479, align 8, !tbaa !23
  store ptr %480, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %481 = load i32, ptr %8, align 4, !tbaa !22
  %482 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 4
  %483 = load i32, ptr %482, align 8, !tbaa !29
  %484 = icmp ugt i32 %481, %483
  br i1 %484, label %485, label %490

485:                                              ; preds = %457
  %486 = load i32, ptr %8, align 4, !tbaa !22
  %487 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 4
  %488 = load i32, ptr %487, align 8, !tbaa !29
  %489 = sub i32 %486, %488
  store i32 %489, ptr %38, align 4, !tbaa !22
  br label %491

490:                                              ; preds = %457
  store i32 0, ptr %38, align 4, !tbaa !22
  br label %491

491:                                              ; preds = %490, %485
  br label %492

492:                                              ; preds = %756, %491
  br label %493

493:                                              ; preds = %492
  %494 = load ptr, ptr %35, align 8, !tbaa !5
  %495 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %494, i32 0, i32 0
  %496 = load i32, ptr %495, align 4, !tbaa !43
  %497 = load i32, ptr %38, align 4, !tbaa !22
  %498 = icmp ult i32 %496, %497
  br i1 %498, label %499, label %518

499:                                              ; preds = %493
  %500 = load ptr, ptr %34, align 8, !tbaa !5
  %501 = load i32, ptr %500, align 4, !tbaa !22
  call void @_ZN6NPat2H9CPatricia10RemoveNodeEj(ptr noundef nonnull align 8 dereferenceable(168) %52, i32 noundef %501)
  %502 = load i32, ptr %8, align 4, !tbaa !22
  %503 = add i32 %502, -2147483648
  %504 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 %503, ptr %504, align 4, !tbaa !22
  %505 = load ptr, ptr %31, align 8, !tbaa !5
  %506 = load ptr, ptr %30, align 8, !tbaa !5
  %507 = icmp eq ptr %505, %506
  br i1 %507, label %508, label %509

508:                                              ; preds = %499
  store i32 2, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %920

509:                                              ; preds = %499
  %510 = load ptr, ptr %31, align 8, !tbaa !5
  %511 = load ptr, ptr %30, align 8, !tbaa !5
  %512 = ptrtoint ptr %510 to i64
  %513 = ptrtoint ptr %511 to i64
  %514 = sub i64 %512, %513
  %515 = sub nsw i64 %514, 1
  %516 = trunc i64 %515 to i32
  %517 = add i32 3, %516
  store i32 %517, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %920

518:                                              ; preds = %493
  %519 = load i32, ptr %32, align 4, !tbaa !22
  %520 = icmp eq i32 %519, 0
  br i1 %520, label %521, label %562

521:                                              ; preds = %518
  %522 = load i32, ptr %8, align 4, !tbaa !22
  %523 = load ptr, ptr %35, align 8, !tbaa !5
  %524 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %523, i32 0, i32 0
  %525 = load i32, ptr %524, align 4, !tbaa !43
  %526 = sub i32 %522, %525
  %527 = sub i32 %526, 1
  %528 = load ptr, ptr %5, align 8, !tbaa !5
  %529 = getelementptr inbounds i32, ptr %528, i32 1
  store ptr %529, ptr %5, align 8, !tbaa !5
  store i32 %527, ptr %528, align 4, !tbaa !22
  %530 = load ptr, ptr %31, align 8, !tbaa !5
  %531 = load ptr, ptr %36, align 8, !tbaa !5
  %532 = icmp uge ptr %530, %531
  br i1 %532, label %533, label %556

533:                                              ; preds = %521
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  store i32 0, ptr %39, align 4, !tbaa !22
  br label %534

534:                                              ; preds = %546, %533
  %535 = load i32, ptr %39, align 4, !tbaa !22
  %536 = icmp ult i32 %535, 4
  br i1 %536, label %538, label %537

537:                                              ; preds = %534
  store i32 18, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  br label %549

538:                                              ; preds = %534
  %539 = load i32, ptr %8, align 4, !tbaa !22
  %540 = add i32 %539, -2147483648
  %541 = load ptr, ptr %35, align 8, !tbaa !5
  %542 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %541, i32 0, i32 2
  %543 = load i32, ptr %39, align 4, !tbaa !22
  %544 = zext i32 %543 to i64
  %545 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %542, i64 0, i64 %544
  store i32 %540, ptr %545, align 4, !tbaa !24
  br label %546

546:                                              ; preds = %538
  %547 = load i32, ptr %39, align 4, !tbaa !22
  %548 = add i32 %547, 1
  store i32 %548, ptr %39, align 4, !tbaa !22
  br label %534, !llvm.loop !47

549:                                              ; preds = %537
  %550 = load i32, ptr %8, align 4, !tbaa !22
  %551 = load ptr, ptr %35, align 8, !tbaa !5
  %552 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %551, i32 0, i32 0
  store i32 %550, ptr %552, align 4, !tbaa !43
  %553 = load ptr, ptr %35, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %553, i32 0, i32 1
  store i32 0, ptr %554, align 4, !tbaa !46
  %555 = load i32, ptr %6, align 4, !tbaa !22
  store i32 %555, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %920

556:                                              ; preds = %521
  %557 = load ptr, ptr %31, align 8, !tbaa !5
  %558 = getelementptr inbounds i8, ptr %557, i32 1
  store ptr %558, ptr %31, align 8, !tbaa !5
  %559 = load i8, ptr %557, align 1, !tbaa !24
  store i8 %559, ptr %33, align 1, !tbaa !24
  %560 = load ptr, ptr %37, align 8, !tbaa !5
  %561 = getelementptr inbounds i8, ptr %560, i32 1
  store ptr %561, ptr %37, align 8, !tbaa !5
  store i32 8, ptr %32, align 4, !tbaa !22
  br label %562

562:                                              ; preds = %556, %518
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  %563 = load ptr, ptr %35, align 8, !tbaa !5
  %564 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %563, i32 0, i32 1
  %565 = load i32, ptr %564, align 4, !tbaa !46
  store i32 %565, ptr %40, align 4, !tbaa !22
  %566 = load i32, ptr %40, align 4, !tbaa !22
  %567 = icmp ugt i32 %566, 0
  br i1 %567, label %568, label %704

568:                                              ; preds = %562
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #3
  %569 = load ptr, ptr %37, align 8, !tbaa !5
  %570 = load ptr, ptr %35, align 8, !tbaa !5
  %571 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %570, i32 0, i32 0
  %572 = load i32, ptr %571, align 4, !tbaa !43
  %573 = zext i32 %572 to i64
  %574 = getelementptr inbounds i8, ptr %569, i64 %573
  %575 = getelementptr inbounds i8, ptr %574, i64 -1
  %576 = load i8, ptr %575, align 1, !tbaa !24
  %577 = zext i8 %576 to i32
  %578 = load i32, ptr %32, align 4, !tbaa !22
  %579 = sub i32 8, %578
  %580 = ashr i32 %577, %579
  %581 = load i8, ptr %33, align 1, !tbaa !24
  %582 = zext i8 %581 to i32
  %583 = xor i32 %580, %582
  %584 = trunc i32 %583 to i8
  store i8 %584, ptr %41, align 1, !tbaa !24
  br label %585

585:                                              ; preds = %651, %568
  %586 = load i32, ptr %32, align 4, !tbaa !22
  %587 = load i32, ptr %40, align 4, !tbaa !22
  %588 = icmp ule i32 %586, %587
  br i1 %588, label %589, label %669

589:                                              ; preds = %585
  %590 = load i8, ptr %41, align 1, !tbaa !24
  %591 = zext i8 %590 to i32
  %592 = icmp ne i32 %591, 0
  br i1 %592, label %593, label %608

593:                                              ; preds = %589
  %594 = load ptr, ptr %35, align 8, !tbaa !5
  %595 = load ptr, ptr %34, align 8, !tbaa !5
  %596 = load i8, ptr %33, align 1, !tbaa !24
  %597 = load i8, ptr %41, align 1, !tbaa !24
  %598 = load i32, ptr %40, align 4, !tbaa !22
  %599 = load i32, ptr %8, align 4, !tbaa !22
  call void @_ZN6NPat2H9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(168) %52, ptr noundef %594, ptr noundef %595, i8 noundef zeroext %596, i8 noundef zeroext %597, i32 noundef %598, i32 noundef %599)
  %600 = load ptr, ptr %31, align 8, !tbaa !5
  %601 = load ptr, ptr %30, align 8, !tbaa !5
  %602 = ptrtoint ptr %600 to i64
  %603 = ptrtoint ptr %601 to i64
  %604 = sub i64 %602, %603
  %605 = sub nsw i64 %604, 1
  %606 = trunc i64 %605 to i32
  %607 = add i32 3, %606
  store i32 %607, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %701

608:                                              ; preds = %589
  %609 = load i32, ptr %8, align 4, !tbaa !22
  %610 = load ptr, ptr %35, align 8, !tbaa !5
  %611 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %610, i32 0, i32 0
  %612 = load i32, ptr %611, align 4, !tbaa !43
  %613 = sub i32 %609, %612
  %614 = sub i32 %613, 1
  %615 = load ptr, ptr %5, align 8, !tbaa !5
  %616 = getelementptr inbounds i32, ptr %615, i32 1
  store ptr %616, ptr %5, align 8, !tbaa !5
  store i32 %614, ptr %615, align 4, !tbaa !22
  %617 = load i32, ptr %32, align 4, !tbaa !22
  %618 = load i32, ptr %40, align 4, !tbaa !22
  %619 = sub i32 %618, %617
  store i32 %619, ptr %40, align 4, !tbaa !22
  %620 = load ptr, ptr %31, align 8, !tbaa !5
  %621 = load ptr, ptr %36, align 8, !tbaa !5
  %622 = icmp uge ptr %620, %621
  br i1 %622, label %623, label %651

623:                                              ; preds = %608
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #3
  store i32 0, ptr %42, align 4, !tbaa !22
  br label %624

624:                                              ; preds = %636, %623
  %625 = load i32, ptr %42, align 4, !tbaa !22
  %626 = icmp ult i32 %625, 4
  br i1 %626, label %628, label %627

627:                                              ; preds = %624
  store i32 23, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  br label %639

628:                                              ; preds = %624
  %629 = load i32, ptr %8, align 4, !tbaa !22
  %630 = add i32 %629, -2147483648
  %631 = load ptr, ptr %35, align 8, !tbaa !5
  %632 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %631, i32 0, i32 2
  %633 = load i32, ptr %42, align 4, !tbaa !22
  %634 = zext i32 %633 to i64
  %635 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %632, i64 0, i64 %634
  store i32 %630, ptr %635, align 4, !tbaa !24
  br label %636

636:                                              ; preds = %628
  %637 = load i32, ptr %42, align 4, !tbaa !22
  %638 = add i32 %637, 1
  store i32 %638, ptr %42, align 4, !tbaa !22
  br label %624, !llvm.loop !48

639:                                              ; preds = %627
  %640 = load i32, ptr %8, align 4, !tbaa !22
  %641 = load ptr, ptr %35, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %641, i32 0, i32 0
  store i32 %640, ptr %642, align 4, !tbaa !43
  %643 = load ptr, ptr %35, align 8, !tbaa !5
  %644 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %643, i32 0, i32 1
  %645 = load i32, ptr %644, align 4, !tbaa !46
  %646 = load i32, ptr %40, align 4, !tbaa !22
  %647 = sub i32 %645, %646
  %648 = load ptr, ptr %35, align 8, !tbaa !5
  %649 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %648, i32 0, i32 1
  store i32 %647, ptr %649, align 4, !tbaa !46
  %650 = load i32, ptr %6, align 4, !tbaa !22
  store i32 %650, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %701

651:                                              ; preds = %608
  store i32 8, ptr %32, align 4, !tbaa !22
  %652 = load ptr, ptr %31, align 8, !tbaa !5
  %653 = getelementptr inbounds i8, ptr %652, i32 1
  store ptr %653, ptr %31, align 8, !tbaa !5
  %654 = load i8, ptr %652, align 1, !tbaa !24
  store i8 %654, ptr %33, align 1, !tbaa !24
  %655 = load i8, ptr %33, align 1, !tbaa !24
  %656 = zext i8 %655 to i32
  %657 = load ptr, ptr %37, align 8, !tbaa !5
  %658 = load ptr, ptr %35, align 8, !tbaa !5
  %659 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %658, i32 0, i32 0
  %660 = load i32, ptr %659, align 4, !tbaa !43
  %661 = zext i32 %660 to i64
  %662 = getelementptr inbounds i8, ptr %657, i64 %661
  %663 = load i8, ptr %662, align 1, !tbaa !24
  %664 = zext i8 %663 to i32
  %665 = xor i32 %656, %664
  %666 = trunc i32 %665 to i8
  store i8 %666, ptr %41, align 1, !tbaa !24
  %667 = load ptr, ptr %37, align 8, !tbaa !5
  %668 = getelementptr inbounds i8, ptr %667, i32 1
  store ptr %668, ptr %37, align 8, !tbaa !5
  br label %585, !llvm.loop !49

669:                                              ; preds = %585
  %670 = load i8, ptr %41, align 1, !tbaa !24
  %671 = zext i8 %670 to i32
  %672 = load i32, ptr %40, align 4, !tbaa !22
  %673 = shl i32 1, %672
  %674 = sub nsw i32 %673, 1
  %675 = and i32 %671, %674
  %676 = icmp ne i32 %675, 0
  br i1 %676, label %677, label %692

677:                                              ; preds = %669
  %678 = load ptr, ptr %35, align 8, !tbaa !5
  %679 = load ptr, ptr %34, align 8, !tbaa !5
  %680 = load i8, ptr %33, align 1, !tbaa !24
  %681 = load i8, ptr %41, align 1, !tbaa !24
  %682 = load i32, ptr %40, align 4, !tbaa !22
  %683 = load i32, ptr %8, align 4, !tbaa !22
  call void @_ZN6NPat2H9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(168) %52, ptr noundef %678, ptr noundef %679, i8 noundef zeroext %680, i8 noundef zeroext %681, i32 noundef %682, i32 noundef %683)
  %684 = load ptr, ptr %31, align 8, !tbaa !5
  %685 = load ptr, ptr %30, align 8, !tbaa !5
  %686 = ptrtoint ptr %684 to i64
  %687 = ptrtoint ptr %685 to i64
  %688 = sub i64 %686, %687
  %689 = sub nsw i64 %688, 1
  %690 = trunc i64 %689 to i32
  %691 = add i32 3, %690
  store i32 %691, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %701

692:                                              ; preds = %669
  %693 = load i32, ptr %40, align 4, !tbaa !22
  %694 = load i8, ptr %33, align 1, !tbaa !24
  %695 = zext i8 %694 to i32
  %696 = ashr i32 %695, %693
  %697 = trunc i32 %696 to i8
  store i8 %697, ptr %33, align 1, !tbaa !24
  %698 = load i32, ptr %40, align 4, !tbaa !22
  %699 = load i32, ptr %32, align 4, !tbaa !22
  %700 = sub i32 %699, %698
  store i32 %700, ptr %32, align 4, !tbaa !22
  store i32 0, ptr %7, align 4
  br label %701

701:                                              ; preds = %692, %677, %639, %593
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #3
  %702 = load i32, ptr %7, align 4
  switch i32 %702, label %754 [
    i32 0, label %703
  ]

703:                                              ; preds = %701
  br label %704

704:                                              ; preds = %703, %562
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #3
  %705 = load i8, ptr %33, align 1, !tbaa !24
  %706 = zext i8 %705 to i32
  %707 = and i32 %706, 3
  store i32 %707, ptr %43, align 4, !tbaa !22
  %708 = load i32, ptr %32, align 4, !tbaa !22
  %709 = sub i32 %708, 2
  store i32 %709, ptr %32, align 4, !tbaa !22
  %710 = load ptr, ptr %35, align 8, !tbaa !5
  %711 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %710, i32 0, i32 2
  %712 = load i32, ptr %43, align 4, !tbaa !22
  %713 = zext i32 %712 to i64
  %714 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %711, i64 0, i64 %713
  store ptr %714, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #3
  %715 = load ptr, ptr %34, align 8, !tbaa !5
  %716 = load i32, ptr %715, align 4, !tbaa !22
  store i32 %716, ptr %44, align 4, !tbaa !22
  %717 = load i32, ptr %8, align 4, !tbaa !22
  %718 = load ptr, ptr %35, align 8, !tbaa !5
  %719 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %718, i32 0, i32 0
  store i32 %717, ptr %719, align 4, !tbaa !43
  %720 = load i32, ptr %44, align 4, !tbaa !22
  %721 = icmp ult i32 %720, 2147483647
  br i1 %721, label %722, label %732

722:                                              ; preds = %704
  %723 = load i8, ptr %33, align 1, !tbaa !24
  %724 = zext i8 %723 to i32
  %725 = ashr i32 %724, 2
  %726 = trunc i32 %725 to i8
  store i8 %726, ptr %33, align 1, !tbaa !24
  %727 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 8
  %728 = load ptr, ptr %727, align 8, !tbaa !39
  %729 = load i32, ptr %44, align 4, !tbaa !22
  %730 = zext i32 %729 to i64
  %731 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %728, i64 %730
  store ptr %731, ptr %35, align 8, !tbaa !5
  br label %752

732:                                              ; preds = %704
  %733 = load i32, ptr %44, align 4, !tbaa !22
  %734 = icmp eq i32 %733, 2147483647
  br i1 %734, label %735, label %751

735:                                              ; preds = %732
  %736 = load i32, ptr %8, align 4, !tbaa !22
  %737 = add i32 %736, -2147483648
  %738 = load ptr, ptr %35, align 8, !tbaa !5
  %739 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %738, i32 0, i32 2
  %740 = load i32, ptr %43, align 4, !tbaa !22
  %741 = zext i32 %740 to i64
  %742 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %739, i64 0, i64 %741
  store i32 %737, ptr %742, align 4, !tbaa !24
  %743 = load ptr, ptr %31, align 8, !tbaa !5
  %744 = load ptr, ptr %30, align 8, !tbaa !5
  %745 = ptrtoint ptr %743 to i64
  %746 = ptrtoint ptr %744 to i64
  %747 = sub i64 %745, %746
  %748 = sub nsw i64 %747, 1
  %749 = trunc i64 %748 to i32
  %750 = add i32 3, %749
  store i32 %750, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %753

751:                                              ; preds = %732
  store i32 17, ptr %7, align 4
  br label %753

752:                                              ; preds = %722
  store i32 0, ptr %7, align 4
  br label %753

753:                                              ; preds = %752, %751, %735
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  br label %754

754:                                              ; preds = %753, %701
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  %755 = load i32, ptr %7, align 4
  switch i32 %755, label %920 [
    i32 0, label %756
    i32 17, label %757
  ]

756:                                              ; preds = %754
  br label %492, !llvm.loop !50

757:                                              ; preds = %754
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #3
  %758 = load i8, ptr %33, align 1, !tbaa !24
  %759 = zext i8 %758 to i32
  %760 = and i32 %759, 3
  store i32 %760, ptr %45, align 4, !tbaa !22
  %761 = load i8, ptr %33, align 1, !tbaa !24
  %762 = zext i8 %761 to i32
  %763 = ashr i32 %762, 2
  %764 = trunc i32 %763 to i8
  store i8 %764, ptr %33, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #3
  %765 = load ptr, ptr %35, align 8, !tbaa !5
  %766 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %765, i32 0, i32 2
  %767 = load i32, ptr %45, align 4, !tbaa !22
  %768 = zext i32 %767 to i64
  %769 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %766, i64 0, i64 %768
  %770 = load i32, ptr %769, align 4, !tbaa !24
  store i32 %770, ptr %46, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #3
  %771 = load i32, ptr %46, align 4, !tbaa !22
  %772 = sub i32 %771, -2147483648
  store i32 %772, ptr %47, align 4, !tbaa !22
  %773 = load i32, ptr %47, align 4, !tbaa !22
  %774 = load i32, ptr %38, align 4, !tbaa !22
  %775 = icmp ult i32 %773, %774
  br i1 %775, label %776, label %792

776:                                              ; preds = %757
  %777 = load i32, ptr %8, align 4, !tbaa !22
  %778 = add i32 %777, -2147483648
  %779 = load ptr, ptr %35, align 8, !tbaa !5
  %780 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %779, i32 0, i32 2
  %781 = load i32, ptr %45, align 4, !tbaa !22
  %782 = zext i32 %781 to i64
  %783 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %780, i64 0, i64 %782
  store i32 %778, ptr %783, align 4, !tbaa !24
  %784 = load ptr, ptr %31, align 8, !tbaa !5
  %785 = load ptr, ptr %30, align 8, !tbaa !5
  %786 = ptrtoint ptr %784 to i64
  %787 = ptrtoint ptr %785 to i64
  %788 = sub i64 %786, %787
  %789 = sub nsw i64 %788, 1
  %790 = trunc i64 %789 to i32
  %791 = add i32 3, %790
  store i32 %791, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %919

792:                                              ; preds = %757
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #3
  store i32 0, ptr %49, align 4, !tbaa !22
  %793 = load i32, ptr %32, align 4, !tbaa !22
  %794 = icmp ne i32 %793, 0
  br i1 %794, label %795, label %839

795:                                              ; preds = %792
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #3
  %796 = load ptr, ptr %37, align 8, !tbaa !5
  %797 = load i32, ptr %47, align 4, !tbaa !22
  %798 = zext i32 %797 to i64
  %799 = getelementptr inbounds i8, ptr %796, i64 %798
  %800 = getelementptr inbounds i8, ptr %799, i64 -1
  %801 = load i8, ptr %800, align 1, !tbaa !24
  store i8 %801, ptr %50, align 1, !tbaa !24
  %802 = load i32, ptr %32, align 4, !tbaa !22
  %803 = sub i32 8, %802
  %804 = load i8, ptr %50, align 1, !tbaa !24
  %805 = zext i8 %804 to i32
  %806 = ashr i32 %805, %803
  %807 = trunc i32 %806 to i8
  store i8 %807, ptr %50, align 1, !tbaa !24
  %808 = load i8, ptr %50, align 1, !tbaa !24
  %809 = zext i8 %808 to i32
  %810 = load i8, ptr %33, align 1, !tbaa !24
  %811 = zext i8 %810 to i32
  %812 = xor i32 %809, %811
  %813 = trunc i32 %812 to i8
  store i8 %813, ptr %48, align 1, !tbaa !24
  %814 = load i8, ptr %48, align 1, !tbaa !24
  %815 = zext i8 %814 to i32
  %816 = icmp ne i32 %815, 0
  br i1 %816, label %817, label %832

817:                                              ; preds = %795
  %818 = load ptr, ptr %35, align 8, !tbaa !5
  %819 = load i8, ptr %33, align 1, !tbaa !24
  %820 = load i8, ptr %48, align 1, !tbaa !24
  %821 = load i32, ptr %49, align 4, !tbaa !22
  %822 = load i32, ptr %8, align 4, !tbaa !22
  %823 = load i32, ptr %45, align 4, !tbaa !22
  call void @_ZN6NPat2H9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(168) %52, ptr noundef %818, i8 noundef zeroext %819, i8 noundef zeroext %820, i32 noundef %821, i32 noundef %822, i32 noundef %823)
  %824 = load ptr, ptr %31, align 8, !tbaa !5
  %825 = load ptr, ptr %30, align 8, !tbaa !5
  %826 = ptrtoint ptr %824 to i64
  %827 = ptrtoint ptr %825 to i64
  %828 = sub i64 %826, %827
  %829 = sub nsw i64 %828, 1
  %830 = trunc i64 %829 to i32
  %831 = add i32 3, %830
  store i32 %831, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %836

832:                                              ; preds = %795
  %833 = load i32, ptr %32, align 4, !tbaa !22
  %834 = load i32, ptr %49, align 4, !tbaa !22
  %835 = add i32 %834, %833
  store i32 %835, ptr %49, align 4, !tbaa !22
  store i32 0, ptr %7, align 4
  br label %836

836:                                              ; preds = %832, %817
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #3
  %837 = load i32, ptr %7, align 4
  switch i32 %837, label %918 [
    i32 0, label %838
  ]

838:                                              ; preds = %836
  br label %839

839:                                              ; preds = %838, %792
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #3
  %840 = getelementptr inbounds i8, ptr %52, i64 24
  %841 = getelementptr inbounds %class.CLZInWindow, ptr %840, i32 0, i32 6
  %842 = load ptr, ptr %841, align 8, !tbaa !23
  %843 = load i32, ptr %47, align 4, !tbaa !22
  %844 = zext i32 %843 to i64
  %845 = getelementptr inbounds i8, ptr %842, i64 %844
  %846 = load ptr, ptr %31, align 8, !tbaa !5
  %847 = load ptr, ptr %30, align 8, !tbaa !5
  %848 = ptrtoint ptr %846 to i64
  %849 = ptrtoint ptr %847 to i64
  %850 = sub i64 %848, %849
  %851 = getelementptr inbounds i8, ptr %845, i64 %850
  store ptr %851, ptr %51, align 8, !tbaa !5
  br label %852

852:                                              ; preds = %893, %839
  %853 = load ptr, ptr %31, align 8, !tbaa !5
  %854 = load ptr, ptr %36, align 8, !tbaa !5
  %855 = icmp ult ptr %853, %854
  br i1 %855, label %856, label %896

856:                                              ; preds = %852
  %857 = load ptr, ptr %31, align 8, !tbaa !5
  %858 = getelementptr inbounds i8, ptr %857, i32 1
  store ptr %858, ptr %31, align 8, !tbaa !5
  %859 = load i8, ptr %857, align 1, !tbaa !24
  store i8 %859, ptr %33, align 1, !tbaa !24
  %860 = load i32, ptr %8, align 4, !tbaa !22
  %861 = load i32, ptr %47, align 4, !tbaa !22
  %862 = sub i32 %860, %861
  %863 = sub i32 %862, 1
  %864 = load ptr, ptr %5, align 8, !tbaa !5
  %865 = getelementptr inbounds i32, ptr %864, i32 1
  store ptr %865, ptr %5, align 8, !tbaa !5
  store i32 %863, ptr %864, align 4, !tbaa !22
  %866 = load i8, ptr %33, align 1, !tbaa !24
  %867 = zext i8 %866 to i32
  %868 = load ptr, ptr %51, align 8, !tbaa !5
  %869 = getelementptr inbounds i8, ptr %868, i32 1
  store ptr %869, ptr %51, align 8, !tbaa !5
  %870 = load i8, ptr %868, align 1, !tbaa !24
  %871 = zext i8 %870 to i32
  %872 = xor i32 %867, %871
  %873 = trunc i32 %872 to i8
  store i8 %873, ptr %48, align 1, !tbaa !24
  %874 = load i8, ptr %48, align 1, !tbaa !24
  %875 = zext i8 %874 to i32
  %876 = icmp ne i32 %875, 0
  br i1 %876, label %877, label %892

877:                                              ; preds = %856
  %878 = load ptr, ptr %35, align 8, !tbaa !5
  %879 = load i8, ptr %33, align 1, !tbaa !24
  %880 = load i8, ptr %48, align 1, !tbaa !24
  %881 = load i32, ptr %49, align 4, !tbaa !22
  %882 = load i32, ptr %8, align 4, !tbaa !22
  %883 = load i32, ptr %45, align 4, !tbaa !22
  call void @_ZN6NPat2H9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(168) %52, ptr noundef %878, i8 noundef zeroext %879, i8 noundef zeroext %880, i32 noundef %881, i32 noundef %882, i32 noundef %883)
  %884 = load ptr, ptr %31, align 8, !tbaa !5
  %885 = load ptr, ptr %30, align 8, !tbaa !5
  %886 = ptrtoint ptr %884 to i64
  %887 = ptrtoint ptr %885 to i64
  %888 = sub i64 %886, %887
  %889 = sub nsw i64 %888, 1
  %890 = trunc i64 %889 to i32
  %891 = add i32 3, %890
  store i32 %891, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %917

892:                                              ; preds = %856
  br label %893

893:                                              ; preds = %892
  %894 = load i32, ptr %49, align 4, !tbaa !22
  %895 = add i32 %894, 8
  store i32 %895, ptr %49, align 4, !tbaa !22
  br label %852, !llvm.loop !51

896:                                              ; preds = %852
  %897 = load i32, ptr %8, align 4, !tbaa !22
  %898 = load i32, ptr %47, align 4, !tbaa !22
  %899 = sub i32 %897, %898
  %900 = sub i32 %899, 1
  %901 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 %900, ptr %901, align 4, !tbaa !22
  %902 = load i32, ptr %8, align 4, !tbaa !22
  %903 = add i32 %902, -2147483648
  %904 = load ptr, ptr %35, align 8, !tbaa !5
  %905 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %904, i32 0, i32 2
  %906 = load i32, ptr %45, align 4, !tbaa !22
  %907 = zext i32 %906 to i64
  %908 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %905, i64 0, i64 %907
  store i32 %903, ptr %908, align 4, !tbaa !24
  %909 = load ptr, ptr %5, align 8, !tbaa !5
  %910 = load i32, ptr %909, align 4, !tbaa !22
  %911 = icmp eq i32 %910, 0
  br i1 %911, label %912, label %915

912:                                              ; preds = %896
  %913 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 13
  store i8 1, ptr %913, align 8, !tbaa !30
  %914 = getelementptr inbounds %"class.NPat2H::CPatricia", ptr %52, i32 0, i32 14
  store i32 0, ptr %914, align 4, !tbaa !33
  br label %915

915:                                              ; preds = %912, %896
  %916 = load i32, ptr %6, align 4, !tbaa !22
  store i32 %916, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %917

917:                                              ; preds = %915, %877
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  br label %918

918:                                              ; preds = %917, %836
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #3
  br label %919

919:                                              ; preds = %918, %776
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #3
  br label %920

920:                                              ; preds = %919, %754, %549, %509, %508
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  br label %921

921:                                              ; preds = %920, %456
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  br label %922

922:                                              ; preds = %921, %269, %255, %194, %187, %156
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  br label %923

923:                                              ; preds = %922, %76
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  %924 = load i32, ptr %3, align 4
  ret i32 %924
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6NPat2H11CDescendant9MakeEmptyEv(ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6NPat2H9CPatricia10RemoveNodeEj(ptr noundef nonnull align 8 dereferenceable(168), i32 noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsEmptyEv(ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6NPat2H9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef, ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i32 noundef, i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6NPat2H9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef) #2 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 52}
!10 = !{!"_ZTS11CLZInWindow", !6, i64 8, !6, i64 16, !11, i64 24, !12, i64 28, !6, i64 32, !6, i64 40, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68}
!11 = !{!"int", !7, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !11, i64 100}
!14 = !{!"_ZTSN6NPat2H9CPatriciaE", !15, i64 0, !18, i64 8, !19, i64 16, !10, i64 24, !11, i64 96, !11, i64 100, !6, i64 104, !6, i64 112, !6, i64 120, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !12, i64 144, !11, i64 148, !6, i64 152, !20, i64 160}
!15 = !{!"_ZTS12IMatchFinder", !16, i64 0}
!16 = !{!"_ZTS15IInWindowStream", !17, i64 0}
!17 = !{!"_ZTS8IUnknown"}
!18 = !{!"_ZTS23IMatchFinderSetCallback", !17, i64 0}
!19 = !{!"_ZTS13CMyUnknownImp", !11, i64 0}
!20 = !{!"_ZTS9CMyComPtrI20IMatchFinderCallbackE", !6, i64 0}
!21 = !{!10, !11, i64 68}
!22 = !{!11, !11, i64 0}
!23 = !{!10, !6, i64 40}
!24 = !{!7, !7, i64 0}
!25 = !{!14, !6, i64 112}
!26 = !{!14, !6, i64 104}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!14, !11, i64 96}
!30 = !{!14, !12, i64 144}
!31 = !{i8 0, i8 2}
!32 = !{}
!33 = !{!14, !11, i64 148}
!34 = !{!35, !35, i64 0}
!35 = !{!"vtable pointer", !8, i64 0}
!36 = distinct !{!36, !28}
!37 = distinct !{!37, !28}
!38 = !{!14, !11, i64 128}
!39 = !{!14, !6, i64 120}
!40 = !{!14, !11, i64 136}
!41 = !{!14, !11, i64 132}
!42 = distinct !{!42, !28}
!43 = !{!44, !11, i64 0}
!44 = !{!"_ZTSN6NPat2H5CNodeE", !11, i64 0, !11, i64 4, !7, i64 8}
!45 = distinct !{!45, !28}
!46 = !{!44, !11, i64 4}
!47 = distinct !{!47, !28}
!48 = distinct !{!48, !28}
!49 = distinct !{!49, !28}
!50 = distinct !{!50, !28}
!51 = distinct !{!51, !28}


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

%"union.NPat2H::CDescendant" = type { i32 }
%"struct.NPat2H::CNode" = type { i32, i32, %union.anon.0 }
%union.anon.0 = type { [4 x %"union.NPat2H::CDescendant"] }

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6NPat2H9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(168), i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6NPat2H11CDescendant6IsNodeEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN6NPat2H9CPatricia15GetLongestMatchEPj(ptr noundef nonnull align 8 dereferenceable(168) %0, ptr nocapture noundef %1) unnamed_addr #0 align 2 {
  %3 = getelementptr inbounds i8, ptr %0, i64 76
  %4 = load i32, ptr %3, align 4, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 100
  %6 = load i32, ptr %5, align 4, !tbaa !12
  %7 = add i32 %6, %4
  %8 = getelementptr inbounds i8, ptr %0, i64 92
  %9 = load i32, ptr %8, align 4, !tbaa !20
  %.not = icmp ugt i32 %7, %9
  br i1 %.not, label %10, label %13

10:                                               ; preds = %2
  %11 = sub i32 %9, %4
  %12 = icmp ult i32 %11, 3
  br i1 %12, label %.thread359, label %13

13:                                               ; preds = %2, %10
  %.0277 = phi i32 [ %11, %10 ], [ %6, %2 ]
  %14 = add i32 %4, 3
  %15 = getelementptr inbounds i8, ptr %0, i64 64
  %16 = load ptr, ptr %15, align 8, !tbaa !21
  %17 = zext i32 %4 to i64
  %18 = getelementptr inbounds i8, ptr %16, i64 %17
  %19 = load i8, ptr %18, align 1, !tbaa !22
  %20 = zext i8 %19 to i32
  %21 = shl nuw nsw i32 %20, 8
  %22 = add i32 %4, 1
  %23 = zext i32 %22 to i64
  %24 = getelementptr inbounds i8, ptr %16, i64 %23
  %25 = load i8, ptr %24, align 1, !tbaa !22
  %26 = zext i8 %25 to i32
  %27 = or disjoint i32 %21, %26
  %28 = shl nuw nsw i32 %27, 8
  %29 = add i32 %4, 2
  %30 = zext i32 %29 to i64
  %31 = getelementptr inbounds i8, ptr %16, i64 %30
  %32 = load i8, ptr %31, align 1, !tbaa !22
  %33 = zext i8 %32 to i32
  %34 = or disjoint i32 %28, %33
  %35 = getelementptr inbounds i8, ptr %0, i64 112
  %36 = load ptr, ptr %35, align 8, !tbaa !23
  %37 = zext nneg i32 %27 to i64
  %38 = getelementptr inbounds %"union.NPat2H::CDescendant", ptr %36, i64 %37
  %39 = getelementptr inbounds i8, ptr %0, i64 104
  %40 = load ptr, ptr %39, align 8, !tbaa !24
  %41 = zext nneg i32 %34 to i64
  %42 = getelementptr inbounds %"union.NPat2H::CDescendant", ptr %40, i64 %41
  %43 = load i32, ptr %38, align 4, !tbaa !22
  %44 = icmp ult i32 %43, 2
  br i1 %44, label %45, label %53

45:                                               ; preds = %13
  %46 = icmp eq i32 %43, 0
  br i1 %46, label %.preheader.preheader, label %.loopexit

.preheader.preheader:                             ; preds = %45
  %47 = zext nneg i32 %28 to i64
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %indvars.iv = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next, %.preheader ]
  %48 = load ptr, ptr %39, align 8, !tbaa !24
  %49 = or disjoint i64 %indvars.iv, %47
  %50 = getelementptr inbounds %"union.NPat2H::CDescendant", ptr %48, i64 %49
  tail call void @_ZN6NPat2H11CDescendant9MakeEmptyEv(ptr noundef nonnull align 4 dereferenceable(4) %50)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 256
  br i1 %exitcond.not, label %.loopexit, label %.preheader, !llvm.loop !25

.loopexit:                                        ; preds = %.preheader, %45
  %51 = add i32 %4, 5
  store i32 %51, ptr %38, align 4, !tbaa !22
  %52 = add i32 %4, -2147483645
  store i32 %52, ptr %42, align 4, !tbaa !22
  br label %.thread359

53:                                               ; preds = %13
  %54 = add i32 %4, 4
  %55 = sub i32 %54, %43
  %56 = getelementptr inbounds i8, ptr %1, i64 8
  store i32 %55, ptr %56, align 4, !tbaa !27
  %57 = add i32 %4, 5
  store i32 %57, ptr %38, align 4, !tbaa !22
  %58 = load i32, ptr %56, align 4, !tbaa !27
  %59 = getelementptr inbounds i8, ptr %0, i64 96
  %60 = load i32, ptr %59, align 8, !tbaa !28
  %.not337 = icmp ult i32 %58, %60
  br i1 %.not337, label %67, label %61

61:                                               ; preds = %53
  %62 = tail call noundef zeroext i1 @_ZNK6NPat2H11CDescendant6IsNodeEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
  br i1 %62, label %63, label %65

63:                                               ; preds = %61
  %64 = load i32, ptr %42, align 4, !tbaa !22
  tail call void @_ZN6NPat2H9CPatricia10RemoveNodeEj(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %64)
  br label %65

65:                                               ; preds = %63, %61
  %66 = add i32 %4, -2147483645
  store i32 %66, ptr %42, align 4, !tbaa !22
  br label %.thread359

67:                                               ; preds = %53
  %68 = icmp eq i32 %.0277, 2
  br i1 %68, label %.thread359, label %69

69:                                               ; preds = %67
  %70 = getelementptr inbounds i8, ptr %0, i64 144
  %71 = load i8, ptr %70, align 8, !tbaa !29, !range !30, !noundef !31
  %72 = trunc nuw i8 %71 to i1
  br i1 %72, label %73, label %112

73:                                               ; preds = %69
  %74 = tail call noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
  %75 = getelementptr inbounds i8, ptr %0, i64 148
  br i1 %74, label %76, label %._crit_edge560

._crit_edge560:                                   ; preds = %73
  %.pre = load i32, ptr %75, align 4, !tbaa !32
  br label %77

76:                                               ; preds = %73
  store i32 0, ptr %75, align 4, !tbaa !32
  br label %77

77:                                               ; preds = %._crit_edge560, %76
  %78 = phi i32 [ %.pre, %._crit_edge560 ], [ 0, %76 ]
  %79 = getelementptr inbounds i8, ptr %0, i64 148
  %80 = load i32, ptr %59, align 8, !tbaa !28
  %81 = add i32 %80, -1
  %.not338 = icmp ult i32 %78, %81
  br i1 %.not338, label %83, label %82

82:                                               ; preds = %77
  tail call void @_ZN6NPat2H9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %34)
  store i32 0, ptr %79, align 4, !tbaa !32
  br label %83

83:                                               ; preds = %82, %77
  %84 = add i32 %.0277, -1
  %85 = load ptr, ptr %0, align 8, !tbaa !33
  %86 = getelementptr inbounds i8, ptr %85, i64 48
  %87 = load ptr, ptr %86, align 8
  %88 = tail call noundef zeroext i8 %87(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %84)
  %89 = add i32 %.0277, -2
  %90 = load ptr, ptr %0, align 8, !tbaa !33
  %91 = getelementptr inbounds i8, ptr %90, i64 48
  %92 = load ptr, ptr %91, align 8
  %93 = tail call noundef zeroext i8 %92(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %89)
  %94 = icmp eq i8 %88, %93
  br i1 %94, label %95, label %108

95:                                               ; preds = %83
  %96 = tail call noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
  br i1 %96, label %97, label %99

97:                                               ; preds = %95
  %98 = add i32 %4, -2147483645
  store i32 %98, ptr %42, align 4, !tbaa !22
  br label %102

99:                                               ; preds = %95
  %100 = load i32, ptr %79, align 4, !tbaa !32
  %101 = add i32 %100, 1
  store i32 %101, ptr %79, align 4, !tbaa !32
  br label %102

102:                                              ; preds = %99, %97
  %.not352489 = icmp ult i32 %.0277, 3
  br i1 %.not352489, label %.thread359, label %.lr.ph492.preheader

.lr.ph492.preheader:                              ; preds = %102
  %scevgep = getelementptr i8, ptr %1, i64 12
  %umin = tail call i32 @llvm.umin.i32(i32 %9, i32 %7)
  %103 = add i32 %umin, 1
  %104 = sub i32 %103, %4
  %umax = tail call i32 @llvm.umax.i32(i32 %104, i32 4)
  %105 = add i32 %umax, -3
  %106 = zext i32 %105 to i64
  %107 = shl nuw nsw i64 %106, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep, i8 0, i64 %107, i1 false), !tbaa !27
  br label %.thread359

108:                                              ; preds = %83
  %109 = load i32, ptr %79, align 4, !tbaa !32
  %.not339 = icmp eq i32 %109, 0
  br i1 %.not339, label %111, label %110

110:                                              ; preds = %108
  tail call void @_ZN6NPat2H9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %34)
  br label %111

111:                                              ; preds = %108, %110
  store i8 0, ptr %70, align 8, !tbaa !29
  br label %112

112:                                              ; preds = %111, %69
  %113 = tail call noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsEmptyEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
  br i1 %113, label %114, label %116

114:                                              ; preds = %112
  %115 = add i32 %4, -2147483645
  store i32 %115, ptr %42, align 4, !tbaa !22
  br label %.thread359

116:                                              ; preds = %112
  %117 = add i32 %.0277, -3
  %118 = tail call noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
  br i1 %118, label %119, label %192

119:                                              ; preds = %116
  %120 = load i32, ptr %42, align 4, !tbaa !22
  %121 = xor i32 %120, -2147483648
  %122 = sub i32 %14, %121
  %123 = add i32 %122, -1
  %124 = load i32, ptr %59, align 8, !tbaa !28
  %.not349 = icmp ult i32 %123, %124
  br i1 %.not349, label %127, label %125

125:                                              ; preds = %119
  %126 = add i32 %4, -2147483645
  store i32 %126, ptr %42, align 4, !tbaa !22
  br label %.thread359

127:                                              ; preds = %119
  %128 = getelementptr inbounds i8, ptr %1, i64 12
  %129 = load ptr, ptr %15, align 8, !tbaa !21
  %130 = zext i32 %14 to i64
  %131 = getelementptr inbounds i8, ptr %129, i64 %130
  store i32 %123, ptr %128, align 4, !tbaa !27
  %132 = icmp eq i32 %117, 0
  br i1 %132, label %._crit_edge476, label %.lr.ph475

.lr.ph475:                                        ; preds = %127
  %133 = getelementptr inbounds i8, ptr %1, i64 16
  %134 = zext i32 %122 to i64
  br label %136

._crit_edge476:                                   ; preds = %144, %127
  %135 = add i32 %4, -2147483645
  store i32 %135, ptr %42, align 4, !tbaa !22
  br label %.thread359

136:                                              ; preds = %.lr.ph475, %144
  %137 = phi ptr [ %133, %.lr.ph475 ], [ %146, %144 ]
  %.0294473 = phi i32 [ 0, %.lr.ph475 ], [ %145, %144 ]
  %138 = zext i32 %.0294473 to i64
  %139 = getelementptr inbounds i8, ptr %131, i64 %138
  %140 = load i8, ptr %139, align 1, !tbaa !22
  %141 = sub nsw i64 %138, %134
  %142 = getelementptr inbounds i8, ptr %131, i64 %141
  %143 = load i8, ptr %142, align 1, !tbaa !22
  %.not350 = icmp eq i8 %140, %143
  br i1 %.not350, label %144, label %148

144:                                              ; preds = %136
  %145 = add nuw i32 %.0294473, 1
  %146 = getelementptr inbounds i8, ptr %137, i64 4
  store i32 %123, ptr %137, align 4, !tbaa !27
  %147 = icmp eq i32 %145, %117
  br i1 %147, label %._crit_edge476, label %136, !llvm.loop !35

148:                                              ; preds = %136
  %149 = add i32 %.0294473, 3
  %150 = getelementptr inbounds i8, ptr %0, i64 128
  %151 = load i32, ptr %150, align 8, !tbaa !36
  store i32 %151, ptr %42, align 4, !tbaa !22
  %152 = getelementptr inbounds i8, ptr %0, i64 120
  %153 = load ptr, ptr %152, align 8, !tbaa !37
  %154 = zext i32 %151 to i64
  %155 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %153, i64 %154
  %156 = getelementptr inbounds i8, ptr %155, i64 8
  %157 = load i32, ptr %156, align 4, !tbaa !22
  store i32 %157, ptr %150, align 8, !tbaa !36
  %158 = getelementptr inbounds i8, ptr %0, i64 136
  %159 = load i32, ptr %158, align 8, !tbaa !38
  %160 = add i32 %159, 1
  store i32 %160, ptr %158, align 8, !tbaa !38
  %161 = getelementptr inbounds i8, ptr %0, i64 132
  %162 = load i32, ptr %161, align 4, !tbaa !39
  %163 = icmp ugt i32 %157, %162
  br i1 %163, label %164, label %168

164:                                              ; preds = %148
  store i32 %157, ptr %161, align 4, !tbaa !39
  %165 = add i32 %157, 1
  %166 = zext i32 %157 to i64
  %167 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %153, i64 %166, i32 2
  store i32 %165, ptr %167, align 4, !tbaa !22
  br label %168

168:                                              ; preds = %164, %148
  store <4 x i32> <i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647>, ptr %156, align 4, !tbaa !22
  store i32 %14, ptr %155, align 4, !tbaa !40
  %169 = load ptr, ptr %0, align 8, !tbaa !33
  %170 = getelementptr inbounds i8, ptr %169, i64 48
  %171 = load ptr, ptr %170, align 8
  %172 = tail call noundef zeroext i8 %171(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %149)
  %173 = sub i32 %149, %122
  %174 = load ptr, ptr %0, align 8, !tbaa !33
  %175 = getelementptr inbounds i8, ptr %174, i64 48
  %176 = load ptr, ptr %175, align 8
  %177 = tail call noundef zeroext i8 %176(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %173)
  %178 = shl i32 %.0294473, 3
  %179 = and i8 %172, 3
  %180 = and i8 %177, 3
  %.not351479 = icmp eq i8 %179, %180
  br i1 %.not351479, label %.lr.ph484, label %._crit_edge485

.lr.ph484:                                        ; preds = %168, %.lr.ph484
  %.0320482 = phi i32 [ %183, %.lr.ph484 ], [ %178, %168 ]
  %.0321481 = phi i8 [ %181, %.lr.ph484 ], [ %172, %168 ]
  %.0322480 = phi i8 [ %182, %.lr.ph484 ], [ %177, %168 ]
  %181 = lshr i8 %.0321481, 2
  %182 = lshr i8 %.0322480, 2
  %183 = add i32 %.0320482, 2
  %184 = and i8 %181, 3
  %185 = and i8 %182, 3
  %.not351 = icmp eq i8 %184, %185
  br i1 %.not351, label %.lr.ph484, label %._crit_edge485, !llvm.loop !42

._crit_edge485:                                   ; preds = %.lr.ph484, %168
  %.0320.lcssa = phi i32 [ %178, %168 ], [ %183, %.lr.ph484 ]
  %.lcssa393 = phi i8 [ %179, %168 ], [ %184, %.lr.ph484 ]
  %.lcssa = phi i8 [ %180, %168 ], [ %185, %.lr.ph484 ]
  %186 = getelementptr inbounds i8, ptr %155, i64 4
  store i32 %.0320.lcssa, ptr %186, align 4, !tbaa !43
  %187 = add i32 %4, -2147483645
  %188 = zext nneg i8 %.lcssa393 to i64
  %189 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %156, i64 0, i64 %188
  store i32 %187, ptr %189, align 4, !tbaa !22
  %190 = zext nneg i8 %.lcssa to i64
  %191 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %156, i64 0, i64 %190
  store i32 %120, ptr %191, align 4, !tbaa !22
  br label %.thread359

192:                                              ; preds = %116
  %193 = load ptr, ptr %15, align 8, !tbaa !21
  %194 = zext i32 %14 to i64
  %195 = getelementptr inbounds i8, ptr %193, i64 %194
  %196 = getelementptr inbounds i8, ptr %0, i64 120
  %197 = load ptr, ptr %196, align 8
  %198 = load i32, ptr %42, align 4, !tbaa !27
  %199 = zext i32 %198 to i64
  %200 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %197, i64 %199
  %201 = zext i32 %117 to i64
  %202 = getelementptr inbounds i8, ptr %195, i64 %201
  %203 = load i32, ptr %59, align 8, !tbaa !28
  %.0288 = tail call i32 @llvm.usub.sat.i32(i32 %14, i32 %203)
  %204 = load i32, ptr %200, align 4, !tbaa !40
  %205 = icmp ult i32 %204, %.0288
  br i1 %205, label %._crit_edge461, label %.lr.ph460

.lr.ph460:                                        ; preds = %192
  %206 = getelementptr inbounds i8, ptr %1, i64 12
  br label %217

._crit_edge461:                                   ; preds = %322, %192
  %207 = phi i32 [ %198, %192 ], [ %310, %322 ]
  %.0313.lcssa = phi ptr [ %195, %192 ], [ %.3316, %322 ]
  %.0298.lcssa = phi ptr [ %42, %192 ], [ %309, %322 ]
  tail call void @_ZN6NPat2H9CPatricia10RemoveNodeEj(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %207)
  %208 = add i32 %4, -2147483645
  store i32 %208, ptr %.0298.lcssa, align 4, !tbaa !27
  %209 = icmp eq ptr %.0313.lcssa, %195
  br i1 %209, label %.thread359, label %210

210:                                              ; preds = %._crit_edge461
  %211 = ptrtoint ptr %.0313.lcssa to i64
  %212 = ptrtoint ptr %195 to i64
  %213 = xor i64 %212, -1
  %214 = add i64 %211, %213
  %215 = trunc i64 %214 to i32
  %216 = add i32 %215, 3
  br label %.thread359

217:                                              ; preds = %.lr.ph460, %322
  %218 = phi i32 [ %204, %.lr.ph460 ], [ %326, %322 ]
  %.1270458 = phi ptr [ %206, %.lr.ph460 ], [ %.5274, %322 ]
  %.0289457 = phi ptr [ %193, %.lr.ph460 ], [ %.3292, %322 ]
  %.0295455 = phi ptr [ %200, %.lr.ph460 ], [ %325, %322 ]
  %.0298454 = phi ptr [ %42, %.lr.ph460 ], [ %309, %322 ]
  %.0300453 = phi i8 [ 0, %.lr.ph460 ], [ %323, %322 ]
  %.0307452 = phi i32 [ 0, %.lr.ph460 ], [ %306, %322 ]
  %.0313451 = phi ptr [ %195, %.lr.ph460 ], [ %.3316, %322 ]
  %219 = icmp eq i32 %.0307452, 0
  br i1 %219, label %220, label %233

220:                                              ; preds = %217
  %221 = xor i32 %218, -1
  %222 = add i32 %14, %221
  store i32 %222, ptr %.1270458, align 4, !tbaa !27
  %.not340 = icmp ult ptr %.0313451, %202
  br i1 %.not340, label %228, label %.preheader392

.preheader392:                                    ; preds = %220
  %223 = add i32 %4, -2147483645
  %224 = getelementptr inbounds i8, ptr %.0295455, i64 8
  %225 = insertelement <4 x i32> poison, i32 %223, i64 0
  %226 = shufflevector <4 x i32> %225, <4 x i32> poison, <4 x i32> zeroinitializer
  store <4 x i32> %226, ptr %224, align 4, !tbaa !22
  store i32 %14, ptr %.0295455, align 4, !tbaa !40
  %227 = getelementptr inbounds i8, ptr %.0295455, i64 4
  store i32 0, ptr %227, align 4, !tbaa !43
  br label %.thread359

228:                                              ; preds = %220
  %229 = getelementptr inbounds i8, ptr %.1270458, i64 4
  %230 = getelementptr inbounds i8, ptr %.0313451, i64 1
  %231 = load i8, ptr %.0313451, align 1, !tbaa !22
  %232 = getelementptr inbounds i8, ptr %.0289457, i64 1
  br label %233

233:                                              ; preds = %228, %217
  %.1314 = phi ptr [ %230, %228 ], [ %.0313451, %217 ]
  %.1308 = phi i32 [ 8, %228 ], [ %.0307452, %217 ]
  %.1301 = phi i8 [ %231, %228 ], [ %.0300453, %217 ]
  %.1290 = phi ptr [ %232, %228 ], [ %.0289457, %217 ]
  %.2271 = phi ptr [ %229, %228 ], [ %.1270458, %217 ]
  %234 = getelementptr inbounds i8, ptr %.0295455, i64 4
  %235 = load i32, ptr %234, align 4, !tbaa !43
  %.not341 = icmp eq i32 %235, 0
  br i1 %.not341, label %304, label %236

236:                                              ; preds = %233
  %237 = load i32, ptr %.0295455, align 4, !tbaa !40
  %238 = zext i32 %237 to i64
  %239 = getelementptr inbounds i8, ptr %.1290, i64 %238
  %240 = getelementptr inbounds i8, ptr %239, i64 -1
  %241 = load i8, ptr %240, align 1, !tbaa !22
  %242 = zext i8 %241 to i32
  %243 = sub i32 8, %.1308
  %244 = lshr i32 %242, %243
  %245 = trunc nuw i32 %244 to i8
  %246 = xor i8 %.1301, %245
  %.not342437 = icmp ugt i32 %.1308, %235
  br i1 %.not342437, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %236
  %.not344.peel = icmp eq i8 %.1301, %245
  br i1 %.not344.peel, label %247, label %.loopexit544

247:                                              ; preds = %.lr.ph.preheader
  %248 = xor i32 %237, -1
  %249 = add i32 %14, %248
  store i32 %249, ptr %.2271, align 4, !tbaa !27
  %250 = sub i32 %235, %.1308
  %.not345.peel = icmp ult ptr %.1314, %202
  br i1 %.not345.peel, label %251, label %.preheader391

251:                                              ; preds = %247
  %252 = getelementptr inbounds i8, ptr %.2271, i64 4
  %253 = getelementptr inbounds i8, ptr %.1314, i64 1
  %254 = load i8, ptr %.1314, align 1, !tbaa !22
  %255 = load i32, ptr %.0295455, align 4, !tbaa !40
  %256 = zext i32 %255 to i64
  %257 = getelementptr inbounds i8, ptr %.1290, i64 %256
  %258 = load i8, ptr %257, align 1, !tbaa !22
  %259 = xor i8 %258, %254
  %260 = getelementptr inbounds i8, ptr %.1290, i64 1
  %.not342.peel = icmp ult i32 %250, 8
  br i1 %.not342.peel, label %._crit_edge, label %.lr.ph.preheader663

.lr.ph.preheader663:                              ; preds = %251
  %.not344754 = icmp eq i8 %258, %254
  br i1 %.not344754, label %.lr.ph759, label %.loopexit544

.lr.ph:                                           ; preds = %279
  %.not344 = icmp eq i8 %286, %282
  br i1 %.not344, label %.lr.ph759, label %.loopexit544.loopexit, !llvm.loop !44

.loopexit544.loopexit:                            ; preds = %.lr.ph
  %261 = xor i8 %286, %282
  br label %.loopexit544

.loopexit544:                                     ; preds = %.lr.ph.preheader, %.lr.ph.preheader663, %.loopexit544.loopexit
  %.0285443.lcssa = phi i8 [ %261, %.loopexit544.loopexit ], [ %246, %.lr.ph.preheader ], [ %259, %.lr.ph.preheader663 ]
  %.0286442.lcssa = phi i32 [ %271, %.loopexit544.loopexit ], [ %235, %.lr.ph.preheader ], [ %250, %.lr.ph.preheader663 ]
  %.2302440.lcssa = phi i8 [ %282, %.loopexit544.loopexit ], [ %.1301, %.lr.ph.preheader ], [ %254, %.lr.ph.preheader663 ]
  %.2315438.lcssa = phi ptr [ %281, %.loopexit544.loopexit ], [ %.1314, %.lr.ph.preheader ], [ %253, %.lr.ph.preheader663 ]
  tail call void @_ZN6NPat2H9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(168) %0, ptr noundef nonnull %.0295455, ptr noundef nonnull %.0298454, i8 noundef zeroext %.2302440.lcssa, i8 noundef zeroext %.0285443.lcssa, i32 noundef %.0286442.lcssa, i32 noundef %14)
  %262 = ptrtoint ptr %.2315438.lcssa to i64
  %263 = ptrtoint ptr %195 to i64
  %264 = xor i64 %263, -1
  %265 = add i64 %262, %264
  %266 = trunc i64 %265 to i32
  %267 = add i32 %266, 3
  br label %.thread359

.lr.ph759:                                        ; preds = %.lr.ph.preheader663, %.lr.ph
  %.2315438758 = phi ptr [ %281, %.lr.ph ], [ %253, %.lr.ph.preheader663 ]
  %.2291441757 = phi ptr [ %287, %.lr.ph ], [ %260, %.lr.ph.preheader663 ]
  %.0286442756 = phi i32 [ %271, %.lr.ph ], [ %250, %.lr.ph.preheader663 ]
  %.3272444755 = phi ptr [ %280, %.lr.ph ], [ %252, %.lr.ph.preheader663 ]
  %268 = phi i32 [ %283, %.lr.ph ], [ %255, %.lr.ph.preheader663 ]
  %269 = xor i32 %268, -1
  %270 = add i32 %14, %269
  store i32 %270, ptr %.3272444755, align 4, !tbaa !27
  %271 = add i32 %.0286442756, -8
  %.not345 = icmp ult ptr %.2315438758, %202
  br i1 %.not345, label %279, label %.preheader391

.preheader391:                                    ; preds = %247, %.lr.ph759
  %.lcssa515 = phi i32 [ %271, %.lr.ph759 ], [ %250, %247 ]
  %272 = getelementptr inbounds i8, ptr %.0295455, i64 4
  %273 = add i32 %4, -2147483645
  %274 = getelementptr inbounds i8, ptr %.0295455, i64 8
  %275 = insertelement <4 x i32> poison, i32 %273, i64 0
  %276 = shufflevector <4 x i32> %275, <4 x i32> poison, <4 x i32> zeroinitializer
  store <4 x i32> %276, ptr %274, align 4, !tbaa !22
  store i32 %14, ptr %.0295455, align 4, !tbaa !40
  %277 = load i32, ptr %272, align 4, !tbaa !43
  %278 = sub i32 %277, %.lcssa515
  store i32 %278, ptr %272, align 4, !tbaa !43
  br label %.thread359

279:                                              ; preds = %.lr.ph759
  %280 = getelementptr inbounds i8, ptr %.3272444755, i64 4
  %281 = getelementptr inbounds i8, ptr %.2315438758, i64 1
  %282 = load i8, ptr %.2315438758, align 1, !tbaa !22
  %283 = load i32, ptr %.0295455, align 4, !tbaa !40
  %284 = zext i32 %283 to i64
  %285 = getelementptr inbounds i8, ptr %.2291441757, i64 %284
  %286 = load i8, ptr %285, align 1, !tbaa !22
  %287 = getelementptr inbounds i8, ptr %.2291441757, i64 1
  %.not342 = icmp ult i32 %271, 8
  br i1 %.not342, label %._crit_edge.loopexit, label %.lr.ph, !llvm.loop !44

._crit_edge.loopexit:                             ; preds = %279
  %288 = xor i8 %286, %282
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %251, %236
  %.2315.lcssa = phi ptr [ %.1314, %236 ], [ %253, %251 ], [ %281, %._crit_edge.loopexit ]
  %.2309.lcssa = phi i32 [ %.1308, %236 ], [ 8, %251 ], [ 8, %._crit_edge.loopexit ]
  %.2302.lcssa = phi i8 [ %.1301, %236 ], [ %254, %251 ], [ %282, %._crit_edge.loopexit ]
  %.2291.lcssa = phi ptr [ %.1290, %236 ], [ %260, %251 ], [ %287, %._crit_edge.loopexit ]
  %.0286.lcssa = phi i32 [ %235, %236 ], [ %250, %251 ], [ %271, %._crit_edge.loopexit ]
  %.0285.lcssa = phi i8 [ %246, %236 ], [ %259, %251 ], [ %288, %._crit_edge.loopexit ]
  %.3272.lcssa = phi ptr [ %.2271, %236 ], [ %252, %251 ], [ %280, %._crit_edge.loopexit ]
  %289 = zext i8 %.0285.lcssa to i32
  %notmask = shl nsw i32 -1, %.0286.lcssa
  %290 = xor i32 %notmask, -1
  %291 = and i32 %289, %290
  %.not343 = icmp eq i32 %291, 0
  br i1 %.not343, label %299, label %292

292:                                              ; preds = %._crit_edge
  tail call void @_ZN6NPat2H9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(168) %0, ptr noundef nonnull %.0295455, ptr noundef nonnull %.0298454, i8 noundef zeroext %.2302.lcssa, i8 noundef zeroext %.0285.lcssa, i32 noundef %.0286.lcssa, i32 noundef %14)
  %293 = ptrtoint ptr %.2315.lcssa to i64
  %294 = ptrtoint ptr %195 to i64
  %295 = xor i64 %294, -1
  %296 = add i64 %293, %295
  %297 = trunc i64 %296 to i32
  %298 = add i32 %297, 3
  br label %.thread359

299:                                              ; preds = %._crit_edge
  %300 = zext i8 %.2302.lcssa to i32
  %301 = lshr i32 %300, %.0286.lcssa
  %302 = trunc nuw i32 %301 to i8
  %303 = sub i32 %.2309.lcssa, %.0286.lcssa
  br label %304

304:                                              ; preds = %299, %233
  %.3316 = phi ptr [ %.2315.lcssa, %299 ], [ %.1314, %233 ]
  %.4311 = phi i32 [ %303, %299 ], [ %.1308, %233 ]
  %.4304 = phi i8 [ %302, %299 ], [ %.1301, %233 ]
  %.3292 = phi ptr [ %.2291.lcssa, %299 ], [ %.1290, %233 ]
  %.5274 = phi ptr [ %.3272.lcssa, %299 ], [ %.2271, %233 ]
  %305 = and i8 %.4304, 3
  %306 = add i32 %.4311, -2
  %307 = getelementptr inbounds i8, ptr %.0295455, i64 8
  %308 = zext nneg i8 %305 to i64
  %309 = getelementptr inbounds [4 x %"union.NPat2H::CDescendant"], ptr %307, i64 0, i64 %308
  %310 = load i32, ptr %309, align 4, !tbaa !22
  store i32 %14, ptr %.0295455, align 4, !tbaa !40
  %311 = icmp ult i32 %310, 2147483647
  br i1 %311, label %322, label %312

312:                                              ; preds = %304
  %313 = icmp eq i32 %310, 2147483647
  br i1 %313, label %314, label %328

314:                                              ; preds = %312
  %315 = add i32 %4, -2147483645
  store i32 %315, ptr %309, align 4, !tbaa !22
  %316 = ptrtoint ptr %.3316 to i64
  %317 = ptrtoint ptr %195 to i64
  %318 = xor i64 %317, -1
  %319 = add i64 %316, %318
  %320 = trunc i64 %319 to i32
  %321 = add i32 %320, 3
  br label %.thread359

322:                                              ; preds = %304
  %323 = lshr i8 %.4304, 2
  %324 = zext nneg i32 %310 to i64
  %325 = getelementptr inbounds %"struct.NPat2H::CNode", ptr %197, i64 %324
  %326 = load i32, ptr %325, align 4, !tbaa !40
  %327 = icmp ult i32 %326, %.0288
  br i1 %327, label %._crit_edge461, label %217

328:                                              ; preds = %312
  %329 = zext nneg i8 %305 to i32
  %330 = lshr i8 %.4304, 2
  %331 = xor i32 %310, -2147483648
  %332 = icmp ult i32 %331, %.0288
  br i1 %332, label %333, label %341

333:                                              ; preds = %328
  %334 = add i32 %4, -2147483645
  store i32 %334, ptr %309, align 4, !tbaa !22
  %335 = ptrtoint ptr %.3316 to i64
  %336 = ptrtoint ptr %195 to i64
  %337 = xor i64 %336, -1
  %338 = add i64 %335, %337
  %339 = trunc i64 %338 to i32
  %340 = add i32 %339, 3
  br label %.thread359

341:                                              ; preds = %328
  %.not346 = icmp eq i32 %306, 0
  br i1 %.not346, label %.thread388, label %342

342:                                              ; preds = %341
  %343 = zext nneg i32 %331 to i64
  %344 = getelementptr inbounds i8, ptr %.3292, i64 %343
  %345 = getelementptr inbounds i8, ptr %344, i64 -1
  %346 = load i8, ptr %345, align 1, !tbaa !22
  %347 = sub i32 10, %.4311
  %348 = zext i8 %346 to i32
  %349 = lshr i32 %348, %347
  %350 = trunc nuw i32 %349 to i8
  %.not347 = icmp eq i8 %330, %350
  br i1 %.not347, label %.thread388, label %351

351:                                              ; preds = %342
  %352 = xor i8 %330, %350
  tail call void @_ZN6NPat2H9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(168) %0, ptr noundef nonnull %.0295455, i8 noundef zeroext %330, i8 noundef zeroext %352, i32 noundef 0, i32 noundef %14, i32 noundef %329)
  %353 = ptrtoint ptr %.3316 to i64
  %354 = ptrtoint ptr %195 to i64
  %355 = xor i64 %354, -1
  %356 = add i64 %353, %355
  %357 = trunc i64 %356 to i32
  %358 = add i32 %357, 3
  br label %.thread359

.thread388:                                       ; preds = %342, %341
  %359 = ptrtoint ptr %195 to i64
  %360 = icmp ult ptr %.3316, %202
  br i1 %360, label %.lr.ph470, label %.thread388.._crit_edge471_crit_edge

.thread388.._crit_edge471_crit_edge:              ; preds = %.thread388
  %.pre561 = xor i32 %310, 2147483647
  %.pre562 = add i32 %.pre561, %14
  br label %._crit_edge471

.lr.ph470:                                        ; preds = %.thread388
  %361 = zext nneg i32 %331 to i64
  %362 = getelementptr inbounds i8, ptr %193, i64 %361
  %363 = ptrtoint ptr %.3316 to i64
  %364 = sub i64 %363, %359
  %365 = getelementptr inbounds i8, ptr %362, i64 %364
  %366 = xor i32 %310, 2147483647
  %367 = add i32 %366, %14
  br label %368

368:                                              ; preds = %.lr.ph470, %379
  %.0469 = phi ptr [ %365, %.lr.ph470 ], [ %380, %379 ]
  %.2268468 = phi i32 [ %306, %.lr.ph470 ], [ %382, %379 ]
  %.7276467 = phi ptr [ %.5274, %.lr.ph470 ], [ %381, %379 ]
  %.5318466 = phi ptr [ %.3316, %.lr.ph470 ], [ %369, %379 ]
  %369 = getelementptr inbounds i8, ptr %.5318466, i64 1
  %370 = load i8, ptr %.5318466, align 1, !tbaa !22
  store i32 %367, ptr %.7276467, align 4, !tbaa !27
  %371 = load i8, ptr %.0469, align 1, !tbaa !22
  %.not348 = icmp eq i8 %370, %371
  br i1 %.not348, label %379, label %372

372:                                              ; preds = %368
  %373 = xor i8 %371, %370
  tail call void @_ZN6NPat2H9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(168) %0, ptr noundef nonnull %.0295455, i8 noundef zeroext %370, i8 noundef zeroext %373, i32 noundef %.2268468, i32 noundef %14, i32 noundef %329)
  %374 = ptrtoint ptr %369 to i64
  %375 = xor i64 %359, -1
  %376 = add i64 %374, %375
  %377 = trunc i64 %376 to i32
  %378 = add i32 %377, 3
  br label %.thread359

379:                                              ; preds = %368
  %380 = getelementptr inbounds i8, ptr %.0469, i64 1
  %381 = getelementptr inbounds i8, ptr %.7276467, i64 4
  %382 = add i32 %.2268468, 8
  %383 = icmp ult ptr %369, %202
  br i1 %383, label %368, label %._crit_edge471, !llvm.loop !46

._crit_edge471:                                   ; preds = %379, %.thread388.._crit_edge471_crit_edge
  %.pre-phi563 = phi i32 [ %.pre562, %.thread388.._crit_edge471_crit_edge ], [ %367, %379 ]
  %.7276.lcssa = phi ptr [ %.5274, %.thread388.._crit_edge471_crit_edge ], [ %381, %379 ]
  store i32 %.pre-phi563, ptr %.7276.lcssa, align 4, !tbaa !27
  %384 = add i32 %4, -2147483645
  store i32 %384, ptr %309, align 4, !tbaa !22
  %385 = load i32, ptr %.7276.lcssa, align 4, !tbaa !27
  %386 = icmp eq i32 %385, 0
  br i1 %386, label %387, label %.thread359

387:                                              ; preds = %._crit_edge471
  store i8 1, ptr %70, align 8, !tbaa !29
  %388 = getelementptr inbounds i8, ptr %0, i64 148
  store i32 0, ptr %388, align 4, !tbaa !32
  br label %.thread359

.thread359:                                       ; preds = %.lr.ph492.preheader, %102, %292, %.preheader391, %.loopexit544, %314, %351, %.loopexit, %65, %114, %67, %210, %.preheader392, %._crit_edge461, %._crit_edge471, %387, %372, %333, %125, %._crit_edge485, %._crit_edge476, %10
  %.14 = phi i32 [ 0, %10 ], [ 0, %.loopexit ], [ 0, %65 ], [ 2, %114 ], [ 2, %67 ], [ 2, %125 ], [ %.0277, %._crit_edge476 ], [ %149, %._crit_edge485 ], [ %216, %210 ], [ %.0277, %.preheader392 ], [ 2, %._crit_edge461 ], [ %340, %333 ], [ %358, %351 ], [ %378, %372 ], [ %.0277, %387 ], [ %.0277, %._crit_edge471 ], [ %321, %314 ], [ %298, %292 ], [ %.0277, %.preheader391 ], [ %267, %.loopexit544 ], [ %.0277, %102 ], [ %.0277, %.lr.ph492.preheader ]
  ret i32 %.14
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6NPat2H11CDescendant9MakeEmptyEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6NPat2H9CPatricia10RemoveNodeEj(ptr noundef nonnull align 8 dereferenceable(168), i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6NPat2H11CDescendant7IsEmptyEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6NPat2H9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef, ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6NPat2H9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef, i8 noundef zeroext, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.usub.sat.i32(i32, i32) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #2

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

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

!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, !10, i64 52}
!6 = !{!"_ZTS11CLZInWindow", !7, i64 8, !7, i64 16, !10, i64 24, !11, i64 28, !7, i64 32, !7, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"bool", !8, i64 0}
!12 = !{!13, !10, i64 100}
!13 = !{!"_ZTSN6NPat2H9CPatriciaE", !14, i64 0, !17, i64 8, !18, i64 16, !6, i64 24, !10, i64 96, !10, i64 100, !7, i64 104, !7, i64 112, !7, i64 120, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !11, i64 144, !10, i64 148, !7, i64 152, !19, i64 160}
!14 = !{!"_ZTS12IMatchFinder", !15, i64 0}
!15 = !{!"_ZTS15IInWindowStream", !16, i64 0}
!16 = !{!"_ZTS8IUnknown"}
!17 = !{!"_ZTS23IMatchFinderSetCallback", !16, i64 0}
!18 = !{!"_ZTS13CMyUnknownImp", !10, i64 0}
!19 = !{!"_ZTS9CMyComPtrI20IMatchFinderCallbackE", !7, i64 0}
!20 = !{!6, !10, i64 68}
!21 = !{!6, !7, i64 40}
!22 = !{!8, !8, i64 0}
!23 = !{!13, !7, i64 112}
!24 = !{!13, !7, i64 104}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!10, !10, i64 0}
!28 = !{!13, !10, i64 96}
!29 = !{!13, !11, i64 144}
!30 = !{i8 0, i8 2}
!31 = !{}
!32 = !{!13, !10, i64 148}
!33 = !{!34, !34, i64 0}
!34 = !{!"vtable pointer", !9, i64 0}
!35 = distinct !{!35, !26}
!36 = !{!13, !10, i64 128}
!37 = !{!13, !7, i64 120}
!38 = !{!13, !10, i64 136}
!39 = !{!13, !10, i64 132}
!40 = !{!41, !10, i64 0}
!41 = !{!"_ZTSN6NPat2H5CNodeE", !10, i64 0, !10, i64 4, !8, i64 8}
!42 = distinct !{!42, !26}
!43 = !{!41, !10, i64 4}
!44 = distinct !{!44, !26, !45}
!45 = !{!"llvm.loop.peeled.count", i32 1}
!46 = distinct !{!46, !26}


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