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

; 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 }
%struct._cpRSA_private_key = type { i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct._gsModEngine = type { ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, i64, ptr, ptr, ptr, ptr, i32, i32, ptr }

; Function Attrs: nounwind uwtable
define dso_local i32 @ippsRSA_GenerateKeys(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) #0 {
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i64, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %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 i32, align 4
  store ptr %0, ptr %12, align 8, !tbaa !5
  store ptr %1, ptr %13, align 8, !tbaa !5
  store ptr %2, ptr %14, align 8, !tbaa !5
  store ptr %3, ptr %15, align 8, !tbaa !5
  store ptr %4, ptr %16, align 8, !tbaa !5
  store ptr %5, ptr %17, align 8, !tbaa !5
  store i32 %6, ptr %18, align 4, !tbaa !9
  store ptr %7, ptr %19, align 8, !tbaa !5
  store ptr %8, ptr %20, align 8, !tbaa !5
  store ptr %9, ptr %21, align 8, !tbaa !5
  %64 = load ptr, ptr %12, align 8, !tbaa !5
  %65 = icmp eq ptr null, %64
  br i1 %65, label %66, label %67

66:                                               ; preds = %10
  store i32 -8, ptr %11, align 4
  br label %881

67:                                               ; preds = %10
  %68 = load ptr, ptr %12, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct._cpBigNum, ptr %68, i32 0, i32 0
  %70 = load i32, ptr %69, align 8, !tbaa !11
  %71 = load ptr, ptr %12, align 8, !tbaa !5
  %72 = call i64 @IPP_UINT_PTR(ptr noundef %71)
  %73 = trunc i64 %72 to i32
  %74 = xor i32 %70, %73
  %75 = icmp eq i32 %74, 1112098638
  br i1 %75, label %77, label %76

76:                                               ; preds = %67
  store i32 -13, ptr %11, align 4
  br label %881

77:                                               ; preds = %67
  %78 = load ptr, ptr %12, align 8, !tbaa !5
  %79 = call i32 @cpBN_tst(ptr noundef %78)
  %80 = icmp slt i32 0, %79
  br i1 %80, label %82, label %81

81:                                               ; preds = %77
  store i32 -11, ptr %11, align 4
  br label %881

82:                                               ; preds = %77
  %83 = load ptr, ptr %12, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct._cpBigNum, ptr %83, i32 0, i32 4
  %85 = load ptr, ptr %84, align 8, !tbaa !13
  %86 = getelementptr inbounds i64, ptr %85, i64 0
  %87 = load i64, ptr %86, align 8, !tbaa !14
  %88 = and i64 %87, 1
  %89 = icmp ne i64 %88, 0
  br i1 %89, label %91, label %90

90:                                               ; preds = %82
  store i32 -5, ptr %11, align 4
  br label %881

91:                                               ; preds = %82
  %92 = load ptr, ptr %12, align 8, !tbaa !5
  %93 = call ptr @cpBN_ThreeRef()
  %94 = call i32 @cpBN_cmp(ptr noundef %92, ptr noundef %93)
  %95 = icmp sgt i32 0, %94
  br i1 %95, label %96, label %97

96:                                               ; preds = %91
  store i32 -5, ptr %11, align 4
  br label %881

97:                                               ; preds = %91
  %98 = load ptr, ptr %13, align 8, !tbaa !5
  %99 = icmp eq ptr null, %98
  br i1 %99, label %100, label %101

100:                                              ; preds = %97
  store i32 -8, ptr %11, align 4
  br label %881

101:                                              ; preds = %97
  %102 = load ptr, ptr %13, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct._cpBigNum, ptr %102, i32 0, i32 0
  %104 = load i32, ptr %103, align 8, !tbaa !11
  %105 = load ptr, ptr %13, align 8, !tbaa !5
  %106 = call i64 @IPP_UINT_PTR(ptr noundef %105)
  %107 = trunc i64 %106 to i32
  %108 = xor i32 %104, %107
  %109 = icmp eq i32 %108, 1112098638
  br i1 %109, label %111, label %110

110:                                              ; preds = %101
  store i32 -13, ptr %11, align 4
  br label %881

111:                                              ; preds = %101
  %112 = load ptr, ptr %14, align 8, !tbaa !5
  %113 = icmp eq ptr null, %112
  br i1 %113, label %114, label %115

114:                                              ; preds = %111
  store i32 -8, ptr %11, align 4
  br label %881

115:                                              ; preds = %111
  %116 = load ptr, ptr %14, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct._cpBigNum, ptr %116, i32 0, i32 0
  %118 = load i32, ptr %117, align 8, !tbaa !11
  %119 = load ptr, ptr %14, align 8, !tbaa !5
  %120 = call i64 @IPP_UINT_PTR(ptr noundef %119)
  %121 = trunc i64 %120 to i32
  %122 = xor i32 %118, %121
  %123 = icmp eq i32 %122, 1112098638
  br i1 %123, label %125, label %124

124:                                              ; preds = %115
  store i32 -13, ptr %11, align 4
  br label %881

125:                                              ; preds = %115
  %126 = load ptr, ptr %14, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct._cpBigNum, ptr %126, i32 0, i32 3
  %128 = load i32, ptr %127, align 4, !tbaa !16
  %129 = load ptr, ptr %12, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct._cpBigNum, ptr %129, i32 0, i32 2
  %131 = load i32, ptr %130, align 8, !tbaa !17
  %132 = icmp slt i32 %128, %131
  br i1 %132, label %133, label %134

133:                                              ; preds = %125
  store i32 -6, ptr %11, align 4
  br label %881

134:                                              ; preds = %125
  %135 = load ptr, ptr %15, align 8, !tbaa !5
  %136 = icmp ne ptr %135, null
  br i1 %136, label %137, label %148

137:                                              ; preds = %134
  %138 = load ptr, ptr %15, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct._cpBigNum, ptr %138, i32 0, i32 0
  %140 = load i32, ptr %139, align 8, !tbaa !11
  %141 = load ptr, ptr %15, align 8, !tbaa !5
  %142 = call i64 @IPP_UINT_PTR(ptr noundef %141)
  %143 = trunc i64 %142 to i32
  %144 = xor i32 %140, %143
  %145 = icmp eq i32 %144, 1112098638
  br i1 %145, label %147, label %146

146:                                              ; preds = %137
  store i32 -13, ptr %11, align 4
  br label %881

147:                                              ; preds = %137
  br label %148

148:                                              ; preds = %147, %134
  %149 = load ptr, ptr %16, align 8, !tbaa !5
  %150 = icmp eq ptr null, %149
  br i1 %150, label %151, label %152

151:                                              ; preds = %148
  store i32 -8, ptr %11, align 4
  br label %881

152:                                              ; preds = %148
  %153 = load ptr, ptr %16, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct._cpRSA_private_key, ptr %153, i32 0, i32 0
  %155 = load i32, ptr %154, align 8, !tbaa !18
  %156 = load ptr, ptr %16, align 8, !tbaa !5
  %157 = call i64 @IPP_UINT_PTR(ptr noundef %156)
  %158 = trunc i64 %157 to i32
  %159 = xor i32 %155, %158
  %160 = icmp eq i32 %159, 1381187890
  br i1 %160, label %162, label %161

161:                                              ; preds = %152
  store i32 -13, ptr %11, align 4
  br label %881

162:                                              ; preds = %152
  %163 = load ptr, ptr %17, align 8, !tbaa !5
  %164 = icmp eq ptr null, %163
  br i1 %164, label %165, label %166

165:                                              ; preds = %162
  store i32 -8, ptr %11, align 4
  br label %881

166:                                              ; preds = %162
  %167 = load ptr, ptr %20, align 8, !tbaa !5
  %168 = icmp eq ptr null, %167
  br i1 %168, label %169, label %170

169:                                              ; preds = %166
  store i32 -8, ptr %11, align 4
  br label %881

170:                                              ; preds = %166
  %171 = load ptr, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %172 = load ptr, ptr %16, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct._cpRSA_private_key, ptr %172, i32 0, i32 5
  %174 = load i32, ptr %173, align 4, !tbaa !20
  store i32 %174, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %175 = load ptr, ptr %16, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct._cpRSA_private_key, ptr %175, i32 0, i32 6
  %177 = load i32, ptr %176, align 8, !tbaa !21
  store i32 %177, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %178 = load i32, ptr %22, align 4, !tbaa !9
  %179 = load i32, ptr %23, align 4, !tbaa !9
  %180 = add nsw i32 %178, %179
  store i32 %180, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %181 = load i32, ptr %18, align 4, !tbaa !9
  %182 = icmp slt i32 %181, 1
  br i1 %182, label %183, label %248

183:                                              ; preds = %170
  %184 = load i32, ptr %22, align 4, !tbaa !9
  %185 = icmp sge i32 %184, 1300
  br i1 %185, label %186, label %187

186:                                              ; preds = %183
  br label %246

187:                                              ; preds = %183
  %188 = load i32, ptr %22, align 4, !tbaa !9
  %189 = icmp sge i32 %188, 850
  br i1 %189, label %190, label %191

190:                                              ; preds = %187
  br label %244

191:                                              ; preds = %187
  %192 = load i32, ptr %22, align 4, !tbaa !9
  %193 = icmp sge i32 %192, 650
  br i1 %193, label %194, label %195

194:                                              ; preds = %191
  br label %242

195:                                              ; preds = %191
  %196 = load i32, ptr %22, align 4, !tbaa !9
  %197 = icmp sge i32 %196, 550
  br i1 %197, label %198, label %199

198:                                              ; preds = %195
  br label %240

199:                                              ; preds = %195
  %200 = load i32, ptr %22, align 4, !tbaa !9
  %201 = icmp sge i32 %200, 450
  br i1 %201, label %202, label %203

202:                                              ; preds = %199
  br label %238

203:                                              ; preds = %199
  %204 = load i32, ptr %22, align 4, !tbaa !9
  %205 = icmp sge i32 %204, 400
  br i1 %205, label %206, label %207

206:                                              ; preds = %203
  br label %236

207:                                              ; preds = %203
  %208 = load i32, ptr %22, align 4, !tbaa !9
  %209 = icmp sge i32 %208, 350
  br i1 %209, label %210, label %211

210:                                              ; preds = %207
  br label %234

211:                                              ; preds = %207
  %212 = load i32, ptr %22, align 4, !tbaa !9
  %213 = icmp sge i32 %212, 300
  br i1 %213, label %214, label %215

214:                                              ; preds = %211
  br label %232

215:                                              ; preds = %211
  %216 = load i32, ptr %22, align 4, !tbaa !9
  %217 = icmp sge i32 %216, 250
  br i1 %217, label %218, label %219

218:                                              ; preds = %215
  br label %230

219:                                              ; preds = %215
  %220 = load i32, ptr %22, align 4, !tbaa !9
  %221 = icmp sge i32 %220, 200
  br i1 %221, label %222, label %223

222:                                              ; preds = %219
  br label %228

223:                                              ; preds = %219
  %224 = load i32, ptr %22, align 4, !tbaa !9
  %225 = icmp sge i32 %224, 150
  %226 = zext i1 %225 to i64
  %227 = select i1 %225, i32 18, i32 27
  br label %228

228:                                              ; preds = %223, %222
  %229 = phi i32 [ 15, %222 ], [ %227, %223 ]
  br label %230

230:                                              ; preds = %228, %218
  %231 = phi i32 [ 12, %218 ], [ %229, %228 ]
  br label %232

232:                                              ; preds = %230, %214
  %233 = phi i32 [ 9, %214 ], [ %231, %230 ]
  br label %234

234:                                              ; preds = %232, %210
  %235 = phi i32 [ 8, %210 ], [ %233, %232 ]
  br label %236

236:                                              ; preds = %234, %206
  %237 = phi i32 [ 7, %206 ], [ %235, %234 ]
  br label %238

238:                                              ; preds = %236, %202
  %239 = phi i32 [ 6, %202 ], [ %237, %236 ]
  br label %240

240:                                              ; preds = %238, %198
  %241 = phi i32 [ 5, %198 ], [ %239, %238 ]
  br label %242

242:                                              ; preds = %240, %194
  %243 = phi i32 [ 4, %194 ], [ %241, %240 ]
  br label %244

244:                                              ; preds = %242, %190
  %245 = phi i32 [ 3, %190 ], [ %243, %242 ]
  br label %246

246:                                              ; preds = %244, %186
  %247 = phi i32 [ 2, %186 ], [ %245, %244 ]
  br label %250

248:                                              ; preds = %170
  %249 = load i32, ptr %18, align 4, !tbaa !9
  br label %250

250:                                              ; preds = %248, %246
  %251 = phi i32 [ %247, %246 ], [ %249, %248 ]
  store i32 %251, ptr %25, align 4, !tbaa !9
  %252 = load ptr, ptr %14, align 8, !tbaa !5
  %253 = load ptr, ptr %12, align 8, !tbaa !5
  %254 = call ptr @cpBN_copy(ptr noundef %252, ptr noundef %253)
  %255 = load ptr, ptr %13, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct._cpBigNum, ptr %255, i32 0, i32 3
  %257 = load i32, ptr %256, align 4, !tbaa !16
  %258 = load i32, ptr %24, align 4, !tbaa !9
  %259 = add nsw i32 %258, 64
  %260 = sub nsw i32 %259, 1
  %261 = sdiv i32 %260, 64
  %262 = icmp slt i32 %257, %261
  br i1 %262, label %263, label %264

263:                                              ; preds = %250
  store i32 -6, ptr %11, align 4
  store i32 1, ptr %26, align 4
  br label %880

264:                                              ; preds = %250
  %265 = load ptr, ptr %15, align 8, !tbaa !5
  %266 = icmp ne ptr %265, null
  br i1 %266, label %267, label %278

267:                                              ; preds = %264
  %268 = load ptr, ptr %15, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct._cpBigNum, ptr %268, i32 0, i32 3
  %270 = load i32, ptr %269, align 4, !tbaa !16
  %271 = load i32, ptr %24, align 4, !tbaa !9
  %272 = add nsw i32 %271, 64
  %273 = sub nsw i32 %272, 1
  %274 = sdiv i32 %273, 64
  %275 = icmp slt i32 %270, %274
  br i1 %275, label %276, label %277

276:                                              ; preds = %267
  store i32 -6, ptr %11, align 4
  store i32 1, ptr %26, align 4
  br label %880

277:                                              ; preds = %267
  br label %278

278:                                              ; preds = %277, %264
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  %279 = load ptr, ptr %17, align 8, !tbaa !5
  %280 = load ptr, ptr %17, align 8, !tbaa !5
  %281 = call i64 @IPP_INT_PTR(ptr noundef %280)
  %282 = and i64 %281, 7
  %283 = xor i64 %282, -1
  %284 = add nsw i64 %283, 1
  %285 = and i64 %284, 7
  %286 = getelementptr inbounds i8, ptr %279, i64 %285
  store ptr %286, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  %287 = load ptr, ptr %16, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct._cpRSA_private_key, ptr %287, i32 0, i32 11
  %289 = load ptr, ptr %288, align 8, !tbaa !22
  store ptr %289, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  %290 = load ptr, ptr %28, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct._gsModEngine, ptr %290, i32 0, i32 8
  %292 = load ptr, ptr %291, align 8, !tbaa !23
  store ptr %292, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  %293 = load ptr, ptr %16, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct._cpRSA_private_key, ptr %293, i32 0, i32 8
  %295 = load ptr, ptr %294, align 8, !tbaa !25
  store ptr %295, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  %296 = load ptr, ptr %16, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct._cpRSA_private_key, ptr %296, i32 0, i32 10
  %298 = load ptr, ptr %297, align 8, !tbaa !26
  store ptr %298, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %299 = load i32, ptr %22, align 4, !tbaa !9
  %300 = add nsw i32 %299, 64
  %301 = sub nsw i32 %300, 1
  %302 = sdiv i32 %301, 64
  store i32 %302, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  %303 = load ptr, ptr %16, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct._cpRSA_private_key, ptr %303, i32 0, i32 12
  %305 = load ptr, ptr %304, align 8, !tbaa !27
  store ptr %305, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  %306 = load ptr, ptr %33, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct._gsModEngine, ptr %306, i32 0, i32 8
  %308 = load ptr, ptr %307, align 8, !tbaa !23
  store ptr %308, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  %309 = load ptr, ptr %16, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct._cpRSA_private_key, ptr %309, i32 0, i32 9
  %311 = load ptr, ptr %310, align 8, !tbaa !28
  store ptr %311, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %312 = load i32, ptr %23, align 4, !tbaa !9
  %313 = add nsw i32 %312, 64
  %314 = sub nsw i32 %313, 1
  %315 = sdiv i32 %314, 64
  store i32 %315, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  %316 = load ptr, ptr %16, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct._cpRSA_private_key, ptr %316, i32 0, i32 13
  %318 = load ptr, ptr %317, align 8, !tbaa !29
  store ptr %318, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  %319 = load ptr, ptr %37, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct._gsModEngine, ptr %319, i32 0, i32 8
  %321 = load ptr, ptr %320, align 8, !tbaa !23
  store ptr %321, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  %322 = load i32, ptr %22, align 4, !tbaa !9
  %323 = load i32, ptr %23, align 4, !tbaa !9
  %324 = add nsw i32 %322, %323
  %325 = add nsw i32 %324, 64
  %326 = sub nsw i32 %325, 1
  %327 = sdiv i32 %326, 64
  store i32 %327, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  store i32 -1, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  %328 = load i32, ptr %22, align 4, !tbaa !9
  %329 = sub nsw i32 %328, 1
  %330 = and i32 %329, 63
  %331 = zext i32 %330 to i64
  %332 = shl i64 1, %331
  store i64 %332, ptr %41, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  %333 = load i32, ptr %22, align 4, !tbaa !9
  %334 = mul nsw i32 5, %333
  store i32 %334, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  store i32 0, ptr %44, align 4, !tbaa !9
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %335

335:                                              ; preds = %398, %278
  %336 = load i32, ptr %44, align 4, !tbaa !9
  %337 = load i32, ptr %42, align 4, !tbaa !9
  %338 = icmp slt i32 %336, %337
  br i1 %338, label %339, label %343

339:                                              ; preds = %335
  %340 = load i32, ptr %43, align 4, !tbaa !9
  %341 = icmp ne i32 %340, 0
  %342 = xor i1 %341, true
  br label %343

343:                                              ; preds = %339, %335
  %344 = phi i1 [ false, %335 ], [ %342, %339 ]
  br i1 %344, label %345, label %401

345:                                              ; preds = %343
  %346 = load ptr, ptr %29, align 8, !tbaa !5
  %347 = load i32, ptr %22, align 4, !tbaa !9
  %348 = load i64, ptr %41, align 8, !tbaa !14
  %349 = load ptr, ptr %20, align 8, !tbaa !5
  %350 = load ptr, ptr %21, align 8, !tbaa !5
  %351 = call i32 @cpPRNGenPattern(ptr noundef %346, i32 noundef %347, i64 noundef 1, i64 noundef %348, ptr noundef %349, ptr noundef %350)
  store i32 %351, ptr %40, align 4, !tbaa !9
  %352 = load i32, ptr %40, align 4, !tbaa !9
  %353 = icmp ne i32 1, %352
  br i1 %353, label %354, label %355

354:                                              ; preds = %345
  br label %401

355:                                              ; preds = %345
  %356 = load ptr, ptr %29, align 8, !tbaa !5
  %357 = load ptr, ptr %29, align 8, !tbaa !5
  %358 = load i32, ptr %32, align 4, !tbaa !9
  %359 = call i64 @cpDec_BNU(ptr noundef %356, ptr noundef %357, i32 noundef %358, i64 noundef 1)
  %360 = load ptr, ptr %14, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct._cpBigNum, ptr %360, i32 0, i32 4
  %362 = load ptr, ptr %361, align 8, !tbaa !13
  %363 = load ptr, ptr %14, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct._cpBigNum, ptr %363, i32 0, i32 2
  %365 = load i32, ptr %364, align 8, !tbaa !17
  %366 = load ptr, ptr %29, align 8, !tbaa !5
  %367 = load i32, ptr %32, align 4, !tbaa !9
  %368 = load ptr, ptr %27, align 8, !tbaa !5
  %369 = call i32 @cpIsCoPrime(ptr noundef %362, i32 noundef %365, ptr noundef %366, i32 noundef %367, ptr noundef %368)
  %370 = icmp eq i32 0, %369
  br i1 %370, label %371, label %372

371:                                              ; preds = %355
  br label %398

372:                                              ; preds = %355
  %373 = load ptr, ptr %29, align 8, !tbaa !5
  %374 = load ptr, ptr %29, align 8, !tbaa !5
  %375 = load i32, ptr %32, align 4, !tbaa !9
  %376 = call i64 @cpInc_BNU(ptr noundef %373, ptr noundef %374, i32 noundef %375, i64 noundef 1)
  %377 = load ptr, ptr %28, align 8, !tbaa !5
  %378 = load ptr, ptr %29, align 8, !tbaa !5
  %379 = load i32, ptr %22, align 4, !tbaa !9
  %380 = call ptr @gsModArithRSA()
  %381 = call i32 @gsModEngineInit(ptr noundef %377, ptr noundef %378, i32 noundef %379, i32 noundef 2, ptr noundef %380)
  %382 = load ptr, ptr %29, align 8, !tbaa !5
  %383 = load i32, ptr %22, align 4, !tbaa !9
  %384 = load i32, ptr %25, align 4, !tbaa !9
  %385 = load ptr, ptr %20, align 8, !tbaa !5
  %386 = load ptr, ptr %21, align 8, !tbaa !5
  %387 = load ptr, ptr %28, align 8, !tbaa !5
  %388 = load ptr, ptr %27, align 8, !tbaa !5
  %389 = call i32 @cpIsProbablyPrime(ptr noundef %382, i32 noundef %383, i32 noundef %384, ptr noundef %385, ptr noundef %386, ptr noundef %387, ptr noundef %388)
  store i32 %389, ptr %40, align 4, !tbaa !9
  %390 = load i32, ptr %40, align 4, !tbaa !9
  %391 = icmp sgt i32 0, %390
  br i1 %391, label %392, label %393

392:                                              ; preds = %372
  br label %401

393:                                              ; preds = %372
  %394 = load i32, ptr %40, align 4, !tbaa !9
  %395 = icmp eq i32 0, %394
  br i1 %395, label %396, label %397

396:                                              ; preds = %393
  br label %398

397:                                              ; preds = %393
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %398

398:                                              ; preds = %397, %396, %371
  %399 = load i32, ptr %44, align 4, !tbaa !9
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %44, align 4, !tbaa !9
  br label %335, !llvm.loop !30

401:                                              ; preds = %392, %354, %343
  %402 = load i32, ptr %43, align 4, !tbaa !9
  %403 = icmp ne i32 %402, 0
  br i1 %403, label %405, label %404

404:                                              ; preds = %401
  br label %809

405:                                              ; preds = %401
  %406 = load i32, ptr %23, align 4, !tbaa !9
  %407 = sub nsw i32 %406, 1
  %408 = and i32 %407, 63
  %409 = zext i32 %408 to i64
  %410 = shl i64 1, %409
  store i64 %410, ptr %41, align 8, !tbaa !14
  %411 = load i32, ptr %23, align 4, !tbaa !9
  %412 = mul nsw i32 5, %411
  store i32 %412, ptr %42, align 4, !tbaa !9
  store i32 0, ptr %44, align 4, !tbaa !9
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %413

413:                                              ; preds = %552, %405
  %414 = load i32, ptr %44, align 4, !tbaa !9
  %415 = load i32, ptr %42, align 4, !tbaa !9
  %416 = icmp slt i32 %414, %415
  br i1 %416, label %417, label %421

417:                                              ; preds = %413
  %418 = load i32, ptr %43, align 4, !tbaa !9
  %419 = icmp ne i32 %418, 0
  %420 = xor i1 %419, true
  br label %421

421:                                              ; preds = %417, %413
  %422 = phi i1 [ false, %413 ], [ %420, %417 ]
  br i1 %422, label %423, label %555

423:                                              ; preds = %421
  %424 = load ptr, ptr %34, align 8, !tbaa !5
  %425 = load i32, ptr %23, align 4, !tbaa !9
  %426 = load i64, ptr %41, align 8, !tbaa !14
  %427 = load ptr, ptr %20, align 8, !tbaa !5
  %428 = load ptr, ptr %21, align 8, !tbaa !5
  %429 = call i32 @cpPRNGenPattern(ptr noundef %424, i32 noundef %425, i64 noundef 1, i64 noundef %426, ptr noundef %427, ptr noundef %428)
  store i32 %429, ptr %40, align 4, !tbaa !9
  %430 = load i32, ptr %40, align 4, !tbaa !9
  %431 = icmp ne i32 1, %430
  br i1 %431, label %432, label %433

432:                                              ; preds = %423
  br label %555

433:                                              ; preds = %423
  %434 = load i32, ptr %22, align 4, !tbaa !9
  %435 = load i32, ptr %23, align 4, !tbaa !9
  %436 = icmp eq i32 %434, %435
  br i1 %436, label %437, label %489

437:                                              ; preds = %433
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  %438 = load ptr, ptr %29, align 8, !tbaa !5
  %439 = load i32, ptr %32, align 4, !tbaa !9
  %440 = load ptr, ptr %34, align 8, !tbaa !5
  %441 = load i32, ptr %32, align 4, !tbaa !9
  %442 = call i32 @cpCmp_BNU(ptr noundef %438, i32 noundef %439, ptr noundef %440, i32 noundef %441)
  store i32 %442, ptr %45, align 4, !tbaa !9
  %443 = load i32, ptr %45, align 4, !tbaa !9
  %444 = icmp eq i32 0, %443
  br i1 %444, label %445, label %446

445:                                              ; preds = %437
  store i32 8, ptr %26, align 4
  br label %486

446:                                              ; preds = %437
  %447 = load i32, ptr %45, align 4, !tbaa !9
  %448 = icmp slt i32 %447, 0
  br i1 %448, label %449, label %455

449:                                              ; preds = %446
  %450 = load ptr, ptr %27, align 8, !tbaa !5
  %451 = load ptr, ptr %34, align 8, !tbaa !5
  %452 = load ptr, ptr %29, align 8, !tbaa !5
  %453 = load i32, ptr %32, align 4, !tbaa !9
  %454 = call i64 @cpSub_BNU(ptr noundef %450, ptr noundef %451, ptr noundef %452, i32 noundef %453)
  br label %461

455:                                              ; preds = %446
  %456 = load ptr, ptr %27, align 8, !tbaa !5
  %457 = load ptr, ptr %29, align 8, !tbaa !5
  %458 = load ptr, ptr %34, align 8, !tbaa !5
  %459 = load i32, ptr %32, align 4, !tbaa !9
  %460 = call i64 @cpSub_BNU(ptr noundef %456, ptr noundef %457, ptr noundef %458, i32 noundef %459)
  br label %461

461:                                              ; preds = %455, %449
  %462 = load i32, ptr %22, align 4, !tbaa !9
  %463 = icmp sge i32 %462, 512
  br i1 %463, label %464, label %484

464:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  %465 = load i32, ptr %32, align 4, !tbaa !9
  %466 = mul nsw i32 %465, 64
  %467 = load ptr, ptr %27, align 8, !tbaa !5
  %468 = load i32, ptr %32, align 4, !tbaa !9
  %469 = sub nsw i32 %468, 1
  %470 = sext i32 %469 to i64
  %471 = getelementptr inbounds i64, ptr %467, i64 %470
  %472 = load i64, ptr %471, align 8, !tbaa !14
  %473 = call i32 @cpNLZ_BNU(i64 noundef %472)
  %474 = sub nsw i32 %466, %473
  store i32 %474, ptr %46, align 4, !tbaa !9
  %475 = load i32, ptr %46, align 4, !tbaa !9
  %476 = load i32, ptr %22, align 4, !tbaa !9
  %477 = sub nsw i32 %476, 100
  %478 = icmp slt i32 %475, %477
  br i1 %478, label %479, label %480

479:                                              ; preds = %464
  store i32 8, ptr %26, align 4
  br label %481

480:                                              ; preds = %464
  store i32 0, ptr %26, align 4
  br label %481

481:                                              ; preds = %480, %479
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  %482 = load i32, ptr %26, align 4
  switch i32 %482, label %486 [
    i32 0, label %483
  ]

483:                                              ; preds = %481
  br label %484

484:                                              ; preds = %483, %461
  br label %485

485:                                              ; preds = %484
  store i32 0, ptr %26, align 4
  br label %486

486:                                              ; preds = %485, %481, %445
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  %487 = load i32, ptr %26, align 4
  switch i32 %487, label %883 [
    i32 0, label %488
    i32 8, label %552
  ]

488:                                              ; preds = %486
  br label %489

489:                                              ; preds = %488, %433
  %490 = load ptr, ptr %38, align 8, !tbaa !5
  %491 = load ptr, ptr %29, align 8, !tbaa !5
  %492 = load i32, ptr %32, align 4, !tbaa !9
  %493 = load ptr, ptr %34, align 8, !tbaa !5
  %494 = load i32, ptr %36, align 4, !tbaa !9
  %495 = call i64 @cpMul_BNU_school(ptr noundef %490, ptr noundef %491, i32 noundef %492, ptr noundef %493, i32 noundef %494)
  %496 = load i32, ptr %24, align 4, !tbaa !9
  %497 = load i32, ptr %39, align 4, !tbaa !9
  %498 = mul nsw i32 %497, 64
  %499 = load ptr, ptr %38, align 8, !tbaa !5
  %500 = load i32, ptr %39, align 4, !tbaa !9
  %501 = sub nsw i32 %500, 1
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds i64, ptr %499, i64 %502
  %504 = load i64, ptr %503, align 8, !tbaa !14
  %505 = call i32 @cpNLZ_BNU(i64 noundef %504)
  %506 = sub nsw i32 %498, %505
  %507 = icmp ne i32 %496, %506
  br i1 %507, label %508, label %509

508:                                              ; preds = %489
  br label %552

509:                                              ; preds = %489
  %510 = load ptr, ptr %34, align 8, !tbaa !5
  %511 = load ptr, ptr %34, align 8, !tbaa !5
  %512 = load i32, ptr %36, align 4, !tbaa !9
  %513 = call i64 @cpDec_BNU(ptr noundef %510, ptr noundef %511, i32 noundef %512, i64 noundef 1)
  %514 = load ptr, ptr %14, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct._cpBigNum, ptr %514, i32 0, i32 4
  %516 = load ptr, ptr %515, align 8, !tbaa !13
  %517 = load ptr, ptr %14, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct._cpBigNum, ptr %517, i32 0, i32 2
  %519 = load i32, ptr %518, align 8, !tbaa !17
  %520 = load ptr, ptr %34, align 8, !tbaa !5
  %521 = load i32, ptr %36, align 4, !tbaa !9
  %522 = load ptr, ptr %27, align 8, !tbaa !5
  %523 = call i32 @cpIsCoPrime(ptr noundef %516, i32 noundef %519, ptr noundef %520, i32 noundef %521, ptr noundef %522)
  %524 = icmp eq i32 0, %523
  br i1 %524, label %525, label %526

525:                                              ; preds = %509
  br label %552

526:                                              ; preds = %509
  %527 = load ptr, ptr %34, align 8, !tbaa !5
  %528 = load ptr, ptr %34, align 8, !tbaa !5
  %529 = load i32, ptr %36, align 4, !tbaa !9
  %530 = call i64 @cpInc_BNU(ptr noundef %527, ptr noundef %528, i32 noundef %529, i64 noundef 1)
  %531 = load ptr, ptr %33, align 8, !tbaa !5
  %532 = load ptr, ptr %34, align 8, !tbaa !5
  %533 = load i32, ptr %23, align 4, !tbaa !9
  %534 = call ptr @gsModArithRSA()
  %535 = call i32 @gsModEngineInit(ptr noundef %531, ptr noundef %532, i32 noundef %533, i32 noundef 2, ptr noundef %534)
  %536 = load ptr, ptr %34, align 8, !tbaa !5
  %537 = load i32, ptr %23, align 4, !tbaa !9
  %538 = load i32, ptr %25, align 4, !tbaa !9
  %539 = load ptr, ptr %20, align 8, !tbaa !5
  %540 = load ptr, ptr %21, align 8, !tbaa !5
  %541 = load ptr, ptr %33, align 8, !tbaa !5
  %542 = load ptr, ptr %27, align 8, !tbaa !5
  %543 = call i32 @cpIsProbablyPrime(ptr noundef %536, i32 noundef %537, i32 noundef %538, ptr noundef %539, ptr noundef %540, ptr noundef %541, ptr noundef %542)
  store i32 %543, ptr %40, align 4, !tbaa !9
  %544 = load i32, ptr %40, align 4, !tbaa !9
  %545 = icmp sgt i32 0, %544
  br i1 %545, label %546, label %547

546:                                              ; preds = %526
  br label %555

547:                                              ; preds = %526
  %548 = load i32, ptr %40, align 4, !tbaa !9
  %549 = icmp eq i32 0, %548
  br i1 %549, label %550, label %551

550:                                              ; preds = %547
  br label %552

551:                                              ; preds = %547
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %552

552:                                              ; preds = %551, %550, %525, %508, %486
  %553 = load i32, ptr %44, align 4, !tbaa !9
  %554 = add nsw i32 %553, 1
  store i32 %554, ptr %44, align 4, !tbaa !9
  br label %413, !llvm.loop !32

555:                                              ; preds = %546, %432, %421
  %556 = load i32, ptr %43, align 4, !tbaa !9
  %557 = icmp ne i32 %556, 0
  br i1 %557, label %559, label %558

558:                                              ; preds = %555
  br label %809

559:                                              ; preds = %555
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #4
  %560 = load ptr, ptr %27, align 8, !tbaa !5
  store ptr %560, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #4
  %561 = load ptr, ptr %47, align 8, !tbaa !5
  %562 = load i32, ptr %39, align 4, !tbaa !9
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds i64, ptr %561, i64 %563
  %565 = getelementptr inbounds i64, ptr %564, i64 1
  store ptr %565, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #4
  %566 = load ptr, ptr %48, align 8, !tbaa !5
  %567 = load i32, ptr %39, align 4, !tbaa !9
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds i64, ptr %566, i64 %568
  %570 = getelementptr inbounds i64, ptr %569, i64 1
  store ptr %570, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #4
  %571 = load ptr, ptr %49, align 8, !tbaa !5
  %572 = load i32, ptr %39, align 4, !tbaa !9
  %573 = sext i32 %572 to i64
  %574 = getelementptr inbounds i64, ptr %571, i64 %573
  %575 = getelementptr inbounds i64, ptr %574, i64 1
  store ptr %575, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #4
  %576 = load ptr, ptr %29, align 8, !tbaa !5
  %577 = load ptr, ptr %29, align 8, !tbaa !5
  %578 = load i32, ptr %32, align 4, !tbaa !9
  %579 = call i64 @cpDec_BNU(ptr noundef %576, ptr noundef %577, i32 noundef %578, i64 noundef 1)
  %580 = load ptr, ptr %34, align 8, !tbaa !5
  %581 = load ptr, ptr %34, align 8, !tbaa !5
  %582 = load i32, ptr %36, align 4, !tbaa !9
  %583 = call i64 @cpDec_BNU(ptr noundef %580, ptr noundef %581, i32 noundef %582, i64 noundef 1)
  %584 = load ptr, ptr %49, align 8, !tbaa !5
  %585 = load ptr, ptr %29, align 8, !tbaa !5
  %586 = load i32, ptr %32, align 4, !tbaa !9
  %587 = load ptr, ptr %34, align 8, !tbaa !5
  %588 = load i32, ptr %36, align 4, !tbaa !9
  %589 = call i64 @cpMul_BNU_school(ptr noundef %584, ptr noundef %585, i32 noundef %586, ptr noundef %587, i32 noundef %588)
  %590 = load ptr, ptr %47, align 8, !tbaa !5
  %591 = load ptr, ptr %14, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct._cpBigNum, ptr %591, i32 0, i32 4
  %593 = load ptr, ptr %592, align 8, !tbaa !13
  %594 = load ptr, ptr %14, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct._cpBigNum, ptr %594, i32 0, i32 2
  %596 = load i32, ptr %595, align 8, !tbaa !17
  %597 = load ptr, ptr %49, align 8, !tbaa !5
  %598 = load i32, ptr %39, align 4, !tbaa !9
  %599 = load ptr, ptr %48, align 8, !tbaa !5
  %600 = load ptr, ptr %14, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct._cpBigNum, ptr %600, i32 0, i32 5
  %602 = load ptr, ptr %601, align 8, !tbaa !33
  %603 = load ptr, ptr %50, align 8, !tbaa !5
  %604 = call i32 @cpModInv_BNU(ptr noundef %590, ptr noundef %593, i32 noundef %596, ptr noundef %597, i32 noundef %598, ptr noundef %599, ptr noundef %602, ptr noundef %603)
  store i32 %604, ptr %51, align 4, !tbaa !9
  %605 = load ptr, ptr %15, align 8, !tbaa !5
  %606 = icmp ne ptr %605, null
  br i1 %606, label %607, label %612

607:                                              ; preds = %559
  %608 = load ptr, ptr %47, align 8, !tbaa !5
  %609 = load i32, ptr %51, align 4, !tbaa !9
  %610 = load ptr, ptr %15, align 8, !tbaa !5
  %611 = call ptr @BN_Set(ptr noundef %608, i32 noundef %609, ptr noundef %610)
  br label %612

612:                                              ; preds = %607, %559
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %613

613:                                              ; preds = %627, %612
  %614 = load i32, ptr %53, align 4, !tbaa !9
  %615 = load i32, ptr %51, align 4, !tbaa !9
  %616 = icmp slt i32 %614, %615
  br i1 %616, label %617, label %630

617:                                              ; preds = %613
  %618 = load ptr, ptr %47, align 8, !tbaa !5
  %619 = load i32, ptr %53, align 4, !tbaa !9
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds i64, ptr %618, i64 %620
  %622 = load i64, ptr %621, align 8, !tbaa !14
  %623 = load ptr, ptr %48, align 8, !tbaa !5
  %624 = load i32, ptr %53, align 4, !tbaa !9
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds i64, ptr %623, i64 %625
  store i64 %622, ptr %626, align 8, !tbaa !14
  br label %627

627:                                              ; preds = %617
  %628 = load i32, ptr %53, align 4, !tbaa !9
  %629 = add nsw i32 %628, 1
  store i32 %629, ptr %53, align 4, !tbaa !9
  br label %613, !llvm.loop !34

630:                                              ; preds = %613
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  %631 = load ptr, ptr %48, align 8, !tbaa !5
  %632 = load i32, ptr %51, align 4, !tbaa !9
  %633 = load ptr, ptr %29, align 8, !tbaa !5
  %634 = load i32, ptr %32, align 4, !tbaa !9
  %635 = call i32 @cpMod_BNU(ptr noundef %631, i32 noundef %632, ptr noundef %633, i32 noundef %634)
  store i32 %635, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %636

636:                                              ; preds = %650, %630
  %637 = load i32, ptr %54, align 4, !tbaa !9
  %638 = load i32, ptr %52, align 4, !tbaa !9
  %639 = icmp slt i32 %637, %638
  br i1 %639, label %640, label %653

640:                                              ; preds = %636
  %641 = load ptr, ptr %48, align 8, !tbaa !5
  %642 = load i32, ptr %54, align 4, !tbaa !9
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds i64, ptr %641, i64 %643
  %645 = load i64, ptr %644, align 8, !tbaa !14
  %646 = load ptr, ptr %30, align 8, !tbaa !5
  %647 = load i32, ptr %54, align 4, !tbaa !9
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds i64, ptr %646, i64 %648
  store i64 %645, ptr %649, align 8, !tbaa !14
  br label %650

650:                                              ; preds = %640
  %651 = load i32, ptr %54, align 4, !tbaa !9
  %652 = add nsw i32 %651, 1
  store i32 %652, ptr %54, align 4, !tbaa !9
  br label %636, !llvm.loop !35

653:                                              ; preds = %636
  br label %654

654:                                              ; preds = %663, %653
  %655 = load i32, ptr %54, align 4, !tbaa !9
  %656 = load i32, ptr %32, align 4, !tbaa !9
  %657 = icmp slt i32 %655, %656
  br i1 %657, label %658, label %666

658:                                              ; preds = %654
  %659 = load ptr, ptr %30, align 8, !tbaa !5
  %660 = load i32, ptr %54, align 4, !tbaa !9
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds i64, ptr %659, i64 %661
  store i64 0, ptr %662, align 8, !tbaa !14
  br label %663

663:                                              ; preds = %658
  %664 = load i32, ptr %54, align 4, !tbaa !9
  %665 = add nsw i32 %664, 1
  store i32 %665, ptr %54, align 4, !tbaa !9
  br label %654, !llvm.loop !36

666:                                              ; preds = %654
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %667

667:                                              ; preds = %681, %666
  %668 = load i32, ptr %55, align 4, !tbaa !9
  %669 = load i32, ptr %51, align 4, !tbaa !9
  %670 = icmp slt i32 %668, %669
  br i1 %670, label %671, label %684

671:                                              ; preds = %667
  %672 = load ptr, ptr %47, align 8, !tbaa !5
  %673 = load i32, ptr %55, align 4, !tbaa !9
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds i64, ptr %672, i64 %674
  %676 = load i64, ptr %675, align 8, !tbaa !14
  %677 = load ptr, ptr %49, align 8, !tbaa !5
  %678 = load i32, ptr %55, align 4, !tbaa !9
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds i64, ptr %677, i64 %679
  store i64 %676, ptr %680, align 8, !tbaa !14
  br label %681

681:                                              ; preds = %671
  %682 = load i32, ptr %55, align 4, !tbaa !9
  %683 = add nsw i32 %682, 1
  store i32 %683, ptr %55, align 4, !tbaa !9
  br label %667, !llvm.loop !37

684:                                              ; preds = %667
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  %685 = load ptr, ptr %49, align 8, !tbaa !5
  %686 = load i32, ptr %51, align 4, !tbaa !9
  %687 = load ptr, ptr %34, align 8, !tbaa !5
  %688 = load i32, ptr %36, align 4, !tbaa !9
  %689 = call i32 @cpMod_BNU(ptr noundef %685, i32 noundef %686, ptr noundef %687, i32 noundef %688)
  store i32 %689, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #4
  store i32 0, ptr %56, align 4, !tbaa !9
  br label %690

690:                                              ; preds = %704, %684
  %691 = load i32, ptr %56, align 4, !tbaa !9
  %692 = load i32, ptr %52, align 4, !tbaa !9
  %693 = icmp slt i32 %691, %692
  br i1 %693, label %694, label %707

694:                                              ; preds = %690
  %695 = load ptr, ptr %49, align 8, !tbaa !5
  %696 = load i32, ptr %56, align 4, !tbaa !9
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds i64, ptr %695, i64 %697
  %699 = load i64, ptr %698, align 8, !tbaa !14
  %700 = load ptr, ptr %35, align 8, !tbaa !5
  %701 = load i32, ptr %56, align 4, !tbaa !9
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds i64, ptr %700, i64 %702
  store i64 %699, ptr %703, align 8, !tbaa !14
  br label %704

704:                                              ; preds = %694
  %705 = load i32, ptr %56, align 4, !tbaa !9
  %706 = add nsw i32 %705, 1
  store i32 %706, ptr %56, align 4, !tbaa !9
  br label %690, !llvm.loop !38

707:                                              ; preds = %690
  br label %708

708:                                              ; preds = %717, %707
  %709 = load i32, ptr %56, align 4, !tbaa !9
  %710 = load i32, ptr %36, align 4, !tbaa !9
  %711 = icmp slt i32 %709, %710
  br i1 %711, label %712, label %720

712:                                              ; preds = %708
  %713 = load ptr, ptr %35, align 8, !tbaa !5
  %714 = load i32, ptr %56, align 4, !tbaa !9
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds i64, ptr %713, i64 %715
  store i64 0, ptr %716, align 8, !tbaa !14
  br label %717

717:                                              ; preds = %712
  %718 = load i32, ptr %56, align 4, !tbaa !9
  %719 = add nsw i32 %718, 1
  store i32 %719, ptr %56, align 4, !tbaa !9
  br label %708, !llvm.loop !39

720:                                              ; preds = %708
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  %721 = load ptr, ptr %29, align 8, !tbaa !5
  %722 = getelementptr inbounds i64, ptr %721, i64 0
  %723 = load i64, ptr %722, align 8, !tbaa !14
  %724 = add i64 %723, 1
  store i64 %724, ptr %722, align 8, !tbaa !14
  %725 = load ptr, ptr %34, align 8, !tbaa !5
  %726 = getelementptr inbounds i64, ptr %725, i64 0
  %727 = load i64, ptr %726, align 8, !tbaa !14
  %728 = add i64 %727, 1
  store i64 %728, ptr %726, align 8, !tbaa !14
  %729 = load ptr, ptr %28, align 8, !tbaa !5
  %730 = load ptr, ptr %29, align 8, !tbaa !5
  %731 = load i32, ptr %22, align 4, !tbaa !9
  %732 = call ptr @gsModArithRSA()
  %733 = call i32 @gsModEngineInit(ptr noundef %729, ptr noundef %730, i32 noundef %731, i32 noundef 2, ptr noundef %732)
  %734 = load ptr, ptr %33, align 8, !tbaa !5
  %735 = load ptr, ptr %34, align 8, !tbaa !5
  %736 = load i32, ptr %23, align 4, !tbaa !9
  %737 = call ptr @gsModArithRSA()
  %738 = call i32 @gsModEngineInit(ptr noundef %734, ptr noundef %735, i32 noundef %736, i32 noundef 2, ptr noundef %737)
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #4
  store i32 0, ptr %57, align 4, !tbaa !9
  br label %739

739:                                              ; preds = %753, %720
  %740 = load i32, ptr %57, align 4, !tbaa !9
  %741 = load i32, ptr %32, align 4, !tbaa !9
  %742 = icmp slt i32 %740, %741
  br i1 %742, label %743, label %756

743:                                              ; preds = %739
  %744 = load ptr, ptr %29, align 8, !tbaa !5
  %745 = load i32, ptr %57, align 4, !tbaa !9
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds i64, ptr %744, i64 %746
  %748 = load i64, ptr %747, align 8, !tbaa !14
  %749 = load ptr, ptr %50, align 8, !tbaa !5
  %750 = load i32, ptr %57, align 4, !tbaa !9
  %751 = sext i32 %750 to i64
  %752 = getelementptr inbounds i64, ptr %749, i64 %751
  store i64 %748, ptr %752, align 8, !tbaa !14
  br label %753

753:                                              ; preds = %743
  %754 = load i32, ptr %57, align 4, !tbaa !9
  %755 = add nsw i32 %754, 1
  store i32 %755, ptr %57, align 4, !tbaa !9
  br label %739, !llvm.loop !40

756:                                              ; preds = %739
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  %757 = load ptr, ptr %31, align 8, !tbaa !5
  %758 = load ptr, ptr %34, align 8, !tbaa !5
  %759 = load i32, ptr %36, align 4, !tbaa !9
  %760 = load ptr, ptr %50, align 8, !tbaa !5
  %761 = load i32, ptr %32, align 4, !tbaa !9
  %762 = load ptr, ptr %47, align 8, !tbaa !5
  %763 = load ptr, ptr %48, align 8, !tbaa !5
  %764 = load ptr, ptr %49, align 8, !tbaa !5
  %765 = call i32 @cpModInv_BNU(ptr noundef %757, ptr noundef %758, i32 noundef %759, ptr noundef %760, i32 noundef %761, ptr noundef %762, ptr noundef %763, ptr noundef %764)
  store i32 %765, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  %766 = load i32, ptr %52, align 4, !tbaa !9
  store i32 %766, ptr %58, align 4, !tbaa !9
  br label %767

767:                                              ; preds = %776, %756
  %768 = load i32, ptr %58, align 4, !tbaa !9
  %769 = load i32, ptr %32, align 4, !tbaa !9
  %770 = icmp slt i32 %768, %769
  br i1 %770, label %771, label %779

771:                                              ; preds = %767
  %772 = load ptr, ptr %31, align 8, !tbaa !5
  %773 = load i32, ptr %58, align 4, !tbaa !9
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds i64, ptr %772, i64 %774
  store i64 0, ptr %775, align 8, !tbaa !14
  br label %776

776:                                              ; preds = %771
  %777 = load i32, ptr %58, align 4, !tbaa !9
  %778 = add nsw i32 %777, 1
  store i32 %778, ptr %58, align 4, !tbaa !9
  br label %767, !llvm.loop !41

779:                                              ; preds = %767
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  %780 = load ptr, ptr %38, align 8, !tbaa !5
  %781 = load ptr, ptr %29, align 8, !tbaa !5
  %782 = load i32, ptr %32, align 4, !tbaa !9
  %783 = load ptr, ptr %34, align 8, !tbaa !5
  %784 = load i32, ptr %36, align 4, !tbaa !9
  %785 = call i64 @cpMul_BNU_school(ptr noundef %780, ptr noundef %781, i32 noundef %782, ptr noundef %783, i32 noundef %784)
  %786 = load ptr, ptr %37, align 8, !tbaa !5
  %787 = load ptr, ptr %38, align 8, !tbaa !5
  %788 = load i32, ptr %22, align 4, !tbaa !9
  %789 = load i32, ptr %23, align 4, !tbaa !9
  %790 = add nsw i32 %788, %789
  %791 = call ptr @gsModArithRSA()
  %792 = call i32 @gsModEngineInit(ptr noundef %786, ptr noundef %787, i32 noundef %790, i32 noundef 2, ptr noundef %791)
  %793 = load ptr, ptr %38, align 8, !tbaa !5
  %794 = load i32, ptr %39, align 4, !tbaa !9
  %795 = load ptr, ptr %13, align 8, !tbaa !5
  %796 = call ptr @BN_Set(ptr noundef %793, i32 noundef %794, ptr noundef %795)
  %797 = load i32, ptr %39, align 4, !tbaa !9
  %798 = mul nsw i32 %797, 64
  %799 = load ptr, ptr %38, align 8, !tbaa !5
  %800 = load i32, ptr %39, align 4, !tbaa !9
  %801 = sub nsw i32 %800, 1
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds i64, ptr %799, i64 %802
  %804 = load i64, ptr %803, align 8, !tbaa !14
  %805 = call i32 @cpNLZ_BNU(i64 noundef %804)
  %806 = sub nsw i32 %798, %805
  %807 = load ptr, ptr %16, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct._cpRSA_private_key, ptr %807, i32 0, i32 3
  store i32 %806, ptr %808, align 4, !tbaa !42
  store i32 1, ptr %40, align 4, !tbaa !9
  store i32 0, ptr %11, align 4
  store i32 1, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  br label %879

809:                                              ; preds = %558, %404
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #4
  store i32 0, ptr %59, align 4, !tbaa !9
  br label %810

810:                                              ; preds = %819, %809
  %811 = load i32, ptr %59, align 4, !tbaa !9
  %812 = load i32, ptr %32, align 4, !tbaa !9
  %813 = icmp slt i32 %811, %812
  br i1 %813, label %814, label %822

814:                                              ; preds = %810
  %815 = load ptr, ptr %29, align 8, !tbaa !5
  %816 = load i32, ptr %59, align 4, !tbaa !9
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds i64, ptr %815, i64 %817
  store i64 0, ptr %818, align 8, !tbaa !14
  br label %819

819:                                              ; preds = %814
  %820 = load i32, ptr %59, align 4, !tbaa !9
  %821 = add nsw i32 %820, 1
  store i32 %821, ptr %59, align 4, !tbaa !9
  br label %810, !llvm.loop !43

822:                                              ; preds = %810
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #4
  store i32 0, ptr %60, align 4, !tbaa !9
  br label %823

823:                                              ; preds = %832, %822
  %824 = load i32, ptr %60, align 4, !tbaa !9
  %825 = load i32, ptr %36, align 4, !tbaa !9
  %826 = icmp slt i32 %824, %825
  br i1 %826, label %827, label %835

827:                                              ; preds = %823
  %828 = load ptr, ptr %34, align 8, !tbaa !5
  %829 = load i32, ptr %60, align 4, !tbaa !9
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds i64, ptr %828, i64 %830
  store i64 0, ptr %831, align 8, !tbaa !14
  br label %832

832:                                              ; preds = %827
  %833 = load i32, ptr %60, align 4, !tbaa !9
  %834 = add nsw i32 %833, 1
  store i32 %834, ptr %60, align 4, !tbaa !9
  br label %823, !llvm.loop !44

835:                                              ; preds = %823
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #4
  store i32 0, ptr %61, align 4, !tbaa !9
  br label %836

836:                                              ; preds = %845, %835
  %837 = load i32, ptr %61, align 4, !tbaa !9
  %838 = load i32, ptr %32, align 4, !tbaa !9
  %839 = icmp slt i32 %837, %838
  br i1 %839, label %840, label %848

840:                                              ; preds = %836
  %841 = load ptr, ptr %30, align 8, !tbaa !5
  %842 = load i32, ptr %61, align 4, !tbaa !9
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds i64, ptr %841, i64 %843
  store i64 0, ptr %844, align 8, !tbaa !14
  br label %845

845:                                              ; preds = %840
  %846 = load i32, ptr %61, align 4, !tbaa !9
  %847 = add nsw i32 %846, 1
  store i32 %847, ptr %61, align 4, !tbaa !9
  br label %836, !llvm.loop !45

848:                                              ; preds = %836
  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 !9
  br label %849

849:                                              ; preds = %858, %848
  %850 = load i32, ptr %62, align 4, !tbaa !9
  %851 = load i32, ptr %36, align 4, !tbaa !9
  %852 = icmp slt i32 %850, %851
  br i1 %852, label %853, label %861

853:                                              ; preds = %849
  %854 = load ptr, ptr %35, align 8, !tbaa !5
  %855 = load i32, ptr %62, align 4, !tbaa !9
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds i64, ptr %854, i64 %856
  store i64 0, ptr %857, align 8, !tbaa !14
  br label %858

858:                                              ; preds = %853
  %859 = load i32, ptr %62, align 4, !tbaa !9
  %860 = add nsw i32 %859, 1
  store i32 %860, ptr %62, align 4, !tbaa !9
  br label %849, !llvm.loop !46

861:                                              ; preds = %849
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #4
  store i32 0, ptr %63, align 4, !tbaa !9
  br label %862

862:                                              ; preds = %871, %861
  %863 = load i32, ptr %63, align 4, !tbaa !9
  %864 = load i32, ptr %32, align 4, !tbaa !9
  %865 = icmp slt i32 %863, %864
  br i1 %865, label %866, label %874

866:                                              ; preds = %862
  %867 = load ptr, ptr %31, align 8, !tbaa !5
  %868 = load i32, ptr %63, align 4, !tbaa !9
  %869 = sext i32 %868 to i64
  %870 = getelementptr inbounds i64, ptr %867, i64 %869
  store i64 0, ptr %870, align 8, !tbaa !14
  br label %871

871:                                              ; preds = %866
  %872 = load i32, ptr %63, align 4, !tbaa !9
  %873 = add nsw i32 %872, 1
  store i32 %873, ptr %63, align 4, !tbaa !9
  br label %862, !llvm.loop !47

874:                                              ; preds = %862
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #4
  %875 = load i32, ptr %40, align 4, !tbaa !9
  %876 = icmp slt i32 %875, 0
  %877 = zext i1 %876 to i64
  %878 = select i1 %876, i32 -2, i32 25
  store i32 %878, ptr %11, align 4
  store i32 1, ptr %26, align 4
  br label %879

879:                                              ; preds = %874, %779
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  br label %880

880:                                              ; preds = %879, %276, %263
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  br label %881

881:                                              ; preds = %880, %169, %165, %161, %151, %146, %133, %124, %114, %110, %100, %96, %90, %81, %76, %66
  %882 = load i32, ptr %11, align 4
  ret i32 %882

883:                                              ; preds = %486
  unreachable
}

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

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

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

