; LLVM IR from intel/cryptography-primitives :: sources/ippcp (pcpbnarithgcd)

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

%struct._cpBigNum = type { i32, i32, i32, i32, ptr, ptr }

; Function Attrs: nounwind uwtable
define dso_local i32 @ippsGcd_BN(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %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 i64, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca ptr, align 8
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = icmp eq ptr null, %66
  br i1 %67, label %68, label %69

68:                                               ; preds = %3
  store i32 -8, ptr %4, align 4
  br label %974

69:                                               ; preds = %3
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = icmp eq ptr null, %70
  br i1 %71, label %72, label %73

72:                                               ; preds = %69
  store i32 -8, ptr %4, align 4
  br label %974

73:                                               ; preds = %69
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = icmp eq ptr null, %74
  br i1 %75, label %76, label %77

76:                                               ; preds = %73
  store i32 -8, ptr %4, align 4
  br label %974

77:                                               ; preds = %73
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct._cpBigNum, ptr %78, i32 0, i32 0
  %80 = load i32, ptr %79, align 8, !tbaa !9
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  %82 = call i64 @IPP_UINT_PTR(ptr noundef %81)
  %83 = trunc i64 %82 to i32
  %84 = xor i32 %80, %83
  %85 = icmp eq i32 %84, 1112098638
  br i1 %85, label %87, label %86

86:                                               ; preds = %77
  store i32 -13, ptr %4, align 4
  br label %974

87:                                               ; preds = %77
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct._cpBigNum, ptr %88, i32 0, i32 0
  %90 = load i32, ptr %89, align 8, !tbaa !9
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = call i64 @IPP_UINT_PTR(ptr noundef %91)
  %93 = trunc i64 %92 to i32
  %94 = xor i32 %90, %93
  %95 = icmp eq i32 %94, 1112098638
  br i1 %95, label %97, label %96

96:                                               ; preds = %87
  store i32 -13, ptr %4, align 4
  br label %974

97:                                               ; preds = %87
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct._cpBigNum, ptr %98, i32 0, i32 0
  %100 = load i32, ptr %99, align 8, !tbaa !9
  %101 = load ptr, ptr %7, align 8, !tbaa !5
  %102 = call i64 @IPP_UINT_PTR(ptr noundef %101)
  %103 = trunc i64 %102 to i32
  %104 = xor i32 %100, %103
  %105 = icmp eq i32 %104, 1112098638
  br i1 %105, label %107, label %106

106:                                              ; preds = %97
  store i32 -13, ptr %4, align 4
  br label %974

107:                                              ; preds = %97
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct._cpBigNum, ptr %108, i32 0, i32 3
  %110 = load i32, ptr %109, align 4, !tbaa !12
  %111 = load ptr, ptr %5, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct._cpBigNum, ptr %111, i32 0, i32 2
  %113 = load i32, ptr %112, align 8, !tbaa !13
  %114 = load ptr, ptr %6, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct._cpBigNum, ptr %114, i32 0, i32 2
  %116 = load i32, ptr %115, align 8, !tbaa !13
  %117 = icmp slt i32 %113, %116
  br i1 %117, label %118, label %122

118:                                              ; preds = %107
  %119 = load ptr, ptr %5, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct._cpBigNum, ptr %119, i32 0, i32 2
  %121 = load i32, ptr %120, align 8, !tbaa !13
  br label %126

122:                                              ; preds = %107
  %123 = load ptr, ptr %6, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct._cpBigNum, ptr %123, i32 0, i32 2
  %125 = load i32, ptr %124, align 8, !tbaa !13
  br label %126

126:                                              ; preds = %122, %118
  %127 = phi i32 [ %121, %118 ], [ %125, %122 ]
  %128 = icmp slt i32 %110, %127
  br i1 %128, label %129, label %130

129:                                              ; preds = %126
  store i32 -11, ptr %4, align 4
  br label %974

130:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %131 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %131, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  %132 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %132, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %133, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  %134 = load ptr, ptr %5, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct._cpBigNum, ptr %134, i32 0, i32 2
  %136 = load i32, ptr %135, align 8, !tbaa !13
  %137 = icmp eq i32 %136, 1
  br i1 %137, label %138, label %145

138:                                              ; preds = %130
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct._cpBigNum, ptr %139, i32 0, i32 4
  %141 = load ptr, ptr %140, align 8, !tbaa !14
  %142 = getelementptr inbounds i64, ptr %141, i64 0
  %143 = load i64, ptr %142, align 8, !tbaa !15
  %144 = icmp eq i64 %143, 0
  br label %145

145:                                              ; preds = %138, %130
  %146 = phi i1 [ false, %130 ], [ %144, %138 ]
  %147 = zext i1 %146 to i32
  store i32 %147, ptr %11, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %148 = load ptr, ptr %6, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct._cpBigNum, ptr %148, i32 0, i32 2
  %150 = load i32, ptr %149, align 8, !tbaa !13
  %151 = icmp eq i32 %150, 1
  br i1 %151, label %152, label %159

152:                                              ; preds = %145
  %153 = load ptr, ptr %6, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct._cpBigNum, ptr %153, i32 0, i32 4
  %155 = load ptr, ptr %154, align 8, !tbaa !14
  %156 = getelementptr inbounds i64, ptr %155, i64 0
  %157 = load i64, ptr %156, align 8, !tbaa !15
  %158 = icmp eq i64 %157, 0
  br label %159

159:                                              ; preds = %152, %145
  %160 = phi i1 [ false, %145 ], [ %158, %152 ]
  %161 = zext i1 %160 to i32
  store i32 %161, ptr %12, align 4, !tbaa !17
  %162 = load i32, ptr %11, align 4, !tbaa !17
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %168

164:                                              ; preds = %159
  %165 = load i32, ptr %12, align 4, !tbaa !17
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %167, label %168

167:                                              ; preds = %164
  store i32 -5, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %973

168:                                              ; preds = %164, %159
  %169 = load i32, ptr %11, align 4, !tbaa !17
  %170 = icmp ne i32 %169, 0
  br i1 %170, label %171, label %206

171:                                              ; preds = %168
  %172 = load i32, ptr %12, align 4, !tbaa !17
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %206, label %174

174:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !17
  br label %175

175:                                              ; preds = %195, %174
  %176 = load i32, ptr %14, align 4, !tbaa !17
  %177 = load ptr, ptr %6, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct._cpBigNum, ptr %177, i32 0, i32 2
  %179 = load i32, ptr %178, align 8, !tbaa !13
  %180 = icmp slt i32 %176, %179
  br i1 %180, label %181, label %198

181:                                              ; preds = %175
  %182 = load ptr, ptr %6, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct._cpBigNum, ptr %182, i32 0, i32 4
  %184 = load ptr, ptr %183, align 8, !tbaa !14
  %185 = load i32, ptr %14, align 4, !tbaa !17
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i64, ptr %184, i64 %186
  %188 = load i64, ptr %187, align 8, !tbaa !15
  %189 = load ptr, ptr %10, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct._cpBigNum, ptr %189, i32 0, i32 4
  %191 = load ptr, ptr %190, align 8, !tbaa !14
  %192 = load i32, ptr %14, align 4, !tbaa !17
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i64, ptr %191, i64 %193
  store i64 %188, ptr %194, align 8, !tbaa !15
  br label %195

195:                                              ; preds = %181
  %196 = load i32, ptr %14, align 4, !tbaa !17
  %197 = add nsw i32 %196, 1
  store i32 %197, ptr %14, align 4, !tbaa !17
  br label %175, !llvm.loop !18

198:                                              ; preds = %175
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct._cpBigNum, ptr %199, i32 0, i32 2
  %201 = load i32, ptr %200, align 8, !tbaa !13
  %202 = load ptr, ptr %10, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct._cpBigNum, ptr %202, i32 0, i32 2
  store i32 %201, ptr %203, align 8, !tbaa !13
  %204 = load ptr, ptr %10, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct._cpBigNum, ptr %204, i32 0, i32 1
  store i32 1, ptr %205, align 4, !tbaa !20
  store i32 0, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %973

206:                                              ; preds = %171, %168
  %207 = load i32, ptr %12, align 4, !tbaa !17
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %209, label %244

209:                                              ; preds = %206
  %210 = load i32, ptr %11, align 4, !tbaa !17
  %211 = icmp ne i32 %210, 0
  br i1 %211, label %244, label %212

212:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !17
  br label %213

213:                                              ; preds = %233, %212
  %214 = load i32, ptr %15, align 4, !tbaa !17
  %215 = load ptr, ptr %5, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct._cpBigNum, ptr %215, i32 0, i32 2
  %217 = load i32, ptr %216, align 8, !tbaa !13
  %218 = icmp slt i32 %214, %217
  br i1 %218, label %219, label %236

219:                                              ; preds = %213
  %220 = load ptr, ptr %5, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct._cpBigNum, ptr %220, i32 0, i32 4
  %222 = load ptr, ptr %221, align 8, !tbaa !14
  %223 = load i32, ptr %15, align 4, !tbaa !17
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds i64, ptr %222, i64 %224
  %226 = load i64, ptr %225, align 8, !tbaa !15
  %227 = load ptr, ptr %10, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct._cpBigNum, ptr %227, i32 0, i32 4
  %229 = load ptr, ptr %228, align 8, !tbaa !14
  %230 = load i32, ptr %15, align 4, !tbaa !17
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i64, ptr %229, i64 %231
  store i64 %226, ptr %232, align 8, !tbaa !15
  br label %233

233:                                              ; preds = %219
  %234 = load i32, ptr %15, align 4, !tbaa !17
  %235 = add nsw i32 %234, 1
  store i32 %235, ptr %15, align 4, !tbaa !17
  br label %213, !llvm.loop !21

236:                                              ; preds = %213
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  %237 = load ptr, ptr %5, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct._cpBigNum, ptr %237, i32 0, i32 2
  %239 = load i32, ptr %238, align 8, !tbaa !13
  %240 = load ptr, ptr %10, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct._cpBigNum, ptr %240, i32 0, i32 2
  store i32 %239, ptr %241, align 8, !tbaa !13
  %242 = load ptr, ptr %10, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct._cpBigNum, ptr %242, i32 0, i32 1
  store i32 1, ptr %243, align 4, !tbaa !20
  store i32 0, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %973

244:                                              ; preds = %209, %206
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %245 = load ptr, ptr %8, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct._cpBigNum, ptr %245, i32 0, i32 4
  %247 = load ptr, ptr %246, align 8, !tbaa !14
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct._cpBigNum, ptr %248, i32 0, i32 2
  %250 = load i32, ptr %249, align 8, !tbaa !13
  %251 = load ptr, ptr %9, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct._cpBigNum, ptr %251, i32 0, i32 4
  %253 = load ptr, ptr %252, align 8, !tbaa !14
  %254 = load ptr, ptr %9, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct._cpBigNum, ptr %254, i32 0, i32 2
  %256 = load i32, ptr %255, align 8, !tbaa !13
  %257 = call i32 @cpCmp_BNU(ptr noundef %247, i32 noundef %250, ptr noundef %253, i32 noundef %256)
  store i32 %257, ptr %16, align 4, !tbaa !17
  %258 = load i32, ptr %16, align 4, !tbaa !17
  %259 = icmp sgt i32 0, %258
  br i1 %259, label %260, label %264

260:                                              ; preds = %244
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  %261 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %261, ptr %17, align 8, !tbaa !5
  %262 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %262, ptr %8, align 8, !tbaa !5
  %263 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %263, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  br label %264

264:                                              ; preds = %260, %244
  %265 = load i32, ptr %16, align 4, !tbaa !17
  %266 = icmp eq i32 0, %265
  br i1 %266, label %267, label %299

267:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  store i32 0, ptr %18, align 4, !tbaa !17
  br label %268

268:                                              ; preds = %288, %267
  %269 = load i32, ptr %18, align 4, !tbaa !17
  %270 = load ptr, ptr %8, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct._cpBigNum, ptr %270, i32 0, i32 2
  %272 = load i32, ptr %271, align 8, !tbaa !13
  %273 = icmp slt i32 %269, %272
  br i1 %273, label %274, label %291

274:                                              ; preds = %268
  %275 = load ptr, ptr %8, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct._cpBigNum, ptr %275, i32 0, i32 4
  %277 = load ptr, ptr %276, align 8, !tbaa !14
  %278 = load i32, ptr %18, align 4, !tbaa !17
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i64, ptr %277, i64 %279
  %281 = load i64, ptr %280, align 8, !tbaa !15
  %282 = load ptr, ptr %10, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct._cpBigNum, ptr %282, i32 0, i32 4
  %284 = load ptr, ptr %283, align 8, !tbaa !14
  %285 = load i32, ptr %18, align 4, !tbaa !17
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds i64, ptr %284, i64 %286
  store i64 %281, ptr %287, align 8, !tbaa !15
  br label %288

288:                                              ; preds = %274
  %289 = load i32, ptr %18, align 4, !tbaa !17
  %290 = add nsw i32 %289, 1
  store i32 %290, ptr %18, align 4, !tbaa !17
  br label %268, !llvm.loop !22

291:                                              ; preds = %268
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  %292 = load ptr, ptr %10, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct._cpBigNum, ptr %292, i32 0, i32 1
  store i32 1, ptr %293, align 4, !tbaa !20
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct._cpBigNum, ptr %294, i32 0, i32 2
  %296 = load i32, ptr %295, align 8, !tbaa !13
  %297 = load ptr, ptr %10, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct._cpBigNum, ptr %297, i32 0, i32 2
  store i32 %296, ptr %298, align 8, !tbaa !13
  store i32 0, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %324

299:                                              ; preds = %264
  %300 = load ptr, ptr %8, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct._cpBigNum, ptr %300, i32 0, i32 2
  %302 = load i32, ptr %301, align 8, !tbaa !13
  %303 = icmp eq i32 %302, 1
  br i1 %303, label %304, label %323

304:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  %305 = load ptr, ptr %8, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct._cpBigNum, ptr %305, i32 0, i32 4
  %307 = load ptr, ptr %306, align 8, !tbaa !14
  %308 = getelementptr inbounds i64, ptr %307, i64 0
  %309 = load i64, ptr %308, align 8, !tbaa !15
  %310 = load ptr, ptr %9, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct._cpBigNum, ptr %310, i32 0, i32 4
  %312 = load ptr, ptr %311, align 8, !tbaa !14
  %313 = getelementptr inbounds i64, ptr %312, i64 0
  %314 = load i64, ptr %313, align 8, !tbaa !15
  %315 = call i64 @cpGcd_BNU(i64 noundef %309, i64 noundef %314)
  store i64 %315, ptr %19, align 8, !tbaa !15
  %316 = load i64, ptr %19, align 8, !tbaa !15
  %317 = load ptr, ptr %10, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct._cpBigNum, ptr %317, i32 0, i32 4
  %319 = load ptr, ptr %318, align 8, !tbaa !14
  %320 = getelementptr inbounds i64, ptr %319, i64 0
  store i64 %316, ptr %320, align 8, !tbaa !15
  %321 = load ptr, ptr %10, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct._cpBigNum, ptr %321, i32 0, i32 2
  store i32 1, ptr %322, align 8, !tbaa !13
  store i32 0, ptr %4, align 4
  store i32 1, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  br label %324

323:                                              ; preds = %299
  store i32 0, ptr %13, align 4
  br label %324

324:                                              ; preds = %323, %304, %291
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  %325 = load i32, ptr %13, align 4
  switch i32 %325, label %973 [
    i32 0, label %326
  ]

326:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  %327 = load ptr, ptr %8, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct._cpBigNum, ptr %327, i32 0, i32 5
  %329 = load ptr, ptr %328, align 8, !tbaa !23
  store ptr %329, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %330 = load ptr, ptr %9, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct._cpBigNum, ptr %330, i32 0, i32 5
  %332 = load ptr, ptr %331, align 8, !tbaa !23
  store ptr %332, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  %333 = load ptr, ptr %10, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct._cpBigNum, ptr %333, i32 0, i32 5
  %335 = load ptr, ptr %334, align 8, !tbaa !23
  store ptr %335, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  %336 = load ptr, ptr %8, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct._cpBigNum, ptr %336, i32 0, i32 4
  %338 = load ptr, ptr %337, align 8, !tbaa !14
  store ptr %338, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  %339 = load ptr, ptr %9, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct._cpBigNum, ptr %339, i32 0, i32 4
  %341 = load ptr, ptr %340, align 8, !tbaa !14
  store ptr %341, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %342 = load ptr, ptr %10, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct._cpBigNum, ptr %342, i32 0, i32 4
  %344 = load ptr, ptr %343, align 8, !tbaa !14
  store ptr %344, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %345 = load ptr, ptr %8, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct._cpBigNum, ptr %345, i32 0, i32 3
  %347 = load i32, ptr %346, align 4, !tbaa !12
  %348 = mul nsw i32 %347, 2
  store i32 %348, ptr %26, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %349 = load ptr, ptr %9, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct._cpBigNum, ptr %349, i32 0, i32 3
  %351 = load i32, ptr %350, align 4, !tbaa !12
  %352 = mul nsw i32 %351, 2
  store i32 %352, ptr %27, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %353 = load ptr, ptr %10, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct._cpBigNum, ptr %353, i32 0, i32 3
  %355 = load i32, ptr %354, align 4, !tbaa !12
  %356 = mul nsw i32 %355, 2
  store i32 %356, ptr %28, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %357 = load ptr, ptr %8, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct._cpBigNum, ptr %357, i32 0, i32 2
  %359 = load i32, ptr %358, align 8, !tbaa !13
  %360 = mul nsw i32 %359, 2
  store i32 %360, ptr %29, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %361 = load ptr, ptr %9, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct._cpBigNum, ptr %361, i32 0, i32 2
  %363 = load i32, ptr %362, align 8, !tbaa !13
  %364 = mul nsw i32 %363, 2
  store i32 %364, ptr %30, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  %365 = load ptr, ptr %23, align 8, !tbaa !5
  %366 = load i32, ptr %29, align 4, !tbaa !17
  %367 = call i32 @cpFix_BNU32(ptr noundef %365, i32 noundef %366)
  store i32 %367, ptr %29, align 4, !tbaa !17
  %368 = load ptr, ptr %24, align 8, !tbaa !5
  %369 = load i32, ptr %30, align 4, !tbaa !17
  %370 = call i32 @cpFix_BNU32(ptr noundef %368, i32 noundef %369)
  store i32 %370, ptr %30, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  store i32 0, ptr %33, align 4, !tbaa !17
  br label %371

371:                                              ; preds = %385, %326
  %372 = load i32, ptr %33, align 4, !tbaa !17
  %373 = load i32, ptr %29, align 4, !tbaa !17
  %374 = icmp slt i32 %372, %373
  br i1 %374, label %375, label %388

375:                                              ; preds = %371
  %376 = load ptr, ptr %23, align 8, !tbaa !5
  %377 = load i32, ptr %33, align 4, !tbaa !17
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds i32, ptr %376, i64 %378
  %380 = load i32, ptr %379, align 4, !tbaa !17
  %381 = load ptr, ptr %20, align 8, !tbaa !5
  %382 = load i32, ptr %33, align 4, !tbaa !17
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds i32, ptr %381, i64 %383
  store i32 %380, ptr %384, align 4, !tbaa !17
  br label %385

385:                                              ; preds = %375
  %386 = load i32, ptr %33, align 4, !tbaa !17
  %387 = add nsw i32 %386, 1
  store i32 %387, ptr %33, align 4, !tbaa !17
  br label %371, !llvm.loop !24

388:                                              ; preds = %371
  br label %389

389:                                              ; preds = %398, %388
  %390 = load i32, ptr %33, align 4, !tbaa !17
  %391 = load i32, ptr %26, align 4, !tbaa !17
  %392 = icmp slt i32 %390, %391
  br i1 %392, label %393, label %401

393:                                              ; preds = %389
  %394 = load ptr, ptr %20, align 8, !tbaa !5
  %395 = load i32, ptr %33, align 4, !tbaa !17
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds i32, ptr %394, i64 %396
  store i32 0, ptr %397, align 4, !tbaa !17
  br label %398

398:                                              ; preds = %393
  %399 = load i32, ptr %33, align 4, !tbaa !17
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %33, align 4, !tbaa !17
  br label %389, !llvm.loop !25

401:                                              ; preds = %389
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  store i32 0, ptr %34, align 4, !tbaa !17
  br label %402

402:                                              ; preds = %416, %401
  %403 = load i32, ptr %34, align 4, !tbaa !17
  %404 = load i32, ptr %30, align 4, !tbaa !17
  %405 = icmp slt i32 %403, %404
  br i1 %405, label %406, label %419

406:                                              ; preds = %402
  %407 = load ptr, ptr %24, align 8, !tbaa !5
  %408 = load i32, ptr %34, align 4, !tbaa !17
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %407, i64 %409
  %411 = load i32, ptr %410, align 4, !tbaa !17
  %412 = load ptr, ptr %21, align 8, !tbaa !5
  %413 = load i32, ptr %34, align 4, !tbaa !17
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds i32, ptr %412, i64 %414
  store i32 %411, ptr %415, align 4, !tbaa !17
  br label %416

416:                                              ; preds = %406
  %417 = load i32, ptr %34, align 4, !tbaa !17
  %418 = add nsw i32 %417, 1
  store i32 %418, ptr %34, align 4, !tbaa !17
  br label %402, !llvm.loop !26

419:                                              ; preds = %402
  br label %420

420:                                              ; preds = %429, %419
  %421 = load i32, ptr %34, align 4, !tbaa !17
  %422 = load i32, ptr %27, align 4, !tbaa !17
  %423 = icmp slt i32 %421, %422
  br i1 %423, label %424, label %432

424:                                              ; preds = %420
  %425 = load ptr, ptr %21, align 8, !tbaa !5
  %426 = load i32, ptr %34, align 4, !tbaa !17
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds i32, ptr %425, i64 %427
  store i32 0, ptr %428, align 4, !tbaa !17
  br label %429

429:                                              ; preds = %424
  %430 = load i32, ptr %34, align 4, !tbaa !17
  %431 = add nsw i32 %430, 1
  store i32 %431, ptr %34, align 4, !tbaa !17
  br label %420, !llvm.loop !27

432:                                              ; preds = %420
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  %433 = load ptr, ptr %22, align 8, !tbaa !5
  store ptr %433, ptr %31, align 8, !tbaa !5
  %434 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %434, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  store i32 0, ptr %35, align 4, !tbaa !17
  br label %435

435:                                              ; preds = %444, %432
  %436 = load i32, ptr %35, align 4, !tbaa !17
  %437 = load i32, ptr %28, align 4, !tbaa !17
  %438 = icmp slt i32 %436, %437
  br i1 %438, label %439, label %447

439:                                              ; preds = %435
  %440 = load ptr, ptr %31, align 8, !tbaa !5
  %441 = load i32, ptr %35, align 4, !tbaa !17
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds i32, ptr %440, i64 %442
  store i32 0, ptr %443, align 4, !tbaa !17
  br label %444

444:                                              ; preds = %439
  %445 = load i32, ptr %35, align 4, !tbaa !17
  %446 = add nsw i32 %445, 1
  store i32 %446, ptr %35, align 4, !tbaa !17
  br label %435, !llvm.loop !28

447:                                              ; preds = %435
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  store i32 0, ptr %36, align 4, !tbaa !17
  br label %448

448:                                              ; preds = %457, %447
  %449 = load i32, ptr %36, align 4, !tbaa !17
  %450 = load i32, ptr %28, align 4, !tbaa !17
  %451 = icmp slt i32 %449, %450
  br i1 %451, label %452, label %460

452:                                              ; preds = %448
  %453 = load ptr, ptr %32, align 8, !tbaa !5
  %454 = load i32, ptr %36, align 4, !tbaa !17
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds i32, ptr %453, i64 %455
  store i32 0, ptr %456, align 4, !tbaa !17
  br label %457

457:                                              ; preds = %452
  %458 = load i32, ptr %36, align 4, !tbaa !17
  %459 = add nsw i32 %458, 1
  store i32 %459, ptr %36, align 4, !tbaa !17
  br label %448, !llvm.loop !29

460:                                              ; preds = %448
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  br label %461

461:                                              ; preds = %955, %460
  %462 = load i32, ptr %29, align 4, !tbaa !17
  %463 = icmp sgt i32 %462, 2
  br i1 %463, label %464, label %956

464:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  %465 = load ptr, ptr %20, align 8, !tbaa !5
  %466 = load i32, ptr %29, align 4, !tbaa !17
  %467 = sub nsw i32 %466, 1
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds i32, ptr %465, i64 %468
  %470 = load i32, ptr %469, align 4, !tbaa !17
  %471 = zext i32 %470 to i64
  store i64 %471, ptr %37, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  %472 = load i32, ptr %30, align 4, !tbaa !17
  %473 = load i32, ptr %29, align 4, !tbaa !17
  %474 = icmp slt i32 %472, %473
  br i1 %474, label %475, label %476

475:                                              ; preds = %464
  br label %484

476:                                              ; preds = %464
  %477 = load ptr, ptr %21, align 8, !tbaa !5
  %478 = load i32, ptr %30, align 4, !tbaa !17
  %479 = sub nsw i32 %478, 1
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds i32, ptr %477, i64 %480
  %482 = load i32, ptr %481, align 4, !tbaa !17
  %483 = zext i32 %482 to i64
  br label %484

484:                                              ; preds = %476, %475
  %485 = phi i64 [ 0, %475 ], [ %483, %476 ]
  store i64 %485, ptr %38, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  store i64 1, ptr %39, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  store i64 0, ptr %40, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  store i64 0, ptr %41, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #4
  store i64 1, ptr %42, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  br label %486

486:                                              ; preds = %541, %484
  %487 = load i64, ptr %38, align 8, !tbaa !15
  %488 = load i64, ptr %41, align 8, !tbaa !15
  %489 = add i64 %487, %488
  %490 = icmp ne i64 %489, 0
  br i1 %490, label %491, label %496

491:                                              ; preds = %486
  %492 = load i64, ptr %38, align 8, !tbaa !15
  %493 = load i64, ptr %42, align 8, !tbaa !15
  %494 = add i64 %492, %493
  %495 = icmp ne i64 %494, 0
  br label %496

496:                                              ; preds = %491, %486
  %497 = phi i1 [ false, %486 ], [ %495, %491 ]
  br i1 %497, label %498, label %542

498:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  %499 = load i64, ptr %37, align 8, !tbaa !15
  %500 = load i64, ptr %39, align 8, !tbaa !15
  %501 = add i64 %499, %500
  %502 = load i64, ptr %38, align 8, !tbaa !15
  %503 = load i64, ptr %41, align 8, !tbaa !15
  %504 = add i64 %502, %503
  %505 = udiv i64 %501, %504
  store i64 %505, ptr %44, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #4
  %506 = load i64, ptr %37, align 8, !tbaa !15
  %507 = load i64, ptr %40, align 8, !tbaa !15
  %508 = add i64 %506, %507
  %509 = load i64, ptr %38, align 8, !tbaa !15
  %510 = load i64, ptr %42, align 8, !tbaa !15
  %511 = add i64 %509, %510
  %512 = udiv i64 %508, %511
  store i64 %512, ptr %45, align 8, !tbaa !15
  %513 = load i64, ptr %44, align 8, !tbaa !15
  %514 = load i64, ptr %45, align 8, !tbaa !15
  %515 = icmp ne i64 %513, %514
  br i1 %515, label %516, label %517

516:                                              ; preds = %498
  store i32 32, ptr %13, align 4
  br label %539

517:                                              ; preds = %498
  %518 = load i64, ptr %39, align 8, !tbaa !15
  %519 = load i64, ptr %44, align 8, !tbaa !15
  %520 = load i64, ptr %41, align 8, !tbaa !15
  %521 = mul nsw i64 %519, %520
  %522 = sub nsw i64 %518, %521
  store i64 %522, ptr %43, align 8, !tbaa !15
  %523 = load i64, ptr %41, align 8, !tbaa !15
  store i64 %523, ptr %39, align 8, !tbaa !15
  %524 = load i64, ptr %43, align 8, !tbaa !15
  store i64 %524, ptr %41, align 8, !tbaa !15
  %525 = load i64, ptr %40, align 8, !tbaa !15
  %526 = load i64, ptr %44, align 8, !tbaa !15
  %527 = load i64, ptr %42, align 8, !tbaa !15
  %528 = mul nsw i64 %526, %527
  %529 = sub nsw i64 %525, %528
  store i64 %529, ptr %43, align 8, !tbaa !15
  %530 = load i64, ptr %42, align 8, !tbaa !15
  store i64 %530, ptr %40, align 8, !tbaa !15
  %531 = load i64, ptr %43, align 8, !tbaa !15
  store i64 %531, ptr %42, align 8, !tbaa !15
  %532 = load i64, ptr %37, align 8, !tbaa !15
  %533 = load i64, ptr %44, align 8, !tbaa !15
  %534 = load i64, ptr %38, align 8, !tbaa !15
  %535 = mul i64 %533, %534
  %536 = sub i64 %532, %535
  store i64 %536, ptr %43, align 8, !tbaa !15
  %537 = load i64, ptr %38, align 8, !tbaa !15
  store i64 %537, ptr %37, align 8, !tbaa !15
  %538 = load i64, ptr %43, align 8, !tbaa !15
  store i64 %538, ptr %38, align 8, !tbaa !15
  store i32 0, ptr %13, align 4
  br label %539

539:                                              ; preds = %517, %516
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  %540 = load i32, ptr %13, align 4
  switch i32 %540, label %976 [
    i32 0, label %541
    i32 32, label %542
  ]

541:                                              ; preds = %539
  br label %486, !llvm.loop !30

542:                                              ; preds = %539, %496
  %543 = load i64, ptr %40, align 8, !tbaa !15
  %544 = icmp eq i64 %543, 0
  br i1 %544, label %545, label %644

545:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  %546 = load ptr, ptr %20, align 8, !tbaa !5
  %547 = load i32, ptr %29, align 4, !tbaa !17
  %548 = load ptr, ptr %21, align 8, !tbaa !5
  %549 = load i32, ptr %30, align 4, !tbaa !17
  %550 = call i32 @cpDiv_BNU32(ptr noundef null, ptr noundef null, ptr noundef %546, i32 noundef %547, ptr noundef %548, i32 noundef %549)
  store i32 %550, ptr %46, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  store i32 0, ptr %47, align 4, !tbaa !17
  br label %551

551:                                              ; preds = %560, %545
  %552 = load i32, ptr %47, align 4, !tbaa !17
  %553 = load i32, ptr %28, align 4, !tbaa !17
  %554 = icmp slt i32 %552, %553
  br i1 %554, label %555, label %563

555:                                              ; preds = %551
  %556 = load ptr, ptr %31, align 8, !tbaa !5
  %557 = load i32, ptr %47, align 4, !tbaa !17
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds i32, ptr %556, i64 %558
  store i32 0, ptr %559, align 4, !tbaa !17
  br label %560

560:                                              ; preds = %555
  %561 = load i32, ptr %47, align 4, !tbaa !17
  %562 = add nsw i32 %561, 1
  store i32 %562, ptr %47, align 4, !tbaa !17
  br label %551, !llvm.loop !31

563:                                              ; preds = %551
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #4
  store i32 0, ptr %48, align 4, !tbaa !17
  br label %564

564:                                              ; preds = %578, %563
  %565 = load i32, ptr %48, align 4, !tbaa !17
  %566 = load i32, ptr %46, align 4, !tbaa !17
  %567 = icmp slt i32 %565, %566
  br i1 %567, label %568, label %581

568:                                              ; preds = %564
  %569 = load ptr, ptr %20, align 8, !tbaa !5
  %570 = load i32, ptr %48, align 4, !tbaa !17
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds i32, ptr %569, i64 %571
  %573 = load i32, ptr %572, align 4, !tbaa !17
  %574 = load ptr, ptr %31, align 8, !tbaa !5
  %575 = load i32, ptr %48, align 4, !tbaa !17
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds i32, ptr %574, i64 %576
  store i32 %573, ptr %577, align 4, !tbaa !17
  br label %578

578:                                              ; preds = %568
  %579 = load i32, ptr %48, align 4, !tbaa !17
  %580 = add nsw i32 %579, 1
  store i32 %580, ptr %48, align 4, !tbaa !17
  br label %564, !llvm.loop !32

581:                                              ; preds = %564
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #4
  store i32 0, ptr %49, align 4, !tbaa !17
  br label %582

582:                                              ; preds = %591, %581
  %583 = load i32, ptr %49, align 4, !tbaa !17
  %584 = load i32, ptr %26, align 4, !tbaa !17
  %585 = icmp slt i32 %583, %584
  br i1 %585, label %586, label %594

586:                                              ; preds = %582
  %587 = load ptr, ptr %20, align 8, !tbaa !5
  %588 = load i32, ptr %49, align 4, !tbaa !17
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds i32, ptr %587, i64 %589
  store i32 0, ptr %590, align 4, !tbaa !17
  br label %591

591:                                              ; preds = %586
  %592 = load i32, ptr %49, align 4, !tbaa !17
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %49, align 4, !tbaa !17
  br label %582, !llvm.loop !33

594:                                              ; preds = %582
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  store i32 0, ptr %50, align 4, !tbaa !17
  br label %595

595:                                              ; preds = %609, %594
  %596 = load i32, ptr %50, align 4, !tbaa !17
  %597 = load i32, ptr %30, align 4, !tbaa !17
  %598 = icmp slt i32 %596, %597
  br i1 %598, label %599, label %612

599:                                              ; preds = %595
  %600 = load ptr, ptr %21, align 8, !tbaa !5
  %601 = load i32, ptr %50, align 4, !tbaa !17
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds i32, ptr %600, i64 %602
  %604 = load i32, ptr %603, align 4, !tbaa !17
  %605 = load ptr, ptr %20, align 8, !tbaa !5
  %606 = load i32, ptr %50, align 4, !tbaa !17
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds i32, ptr %605, i64 %607
  store i32 %604, ptr %608, align 4, !tbaa !17
  br label %609

609:                                              ; preds = %599
  %610 = load i32, ptr %50, align 4, !tbaa !17
  %611 = add nsw i32 %610, 1
  store i32 %611, ptr %50, align 4, !tbaa !17
  br label %595, !llvm.loop !34

612:                                              ; preds = %595
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #4
  store i32 0, ptr %51, align 4, !tbaa !17
  br label %613

613:                                              ; preds = %622, %612
  %614 = load i32, ptr %51, align 4, !tbaa !17
  %615 = load i32, ptr %27, align 4, !tbaa !17
  %616 = icmp slt i32 %614, %615
  br i1 %616, label %617, label %625

617:                                              ; preds = %613
  %618 = load ptr, ptr %21, align 8, !tbaa !5
  %619 = load i32, ptr %51, align 4, !tbaa !17
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds i32, ptr %618, i64 %620
  store i32 0, ptr %621, align 4, !tbaa !17
  br label %622

622:                                              ; preds = %617
  %623 = load i32, ptr %51, align 4, !tbaa !17
  %624 = add nsw i32 %623, 1
  store i32 %624, ptr %51, align 4, !tbaa !17
  br label %613, !llvm.loop !35

625:                                              ; preds = %613
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #4
  store i32 0, ptr %52, align 4, !tbaa !17
  br label %626

626:                                              ; preds = %640, %625
  %627 = load i32, ptr %52, align 4, !tbaa !17
  %628 = load i32, ptr %30, align 4, !tbaa !17
  %629 = icmp slt i32 %627, %628
  br i1 %629, label %630, label %643

630:                                              ; preds = %626
  %631 = load ptr, ptr %31, align 8, !tbaa !5
  %632 = load i32, ptr %52, align 4, !tbaa !17
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds i32, ptr %631, i64 %633
  %635 = load i32, ptr %634, align 4, !tbaa !17
  %636 = load ptr, ptr %21, align 8, !tbaa !5
  %637 = load i32, ptr %52, align 4, !tbaa !17
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds i32, ptr %636, i64 %638
  store i32 %635, ptr %639, align 4, !tbaa !17
  br label %640

640:                                              ; preds = %630
  %641 = load i32, ptr %52, align 4, !tbaa !17
  %642 = add nsw i32 %641, 1
  store i32 %642, ptr %52, align 4, !tbaa !17
  br label %626, !llvm.loop !36

643:                                              ; preds = %626
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  br label %878

644:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  %645 = load i64, ptr %39, align 8, !tbaa !15
  %646 = icmp sle i64 %645, 0
  br i1 %646, label %647, label %670

647:                                              ; preds = %644
  %648 = load i64, ptr %40, align 8, !tbaa !15
  %649 = icmp sge i64 %648, 0
  br i1 %649, label %650, label %670

650:                                              ; preds = %647
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  %651 = load i64, ptr %39, align 8, !tbaa !15
  %652 = sub nsw i64 0, %651
  %653 = trunc i64 %652 to i32
  store i32 %653, ptr %54, align 4, !tbaa !17
  %654 = load ptr, ptr %31, align 8, !tbaa !5
  %655 = load ptr, ptr %21, align 8, !tbaa !5
  %656 = load i32, ptr %30, align 4, !tbaa !17
  %657 = load i64, ptr %40, align 8, !tbaa !15
  %658 = trunc i64 %657 to i32
  %659 = call i32 @cpMulDgt_BNU32(ptr noundef %654, ptr noundef %655, i32 noundef %656, i32 noundef %658)
  store i32 %659, ptr %53, align 4, !tbaa !17
  %660 = load ptr, ptr %32, align 8, !tbaa !5
  %661 = load ptr, ptr %20, align 8, !tbaa !5
  %662 = load i32, ptr %30, align 4, !tbaa !17
  %663 = load i32, ptr %54, align 4, !tbaa !17
  %664 = call i32 @cpMulDgt_BNU32(ptr noundef %660, ptr noundef %661, i32 noundef %662, i32 noundef %663)
  store i32 %664, ptr %53, align 4, !tbaa !17
  %665 = load ptr, ptr %31, align 8, !tbaa !5
  %666 = load ptr, ptr %31, align 8, !tbaa !5
  %667 = load ptr, ptr %32, align 8, !tbaa !5
  %668 = load i32, ptr %30, align 4, !tbaa !17
  %669 = call i32 @cpSub_BNU32(ptr noundef %665, ptr noundef %666, ptr noundef %667, i32 noundef %668)
  store i32 %669, ptr %53, align 4, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  br label %715

670:                                              ; preds = %647, %644
  %671 = load i64, ptr %39, align 8, !tbaa !15
  %672 = icmp sge i64 %671, 0
  br i1 %672, label %673, label %696

673:                                              ; preds = %670
  %674 = load i64, ptr %40, align 8, !tbaa !15
  %675 = icmp sle i64 %674, 0
  br i1 %675, label %676, label %696

676:                                              ; preds = %673
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  %677 = load i64, ptr %40, align 8, !tbaa !15
  %678 = sub nsw i64 0, %677
  %679 = trunc i64 %678 to i32
  store i32 %679, ptr %55, align 4, !tbaa !17
  %680 = load ptr, ptr %31, align 8, !tbaa !5
  %681 = load ptr, ptr %20, align 8, !tbaa !5
  %682 = load i32, ptr %30, align 4, !tbaa !17
  %683 = load i64, ptr %39, align 8, !tbaa !15
  %684 = trunc i64 %683 to i32
  %685 = call i32 @cpMulDgt_BNU32(ptr noundef %680, ptr noundef %681, i32 noundef %682, i32 noundef %684)
  store i32 %685, ptr %53, align 4, !tbaa !17
  %686 = load ptr, ptr %32, align 8, !tbaa !5
  %687 = load ptr, ptr %21, align 8, !tbaa !5
  %688 = load i32, ptr %30, align 4, !tbaa !17
  %689 = load i32, ptr %55, align 4, !tbaa !17
  %690 = call i32 @cpMulDgt_BNU32(ptr noundef %686, ptr noundef %687, i32 noundef %688, i32 noundef %689)
  store i32 %690, ptr %53, align 4, !tbaa !17
  %691 = load ptr, ptr %31, align 8, !tbaa !5
  %692 = load ptr, ptr %31, align 8, !tbaa !5
  %693 = load ptr, ptr %32, align 8, !tbaa !5
  %694 = load i32, ptr %30, align 4, !tbaa !17
  %695 = call i32 @cpSub_BNU32(ptr noundef %691, ptr noundef %692, ptr noundef %693, i32 noundef %694)
  store i32 %695, ptr %53, align 4, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  br label %714

696:                                              ; preds = %673, %670
  %697 = load ptr, ptr %31, align 8, !tbaa !5
  %698 = load ptr, ptr %20, align 8, !tbaa !5
  %699 = load i32, ptr %30, align 4, !tbaa !17
  %700 = load i64, ptr %39, align 8, !tbaa !15
  %701 = trunc i64 %700 to i32
  %702 = call i32 @cpMulDgt_BNU32(ptr noundef %697, ptr noundef %698, i32 noundef %699, i32 noundef %701)
  store i32 %702, ptr %53, align 4, !tbaa !17
  %703 = load ptr, ptr %32, align 8, !tbaa !5
  %704 = load ptr, ptr %21, align 8, !tbaa !5
  %705 = load i32, ptr %30, align 4, !tbaa !17
  %706 = load i64, ptr %40, align 8, !tbaa !15
  %707 = trunc i64 %706 to i32
  %708 = call i32 @cpMulDgt_BNU32(ptr noundef %703, ptr noundef %704, i32 noundef %705, i32 noundef %707)
  store i32 %708, ptr %53, align 4, !tbaa !17
  %709 = load ptr, ptr %31, align 8, !tbaa !5
  %710 = load ptr, ptr %31, align 8, !tbaa !5
  %711 = load ptr, ptr %32, align 8, !tbaa !5
  %712 = load i32, ptr %30, align 4, !tbaa !17
  %713 = call i32 @cpAdd_BNU32(ptr noundef %709, ptr noundef %710, ptr noundef %711, i32 noundef %712)
  store i32 %713, ptr %53, align 4, !tbaa !17
  br label %714

714:                                              ; preds = %696, %676
  br label %715

715:                                              ; preds = %714, %650
  %716 = load i64, ptr %41, align 8, !tbaa !15
  %717 = icmp sle i64 %716, 0
  br i1 %717, label %718, label %759

718:                                              ; preds = %715
  %719 = load i64, ptr %42, align 8, !tbaa !15
  %720 = icmp sge i64 %719, 0
  br i1 %720, label %721, label %759

721:                                              ; preds = %718
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #4
  %722 = load i64, ptr %41, align 8, !tbaa !15
  %723 = sub nsw i64 0, %722
  %724 = trunc i64 %723 to i32
  store i32 %724, ptr %56, align 4, !tbaa !17
  %725 = load ptr, ptr %32, align 8, !tbaa !5
  %726 = load ptr, ptr %20, align 8, !tbaa !5
  %727 = load i32, ptr %30, align 4, !tbaa !17
  %728 = load i32, ptr %56, align 4, !tbaa !17
  %729 = call i32 @cpMulDgt_BNU32(ptr noundef %725, ptr noundef %726, i32 noundef %727, i32 noundef %728)
  store i32 %729, ptr %53, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #4
  store i32 0, ptr %57, align 4, !tbaa !17
  br label %730

730:                                              ; preds = %744, %721
  %731 = load i32, ptr %57, align 4, !tbaa !17
  %732 = load i32, ptr %30, align 4, !tbaa !17
  %733 = icmp slt i32 %731, %732
  br i1 %733, label %734, label %747

734:                                              ; preds = %730
  %735 = load ptr, ptr %32, align 8, !tbaa !5
  %736 = load i32, ptr %57, align 4, !tbaa !17
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds i32, ptr %735, i64 %737
  %739 = load i32, ptr %738, align 4, !tbaa !17
  %740 = load ptr, ptr %20, align 8, !tbaa !5
  %741 = load i32, ptr %57, align 4, !tbaa !17
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds i32, ptr %740, i64 %742
  store i32 %739, ptr %743, align 4, !tbaa !17
  br label %744

744:                                              ; preds = %734
  %745 = load i32, ptr %57, align 4, !tbaa !17
  %746 = add nsw i32 %745, 1
  store i32 %746, ptr %57, align 4, !tbaa !17
  br label %730, !llvm.loop !37

747:                                              ; preds = %730
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  %748 = load ptr, ptr %32, align 8, !tbaa !5
  %749 = load ptr, ptr %21, align 8, !tbaa !5
  %750 = load i32, ptr %30, align 4, !tbaa !17
  %751 = load i64, ptr %42, align 8, !tbaa !15
  %752 = trunc i64 %751 to i32
  %753 = call i32 @cpMulDgt_BNU32(ptr noundef %748, ptr noundef %749, i32 noundef %750, i32 noundef %752)
  store i32 %753, ptr %53, align 4, !tbaa !17
  %754 = load ptr, ptr %32, align 8, !tbaa !5
  %755 = load ptr, ptr %32, align 8, !tbaa !5
  %756 = load ptr, ptr %20, align 8, !tbaa !5
  %757 = load i32, ptr %30, align 4, !tbaa !17
  %758 = call i32 @cpSub_BNU32(ptr noundef %754, ptr noundef %755, ptr noundef %756, i32 noundef %757)
  store i32 %758, ptr %53, align 4, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  br label %840

759:                                              ; preds = %718, %715
  %760 = load i64, ptr %41, align 8, !tbaa !15
  %761 = icmp sge i64 %760, 0
  br i1 %761, label %762, label %803

762:                                              ; preds = %759
  %763 = load i64, ptr %42, align 8, !tbaa !15
  %764 = icmp sle i64 %763, 0
  br i1 %764, label %765, label %803

765:                                              ; preds = %762
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  %766 = load i64, ptr %42, align 8, !tbaa !15
  %767 = sub nsw i64 0, %766
  %768 = trunc i64 %767 to i32
  store i32 %768, ptr %58, align 4, !tbaa !17
  %769 = load ptr, ptr %32, align 8, !tbaa !5
  %770 = load ptr, ptr %21, align 8, !tbaa !5
  %771 = load i32, ptr %30, align 4, !tbaa !17
  %772 = load i32, ptr %58, align 4, !tbaa !17
  %773 = call i32 @cpMulDgt_BNU32(ptr noundef %769, ptr noundef %770, i32 noundef %771, i32 noundef %772)
  store i32 %773, ptr %53, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #4
  store i32 0, ptr %59, align 4, !tbaa !17
  br label %774

774:                                              ; preds = %788, %765
  %775 = load i32, ptr %59, align 4, !tbaa !17
  %776 = load i32, ptr %30, align 4, !tbaa !17
  %777 = icmp slt i32 %775, %776
  br i1 %777, label %778, label %791

778:                                              ; preds = %774
  %779 = load ptr, ptr %32, align 8, !tbaa !5
  %780 = load i32, ptr %59, align 4, !tbaa !17
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds i32, ptr %779, i64 %781
  %783 = load i32, ptr %782, align 4, !tbaa !17
  %784 = load ptr, ptr %21, align 8, !tbaa !5
  %785 = load i32, ptr %59, align 4, !tbaa !17
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds i32, ptr %784, i64 %786
  store i32 %783, ptr %787, align 4, !tbaa !17
  br label %788

788:                                              ; preds = %778
  %789 = load i32, ptr %59, align 4, !tbaa !17
  %790 = add nsw i32 %789, 1
  store i32 %790, ptr %59, align 4, !tbaa !17
  br label %774, !llvm.loop !38

791:                                              ; preds = %774
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #4
  %792 = load ptr, ptr %32, align 8, !tbaa !5
  %793 = load ptr, ptr %20, align 8, !tbaa !5
  %794 = load i32, ptr %30, align 4, !tbaa !17
  %795 = load i64, ptr %41, align 8, !tbaa !15
  %796 = trunc i64 %795 to i32
  %797 = call i32 @cpMulDgt_BNU32(ptr noundef %792, ptr noundef %793, i32 noundef %794, i32 noundef %796)
  store i32 %797, ptr %53, align 4, !tbaa !17
  %798 = load ptr, ptr %32, align 8, !tbaa !5
  %799 = load ptr, ptr %32, align 8, !tbaa !5
  %800 = load ptr, ptr %21, align 8, !tbaa !5
  %801 = load i32, ptr %30, align 4, !tbaa !17
  %802 = call i32 @cpSub_BNU32(ptr noundef %798, ptr noundef %799, ptr noundef %800, i32 noundef %801)
  store i32 %802, ptr %53, align 4, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  br label %839

803:                                              ; preds = %762, %759
  %804 = load ptr, ptr %32, align 8, !tbaa !5
  %805 = load ptr, ptr %21, align 8, !tbaa !5
  %806 = load i32, ptr %30, align 4, !tbaa !17
  %807 = load i64, ptr %42, align 8, !tbaa !15
  %808 = trunc i64 %807 to i32
  %809 = call i32 @cpMulDgt_BNU32(ptr noundef %804, ptr noundef %805, i32 noundef %806, i32 noundef %808)
  store i32 %809, ptr %53, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #4
  store i32 0, ptr %60, align 4, !tbaa !17
  br label %810

810:                                              ; preds = %824, %803
  %811 = load i32, ptr %60, align 4, !tbaa !17
  %812 = load i32, ptr %30, align 4, !tbaa !17
  %813 = icmp slt i32 %811, %812
  br i1 %813, label %814, label %827

814:                                              ; preds = %810
  %815 = load ptr, ptr %32, align 8, !tbaa !5
  %816 = load i32, ptr %60, align 4, !tbaa !17
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds i32, ptr %815, i64 %817
  %819 = load i32, ptr %818, align 4, !tbaa !17
  %820 = load ptr, ptr %21, align 8, !tbaa !5
  %821 = load i32, ptr %60, align 4, !tbaa !17
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds i32, ptr %820, i64 %822
  store i32 %819, ptr %823, align 4, !tbaa !17
  br label %824

824:                                              ; preds = %814
  %825 = load i32, ptr %60, align 4, !tbaa !17
  %826 = add nsw i32 %825, 1
  store i32 %826, ptr %60, align 4, !tbaa !17
  br label %810, !llvm.loop !39

827:                                              ; preds = %810
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #4
  %828 = load ptr, ptr %32, align 8, !tbaa !5
  %829 = load ptr, ptr %20, align 8, !tbaa !5
  %830 = load i32, ptr %30, align 4, !tbaa !17
  %831 = load i64, ptr %41, align 8, !tbaa !15
  %832 = trunc i64 %831 to i32
  %833 = call i32 @cpMulDgt_BNU32(ptr noundef %828, ptr noundef %829, i32 noundef %830, i32 noundef %832)
  store i32 %833, ptr %53, align 4, !tbaa !17
  %834 = load ptr, ptr %32, align 8, !tbaa !5
  %835 = load ptr, ptr %32, align 8, !tbaa !5
  %836 = load ptr, ptr %21, align 8, !tbaa !5
  %837 = load i32, ptr %30, align 4, !tbaa !17
  %838 = call i32 @cpAdd_BNU32(ptr noundef %834, ptr noundef %835, ptr noundef %836, i32 noundef %837)
  store i32 %838, ptr %53, align 4, !tbaa !17
  br label %839

839:                                              ; preds = %827, %791
  br label %840

840:                                              ; preds = %839, %747
  %841 = load i32, ptr %53, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #4
  store i32 0, ptr %61, align 4, !tbaa !17
  br label %842

842:                                              ; preds = %856, %840
  %843 = load i32, ptr %61, align 4, !tbaa !17
  %844 = load i32, ptr %30, align 4, !tbaa !17
  %845 = icmp slt i32 %843, %844
  br i1 %845, label %846, label %859

846:                                              ; preds = %842
  %847 = load ptr, ptr %32, align 8, !tbaa !5
  %848 = load i32, ptr %61, align 4, !tbaa !17
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds i32, ptr %847, i64 %849
  %851 = load i32, ptr %850, align 4, !tbaa !17
  %852 = load ptr, ptr %21, align 8, !tbaa !5
  %853 = load i32, ptr %61, align 4, !tbaa !17
  %854 = sext i32 %853 to i64
  %855 = getelementptr inbounds i32, ptr %852, i64 %854
  store i32 %851, ptr %855, align 4, !tbaa !17
  br label %856

856:                                              ; preds = %846
  %857 = load i32, ptr %61, align 4, !tbaa !17
  %858 = add nsw i32 %857, 1
  store i32 %858, ptr %61, align 4, !tbaa !17
  br label %842, !llvm.loop !40

859:                                              ; preds = %842
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #4
  store i32 0, ptr %62, align 4, !tbaa !17
  br label %860

860:                                              ; preds = %874, %859
  %861 = load i32, ptr %62, align 4, !tbaa !17
  %862 = load i32, ptr %30, align 4, !tbaa !17
  %863 = icmp slt i32 %861, %862
  br i1 %863, label %864, label %877

864:                                              ; preds = %860
  %865 = load ptr, ptr %31, align 8, !tbaa !5
  %866 = load i32, ptr %62, align 4, !tbaa !17
  %867 = sext i32 %866 to i64
  %868 = getelementptr inbounds i32, ptr %865, i64 %867
  %869 = load i32, ptr %868, align 4, !tbaa !17
  %870 = load ptr, ptr %20, align 8, !tbaa !5
  %871 = load i32, ptr %62, align 4, !tbaa !17
  %872 = sext i32 %871 to i64
  %873 = getelementptr inbounds i32, ptr %870, i64 %872
  store i32 %869, ptr %873, align 4, !tbaa !17
  br label %874

874:                                              ; preds = %864
  %875 = load i32, ptr %62, align 4, !tbaa !17
  %876 = add nsw i32 %875, 1
  store i32 %876, ptr %62, align 4, !tbaa !17
  br label %860, !llvm.loop !41

877:                                              ; preds = %860
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  br label %878

878:                                              ; preds = %877, %643
  %879 = load ptr, ptr %20, align 8, !tbaa !5
  %880 = load i32, ptr %29, align 4, !tbaa !17
  %881 = call i32 @cpFix_BNU32(ptr noundef %879, i32 noundef %880)
  store i32 %881, ptr %29, align 4, !tbaa !17
  %882 = load ptr, ptr %21, align 8, !tbaa !5
  %883 = load i32, ptr %30, align 4, !tbaa !17
  %884 = call i32 @cpFix_BNU32(ptr noundef %882, i32 noundef %883)
  store i32 %884, ptr %30, align 4, !tbaa !17
  %885 = load i32, ptr %30, align 4, !tbaa !17
  %886 = load i32, ptr %29, align 4, !tbaa !17
  %887 = icmp sgt i32 %885, %886
  br i1 %887, label %888, label %901

888:                                              ; preds = %878
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #4
  %889 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %889, ptr %63, align 8, !tbaa !5
  %890 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %890, ptr %8, align 8, !tbaa !5
  %891 = load ptr, ptr %63, align 8, !tbaa !5
  store ptr %891, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  %892 = load i32, ptr %30, align 4, !tbaa !17
  %893 = load i32, ptr %29, align 4, !tbaa !17
  %894 = xor i32 %893, %892
  store i32 %894, ptr %29, align 4, !tbaa !17
  %895 = load i32, ptr %29, align 4, !tbaa !17
  %896 = load i32, ptr %30, align 4, !tbaa !17
  %897 = xor i32 %896, %895
  store i32 %897, ptr %30, align 4, !tbaa !17
  %898 = load i32, ptr %30, align 4, !tbaa !17
  %899 = load i32, ptr %29, align 4, !tbaa !17
  %900 = xor i32 %899, %898
  store i32 %900, ptr %29, align 4, !tbaa !17
  br label %901

901:                                              ; preds = %888, %878
  %902 = load i32, ptr %30, align 4, !tbaa !17
  %903 = icmp eq i32 %902, 1
  br i1 %903, label %904, label %952

904:                                              ; preds = %901
  %905 = load ptr, ptr %21, align 8, !tbaa !5
  %906 = load i32, ptr %30, align 4, !tbaa !17
  %907 = sub nsw i32 %906, 1
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds i32, ptr %905, i64 %908
  %910 = load i32, ptr %909, align 4, !tbaa !17
  %911 = icmp eq i32 %910, 0
  br i1 %911, label %912, label %952

912:                                              ; preds = %904
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #4
  store i32 0, ptr %64, align 4, !tbaa !17
  br label %913

913:                                              ; preds = %922, %912
  %914 = load i32, ptr %64, align 4, !tbaa !17
  %915 = load i32, ptr %28, align 4, !tbaa !17
  %916 = icmp slt i32 %914, %915
  br i1 %916, label %917, label %925

917:                                              ; preds = %913
  %918 = load ptr, ptr %25, align 8, !tbaa !5
  %919 = load i32, ptr %64, align 4, !tbaa !17
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds i32, ptr %918, i64 %920
  store i32 0, ptr %921, align 4, !tbaa !17
  br label %922

922:                                              ; preds = %917
  %923 = load i32, ptr %64, align 4, !tbaa !17
  %924 = add nsw i32 %923, 1
  store i32 %924, ptr %64, align 4, !tbaa !17
  br label %913, !llvm.loop !42

925:                                              ; preds = %913
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #4
  store i32 0, ptr %65, align 4, !tbaa !17
  br label %926

926:                                              ; preds = %940, %925
  %927 = load i32, ptr %65, align 4, !tbaa !17
  %928 = load i32, ptr %29, align 4, !tbaa !17
  %929 = icmp slt i32 %927, %928
  br i1 %929, label %930, label %943

930:                                              ; preds = %926
  %931 = load ptr, ptr %20, align 8, !tbaa !5
  %932 = load i32, ptr %65, align 4, !tbaa !17
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds i32, ptr %931, i64 %933
  %935 = load i32, ptr %934, align 4, !tbaa !17
  %936 = load ptr, ptr %25, align 8, !tbaa !5
  %937 = load i32, ptr %65, align 4, !tbaa !17
  %938 = sext i32 %937 to i64
  %939 = getelementptr inbounds i32, ptr %936, i64 %938
  store i32 %935, ptr %939, align 4, !tbaa !17
  br label %940

940:                                              ; preds = %930
  %941 = load i32, ptr %65, align 4, !tbaa !17
  %942 = add nsw i32 %941, 1
  store i32 %942, ptr %65, align 4, !tbaa !17
  br label %926, !llvm.loop !43

943:                                              ; preds = %926
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  %944 = load i32, ptr %29, align 4, !tbaa !17
  %945 = add nsw i32 %944, 2
  %946 = sub nsw i32 %945, 1
  %947 = sdiv i32 %946, 2
  %948 = load ptr, ptr %10, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct._cpBigNum, ptr %948, i32 0, i32 2
  store i32 %947, ptr %949, align 8, !tbaa !13
  %950 = load ptr, ptr %10, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct._cpBigNum, ptr %950, i32 0, i32 1
  store i32 1, ptr %951, align 4, !tbaa !20
  store i32 0, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %953

952:                                              ; preds = %904, %901
  store i32 0, ptr %13, align 4
  br label %953

953:                                              ; preds = %952, %943
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  %954 = load i32, ptr %13, align 4
  switch i32 %954, label %972 [
    i32 0, label %955
  ]

955:                                              ; preds = %953
  br label %461, !llvm.loop !44

956:                                              ; preds = %461
  %957 = load ptr, ptr %20, align 8, !tbaa !5
  %958 = getelementptr inbounds i64, ptr %957, i64 0
  %959 = load i64, ptr %958, align 8, !tbaa !15
  %960 = load ptr, ptr %21, align 8, !tbaa !5
  %961 = getelementptr inbounds i64, ptr %960, i64 0
  %962 = load i64, ptr %961, align 8, !tbaa !15
  %963 = call i64 @cpGcd_BNU(i64 noundef %959, i64 noundef %962)
  %964 = load ptr, ptr %10, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct._cpBigNum, ptr %964, i32 0, i32 4
  %966 = load ptr, ptr %965, align 8, !tbaa !14
  %967 = getelementptr inbounds i64, ptr %966, i64 0
  store i64 %963, ptr %967, align 8, !tbaa !15
  %968 = load ptr, ptr %10, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct._cpBigNum, ptr %968, i32 0, i32 2
  store i32 1, ptr %969, align 8, !tbaa !13
  %970 = load ptr, ptr %10, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct._cpBigNum, ptr %970, i32 0, i32 1
  store i32 1, ptr %971, align 4, !tbaa !20
  store i32 0, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %972

972:                                              ; preds = %956, %953
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  br label %973

973:                                              ; preds = %972, %324, %236, %198, %167
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  br label %974

974:                                              ; preds = %973, %129, %106, %96, %86, %76, %72, %68
  %975 = load i32, ptr %4, align 4
  ret i32 %975

976:                                              ; preds = %539
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @IPP_UINT_PTR(ptr noundef) #1

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

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

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

declare i64 @cpGcd_BNU(i64 noundef, i64 noundef) #3

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_cpBigNum", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !6, i64 16, !6, i64 24}
!11 = !{!"int", !7, i64 0}
!12 = !{!10, !11, i64 12}
!13 = !{!10, !11, i64 8}
!14 = !{!10, !6, i64 16}
!15 = !{!16, !16, i64 0}
!16 = !{!"long long", !7, i64 0}
!17 = !{!11, !11, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!10, !11, i64 4}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = !{!10, !6, i64 24}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19}
!30 = distinct !{!30, !19}
!31 = distinct !{!31, !19}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !19}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = distinct !{!39, !19}
!40 = distinct !{!40, !19}
!41 = distinct !{!41, !19}
!42 = distinct !{!42, !19}
!43 = distinct !{!43, !19}
!44 = distinct !{!44, !19}


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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -13, 1) i32 @ippsGcd_BN(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = icmp eq ptr %0, null
  %5 = icmp eq ptr %1, null
  %or.cond447 = or i1 %4, %5
  %6 = icmp eq ptr %2, null
  %or.cond448 = or i1 %or.cond447, %6
  br i1 %or.cond448, label %.critedge, label %7

7:                                                ; preds = %3
  %8 = load i32, ptr %0, align 8, !tbaa !5
  %9 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %0)
  %10 = trunc i64 %9 to i32
  %11 = xor i32 %8, %10
  %12 = icmp eq i32 %11, 1112098638
  br i1 %12, label %13, label %.critedge

