; 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.NPat2R::CPatricia" = type { %struct.IMatchFinder, %struct.IMatchFinderSetCallback, %class.CMyUnknownImp, %class.CLZInWindow, i32, i32, ptr, ptr, i32, i32, i8, 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.NPat2R::CDescendant" = type { i32 }
%"struct.NPat2R::CNode" = type { i32, i32, %union.anon.3 }
%union.anon.3 = type { [4 x %"union.NPat2R::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 @_ZN6NPat2R9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(152), i32 noundef) #1 align 2

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

58:                                               ; preds = %2
  %59 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 5
  %60 = load i32, ptr %59, align 4, !tbaa !13
  store i32 %60, ptr %6, align 4, !tbaa !22
  br label %73

61:                                               ; preds = %2
  %62 = getelementptr inbounds i8, ptr %47, i64 24
  %63 = getelementptr inbounds %class.CLZInWindow, ptr %62, i32 0, i32 12
  %64 = load i32, ptr %63, align 4, !tbaa !21
  %65 = getelementptr inbounds i8, ptr %47, i64 24
  %66 = getelementptr inbounds %class.CLZInWindow, ptr %65, i32 0, i32 8
  %67 = load i32, ptr %66, align 4, !tbaa !9
  %68 = sub i32 %64, %67
  store i32 %68, ptr %6, align 4, !tbaa !22
  %69 = load i32, ptr %6, align 4, !tbaa !22
  %70 = icmp ult i32 %69, 2
  br i1 %70, label %71, label %72

71:                                               ; preds = %61
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %752

72:                                               ; preds = %61
  br label %73

73:                                               ; preds = %72, %58
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  %74 = getelementptr inbounds i8, ptr %47, i64 24
  %75 = getelementptr inbounds %class.CLZInWindow, ptr %74, i32 0, i32 8
  %76 = load i32, ptr %75, align 4, !tbaa !9
  %77 = add i32 %76, 2
  store i32 %77, ptr %8, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  %78 = load ptr, ptr %47, align 8, !tbaa !23
  %79 = getelementptr inbounds ptr, ptr %78, i64 6
  %80 = load ptr, ptr %79, align 8
  %81 = call noundef zeroext i8 %80(ptr noundef nonnull align 8 dereferenceable(152) %47, i32 noundef 1)
  %82 = zext i8 %81 to i32
  %83 = load ptr, ptr %47, align 8, !tbaa !23
  %84 = getelementptr inbounds ptr, ptr %83, i64 6
  %85 = load ptr, ptr %84, align 8
  %86 = call noundef zeroext i8 %85(ptr noundef nonnull align 8 dereferenceable(152) %47, i32 noundef 0)
  %87 = zext i8 %86 to i32
  %88 = shl i32 %87, 8
  %89 = or i32 %82, %88
  store i32 %89, ptr %9, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  %90 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 6
  %91 = load ptr, ptr %90, align 8, !tbaa !25
  %92 = load i32, ptr %9, align 4, !tbaa !22
  %93 = zext i32 %92 to i64
  %94 = getelementptr inbounds %"union.NPat2R::CDescendant", ptr %91, i64 %93
  store ptr %94, ptr %10, align 8, !tbaa !5
  %95 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 11
  %96 = load i8, ptr %95, align 1, !tbaa !26, !range !27, !noundef !28
  %97 = trunc i8 %96 to i1
  br i1 %97, label %98, label %165

98:                                               ; preds = %73
  %99 = load ptr, ptr %10, align 8, !tbaa !5
  %100 = call noundef zeroext i1 @_ZNK6NPat2R11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %99)
  br i1 %100, label %101, label %103

101:                                              ; preds = %98
  %102 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 12
  store i32 0, ptr %102, align 4, !tbaa !29
  br label %103

103:                                              ; preds = %101, %98
  %104 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 12
  %105 = load i32, ptr %104, align 4, !tbaa !29
  %106 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 4
  %107 = load i32, ptr %106, align 8, !tbaa !30
  %108 = sub i32 %107, 1
  %109 = icmp uge i32 %105, %108
  br i1 %109, label %110, label %113

110:                                              ; preds = %103
  %111 = load i32, ptr %9, align 4, !tbaa !22
  call void @_ZN6NPat2R9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(152) %47, i32 noundef %111)
  %112 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 12
  store i32 0, ptr %112, align 4, !tbaa !29
  br label %113

113:                                              ; preds = %110, %103
  %114 = load i32, ptr %6, align 4, !tbaa !22
  %115 = sub i32 %114, 1
  %116 = load ptr, ptr %47, align 8, !tbaa !23
  %117 = getelementptr inbounds ptr, ptr %116, i64 6
  %118 = load ptr, ptr %117, align 8
  %119 = call noundef zeroext i8 %118(ptr noundef nonnull align 8 dereferenceable(152) %47, i32 noundef %115)
  %120 = zext i8 %119 to i32
  %121 = load i32, ptr %6, align 4, !tbaa !22
  %122 = sub i32 %121, 2
  %123 = load ptr, ptr %47, align 8, !tbaa !23
  %124 = getelementptr inbounds ptr, ptr %123, i64 6
  %125 = load ptr, ptr %124, align 8
  %126 = call noundef zeroext i8 %125(ptr noundef nonnull align 8 dereferenceable(152) %47, i32 noundef %122)
  %127 = zext i8 %126 to i32
  %128 = icmp eq i32 %120, %127
  br i1 %128, label %129, label %156

129:                                              ; preds = %113
  %130 = load ptr, ptr %10, align 8, !tbaa !5
  %131 = call noundef zeroext i1 @_ZNK6NPat2R11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %130)
  br i1 %131, label %132, label %136

132:                                              ; preds = %129
  %133 = load i32, ptr %8, align 4, !tbaa !22
  %134 = add i32 %133, -2147483648
  %135 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %134, ptr %135, align 4, !tbaa !31
  br label %140

136:                                              ; preds = %129
  %137 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 12
  %138 = load i32, ptr %137, align 4, !tbaa !29
  %139 = add i32 %138, 1
  store i32 %139, ptr %137, align 4, !tbaa !29
  br label %140

140:                                              ; preds = %136, %132
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  store i32 2, ptr %11, align 4, !tbaa !22
  br label %141

141:                                              ; preds = %151, %140
  %142 = load i32, ptr %11, align 4, !tbaa !22
  %143 = load i32, ptr %6, align 4, !tbaa !22
  %144 = icmp ule i32 %142, %143
  br i1 %144, label %146, label %145

145:                                              ; preds = %141
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  br label %154

146:                                              ; preds = %141
  %147 = load ptr, ptr %5, align 8, !tbaa !5
  %148 = load i32, ptr %11, align 4, !tbaa !22
  %149 = zext i32 %148 to i64
  %150 = getelementptr inbounds i32, ptr %147, i64 %149
  store i32 0, ptr %150, align 4, !tbaa !22
  br label %151

151:                                              ; preds = %146
  %152 = load i32, ptr %11, align 4, !tbaa !22
  %153 = add i32 %152, 1
  store i32 %153, ptr %11, align 4, !tbaa !22
  br label %141, !llvm.loop !32

154:                                              ; preds = %145
  %155 = load i32, ptr %6, align 4, !tbaa !22
  store i32 %155, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %751

156:                                              ; preds = %113
  %157 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 12
  %158 = load i32, ptr %157, align 4, !tbaa !29
  %159 = icmp ugt i32 %158, 0
  br i1 %159, label %160, label %162

160:                                              ; preds = %156
  %161 = load i32, ptr %9, align 4, !tbaa !22
  call void @_ZN6NPat2R9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(152) %47, i32 noundef %161)
  br label %162

162:                                              ; preds = %160, %156
  br label %163

163:                                              ; preds = %162
  %164 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 11
  store i8 0, ptr %164, align 1, !tbaa !26
  br label %165

165:                                              ; preds = %163, %73
  %166 = load ptr, ptr %10, align 8, !tbaa !5
  %167 = call noundef zeroext i1 @_ZNK6NPat2R11CDescendant7IsEmptyEv(ptr noundef nonnull align 4 dereferenceable(4) %166)
  br i1 %167, label %168, label %172

168:                                              ; preds = %165
  %169 = load i32, ptr %8, align 4, !tbaa !22
  %170 = add i32 %169, -2147483648
  %171 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %170, ptr %171, align 4, !tbaa !31
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %751

172:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  %173 = load i32, ptr %6, align 4, !tbaa !22
  %174 = sub i32 %173, 2
  store i32 %174, ptr %12, align 4, !tbaa !22
  %175 = load ptr, ptr %10, align 8, !tbaa !5
  %176 = call noundef zeroext i1 @_ZNK6NPat2R11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %175)
  br i1 %176, label %177, label %343

177:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  %178 = load ptr, ptr %10, align 8, !tbaa !5
  %179 = load i32, ptr %178, align 4, !tbaa !31
  store i32 %179, ptr %13, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  %180 = load i32, ptr %8, align 4, !tbaa !22
  %181 = load i32, ptr %13, align 4, !tbaa !22
  %182 = sub i32 %181, -2147483648
  %183 = sub i32 %180, %182
  store i32 %183, ptr %14, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %184 = load i32, ptr %14, align 4, !tbaa !22
  %185 = sub i32 %184, 1
  store i32 %185, ptr %15, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %186 = load ptr, ptr %5, align 8, !tbaa !5
  %187 = getelementptr inbounds i32, ptr %186, i64 2
  store ptr %187, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  %188 = getelementptr inbounds i8, ptr %47, i64 24
  %189 = getelementptr inbounds %class.CLZInWindow, ptr %188, i32 0, i32 6
  %190 = load ptr, ptr %189, align 8, !tbaa !34
  %191 = load i32, ptr %8, align 4, !tbaa !22
  %192 = zext i32 %191 to i64
  %193 = getelementptr inbounds i8, ptr %190, i64 %192
  store ptr %193, ptr %17, align 8, !tbaa !5
  store i32 0, ptr %16, align 4, !tbaa !22
  br label %194

194:                                              ; preds = %227, %177
  br i1 true, label %195, label %230

195:                                              ; preds = %194
  %196 = load i32, ptr %15, align 4, !tbaa !22
  %197 = load ptr, ptr %5, align 8, !tbaa !5
  %198 = getelementptr inbounds i32, ptr %197, i32 1
  store ptr %198, ptr %5, align 8, !tbaa !5
  store i32 %196, ptr %197, align 4, !tbaa !22
  %199 = load i32, ptr %16, align 4, !tbaa !22
  %200 = load i32, ptr %12, align 4, !tbaa !22
  %201 = icmp eq i32 %199, %200
  br i1 %201, label %202, label %208