declare ptr @cpBN_ThreeRef() #2

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

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

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

declare i32 @cpPRNGenPattern(ptr noundef, i32 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) #2

declare i64 @cpDec_BNU(ptr noundef, ptr noundef, i32 noundef, i64 noundef) #2

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

declare i64 @cpInc_BNU(ptr noundef, ptr noundef, i32 noundef, i64 noundef) #2

declare i32 @gsModEngineInit(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #2

declare ptr @gsModArithRSA() #2

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

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

declare i64 @cpSub_BNU(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #2

declare i32 @cpNLZ_BNU(i64 noundef) #2

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

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

declare i32 @cpModInv_BNU(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

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 willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind }

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

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


; 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, 26) i32 @ippsRSA_GenerateKeys(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, i32 noundef %6, ptr nocapture noundef readnone %7, ptr noundef %8, ptr noundef %9) local_unnamed_addr #0 {
  %11 = ptrtoint ptr %5 to i64
  %12 = icmp eq ptr %0, null
  br i1 %12, label %445, label %13

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

19:                                               ; preds = %13
  %20 = tail call i32 @cpBN_tst(ptr noundef nonnull %0)
  %21 = icmp sgt i32 %20, 0
  br i1 %21, label %22, label %445

22:                                               ; preds = %19
  %23 = getelementptr inbounds i8, ptr %0, i64 16
  %24 = load ptr, ptr %23, align 8, !tbaa !11
  %25 = load i64, ptr %24, align 8, !tbaa !12
  %26 = and i64 %25, 1
  %.not = icmp eq i64 %26, 0
  br i1 %.not, label %445, label %27

27:                                               ; preds = %22
  %28 = tail call ptr @cpBN_ThreeRef() #4
  %29 = tail call i32 @cpBN_cmp(ptr noundef nonnull %0, ptr noundef %28)
  %30 = icmp slt i32 %29, 0
  br i1 %30, label %445, label %31

31:                                               ; preds = %27
  %32 = icmp eq ptr %1, null
  br i1 %32, label %445, label %33

33:                                               ; preds = %31
  %34 = load i32, ptr %1, align 8, !tbaa !5
  %35 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %1)
  %36 = trunc i64 %35 to i32
  %37 = xor i32 %34, %36
  %38 = icmp eq i32 %37, 1112098638
  br i1 %38, label %39, label %445