13:                                               ; preds = %7
  %14 = load i32, ptr %1, align 8, !tbaa !5
  %15 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %1)
  %16 = trunc i64 %15 to i32
  %17 = xor i32 %14, %16
  %18 = icmp eq i32 %17, 1112098638
  br i1 %18, label %19, label %.critedge

19:                                               ; preds = %13
  %20 = load i32, ptr %2, align 8, !tbaa !5
  %21 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %2)
  %22 = trunc i64 %21 to i32
  %23 = xor i32 %20, %22
  %24 = icmp eq i32 %23, 1112098638
  br i1 %24, label %25, label %.critedge

25:                                               ; preds = %19
  %26 = getelementptr inbounds i8, ptr %2, i64 12
  %27 = load i32, ptr %26, align 4, !tbaa !11
  %28 = getelementptr inbounds i8, ptr %0, i64 8
  %29 = load i32, ptr %28, align 8, !tbaa !12
  %30 = getelementptr inbounds i8, ptr %1, i64 8
  %31 = load i32, ptr %30, align 8, !tbaa !12
  %. = tail call i32 @llvm.smin.i32(i32 %29, i32 %31)
  %32 = icmp slt i32 %27, %.
  br i1 %32, label %.critedge, label %33

33:                                               ; preds = %25
  %34 = icmp eq i32 %29, 1
  br i1 %34, label %35, label %40