202:                                              ; preds = %195
  %203 = load i32, ptr %8, align 4, !tbaa !22
  %204 = add i32 %203, -2147483648
  %205 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %204, ptr %205, align 4, !tbaa !31
  %206 = load i32, ptr %16, align 4, !tbaa !22
  %207 = add i32 2, %206
  store i32 %207, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %342

208:                                              ; preds = %195
  %209 = load ptr, ptr %17, align 8, !tbaa !5
  %210 = load i32, ptr %16, align 4, !tbaa !22
  %211 = zext i32 %210 to i64
  %212 = getelementptr inbounds i8, ptr %209, i64 %211
  %213 = load i8, ptr %212, align 1, !tbaa !31
  %214 = zext i8 %213 to i32
  %215 = load ptr, ptr %17, align 8, !tbaa !5
  %216 = load i32, ptr %16, align 4, !tbaa !22
  %217 = zext i32 %216 to i64
  %218 = load i32, ptr %14, align 4, !tbaa !22
  %219 = zext i32 %218 to i64
  %220 = sub i64 %217, %219
  %221 = getelementptr inbounds i8, ptr %215, i64 %220
  %222 = load i8, ptr %221, align 1, !tbaa !31
  %223 = zext i8 %222 to i32
  %224 = icmp ne i32 %214, %223
  br i1 %224, label %225, label %226

225:                                              ; preds = %208
  br label %230

226:                                              ; preds = %208
  br label %227

227:                                              ; preds = %226
  %228 = load i32, ptr %16, align 4, !tbaa !22
  %229 = add i32 %228, 1
  store i32 %229, ptr %16, align 4, !tbaa !22
  br label %194, !llvm.loop !35

230:                                              ; preds = %225, %194
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  %231 = load i32, ptr %16, align 4, !tbaa !22
  %232 = add i32 %231, 2
  store i32 %232, ptr %18, align 4, !tbaa !22
  %233 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 8
  %234 = load i32, ptr %233, align 8, !tbaa !36
  %235 = load ptr, ptr %10, align 8, !tbaa !5
  store i32 %234, ptr %235, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  %236 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 7
  %237 = load ptr, ptr %236, align 8, !tbaa !37
  %238 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 8
  %239 = load i32, ptr %238, align 8, !tbaa !36
  %240 = zext i32 %239 to i64
  %241 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %237, i64 %240
  store ptr %241, ptr %19, align 8, !tbaa !5
  %242 = load ptr, ptr %19, align 8, !tbaa !5
  %243 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %242, i32 0, i32 2
  %244 = load i32, ptr %243, align 4, !tbaa !31
  %245 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 8
  store i32 %244, ptr %245, align 8, !tbaa !36
  %246 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 8
  %247 = load i32, ptr %246, align 8, !tbaa !36
  %248 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 9
  %249 = load i32, ptr %248, align 4, !tbaa !38
  %250 = icmp ugt i32 %247, %249
  br i1 %250, label %251, label %265

251:                                              ; preds = %230
  %252 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 8
  %253 = load i32, ptr %252, align 8, !tbaa !36
  %254 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 9
  store i32 %253, ptr %254, align 4, !tbaa !38
  %255 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 8
  %256 = load i32, ptr %255, align 8, !tbaa !36
  %257 = add i32 %256, 1
  %258 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 7
  %259 = load ptr, ptr %258, align 8, !tbaa !37
  %260 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 8
  %261 = load i32, ptr %260, align 8, !tbaa !36
  %262 = zext i32 %261 to i64
  %263 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %259, i64 %262
  %264 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %263, i32 0, i32 2
  store i32 %257, ptr %264, align 4, !tbaa !31
  br label %265

265:                                              ; preds = %251, %230
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 0, ptr %20, align 4, !tbaa !22
  br label %266

266:                                              ; preds = %276, %265
  %267 = load i32, ptr %20, align 4, !tbaa !22
  %268 = icmp ult i32 %267, 4
  br i1 %268, label %270, label %269

269:                                              ; preds = %266
  store i32 8, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  br label %279

270:                                              ; preds = %266
  %271 = load ptr, ptr %19, align 8, !tbaa !5
  %272 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %271, i32 0, i32 2
  %273 = load i32, ptr %20, align 4, !tbaa !22
  %274 = zext i32 %273 to i64
  %275 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %272, i64 0, i64 %274
  store i32 2147483647, ptr %275, align 4, !tbaa !31
  br label %276

276:                                              ; preds = %270
  %277 = load i32, ptr %20, align 4, !tbaa !22
  %278 = add i32 %277, 1
  store i32 %278, ptr %20, align 4, !tbaa !22
  br label %266, !llvm.loop !39

279:                                              ; preds = %269
  %280 = load i32, ptr %8, align 4, !tbaa !22
  %281 = load ptr, ptr %19, align 8, !tbaa !5
  %282 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %281, i32 0, i32 0
  store i32 %280, ptr %282, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #3
  %283 = load i32, ptr %18, align 4, !tbaa !22
  %284 = load ptr, ptr %47, align 8, !tbaa !23
  %285 = getelementptr inbounds ptr, ptr %284, i64 6
  %286 = load ptr, ptr %285, align 8
  %287 = call noundef zeroext i8 %286(ptr noundef nonnull align 8 dereferenceable(152) %47, i32 noundef %283)
  store i8 %287, ptr %21, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #3
  %288 = load i32, ptr %18, align 4, !tbaa !22
  %289 = load i32, ptr %14, align 4, !tbaa !22
  %290 = sub i32 %288, %289
  %291 = load ptr, ptr %47, align 8, !tbaa !23
  %292 = getelementptr inbounds ptr, ptr %291, i64 6
  %293 = load ptr, ptr %292, align 8
  %294 = call noundef zeroext i8 %293(ptr noundef nonnull align 8 dereferenceable(152) %47, i32 noundef %290)
  store i8 %294, ptr %22, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %295 = load i32, ptr %16, align 4, !tbaa !22
  %296 = mul i32 %295, 8
  store i32 %296, ptr %25, align 4, !tbaa !22
  br label %297

297:                                              ; preds = %313, %279
  br label %298

298:                                              ; preds = %297
  %299 = load i8, ptr %21, align 1, !tbaa !31
  %300 = zext i8 %299 to i32
  %301 = and i32 %300, 3
  %302 = trunc i32 %301 to i8
  store i8 %302, ptr %23, align 1, !tbaa !31
  %303 = load i8, ptr %22, align 1, !tbaa !31
  %304 = zext i8 %303 to i32
  %305 = and i32 %304, 3
  %306 = trunc i32 %305 to i8
  store i8 %306, ptr %24, align 1, !tbaa !31
  %307 = load i8, ptr %23, align 1, !tbaa !31
  %308 = zext i8 %307 to i32
  %309 = load i8, ptr %24, align 1, !tbaa !31
  %310 = zext i8 %309 to i32
  %311 = icmp ne i32 %308, %310
  br i1 %311, label %312, label %313

312:                                              ; preds = %298
  br label %324

313:                                              ; preds = %298
  %314 = load i8, ptr %21, align 1, !tbaa !31
  %315 = zext i8 %314 to i32
  %316 = ashr i32 %315, 2
  %317 = trunc i32 %316 to i8
  store i8 %317, ptr %21, align 1, !tbaa !31
  %318 = load i8, ptr %22, align 1, !tbaa !31
  %319 = zext i8 %318 to i32
  %320 = ashr i32 %319, 2
  %321 = trunc i32 %320 to i8
  store i8 %321, ptr %22, align 1, !tbaa !31
  %322 = load i32, ptr %25, align 4, !tbaa !22
  %323 = add i32 %322, 2
  store i32 %323, ptr %25, align 4, !tbaa !22
  br label %297, !llvm.loop !42

324:                                              ; preds = %312
  %325 = load i32, ptr %25, align 4, !tbaa !22
  %326 = load ptr, ptr %19, align 8, !tbaa !5
  %327 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %326, i32 0, i32 1
  store i32 %325, ptr %327, align 4, !tbaa !43
  %328 = load i32, ptr %8, align 4, !tbaa !22
  %329 = add i32 %328, -2147483648
  %330 = load ptr, ptr %19, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %330, i32 0, i32 2
  %332 = load i8, ptr %23, align 1, !tbaa !31
  %333 = zext i8 %332 to i64
  %334 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %331, i64 0, i64 %333
  store i32 %329, ptr %334, align 4, !tbaa !31
  %335 = load i32, ptr %13, align 4, !tbaa !22
  %336 = load ptr, ptr %19, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %336, i32 0, i32 2
  %338 = load i8, ptr %24, align 1, !tbaa !31
  %339 = zext i8 %338 to i64
  %340 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %337, i64 0, i64 %339
  store i32 %335, ptr %340, align 4, !tbaa !31
  %341 = load i32, ptr %18, align 4, !tbaa !22
  store i32 %341, ptr %3, align 4
  store i32 1, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  br label %342

342:                                              ; preds = %324, %202
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  br label %750

343:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  %344 = getelementptr inbounds i8, ptr %47, i64 24
  %345 = getelementptr inbounds %class.CLZInWindow, ptr %344, i32 0, i32 6
  %346 = load ptr, ptr %345, align 8, !tbaa !34
  %347 = load i32, ptr %8, align 4, !tbaa !22
  %348 = zext i32 %347 to i64
  %349 = getelementptr inbounds i8, ptr %346, i64 %348
  store ptr %349, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  %350 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %350, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  store i32 0, ptr %28, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #3
  store i8 0, ptr %29, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  %351 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %351, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  %352 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 7
  %353 = load ptr, ptr %352, align 8, !tbaa !37
  %354 = load ptr, ptr %30, align 8, !tbaa !5
  %355 = load i32, ptr %354, align 4, !tbaa !22
  %356 = zext i32 %355 to i64
  %357 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %353, i64 %356
  store ptr %357, ptr %31, align 8, !tbaa !5
  %358 = load ptr, ptr %5, align 8, !tbaa !5
  %359 = getelementptr inbounds i32, ptr %358, i64 2
  store ptr %359, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  %360 = load ptr, ptr %26, align 8, !tbaa !5
  %361 = load i32, ptr %12, align 4, !tbaa !22
  %362 = zext i32 %361 to i64
  %363 = getelementptr inbounds i8, ptr %360, i64 %362
  store ptr %363, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  %364 = getelementptr inbounds i8, ptr %47, i64 24
  %365 = getelementptr inbounds %class.CLZInWindow, ptr %364, i32 0, i32 6
  %366 = load ptr, ptr %365, align 8, !tbaa !34
  store ptr %366, ptr %33, align 8, !tbaa !5
  br label %367