39:                                               ; preds = %33
  %40 = icmp eq ptr %2, null
  br i1 %40, label %445, label %41

41:                                               ; preds = %39
  %42 = load i32, ptr %2, align 8, !tbaa !5
  %43 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %2)
  %44 = trunc i64 %43 to i32
  %45 = xor i32 %42, %44
  %46 = icmp eq i32 %45, 1112098638
  br i1 %46, label %47, label %445

47:                                               ; preds = %41
  %48 = getelementptr inbounds i8, ptr %2, i64 12
  %49 = load i32, ptr %48, align 4, !tbaa !14
  %50 = getelementptr inbounds i8, ptr %0, i64 8
  %51 = load i32, ptr %50, align 8, !tbaa !15
  %52 = icmp slt i32 %49, %51
  br i1 %52, label %445, label %53

53:                                               ; preds = %47
  %.not364 = icmp eq ptr %3, null
  br i1 %.not364, label %60, label %54

54:                                               ; preds = %53
  %55 = load i32, ptr %3, align 8, !tbaa !5
  %56 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %3)
  %57 = trunc i64 %56 to i32
  %58 = xor i32 %55, %57
  %59 = icmp eq i32 %58, 1112098638
  br i1 %59, label %60, label %445

60:                                               ; preds = %54, %53
  %61 = icmp eq ptr %4, null
  br i1 %61, label %445, label %62