35:                                               ; preds = %33
  %36 = getelementptr inbounds i8, ptr %0, i64 16
  %37 = load ptr, ptr %36, align 8, !tbaa !13
  %38 = load i64, ptr %37, align 8, !tbaa !14
  %39 = icmp eq i64 %38, 0
  br label %40

40:                                               ; preds = %35, %33
  %41 = phi i1 [ false, %33 ], [ %39, %35 ]
  %42 = icmp eq i32 %31, 1
  br i1 %42, label %43, label %.thread

43:                                               ; preds = %40
  %44 = getelementptr inbounds i8, ptr %1, i64 16
  %45 = load ptr, ptr %44, align 8, !tbaa !13
  %46 = load i64, ptr %45, align 8, !tbaa !14
  %47 = icmp eq i64 %46, 0
  %or.cond = select i1 %41, i1 %47, i1 false
  br i1 %or.cond, label %.critedge, label %.thread.thread

.thread:                                          ; preds = %40
  br i1 %41, label %.preheader475, label %.thread659

.thread.thread:                                   ; preds = %43
  %48 = xor i1 %41, true
  %or.cond4658 = select i1 %48, i1 true, i1 %47
  br i1 %or.cond4658, label %81, label %.lr.ph

.preheader475:                                    ; preds = %.thread
  %49 = icmp sgt i32 %31, 0
  br i1 %49, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.thread.thread, %.preheader475
  %50 = getelementptr inbounds i8, ptr %1, i64 16
  %51 = load ptr, ptr %50, align 8, !tbaa !13
  %52 = getelementptr inbounds i8, ptr %2, i64 16
  %53 = load ptr, ptr %52, align 8, !tbaa !13
  %wide.trip.count = zext i32 %31 to i64
  %min.iters.check = icmp ult i32 %31, 6
  %54 = ptrtoint ptr %53 to i64
  %55 = ptrtoint ptr %51 to i64
  %56 = sub i64 %54, %55
  %diff.check = icmp ult i64 %56, 32
  %or.cond871 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond871, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph
  %n.vec = and i64 %wide.trip.count, 2147483644
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %57 = getelementptr inbounds i64, ptr %51, i64 %index
  %58 = getelementptr inbounds i8, ptr %57, i64 16
  %wide.load = load <2 x i64>, ptr %57, align 8, !tbaa !14
  %wide.load673 = load <2 x i64>, ptr %58, align 8, !tbaa !14
  %59 = getelementptr inbounds i64, ptr %53, i64 %index
  %60 = getelementptr inbounds i8, ptr %59, i64 16
  store <2 x i64> %wide.load, ptr %59, align 8, !tbaa !14
  store <2 x i64> %wide.load673, ptr %60, align 8, !tbaa !14
  %index.next = add nuw i64 %index, 4
  %61 = icmp eq i64 %index.next, %n.vec
  br i1 %61, label %middle.block, label %vector.body, !llvm.loop !16

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec, %middle.block ]
  %xtraiter = and i64 %wide.trip.count, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %scalar.ph.prol ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %62 = getelementptr inbounds i64, ptr %51, i64 %indvars.iv.prol
  %63 = load i64, ptr %62, align 8, !tbaa !14
  %64 = getelementptr inbounds i64, ptr %53, i64 %indvars.iv.prol
  store i64 %63, ptr %64, align 8, !tbaa !14
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !20

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %65 = sub nsw i64 %indvars.iv.ph, %wide.trip.count
  %66 = icmp ugt i64 %65, -4
  br i1 %66, label %._crit_edge, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %67 = getelementptr inbounds i64, ptr %51, i64 %indvars.iv
  %68 = load i64, ptr %67, align 8, !tbaa !14
  %69 = getelementptr inbounds i64, ptr %53, i64 %indvars.iv
  store i64 %68, ptr %69, align 8, !tbaa !14
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %70 = getelementptr inbounds i64, ptr %51, i64 %indvars.iv.next
  %71 = load i64, ptr %70, align 8, !tbaa !14
  %72 = getelementptr inbounds i64, ptr %53, i64 %indvars.iv.next
  store i64 %71, ptr %72, align 8, !tbaa !14
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %73 = getelementptr inbounds i64, ptr %51, i64 %indvars.iv.next.1
  %74 = load i64, ptr %73, align 8, !tbaa !14
  %75 = getelementptr inbounds i64, ptr %53, i64 %indvars.iv.next.1
  store i64 %74, ptr %75, align 8, !tbaa !14
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %76 = getelementptr inbounds i64, ptr %51, i64 %indvars.iv.next.2
  %77 = load i64, ptr %76, align 8, !tbaa !14
  %78 = getelementptr inbounds i64, ptr %53, i64 %indvars.iv.next.2
  store i64 %77, ptr %78, align 8, !tbaa !14
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %._crit_edge, label %scalar.ph, !llvm.loop !22