367:                                              ; preds = %606, %343
  br label %368

368:                                              ; preds = %367
  %369 = load i32, ptr %28, align 4, !tbaa !22
  %370 = icmp eq i32 %369, 0
  br i1 %370, label %371, label %412

371:                                              ; preds = %368
  %372 = load i32, ptr %8, align 4, !tbaa !22
  %373 = load ptr, ptr %31, align 8, !tbaa !5
  %374 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %373, i32 0, i32 0
  %375 = load i32, ptr %374, align 4, !tbaa !40
  %376 = sub i32 %372, %375
  %377 = sub i32 %376, 1
  %378 = load ptr, ptr %5, align 8, !tbaa !5
  %379 = getelementptr inbounds i32, ptr %378, i32 1
  store ptr %379, ptr %5, align 8, !tbaa !5
  store i32 %377, ptr %378, align 4, !tbaa !22
  %380 = load ptr, ptr %27, align 8, !tbaa !5
  %381 = load ptr, ptr %32, align 8, !tbaa !5
  %382 = icmp uge ptr %380, %381
  br i1 %382, label %383, label %406

383:                                              ; preds = %371
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  store i32 0, ptr %34, align 4, !tbaa !22
  br label %384

384:                                              ; preds = %396, %383
  %385 = load i32, ptr %34, align 4, !tbaa !22
  %386 = icmp ult i32 %385, 4
  br i1 %386, label %388, label %387

387:                                              ; preds = %384
  store i32 15, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  br label %399

388:                                              ; preds = %384
  %389 = load i32, ptr %8, align 4, !tbaa !22
  %390 = add i32 %389, -2147483648
  %391 = load ptr, ptr %31, align 8, !tbaa !5
  %392 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %391, i32 0, i32 2
  %393 = load i32, ptr %34, align 4, !tbaa !22
  %394 = zext i32 %393 to i64
  %395 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %392, i64 0, i64 %394
  store i32 %390, ptr %395, align 4, !tbaa !31
  br label %396

396:                                              ; preds = %388
  %397 = load i32, ptr %34, align 4, !tbaa !22
  %398 = add i32 %397, 1
  store i32 %398, ptr %34, align 4, !tbaa !22
  br label %384, !llvm.loop !44

399:                                              ; preds = %387
  %400 = load i32, ptr %8, align 4, !tbaa !22
  %401 = load ptr, ptr %31, align 8, !tbaa !5
  %402 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %401, i32 0, i32 0
  store i32 %400, ptr %402, align 4, !tbaa !40
  %403 = load ptr, ptr %31, align 8, !tbaa !5
  %404 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %403, i32 0, i32 1
  store i32 0, ptr %404, align 4, !tbaa !43
  %405 = load i32, ptr %6, align 4, !tbaa !22
  store i32 %405, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %749

406:                                              ; preds = %371
  %407 = load ptr, ptr %27, align 8, !tbaa !5
  %408 = getelementptr inbounds i8, ptr %407, i32 1
  store ptr %408, ptr %27, align 8, !tbaa !5
  %409 = load i8, ptr %407, align 1, !tbaa !31
  store i8 %409, ptr %29, align 1, !tbaa !31
  %410 = load ptr, ptr %33, align 8, !tbaa !5
  %411 = getelementptr inbounds i8, ptr %410, i32 1
  store ptr %411, ptr %33, align 8, !tbaa !5
  store i32 8, ptr %28, align 4, !tbaa !22
  br label %412

412:                                              ; preds = %406, %368
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  %413 = load ptr, ptr %31, align 8, !tbaa !5
  %414 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %413, i32 0, i32 1
  %415 = load i32, ptr %414, align 4, !tbaa !43
  store i32 %415, ptr %35, align 4, !tbaa !22
  %416 = load i32, ptr %35, align 4, !tbaa !22
  %417 = icmp ugt i32 %416, 0
  br i1 %417, label %418, label %554

418:                                              ; preds = %412
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #3
  %419 = load ptr, ptr %33, align 8, !tbaa !5
  %420 = load ptr, ptr %31, align 8, !tbaa !5
  %421 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %420, i32 0, i32 0
  %422 = load i32, ptr %421, align 4, !tbaa !40
  %423 = zext i32 %422 to i64
  %424 = getelementptr inbounds i8, ptr %419, i64 %423
  %425 = getelementptr inbounds i8, ptr %424, i64 -1
  %426 = load i8, ptr %425, align 1, !tbaa !31
  %427 = zext i8 %426 to i32
  %428 = load i32, ptr %28, align 4, !tbaa !22
  %429 = sub i32 8, %428
  %430 = ashr i32 %427, %429
  %431 = load i8, ptr %29, align 1, !tbaa !31
  %432 = zext i8 %431 to i32
  %433 = xor i32 %430, %432
  %434 = trunc i32 %433 to i8
  store i8 %434, ptr %36, align 1, !tbaa !31
  br label %435

435:                                              ; preds = %501, %418
  %436 = load i32, ptr %28, align 4, !tbaa !22
  %437 = load i32, ptr %35, align 4, !tbaa !22
  %438 = icmp ule i32 %436, %437
  br i1 %438, label %439, label %519

439:                                              ; preds = %435
  %440 = load i8, ptr %36, align 1, !tbaa !31
  %441 = zext i8 %440 to i32
  %442 = icmp ne i32 %441, 0
  br i1 %442, label %443, label %458

443:                                              ; preds = %439
  %444 = load ptr, ptr %31, align 8, !tbaa !5
  %445 = load ptr, ptr %30, align 8, !tbaa !5
  %446 = load i8, ptr %29, align 1, !tbaa !31
  %447 = load i8, ptr %36, align 1, !tbaa !31
  %448 = load i32, ptr %35, align 4, !tbaa !22
  %449 = load i32, ptr %8, align 4, !tbaa !22
  call void @_ZN6NPat2R9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(152) %47, ptr noundef %444, ptr noundef %445, i8 noundef zeroext %446, i8 noundef zeroext %447, i32 noundef %448, i32 noundef %449)
  %450 = load ptr, ptr %27, align 8, !tbaa !5
  %451 = load ptr, ptr %26, align 8, !tbaa !5
  %452 = ptrtoint ptr %450 to i64
  %453 = ptrtoint ptr %451 to i64
  %454 = sub i64 %452, %453
  %455 = sub nsw i64 %454, 1
  %456 = trunc i64 %455 to i32
  %457 = add i32 2, %456
  store i32 %457, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %551

458:                                              ; preds = %439
  %459 = load i32, ptr %8, align 4, !tbaa !22
  %460 = load ptr, ptr %31, align 8, !tbaa !5
  %461 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %460, i32 0, i32 0
  %462 = load i32, ptr %461, align 4, !tbaa !40
  %463 = sub i32 %459, %462
  %464 = sub i32 %463, 1
  %465 = load ptr, ptr %5, align 8, !tbaa !5
  %466 = getelementptr inbounds i32, ptr %465, i32 1
  store ptr %466, ptr %5, align 8, !tbaa !5
  store i32 %464, ptr %465, align 4, !tbaa !22
  %467 = load i32, ptr %28, align 4, !tbaa !22
  %468 = load i32, ptr %35, align 4, !tbaa !22
  %469 = sub i32 %468, %467
  store i32 %469, ptr %35, align 4, !tbaa !22
  %470 = load ptr, ptr %27, align 8, !tbaa !5
  %471 = load ptr, ptr %32, align 8, !tbaa !5
  %472 = icmp uge ptr %470, %471
  br i1 %472, label %473, label %501

473:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  store i32 0, ptr %37, align 4, !tbaa !22
  br label %474

474:                                              ; preds = %486, %473
  %475 = load i32, ptr %37, align 4, !tbaa !22
  %476 = icmp ult i32 %475, 4
  br i1 %476, label %478, label %477

477:                                              ; preds = %474
  store i32 20, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  br label %489

478:                                              ; preds = %474
  %479 = load i32, ptr %8, align 4, !tbaa !22
  %480 = add i32 %479, -2147483648
  %481 = load ptr, ptr %31, align 8, !tbaa !5
  %482 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %481, i32 0, i32 2
  %483 = load i32, ptr %37, align 4, !tbaa !22
  %484 = zext i32 %483 to i64
  %485 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %482, i64 0, i64 %484
  store i32 %480, ptr %485, align 4, !tbaa !31
  br label %486

486:                                              ; preds = %478
  %487 = load i32, ptr %37, align 4, !tbaa !22
  %488 = add i32 %487, 1
  store i32 %488, ptr %37, align 4, !tbaa !22
  br label %474, !llvm.loop !45

489:                                              ; preds = %477
  %490 = load i32, ptr %8, align 4, !tbaa !22
  %491 = load ptr, ptr %31, align 8, !tbaa !5
  %492 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %491, i32 0, i32 0
  store i32 %490, ptr %492, align 4, !tbaa !40
  %493 = load ptr, ptr %31, align 8, !tbaa !5
  %494 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %493, i32 0, i32 1
  %495 = load i32, ptr %494, align 4, !tbaa !43
  %496 = load i32, ptr %35, align 4, !tbaa !22
  %497 = sub i32 %495, %496
  %498 = load ptr, ptr %31, align 8, !tbaa !5
  %499 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %498, i32 0, i32 1
  store i32 %497, ptr %499, align 4, !tbaa !43
  %500 = load i32, ptr %6, align 4, !tbaa !22
  store i32 %500, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %551

501:                                              ; preds = %458
  store i32 8, ptr %28, align 4, !tbaa !22
  %502 = load ptr, ptr %27, align 8, !tbaa !5
  %503 = getelementptr inbounds i8, ptr %502, i32 1
  store ptr %503, ptr %27, align 8, !tbaa !5
  %504 = load i8, ptr %502, align 1, !tbaa !31
  store i8 %504, ptr %29, align 1, !tbaa !31
  %505 = load i8, ptr %29, align 1, !tbaa !31
  %506 = zext i8 %505 to i32
  %507 = load ptr, ptr %33, align 8, !tbaa !5
  %508 = load ptr, ptr %31, align 8, !tbaa !5
  %509 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %508, i32 0, i32 0
  %510 = load i32, ptr %509, align 4, !tbaa !40
  %511 = zext i32 %510 to i64
  %512 = getelementptr inbounds i8, ptr %507, i64 %511
  %513 = load i8, ptr %512, align 1, !tbaa !31
  %514 = zext i8 %513 to i32
  %515 = xor i32 %506, %514
  %516 = trunc i32 %515 to i8
  store i8 %516, ptr %36, align 1, !tbaa !31
  %517 = load ptr, ptr %33, align 8, !tbaa !5
  %518 = getelementptr inbounds i8, ptr %517, i32 1
  store ptr %518, ptr %33, align 8, !tbaa !5
  br label %435, !llvm.loop !46