62:                                               ; preds = %60
  %63 = load i32, ptr %4, align 8, !tbaa !16
  %64 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %4)
  %65 = trunc i64 %64 to i32
  %66 = xor i32 %63, %65
  %67 = icmp eq i32 %66, 1381187890
  br i1 %67, label %68, label %445

68:                                               ; preds = %62
  %69 = icmp eq ptr %5, null
  %70 = icmp eq ptr %8, null
  %or.cond = or i1 %69, %70
  br i1 %or.cond, label %445, label %71

71:                                               ; preds = %68
  %72 = getelementptr inbounds i8, ptr %4, i64 20
  %73 = load i32, ptr %72, align 4, !tbaa !18
  %74 = getelementptr inbounds i8, ptr %4, i64 24
  %75 = load i32, ptr %74, align 8, !tbaa !19
  %76 = add nsw i32 %75, %73
  %77 = icmp slt i32 %6, 1
  br i1 %77, label %78, label %101

78:                                               ; preds = %71
  %79 = icmp sgt i32 %73, 1299
  br i1 %79, label %101, label %80

80:                                               ; preds = %78
  %81 = icmp sgt i32 %73, 849
  br i1 %81, label %101, label %82

82:                                               ; preds = %80
  %83 = icmp sgt i32 %73, 649
  br i1 %83, label %101, label %84