._crit_edge:                                      ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %.preheader475
  %79 = getelementptr inbounds i8, ptr %2, i64 8
  store i32 %31, ptr %79, align 8, !tbaa !12
  %80 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 1, ptr %80, align 4, !tbaa !23
  br label %.critedge

81:                                               ; preds = %.thread.thread
  %82 = xor i1 %47, true
  %or.cond6 = select i1 %82, i1 true, i1 %41
  br i1 %or.cond6, label %.thread659, label %.preheader474

.preheader474:                                    ; preds = %81
  %83 = icmp sgt i32 %29, 0
  br i1 %83, label %.lr.ph478, label %._crit_edge479

.lr.ph478:                                        ; preds = %.preheader474
  %84 = getelementptr inbounds i8, ptr %0, i64 16
  %85 = load ptr, ptr %84, align 8, !tbaa !13
  %86 = getelementptr inbounds i8, ptr %2, i64 16
  %87 = load ptr, ptr %86, align 8, !tbaa !13
  %wide.trip.count566 = zext nneg i32 %29 to i64
  %min.iters.check678 = icmp ult i32 %29, 6
  %88 = ptrtoint ptr %87 to i64
  %89 = ptrtoint ptr %85 to i64
  %90 = sub i64 %88, %89
  %diff.check675 = icmp ult i64 %90, 32
  %or.cond874 = select i1 %min.iters.check678, i1 true, i1 %diff.check675
  br i1 %or.cond874, label %scalar.ph677.preheader, label %vector.ph679

vector.ph679:                                     ; preds = %.lr.ph478
  %n.vec681 = and i64 %wide.trip.count566, 2147483644
  br label %vector.body683

vector.body683:                                   ; preds = %vector.body683, %vector.ph679
  %index684 = phi i64 [ 0, %vector.ph679 ], [ %index.next687, %vector.body683 ]
  %91 = getelementptr inbounds i64, ptr %85, i64 %index684
  %92 = getelementptr inbounds i8, ptr %91, i64 16
  %wide.load685 = load <2 x i64>, ptr %91, align 8, !tbaa !14
  %wide.load686 = load <2 x i64>, ptr %92, align 8, !tbaa !14
  %93 = getelementptr inbounds i64, ptr %87, i64 %index684
  %94 = getelementptr inbounds i8, ptr %93, i64 16
  store <2 x i64> %wide.load685, ptr %93, align 8, !tbaa !14
  store <2 x i64> %wide.load686, ptr %94, align 8, !tbaa !14
  %index.next687 = add nuw i64 %index684, 4
  %95 = icmp eq i64 %index.next687, %n.vec681
  br i1 %95, label %middle.block676, label %vector.body683, !llvm.loop !24

middle.block676:                                  ; preds = %vector.body683
  %cmp.n688 = icmp eq i64 %n.vec681, %wide.trip.count566
  br i1 %cmp.n688, label %._crit_edge479, label %scalar.ph677.preheader

scalar.ph677.preheader:                           ; preds = %middle.block676, %.lr.ph478
  %indvars.iv563.ph = phi i64 [ 0, %.lr.ph478 ], [ %n.vec681, %middle.block676 ]
  %xtraiter902 = and i64 %wide.trip.count566, 3
  %lcmp.mod903.not = icmp eq i64 %xtraiter902, 0
  br i1 %lcmp.mod903.not, label %scalar.ph677.prol.loopexit, label %scalar.ph677.prol

scalar.ph677.prol:                                ; preds = %scalar.ph677.preheader, %scalar.ph677.prol
  %indvars.iv563.prol = phi i64 [ %indvars.iv.next564.prol, %scalar.ph677.prol ], [ %indvars.iv563.ph, %scalar.ph677.preheader ]
  %prol.iter904 = phi i64 [ %prol.iter904.next, %scalar.ph677.prol ], [ 0, %scalar.ph677.preheader ]
  %96 = getelementptr inbounds i64, ptr %85, i64 %indvars.iv563.prol
  %97 = load i64, ptr %96, align 8, !tbaa !14
  %98 = getelementptr inbounds i64, ptr %87, i64 %indvars.iv563.prol
  store i64 %97, ptr %98, align 8, !tbaa !14
  %indvars.iv.next564.prol = add nuw nsw i64 %indvars.iv563.prol, 1
  %prol.iter904.next = add i64 %prol.iter904, 1
  %prol.iter904.cmp.not = icmp eq i64 %prol.iter904.next, %xtraiter902
  br i1 %prol.iter904.cmp.not, label %scalar.ph677.prol.loopexit, label %scalar.ph677.prol, !llvm.loop !25

scalar.ph677.prol.loopexit:                       ; preds = %scalar.ph677.prol, %scalar.ph677.preheader
  %indvars.iv563.unr = phi i64 [ %indvars.iv563.ph, %scalar.ph677.preheader ], [ %indvars.iv.next564.prol, %scalar.ph677.prol ]
  %99 = sub nsw i64 %indvars.iv563.ph, %wide.trip.count566
  %100 = icmp ugt i64 %99, -4
  br i1 %100, label %._crit_edge479, label %scalar.ph677

scalar.ph677:                                     ; preds = %scalar.ph677.prol.loopexit, %scalar.ph677
  %indvars.iv563 = phi i64 [ %indvars.iv.next564.3, %scalar.ph677 ], [ %indvars.iv563.unr, %scalar.ph677.prol.loopexit ]
  %101 = getelementptr inbounds i64, ptr %85, i64 %indvars.iv563
  %102 = load i64, ptr %101, align 8, !tbaa !14
  %103 = getelementptr inbounds i64, ptr %87, i64 %indvars.iv563
  store i64 %102, ptr %103, align 8, !tbaa !14
  %indvars.iv.next564 = add nuw nsw i64 %indvars.iv563, 1
  %104 = getelementptr inbounds i64, ptr %85, i64 %indvars.iv.next564
  %105 = load i64, ptr %104, align 8, !tbaa !14
  %106 = getelementptr inbounds i64, ptr %87, i64 %indvars.iv.next564
  store i64 %105, ptr %106, align 8, !tbaa !14
  %indvars.iv.next564.1 = add nuw nsw i64 %indvars.iv563, 2
  %107 = getelementptr inbounds i64, ptr %85, i64 %indvars.iv.next564.1
  %108 = load i64, ptr %107, align 8, !tbaa !14
  %109 = getelementptr inbounds i64, ptr %87, i64 %indvars.iv.next564.1
  store i64 %108, ptr %109, align 8, !tbaa !14
  %indvars.iv.next564.2 = add nuw nsw i64 %indvars.iv563, 3
  %110 = getelementptr inbounds i64, ptr %85, i64 %indvars.iv.next564.2
  %111 = load i64, ptr %110, align 8, !tbaa !14
  %112 = getelementptr inbounds i64, ptr %87, i64 %indvars.iv.next564.2
  store i64 %111, ptr %112, align 8, !tbaa !14
  %indvars.iv.next564.3 = add nuw nsw i64 %indvars.iv563, 4
  %exitcond567.not.3 = icmp eq i64 %indvars.iv.next564.3, %wide.trip.count566
  br i1 %exitcond567.not.3, label %._crit_edge479, label %scalar.ph677, !llvm.loop !26

._crit_edge479:                                   ; preds = %scalar.ph677.prol.loopexit, %scalar.ph677, %middle.block676, %.preheader474
  %113 = getelementptr inbounds i8, ptr %2, i64 8
  store i32 %29, ptr %113, align 8, !tbaa !12
  %114 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 1, ptr %114, align 4, !tbaa !23
  br label %.critedge

.thread659:                                       ; preds = %.thread, %81
  %115 = getelementptr inbounds i8, ptr %0, i64 16
  %116 = load ptr, ptr %115, align 8, !tbaa !13
  %117 = getelementptr inbounds i8, ptr %1, i64 16
  %118 = load ptr, ptr %117, align 8, !tbaa !13
  %119 = tail call i32 @cpCmp_BNU(ptr noundef %116, i32 noundef %29, ptr noundef %118, i32 noundef %31)
  %120 = icmp slt i32 %119, 0
  %spec.select = select i1 %120, ptr %0, ptr %1
  %spec.select444 = select i1 %120, ptr %1, ptr %0
  %121 = icmp eq i32 %119, 0
  br i1 %121, label %.preheader, label %156

.preheader:                                       ; preds = %.thread659
  %122 = getelementptr inbounds i8, ptr %0, i64 8
  %123 = load i32, ptr %122, align 8, !tbaa !12
  %124 = icmp sgt i32 %123, 0
  br i1 %124, label %.lr.ph555, label %._crit_edge556

.lr.ph555:                                        ; preds = %.preheader
  %125 = getelementptr inbounds i8, ptr %0, i64 16
  %126 = load ptr, ptr %125, align 8, !tbaa !13
  %127 = getelementptr inbounds i8, ptr %2, i64 16
  %128 = load ptr, ptr %127, align 8, !tbaa !13
  %wide.trip.count656 = zext nneg i32 %123 to i64
  %min.iters.check858 = icmp ult i32 %123, 6
  %129 = ptrtoint ptr %128 to i64
  %130 = ptrtoint ptr %126 to i64
  %131 = sub i64 %129, %130
  %diff.check855 = icmp ult i64 %131, 32
  %or.cond877 = select i1 %min.iters.check858, i1 true, i1 %diff.check855
  br i1 %or.cond877, label %scalar.ph857.preheader, label %vector.ph859

vector.ph859:                                     ; preds = %.lr.ph555
  %n.vec861 = and i64 %wide.trip.count656, 2147483644
  br label %vector.body863

vector.body863:                                   ; preds = %vector.body863, %vector.ph859
  %index864 = phi i64 [ 0, %vector.ph859 ], [ %index.next867, %vector.body863 ]
  %132 = getelementptr inbounds i64, ptr %126, i64 %index864
  %133 = getelementptr inbounds i8, ptr %132, i64 16
  %wide.load865 = load <2 x i64>, ptr %132, align 8, !tbaa !14
  %wide.load866 = load <2 x i64>, ptr %133, align 8, !tbaa !14
  %134 = getelementptr inbounds i64, ptr %128, i64 %index864
  %135 = getelementptr inbounds i8, ptr %134, i64 16
  store <2 x i64> %wide.load865, ptr %134, align 8, !tbaa !14
  store <2 x i64> %wide.load866, ptr %135, align 8, !tbaa !14
  %index.next867 = add nuw i64 %index864, 4
  %136 = icmp eq i64 %index.next867, %n.vec861
  br i1 %136, label %middle.block856, label %vector.body863, !llvm.loop !27

middle.block856:                                  ; preds = %vector.body863
  %cmp.n868 = icmp eq i64 %n.vec861, %wide.trip.count656
  br i1 %cmp.n868, label %._crit_edge556, label %scalar.ph857.preheader

scalar.ph857.preheader:                           ; preds = %middle.block856, %.lr.ph555
  %indvars.iv653.ph = phi i64 [ 0, %.lr.ph555 ], [ %n.vec861, %middle.block856 ]
  %xtraiter938 = and i64 %wide.trip.count656, 3
  %lcmp.mod939.not = icmp eq i64 %xtraiter938, 0
  br i1 %lcmp.mod939.not, label %scalar.ph857.prol.loopexit, label %scalar.ph857.prol

scalar.ph857.prol:                                ; preds = %scalar.ph857.preheader, %scalar.ph857.prol
  %indvars.iv653.prol = phi i64 [ %indvars.iv.next654.prol, %scalar.ph857.prol ], [ %indvars.iv653.ph, %scalar.ph857.preheader ]
  %prol.iter940 = phi i64 [ %prol.iter940.next, %scalar.ph857.prol ], [ 0, %scalar.ph857.preheader ]
  %137 = getelementptr inbounds i64, ptr %126, i64 %indvars.iv653.prol
  %138 = load i64, ptr %137, align 8, !tbaa !14
  %139 = getelementptr inbounds i64, ptr %128, i64 %indvars.iv653.prol
  store i64 %138, ptr %139, align 8, !tbaa !14
  %indvars.iv.next654.prol = add nuw nsw i64 %indvars.iv653.prol, 1
  %prol.iter940.next = add i64 %prol.iter940, 1
  %prol.iter940.cmp.not = icmp eq i64 %prol.iter940.next, %xtraiter938
  br i1 %prol.iter940.cmp.not, label %scalar.ph857.prol.loopexit, label %scalar.ph857.prol, !llvm.loop !28

scalar.ph857.prol.loopexit:                       ; preds = %scalar.ph857.prol, %scalar.ph857.preheader
  %indvars.iv653.unr = phi i64 [ %indvars.iv653.ph, %scalar.ph857.preheader ], [ %indvars.iv.next654.prol, %scalar.ph857.prol ]
  %140 = sub nsw i64 %indvars.iv653.ph, %wide.trip.count656
  %141 = icmp ugt i64 %140, -4
  br i1 %141, label %._crit_edge556, label %scalar.ph857

scalar.ph857:                                     ; preds = %scalar.ph857.prol.loopexit, %scalar.ph857
  %indvars.iv653 = phi i64 [ %indvars.iv.next654.3, %scalar.ph857 ], [ %indvars.iv653.unr, %scalar.ph857.prol.loopexit ]
  %142 = getelementptr inbounds i64, ptr %126, i64 %indvars.iv653
  %143 = load i64, ptr %142, align 8, !tbaa !14
  %144 = getelementptr inbounds i64, ptr %128, i64 %indvars.iv653
  store i64 %143, ptr %144, align 8, !tbaa !14
  %indvars.iv.next654 = add nuw nsw i64 %indvars.iv653, 1
  %145 = getelementptr inbounds i64, ptr %126, i64 %indvars.iv.next654
  %146 = load i64, ptr %145, align 8, !tbaa !14
  %147 = getelementptr inbounds i64, ptr %128, i64 %indvars.iv.next654
  store i64 %146, ptr %147, align 8, !tbaa !14
  %indvars.iv.next654.1 = add nuw nsw i64 %indvars.iv653, 2
  %148 = getelementptr inbounds i64, ptr %126, i64 %indvars.iv.next654.1
  %149 = load i64, ptr %148, align 8, !tbaa !14
  %150 = getelementptr inbounds i64, ptr %128, i64 %indvars.iv.next654.1
  store i64 %149, ptr %150, align 8, !tbaa !14
  %indvars.iv.next654.2 = add nuw nsw i64 %indvars.iv653, 3
  %151 = getelementptr inbounds i64, ptr %126, i64 %indvars.iv.next654.2
  %152 = load i64, ptr %151, align 8, !tbaa !14
  %153 = getelementptr inbounds i64, ptr %128, i64 %indvars.iv.next654.2
  store i64 %152, ptr %153, align 8, !tbaa !14
  %indvars.iv.next654.3 = add nuw nsw i64 %indvars.iv653, 4
  %exitcond657.not.3 = icmp eq i64 %indvars.iv.next654.3, %wide.trip.count656
  br i1 %exitcond657.not.3, label %._crit_edge556, label %scalar.ph857, !llvm.loop !29

._crit_edge556:                                   ; preds = %scalar.ph857.prol.loopexit, %scalar.ph857, %middle.block856, %.preheader
  %154 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 1, ptr %154, align 4, !tbaa !23
  %155 = getelementptr inbounds i8, ptr %2, i64 8
  store i32 %123, ptr %155, align 8, !tbaa !12
  br label %.critedge

156:                                              ; preds = %.thread659
  %157 = getelementptr inbounds i8, ptr %spec.select444, i64 8
  %158 = load i32, ptr %157, align 8, !tbaa !12
  %159 = icmp eq i32 %158, 1
  br i1 %159, label %160, label %171

160:                                              ; preds = %156
  %161 = getelementptr inbounds i8, ptr %spec.select444, i64 16
  %162 = load ptr, ptr %161, align 8, !tbaa !13
  %163 = load i64, ptr %162, align 8, !tbaa !14
  %164 = getelementptr inbounds i8, ptr %spec.select, i64 16
  %165 = load ptr, ptr %164, align 8, !tbaa !13
  %166 = load i64, ptr %165, align 8, !tbaa !14
  %167 = tail call i64 @cpGcd_BNU(i64 noundef %163, i64 noundef %166) #5
  %168 = getelementptr inbounds i8, ptr %2, i64 16
  %169 = load ptr, ptr %168, align 8, !tbaa !13
  store i64 %167, ptr %169, align 8, !tbaa !14
  %170 = getelementptr inbounds i8, ptr %2, i64 8
  store i32 1, ptr %170, align 8, !tbaa !12
  br label %.critedge