519:                                              ; preds = %435
  %520 = load i8, ptr %36, align 1, !tbaa !31
  %521 = zext i8 %520 to i32
  %522 = load i32, ptr %35, align 4, !tbaa !22
  %523 = shl i32 1, %522
  %524 = sub nsw i32 %523, 1
  %525 = and i32 %521, %524
  %526 = icmp ne i32 %525, 0
  br i1 %526, label %527, label %542

527:                                              ; preds = %519
  %528 = load ptr, ptr %31, align 8, !tbaa !5
  %529 = load ptr, ptr %30, align 8, !tbaa !5
  %530 = load i8, ptr %29, align 1, !tbaa !31
  %531 = load i8, ptr %36, align 1, !tbaa !31
  %532 = load i32, ptr %35, align 4, !tbaa !22
  %533 = load i32, ptr %8, align 4, !tbaa !22
  call void @_ZN6NPat2R9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(152) %47, ptr noundef %528, ptr noundef %529, i8 noundef zeroext %530, i8 noundef zeroext %531, i32 noundef %532, i32 noundef %533)
  %534 = load ptr, ptr %27, align 8, !tbaa !5
  %535 = load ptr, ptr %26, align 8, !tbaa !5
  %536 = ptrtoint ptr %534 to i64
  %537 = ptrtoint ptr %535 to i64
  %538 = sub i64 %536, %537
  %539 = sub nsw i64 %538, 1
  %540 = trunc i64 %539 to i32
  %541 = add i32 2, %540
  store i32 %541, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %551

542:                                              ; preds = %519
  %543 = load i32, ptr %35, align 4, !tbaa !22
  %544 = load i8, ptr %29, align 1, !tbaa !31
  %545 = zext i8 %544 to i32
  %546 = ashr i32 %545, %543
  %547 = trunc i32 %546 to i8
  store i8 %547, ptr %29, align 1, !tbaa !31
  %548 = load i32, ptr %35, align 4, !tbaa !22
  %549 = load i32, ptr %28, align 4, !tbaa !22
  %550 = sub i32 %549, %548
  store i32 %550, ptr %28, align 4, !tbaa !22
  store i32 0, ptr %7, align 4
  br label %551

551:                                              ; preds = %542, %527, %489, %443
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #3
  %552 = load i32, ptr %7, align 4
  switch i32 %552, label %604 [
    i32 0, label %553
  ]

553:                                              ; preds = %551
  br label %554

554:                                              ; preds = %553, %412
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %555 = load i8, ptr %29, align 1, !tbaa !31
  %556 = zext i8 %555 to i32
  %557 = and i32 %556, 3
  store i32 %557, ptr %38, align 4, !tbaa !22
  %558 = load i32, ptr %28, align 4, !tbaa !22
  %559 = sub i32 %558, 2
  store i32 %559, ptr %28, align 4, !tbaa !22
  %560 = load ptr, ptr %31, align 8, !tbaa !5
  %561 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %560, i32 0, i32 2
  %562 = load i32, ptr %38, align 4, !tbaa !22
  %563 = zext i32 %562 to i64
  %564 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %561, i64 0, i64 %563
  store ptr %564, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  %565 = load ptr, ptr %30, align 8, !tbaa !5
  %566 = load i32, ptr %565, align 4, !tbaa !22
  store i32 %566, ptr %39, align 4, !tbaa !22
  %567 = load i32, ptr %8, align 4, !tbaa !22
  %568 = load ptr, ptr %31, align 8, !tbaa !5
  %569 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %568, i32 0, i32 0
  store i32 %567, ptr %569, align 4, !tbaa !40
  %570 = load i32, ptr %39, align 4, !tbaa !22
  %571 = icmp ult i32 %570, 2147483647
  br i1 %571, label %572, label %582

572:                                              ; preds = %554
  %573 = load i8, ptr %29, align 1, !tbaa !31
  %574 = zext i8 %573 to i32
  %575 = ashr i32 %574, 2
  %576 = trunc i32 %575 to i8
  store i8 %576, ptr %29, align 1, !tbaa !31
  %577 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 7
  %578 = load ptr, ptr %577, align 8, !tbaa !37
  %579 = load i32, ptr %39, align 4, !tbaa !22
  %580 = zext i32 %579 to i64
  %581 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %578, i64 %580
  store ptr %581, ptr %31, align 8, !tbaa !5
  br label %602

582:                                              ; preds = %554
  %583 = load i32, ptr %39, align 4, !tbaa !22
  %584 = icmp eq i32 %583, 2147483647
  br i1 %584, label %585, label %601

585:                                              ; preds = %582
  %586 = load i32, ptr %8, align 4, !tbaa !22
  %587 = add i32 %586, -2147483648
  %588 = load ptr, ptr %31, align 8, !tbaa !5
  %589 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %588, i32 0, i32 2
  %590 = load i32, ptr %38, align 4, !tbaa !22
  %591 = zext i32 %590 to i64
  %592 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %589, i64 0, i64 %591
  store i32 %587, ptr %592, align 4, !tbaa !31
  %593 = load ptr, ptr %27, align 8, !tbaa !5
  %594 = load ptr, ptr %26, align 8, !tbaa !5
  %595 = ptrtoint ptr %593 to i64
  %596 = ptrtoint ptr %594 to i64
  %597 = sub i64 %595, %596
  %598 = sub nsw i64 %597, 1
  %599 = trunc i64 %598 to i32
  %600 = add i32 2, %599
  store i32 %600, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %603

601:                                              ; preds = %582
  store i32 14, ptr %7, align 4
  br label %603

602:                                              ; preds = %572
  store i32 0, ptr %7, align 4
  br label %603

603:                                              ; preds = %602, %601, %585
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  br label %604

604:                                              ; preds = %603, %551
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  %605 = load i32, ptr %7, align 4
  switch i32 %605, label %749 [
    i32 0, label %606
    i32 14, label %607
  ]

606:                                              ; preds = %604
  br label %367, !llvm.loop !47

607:                                              ; preds = %604
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  %608 = load i8, ptr %29, align 1, !tbaa !31
  %609 = zext i8 %608 to i32
  %610 = and i32 %609, 3
  store i32 %610, ptr %40, align 4, !tbaa !22
  %611 = load i8, ptr %29, align 1, !tbaa !31
  %612 = zext i8 %611 to i32
  %613 = ashr i32 %612, 2
  %614 = trunc i32 %613 to i8
  store i8 %614, ptr %29, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #3
  %615 = load ptr, ptr %31, align 8, !tbaa !5
  %616 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %615, i32 0, i32 2
  %617 = load i32, ptr %40, align 4, !tbaa !22
  %618 = zext i32 %617 to i64
  %619 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %616, i64 0, i64 %618
  %620 = load i32, ptr %619, align 4, !tbaa !31
  store i32 %620, ptr %41, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #3
  %621 = load i32, ptr %41, align 4, !tbaa !22
  %622 = sub i32 %621, -2147483648
  store i32 %622, ptr %42, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #3
  store i32 0, ptr %44, align 4, !tbaa !22
  %623 = load i32, ptr %28, align 4, !tbaa !22
  %624 = icmp ne i32 %623, 0
  br i1 %624, label %625, label %669

625:                                              ; preds = %607
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #3
  %626 = load ptr, ptr %33, align 8, !tbaa !5
  %627 = load i32, ptr %42, align 4, !tbaa !22
  %628 = zext i32 %627 to i64
  %629 = getelementptr inbounds i8, ptr %626, i64 %628
  %630 = getelementptr inbounds i8, ptr %629, i64 -1
  %631 = load i8, ptr %630, align 1, !tbaa !31
  store i8 %631, ptr %45, align 1, !tbaa !31
  %632 = load i32, ptr %28, align 4, !tbaa !22
  %633 = sub i32 8, %632
  %634 = load i8, ptr %45, align 1, !tbaa !31
  %635 = zext i8 %634 to i32
  %636 = ashr i32 %635, %633
  %637 = trunc i32 %636 to i8
  store i8 %637, ptr %45, align 1, !tbaa !31
  %638 = load i8, ptr %45, align 1, !tbaa !31
  %639 = zext i8 %638 to i32
  %640 = load i8, ptr %29, align 1, !tbaa !31
  %641 = zext i8 %640 to i32
  %642 = xor i32 %639, %641
  %643 = trunc i32 %642 to i8
  store i8 %643, ptr %43, align 1, !tbaa !31
  %644 = load i8, ptr %43, align 1, !tbaa !31
  %645 = zext i8 %644 to i32
  %646 = icmp ne i32 %645, 0
  br i1 %646, label %647, label %662

647:                                              ; preds = %625
  %648 = load ptr, ptr %31, align 8, !tbaa !5
  %649 = load i8, ptr %29, align 1, !tbaa !31
  %650 = load i8, ptr %43, align 1, !tbaa !31
  %651 = load i32, ptr %44, align 4, !tbaa !22
  %652 = load i32, ptr %8, align 4, !tbaa !22
  %653 = load i32, ptr %40, align 4, !tbaa !22
  call void @_ZN6NPat2R9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(152) %47, ptr noundef %648, i8 noundef zeroext %649, i8 noundef zeroext %650, i32 noundef %651, i32 noundef %652, i32 noundef %653)
  %654 = load ptr, ptr %27, align 8, !tbaa !5
  %655 = load ptr, ptr %26, align 8, !tbaa !5
  %656 = ptrtoint ptr %654 to i64
  %657 = ptrtoint ptr %655 to i64
  %658 = sub i64 %656, %657
  %659 = sub nsw i64 %658, 1
  %660 = trunc i64 %659 to i32
  %661 = add i32 2, %660
  store i32 %661, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %666

662:                                              ; preds = %625
  %663 = load i32, ptr %28, align 4, !tbaa !22
  %664 = load i32, ptr %44, align 4, !tbaa !22
  %665 = add i32 %664, %663
  store i32 %665, ptr %44, align 4, !tbaa !22
  store i32 0, ptr %7, align 4
  br label %666