84:                                               ; preds = %82
  %85 = icmp sgt i32 %73, 549
  br i1 %85, label %101, label %86

86:                                               ; preds = %84
  %87 = icmp sgt i32 %73, 449
  br i1 %87, label %101, label %88

88:                                               ; preds = %86
  %89 = icmp sgt i32 %73, 399
  br i1 %89, label %101, label %90

90:                                               ; preds = %88
  %91 = icmp sgt i32 %73, 349
  br i1 %91, label %101, label %92

92:                                               ; preds = %90
  %93 = icmp sgt i32 %73, 299
  br i1 %93, label %101, label %94

94:                                               ; preds = %92
  %95 = icmp sgt i32 %73, 249
  br i1 %95, label %101, label %96

96:                                               ; preds = %94
  %97 = icmp sgt i32 %73, 199
  br i1 %97, label %101, label %98

98:                                               ; preds = %96
  %99 = icmp sgt i32 %73, 149
  %100 = select i1 %99, i32 18, i32 27
  br label %101

101:                                              ; preds = %71, %78, %82, %86, %90, %94, %96, %98, %92, %88, %84, %80
  %102 = phi i32 [ 2, %78 ], [ 3, %80 ], [ 4, %82 ], [ 5, %84 ], [ 6, %86 ], [ 7, %88 ], [ 8, %90 ], [ 9, %92 ], [ 12, %94 ], [ %100, %98 ], [ 15, %96 ], [ %6, %71 ]
  %103 = tail call ptr @cpBN_copy(ptr noundef nonnull %2, ptr noundef nonnull %0)
  %104 = getelementptr inbounds i8, ptr %1, i64 12
  %105 = load i32, ptr %104, align 4, !tbaa !14
  %106 = add nsw i32 %76, 63
  %107 = sdiv i32 %106, 64
  %108 = icmp slt i32 %105, %107
  br i1 %108, label %445, label %109

109:                                              ; preds = %101
  br i1 %.not364, label %114, label %110

110:                                              ; preds = %109
  %111 = getelementptr inbounds i8, ptr %3, i64 12
  %112 = load i32, ptr %111, align 4, !tbaa !14
  %113 = icmp slt i32 %112, %107
  br i1 %113, label %445, label %114

114:                                              ; preds = %110, %109
  %115 = tail call i64 @IPP_INT_PTR(ptr noundef nonnull %5)
  %116 = sub i64 0, %115
  %117 = and i64 %116, 7
  %118 = getelementptr i8, ptr %5, i64 %117
  %119 = getelementptr inbounds i8, ptr %4, i64 64
  %120 = load ptr, ptr %119, align 8, !tbaa !20
  %121 = getelementptr inbounds i8, ptr %120, i64 48
  %122 = load ptr, ptr %121, align 8, !tbaa !21
  %123 = ptrtoint ptr %122 to i64
  %124 = getelementptr inbounds i8, ptr %4, i64 40
  %125 = load ptr, ptr %124, align 8, !tbaa !23
  %126 = ptrtoint ptr %125 to i64
  %127 = getelementptr inbounds i8, ptr %4, i64 56
  %128 = load ptr, ptr %127, align 8, !tbaa !24
  %129 = add i32 %73, 63
  %130 = sdiv i32 %129, 64
  %131 = getelementptr inbounds i8, ptr %4, i64 72
  %132 = load ptr, ptr %131, align 8, !tbaa !25
  %133 = getelementptr inbounds i8, ptr %132, i64 48
  %134 = load ptr, ptr %133, align 8, !tbaa !21
  %135 = getelementptr inbounds i8, ptr %4, i64 48
  %136 = load ptr, ptr %135, align 8, !tbaa !26
  %137 = ptrtoint ptr %136 to i64
  %138 = add i32 %75, 63
  %139 = sdiv i32 %138, 64
  %140 = getelementptr inbounds i8, ptr %4, i64 80
  %141 = load ptr, ptr %140, align 8, !tbaa !27
  %142 = getelementptr inbounds i8, ptr %141, i64 48
  %143 = load ptr, ptr %142, align 8, !tbaa !21
  %144 = and i32 %129, 63
  %145 = zext nneg i32 %144 to i64
  %146 = shl nuw i64 1, %145
  %147 = mul nsw i32 %73, 5
  %148 = icmp sgt i32 %73, 0
  br i1 %148, label %.lr.ph, label %.preheader386

.lr.ph:                                           ; preds = %114
  %149 = getelementptr inbounds i8, ptr %2, i64 16
  %150 = getelementptr inbounds i8, ptr %2, i64 8
  br label %151

151:                                              ; preds = %.lr.ph, %167
  %.0336396 = phi i32 [ 0, %.lr.ph ], [ %168, %167 ]
  %152 = tail call i32 @cpPRNGenPattern(ptr noundef %122, i32 noundef %73, i64 noundef 1, i64 noundef %146, ptr noundef nonnull %8, ptr noundef %9) #4
  %.not366 = icmp eq i32 %152, 1
  br i1 %.not366, label %153, label %.thread

153:                                              ; preds = %151
  %154 = tail call i64 @cpDec_BNU(ptr noundef %122, ptr noundef %122, i32 noundef %130, i64 noundef 1) #4
  %155 = load ptr, ptr %149, align 8, !tbaa !11
  %156 = load i32, ptr %150, align 8, !tbaa !15
  %157 = tail call i32 @cpIsCoPrime(ptr noundef %155, i32 noundef %156, ptr noundef %122, i32 noundef %130, ptr noundef nonnull %118)
  %158 = icmp eq i32 %157, 0
  br i1 %158, label %167, label %159

159:                                              ; preds = %153
  %160 = tail call i64 @cpInc_BNU(ptr noundef %122, ptr noundef %122, i32 noundef %130, i64 noundef 1) #4
  %161 = tail call ptr @gsModArithRSA() #4
  %162 = tail call i32 @gsModEngineInit(ptr noundef %120, ptr noundef %122, i32 noundef %73, i32 noundef 2, ptr noundef %161) #4
  %163 = tail call i32 @cpIsProbablyPrime(ptr noundef %122, i32 noundef %73, i32 noundef %102, ptr noundef nonnull %8, ptr noundef %9, ptr noundef %120, ptr noundef nonnull %118)
  %164 = icmp slt i32 %163, 0
  br i1 %164, label %.thread, label %165

165:                                              ; preds = %159
  %166 = icmp ne i32 %163, 0
  %spec.select = zext i1 %166 to i32
  br label %167

167:                                              ; preds = %165, %153
  %.1333 = phi i32 [ 0, %153 ], [ %spec.select, %165 ]
  %.1330 = phi i32 [ 1, %153 ], [ %163, %165 ]
  %168 = add nuw nsw i32 %.0336396, 1
  %169 = icmp slt i32 %168, %147
  %.not365 = icmp eq i32 %.1333, 0
  %170 = and i1 %169, %.not365
  br i1 %170, label %151, label %._crit_edge, !llvm.loop !28

._crit_edge:                                      ; preds = %167
  br i1 %.not365, label %.thread, label %171

171:                                              ; preds = %._crit_edge
  %172 = and i32 %138, 63
  %173 = zext nneg i32 %172 to i64
  %174 = shl nuw i64 1, %173
  %175 = mul nsw i32 %75, 5
  %176 = icmp sgt i32 %75, 0
  br i1 %176, label %.lr.ph404, label %.thread

.lr.ph404:                                        ; preds = %171
  %invariant.gep399 = getelementptr i8, ptr %143, i64 -8
  %invariant.gep = getelementptr i8, ptr %118, i64 -8
  %177 = icmp eq i32 %73, %75
  %178 = icmp sgt i32 %73, 511
  %179 = shl nuw nsw i32 %130, 6
  %180 = zext nneg i32 %130 to i64
  %gep = getelementptr i64, ptr %invariant.gep, i64 %180
  %181 = add nsw i32 %73, -100
  %182 = shl nuw nsw i32 %107, 6
  %183 = zext nneg i32 %107 to i64
  %gep400 = getelementptr i64, ptr %invariant.gep399, i64 %183
  %184 = getelementptr inbounds i8, ptr %2, i64 16
  %185 = getelementptr inbounds i8, ptr %2, i64 8
  br label %186

186:                                              ; preds = %.lr.ph404, %.thread378
  %.1337401 = phi i32 [ 0, %.lr.ph404 ], [ %221, %.thread378 ]
  %187 = tail call i32 @cpPRNGenPattern(ptr noundef %134, i32 noundef %75, i64 noundef 1, i64 noundef %174, ptr noundef nonnull %8, ptr noundef %9) #4
  %.not368 = icmp eq i32 %187, 1
  br i1 %.not368, label %188, label %.thread

188:                                              ; preds = %186
  br i1 %177, label %189, label %.thread375

189:                                              ; preds = %188
  %190 = tail call i32 @cpCmp_BNU(ptr noundef %122, i32 noundef %130, ptr noundef %134, i32 noundef %130)
  %191 = icmp eq i32 %190, 0
  br i1 %191, label %.thread378, label %192

192:                                              ; preds = %189
  %193 = icmp slt i32 %190, 0
  br i1 %193, label %194, label %196

194:                                              ; preds = %192
  %195 = tail call i64 @cpSub_BNU(ptr noundef nonnull %118, ptr noundef %134, ptr noundef %122, i32 noundef %130) #4
  br label %198

196:                                              ; preds = %192
  %197 = tail call i64 @cpSub_BNU(ptr noundef nonnull %118, ptr noundef %122, ptr noundef %134, i32 noundef %130) #4
  br label %198

198:                                              ; preds = %196, %194
  br i1 %178, label %199, label %.thread375

199:                                              ; preds = %198
  %200 = load i64, ptr %gep, align 8, !tbaa !12
  %201 = tail call i32 @cpNLZ_BNU(i64 noundef %200) #4
  %202 = sub nsw i32 %179, %201
  %.not369 = icmp slt i32 %202, %181
  br i1 %.not369, label %.thread378, label %.thread375

.thread375:                                       ; preds = %198, %199, %188
  %203 = tail call i64 @cpMul_BNU_school(ptr noundef %143, ptr noundef %122, i32 noundef %130, ptr noundef %134, i32 noundef %139)
  %204 = load i64, ptr %gep400, align 8, !tbaa !12
  %205 = tail call i32 @cpNLZ_BNU(i64 noundef %204) #4
  %206 = sub nsw i32 %182, %205
  %.not370 = icmp eq i32 %76, %206
  br i1 %.not370, label %207, label %.thread378

207:                                              ; preds = %.thread375
  %208 = tail call i64 @cpDec_BNU(ptr noundef %134, ptr noundef %134, i32 noundef %139, i64 noundef 1) #4
  %209 = load ptr, ptr %184, align 8, !tbaa !11
  %210 = load i32, ptr %185, align 8, !tbaa !15
  %211 = tail call i32 @cpIsCoPrime(ptr noundef %209, i32 noundef %210, ptr noundef %134, i32 noundef %139, ptr noundef nonnull %118)
  %212 = icmp eq i32 %211, 0
  br i1 %212, label %.thread378, label %213