171:                                              ; preds = %156
  %172 = getelementptr inbounds i8, ptr %spec.select444, i64 24
  %173 = load ptr, ptr %172, align 8, !tbaa !30
  %174 = ptrtoint ptr %173 to i64
  %175 = getelementptr inbounds i8, ptr %spec.select, i64 24
  %176 = load ptr, ptr %175, align 8, !tbaa !30
  %177 = ptrtoint ptr %176 to i64
  %178 = getelementptr inbounds i8, ptr %2, i64 24
  %179 = load ptr, ptr %178, align 8, !tbaa !30
  %180 = ptrtoint ptr %179 to i64
  %181 = getelementptr inbounds i8, ptr %spec.select444, i64 16
  %182 = load ptr, ptr %181, align 8, !tbaa !13
  %183 = getelementptr inbounds i8, ptr %spec.select, i64 16
  %184 = load ptr, ptr %183, align 8, !tbaa !13
  %185 = ptrtoint ptr %184 to i64
  %186 = getelementptr inbounds i8, ptr %2, i64 16
  %187 = load ptr, ptr %186, align 8, !tbaa !13
  %188 = ptrtoint ptr %187 to i64
  %189 = getelementptr inbounds i8, ptr %spec.select444, i64 12
  %190 = load i32, ptr %189, align 4, !tbaa !11
  %191 = shl i32 %190, 1
  %192 = getelementptr inbounds i8, ptr %spec.select, i64 12
  %193 = load i32, ptr %192, align 4, !tbaa !11
  %194 = shl i32 %193, 1
  %195 = load i32, ptr %26, align 4, !tbaa !11
  %196 = shl i32 %195, 1
  %197 = shl nsw i32 %158, 1
  %198 = getelementptr inbounds i8, ptr %spec.select, i64 8
  %199 = load i32, ptr %198, align 8, !tbaa !12
  %200 = shl nsw i32 %199, 1
  %201 = tail call i32 @cpFix_BNU32(ptr noundef %182, i32 noundef %197)
  %202 = tail call i32 @cpFix_BNU32(ptr noundef %184, i32 noundef %200)
  %203 = icmp sgt i32 %201, 0
  br i1 %203, label %.lr.ph482.preheader, label %.preheader473

.lr.ph482.preheader:                              ; preds = %171
  %204 = ptrtoint ptr %182 to i64
  %wide.trip.count571 = zext nneg i32 %201 to i64
  %min.iters.check693 = icmp ult i32 %201, 8
  %205 = sub i64 %174, %204
  %diff.check690 = icmp ult i64 %205, 32
  %or.cond878 = select i1 %min.iters.check693, i1 true, i1 %diff.check690
  br i1 %or.cond878, label %.lr.ph482.preheader901, label %vector.ph694

.lr.ph482.preheader901:                           ; preds = %middle.block691, %.lr.ph482.preheader
  %indvars.iv568.ph = phi i64 [ 0, %.lr.ph482.preheader ], [ %n.vec696, %middle.block691 ]
  %xtraiter905 = and i64 %wide.trip.count571, 3
  %lcmp.mod906.not = icmp eq i64 %xtraiter905, 0
  br i1 %lcmp.mod906.not, label %.lr.ph482.prol.loopexit, label %.lr.ph482.prol

.lr.ph482.prol:                                   ; preds = %.lr.ph482.preheader901, %.lr.ph482.prol
  %indvars.iv568.prol = phi i64 [ %indvars.iv.next569.prol, %.lr.ph482.prol ], [ %indvars.iv568.ph, %.lr.ph482.preheader901 ]
  %prol.iter907 = phi i64 [ %prol.iter907.next, %.lr.ph482.prol ], [ 0, %.lr.ph482.preheader901 ]
  %206 = getelementptr inbounds i32, ptr %182, i64 %indvars.iv568.prol
  %207 = load i32, ptr %206, align 4, !tbaa !31
  %208 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv568.prol
  store i32 %207, ptr %208, align 4, !tbaa !31
  %indvars.iv.next569.prol = add nuw nsw i64 %indvars.iv568.prol, 1
  %prol.iter907.next = add i64 %prol.iter907, 1
  %prol.iter907.cmp.not = icmp eq i64 %prol.iter907.next, %xtraiter905
  br i1 %prol.iter907.cmp.not, label %.lr.ph482.prol.loopexit, label %.lr.ph482.prol, !llvm.loop !32

.lr.ph482.prol.loopexit:                          ; preds = %.lr.ph482.prol, %.lr.ph482.preheader901
  %indvars.iv568.unr = phi i64 [ %indvars.iv568.ph, %.lr.ph482.preheader901 ], [ %indvars.iv.next569.prol, %.lr.ph482.prol ]
  %209 = sub nsw i64 %indvars.iv568.ph, %wide.trip.count571
  %210 = icmp ugt i64 %209, -4
  br i1 %210, label %.preheader473, label %.lr.ph482

vector.ph694:                                     ; preds = %.lr.ph482.preheader
  %n.vec696 = and i64 %wide.trip.count571, 2147483640
  br label %vector.body698

vector.body698:                                   ; preds = %vector.body698, %vector.ph694
  %index699 = phi i64 [ 0, %vector.ph694 ], [ %index.next702, %vector.body698 ]
  %211 = getelementptr inbounds i32, ptr %182, i64 %index699
  %212 = getelementptr inbounds i8, ptr %211, i64 16
  %wide.load700 = load <4 x i32>, ptr %211, align 4, !tbaa !31
  %wide.load701 = load <4 x i32>, ptr %212, align 4, !tbaa !31
  %213 = getelementptr inbounds i32, ptr %173, i64 %index699
  %214 = getelementptr inbounds i8, ptr %213, i64 16
  store <4 x i32> %wide.load700, ptr %213, align 4, !tbaa !31
  store <4 x i32> %wide.load701, ptr %214, align 4, !tbaa !31
  %index.next702 = add nuw i64 %index699, 8
  %215 = icmp eq i64 %index.next702, %n.vec696
  br i1 %215, label %middle.block691, label %vector.body698, !llvm.loop !33

middle.block691:                                  ; preds = %vector.body698
  %cmp.n703 = icmp eq i64 %n.vec696, %wide.trip.count571
  br i1 %cmp.n703, label %.preheader473, label %.lr.ph482.preheader901

.preheader473:                                    ; preds = %.lr.ph482.prol.loopexit, %.lr.ph482, %middle.block691, %171
  %.0425.lcssa = phi i32 [ 0, %171 ], [ %201, %middle.block691 ], [ %201, %.lr.ph482 ], [ %201, %.lr.ph482.prol.loopexit ]
  %216 = icmp slt i32 %.0425.lcssa, %191
  br i1 %216, label %.lr.ph484.preheader, label %.preheader472

.lr.ph484.preheader:                              ; preds = %.preheader473
  %217 = zext nneg i32 %.0425.lcssa to i64
  %218 = shl nuw nsw i64 %217, 2
  %scevgep = getelementptr i8, ptr %173, i64 %218
  %219 = xor i32 %.0425.lcssa, -1
  %220 = add i32 %191, %219
  %221 = zext i32 %220 to i64
  %222 = shl nuw nsw i64 %221, 2
  %223 = add nuw nsw i64 %222, 4
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %scevgep, i8 0, i64 %223, i1 false), !tbaa !31
  br label %.preheader472

.lr.ph482:                                        ; preds = %.lr.ph482.prol.loopexit, %.lr.ph482
  %indvars.iv568 = phi i64 [ %indvars.iv.next569.3, %.lr.ph482 ], [ %indvars.iv568.unr, %.lr.ph482.prol.loopexit ]
  %224 = getelementptr inbounds i32, ptr %182, i64 %indvars.iv568
  %225 = load i32, ptr %224, align 4, !tbaa !31
  %226 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv568
  store i32 %225, ptr %226, align 4, !tbaa !31
  %indvars.iv.next569 = add nuw nsw i64 %indvars.iv568, 1
  %227 = getelementptr inbounds i32, ptr %182, i64 %indvars.iv.next569
  %228 = load i32, ptr %227, align 4, !tbaa !31
  %229 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next569
  store i32 %228, ptr %229, align 4, !tbaa !31
  %indvars.iv.next569.1 = add nuw nsw i64 %indvars.iv568, 2
  %230 = getelementptr inbounds i32, ptr %182, i64 %indvars.iv.next569.1
  %231 = load i32, ptr %230, align 4, !tbaa !31
  %232 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next569.1
  store i32 %231, ptr %232, align 4, !tbaa !31
  %indvars.iv.next569.2 = add nuw nsw i64 %indvars.iv568, 3
  %233 = getelementptr inbounds i32, ptr %182, i64 %indvars.iv.next569.2
  %234 = load i32, ptr %233, align 4, !tbaa !31
  %235 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next569.2
  store i32 %234, ptr %235, align 4, !tbaa !31
  %indvars.iv.next569.3 = add nuw nsw i64 %indvars.iv568, 4
  %exitcond572.not.3 = icmp eq i64 %indvars.iv.next569.3, %wide.trip.count571
  br i1 %exitcond572.not.3, label %.preheader473, label %.lr.ph482, !llvm.loop !34

.preheader472:                                    ; preds = %.lr.ph484.preheader, %.preheader473
  %236 = icmp sgt i32 %202, 0
  br i1 %236, label %.lr.ph486.preheader, label %.preheader471

.lr.ph486.preheader:                              ; preds = %.preheader472
  %wide.trip.count579 = zext nneg i32 %202 to i64
  %min.iters.check708 = icmp ult i32 %202, 8
  %237 = sub i64 %177, %185
  %diff.check705 = icmp ult i64 %237, 32
  %or.cond879 = select i1 %min.iters.check708, i1 true, i1 %diff.check705
  br i1 %or.cond879, label %.lr.ph486.preheader900, label %vector.ph709

.lr.ph486.preheader900:                           ; preds = %middle.block706, %.lr.ph486.preheader
  %indvars.iv576.ph = phi i64 [ 0, %.lr.ph486.preheader ], [ %n.vec711, %middle.block706 ]
  %xtraiter908 = and i64 %wide.trip.count579, 3
  %lcmp.mod909.not = icmp eq i64 %xtraiter908, 0
  br i1 %lcmp.mod909.not, label %.lr.ph486.prol.loopexit, label %.lr.ph486.prol

.lr.ph486.prol:                                   ; preds = %.lr.ph486.preheader900, %.lr.ph486.prol
  %indvars.iv576.prol = phi i64 [ %indvars.iv.next577.prol, %.lr.ph486.prol ], [ %indvars.iv576.ph, %.lr.ph486.preheader900 ]
  %prol.iter910 = phi i64 [ %prol.iter910.next, %.lr.ph486.prol ], [ 0, %.lr.ph486.preheader900 ]
  %238 = getelementptr inbounds i32, ptr %184, i64 %indvars.iv576.prol
  %239 = load i32, ptr %238, align 4, !tbaa !31
  %240 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv576.prol
  store i32 %239, ptr %240, align 4, !tbaa !31
  %indvars.iv.next577.prol = add nuw nsw i64 %indvars.iv576.prol, 1
  %prol.iter910.next = add i64 %prol.iter910, 1
  %prol.iter910.cmp.not = icmp eq i64 %prol.iter910.next, %xtraiter908
  br i1 %prol.iter910.cmp.not, label %.lr.ph486.prol.loopexit, label %.lr.ph486.prol, !llvm.loop !35

.lr.ph486.prol.loopexit:                          ; preds = %.lr.ph486.prol, %.lr.ph486.preheader900
  %indvars.iv576.unr = phi i64 [ %indvars.iv576.ph, %.lr.ph486.preheader900 ], [ %indvars.iv.next577.prol, %.lr.ph486.prol ]
  %241 = sub nsw i64 %indvars.iv576.ph, %wide.trip.count579
  %242 = icmp ugt i64 %241, -4
  br i1 %242, label %.preheader471, label %.lr.ph486

vector.ph709:                                     ; preds = %.lr.ph486.preheader
  %n.vec711 = and i64 %wide.trip.count579, 2147483640
  br label %vector.body713

vector.body713:                                   ; preds = %vector.body713, %vector.ph709
  %index714 = phi i64 [ 0, %vector.ph709 ], [ %index.next717, %vector.body713 ]
  %243 = getelementptr inbounds i32, ptr %184, i64 %index714
  %244 = getelementptr inbounds i8, ptr %243, i64 16
  %wide.load715 = load <4 x i32>, ptr %243, align 4, !tbaa !31
  %wide.load716 = load <4 x i32>, ptr %244, align 4, !tbaa !31
  %245 = getelementptr inbounds i32, ptr %176, i64 %index714
  %246 = getelementptr inbounds i8, ptr %245, i64 16
  store <4 x i32> %wide.load715, ptr %245, align 4, !tbaa !31
  store <4 x i32> %wide.load716, ptr %246, align 4, !tbaa !31
  %index.next717 = add nuw i64 %index714, 8
  %247 = icmp eq i64 %index.next717, %n.vec711
  br i1 %247, label %middle.block706, label %vector.body713, !llvm.loop !36

middle.block706:                                  ; preds = %vector.body713
  %cmp.n718 = icmp eq i64 %n.vec711, %wide.trip.count579
  br i1 %cmp.n718, label %.preheader471, label %.lr.ph486.preheader900

.preheader471:                                    ; preds = %.lr.ph486.prol.loopexit, %.lr.ph486, %middle.block706, %.preheader472
  %.0423.lcssa = phi i32 [ 0, %.preheader472 ], [ %202, %middle.block706 ], [ %202, %.lr.ph486 ], [ %202, %.lr.ph486.prol.loopexit ]
  %248 = icmp slt i32 %.0423.lcssa, %194
  br i1 %248, label %.lr.ph489.preheader, label %.preheader470

.lr.ph489.preheader:                              ; preds = %.preheader471
  %249 = zext nneg i32 %.0423.lcssa to i64
  %250 = shl nuw nsw i64 %249, 2
  %scevgep581 = getelementptr i8, ptr %176, i64 %250
  %251 = xor i32 %.0423.lcssa, -1
  %252 = add i32 %194, %251
  %253 = zext i32 %252 to i64
  %254 = shl nuw nsw i64 %253, 2
  %255 = add nuw nsw i64 %254, 4
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %scevgep581, i8 0, i64 %255, i1 false), !tbaa !31
  br label %.preheader470

.lr.ph486:                                        ; preds = %.lr.ph486.prol.loopexit, %.lr.ph486
  %indvars.iv576 = phi i64 [ %indvars.iv.next577.3, %.lr.ph486 ], [ %indvars.iv576.unr, %.lr.ph486.prol.loopexit ]
  %256 = getelementptr inbounds i32, ptr %184, i64 %indvars.iv576
  %257 = load i32, ptr %256, align 4, !tbaa !31
  %258 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv576
  store i32 %257, ptr %258, align 4, !tbaa !31
  %indvars.iv.next577 = add nuw nsw i64 %indvars.iv576, 1
  %259 = getelementptr inbounds i32, ptr %184, i64 %indvars.iv.next577
  %260 = load i32, ptr %259, align 4, !tbaa !31
  %261 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next577
  store i32 %260, ptr %261, align 4, !tbaa !31
  %indvars.iv.next577.1 = add nuw nsw i64 %indvars.iv576, 2
  %262 = getelementptr inbounds i32, ptr %184, i64 %indvars.iv.next577.1
  %263 = load i32, ptr %262, align 4, !tbaa !31
  %264 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next577.1
  store i32 %263, ptr %264, align 4, !tbaa !31
  %indvars.iv.next577.2 = add nuw nsw i64 %indvars.iv576, 3
  %265 = getelementptr inbounds i32, ptr %184, i64 %indvars.iv.next577.2
  %266 = load i32, ptr %265, align 4, !tbaa !31
  %267 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next577.2
  store i32 %266, ptr %267, align 4, !tbaa !31
  %indvars.iv.next577.3 = add nuw nsw i64 %indvars.iv576, 4
  %exitcond580.not.3 = icmp eq i64 %indvars.iv.next577.3, %wide.trip.count579
  br i1 %exitcond580.not.3, label %.preheader471, label %.lr.ph486, !llvm.loop !37

.preheader470:                                    ; preds = %.lr.ph489.preheader, %.preheader471
  %268 = icmp sgt i32 %195, 0
  br i1 %268, label %.lr.ph493.preheader, label %.preheader468

.lr.ph493.preheader:                              ; preds = %.preheader470
  %smax = tail call i32 @llvm.smax.i32(i32 %196, i32 1)
  %269 = zext nneg i32 %smax to i64
  %270 = shl nuw nsw i64 %269, 2
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %179, i8 0, i64 %270, i1 false), !tbaa !31
  %smax588 = tail call i32 @llvm.smax.i32(i32 %196, i32 1)
  %271 = zext nneg i32 %smax588 to i64
  %272 = shl nuw nsw i64 %271, 2
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %187, i8 0, i64 %272, i1 false), !tbaa !31
  br label %.preheader468

.preheader468:                                    ; preds = %.preheader470, %.lr.ph493.preheader
  %invariant.gep = getelementptr i8, ptr %173, i64 -4
  %invariant.gep541 = getelementptr i8, ptr %176, i64 -4
  %273 = icmp sgt i32 %201, 2
  br i1 %273, label %.lr.ph548, label %._crit_edge549

.lr.ph548:                                        ; preds = %.preheader468
  %274 = icmp sgt i32 %190, 0
  %275 = icmp sgt i32 %193, 0
  %smax617 = tail call i32 @llvm.smax.i32(i32 %196, i32 1)
  %276 = zext nneg i32 %smax617 to i64
  %277 = shl nuw nsw i64 %276, 2
  %smax626 = tail call i32 @llvm.smax.i32(i32 %191, i32 1)
  %278 = zext nneg i32 %smax626 to i64
  %279 = shl nuw nsw i64 %278, 2
  %smax635 = tail call i32 @llvm.smax.i32(i32 %194, i32 1)
  %280 = zext nneg i32 %smax635 to i64
  %281 = shl nuw nsw i64 %280, 2
  %282 = sub i64 %177, %180
  %283 = sub i64 %174, %177
  %284 = sub i64 %180, %174
  %285 = sub i64 %174, %180
  %286 = sub i64 %177, %188
  %287 = sub i64 %174, %188
  %diff.check825 = icmp ult i64 %286, 32
  %diff.check810 = icmp ult i64 %286, 32
  %diff.check795 = icmp ult i64 %287, 32
  %diff.check780 = icmp ult i64 %286, 32
  %diff.check765 = icmp ult i64 %285, 32
  %diff.check750 = icmp ult i64 %284, 32
  %diff.check735 = icmp ult i64 %283, 32
  %diff.check720 = icmp ult i64 %282, 32
  br label %288

288:                                              ; preds = %.lr.ph548, %586
  %.0401545 = phi i32 [ %201, %.lr.ph548 ], [ %spec.select670, %586 ]
  %.0403543 = phi i32 [ %202, %.lr.ph548 ], [ %spec.select669, %586 ]
  %289 = zext nneg i32 %.0401545 to i64
  %gep = getelementptr i32, ptr %invariant.gep, i64 %289
  %290 = load i32, ptr %gep, align 4, !tbaa !31
  %291 = zext i32 %290 to i64
  %292 = icmp slt i32 %.0403543, %.0401545
  br i1 %292, label %.thread450.thread, label %293

293:                                              ; preds = %288
  %294 = zext nneg i32 %.0403543 to i64
  %gep542 = getelementptr i32, ptr %invariant.gep541, i64 %294
  %295 = load i32, ptr %gep542, align 4, !tbaa !31
  %.not558 = icmp eq i32 %295, 0
  br i1 %.not558, label %.thread450.thread, label %.lr.ph501.preheader

.lr.ph501.preheader:                              ; preds = %293
  %296 = zext i32 %295 to i64
  %297 = add nuw nsw i64 %296, 1
  br label %.lr.ph501

.lr.ph501:                                        ; preds = %.lr.ph501.preheader, %304
  %298 = phi i64 [ %313, %304 ], [ %297, %.lr.ph501.preheader ]
  %299 = phi i64 [ %311, %304 ], [ %296, %.lr.ph501.preheader ]
  %.0405499 = phi i64 [ %308, %304 ], [ 1, %.lr.ph501.preheader ]
  %.0408498 = phi i64 [ %306, %304 ], [ 0, %.lr.ph501.preheader ]
  %.0411497 = phi i64 [ %.0405499, %304 ], [ 0, %.lr.ph501.preheader ]
  %.0414496 = phi i64 [ %.0408498, %304 ], [ 1, %.lr.ph501.preheader ]
  %.0417495 = phi i64 [ %310, %304 ], [ %296, %.lr.ph501.preheader ]
  %.0419494 = phi i64 [ %.0417495, %304 ], [ %291, %.lr.ph501.preheader ]
  %300 = add i64 %.0414496, %.0419494
  %301 = udiv i64 %300, %299
  %302 = add i64 %.0411497, %.0419494
  %303 = udiv i64 %302, %298
  %.not = icmp eq i64 %301, %303
  br i1 %.not, label %304, label %.thread450