666:                                              ; preds = %662, %647
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #3
  %667 = load i32, ptr %7, align 4
  switch i32 %667, label %748 [
    i32 0, label %668
  ]

668:                                              ; preds = %666
  br label %669

669:                                              ; preds = %668, %607
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #3
  %670 = getelementptr inbounds i8, ptr %47, i64 24
  %671 = getelementptr inbounds %class.CLZInWindow, ptr %670, i32 0, i32 6
  %672 = load ptr, ptr %671, align 8, !tbaa !34
  %673 = load i32, ptr %42, align 4, !tbaa !22
  %674 = zext i32 %673 to i64
  %675 = getelementptr inbounds i8, ptr %672, i64 %674
  %676 = load ptr, ptr %27, align 8, !tbaa !5
  %677 = load ptr, ptr %26, align 8, !tbaa !5
  %678 = ptrtoint ptr %676 to i64
  %679 = ptrtoint ptr %677 to i64
  %680 = sub i64 %678, %679
  %681 = getelementptr inbounds i8, ptr %675, i64 %680
  store ptr %681, ptr %46, align 8, !tbaa !5
  br label %682

682:                                              ; preds = %723, %669
  %683 = load ptr, ptr %27, align 8, !tbaa !5
  %684 = load ptr, ptr %32, align 8, !tbaa !5
  %685 = icmp ult ptr %683, %684
  br i1 %685, label %686, label %726

686:                                              ; preds = %682
  %687 = load ptr, ptr %27, align 8, !tbaa !5
  %688 = getelementptr inbounds i8, ptr %687, i32 1
  store ptr %688, ptr %27, align 8, !tbaa !5
  %689 = load i8, ptr %687, align 1, !tbaa !31
  store i8 %689, ptr %29, align 1, !tbaa !31
  %690 = load i32, ptr %8, align 4, !tbaa !22
  %691 = load i32, ptr %42, align 4, !tbaa !22
  %692 = sub i32 %690, %691
  %693 = sub i32 %692, 1
  %694 = load ptr, ptr %5, align 8, !tbaa !5
  %695 = getelementptr inbounds i32, ptr %694, i32 1
  store ptr %695, ptr %5, align 8, !tbaa !5
  store i32 %693, ptr %694, align 4, !tbaa !22
  %696 = load i8, ptr %29, align 1, !tbaa !31
  %697 = zext i8 %696 to i32
  %698 = load ptr, ptr %46, align 8, !tbaa !5
  %699 = getelementptr inbounds i8, ptr %698, i32 1
  store ptr %699, ptr %46, align 8, !tbaa !5
  %700 = load i8, ptr %698, align 1, !tbaa !31
  %701 = zext i8 %700 to i32
  %702 = xor i32 %697, %701
  %703 = trunc i32 %702 to i8
  store i8 %703, ptr %43, align 1, !tbaa !31
  %704 = load i8, ptr %43, align 1, !tbaa !31
  %705 = zext i8 %704 to i32
  %706 = icmp ne i32 %705, 0
  br i1 %706, label %707, label %722

707:                                              ; preds = %686
  %708 = load ptr, ptr %31, align 8, !tbaa !5
  %709 = load i8, ptr %29, align 1, !tbaa !31
  %710 = load i8, ptr %43, align 1, !tbaa !31
  %711 = load i32, ptr %44, align 4, !tbaa !22
  %712 = load i32, ptr %8, align 4, !tbaa !22
  %713 = load i32, ptr %40, align 4, !tbaa !22
  call void @_ZN6NPat2R9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(152) %47, ptr noundef %708, i8 noundef zeroext %709, i8 noundef zeroext %710, i32 noundef %711, i32 noundef %712, i32 noundef %713)
  %714 = load ptr, ptr %27, align 8, !tbaa !5
  %715 = load ptr, ptr %26, align 8, !tbaa !5
  %716 = ptrtoint ptr %714 to i64
  %717 = ptrtoint ptr %715 to i64
  %718 = sub i64 %716, %717
  %719 = sub nsw i64 %718, 1
  %720 = trunc i64 %719 to i32
  %721 = add i32 2, %720
  store i32 %721, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %747

722:                                              ; preds = %686
  br label %723

723:                                              ; preds = %722
  %724 = load i32, ptr %44, align 4, !tbaa !22
  %725 = add i32 %724, 8
  store i32 %725, ptr %44, align 4, !tbaa !22
  br label %682, !llvm.loop !48

726:                                              ; preds = %682
  %727 = load i32, ptr %8, align 4, !tbaa !22
  %728 = load i32, ptr %42, align 4, !tbaa !22
  %729 = sub i32 %727, %728
  %730 = sub i32 %729, 1
  %731 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 %730, ptr %731, align 4, !tbaa !22
  %732 = load i32, ptr %8, align 4, !tbaa !22
  %733 = add i32 %732, -2147483648
  %734 = load ptr, ptr %31, align 8, !tbaa !5
  %735 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %734, i32 0, i32 2
  %736 = load i32, ptr %40, align 4, !tbaa !22
  %737 = zext i32 %736 to i64
  %738 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %735, i64 0, i64 %737
  store i32 %733, ptr %738, align 4, !tbaa !31
  %739 = load ptr, ptr %5, align 8, !tbaa !5
  %740 = load i32, ptr %739, align 4, !tbaa !22
  %741 = icmp eq i32 %740, 0
  br i1 %741, label %742, label %745

742:                                              ; preds = %726
  %743 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 11
  store i8 1, ptr %743, align 1, !tbaa !26
  %744 = getelementptr inbounds %"class.NPat2R::CPatricia", ptr %47, i32 0, i32 12
  store i32 0, ptr %744, align 4, !tbaa !29
  br label %745

745:                                              ; preds = %742, %726
  %746 = load i32, ptr %6, align 4, !tbaa !22
  store i32 %746, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %747

747:                                              ; preds = %745, %707
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  br label %748

748:                                              ; preds = %747, %666
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  br label %749

749:                                              ; preds = %748, %604, %399
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  br label %750

750:                                              ; preds = %749, %342
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  br label %751

751:                                              ; preds = %750, %168, %154
  call void @llvm.lifetime.end.p0(i64 8, 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 %752

752:                                              ; preds = %751, %71
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  %753 = load i32, ptr %3, align 4
  ret i32 %753
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6NPat2R9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(152), 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 @_ZN6NPat2R9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(152), 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 = !{!"_ZTSN6NPat2R9CPatriciaE", !15, i64 0, !18, i64 8, !19, i64 16, !10, i64 24, !11, i64 96, !11, i64 100, !6, i64 104, !6, i64 112, !11, i64 120, !11, i64 124, !12, i64 128, !12, i64 129, !11, i64 132, !6, i64 136, !20, i64 144}
!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 = !{!24, !24, i64 0}
!24 = !{!"vtable pointer", !8, i64 0}
!25 = !{!14, !6, i64 104}
!26 = !{!14, !12, i64 129}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!14, !11, i64 132}
!30 = !{!14, !11, i64 96}
!31 = !{!7, !7, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!10, !6, i64 40}
!35 = distinct !{!35, !33}
!36 = !{!14, !11, i64 120}
!37 = !{!14, !6, i64 112}
!38 = !{!14, !11, i64 124}
!39 = distinct !{!39, !33}
!40 = !{!41, !11, i64 0}
!41 = !{!"_ZTSN6NPat2R5CNodeE", !11, i64 0, !11, i64 4, !7, i64 8}
!42 = distinct !{!42, !33}
!43 = !{!41, !11, i64 4}
!44 = distinct !{!44, !33}
!45 = distinct !{!45, !33}
!46 = distinct !{!46, !33}
!47 = distinct !{!47, !33}
!48 = distinct !{!48, !33}


; 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.NPat2R::CDescendant" = type { i32 }
%"struct.NPat2R::CNode" = type { i32, i32, %union.anon.3 }
%union.anon.3 = type { [4 x %"union.NPat2R::CDescendant"] }

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN6NPat2R9CPatricia15GetLongestMatchEPj(ptr noundef nonnull align 8 dereferenceable(152) %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, 2
  br i1 %12, label %.thread302, label %13

13:                                               ; preds = %2, %10
  %.0232 = phi i32 [ %11, %10 ], [ %6, %2 ]
  %14 = add i32 %4, 2
  %15 = load ptr, ptr %0, align 8, !tbaa !21
  %16 = getelementptr inbounds i8, ptr %15, i64 48
  %17 = load ptr, ptr %16, align 8
  %18 = tail call noundef zeroext i8 %17(ptr noundef nonnull align 8 dereferenceable(152) %0, i32 noundef 1)
  %19 = zext i8 %18 to i32
  %20 = load ptr, ptr %0, align 8, !tbaa !21
  %21 = getelementptr inbounds i8, ptr %20, i64 48
  %22 = load ptr, ptr %21, align 8
  %23 = tail call noundef zeroext i8 %22(ptr noundef nonnull align 8 dereferenceable(152) %0, i32 noundef 0)
  %24 = zext i8 %23 to i32
  %25 = shl nuw nsw i32 %24, 8
  %26 = or disjoint i32 %25, %19
  %27 = getelementptr inbounds i8, ptr %0, i64 104
  %28 = load ptr, ptr %27, align 8, !tbaa !23
  %29 = zext nneg i32 %26 to i64
  %30 = getelementptr inbounds %"union.NPat2R::CDescendant", ptr %28, i64 %29
  %31 = getelementptr inbounds i8, ptr %0, i64 129
  %32 = load i8, ptr %31, align 1, !tbaa !24, !range !25, !noundef !26
  %33 = trunc nuw i8 %32 to i1
  br i1 %33, label %34, label %74

34:                                               ; preds = %13
  %35 = tail call noundef zeroext i1 @_ZNK6NPat2R11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %30)
  %36 = getelementptr inbounds i8, ptr %0, i64 132
  br i1 %35, label %37, label %._crit_edge470

._crit_edge470:                                   ; preds = %34
  %.pre = load i32, ptr %36, align 4, !tbaa !27
  br label %38

37:                                               ; preds = %34
  store i32 0, ptr %36, align 4, !tbaa !27
  br label %38

38:                                               ; preds = %._crit_edge470, %37
  %39 = phi i32 [ %.pre, %._crit_edge470 ], [ 0, %37 ]
  %40 = getelementptr inbounds i8, ptr %0, i64 132
  %41 = getelementptr inbounds i8, ptr %0, i64 96
  %42 = load i32, ptr %41, align 8, !tbaa !28
  %43 = add i32 %42, -1
  %.not282 = icmp ult i32 %39, %43
  br i1 %.not282, label %45, label %44