213:                                              ; preds = %207
  %214 = tail call i64 @cpInc_BNU(ptr noundef %134, ptr noundef %134, i32 noundef %139, i64 noundef 1) #4
  %215 = tail call ptr @gsModArithRSA() #4
  %216 = tail call i32 @gsModEngineInit(ptr noundef %132, ptr noundef %134, i32 noundef %75, i32 noundef 2, ptr noundef %215) #4
  %217 = tail call i32 @cpIsProbablyPrime(ptr noundef %134, i32 noundef %75, i32 noundef %102, ptr noundef nonnull %8, ptr noundef %9, ptr noundef %132, ptr noundef nonnull %118)
  %218 = icmp slt i32 %217, 0
  br i1 %218, label %.thread, label %219

219:                                              ; preds = %213
  %220 = icmp ne i32 %217, 0
  %spec.select372 = zext i1 %220 to i32
  br label %.thread378

.thread378:                                       ; preds = %199, %189, %219, %207, %.thread375
  %.3335 = phi i32 [ 0, %.thread375 ], [ 0, %207 ], [ %spec.select372, %219 ], [ 0, %189 ], [ 0, %199 ]
  %.4 = phi i32 [ 1, %.thread375 ], [ 1, %207 ], [ %217, %219 ], [ 1, %189 ], [ 1, %199 ]
  %221 = add nuw nsw i32 %.1337401, 1
  %222 = icmp slt i32 %221, %175
  %.not367 = icmp eq i32 %.3335, 0
  %223 = and i1 %222, %.not367
  br i1 %223, label %186, label %._crit_edge405, !llvm.loop !30

._crit_edge405:                                   ; preds = %.thread378
  br i1 %.not367, label %.thread, label %224

224:                                              ; preds = %._crit_edge405
  %225 = zext nneg i32 %107 to i64
  %226 = getelementptr i64, ptr %118, i64 %225
  %227 = getelementptr i8, ptr %226, i64 8
  %228 = getelementptr i64, ptr %227, i64 %225
  %229 = getelementptr i8, ptr %228, i64 8
  %230 = getelementptr i64, ptr %229, i64 %225
  %231 = getelementptr i8, ptr %230, i64 8
  %232 = tail call i64 @cpDec_BNU(ptr noundef %122, ptr noundef %122, i32 noundef %130, i64 noundef 1) #4
  %233 = tail call i64 @cpDec_BNU(ptr noundef %134, ptr noundef %134, i32 noundef %139, i64 noundef 1) #4
  %234 = tail call i64 @cpMul_BNU_school(ptr noundef nonnull %229, ptr noundef %122, i32 noundef %130, ptr noundef %134, i32 noundef %139)
  %235 = getelementptr inbounds i8, ptr %2, i64 16
  %236 = load ptr, ptr %235, align 8, !tbaa !11
  %237 = getelementptr inbounds i8, ptr %2, i64 8
  %238 = load i32, ptr %237, align 8, !tbaa !15
  %239 = getelementptr inbounds i8, ptr %2, i64 24
  %240 = load ptr, ptr %239, align 8, !tbaa !31
  %241 = tail call i32 @cpModInv_BNU(ptr noundef nonnull %118, ptr noundef %236, i32 noundef %238, ptr noundef nonnull %229, i32 noundef %107, ptr noundef nonnull %227, ptr noundef %240, ptr noundef nonnull %231) #4
  br i1 %.not364, label %244, label %242

242:                                              ; preds = %224
  %243 = tail call ptr @BN_Set(ptr noundef nonnull %118, i32 noundef %241, ptr noundef nonnull %3)
  br label %244

244:                                              ; preds = %242, %224
  %245 = icmp sgt i32 %241, 0
  br i1 %245, label %.lr.ph410.preheader, label %._crit_edge411

.lr.ph410.preheader:                              ; preds = %244
  %wide.trip.count = zext nneg i32 %241 to i64
  %min.iters.check = icmp ult i32 %241, 8
  %diff.check = icmp ult i32 %107, 3
  %or.cond570 = or i1 %min.iters.check, %diff.check
  br i1 %or.cond570, label %.lr.ph410.preheader575, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph410.preheader
  %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 ]
  %246 = getelementptr inbounds i64, ptr %118, i64 %index
  %247 = getelementptr inbounds i8, ptr %246, i64 16
  %wide.load = load <2 x i64>, ptr %246, align 8, !tbaa !12
  %wide.load509 = load <2 x i64>, ptr %247, align 8, !tbaa !12
  %248 = getelementptr inbounds i64, ptr %227, i64 %index
  %249 = getelementptr inbounds i8, ptr %248, i64 16
  store <2 x i64> %wide.load, ptr %248, align 8, !tbaa !12
  store <2 x i64> %wide.load509, ptr %249, align 8, !tbaa !12
  %index.next = add nuw i64 %index, 4
  %250 = icmp eq i64 %index.next, %n.vec
  br i1 %250, label %middle.block, label %vector.body, !llvm.loop !32

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %._crit_edge411, label %.lr.ph410.preheader575

.lr.ph410.preheader575:                           ; preds = %middle.block, %.lr.ph410.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph410.preheader ], [ %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 %.lr.ph410.prol.loopexit, label %.lr.ph410.prol

.lr.ph410.prol:                                   ; preds = %.lr.ph410.preheader575, %.lr.ph410.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %.lr.ph410.prol ], [ %indvars.iv.ph, %.lr.ph410.preheader575 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph410.prol ], [ 0, %.lr.ph410.preheader575 ]
  %251 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv.prol
  %252 = load i64, ptr %251, align 8, !tbaa !12
  %253 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv.prol
  store i64 %252, ptr %253, align 8, !tbaa !12
  %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 %.lr.ph410.prol.loopexit, label %.lr.ph410.prol, !llvm.loop !35

.lr.ph410.prol.loopexit:                          ; preds = %.lr.ph410.prol, %.lr.ph410.preheader575
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph410.preheader575 ], [ %indvars.iv.next.prol, %.lr.ph410.prol ]
  %254 = sub nsw i64 %indvars.iv.ph, %wide.trip.count
  %255 = icmp ugt i64 %254, -4
  br i1 %255, label %._crit_edge411, label %.lr.ph410

.lr.ph410:                                        ; preds = %.lr.ph410.prol.loopexit, %.lr.ph410
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %.lr.ph410 ], [ %indvars.iv.unr, %.lr.ph410.prol.loopexit ]
  %256 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv
  %257 = load i64, ptr %256, align 8, !tbaa !12
  %258 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv
  store i64 %257, ptr %258, align 8, !tbaa !12
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %259 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv.next
  %260 = load i64, ptr %259, align 8, !tbaa !12
  %261 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv.next
  store i64 %260, ptr %261, align 8, !tbaa !12
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %262 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv.next.1
  %263 = load i64, ptr %262, align 8, !tbaa !12
  %264 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv.next.1
  store i64 %263, ptr %264, align 8, !tbaa !12
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %265 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv.next.2
  %266 = load i64, ptr %265, align 8, !tbaa !12
  %267 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv.next.2
  store i64 %266, ptr %267, align 8, !tbaa !12
  %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_edge411, label %.lr.ph410, !llvm.loop !37

._crit_edge411:                                   ; preds = %.lr.ph410.prol.loopexit, %.lr.ph410, %middle.block, %244
  %268 = tail call i32 @cpMod_BNU(ptr noundef nonnull %227, i32 noundef %241, ptr noundef %122, i32 noundef %130)
  %269 = icmp sgt i32 %268, 0
  br i1 %269, label %.lr.ph414.preheader, label %.preheader389

.lr.ph414.preheader:                              ; preds = %._crit_edge411
  %wide.trip.count456 = zext nneg i32 %268 to i64
  %min.iters.check514 = icmp ult i32 %268, 16
  br i1 %min.iters.check514, label %.lr.ph414.preheader574, label %vector.memcheck510

.lr.ph414.preheader574:                           ; preds = %middle.block512, %vector.memcheck510, %.lr.ph414.preheader
  %indvars.iv453.ph = phi i64 [ 0, %vector.memcheck510 ], [ 0, %.lr.ph414.preheader ], [ %n.vec517, %middle.block512 ]
  %xtraiter578 = and i64 %wide.trip.count456, 3
  %lcmp.mod579.not = icmp eq i64 %xtraiter578, 0
  br i1 %lcmp.mod579.not, label %.lr.ph414.prol.loopexit, label %.lr.ph414.prol

.lr.ph414.prol:                                   ; preds = %.lr.ph414.preheader574, %.lr.ph414.prol
  %indvars.iv453.prol = phi i64 [ %indvars.iv.next454.prol, %.lr.ph414.prol ], [ %indvars.iv453.ph, %.lr.ph414.preheader574 ]
  %prol.iter580 = phi i64 [ %prol.iter580.next, %.lr.ph414.prol ], [ 0, %.lr.ph414.preheader574 ]
  %270 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv453.prol
  %271 = load i64, ptr %270, align 8, !tbaa !12
  %272 = getelementptr inbounds i64, ptr %125, i64 %indvars.iv453.prol
  store i64 %271, ptr %272, align 8, !tbaa !12
  %indvars.iv.next454.prol = add nuw nsw i64 %indvars.iv453.prol, 1
  %prol.iter580.next = add i64 %prol.iter580, 1
  %prol.iter580.cmp.not = icmp eq i64 %prol.iter580.next, %xtraiter578
  br i1 %prol.iter580.cmp.not, label %.lr.ph414.prol.loopexit, label %.lr.ph414.prol, !llvm.loop !38

.lr.ph414.prol.loopexit:                          ; preds = %.lr.ph414.prol, %.lr.ph414.preheader574
  %indvars.iv453.unr = phi i64 [ %indvars.iv453.ph, %.lr.ph414.preheader574 ], [ %indvars.iv.next454.prol, %.lr.ph414.prol ]
  %273 = sub nsw i64 %indvars.iv453.ph, %wide.trip.count456
  %274 = icmp ugt i64 %273, -4
  br i1 %274, label %.preheader389, label %.lr.ph414

vector.memcheck510:                               ; preds = %.lr.ph414.preheader
  %275 = add i64 %126, -8
  %276 = add i64 %117, %11
  %277 = shl nuw nsw i64 %225, 3
  %278 = add i64 %276, %277
  %279 = sub i64 %275, %278
  %diff.check511 = icmp ult i64 %279, 32
  br i1 %diff.check511, label %.lr.ph414.preheader574, label %vector.ph515

vector.ph515:                                     ; preds = %vector.memcheck510
  %n.vec517 = and i64 %wide.trip.count456, 2147483644
  br label %vector.body519

vector.body519:                                   ; preds = %vector.body519, %vector.ph515
  %index520 = phi i64 [ 0, %vector.ph515 ], [ %index.next523, %vector.body519 ]
  %280 = getelementptr inbounds i64, ptr %227, i64 %index520
  %281 = getelementptr inbounds i8, ptr %280, i64 16
  %wide.load521 = load <2 x i64>, ptr %280, align 8, !tbaa !12
  %wide.load522 = load <2 x i64>, ptr %281, align 8, !tbaa !12
  %282 = getelementptr inbounds i64, ptr %125, i64 %index520
  %283 = getelementptr inbounds i8, ptr %282, i64 16
  store <2 x i64> %wide.load521, ptr %282, align 8, !tbaa !12
  store <2 x i64> %wide.load522, ptr %283, align 8, !tbaa !12
  %index.next523 = add nuw i64 %index520, 4
  %284 = icmp eq i64 %index.next523, %n.vec517
  br i1 %284, label %middle.block512, label %vector.body519, !llvm.loop !39

middle.block512:                                  ; preds = %vector.body519
  %cmp.n524 = icmp eq i64 %n.vec517, %wide.trip.count456
  br i1 %cmp.n524, label %.preheader389, label %.lr.ph414.preheader574

.preheader389:                                    ; preds = %.lr.ph414.prol.loopexit, %.lr.ph414, %middle.block512, %._crit_edge411
  %.0322.lcssa = phi i32 [ 0, %._crit_edge411 ], [ %268, %middle.block512 ], [ %268, %.lr.ph414 ], [ %268, %.lr.ph414.prol.loopexit ]
  %285 = icmp slt i32 %.0322.lcssa, %130
  br i1 %285, label %.lr.ph417.preheader, label %.preheader388

.lr.ph417.preheader:                              ; preds = %.preheader389
  %286 = zext nneg i32 %.0322.lcssa to i64
  %287 = shl nuw nsw i64 %286, 3
  %scevgep = getelementptr i8, ptr %125, i64 %287
  %288 = xor i32 %.0322.lcssa, -1
  %289 = add i32 %130, %288
  %290 = zext i32 %289 to i64
  %291 = shl nuw nsw i64 %290, 3
  %292 = add nuw nsw i64 %291, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep, i8 0, i64 %292, i1 false), !tbaa !12
  br label %.preheader388

.lr.ph414:                                        ; preds = %.lr.ph414.prol.loopexit, %.lr.ph414
  %indvars.iv453 = phi i64 [ %indvars.iv.next454.3, %.lr.ph414 ], [ %indvars.iv453.unr, %.lr.ph414.prol.loopexit ]
  %293 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv453
  %294 = load i64, ptr %293, align 8, !tbaa !12
  %295 = getelementptr inbounds i64, ptr %125, i64 %indvars.iv453
  store i64 %294, ptr %295, align 8, !tbaa !12
  %indvars.iv.next454 = add nuw nsw i64 %indvars.iv453, 1
  %296 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv.next454
  %297 = load i64, ptr %296, align 8, !tbaa !12
  %298 = getelementptr inbounds i64, ptr %125, i64 %indvars.iv.next454
  store i64 %297, ptr %298, align 8, !tbaa !12
  %indvars.iv.next454.1 = add nuw nsw i64 %indvars.iv453, 2
  %299 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv.next454.1
  %300 = load i64, ptr %299, align 8, !tbaa !12
  %301 = getelementptr inbounds i64, ptr %125, i64 %indvars.iv.next454.1
  store i64 %300, ptr %301, align 8, !tbaa !12
  %indvars.iv.next454.2 = add nuw nsw i64 %indvars.iv453, 3
  %302 = getelementptr inbounds i64, ptr %227, i64 %indvars.iv.next454.2
  %303 = load i64, ptr %302, align 8, !tbaa !12
  %304 = getelementptr inbounds i64, ptr %125, i64 %indvars.iv.next454.2
  store i64 %303, ptr %304, align 8, !tbaa !12
  %indvars.iv.next454.3 = add nuw nsw i64 %indvars.iv453, 4
  %exitcond457.not.3 = icmp eq i64 %indvars.iv.next454.3, %wide.trip.count456
  br i1 %exitcond457.not.3, label %.preheader389, label %.lr.ph414, !llvm.loop !40

.preheader388:                                    ; preds = %.lr.ph417.preheader, %.preheader389
  br i1 %245, label %.lr.ph419.preheader, label %._crit_edge420