304:                                              ; preds = %.lr.ph501
  %305 = mul nsw i64 %301, %.0408498
  %306 = sub nsw i64 %.0414496, %305
  %307 = mul nsw i64 %301, %.0405499
  %308 = sub nsw i64 %.0411497, %307
  %309 = mul i64 %301, %.0417495
  %310 = sub i64 %.0419494, %309
  %311 = add i64 %306, %310
  %312 = icmp ne i64 %311, 0
  %313 = add i64 %308, %310
  %314 = icmp ne i64 %313, 0
  %315 = select i1 %312, i1 %314, i1 false
  br i1 %315, label %.lr.ph501, label %.thread450

.thread450:                                       ; preds = %304, %.lr.ph501
  %.0414.lcssa = phi i64 [ %.0408498, %304 ], [ %.0414496, %.lr.ph501 ]
  %.0411.lcssa = phi i64 [ %.0405499, %304 ], [ %.0411497, %.lr.ph501 ]
  %.0408.lcssa = phi i64 [ %306, %304 ], [ %.0408498, %.lr.ph501 ]
  %.0405.lcssa = phi i64 [ %308, %304 ], [ %.0405499, %.lr.ph501 ]
  %316 = icmp eq i64 %.0411.lcssa, 0
  br i1 %316, label %.thread450.thread, label %386

.thread450.thread:                                ; preds = %288, %293, %.thread450
  %317 = tail call i32 @cpDiv_BNU32(ptr noundef null, ptr noundef null, ptr noundef %173, i32 noundef %.0401545, ptr noundef %176, i32 noundef %.0403543) #5
  br i1 %268, label %.lr.ph530.preheader, label %.preheader465

.lr.ph530.preheader:                              ; preds = %.thread450.thread
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %179, i8 0, i64 %277, i1 false), !tbaa !31
  br label %.preheader465

.preheader465:                                    ; preds = %.lr.ph530.preheader, %.thread450.thread
  %318 = icmp sgt i32 %317, 0
  br i1 %318, label %.lr.ph532.preheader, label %.preheader464

.lr.ph532.preheader:                              ; preds = %.preheader465
  %wide.trip.count624 = zext nneg i32 %317 to i64
  %min.iters.check753 = icmp ult i32 %317, 8
  %or.cond880 = select i1 %min.iters.check753, i1 true, i1 %diff.check750
  br i1 %or.cond880, label %.lr.ph532.preheader892, label %vector.ph754

.lr.ph532.preheader892:                           ; preds = %middle.block751, %.lr.ph532.preheader
  %indvars.iv621.ph = phi i64 [ 0, %.lr.ph532.preheader ], [ %n.vec756, %middle.block751 ]
  %xtraiter926 = and i64 %wide.trip.count624, 3
  %lcmp.mod927.not = icmp eq i64 %xtraiter926, 0
  br i1 %lcmp.mod927.not, label %.lr.ph532.prol.loopexit, label %.lr.ph532.prol

.lr.ph532.prol:                                   ; preds = %.lr.ph532.preheader892, %.lr.ph532.prol
  %indvars.iv621.prol = phi i64 [ %indvars.iv.next622.prol, %.lr.ph532.prol ], [ %indvars.iv621.ph, %.lr.ph532.preheader892 ]
  %prol.iter928 = phi i64 [ %prol.iter928.next, %.lr.ph532.prol ], [ 0, %.lr.ph532.preheader892 ]
  %319 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv621.prol
  %320 = load i32, ptr %319, align 4, !tbaa !31
  %321 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv621.prol
  store i32 %320, ptr %321, align 4, !tbaa !31
  %indvars.iv.next622.prol = add nuw nsw i64 %indvars.iv621.prol, 1
  %prol.iter928.next = add i64 %prol.iter928, 1
  %prol.iter928.cmp.not = icmp eq i64 %prol.iter928.next, %xtraiter926
  br i1 %prol.iter928.cmp.not, label %.lr.ph532.prol.loopexit, label %.lr.ph532.prol, !llvm.loop !38

.lr.ph532.prol.loopexit:                          ; preds = %.lr.ph532.prol, %.lr.ph532.preheader892
  %indvars.iv621.unr = phi i64 [ %indvars.iv621.ph, %.lr.ph532.preheader892 ], [ %indvars.iv.next622.prol, %.lr.ph532.prol ]
  %322 = sub nsw i64 %indvars.iv621.ph, %wide.trip.count624
  %323 = icmp ugt i64 %322, -4
  br i1 %323, label %.preheader464, label %.lr.ph532

vector.ph754:                                     ; preds = %.lr.ph532.preheader
  %n.vec756 = and i64 %wide.trip.count624, 2147483640
  br label %vector.body758

vector.body758:                                   ; preds = %vector.body758, %vector.ph754
  %index759 = phi i64 [ 0, %vector.ph754 ], [ %index.next762, %vector.body758 ]
  %324 = getelementptr inbounds i32, ptr %173, i64 %index759
  %325 = getelementptr inbounds i8, ptr %324, i64 16
  %wide.load760 = load <4 x i32>, ptr %324, align 4, !tbaa !31
  %wide.load761 = load <4 x i32>, ptr %325, align 4, !tbaa !31
  %326 = getelementptr inbounds i32, ptr %179, i64 %index759
  %327 = getelementptr inbounds i8, ptr %326, i64 16
  store <4 x i32> %wide.load760, ptr %326, align 4, !tbaa !31
  store <4 x i32> %wide.load761, ptr %327, align 4, !tbaa !31
  %index.next762 = add nuw i64 %index759, 8
  %328 = icmp eq i64 %index.next762, %n.vec756
  br i1 %328, label %middle.block751, label %vector.body758, !llvm.loop !39

middle.block751:                                  ; preds = %vector.body758
  %cmp.n763 = icmp eq i64 %n.vec756, %wide.trip.count624
  br i1 %cmp.n763, label %.preheader464, label %.lr.ph532.preheader892

.preheader464:                                    ; preds = %.lr.ph532.prol.loopexit, %.lr.ph532, %middle.block751, %.preheader465
  br i1 %274, label %.lr.ph534.preheader, label %.preheader463

.lr.ph534.preheader:                              ; preds = %.preheader464
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %173, i8 0, i64 %279, i1 false), !tbaa !31
  br label %.preheader463

.lr.ph532:                                        ; preds = %.lr.ph532.prol.loopexit, %.lr.ph532
  %indvars.iv621 = phi i64 [ %indvars.iv.next622.3, %.lr.ph532 ], [ %indvars.iv621.unr, %.lr.ph532.prol.loopexit ]
  %329 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv621
  %330 = load i32, ptr %329, align 4, !tbaa !31
  %331 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv621
  store i32 %330, ptr %331, align 4, !tbaa !31
  %indvars.iv.next622 = add nuw nsw i64 %indvars.iv621, 1
  %332 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next622
  %333 = load i32, ptr %332, align 4, !tbaa !31
  %334 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv.next622
  store i32 %333, ptr %334, align 4, !tbaa !31
  %indvars.iv.next622.1 = add nuw nsw i64 %indvars.iv621, 2
  %335 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next622.1
  %336 = load i32, ptr %335, align 4, !tbaa !31
  %337 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv.next622.1
  store i32 %336, ptr %337, align 4, !tbaa !31
  %indvars.iv.next622.2 = add nuw nsw i64 %indvars.iv621, 3
  %338 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next622.2
  %339 = load i32, ptr %338, align 4, !tbaa !31
  %340 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv.next622.2
  store i32 %339, ptr %340, align 4, !tbaa !31
  %indvars.iv.next622.3 = add nuw nsw i64 %indvars.iv621, 4
  %exitcond625.not.3 = icmp eq i64 %indvars.iv.next622.3, %wide.trip.count624
  br i1 %exitcond625.not.3, label %.preheader464, label %.lr.ph532, !llvm.loop !40

.preheader463:                                    ; preds = %.lr.ph534.preheader, %.preheader464
  %341 = icmp sgt i32 %.0403543, 0
  br i1 %341, label %.lr.ph536.preheader, label %.preheader462

.lr.ph536.preheader:                              ; preds = %.preheader463
  %wide.trip.count633 = zext nneg i32 %.0403543 to i64
  %min.iters.check738 = icmp ult i32 %.0403543, 8
  %or.cond881 = select i1 %min.iters.check738, i1 true, i1 %diff.check735
  br i1 %or.cond881, label %.lr.ph536.preheader891, label %vector.ph739

.lr.ph536.preheader891:                           ; preds = %middle.block736, %.lr.ph536.preheader
  %indvars.iv630.ph = phi i64 [ 0, %.lr.ph536.preheader ], [ %n.vec741, %middle.block736 ]
  %xtraiter929 = and i64 %wide.trip.count633, 3
  %lcmp.mod930.not = icmp eq i64 %xtraiter929, 0
  br i1 %lcmp.mod930.not, label %.lr.ph536.prol.loopexit, label %.lr.ph536.prol

.lr.ph536.prol:                                   ; preds = %.lr.ph536.preheader891, %.lr.ph536.prol
  %indvars.iv630.prol = phi i64 [ %indvars.iv.next631.prol, %.lr.ph536.prol ], [ %indvars.iv630.ph, %.lr.ph536.preheader891 ]
  %prol.iter931 = phi i64 [ %prol.iter931.next, %.lr.ph536.prol ], [ 0, %.lr.ph536.preheader891 ]
  %342 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv630.prol
  %343 = load i32, ptr %342, align 4, !tbaa !31
  %344 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv630.prol
  store i32 %343, ptr %344, align 4, !tbaa !31
  %indvars.iv.next631.prol = add nuw nsw i64 %indvars.iv630.prol, 1
  %prol.iter931.next = add i64 %prol.iter931, 1
  %prol.iter931.cmp.not = icmp eq i64 %prol.iter931.next, %xtraiter929
  br i1 %prol.iter931.cmp.not, label %.lr.ph536.prol.loopexit, label %.lr.ph536.prol, !llvm.loop !41

.lr.ph536.prol.loopexit:                          ; preds = %.lr.ph536.prol, %.lr.ph536.preheader891
  %indvars.iv630.unr = phi i64 [ %indvars.iv630.ph, %.lr.ph536.preheader891 ], [ %indvars.iv.next631.prol, %.lr.ph536.prol ]
  %345 = sub nsw i64 %indvars.iv630.ph, %wide.trip.count633
  %346 = icmp ugt i64 %345, -4
  br i1 %346, label %.preheader462, label %.lr.ph536

vector.ph739:                                     ; preds = %.lr.ph536.preheader
  %n.vec741 = and i64 %wide.trip.count633, 2147483640
  br label %vector.body743

vector.body743:                                   ; preds = %vector.body743, %vector.ph739
  %index744 = phi i64 [ 0, %vector.ph739 ], [ %index.next747, %vector.body743 ]
  %347 = getelementptr inbounds i32, ptr %176, i64 %index744
  %348 = getelementptr inbounds i8, ptr %347, i64 16
  %wide.load745 = load <4 x i32>, ptr %347, align 4, !tbaa !31
  %wide.load746 = load <4 x i32>, ptr %348, align 4, !tbaa !31
  %349 = getelementptr inbounds i32, ptr %173, i64 %index744
  %350 = getelementptr inbounds i8, ptr %349, i64 16
  store <4 x i32> %wide.load745, ptr %349, align 4, !tbaa !31
  store <4 x i32> %wide.load746, ptr %350, align 4, !tbaa !31
  %index.next747 = add nuw i64 %index744, 8
  %351 = icmp eq i64 %index.next747, %n.vec741
  br i1 %351, label %middle.block736, label %vector.body743, !llvm.loop !42

middle.block736:                                  ; preds = %vector.body743
  %cmp.n748 = icmp eq i64 %n.vec741, %wide.trip.count633
  br i1 %cmp.n748, label %.preheader462, label %.lr.ph536.preheader891

.preheader462:                                    ; preds = %.lr.ph536.prol.loopexit, %.lr.ph536, %middle.block736, %.preheader463
  br i1 %275, label %.lr.ph538.preheader, label %.preheader461

.lr.ph538.preheader:                              ; preds = %.preheader462
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %176, i8 0, i64 %281, i1 false), !tbaa !31
  br label %.preheader461

.lr.ph536:                                        ; preds = %.lr.ph536.prol.loopexit, %.lr.ph536
  %indvars.iv630 = phi i64 [ %indvars.iv.next631.3, %.lr.ph536 ], [ %indvars.iv630.unr, %.lr.ph536.prol.loopexit ]
  %352 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv630
  %353 = load i32, ptr %352, align 4, !tbaa !31
  %354 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv630
  store i32 %353, ptr %354, align 4, !tbaa !31
  %indvars.iv.next631 = add nuw nsw i64 %indvars.iv630, 1
  %355 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next631
  %356 = load i32, ptr %355, align 4, !tbaa !31
  %357 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next631
  store i32 %356, ptr %357, align 4, !tbaa !31
  %indvars.iv.next631.1 = add nuw nsw i64 %indvars.iv630, 2
  %358 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next631.1
  %359 = load i32, ptr %358, align 4, !tbaa !31
  %360 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next631.1
  store i32 %359, ptr %360, align 4, !tbaa !31
  %indvars.iv.next631.2 = add nuw nsw i64 %indvars.iv630, 3
  %361 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next631.2
  %362 = load i32, ptr %361, align 4, !tbaa !31
  %363 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next631.2
  store i32 %362, ptr %363, align 4, !tbaa !31
  %indvars.iv.next631.3 = add nuw nsw i64 %indvars.iv630, 4
  %exitcond634.not.3 = icmp eq i64 %indvars.iv.next631.3, %wide.trip.count633
  br i1 %exitcond634.not.3, label %.preheader462, label %.lr.ph536, !llvm.loop !43

.preheader461:                                    ; preds = %.lr.ph538.preheader, %.preheader462
  br i1 %341, label %.lr.ph540.preheader, label %.loopexit

.lr.ph540.preheader:                              ; preds = %.preheader461
  %wide.trip.count642 = zext nneg i32 %.0403543 to i64
  %min.iters.check723 = icmp ult i32 %.0403543, 8
  %or.cond882 = select i1 %min.iters.check723, i1 true, i1 %diff.check720
  br i1 %or.cond882, label %.lr.ph540.preheader890, label %vector.ph724

vector.ph724:                                     ; preds = %.lr.ph540.preheader
  %n.vec726 = and i64 %wide.trip.count642, 2147483640
  br label %vector.body728

vector.body728:                                   ; preds = %vector.body728, %vector.ph724
  %index729 = phi i64 [ 0, %vector.ph724 ], [ %index.next732, %vector.body728 ]
  %364 = getelementptr inbounds i32, ptr %179, i64 %index729
  %365 = getelementptr inbounds i8, ptr %364, i64 16
  %wide.load730 = load <4 x i32>, ptr %364, align 4, !tbaa !31
  %wide.load731 = load <4 x i32>, ptr %365, align 4, !tbaa !31
  %366 = getelementptr inbounds i32, ptr %176, i64 %index729
  %367 = getelementptr inbounds i8, ptr %366, i64 16
  store <4 x i32> %wide.load730, ptr %366, align 4, !tbaa !31
  store <4 x i32> %wide.load731, ptr %367, align 4, !tbaa !31
  %index.next732 = add nuw i64 %index729, 8
  %368 = icmp eq i64 %index.next732, %n.vec726
  br i1 %368, label %middle.block721, label %vector.body728, !llvm.loop !44

middle.block721:                                  ; preds = %vector.body728
  %cmp.n733 = icmp eq i64 %n.vec726, %wide.trip.count642
  br i1 %cmp.n733, label %.loopexit, label %.lr.ph540.preheader890

.lr.ph540.preheader890:                           ; preds = %middle.block721, %.lr.ph540.preheader
  %indvars.iv639.ph = phi i64 [ 0, %.lr.ph540.preheader ], [ %n.vec726, %middle.block721 ]
  %xtraiter932 = and i64 %wide.trip.count642, 3
  %lcmp.mod933.not = icmp eq i64 %xtraiter932, 0
  br i1 %lcmp.mod933.not, label %.lr.ph540.prol.loopexit, label %.lr.ph540.prol

.lr.ph540.prol:                                   ; preds = %.lr.ph540.preheader890, %.lr.ph540.prol
  %indvars.iv639.prol = phi i64 [ %indvars.iv.next640.prol, %.lr.ph540.prol ], [ %indvars.iv639.ph, %.lr.ph540.preheader890 ]
  %prol.iter934 = phi i64 [ %prol.iter934.next, %.lr.ph540.prol ], [ 0, %.lr.ph540.preheader890 ]
  %369 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv639.prol
  %370 = load i32, ptr %369, align 4, !tbaa !31
  %371 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv639.prol
  store i32 %370, ptr %371, align 4, !tbaa !31
  %indvars.iv.next640.prol = add nuw nsw i64 %indvars.iv639.prol, 1
  %prol.iter934.next = add i64 %prol.iter934, 1
  %prol.iter934.cmp.not = icmp eq i64 %prol.iter934.next, %xtraiter932
  br i1 %prol.iter934.cmp.not, label %.lr.ph540.prol.loopexit, label %.lr.ph540.prol, !llvm.loop !45

.lr.ph540.prol.loopexit:                          ; preds = %.lr.ph540.prol, %.lr.ph540.preheader890
  %indvars.iv639.unr = phi i64 [ %indvars.iv639.ph, %.lr.ph540.preheader890 ], [ %indvars.iv.next640.prol, %.lr.ph540.prol ]
  %372 = sub nsw i64 %indvars.iv639.ph, %wide.trip.count642
  %373 = icmp ugt i64 %372, -4
  br i1 %373, label %.loopexit, label %.lr.ph540

.lr.ph540:                                        ; preds = %.lr.ph540.prol.loopexit, %.lr.ph540
  %indvars.iv639 = phi i64 [ %indvars.iv.next640.3, %.lr.ph540 ], [ %indvars.iv639.unr, %.lr.ph540.prol.loopexit ]
  %374 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv639
  %375 = load i32, ptr %374, align 4, !tbaa !31
  %376 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv639
  store i32 %375, ptr %376, align 4, !tbaa !31
  %indvars.iv.next640 = add nuw nsw i64 %indvars.iv639, 1
  %377 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv.next640
  %378 = load i32, ptr %377, align 4, !tbaa !31
  %379 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next640
  store i32 %378, ptr %379, align 4, !tbaa !31
  %indvars.iv.next640.1 = add nuw nsw i64 %indvars.iv639, 2
  %380 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv.next640.1
  %381 = load i32, ptr %380, align 4, !tbaa !31
  %382 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next640.1
  store i32 %381, ptr %382, align 4, !tbaa !31
  %indvars.iv.next640.2 = add nuw nsw i64 %indvars.iv639, 3
  %383 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv.next640.2
  %384 = load i32, ptr %383, align 4, !tbaa !31
  %385 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next640.2
  store i32 %384, ptr %385, align 4, !tbaa !31
  %indvars.iv.next640.3 = add nuw nsw i64 %indvars.iv639, 4
  %exitcond643.not.3 = icmp eq i64 %indvars.iv.next640.3, %wide.trip.count642
  br i1 %exitcond643.not.3, label %.loopexit, label %.lr.ph540, !llvm.loop !46

386:                                              ; preds = %.thread450
  %387 = icmp slt i64 %.0414.lcssa, 1
  %388 = icmp sgt i64 %.0411.lcssa, -1
  %or.cond8 = and i1 %387, %388
  br i1 %or.cond8, label %389, label %396

389:                                              ; preds = %386
  %390 = trunc i64 %.0414.lcssa to i32
  %391 = sub i32 0, %390
  %392 = trunc i64 %.0411.lcssa to i32
  %393 = tail call i32 @cpMulDgt_BNU32(ptr noundef %179, ptr noundef %176, i32 noundef %.0403543, i32 noundef %392) #5
  %394 = tail call i32 @cpMulDgt_BNU32(ptr noundef %187, ptr noundef %173, i32 noundef %.0403543, i32 noundef %391) #5
  %395 = tail call i32 @cpSub_BNU32(ptr noundef %179, ptr noundef %179, ptr noundef %187, i32 noundef %.0403543) #5
  br label %412

396:                                              ; preds = %386
  %397 = icmp sgt i64 %.0414.lcssa, -1
  %398 = icmp slt i64 %.0411.lcssa, 1
  %or.cond10 = and i1 %397, %398
  br i1 %or.cond10, label %399, label %406

399:                                              ; preds = %396
  %400 = trunc i64 %.0411.lcssa to i32
  %401 = sub i32 0, %400
  %402 = trunc i64 %.0414.lcssa to i32
  %403 = tail call i32 @cpMulDgt_BNU32(ptr noundef %179, ptr noundef %173, i32 noundef %.0403543, i32 noundef %402) #5
  %404 = tail call i32 @cpMulDgt_BNU32(ptr noundef %187, ptr noundef %176, i32 noundef %.0403543, i32 noundef %401) #5
  %405 = tail call i32 @cpSub_BNU32(ptr noundef %179, ptr noundef %179, ptr noundef %187, i32 noundef %.0403543) #5
  br label %412