44:                                               ; preds = %38
  tail call void @_ZN6NPat2R9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(152) %0, i32 noundef %26)
  store i32 0, ptr %40, align 4, !tbaa !27
  br label %45

45:                                               ; preds = %44, %38
  %46 = add i32 %.0232, -1
  %47 = load ptr, ptr %0, align 8, !tbaa !21
  %48 = getelementptr inbounds i8, ptr %47, i64 48
  %49 = load ptr, ptr %48, align 8
  %50 = tail call noundef zeroext i8 %49(ptr noundef nonnull align 8 dereferenceable(152) %0, i32 noundef %46)
  %51 = add i32 %.0232, -2
  %52 = load ptr, ptr %0, align 8, !tbaa !21
  %53 = getelementptr inbounds i8, ptr %52, i64 48
  %54 = load ptr, ptr %53, align 8
  %55 = tail call noundef zeroext i8 %54(ptr noundef nonnull align 8 dereferenceable(152) %0, i32 noundef %51)
  %56 = icmp eq i8 %50, %55
  br i1 %56, label %57, label %70

57:                                               ; preds = %45
  %58 = tail call noundef zeroext i1 @_ZNK6NPat2R11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %30)
  br i1 %58, label %59, label %61

59:                                               ; preds = %57
  %60 = add i32 %4, -2147483646
  store i32 %60, ptr %30, align 4, !tbaa !29
  br label %64

61:                                               ; preds = %57
  %62 = load i32, ptr %40, align 4, !tbaa !27
  %63 = add i32 %62, 1
  store i32 %63, ptr %40, align 4, !tbaa !27
  br label %64

64:                                               ; preds = %61, %59
  %.not295412 = icmp ult i32 %.0232, 2
  br i1 %.not295412, label %.thread302, label %.lr.ph415.preheader

.lr.ph415.preheader:                              ; preds = %64
  %scevgep = getelementptr i8, ptr %1, i64 8
  %umin = tail call i32 @llvm.umin.i32(i32 %9, i32 %7)
  %65 = add i32 %umin, 1
  %66 = sub i32 %65, %4
  %umax = tail call i32 @llvm.umax.i32(i32 %66, i32 3)
  %67 = add i32 %umax, -2
  %68 = zext i32 %67 to i64
  %69 = shl nuw nsw i64 %68, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep, i8 0, i64 %69, i1 false), !tbaa !30
  br label %.thread302

70:                                               ; preds = %45
  %71 = load i32, ptr %40, align 4, !tbaa !27
  %.not283 = icmp eq i32 %71, 0
  br i1 %.not283, label %73, label %72

72:                                               ; preds = %70
  tail call void @_ZN6NPat2R9CPatricia15ChangeLastMatchEj(ptr noundef nonnull align 8 dereferenceable(152) %0, i32 noundef %26)
  br label %73

73:                                               ; preds = %70, %72
  store i8 0, ptr %31, align 1, !tbaa !24
  br label %74

74:                                               ; preds = %73, %13
  %75 = tail call noundef zeroext i1 @_ZNK6NPat2R11CDescendant7IsEmptyEv(ptr noundef nonnull align 4 dereferenceable(4) %30)
  br i1 %75, label %76, label %78

76:                                               ; preds = %74
  %77 = add i32 %4, -2147483646
  store i32 %77, ptr %30, align 4, !tbaa !29
  br label %.thread302

78:                                               ; preds = %74
  %79 = add i32 %.0232, -2
  %80 = tail call noundef zeroext i1 @_ZNK6NPat2R11CDescendant7IsMatchEv(ptr noundef nonnull align 4 dereferenceable(4) %30)
  br i1 %80, label %81, label %148

81:                                               ; preds = %78
  %82 = load i32, ptr %30, align 4, !tbaa !29
  %83 = xor i32 %82, -2147483648
  %84 = sub i32 %14, %83
  %85 = add i32 %84, -1
  %86 = getelementptr inbounds i8, ptr %1, i64 8
  %87 = getelementptr inbounds i8, ptr %0, i64 64
  %88 = load ptr, ptr %87, align 8, !tbaa !31
  %89 = zext i32 %14 to i64
  %90 = getelementptr inbounds i8, ptr %88, i64 %89
  store i32 %85, ptr %86, align 4, !tbaa !30
  %91 = icmp eq i32 %79, 0
  br i1 %91, label %._crit_edge399, label %.lr.ph398

.lr.ph398:                                        ; preds = %81
  %92 = getelementptr inbounds i8, ptr %1, i64 12
  %93 = zext i32 %84 to i64
  br label %95

._crit_edge399:                                   ; preds = %103, %81
  %94 = add i32 %4, -2147483646
  store i32 %94, ptr %30, align 4, !tbaa !29
  br label %.thread302

95:                                               ; preds = %.lr.ph398, %103
  %96 = phi ptr [ %92, %.lr.ph398 ], [ %105, %103 ]
  %.0238396 = phi i32 [ 0, %.lr.ph398 ], [ %104, %103 ]
  %97 = zext i32 %.0238396 to i64
  %98 = getelementptr inbounds i8, ptr %90, i64 %97
  %99 = load i8, ptr %98, align 1, !tbaa !29
  %100 = sub nsw i64 %97, %93
  %101 = getelementptr inbounds i8, ptr %90, i64 %100
  %102 = load i8, ptr %101, align 1, !tbaa !29
  %.not293 = icmp eq i8 %99, %102
  br i1 %.not293, label %103, label %107

103:                                              ; preds = %95
  %104 = add nuw i32 %.0238396, 1
  %105 = getelementptr inbounds i8, ptr %96, i64 4
  store i32 %85, ptr %96, align 4, !tbaa !30
  %106 = icmp eq i32 %104, %79
  br i1 %106, label %._crit_edge399, label %95, !llvm.loop !32

107:                                              ; preds = %95
  %108 = add i32 %.0238396, 2
  %109 = getelementptr inbounds i8, ptr %0, i64 120
  %110 = load i32, ptr %109, align 8, !tbaa !34
  store i32 %110, ptr %30, align 4, !tbaa !29
  %111 = getelementptr inbounds i8, ptr %0, i64 112
  %112 = load ptr, ptr %111, align 8, !tbaa !35
  %113 = zext i32 %110 to i64
  %114 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %112, i64 %113
  %115 = getelementptr inbounds i8, ptr %114, i64 8
  %116 = load i32, ptr %115, align 4, !tbaa !29
  store i32 %116, ptr %109, align 8, !tbaa !34
  %117 = getelementptr inbounds i8, ptr %0, i64 124
  %118 = load i32, ptr %117, align 4, !tbaa !36
  %119 = icmp ugt i32 %116, %118
  br i1 %119, label %120, label %124

120:                                              ; preds = %107
  store i32 %116, ptr %117, align 4, !tbaa !36
  %121 = add i32 %116, 1
  %122 = zext i32 %116 to i64
  %123 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %112, i64 %122, i32 2
  store i32 %121, ptr %123, align 4, !tbaa !29
  br label %124

124:                                              ; preds = %120, %107
  store <4 x i32> <i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647>, ptr %115, align 4, !tbaa !29
  store i32 %14, ptr %114, align 4, !tbaa !37
  %125 = load ptr, ptr %0, align 8, !tbaa !21
  %126 = getelementptr inbounds i8, ptr %125, i64 48
  %127 = load ptr, ptr %126, align 8
  %128 = tail call noundef zeroext i8 %127(ptr noundef nonnull align 8 dereferenceable(152) %0, i32 noundef %108)
  %129 = sub i32 %108, %84
  %130 = load ptr, ptr %0, align 8, !tbaa !21
  %131 = getelementptr inbounds i8, ptr %130, i64 48
  %132 = load ptr, ptr %131, align 8
  %133 = tail call noundef zeroext i8 %132(ptr noundef nonnull align 8 dereferenceable(152) %0, i32 noundef %129)
  %134 = shl i32 %.0238396, 3
  %135 = and i8 %128, 3
  %136 = and i8 %133, 3
  %.not294402 = icmp eq i8 %135, %136
  br i1 %.not294402, label %.lr.ph407, label %._crit_edge408

.lr.ph407:                                        ; preds = %124, %.lr.ph407
  %.0273405 = phi i8 [ %137, %.lr.ph407 ], [ %128, %124 ]
  %.0274404 = phi i32 [ %139, %.lr.ph407 ], [ %134, %124 ]
  %.0275403 = phi i8 [ %138, %.lr.ph407 ], [ %133, %124 ]
  %137 = lshr i8 %.0273405, 2
  %138 = lshr i8 %.0275403, 2
  %139 = add i32 %.0274404, 2
  %140 = and i8 %137, 3
  %141 = and i8 %138, 3
  %.not294 = icmp eq i8 %140, %141
  br i1 %.not294, label %.lr.ph407, label %._crit_edge408, !llvm.loop !39

._crit_edge408:                                   ; preds = %.lr.ph407, %124
  %.0274.lcssa = phi i32 [ %134, %124 ], [ %139, %.lr.ph407 ]
  %.lcssa335 = phi i8 [ %135, %124 ], [ %140, %.lr.ph407 ]
  %.lcssa = phi i8 [ %136, %124 ], [ %141, %.lr.ph407 ]
  %142 = getelementptr inbounds i8, ptr %114, i64 4
  store i32 %.0274.lcssa, ptr %142, align 4, !tbaa !40
  %143 = add i32 %4, -2147483646
  %144 = zext nneg i8 %.lcssa335 to i64
  %145 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %115, i64 0, i64 %144
  store i32 %143, ptr %145, align 4, !tbaa !29
  %146 = zext nneg i8 %.lcssa to i64
  %147 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %115, i64 0, i64 %146
  store i32 %82, ptr %147, align 4, !tbaa !29
  br label %.thread302

148:                                              ; preds = %78
  %149 = getelementptr inbounds i8, ptr %0, i64 64
  %150 = load ptr, ptr %149, align 8, !tbaa !31
  %151 = zext i32 %14 to i64
  %152 = getelementptr inbounds i8, ptr %150, i64 %151
  %153 = getelementptr inbounds i8, ptr %0, i64 112
  %154 = load ptr, ptr %153, align 8
  %155 = load i32, ptr %30, align 4, !tbaa !30
  %156 = getelementptr inbounds i8, ptr %1, i64 8
  %157 = zext i32 %79 to i64
  %158 = getelementptr inbounds i8, ptr %152, i64 %157
  br label %159