.lr.ph419.preheader:                              ; preds = %.preheader388
  %wide.trip.count464 = zext nneg i32 %241 to i64
  %min.iters.check529 = icmp ult i32 %241, 8
  br i1 %min.iters.check529, label %.lr.ph419.preheader573, label %vector.ph530

vector.ph530:                                     ; preds = %.lr.ph419.preheader
  %n.vec532 = and i64 %wide.trip.count464, 2147483644
  br label %vector.body534

vector.body534:                                   ; preds = %vector.body534, %vector.ph530
  %index535 = phi i64 [ 0, %vector.ph530 ], [ %index.next538, %vector.body534 ]
  %305 = getelementptr inbounds i64, ptr %118, i64 %index535
  %306 = getelementptr inbounds i8, ptr %305, i64 16
  %wide.load536 = load <2 x i64>, ptr %305, align 8, !tbaa !12
  %wide.load537 = load <2 x i64>, ptr %306, align 8, !tbaa !12
  %307 = getelementptr inbounds i64, ptr %229, i64 %index535
  %308 = getelementptr inbounds i8, ptr %307, i64 16
  store <2 x i64> %wide.load536, ptr %307, align 8, !tbaa !12
  store <2 x i64> %wide.load537, ptr %308, align 8, !tbaa !12
  %index.next538 = add nuw i64 %index535, 4
  %309 = icmp eq i64 %index.next538, %n.vec532
  br i1 %309, label %middle.block527, label %vector.body534, !llvm.loop !41

middle.block527:                                  ; preds = %vector.body534
  %cmp.n539 = icmp eq i64 %n.vec532, %wide.trip.count464
  br i1 %cmp.n539, label %._crit_edge420, label %.lr.ph419.preheader573

.lr.ph419.preheader573:                           ; preds = %middle.block527, %.lr.ph419.preheader
  %indvars.iv461.ph = phi i64 [ 0, %.lr.ph419.preheader ], [ %n.vec532, %middle.block527 ]
  %xtraiter581 = and i64 %wide.trip.count464, 3
  %lcmp.mod582.not = icmp eq i64 %xtraiter581, 0
  br i1 %lcmp.mod582.not, label %.lr.ph419.prol.loopexit, label %.lr.ph419.prol

.lr.ph419.prol:                                   ; preds = %.lr.ph419.preheader573, %.lr.ph419.prol
  %indvars.iv461.prol = phi i64 [ %indvars.iv.next462.prol, %.lr.ph419.prol ], [ %indvars.iv461.ph, %.lr.ph419.preheader573 ]
  %prol.iter583 = phi i64 [ %prol.iter583.next, %.lr.ph419.prol ], [ 0, %.lr.ph419.preheader573 ]
  %310 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv461.prol
  %311 = load i64, ptr %310, align 8, !tbaa !12
  %312 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv461.prol
  store i64 %311, ptr %312, align 8, !tbaa !12
  %indvars.iv.next462.prol = add nuw nsw i64 %indvars.iv461.prol, 1
  %prol.iter583.next = add i64 %prol.iter583, 1
  %prol.iter583.cmp.not = icmp eq i64 %prol.iter583.next, %xtraiter581
  br i1 %prol.iter583.cmp.not, label %.lr.ph419.prol.loopexit, label %.lr.ph419.prol, !llvm.loop !42

.lr.ph419.prol.loopexit:                          ; preds = %.lr.ph419.prol, %.lr.ph419.preheader573
  %indvars.iv461.unr = phi i64 [ %indvars.iv461.ph, %.lr.ph419.preheader573 ], [ %indvars.iv.next462.prol, %.lr.ph419.prol ]
  %313 = sub nsw i64 %indvars.iv461.ph, %wide.trip.count464
  %314 = icmp ugt i64 %313, -4
  br i1 %314, label %._crit_edge420, label %.lr.ph419

.lr.ph419:                                        ; preds = %.lr.ph419.prol.loopexit, %.lr.ph419
  %indvars.iv461 = phi i64 [ %indvars.iv.next462.3, %.lr.ph419 ], [ %indvars.iv461.unr, %.lr.ph419.prol.loopexit ]
  %315 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv461
  %316 = load i64, ptr %315, align 8, !tbaa !12
  %317 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv461
  store i64 %316, ptr %317, align 8, !tbaa !12
  %indvars.iv.next462 = add nuw nsw i64 %indvars.iv461, 1
  %318 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv.next462
  %319 = load i64, ptr %318, align 8, !tbaa !12
  %320 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv.next462
  store i64 %319, ptr %320, align 8, !tbaa !12
  %indvars.iv.next462.1 = add nuw nsw i64 %indvars.iv461, 2
  %321 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv.next462.1
  %322 = load i64, ptr %321, align 8, !tbaa !12
  %323 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv.next462.1
  store i64 %322, ptr %323, align 8, !tbaa !12
  %indvars.iv.next462.2 = add nuw nsw i64 %indvars.iv461, 3
  %324 = getelementptr inbounds i64, ptr %118, i64 %indvars.iv.next462.2
  %325 = load i64, ptr %324, align 8, !tbaa !12
  %326 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv.next462.2
  store i64 %325, ptr %326, align 8, !tbaa !12
  %indvars.iv.next462.3 = add nuw nsw i64 %indvars.iv461, 4
  %exitcond465.not.3 = icmp eq i64 %indvars.iv.next462.3, %wide.trip.count464
  br i1 %exitcond465.not.3, label %._crit_edge420, label %.lr.ph419, !llvm.loop !43

._crit_edge420:                                   ; preds = %.lr.ph419.prol.loopexit, %.lr.ph419, %middle.block527, %.preheader388
  %327 = tail call i32 @cpMod_BNU(ptr noundef nonnull %229, i32 noundef %241, ptr noundef %134, i32 noundef %139)
  %328 = icmp sgt i32 %327, 0
  br i1 %328, label %.lr.ph423.preheader, label %.preheader387

.lr.ph423.preheader:                              ; preds = %._crit_edge420
  %wide.trip.count469 = zext nneg i32 %327 to i64
  %min.iters.check544 = icmp ult i32 %327, 16
  br i1 %min.iters.check544, label %.lr.ph423.preheader572, label %vector.memcheck540

.lr.ph423.preheader572:                           ; preds = %middle.block542, %vector.memcheck540, %.lr.ph423.preheader
  %indvars.iv466.ph = phi i64 [ 0, %vector.memcheck540 ], [ 0, %.lr.ph423.preheader ], [ %n.vec547, %middle.block542 ]
  %xtraiter584 = and i64 %wide.trip.count469, 3
  %lcmp.mod585.not = icmp eq i64 %xtraiter584, 0
  br i1 %lcmp.mod585.not, label %.lr.ph423.prol.loopexit, label %.lr.ph423.prol

.lr.ph423.prol:                                   ; preds = %.lr.ph423.preheader572, %.lr.ph423.prol
  %indvars.iv466.prol = phi i64 [ %indvars.iv.next467.prol, %.lr.ph423.prol ], [ %indvars.iv466.ph, %.lr.ph423.preheader572 ]
  %prol.iter586 = phi i64 [ %prol.iter586.next, %.lr.ph423.prol ], [ 0, %.lr.ph423.preheader572 ]
  %329 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv466.prol
  %330 = load i64, ptr %329, align 8, !tbaa !12
  %331 = getelementptr inbounds i64, ptr %136, i64 %indvars.iv466.prol
  store i64 %330, ptr %331, align 8, !tbaa !12
  %indvars.iv.next467.prol = add nuw nsw i64 %indvars.iv466.prol, 1
  %prol.iter586.next = add i64 %prol.iter586, 1
  %prol.iter586.cmp.not = icmp eq i64 %prol.iter586.next, %xtraiter584
  br i1 %prol.iter586.cmp.not, label %.lr.ph423.prol.loopexit, label %.lr.ph423.prol, !llvm.loop !44

.lr.ph423.prol.loopexit:                          ; preds = %.lr.ph423.prol, %.lr.ph423.preheader572
  %indvars.iv466.unr = phi i64 [ %indvars.iv466.ph, %.lr.ph423.preheader572 ], [ %indvars.iv.next467.prol, %.lr.ph423.prol ]
  %332 = sub nsw i64 %indvars.iv466.ph, %wide.trip.count469
  %333 = icmp ugt i64 %332, -4
  br i1 %333, label %.preheader387, label %.lr.ph423

vector.memcheck540:                               ; preds = %.lr.ph423.preheader
  %334 = add i64 %137, -16
  %335 = add i64 %117, %11
  %336 = shl nuw nsw i64 %225, 4
  %337 = add i64 %335, %336
  %338 = sub i64 %334, %337
  %diff.check541 = icmp ult i64 %338, 32
  br i1 %diff.check541, label %.lr.ph423.preheader572, label %vector.ph545

vector.ph545:                                     ; preds = %vector.memcheck540
  %n.vec547 = and i64 %wide.trip.count469, 2147483644
  br label %vector.body549

vector.body549:                                   ; preds = %vector.body549, %vector.ph545
  %index550 = phi i64 [ 0, %vector.ph545 ], [ %index.next553, %vector.body549 ]
  %339 = getelementptr inbounds i64, ptr %229, i64 %index550
  %340 = getelementptr inbounds i8, ptr %339, i64 16
  %wide.load551 = load <2 x i64>, ptr %339, align 8, !tbaa !12
  %wide.load552 = load <2 x i64>, ptr %340, align 8, !tbaa !12
  %341 = getelementptr inbounds i64, ptr %136, i64 %index550
  %342 = getelementptr inbounds i8, ptr %341, i64 16
  store <2 x i64> %wide.load551, ptr %341, align 8, !tbaa !12
  store <2 x i64> %wide.load552, ptr %342, align 8, !tbaa !12
  %index.next553 = add nuw i64 %index550, 4
  %343 = icmp eq i64 %index.next553, %n.vec547
  br i1 %343, label %middle.block542, label %vector.body549, !llvm.loop !45

middle.block542:                                  ; preds = %vector.body549
  %cmp.n554 = icmp eq i64 %n.vec547, %wide.trip.count469
  br i1 %cmp.n554, label %.preheader387, label %.lr.ph423.preheader572

.preheader387:                                    ; preds = %.lr.ph423.prol.loopexit, %.lr.ph423, %middle.block542, %._crit_edge420
  %.0320.lcssa = phi i32 [ 0, %._crit_edge420 ], [ %327, %middle.block542 ], [ %327, %.lr.ph423 ], [ %327, %.lr.ph423.prol.loopexit ]
  %344 = icmp slt i32 %.0320.lcssa, %139
  br i1 %344, label %.lr.ph426.preheader, label %._crit_edge427

.lr.ph426.preheader:                              ; preds = %.preheader387
  %345 = zext nneg i32 %.0320.lcssa to i64
  %346 = shl nuw nsw i64 %345, 3
  %scevgep471 = getelementptr i8, ptr %136, i64 %346
  %347 = xor i32 %.0320.lcssa, -1
  %348 = add i32 %139, %347
  %349 = zext i32 %348 to i64
  %350 = shl nuw nsw i64 %349, 3
  %351 = add nuw nsw i64 %350, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep471, i8 0, i64 %351, i1 false), !tbaa !12
  br label %._crit_edge427

.lr.ph423:                                        ; preds = %.lr.ph423.prol.loopexit, %.lr.ph423
  %indvars.iv466 = phi i64 [ %indvars.iv.next467.3, %.lr.ph423 ], [ %indvars.iv466.unr, %.lr.ph423.prol.loopexit ]
  %352 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv466
  %353 = load i64, ptr %352, align 8, !tbaa !12
  %354 = getelementptr inbounds i64, ptr %136, i64 %indvars.iv466
  store i64 %353, ptr %354, align 8, !tbaa !12
  %indvars.iv.next467 = add nuw nsw i64 %indvars.iv466, 1
  %355 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv.next467
  %356 = load i64, ptr %355, align 8, !tbaa !12
  %357 = getelementptr inbounds i64, ptr %136, i64 %indvars.iv.next467
  store i64 %356, ptr %357, align 8, !tbaa !12
  %indvars.iv.next467.1 = add nuw nsw i64 %indvars.iv466, 2
  %358 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv.next467.1
  %359 = load i64, ptr %358, align 8, !tbaa !12
  %360 = getelementptr inbounds i64, ptr %136, i64 %indvars.iv.next467.1
  store i64 %359, ptr %360, align 8, !tbaa !12
  %indvars.iv.next467.2 = add nuw nsw i64 %indvars.iv466, 3
  %361 = getelementptr inbounds i64, ptr %229, i64 %indvars.iv.next467.2
  %362 = load i64, ptr %361, align 8, !tbaa !12
  %363 = getelementptr inbounds i64, ptr %136, i64 %indvars.iv.next467.2
  store i64 %362, ptr %363, align 8, !tbaa !12
  %indvars.iv.next467.3 = add nuw nsw i64 %indvars.iv466, 4
  %exitcond470.not.3 = icmp eq i64 %indvars.iv.next467.3, %wide.trip.count469
  br i1 %exitcond470.not.3, label %.preheader387, label %.lr.ph423, !llvm.loop !46

._crit_edge427:                                   ; preds = %.lr.ph426.preheader, %.preheader387
  %364 = load i64, ptr %122, align 8, !tbaa !12
  %365 = add i64 %364, 1
  store i64 %365, ptr %122, align 8, !tbaa !12
  %366 = load i64, ptr %134, align 8, !tbaa !12
  %367 = add i64 %366, 1
  store i64 %367, ptr %134, align 8, !tbaa !12
  %368 = tail call ptr @gsModArithRSA() #4
  %369 = tail call i32 @gsModEngineInit(ptr noundef %120, ptr noundef nonnull %122, i32 noundef %73, i32 noundef 2, ptr noundef %368) #4
  %370 = tail call ptr @gsModArithRSA() #4
  %371 = tail call i32 @gsModEngineInit(ptr noundef %132, ptr noundef nonnull %134, i32 noundef %75, i32 noundef 2, ptr noundef %370) #4
  %372 = icmp sgt i32 %129, 63
  br i1 %372, label %.lr.ph430.preheader, label %._crit_edge431

.lr.ph430.preheader:                              ; preds = %._crit_edge427
  %wide.trip.count478 = zext nneg i32 %130 to i64
  %min.iters.check559 = icmp ult i32 %130, 18
  br i1 %min.iters.check559, label %.lr.ph430.preheader571, label %vector.memcheck555

vector.memcheck555:                               ; preds = %.lr.ph430.preheader
  %373 = mul nuw nsw i64 %225, 24
  %374 = add i64 %373, %11
  %375 = add i64 %374, %117
  %376 = add i64 %375, 24
  %377 = sub i64 %376, %123
  %diff.check556 = icmp ult i64 %377, 32
  br i1 %diff.check556, label %.lr.ph430.preheader571, label %vector.ph560