406:                                              ; preds = %396
  %407 = trunc i64 %.0414.lcssa to i32
  %408 = tail call i32 @cpMulDgt_BNU32(ptr noundef %179, ptr noundef %173, i32 noundef %.0403543, i32 noundef %407) #5
  %409 = trunc i64 %.0411.lcssa to i32
  %410 = tail call i32 @cpMulDgt_BNU32(ptr noundef %187, ptr noundef %176, i32 noundef %.0403543, i32 noundef %409) #5
  %411 = tail call i32 @cpAdd_BNU32(ptr noundef %179, ptr noundef %179, ptr noundef %187, i32 noundef %.0403543) #5
  br label %412

412:                                              ; preds = %399, %406, %389
  %413 = icmp slt i64 %.0408.lcssa, 1
  %414 = icmp sgt i64 %.0405.lcssa, -1
  %or.cond12 = select i1 %413, i1 %414, i1 false
  br i1 %or.cond12, label %415, label %445

415:                                              ; preds = %412
  %416 = trunc i64 %.0408.lcssa to i32
  %417 = sub i32 0, %416
  %418 = tail call i32 @cpMulDgt_BNU32(ptr noundef %187, ptr noundef %173, i32 noundef %.0403543, i32 noundef %417) #5
  %419 = icmp sgt i32 %.0403543, 0
  br i1 %419, label %.lr.ph521.preheader, label %._crit_edge522

.lr.ph521.preheader:                              ; preds = %415
  %wide.trip.count605 = zext nneg i32 %.0403543 to i64
  %min.iters.check798 = icmp ult i32 %.0403543, 8
  %or.cond883 = select i1 %min.iters.check798, i1 true, i1 %diff.check795
  br i1 %or.cond883, label %.lr.ph521.preheader896, label %vector.ph799

vector.ph799:                                     ; preds = %.lr.ph521.preheader
  %n.vec801 = and i64 %wide.trip.count605, 2147483640
  br label %vector.body803

vector.body803:                                   ; preds = %vector.body803, %vector.ph799
  %index804 = phi i64 [ 0, %vector.ph799 ], [ %index.next807, %vector.body803 ]
  %420 = getelementptr inbounds i32, ptr %187, i64 %index804
  %421 = getelementptr inbounds i8, ptr %420, i64 16
  %wide.load805 = load <4 x i32>, ptr %420, align 4, !tbaa !31
  %wide.load806 = load <4 x i32>, ptr %421, align 4, !tbaa !31
  %422 = getelementptr inbounds i32, ptr %173, i64 %index804
  %423 = getelementptr inbounds i8, ptr %422, i64 16
  store <4 x i32> %wide.load805, ptr %422, align 4, !tbaa !31
  store <4 x i32> %wide.load806, ptr %423, align 4, !tbaa !31
  %index.next807 = add nuw i64 %index804, 8
  %424 = icmp eq i64 %index.next807, %n.vec801
  br i1 %424, label %middle.block796, label %vector.body803, !llvm.loop !47

middle.block796:                                  ; preds = %vector.body803
  %cmp.n808 = icmp eq i64 %n.vec801, %wide.trip.count605
  br i1 %cmp.n808, label %._crit_edge522, label %.lr.ph521.preheader896

.lr.ph521.preheader896:                           ; preds = %middle.block796, %.lr.ph521.preheader
  %indvars.iv602.ph = phi i64 [ 0, %.lr.ph521.preheader ], [ %n.vec801, %middle.block796 ]
  %xtraiter917 = and i64 %wide.trip.count605, 3
  %lcmp.mod918.not = icmp eq i64 %xtraiter917, 0
  br i1 %lcmp.mod918.not, label %.lr.ph521.prol.loopexit, label %.lr.ph521.prol

.lr.ph521.prol:                                   ; preds = %.lr.ph521.preheader896, %.lr.ph521.prol
  %indvars.iv602.prol = phi i64 [ %indvars.iv.next603.prol, %.lr.ph521.prol ], [ %indvars.iv602.ph, %.lr.ph521.preheader896 ]
  %prol.iter919 = phi i64 [ %prol.iter919.next, %.lr.ph521.prol ], [ 0, %.lr.ph521.preheader896 ]
  %425 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv602.prol
  %426 = load i32, ptr %425, align 4, !tbaa !31
  %427 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv602.prol
  store i32 %426, ptr %427, align 4, !tbaa !31
  %indvars.iv.next603.prol = add nuw nsw i64 %indvars.iv602.prol, 1
  %prol.iter919.next = add i64 %prol.iter919, 1
  %prol.iter919.cmp.not = icmp eq i64 %prol.iter919.next, %xtraiter917
  br i1 %prol.iter919.cmp.not, label %.lr.ph521.prol.loopexit, label %.lr.ph521.prol, !llvm.loop !48

.lr.ph521.prol.loopexit:                          ; preds = %.lr.ph521.prol, %.lr.ph521.preheader896
  %indvars.iv602.unr = phi i64 [ %indvars.iv602.ph, %.lr.ph521.preheader896 ], [ %indvars.iv.next603.prol, %.lr.ph521.prol ]
  %428 = sub nsw i64 %indvars.iv602.ph, %wide.trip.count605
  %429 = icmp ugt i64 %428, -4
  br i1 %429, label %._crit_edge522, label %.lr.ph521

.lr.ph521:                                        ; preds = %.lr.ph521.prol.loopexit, %.lr.ph521
  %indvars.iv602 = phi i64 [ %indvars.iv.next603.3, %.lr.ph521 ], [ %indvars.iv602.unr, %.lr.ph521.prol.loopexit ]
  %430 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv602
  %431 = load i32, ptr %430, align 4, !tbaa !31
  %432 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv602
  store i32 %431, ptr %432, align 4, !tbaa !31
  %indvars.iv.next603 = add nuw nsw i64 %indvars.iv602, 1
  %433 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next603
  %434 = load i32, ptr %433, align 4, !tbaa !31
  %435 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next603
  store i32 %434, ptr %435, align 4, !tbaa !31
  %indvars.iv.next603.1 = add nuw nsw i64 %indvars.iv602, 2
  %436 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next603.1
  %437 = load i32, ptr %436, align 4, !tbaa !31
  %438 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next603.1
  store i32 %437, ptr %438, align 4, !tbaa !31
  %indvars.iv.next603.2 = add nuw nsw i64 %indvars.iv602, 3
  %439 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next603.2
  %440 = load i32, ptr %439, align 4, !tbaa !31
  %441 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next603.2
  store i32 %440, ptr %441, align 4, !tbaa !31
  %indvars.iv.next603.3 = add nuw nsw i64 %indvars.iv602, 4
  %exitcond606.not.3 = icmp eq i64 %indvars.iv.next603.3, %wide.trip.count605
  br i1 %exitcond606.not.3, label %._crit_edge522, label %.lr.ph521, !llvm.loop !49

._crit_edge522:                                   ; preds = %.lr.ph521.prol.loopexit, %.lr.ph521, %middle.block796, %415
  %442 = trunc i64 %.0405.lcssa to i32
  %443 = tail call i32 @cpMulDgt_BNU32(ptr noundef %187, ptr noundef %176, i32 noundef %.0403543, i32 noundef %442) #5
  %444 = tail call i32 @cpSub_BNU32(ptr noundef %187, ptr noundef %187, ptr noundef %173, i32 noundef %.0403543) #5
  br label %506

445:                                              ; preds = %412
  %446 = icmp sgt i64 %.0408.lcssa, -1
  %447 = icmp slt i64 %.0405.lcssa, 1
  %or.cond14 = select i1 %446, i1 %447, i1 false
  %448 = trunc i64 %.0405.lcssa to i32
  br i1 %or.cond14, label %449, label %478

449:                                              ; preds = %445
  %450 = sub i32 0, %448
  %451 = tail call i32 @cpMulDgt_BNU32(ptr noundef %187, ptr noundef %176, i32 noundef %.0403543, i32 noundef %450) #5
  %452 = icmp sgt i32 %.0403543, 0
  br i1 %452, label %.lr.ph517.preheader, label %._crit_edge518

.lr.ph517.preheader:                              ; preds = %449
  %wide.trip.count600 = zext nneg i32 %.0403543 to i64
  %min.iters.check813 = icmp ult i32 %.0403543, 8
  %or.cond884 = select i1 %min.iters.check813, i1 true, i1 %diff.check810
  br i1 %or.cond884, label %.lr.ph517.preheader897, label %vector.ph814

vector.ph814:                                     ; preds = %.lr.ph517.preheader
  %n.vec816 = and i64 %wide.trip.count600, 2147483640
  br label %vector.body818

vector.body818:                                   ; preds = %vector.body818, %vector.ph814
  %index819 = phi i64 [ 0, %vector.ph814 ], [ %index.next822, %vector.body818 ]
  %453 = getelementptr inbounds i32, ptr %187, i64 %index819
  %454 = getelementptr inbounds i8, ptr %453, i64 16
  %wide.load820 = load <4 x i32>, ptr %453, align 4, !tbaa !31
  %wide.load821 = load <4 x i32>, ptr %454, align 4, !tbaa !31
  %455 = getelementptr inbounds i32, ptr %176, i64 %index819
  %456 = getelementptr inbounds i8, ptr %455, i64 16
  store <4 x i32> %wide.load820, ptr %455, align 4, !tbaa !31
  store <4 x i32> %wide.load821, ptr %456, align 4, !tbaa !31
  %index.next822 = add nuw i64 %index819, 8
  %457 = icmp eq i64 %index.next822, %n.vec816
  br i1 %457, label %middle.block811, label %vector.body818, !llvm.loop !50

middle.block811:                                  ; preds = %vector.body818
  %cmp.n823 = icmp eq i64 %n.vec816, %wide.trip.count600
  br i1 %cmp.n823, label %._crit_edge518, label %.lr.ph517.preheader897

.lr.ph517.preheader897:                           ; preds = %middle.block811, %.lr.ph517.preheader
  %indvars.iv597.ph = phi i64 [ 0, %.lr.ph517.preheader ], [ %n.vec816, %middle.block811 ]
  %xtraiter914 = and i64 %wide.trip.count600, 3
  %lcmp.mod915.not = icmp eq i64 %xtraiter914, 0
  br i1 %lcmp.mod915.not, label %.lr.ph517.prol.loopexit, label %.lr.ph517.prol

.lr.ph517.prol:                                   ; preds = %.lr.ph517.preheader897, %.lr.ph517.prol
  %indvars.iv597.prol = phi i64 [ %indvars.iv.next598.prol, %.lr.ph517.prol ], [ %indvars.iv597.ph, %.lr.ph517.preheader897 ]
  %prol.iter916 = phi i64 [ %prol.iter916.next, %.lr.ph517.prol ], [ 0, %.lr.ph517.preheader897 ]
  %458 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv597.prol
  %459 = load i32, ptr %458, align 4, !tbaa !31
  %460 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv597.prol
  store i32 %459, ptr %460, align 4, !tbaa !31
  %indvars.iv.next598.prol = add nuw nsw i64 %indvars.iv597.prol, 1
  %prol.iter916.next = add i64 %prol.iter916, 1
  %prol.iter916.cmp.not = icmp eq i64 %prol.iter916.next, %xtraiter914
  br i1 %prol.iter916.cmp.not, label %.lr.ph517.prol.loopexit, label %.lr.ph517.prol, !llvm.loop !51

.lr.ph517.prol.loopexit:                          ; preds = %.lr.ph517.prol, %.lr.ph517.preheader897
  %indvars.iv597.unr = phi i64 [ %indvars.iv597.ph, %.lr.ph517.preheader897 ], [ %indvars.iv.next598.prol, %.lr.ph517.prol ]
  %461 = sub nsw i64 %indvars.iv597.ph, %wide.trip.count600
  %462 = icmp ugt i64 %461, -4
  br i1 %462, label %._crit_edge518, label %.lr.ph517

.lr.ph517:                                        ; preds = %.lr.ph517.prol.loopexit, %.lr.ph517
  %indvars.iv597 = phi i64 [ %indvars.iv.next598.3, %.lr.ph517 ], [ %indvars.iv597.unr, %.lr.ph517.prol.loopexit ]
  %463 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv597
  %464 = load i32, ptr %463, align 4, !tbaa !31
  %465 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv597
  store i32 %464, ptr %465, align 4, !tbaa !31
  %indvars.iv.next598 = add nuw nsw i64 %indvars.iv597, 1
  %466 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next598
  %467 = load i32, ptr %466, align 4, !tbaa !31
  %468 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next598
  store i32 %467, ptr %468, align 4, !tbaa !31
  %indvars.iv.next598.1 = add nuw nsw i64 %indvars.iv597, 2
  %469 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next598.1
  %470 = load i32, ptr %469, align 4, !tbaa !31
  %471 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next598.1
  store i32 %470, ptr %471, align 4, !tbaa !31
  %indvars.iv.next598.2 = add nuw nsw i64 %indvars.iv597, 3
  %472 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next598.2
  %473 = load i32, ptr %472, align 4, !tbaa !31
  %474 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next598.2
  store i32 %473, ptr %474, align 4, !tbaa !31
  %indvars.iv.next598.3 = add nuw nsw i64 %indvars.iv597, 4
  %exitcond601.not.3 = icmp eq i64 %indvars.iv.next598.3, %wide.trip.count600
  br i1 %exitcond601.not.3, label %._crit_edge518, label %.lr.ph517, !llvm.loop !52

._crit_edge518:                                   ; preds = %.lr.ph517.prol.loopexit, %.lr.ph517, %middle.block811, %449
  %475 = trunc i64 %.0408.lcssa to i32
  %476 = tail call i32 @cpMulDgt_BNU32(ptr noundef %187, ptr noundef %173, i32 noundef %.0403543, i32 noundef %475) #5
  %477 = tail call i32 @cpSub_BNU32(ptr noundef %187, ptr noundef %187, ptr noundef %176, i32 noundef %.0403543) #5
  br label %506

478:                                              ; preds = %445
  %479 = tail call i32 @cpMulDgt_BNU32(ptr noundef %187, ptr noundef %176, i32 noundef %.0403543, i32 noundef %448) #5
  %480 = icmp sgt i32 %.0403543, 0
  br i1 %480, label %.lr.ph513.preheader, label %._crit_edge514

.lr.ph513.preheader:                              ; preds = %478
  %wide.trip.count595 = zext nneg i32 %.0403543 to i64
  %min.iters.check828 = icmp ult i32 %.0403543, 8
  %or.cond885 = select i1 %min.iters.check828, i1 true, i1 %diff.check825
  br i1 %or.cond885, label %.lr.ph513.preheader898, label %vector.ph829

vector.ph829:                                     ; preds = %.lr.ph513.preheader
  %n.vec831 = and i64 %wide.trip.count595, 2147483640
  br label %vector.body833

vector.body833:                                   ; preds = %vector.body833, %vector.ph829
  %index834 = phi i64 [ 0, %vector.ph829 ], [ %index.next837, %vector.body833 ]
  %481 = getelementptr inbounds i32, ptr %187, i64 %index834
  %482 = getelementptr inbounds i8, ptr %481, i64 16
  %wide.load835 = load <4 x i32>, ptr %481, align 4, !tbaa !31
  %wide.load836 = load <4 x i32>, ptr %482, align 4, !tbaa !31
  %483 = getelementptr inbounds i32, ptr %176, i64 %index834
  %484 = getelementptr inbounds i8, ptr %483, i64 16
  store <4 x i32> %wide.load835, ptr %483, align 4, !tbaa !31
  store <4 x i32> %wide.load836, ptr %484, align 4, !tbaa !31
  %index.next837 = add nuw i64 %index834, 8
  %485 = icmp eq i64 %index.next837, %n.vec831
  br i1 %485, label %middle.block826, label %vector.body833, !llvm.loop !53

middle.block826:                                  ; preds = %vector.body833
  %cmp.n838 = icmp eq i64 %n.vec831, %wide.trip.count595
  br i1 %cmp.n838, label %._crit_edge514, label %.lr.ph513.preheader898

.lr.ph513.preheader898:                           ; preds = %middle.block826, %.lr.ph513.preheader
  %indvars.iv592.ph = phi i64 [ 0, %.lr.ph513.preheader ], [ %n.vec831, %middle.block826 ]
  %xtraiter911 = and i64 %wide.trip.count595, 3
  %lcmp.mod912.not = icmp eq i64 %xtraiter911, 0
  br i1 %lcmp.mod912.not, label %.lr.ph513.prol.loopexit, label %.lr.ph513.prol

.lr.ph513.prol:                                   ; preds = %.lr.ph513.preheader898, %.lr.ph513.prol
  %indvars.iv592.prol = phi i64 [ %indvars.iv.next593.prol, %.lr.ph513.prol ], [ %indvars.iv592.ph, %.lr.ph513.preheader898 ]
  %prol.iter913 = phi i64 [ %prol.iter913.next, %.lr.ph513.prol ], [ 0, %.lr.ph513.preheader898 ]
  %486 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv592.prol
  %487 = load i32, ptr %486, align 4, !tbaa !31
  %488 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv592.prol
  store i32 %487, ptr %488, align 4, !tbaa !31
  %indvars.iv.next593.prol = add nuw nsw i64 %indvars.iv592.prol, 1
  %prol.iter913.next = add i64 %prol.iter913, 1
  %prol.iter913.cmp.not = icmp eq i64 %prol.iter913.next, %xtraiter911
  br i1 %prol.iter913.cmp.not, label %.lr.ph513.prol.loopexit, label %.lr.ph513.prol, !llvm.loop !54

.lr.ph513.prol.loopexit:                          ; preds = %.lr.ph513.prol, %.lr.ph513.preheader898
  %indvars.iv592.unr = phi i64 [ %indvars.iv592.ph, %.lr.ph513.preheader898 ], [ %indvars.iv.next593.prol, %.lr.ph513.prol ]
  %489 = sub nsw i64 %indvars.iv592.ph, %wide.trip.count595
  %490 = icmp ugt i64 %489, -4
  br i1 %490, label %._crit_edge514, label %.lr.ph513

.lr.ph513:                                        ; preds = %.lr.ph513.prol.loopexit, %.lr.ph513
  %indvars.iv592 = phi i64 [ %indvars.iv.next593.3, %.lr.ph513 ], [ %indvars.iv592.unr, %.lr.ph513.prol.loopexit ]
  %491 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv592
  %492 = load i32, ptr %491, align 4, !tbaa !31
  %493 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv592
  store i32 %492, ptr %493, align 4, !tbaa !31
  %indvars.iv.next593 = add nuw nsw i64 %indvars.iv592, 1
  %494 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next593
  %495 = load i32, ptr %494, align 4, !tbaa !31
  %496 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next593
  store i32 %495, ptr %496, align 4, !tbaa !31
  %indvars.iv.next593.1 = add nuw nsw i64 %indvars.iv592, 2
  %497 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next593.1
  %498 = load i32, ptr %497, align 4, !tbaa !31
  %499 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next593.1
  store i32 %498, ptr %499, align 4, !tbaa !31
  %indvars.iv.next593.2 = add nuw nsw i64 %indvars.iv592, 3
  %500 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next593.2
  %501 = load i32, ptr %500, align 4, !tbaa !31
  %502 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next593.2
  store i32 %501, ptr %502, align 4, !tbaa !31
  %indvars.iv.next593.3 = add nuw nsw i64 %indvars.iv592, 4
  %exitcond596.not.3 = icmp eq i64 %indvars.iv.next593.3, %wide.trip.count595
  br i1 %exitcond596.not.3, label %._crit_edge514, label %.lr.ph513, !llvm.loop !55

._crit_edge514:                                   ; preds = %.lr.ph513.prol.loopexit, %.lr.ph513, %middle.block826, %478
  %503 = trunc i64 %.0408.lcssa to i32
  %504 = tail call i32 @cpMulDgt_BNU32(ptr noundef %187, ptr noundef %173, i32 noundef %.0403543, i32 noundef %503) #5
  %505 = tail call i32 @cpAdd_BNU32(ptr noundef %187, ptr noundef %187, ptr noundef %176, i32 noundef %.0403543) #5
  br label %506

506:                                              ; preds = %._crit_edge518, %._crit_edge514, %._crit_edge522
  %507 = icmp sgt i32 %.0403543, 0
  br i1 %507, label %.lr.ph525.preheader, label %.loopexit

.lr.ph525.preheader:                              ; preds = %506
  %wide.trip.count610 = zext nneg i32 %.0403543 to i64
  %min.iters.check783 = icmp ult i32 %.0403543, 8
  %or.cond886 = select i1 %min.iters.check783, i1 true, i1 %diff.check780
  br i1 %or.cond886, label %.lr.ph525.preheader895, label %vector.ph784

.lr.ph525.preheader895:                           ; preds = %middle.block781, %.lr.ph525.preheader
  %indvars.iv607.ph = phi i64 [ 0, %.lr.ph525.preheader ], [ %n.vec786, %middle.block781 ]
  %xtraiter920 = and i64 %wide.trip.count610, 3
  %lcmp.mod921.not = icmp eq i64 %xtraiter920, 0
  br i1 %lcmp.mod921.not, label %.lr.ph525.prol.loopexit, label %.lr.ph525.prol