159:                                              ; preds = %264, %148
  %.0267 = phi ptr [ %152, %148 ], [ %.3270, %264 ]
  %.0261 = phi i32 [ 0, %148 ], [ %248, %264 ]
  %.0254 = phi i8 [ 0, %148 ], [ %265, %264 ]
  %.0252 = phi ptr [ %30, %148 ], [ %251, %264 ]
  %.pn.in = phi i32 [ %155, %148 ], [ %252, %264 ]
  %.0243 = phi ptr [ %150, %148 ], [ %.3246, %264 ]
  %.1225 = phi ptr [ %156, %148 ], [ %.5229, %264 ]
  %.pn = zext i32 %.pn.in to i64
  %.0249 = getelementptr inbounds %"struct.NPat2R::CNode", ptr %154, i64 %.pn
  %160 = icmp eq i32 %.0261, 0
  br i1 %160, label %161, label %175

161:                                              ; preds = %159
  %162 = load i32, ptr %.0249, align 4, !tbaa !37
  %163 = xor i32 %162, -1
  %164 = add i32 %14, %163
  store i32 %164, ptr %.1225, align 4, !tbaa !30
  %.not284 = icmp ult ptr %.0267, %158
  br i1 %.not284, label %170, label %.preheader334

.preheader334:                                    ; preds = %161
  %165 = add i32 %4, -2147483646
  %166 = getelementptr inbounds i8, ptr %.0249, i64 8
  %167 = insertelement <4 x i32> poison, i32 %165, i64 0
  %168 = shufflevector <4 x i32> %167, <4 x i32> poison, <4 x i32> zeroinitializer
  store <4 x i32> %168, ptr %166, align 4, !tbaa !29
  store i32 %14, ptr %.0249, align 4, !tbaa !37
  %169 = getelementptr inbounds i8, ptr %.0249, i64 4
  store i32 0, ptr %169, align 4, !tbaa !40
  br label %.thread302

170:                                              ; preds = %161
  %171 = getelementptr inbounds i8, ptr %.1225, i64 4
  %172 = getelementptr inbounds i8, ptr %.0267, i64 1
  %173 = load i8, ptr %.0267, align 1, !tbaa !29
  %174 = getelementptr inbounds i8, ptr %.0243, i64 1
  br label %175

175:                                              ; preds = %170, %159
  %.1268 = phi ptr [ %172, %170 ], [ %.0267, %159 ]
  %.1262 = phi i32 [ 8, %170 ], [ %.0261, %159 ]
  %.1255 = phi i8 [ %173, %170 ], [ %.0254, %159 ]
  %.1244 = phi ptr [ %174, %170 ], [ %.0243, %159 ]
  %.2226 = phi ptr [ %171, %170 ], [ %.1225, %159 ]
  %176 = getelementptr inbounds i8, ptr %.0249, i64 4
  %177 = load i32, ptr %176, align 4, !tbaa !40
  %.not285 = icmp eq i32 %177, 0
  br i1 %.not285, label %246, label %178

178:                                              ; preds = %175
  %179 = load i32, ptr %.0249, align 4, !tbaa !37
  %180 = zext i32 %179 to i64
  %181 = getelementptr inbounds i8, ptr %.1244, i64 %180
  %182 = getelementptr inbounds i8, ptr %181, i64 -1
  %183 = load i8, ptr %182, align 1, !tbaa !29
  %184 = zext i8 %183 to i32
  %185 = sub i32 8, %.1262
  %186 = lshr i32 %184, %185
  %187 = trunc nuw i32 %186 to i8
  %188 = xor i8 %.1255, %187
  %.not286372 = icmp ugt i32 %.1262, %177
  br i1 %.not286372, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %178
  %.not288.peel = icmp eq i8 %.1255, %187
  br i1 %.not288.peel, label %189, label %.loopexit

189:                                              ; preds = %.lr.ph.preheader
  %190 = xor i32 %179, -1
  %191 = add i32 %14, %190
  store i32 %191, ptr %.2226, align 4, !tbaa !30
  %192 = sub i32 %177, %.1262
  %.not289.peel = icmp ult ptr %.1268, %158
  br i1 %.not289.peel, label %193, label %.preheader

193:                                              ; preds = %189
  %194 = getelementptr inbounds i8, ptr %.2226, i64 4
  %195 = getelementptr inbounds i8, ptr %.1268, i64 1
  %196 = load i8, ptr %.1268, align 1, !tbaa !29
  %197 = load i32, ptr %.0249, align 4, !tbaa !37
  %198 = zext i32 %197 to i64
  %199 = getelementptr inbounds i8, ptr %.1244, i64 %198
  %200 = load i8, ptr %199, align 1, !tbaa !29
  %201 = xor i8 %200, %196
  %202 = getelementptr inbounds i8, ptr %.1244, i64 1
  %.not286.peel = icmp ult i32 %192, 8
  br i1 %.not286.peel, label %._crit_edge, label %.lr.ph.preheader558

.lr.ph.preheader558:                              ; preds = %193
  %.not288635 = icmp eq i8 %200, %196
  br i1 %.not288635, label %.lr.ph640, label %.loopexit

.lr.ph:                                           ; preds = %221
  %.not288 = icmp eq i8 %228, %224
  br i1 %.not288, label %.lr.ph640, label %.loopexit.loopexit, !llvm.loop !41

.loopexit.loopexit:                               ; preds = %.lr.ph
  %203 = xor i8 %228, %224
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph.preheader, %.lr.ph.preheader558, %.loopexit.loopexit
  %.0240378.lcssa = phi i8 [ %203, %.loopexit.loopexit ], [ %188, %.lr.ph.preheader ], [ %201, %.lr.ph.preheader558 ]
  %.0241377.lcssa = phi i32 [ %213, %.loopexit.loopexit ], [ %177, %.lr.ph.preheader ], [ %192, %.lr.ph.preheader558 ]
  %.2256375.lcssa = phi i8 [ %224, %.loopexit.loopexit ], [ %.1255, %.lr.ph.preheader ], [ %196, %.lr.ph.preheader558 ]
  %.2269373.lcssa = phi ptr [ %223, %.loopexit.loopexit ], [ %.1268, %.lr.ph.preheader ], [ %195, %.lr.ph.preheader558 ]
  tail call void @_ZN6NPat2R9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(152) %0, ptr noundef nonnull %.0249, ptr noundef nonnull %.0252, i8 noundef zeroext %.2256375.lcssa, i8 noundef zeroext %.0240378.lcssa, i32 noundef %.0241377.lcssa, i32 noundef %14)
  %204 = ptrtoint ptr %.2269373.lcssa to i64
  %205 = ptrtoint ptr %152 to i64
  %206 = xor i64 %205, -1
  %207 = add i64 %204, %206
  %208 = trunc i64 %207 to i32
  %209 = add i32 %208, 2
  br label %.thread302

.lr.ph640:                                        ; preds = %.lr.ph.preheader558, %.lr.ph
  %.2269373639 = phi ptr [ %223, %.lr.ph ], [ %195, %.lr.ph.preheader558 ]
  %.2245376638 = phi ptr [ %229, %.lr.ph ], [ %202, %.lr.ph.preheader558 ]
  %.0241377637 = phi i32 [ %213, %.lr.ph ], [ %192, %.lr.ph.preheader558 ]
  %.3227379636 = phi ptr [ %222, %.lr.ph ], [ %194, %.lr.ph.preheader558 ]
  %210 = phi i32 [ %225, %.lr.ph ], [ %197, %.lr.ph.preheader558 ]
  %211 = xor i32 %210, -1
  %212 = add i32 %14, %211
  store i32 %212, ptr %.3227379636, align 4, !tbaa !30
  %213 = add i32 %.0241377637, -8
  %.not289 = icmp ult ptr %.2269373639, %158
  br i1 %.not289, label %221, label %.preheader

.preheader:                                       ; preds = %189, %.lr.ph640
  %.lcssa437 = phi i32 [ %213, %.lr.ph640 ], [ %192, %189 ]
  %214 = getelementptr inbounds i8, ptr %.0249, i64 4
  %215 = add i32 %4, -2147483646
  %216 = getelementptr inbounds i8, ptr %.0249, i64 8
  %217 = insertelement <4 x i32> poison, i32 %215, i64 0
  %218 = shufflevector <4 x i32> %217, <4 x i32> poison, <4 x i32> zeroinitializer
  store <4 x i32> %218, ptr %216, align 4, !tbaa !29
  store i32 %14, ptr %.0249, align 4, !tbaa !37
  %219 = load i32, ptr %214, align 4, !tbaa !40
  %220 = sub i32 %219, %.lcssa437
  store i32 %220, ptr %214, align 4, !tbaa !40
  br label %.thread302

221:                                              ; preds = %.lr.ph640
  %222 = getelementptr inbounds i8, ptr %.3227379636, i64 4
  %223 = getelementptr inbounds i8, ptr %.2269373639, i64 1
  %224 = load i8, ptr %.2269373639, align 1, !tbaa !29
  %225 = load i32, ptr %.0249, align 4, !tbaa !37
  %226 = zext i32 %225 to i64
  %227 = getelementptr inbounds i8, ptr %.2245376638, i64 %226
  %228 = load i8, ptr %227, align 1, !tbaa !29
  %229 = getelementptr inbounds i8, ptr %.2245376638, i64 1
  %.not286 = icmp ult i32 %213, 8
  br i1 %.not286, label %._crit_edge.loopexit, label %.lr.ph, !llvm.loop !41

._crit_edge.loopexit:                             ; preds = %221
  %230 = xor i8 %228, %224
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %193, %178
  %.2269.lcssa = phi ptr [ %.1268, %178 ], [ %195, %193 ], [ %223, %._crit_edge.loopexit ]
  %.2263.lcssa = phi i32 [ %.1262, %178 ], [ 8, %193 ], [ 8, %._crit_edge.loopexit ]
  %.2256.lcssa = phi i8 [ %.1255, %178 ], [ %196, %193 ], [ %224, %._crit_edge.loopexit ]
  %.2245.lcssa = phi ptr [ %.1244, %178 ], [ %202, %193 ], [ %229, %._crit_edge.loopexit ]
  %.0241.lcssa = phi i32 [ %177, %178 ], [ %192, %193 ], [ %213, %._crit_edge.loopexit ]
  %.0240.lcssa = phi i8 [ %188, %178 ], [ %201, %193 ], [ %230, %._crit_edge.loopexit ]
  %.3227.lcssa = phi ptr [ %.2226, %178 ], [ %194, %193 ], [ %222, %._crit_edge.loopexit ]
  %231 = zext i8 %.0240.lcssa to i32
  %notmask = shl nsw i32 -1, %.0241.lcssa
  %232 = xor i32 %notmask, -1
  %233 = and i32 %231, %232
  %.not287 = icmp eq i32 %233, 0
  br i1 %.not287, label %241, label %234