vector.ph560:                                     ; preds = %vector.memcheck555
  %n.vec562 = and i64 %wide.trip.count478, 33554428
  br label %vector.body564

vector.body564:                                   ; preds = %vector.body564, %vector.ph560
  %index565 = phi i64 [ 0, %vector.ph560 ], [ %index.next568, %vector.body564 ]
  %378 = getelementptr inbounds i64, ptr %122, i64 %index565
  %379 = getelementptr inbounds i8, ptr %378, i64 16
  %wide.load566 = load <2 x i64>, ptr %378, align 8, !tbaa !12
  %wide.load567 = load <2 x i64>, ptr %379, align 8, !tbaa !12
  %380 = getelementptr inbounds i64, ptr %231, i64 %index565
  %381 = getelementptr inbounds i8, ptr %380, i64 16
  store <2 x i64> %wide.load566, ptr %380, align 8, !tbaa !12
  store <2 x i64> %wide.load567, ptr %381, align 8, !tbaa !12
  %index.next568 = add nuw i64 %index565, 4
  %382 = icmp eq i64 %index.next568, %n.vec562
  br i1 %382, label %middle.block557, label %vector.body564, !llvm.loop !47

middle.block557:                                  ; preds = %vector.body564
  %cmp.n569 = icmp eq i64 %n.vec562, %wide.trip.count478
  br i1 %cmp.n569, label %._crit_edge431, label %.lr.ph430.preheader571

.lr.ph430.preheader571:                           ; preds = %middle.block557, %vector.memcheck555, %.lr.ph430.preheader
  %indvars.iv475.ph = phi i64 [ 0, %vector.memcheck555 ], [ 0, %.lr.ph430.preheader ], [ %n.vec562, %middle.block557 ]
  %xtraiter587 = and i64 %wide.trip.count478, 3
  %lcmp.mod588.not = icmp eq i64 %xtraiter587, 0
  br i1 %lcmp.mod588.not, label %.lr.ph430.prol.loopexit, label %.lr.ph430.prol

.lr.ph430.prol:                                   ; preds = %.lr.ph430.preheader571, %.lr.ph430.prol
  %indvars.iv475.prol = phi i64 [ %indvars.iv.next476.prol, %.lr.ph430.prol ], [ %indvars.iv475.ph, %.lr.ph430.preheader571 ]
  %prol.iter589 = phi i64 [ %prol.iter589.next, %.lr.ph430.prol ], [ 0, %.lr.ph430.preheader571 ]
  %383 = getelementptr inbounds i64, ptr %122, i64 %indvars.iv475.prol
  %384 = load i64, ptr %383, align 8, !tbaa !12
  %385 = getelementptr inbounds i64, ptr %231, i64 %indvars.iv475.prol
  store i64 %384, ptr %385, align 8, !tbaa !12
  %indvars.iv.next476.prol = add nuw nsw i64 %indvars.iv475.prol, 1
  %prol.iter589.next = add i64 %prol.iter589, 1
  %prol.iter589.cmp.not = icmp eq i64 %prol.iter589.next, %xtraiter587
  br i1 %prol.iter589.cmp.not, label %.lr.ph430.prol.loopexit, label %.lr.ph430.prol, !llvm.loop !48

.lr.ph430.prol.loopexit:                          ; preds = %.lr.ph430.prol, %.lr.ph430.preheader571
  %indvars.iv475.unr = phi i64 [ %indvars.iv475.ph, %.lr.ph430.preheader571 ], [ %indvars.iv.next476.prol, %.lr.ph430.prol ]
  %386 = sub nsw i64 %indvars.iv475.ph, %wide.trip.count478
  %387 = icmp ugt i64 %386, -4
  br i1 %387, label %._crit_edge431, label %.lr.ph430

.lr.ph430:                                        ; preds = %.lr.ph430.prol.loopexit, %.lr.ph430
  %indvars.iv475 = phi i64 [ %indvars.iv.next476.3, %.lr.ph430 ], [ %indvars.iv475.unr, %.lr.ph430.prol.loopexit ]
  %388 = getelementptr inbounds i64, ptr %122, i64 %indvars.iv475
  %389 = load i64, ptr %388, align 8, !tbaa !12
  %390 = getelementptr inbounds i64, ptr %231, i64 %indvars.iv475
  store i64 %389, ptr %390, align 8, !tbaa !12
  %indvars.iv.next476 = add nuw nsw i64 %indvars.iv475, 1
  %391 = getelementptr inbounds i64, ptr %122, i64 %indvars.iv.next476
  %392 = load i64, ptr %391, align 8, !tbaa !12
  %393 = getelementptr inbounds i64, ptr %231, i64 %indvars.iv.next476
  store i64 %392, ptr %393, align 8, !tbaa !12
  %indvars.iv.next476.1 = add nuw nsw i64 %indvars.iv475, 2
  %394 = getelementptr inbounds i64, ptr %122, i64 %indvars.iv.next476.1
  %395 = load i64, ptr %394, align 8, !tbaa !12
  %396 = getelementptr inbounds i64, ptr %231, i64 %indvars.iv.next476.1
  store i64 %395, ptr %396, align 8, !tbaa !12
  %indvars.iv.next476.2 = add nuw nsw i64 %indvars.iv475, 3
  %397 = getelementptr inbounds i64, ptr %122, i64 %indvars.iv.next476.2
  %398 = load i64, ptr %397, align 8, !tbaa !12
  %399 = getelementptr inbounds i64, ptr %231, i64 %indvars.iv.next476.2
  store i64 %398, ptr %399, align 8, !tbaa !12
  %indvars.iv.next476.3 = add nuw nsw i64 %indvars.iv475, 4
  %exitcond479.not.3 = icmp eq i64 %indvars.iv.next476.3, %wide.trip.count478
  br i1 %exitcond479.not.3, label %._crit_edge431, label %.lr.ph430, !llvm.loop !49

._crit_edge431:                                   ; preds = %.lr.ph430.prol.loopexit, %.lr.ph430, %middle.block557, %._crit_edge427
  %400 = tail call i32 @cpModInv_BNU(ptr noundef %128, ptr noundef nonnull %134, i32 noundef %139, ptr noundef nonnull %231, i32 noundef %130, ptr noundef nonnull %118, ptr noundef nonnull %227, ptr noundef nonnull %229) #4
  %401 = icmp slt i32 %400, %130
  br i1 %401, label %.lr.ph434.preheader, label %._crit_edge435

.lr.ph434.preheader:                              ; preds = %._crit_edge431
  %402 = sext i32 %400 to i64
  %403 = shl nsw i64 %402, 3
  %scevgep480 = getelementptr i8, ptr %128, i64 %403
  %404 = xor i32 %400, -1
  %405 = add i32 %130, %404
  %406 = zext i32 %405 to i64
  %407 = shl nuw nsw i64 %406, 3
  %408 = add nuw nsw i64 %407, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep480, i8 0, i64 %408, i1 false), !tbaa !12
  br label %._crit_edge435

._crit_edge435:                                   ; preds = %.lr.ph434.preheader, %._crit_edge431
  %409 = tail call i64 @cpMul_BNU_school(ptr noundef %143, ptr noundef nonnull %122, i32 noundef %130, ptr noundef nonnull %134, i32 noundef %139)
  %410 = tail call ptr @gsModArithRSA() #4
  %411 = tail call i32 @gsModEngineInit(ptr noundef %141, ptr noundef %143, i32 noundef %76, i32 noundef 2, ptr noundef %410) #4
  %412 = tail call ptr @BN_Set(ptr noundef %143, i32 noundef %107, ptr noundef nonnull %1)
  %413 = shl nuw nsw i32 %107, 6
  %414 = getelementptr i64, ptr %143, i64 %225
  %415 = getelementptr i8, ptr %414, i64 -8
  %416 = load i64, ptr %415, align 8, !tbaa !12
  %417 = tail call i32 @cpNLZ_BNU(i64 noundef %416) #4
  %418 = sub nsw i32 %413, %417
  %419 = getelementptr inbounds i8, ptr %4, i64 12
  store i32 %418, ptr %419, align 4, !tbaa !50
  br label %445

.thread:                                          ; preds = %151, %159, %186, %213, %171, %._crit_edge405, %._crit_edge
  %.6 = phi i32 [ %.4, %._crit_edge405 ], [ %.1330, %._crit_edge ], [ %.1330, %171 ], [ %187, %186 ], [ %217, %213 ], [ %152, %151 ], [ %163, %159 ]
  %420 = icmp sgt i32 %129, 63
  br i1 %420, label %.lr.ph437.preheader, label %.preheader386

.lr.ph437.preheader:                              ; preds = %.thread
  %421 = add nsw i32 %130, -1
  %422 = zext i32 %421 to i64
  %423 = shl nuw nsw i64 %422, 3
  %424 = add nuw nsw i64 %423, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %122, i8 0, i64 %424, i1 false), !tbaa !12
  br label %.preheader386

.preheader386:                                    ; preds = %114, %.lr.ph437.preheader, %.thread
  %425 = phi i1 [ true, %.lr.ph437.preheader ], [ false, %.thread ], [ false, %114 ]
  %.6504 = phi i32 [ %.6, %.lr.ph437.preheader ], [ %.6, %.thread ], [ -1, %114 ]
  %426 = icmp sgt i32 %138, 63
  br i1 %426, label %.lr.ph439.preheader, label %.preheader385

.lr.ph439.preheader:                              ; preds = %.preheader386
  %427 = add nsw i32 %139, -1
  %428 = zext i32 %427 to i64
  %429 = shl nuw nsw i64 %428, 3
  %430 = add nuw nsw i64 %429, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %134, i8 0, i64 %430, i1 false), !tbaa !12
  br label %.preheader385

.preheader385:                                    ; preds = %.lr.ph439.preheader, %.preheader386
  br i1 %425, label %.lr.ph441.preheader, label %.preheader384

.lr.ph441.preheader:                              ; preds = %.preheader385
  %431 = add nsw i32 %130, -1
  %432 = zext i32 %431 to i64
  %433 = shl nuw nsw i64 %432, 3
  %434 = add nuw nsw i64 %433, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %125, i8 0, i64 %434, i1 false), !tbaa !12
  br label %.preheader384

.preheader384:                                    ; preds = %.lr.ph441.preheader, %.preheader385
  br i1 %426, label %.lr.ph443.preheader, label %.preheader

.lr.ph443.preheader:                              ; preds = %.preheader384
  %435 = add nsw i32 %139, -1
  %436 = zext i32 %435 to i64
  %437 = shl nuw nsw i64 %436, 3
  %438 = add nuw nsw i64 %437, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %136, i8 0, i64 %438, i1 false), !tbaa !12
  br label %.preheader

.preheader:                                       ; preds = %.lr.ph443.preheader, %.preheader384
  br i1 %425, label %.lr.ph445.preheader, label %._crit_edge446

.lr.ph445.preheader:                              ; preds = %.preheader
  %439 = add nsw i32 %130, -1
  %440 = zext i32 %439 to i64
  %441 = shl nuw nsw i64 %440, 3
  %442 = add nuw nsw i64 %441, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %128, i8 0, i64 %442, i1 false), !tbaa !12
  br label %._crit_edge446

._crit_edge446:                                   ; preds = %.lr.ph445.preheader, %.preheader
  %443 = icmp slt i32 %.6504, 0
  %444 = select i1 %443, i32 -2, i32 25
  br label %445

445:                                              ; preds = %101, %110, %._crit_edge446, %._crit_edge435, %68, %62, %60, %54, %47, %41, %39, %33, %31, %27, %22, %19, %13, %10
  %.2 = phi i32 [ -8, %10 ], [ -13, %13 ], [ -11, %19 ], [ -5, %22 ], [ -5, %27 ], [ -8, %31 ], [ -13, %33 ], [ -8, %39 ], [ -13, %41 ], [ -6, %47 ], [ -13, %54 ], [ -8, %60 ], [ -13, %62 ], [ -8, %68 ], [ -6, %101 ], [ -6, %110 ], [ 0, %._crit_edge435 ], [ %444, %._crit_edge446 ]
  ret i32 %.2
}

; 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 @cpBN_tst(ptr noundef) local_unnamed_addr #1

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

declare ptr @cpBN_ThreeRef() local_unnamed_addr #2

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

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

declare i32 @cpPRNGenPattern(ptr noundef, i32 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i64 @cpDec_BNU(ptr noundef, ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #2

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

declare i64 @cpInc_BNU(ptr noundef, ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #2

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

declare ptr @gsModArithRSA() local_unnamed_addr #2

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

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

declare i64 @cpSub_BNU(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare i32 @cpNLZ_BNU(i64 noundef) local_unnamed_addr #2

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

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

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

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

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

attributes #0 = { 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 nounwind willreturn memory(argmem: write) }
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, !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, !10, i64 16}
!12 = !{!13, !13, i64 0}
!13 = !{!"long long", !8, i64 0}
!14 = !{!6, !7, i64 12}
!15 = !{!6, !7, i64 8}
!16 = !{!17, !7, i64 0}
!17 = !{!"_cpRSA_private_key", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80}
!18 = !{!17, !7, i64 20}
!19 = !{!17, !7, i64 24}
!20 = !{!17, !10, i64 64}
!21 = !{!22, !10, i64 48}
!22 = !{!"_gsModEngine", !10, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !13, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !7, i64 96, !7, i64 100, !10, i64 104}
!23 = !{!17, !10, i64 40}
!24 = !{!17, !10, i64 56}
!25 = !{!17, !10, i64 72}
!26 = !{!17, !10, i64 48}
!27 = !{!17, !10, i64 80}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = !{!6, !10, i64 24}
!32 = distinct !{!32, !29, !33, !34}
!33 = !{!"llvm.loop.isvectorized", i32 1}
!34 = !{!"llvm.loop.unroll.runtime.disable"}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.unroll.disable"}
!37 = distinct !{!37, !29, !33}
!38 = distinct !{!38, !36}
!39 = distinct !{!39, !29, !33, !34}
!40 = distinct !{!40, !29, !33}
!41 = distinct !{!41, !29, !33, !34}
!42 = distinct !{!42, !36}
!43 = distinct !{!43, !29, !33}
!44 = distinct !{!44, !36}
!45 = distinct !{!45, !29, !33, !34}
!46 = distinct !{!46, !29, !33}
!47 = distinct !{!47, !29, !33, !34}
!48 = distinct !{!48, !36}
!49 = distinct !{!49, !29, !33}
!50 = !{!17, !7, i64 12}


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