.lr.ph525.prol:                                   ; preds = %.lr.ph525.preheader895, %.lr.ph525.prol
  %indvars.iv607.prol = phi i64 [ %indvars.iv.next608.prol, %.lr.ph525.prol ], [ %indvars.iv607.ph, %.lr.ph525.preheader895 ]
  %prol.iter922 = phi i64 [ %prol.iter922.next, %.lr.ph525.prol ], [ 0, %.lr.ph525.preheader895 ]
  %508 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv607.prol
  %509 = load i32, ptr %508, align 4, !tbaa !31
  %510 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv607.prol
  store i32 %509, ptr %510, align 4, !tbaa !31
  %indvars.iv.next608.prol = add nuw nsw i64 %indvars.iv607.prol, 1
  %prol.iter922.next = add i64 %prol.iter922, 1
  %prol.iter922.cmp.not = icmp eq i64 %prol.iter922.next, %xtraiter920
  br i1 %prol.iter922.cmp.not, label %.lr.ph525.prol.loopexit, label %.lr.ph525.prol, !llvm.loop !56

.lr.ph525.prol.loopexit:                          ; preds = %.lr.ph525.prol, %.lr.ph525.preheader895
  %indvars.iv607.unr = phi i64 [ %indvars.iv607.ph, %.lr.ph525.preheader895 ], [ %indvars.iv.next608.prol, %.lr.ph525.prol ]
  %511 = sub nsw i64 %indvars.iv607.ph, %wide.trip.count610
  %512 = icmp ugt i64 %511, -4
  br i1 %512, label %.preheader466, label %.lr.ph525

vector.ph784:                                     ; preds = %.lr.ph525.preheader
  %n.vec786 = and i64 %wide.trip.count610, 2147483640
  br label %vector.body788

vector.body788:                                   ; preds = %vector.body788, %vector.ph784
  %index789 = phi i64 [ 0, %vector.ph784 ], [ %index.next792, %vector.body788 ]
  %513 = getelementptr inbounds i32, ptr %187, i64 %index789
  %514 = getelementptr inbounds i8, ptr %513, i64 16
  %wide.load790 = load <4 x i32>, ptr %513, align 4, !tbaa !31
  %wide.load791 = load <4 x i32>, ptr %514, align 4, !tbaa !31
  %515 = getelementptr inbounds i32, ptr %176, i64 %index789
  %516 = getelementptr inbounds i8, ptr %515, i64 16
  store <4 x i32> %wide.load790, ptr %515, align 4, !tbaa !31
  store <4 x i32> %wide.load791, ptr %516, align 4, !tbaa !31
  %index.next792 = add nuw i64 %index789, 8
  %517 = icmp eq i64 %index.next792, %n.vec786
  br i1 %517, label %middle.block781, label %vector.body788, !llvm.loop !57

middle.block781:                                  ; preds = %vector.body788
  %cmp.n793 = icmp eq i64 %n.vec786, %wide.trip.count610
  br i1 %cmp.n793, label %.preheader466, label %.lr.ph525.preheader895

.preheader466:                                    ; preds = %.lr.ph525.prol.loopexit, %.lr.ph525, %middle.block781
  br i1 %507, label %.lr.ph527.preheader, label %.loopexit

.lr.ph527.preheader:                              ; preds = %.preheader466
  %wide.trip.count615 = zext nneg i32 %.0403543 to i64
  %min.iters.check768 = icmp ult i32 %.0403543, 8
  %or.cond887 = select i1 %min.iters.check768, i1 true, i1 %diff.check765
  br i1 %or.cond887, label %.lr.ph527.preheader893, label %vector.ph769

.lr.ph527.preheader893:                           ; preds = %middle.block766, %.lr.ph527.preheader
  %indvars.iv612.ph = phi i64 [ 0, %.lr.ph527.preheader ], [ %n.vec771, %middle.block766 ]
  %xtraiter923 = and i64 %wide.trip.count610, 3
  %lcmp.mod924.not = icmp eq i64 %xtraiter923, 0
  br i1 %lcmp.mod924.not, label %.lr.ph527.prol.loopexit, label %.lr.ph527.prol

.lr.ph527.prol:                                   ; preds = %.lr.ph527.preheader893, %.lr.ph527.prol
  %indvars.iv612.prol = phi i64 [ %indvars.iv.next613.prol, %.lr.ph527.prol ], [ %indvars.iv612.ph, %.lr.ph527.preheader893 ]
  %prol.iter925 = phi i64 [ %prol.iter925.next, %.lr.ph527.prol ], [ 0, %.lr.ph527.preheader893 ]
  %518 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv612.prol
  %519 = load i32, ptr %518, align 4, !tbaa !31
  %520 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv612.prol
  store i32 %519, ptr %520, align 4, !tbaa !31
  %indvars.iv.next613.prol = add nuw nsw i64 %indvars.iv612.prol, 1
  %prol.iter925.next = add i64 %prol.iter925, 1
  %prol.iter925.cmp.not = icmp eq i64 %prol.iter925.next, %xtraiter923
  br i1 %prol.iter925.cmp.not, label %.lr.ph527.prol.loopexit, label %.lr.ph527.prol, !llvm.loop !58

.lr.ph527.prol.loopexit:                          ; preds = %.lr.ph527.prol, %.lr.ph527.preheader893
  %indvars.iv612.unr = phi i64 [ %indvars.iv612.ph, %.lr.ph527.preheader893 ], [ %indvars.iv.next613.prol, %.lr.ph527.prol ]
  %521 = sub nsw i64 %indvars.iv612.ph, %wide.trip.count610
  %522 = icmp ugt i64 %521, -4
  br i1 %522, label %.loopexit, label %.lr.ph527

vector.ph769:                                     ; preds = %.lr.ph527.preheader
  %n.vec771 = and i64 %wide.trip.count610, 2147483640
  br label %vector.body773

vector.body773:                                   ; preds = %vector.body773, %vector.ph769
  %index774 = phi i64 [ 0, %vector.ph769 ], [ %index.next777, %vector.body773 ]
  %523 = getelementptr inbounds i32, ptr %179, i64 %index774
  %524 = getelementptr inbounds i8, ptr %523, i64 16
  %wide.load775 = load <4 x i32>, ptr %523, align 4, !tbaa !31
  %wide.load776 = load <4 x i32>, ptr %524, align 4, !tbaa !31
  %525 = getelementptr inbounds i32, ptr %173, i64 %index774
  %526 = getelementptr inbounds i8, ptr %525, i64 16
  store <4 x i32> %wide.load775, ptr %525, align 4, !tbaa !31
  store <4 x i32> %wide.load776, ptr %526, align 4, !tbaa !31
  %index.next777 = add nuw i64 %index774, 8
  %527 = icmp eq i64 %index.next777, %n.vec771
  br i1 %527, label %middle.block766, label %vector.body773, !llvm.loop !59

middle.block766:                                  ; preds = %vector.body773
  %cmp.n778 = icmp eq i64 %n.vec771, %wide.trip.count610
  br i1 %cmp.n778, label %.loopexit, label %.lr.ph527.preheader893

.lr.ph525:                                        ; preds = %.lr.ph525.prol.loopexit, %.lr.ph525
  %indvars.iv607 = phi i64 [ %indvars.iv.next608.3, %.lr.ph525 ], [ %indvars.iv607.unr, %.lr.ph525.prol.loopexit ]
  %528 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv607
  %529 = load i32, ptr %528, align 4, !tbaa !31
  %530 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv607
  store i32 %529, ptr %530, align 4, !tbaa !31
  %indvars.iv.next608 = add nuw nsw i64 %indvars.iv607, 1
  %531 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next608
  %532 = load i32, ptr %531, align 4, !tbaa !31
  %533 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next608
  store i32 %532, ptr %533, align 4, !tbaa !31
  %indvars.iv.next608.1 = add nuw nsw i64 %indvars.iv607, 2
  %534 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next608.1
  %535 = load i32, ptr %534, align 4, !tbaa !31
  %536 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next608.1
  store i32 %535, ptr %536, align 4, !tbaa !31
  %indvars.iv.next608.2 = add nuw nsw i64 %indvars.iv607, 3
  %537 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next608.2
  %538 = load i32, ptr %537, align 4, !tbaa !31
  %539 = getelementptr inbounds i32, ptr %176, i64 %indvars.iv.next608.2
  store i32 %538, ptr %539, align 4, !tbaa !31
  %indvars.iv.next608.3 = add nuw nsw i64 %indvars.iv607, 4
  %exitcond611.not.3 = icmp eq i64 %indvars.iv.next608.3, %wide.trip.count610
  br i1 %exitcond611.not.3, label %.preheader466, label %.lr.ph525, !llvm.loop !60

.lr.ph527:                                        ; preds = %.lr.ph527.prol.loopexit, %.lr.ph527
  %indvars.iv612 = phi i64 [ %indvars.iv.next613.3, %.lr.ph527 ], [ %indvars.iv612.unr, %.lr.ph527.prol.loopexit ]
  %540 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv612
  %541 = load i32, ptr %540, align 4, !tbaa !31
  %542 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv612
  store i32 %541, ptr %542, align 4, !tbaa !31
  %indvars.iv.next613 = add nuw nsw i64 %indvars.iv612, 1
  %543 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv.next613
  %544 = load i32, ptr %543, align 4, !tbaa !31
  %545 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next613
  store i32 %544, ptr %545, align 4, !tbaa !31
  %indvars.iv.next613.1 = add nuw nsw i64 %indvars.iv612, 2
  %546 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv.next613.1
  %547 = load i32, ptr %546, align 4, !tbaa !31
  %548 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next613.1
  store i32 %547, ptr %548, align 4, !tbaa !31
  %indvars.iv.next613.2 = add nuw nsw i64 %indvars.iv612, 3
  %549 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv.next613.2
  %550 = load i32, ptr %549, align 4, !tbaa !31
  %551 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next613.2
  store i32 %550, ptr %551, align 4, !tbaa !31
  %indvars.iv.next613.3 = add nuw nsw i64 %indvars.iv612, 4
  %exitcond616.not.3 = icmp eq i64 %indvars.iv.next613.3, %wide.trip.count615
  br i1 %exitcond616.not.3, label %.loopexit, label %.lr.ph527, !llvm.loop !61

.loopexit:                                        ; preds = %.lr.ph527.prol.loopexit, %.lr.ph527, %.lr.ph540.prol.loopexit, %.lr.ph540, %middle.block766, %middle.block721, %506, %.preheader466, %.preheader461
  %552 = tail call i32 @cpFix_BNU32(ptr noundef %173, i32 noundef %.0401545)
  %553 = tail call i32 @cpFix_BNU32(ptr noundef %176, i32 noundef %.0403543)
  %spec.select669 = tail call i32 @llvm.smin.i32(i32 %553, i32 %552)
  %spec.select670 = tail call i32 @llvm.smax.i32(i32 %553, i32 %552)
  %554 = icmp eq i32 %spec.select669, 1
  br i1 %554, label %555, label %586

555:                                              ; preds = %.loopexit
  %556 = load i32, ptr %176, align 4, !tbaa !31
  %557 = icmp eq i32 %556, 0
  br i1 %557, label %.preheader460, label %586

.preheader460:                                    ; preds = %555
  br i1 %268, label %.lr.ph551.preheader, label %.preheader459

.lr.ph551.preheader:                              ; preds = %.preheader460
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %187, i8 0, i64 %277, i1 false), !tbaa !31
  br label %.preheader459

.preheader459:                                    ; preds = %.lr.ph551.preheader, %.preheader460
  %558 = icmp sgt i32 %spec.select670, 0
  br i1 %558, label %.lr.ph553.preheader, label %.critedge446

.lr.ph553.preheader:                              ; preds = %.preheader459
  %wide.trip.count651 = zext nneg i32 %spec.select670 to i64
  %min.iters.check843 = icmp ult i32 %spec.select670, 8
  %559 = sub i64 %188, %174
  %diff.check840 = icmp ult i64 %559, 32
  %or.cond888 = select i1 %min.iters.check843, i1 true, i1 %diff.check840
  br i1 %or.cond888, label %.lr.ph553.preheader889, label %vector.ph844

vector.ph844:                                     ; preds = %.lr.ph553.preheader
  %n.vec846 = and i64 %wide.trip.count651, 2147483640
  br label %vector.body848

vector.body848:                                   ; preds = %vector.body848, %vector.ph844
  %index849 = phi i64 [ 0, %vector.ph844 ], [ %index.next852, %vector.body848 ]
  %560 = getelementptr inbounds i32, ptr %173, i64 %index849
  %561 = getelementptr inbounds i8, ptr %560, i64 16
  %wide.load850 = load <4 x i32>, ptr %560, align 4, !tbaa !31
  %wide.load851 = load <4 x i32>, ptr %561, align 4, !tbaa !31
  %562 = getelementptr inbounds i32, ptr %187, i64 %index849
  %563 = getelementptr inbounds i8, ptr %562, i64 16
  store <4 x i32> %wide.load850, ptr %562, align 4, !tbaa !31
  store <4 x i32> %wide.load851, ptr %563, align 4, !tbaa !31
  %index.next852 = add nuw i64 %index849, 8
  %564 = icmp eq i64 %index.next852, %n.vec846
  br i1 %564, label %middle.block841, label %vector.body848, !llvm.loop !62

middle.block841:                                  ; preds = %vector.body848
  %cmp.n853 = icmp eq i64 %n.vec846, %wide.trip.count651
  br i1 %cmp.n853, label %.critedge446, label %.lr.ph553.preheader889

.lr.ph553.preheader889:                           ; preds = %middle.block841, %.lr.ph553.preheader
  %indvars.iv648.ph = phi i64 [ 0, %.lr.ph553.preheader ], [ %n.vec846, %middle.block841 ]
  %xtraiter935 = and i64 %wide.trip.count651, 3
  %lcmp.mod936.not = icmp eq i64 %xtraiter935, 0
  br i1 %lcmp.mod936.not, label %.lr.ph553.prol.loopexit, label %.lr.ph553.prol

.lr.ph553.prol:                                   ; preds = %.lr.ph553.preheader889, %.lr.ph553.prol
  %indvars.iv648.prol = phi i64 [ %indvars.iv.next649.prol, %.lr.ph553.prol ], [ %indvars.iv648.ph, %.lr.ph553.preheader889 ]
  %prol.iter937 = phi i64 [ %prol.iter937.next, %.lr.ph553.prol ], [ 0, %.lr.ph553.preheader889 ]
  %565 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv648.prol
  %566 = load i32, ptr %565, align 4, !tbaa !31
  %567 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv648.prol
  store i32 %566, ptr %567, align 4, !tbaa !31
  %indvars.iv.next649.prol = add nuw nsw i64 %indvars.iv648.prol, 1
  %prol.iter937.next = add i64 %prol.iter937, 1
  %prol.iter937.cmp.not = icmp eq i64 %prol.iter937.next, %xtraiter935
  br i1 %prol.iter937.cmp.not, label %.lr.ph553.prol.loopexit, label %.lr.ph553.prol, !llvm.loop !63

.lr.ph553.prol.loopexit:                          ; preds = %.lr.ph553.prol, %.lr.ph553.preheader889
  %indvars.iv648.unr = phi i64 [ %indvars.iv648.ph, %.lr.ph553.preheader889 ], [ %indvars.iv.next649.prol, %.lr.ph553.prol ]
  %568 = sub nsw i64 %indvars.iv648.ph, %wide.trip.count651
  %569 = icmp ugt i64 %568, -4
  br i1 %569, label %.critedge446, label %.lr.ph553

.lr.ph553:                                        ; preds = %.lr.ph553.prol.loopexit, %.lr.ph553
  %indvars.iv648 = phi i64 [ %indvars.iv.next649.3, %.lr.ph553 ], [ %indvars.iv648.unr, %.lr.ph553.prol.loopexit ]
  %570 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv648
  %571 = load i32, ptr %570, align 4, !tbaa !31
  %572 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv648
  store i32 %571, ptr %572, align 4, !tbaa !31
  %indvars.iv.next649 = add nuw nsw i64 %indvars.iv648, 1
  %573 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next649
  %574 = load i32, ptr %573, align 4, !tbaa !31
  %575 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next649
  store i32 %574, ptr %575, align 4, !tbaa !31
  %indvars.iv.next649.1 = add nuw nsw i64 %indvars.iv648, 2
  %576 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next649.1
  %577 = load i32, ptr %576, align 4, !tbaa !31
  %578 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next649.1
  store i32 %577, ptr %578, align 4, !tbaa !31
  %indvars.iv.next649.2 = add nuw nsw i64 %indvars.iv648, 3
  %579 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv.next649.2
  %580 = load i32, ptr %579, align 4, !tbaa !31
  %581 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv.next649.2
  store i32 %580, ptr %581, align 4, !tbaa !31
  %indvars.iv.next649.3 = add nuw nsw i64 %indvars.iv648, 4
  %exitcond652.not.3 = icmp eq i64 %indvars.iv.next649.3, %wide.trip.count651
  br i1 %exitcond652.not.3, label %.critedge446, label %.lr.ph553, !llvm.loop !64

.critedge446:                                     ; preds = %.lr.ph553.prol.loopexit, %.lr.ph553, %middle.block841, %.preheader459
  %582 = add nsw i32 %spec.select670, 1
  %583 = sdiv i32 %582, 2
  %584 = getelementptr inbounds i8, ptr %2, i64 8
  store i32 %583, ptr %584, align 8, !tbaa !12
  %585 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 1, ptr %585, align 4, !tbaa !23
  br label %.critedge

586:                                              ; preds = %.loopexit, %555
  %587 = icmp sgt i32 %spec.select670, 2
  br i1 %587, label %288, label %._crit_edge549, !llvm.loop !65

._crit_edge549:                                   ; preds = %586, %.preheader468
  %588 = load i64, ptr %173, align 8, !tbaa !14
  %589 = load i64, ptr %176, align 8, !tbaa !14
  %590 = tail call i64 @cpGcd_BNU(i64 noundef %588, i64 noundef %589) #5
  %591 = load ptr, ptr %186, align 8, !tbaa !13
  store i64 %590, ptr %591, align 8, !tbaa !14
  %592 = getelementptr inbounds i8, ptr %2, i64 8
  store i32 1, ptr %592, align 8, !tbaa !12
  %593 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 1, ptr %593, align 4, !tbaa !23
  br label %.critedge

.critedge:                                        ; preds = %._crit_edge, %._crit_edge479, %43, %.critedge446, %._crit_edge549, %160, %._crit_edge556, %25, %19, %13, %7, %3
  %.5 = phi i32 [ -8, %3 ], [ -13, %7 ], [ -13, %13 ], [ -13, %19 ], [ -11, %25 ], [ 0, %._crit_edge479 ], [ 0, %._crit_edge ], [ -5, %43 ], [ 0, %.critedge446 ], [ 0, %._crit_edge549 ], [ 0, %160 ], [ 0, %._crit_edge556 ]
  ret i32 %.5
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @IPP_UINT_PTR(ptr noundef) local_unnamed_addr #1

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

declare i64 @cpGcd_BNU(i64 noundef, i64 noundef) local_unnamed_addr #2

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

declare i32 @cpDiv_BNU32(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare i32 @cpMulDgt_BNU32(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare i32 @cpSub_BNU32(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare i32 @cpAdd_BNU32(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

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

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

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

attributes #0 = { 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 #1 = { inlinehint 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 = { "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_cpBigNum", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !10, i64 16, !10, i64 24}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 12}
!12 = !{!6, !7, i64 8}
!13 = !{!6, !10, i64 16}
!14 = !{!15, !15, i64 0}
!15 = !{!"long long", !8, i64 0}
!16 = distinct !{!16, !17, !18, !19}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!"llvm.loop.isvectorized", i32 1}
!19 = !{!"llvm.loop.unroll.runtime.disable"}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.unroll.disable"}
!22 = distinct !{!22, !17, !18}
!23 = !{!6, !7, i64 4}
!24 = distinct !{!24, !17, !18, !19}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !17, !18}
!27 = distinct !{!27, !17, !18, !19}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !17, !18}
!30 = !{!6, !10, i64 24}
!31 = !{!7, !7, i64 0}
!32 = distinct !{!32, !21}
!33 = distinct !{!33, !17, !18, !19}
!34 = distinct !{!34, !17, !18}
!35 = distinct !{!35, !21}
!36 = distinct !{!36, !17, !18, !19}
!37 = distinct !{!37, !17, !18}
!38 = distinct !{!38, !21}
!39 = distinct !{!39, !17, !18, !19}
!40 = distinct !{!40, !17, !18}
!41 = distinct !{!41, !21}
!42 = distinct !{!42, !17, !18, !19}
!43 = distinct !{!43, !17, !18}
!44 = distinct !{!44, !17, !18, !19}
!45 = distinct !{!45, !21}
!46 = distinct !{!46, !17, !18}
!47 = distinct !{!47, !17, !18, !19}
!48 = distinct !{!48, !21}
!49 = distinct !{!49, !17, !18}
!50 = distinct !{!50, !17, !18, !19}
!51 = distinct !{!51, !21}
!52 = distinct !{!52, !17, !18}
!53 = distinct !{!53, !17, !18, !19}
!54 = distinct !{!54, !21}
!55 = distinct !{!55, !17, !18}
!56 = distinct !{!56, !21}
!57 = distinct !{!57, !17, !18, !19}
!58 = distinct !{!58, !21}
!59 = distinct !{!59, !17, !18, !19}
!60 = distinct !{!60, !17, !18}
!61 = distinct !{!61, !17, !18}
!62 = distinct !{!62, !17, !18, !19}
!63 = distinct !{!63, !21}
!64 = distinct !{!64, !17, !18}
!65 = distinct !{!65, !17}


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