234:                                              ; preds = %._crit_edge
  tail call void @_ZN6NPat2R9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(152) %0, ptr noundef nonnull %.0249, ptr noundef nonnull %.0252, i8 noundef zeroext %.2256.lcssa, i8 noundef zeroext %.0240.lcssa, i32 noundef %.0241.lcssa, i32 noundef %14)
  %235 = ptrtoint ptr %.2269.lcssa to i64
  %236 = ptrtoint ptr %152 to i64
  %237 = xor i64 %236, -1
  %238 = add i64 %235, %237
  %239 = trunc i64 %238 to i32
  %240 = add i32 %239, 2
  br label %.thread302

241:                                              ; preds = %._crit_edge
  %242 = zext i8 %.2256.lcssa to i32
  %243 = lshr i32 %242, %.0241.lcssa
  %244 = trunc nuw i32 %243 to i8
  %245 = sub i32 %.2263.lcssa, %.0241.lcssa
  br label %246

246:                                              ; preds = %241, %175
  %.3270 = phi ptr [ %.2269.lcssa, %241 ], [ %.1268, %175 ]
  %.4265 = phi i32 [ %245, %241 ], [ %.1262, %175 ]
  %.4258 = phi i8 [ %244, %241 ], [ %.1255, %175 ]
  %.3246 = phi ptr [ %.2245.lcssa, %241 ], [ %.1244, %175 ]
  %.5229 = phi ptr [ %.3227.lcssa, %241 ], [ %.2226, %175 ]
  %247 = and i8 %.4258, 3
  %248 = add i32 %.4265, -2
  %249 = getelementptr inbounds i8, ptr %.0249, i64 8
  %250 = zext nneg i8 %247 to i64
  %251 = getelementptr inbounds [4 x %"union.NPat2R::CDescendant"], ptr %249, i64 0, i64 %250
  %252 = load i32, ptr %251, align 4, !tbaa !29
  store i32 %14, ptr %.0249, align 4, !tbaa !37
  %253 = icmp ult i32 %252, 2147483647
  br i1 %253, label %264, label %254

254:                                              ; preds = %246
  %255 = icmp eq i32 %252, 2147483647
  br i1 %255, label %256, label %266

256:                                              ; preds = %254
  %257 = add i32 %4, -2147483646
  store i32 %257, ptr %251, align 4, !tbaa !29
  %258 = ptrtoint ptr %.3270 to i64
  %259 = ptrtoint ptr %152 to i64
  %260 = xor i64 %259, -1
  %261 = add i64 %258, %260
  %262 = trunc i64 %261 to i32
  %263 = add i32 %262, 2
  br label %.thread302

264:                                              ; preds = %246
  %265 = lshr i8 %.4258, 2
  br label %159

266:                                              ; preds = %254
  %267 = zext nneg i8 %247 to i32
  %268 = lshr i8 %.4258, 2
  %269 = xor i32 %252, -2147483648
  %.not290 = icmp eq i32 %248, 0
  br i1 %.not290, label %.thread331, label %270

270:                                              ; preds = %266
  %271 = zext nneg i32 %269 to i64
  %272 = getelementptr inbounds i8, ptr %.3246, i64 %271
  %273 = getelementptr inbounds i8, ptr %272, i64 -1
  %274 = load i8, ptr %273, align 1, !tbaa !29
  %275 = sub i32 10, %.4265
  %276 = zext i8 %274 to i32
  %277 = lshr i32 %276, %275
  %278 = trunc nuw i32 %277 to i8
  %.not291 = icmp eq i8 %268, %278
  br i1 %.not291, label %.thread331, label %279

279:                                              ; preds = %270
  %280 = xor i8 %268, %278
  tail call void @_ZN6NPat2R9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(152) %0, ptr noundef nonnull %.0249, i8 noundef zeroext %268, i8 noundef zeroext %280, i32 noundef 0, i32 noundef %14, i32 noundef %267)
  %281 = ptrtoint ptr %.3270 to i64
  %282 = ptrtoint ptr %152 to i64
  %283 = xor i64 %282, -1
  %284 = add i64 %281, %283
  %285 = trunc i64 %284 to i32
  %286 = add i32 %285, 2
  br label %.thread302

.thread331:                                       ; preds = %270, %266
  %287 = ptrtoint ptr %152 to i64
  %288 = icmp ult ptr %.3270, %158
  br i1 %288, label %.lr.ph393, label %.thread331.._crit_edge394_crit_edge

.thread331.._crit_edge394_crit_edge:              ; preds = %.thread331
  %.pre471 = xor i32 %252, 2147483647
  %.pre472 = add i32 %.pre471, %14
  br label %._crit_edge394

.lr.ph393:                                        ; preds = %.thread331
  %289 = zext nneg i32 %269 to i64
  %290 = getelementptr inbounds i8, ptr %150, i64 %289
  %291 = ptrtoint ptr %.3270 to i64
  %292 = sub i64 %291, %287
  %293 = getelementptr inbounds i8, ptr %290, i64 %292
  %294 = xor i32 %252, 2147483647
  %295 = add i32 %294, %14
  br label %296

296:                                              ; preds = %.lr.ph393, %307
  %.0392 = phi ptr [ %293, %.lr.ph393 ], [ %308, %307 ]
  %.2223391 = phi i32 [ %248, %.lr.ph393 ], [ %310, %307 ]
  %.7231390 = phi ptr [ %.5229, %.lr.ph393 ], [ %309, %307 ]
  %.5272389 = phi ptr [ %.3270, %.lr.ph393 ], [ %297, %307 ]
  %297 = getelementptr inbounds i8, ptr %.5272389, i64 1
  %298 = load i8, ptr %.5272389, align 1, !tbaa !29
  store i32 %295, ptr %.7231390, align 4, !tbaa !30
  %299 = load i8, ptr %.0392, align 1, !tbaa !29
  %.not292 = icmp eq i8 %298, %299
  br i1 %.not292, label %307, label %300

300:                                              ; preds = %296
  %301 = xor i8 %299, %298
  tail call void @_ZN6NPat2R9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(152) %0, ptr noundef nonnull %.0249, i8 noundef zeroext %298, i8 noundef zeroext %301, i32 noundef %.2223391, i32 noundef %14, i32 noundef %267)
  %302 = ptrtoint ptr %297 to i64
  %303 = xor i64 %287, -1
  %304 = add i64 %302, %303
  %305 = trunc i64 %304 to i32
  %306 = add i32 %305, 2
  br label %.thread302

307:                                              ; preds = %296
  %308 = getelementptr inbounds i8, ptr %.0392, i64 1
  %309 = getelementptr inbounds i8, ptr %.7231390, i64 4
  %310 = add i32 %.2223391, 8
  %311 = icmp ult ptr %297, %158
  br i1 %311, label %296, label %._crit_edge394, !llvm.loop !43

._crit_edge394:                                   ; preds = %307, %.thread331.._crit_edge394_crit_edge
  %.pre-phi473 = phi i32 [ %.pre472, %.thread331.._crit_edge394_crit_edge ], [ %295, %307 ]
  %.7231.lcssa = phi ptr [ %.5229, %.thread331.._crit_edge394_crit_edge ], [ %309, %307 ]
  store i32 %.pre-phi473, ptr %.7231.lcssa, align 4, !tbaa !30
  %312 = add i32 %4, -2147483646
  store i32 %312, ptr %251, align 4, !tbaa !29
  %313 = load i32, ptr %.7231.lcssa, align 4, !tbaa !30
  %314 = icmp eq i32 %313, 0
  br i1 %314, label %315, label %.thread302

315:                                              ; preds = %._crit_edge394
  store i8 1, ptr %31, align 1, !tbaa !24
  %316 = getelementptr inbounds i8, ptr %0, i64 132
  store i32 0, ptr %316, align 4, !tbaa !27
  br label %.thread302

.thread302:                                       ; preds = %.lr.ph415.preheader, %64, %234, %.preheader, %.loopexit, %256, %279, %76, %.preheader334, %300, %315, %._crit_edge394, %._crit_edge399, %._crit_edge408, %10
  %.12 = phi i32 [ 0, %10 ], [ 0, %76 ], [ %.0232, %._crit_edge399 ], [ %108, %._crit_edge408 ], [ %.0232, %.preheader334 ], [ %286, %279 ], [ %306, %300 ], [ %.0232, %315 ], [ %.0232, %._crit_edge394 ], [ %263, %256 ], [ %240, %234 ], [ %.0232, %.preheader ], [ %209, %.loopexit ], [ %.0232, %64 ], [ %.0232, %.lr.ph415.preheader ]
  ret i32 %.12
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6NPat2R9CPatricia15AddInternalNodeEPNS_5CNodeEPjhhjj(ptr noundef nonnull align 8 dereferenceable(152), 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 @_ZN6NPat2R9CPatricia11AddLeafNodeEPNS_5CNodeEhhjjj(ptr noundef nonnull align 8 dereferenceable(152), 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.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 = !{!"_ZTSN6NPat2R9CPatriciaE", !14, i64 0, !17, i64 8, !18, i64 16, !6, i64 24, !10, i64 96, !10, i64 100, !7, i64 104, !7, i64 112, !10, i64 120, !10, i64 124, !11, i64 128, !11, i64 129, !10, i64 132, !7, i64 136, !19, i64 144}
!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 = !{!22, !22, i64 0}
!22 = !{!"vtable pointer", !9, i64 0}
!23 = !{!13, !7, i64 104}
!24 = !{!13, !11, i64 129}
!25 = !{i8 0, i8 2}
!26 = !{}
!27 = !{!13, !10, i64 132}
!28 = !{!13, !10, i64 96}
!29 = !{!8, !8, i64 0}
!30 = !{!10, !10, i64 0}
!31 = !{!6, !7, i64 40}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!13, !10, i64 120}
!35 = !{!13, !7, i64 112}
!36 = !{!13, !10, i64 124}
!37 = !{!38, !10, i64 0}
!38 = !{!"_ZTSN6NPat2R5CNodeE", !10, i64 0, !10, i64 4, !8, i64 8}
!39 = distinct !{!39, !33}
!40 = !{!38, !10, i64 4}
!41 = distinct !{!41, !33, !42}
!42 = !{!"llvm.loop.peeled.count", i32 1}
!43 = distinct !{!43, !33}


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