; LLVM IR from intel/cryptography-primitives :: sources/ippcp/gfpec/sm2 (sm2_key_exchange_setup)

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

; Function Attrs: nounwind uwtable
define dso_local i32 @ippsGFpECKeyExchangeSM2_Setup(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) #0 {
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store ptr %4, ptr %13, align 8, !tbaa !5
  store ptr %5, ptr %14, align 8, !tbaa !5
  store ptr %6, ptr %15, align 8, !tbaa !5
  %31 = load ptr, ptr %15, align 8, !tbaa !5
  %32 = icmp eq ptr null, %31
  br i1 %32, label %33, label %34

33:                                               ; preds = %7
  store i32 -8, ptr %8, align 4
  br label %355

34:                                               ; preds = %7
  %35 = load ptr, ptr %15, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %35, i32 0, i32 0
  %37 = load i32, ptr %36, align 8, !tbaa !9
  %38 = load ptr, ptr %15, align 8, !tbaa !5
  %39 = call i64 @IPP_UINT_PTR(ptr noundef %38)
  %40 = trunc i64 %39 to i32
  %41 = xor i32 %37, %40
  %42 = icmp eq i32 %41, 1129136469
  br i1 %42, label %44, label %43

43:                                               ; preds = %34
  store i32 -13, ptr %8, align 4
  br label %355

44:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %45 = load ptr, ptr %15, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %45, i32 0, i32 1
  %47 = load i32, ptr %46, align 4, !tbaa !12
  store i32 %47, ptr %16, align 4, !tbaa !13
  %48 = load i32, ptr %16, align 4, !tbaa !13
  %49 = icmp ne i32 15, %48
  br i1 %49, label %50, label %54

50:                                               ; preds = %44
  %51 = load i32, ptr %16, align 4, !tbaa !13
  %52 = icmp ne i32 16, %51
  br i1 %52, label %53, label %54

53:                                               ; preds = %50
  store i32 -5, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %354

54:                                               ; preds = %50, %44
  %55 = load ptr, ptr %9, align 8, !tbaa !5
  %56 = icmp eq ptr null, %55
  br i1 %56, label %57, label %58

57:                                               ; preds = %54
  store i32 -8, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %354

58:                                               ; preds = %54
  %59 = load ptr, ptr %10, align 8, !tbaa !5
  %60 = icmp eq ptr null, %59
  br i1 %60, label %61, label %62

61:                                               ; preds = %58
  store i32 -8, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %354

62:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %63 = load ptr, ptr %15, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %63, i32 0, i32 2
  %65 = load ptr, ptr %64, align 8, !tbaa !14
  store ptr %65, ptr %18, align 8, !tbaa !5
  %66 = load ptr, ptr %18, align 8, !tbaa !5
  %67 = icmp eq ptr null, %66
  br i1 %67, label %68, label %69

68:                                               ; preds = %62
  store i32 -8, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %353

69:                                               ; preds = %62
  %70 = load ptr, ptr %18, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct._cpGFpEC, ptr %70, i32 0, i32 0
  %72 = load i32, ptr %71, align 8, !tbaa !15
  %73 = load ptr, ptr %18, align 8, !tbaa !5
  %74 = call i64 @IPP_UINT_PTR(ptr noundef %73)
  %75 = trunc i64 %74 to i32
  %76 = xor i32 %72, %75
  %77 = icmp eq i32 %76, 1129136461
  br i1 %77, label %79, label %78

78:                                               ; preds = %69
  store i32 -13, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %353

79:                                               ; preds = %69
  %80 = load ptr, ptr %18, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct._cpGFpEC, ptr %80, i32 0, i32 3
  %82 = load i32, ptr %81, align 8, !tbaa !17
  %83 = icmp ne i32 %82, 0
  br i1 %83, label %85, label %84

84:                                               ; preds = %79
  store i32 -13, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %353

85:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  %86 = load ptr, ptr %18, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct._cpGFpEC, ptr %86, i32 0, i32 2
  %88 = load ptr, ptr %87, align 8, !tbaa !18
  %89 = getelementptr inbounds %struct._cpGFp, ptr %88, i32 0, i32 2
  %90 = load ptr, ptr %89, align 8, !tbaa !19
  store ptr %90, ptr %19, align 8, !tbaa !5
  %91 = load ptr, ptr %19, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct._gsModEngine, ptr %91, i32 0, i32 1
  %93 = load i32, ptr %92, align 8, !tbaa !21
  %94 = icmp slt i32 1, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %85
  store i32 -14, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %352

96:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  %97 = load ptr, ptr %18, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct._cpGFpEC, ptr %97, i32 0, i32 13
  %99 = load ptr, ptr %98, align 8, !tbaa !24
  store ptr %99, ptr %20, align 8, !tbaa !5
  %100 = load ptr, ptr %20, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct._gsModEngine, ptr %100, i32 0, i32 1
  %102 = load i32, ptr %101, align 8, !tbaa !21
  %103 = icmp slt i32 1, %102
  br i1 %103, label %104, label %105

104:                                              ; preds = %96
  store i32 -14, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

105:                                              ; preds = %96
  %106 = load ptr, ptr %18, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct._cpGFpEC, ptr %106, i32 0, i32 5
  %108 = load i32, ptr %107, align 8, !tbaa !25
  %109 = icmp sge i32 %108, 256
  br i1 %109, label %111, label %110

110:                                              ; preds = %105
  store i32 -7, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

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

114:                                              ; preds = %111
  store i32 -8, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

115:                                              ; preds = %111
  %116 = load ptr, ptr %11, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct._cpGFpECPoint, ptr %116, i32 0, i32 0
  %118 = load i32, ptr %117, align 8, !tbaa !26
  %119 = load ptr, ptr %11, 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, 1129136462
  br i1 %123, label %125, label %124

124:                                              ; preds = %115
  store i32 -13, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

125:                                              ; preds = %115
  %126 = load ptr, ptr %11, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct._cpGFpECPoint, ptr %126, i32 0, i32 2
  %128 = load i32, ptr %127, align 8, !tbaa !28
  %129 = load ptr, ptr %19, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct._gsModEngine, ptr %129, i32 0, i32 3
  %131 = load i32, ptr %130, align 8, !tbaa !29
  %132 = icmp ne i32 %128, %131
  br i1 %132, label %133, label %134

133:                                              ; preds = %125
  store i32 -11, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

134:                                              ; preds = %125
  %135 = load ptr, ptr %11, align 8, !tbaa !5
  %136 = load ptr, ptr %18, align 8, !tbaa !5
  %137 = call i32 @gfec_IsPointOnCurve(ptr noundef %135, ptr noundef %136)
  %138 = icmp eq i32 0, %137
  br i1 %138, label %139, label %140

139:                                              ; preds = %134
  store i32 -1017, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

140:                                              ; preds = %134
  %141 = load ptr, ptr %13, align 8, !tbaa !5
  %142 = icmp eq ptr null, %141
  br i1 %142, label %143, label %144

143:                                              ; preds = %140
  store i32 -8, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

144:                                              ; preds = %140
  %145 = load ptr, ptr %13, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct._cpGFpECPoint, ptr %145, i32 0, i32 0
  %147 = load i32, ptr %146, align 8, !tbaa !26
  %148 = load ptr, ptr %13, align 8, !tbaa !5
  %149 = call i64 @IPP_UINT_PTR(ptr noundef %148)
  %150 = trunc i64 %149 to i32
  %151 = xor i32 %147, %150
  %152 = icmp eq i32 %151, 1129136462
  br i1 %152, label %154, label %153

153:                                              ; preds = %144
  store i32 -13, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

154:                                              ; preds = %144
  %155 = load ptr, ptr %13, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct._cpGFpECPoint, ptr %155, i32 0, i32 2
  %157 = load i32, ptr %156, align 8, !tbaa !28
  %158 = load ptr, ptr %19, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct._gsModEngine, ptr %158, i32 0, i32 3
  %160 = load i32, ptr %159, align 8, !tbaa !29
  %161 = icmp ne i32 %157, %160
  br i1 %161, label %162, label %163

162:                                              ; preds = %154
  store i32 -11, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

163:                                              ; preds = %154
  %164 = load ptr, ptr %13, align 8, !tbaa !5
  %165 = load ptr, ptr %18, align 8, !tbaa !5
  %166 = call i32 @gfec_IsPointOnCurve(ptr noundef %164, ptr noundef %165)
  %167 = icmp eq i32 0, %166
  br i1 %167, label %168, label %169

168:                                              ; preds = %163
  store i32 -1017, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

169:                                              ; preds = %163
  %170 = load ptr, ptr %12, align 8, !tbaa !5
  %171 = icmp eq ptr null, %170
  br i1 %171, label %172, label %173

172:                                              ; preds = %169
  store i32 -8, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

173:                                              ; preds = %169
  %174 = load ptr, ptr %12, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct._cpGFpECPoint, ptr %174, i32 0, i32 0
  %176 = load i32, ptr %175, align 8, !tbaa !26
  %177 = load ptr, ptr %12, align 8, !tbaa !5
  %178 = call i64 @IPP_UINT_PTR(ptr noundef %177)
  %179 = trunc i64 %178 to i32
  %180 = xor i32 %176, %179
  %181 = icmp eq i32 %180, 1129136462
  br i1 %181, label %183, label %182

182:                                              ; preds = %173
  store i32 -13, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

183:                                              ; preds = %173
  %184 = load ptr, ptr %12, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct._cpGFpECPoint, ptr %184, i32 0, i32 2
  %186 = load i32, ptr %185, align 8, !tbaa !28
  %187 = load ptr, ptr %19, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct._gsModEngine, ptr %187, i32 0, i32 3
  %189 = load i32, ptr %188, align 8, !tbaa !29
  %190 = icmp ne i32 %186, %189
  br i1 %190, label %191, label %192

191:                                              ; preds = %183
  store i32 -11, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

192:                                              ; preds = %183
  %193 = load ptr, ptr %12, align 8, !tbaa !5
  %194 = load ptr, ptr %18, align 8, !tbaa !5
  %195 = call i32 @gfec_IsPointOnCurve(ptr noundef %193, ptr noundef %194)
  %196 = icmp eq i32 0, %195
  br i1 %196, label %197, label %198

197:                                              ; preds = %192
  store i32 -1017, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

198:                                              ; preds = %192
  %199 = load ptr, ptr %14, align 8, !tbaa !5
  %200 = icmp eq ptr null, %199
  br i1 %200, label %201, label %202

201:                                              ; preds = %198
  store i32 -8, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

202:                                              ; preds = %198
  %203 = load ptr, ptr %14, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct._cpGFpECPoint, ptr %203, i32 0, i32 0
  %205 = load i32, ptr %204, align 8, !tbaa !26
  %206 = load ptr, ptr %14, align 8, !tbaa !5
  %207 = call i64 @IPP_UINT_PTR(ptr noundef %206)
  %208 = trunc i64 %207 to i32
  %209 = xor i32 %205, %208
  %210 = icmp eq i32 %209, 1129136462
  br i1 %210, label %212, label %211

211:                                              ; preds = %202
  store i32 -13, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

212:                                              ; preds = %202
  %213 = load ptr, ptr %14, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct._cpGFpECPoint, ptr %213, i32 0, i32 2
  %215 = load i32, ptr %214, align 8, !tbaa !28
  %216 = load ptr, ptr %19, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct._gsModEngine, ptr %216, i32 0, i32 3
  %218 = load i32, ptr %217, align 8, !tbaa !29
  %219 = icmp ne i32 %215, %218
  br i1 %219, label %220, label %221

220:                                              ; preds = %212
  store i32 -11, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

221:                                              ; preds = %212
  %222 = load ptr, ptr %14, align 8, !tbaa !5
  %223 = load ptr, ptr %18, align 8, !tbaa !5
  %224 = call i32 @gfec_IsPointOnCurve(ptr noundef %222, ptr noundef %223)
  %225 = icmp eq i32 0, %224
  br i1 %225, label %226, label %227

226:                                              ; preds = %221
  store i32 -1017, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %351

227:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %228 = load ptr, ptr %19, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct._gsModEngine, ptr %228, i32 0, i32 3
  %230 = load i32, ptr %229, align 8, !tbaa !29
  store i32 %230, ptr %21, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  %231 = load i32, ptr %16, align 4, !tbaa !13
  %232 = icmp eq i32 15, %231
  br i1 %232, label %233, label %237

233:                                              ; preds = %227
  %234 = load ptr, ptr %15, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %234, i32 0, i32 7
  %236 = load ptr, ptr %235, align 8, !tbaa !30
  br label %241

237:                                              ; preds = %227
  %238 = load ptr, ptr %15, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %238, i32 0, i32 8
  %240 = load ptr, ptr %239, align 8, !tbaa !31
  br label %241

241:                                              ; preds = %237, %233
  %242 = phi ptr [ %236, %233 ], [ %240, %237 ]
  store ptr %242, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  %243 = load i32, ptr %16, align 4, !tbaa !13
  %244 = icmp eq i32 15, %243
  br i1 %244, label %245, label %249

245:                                              ; preds = %241
  %246 = load ptr, ptr %15, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %246, i32 0, i32 8
  %248 = load ptr, ptr %247, align 8, !tbaa !31
  br label %253

249:                                              ; preds = %241
  %250 = load ptr, ptr %15, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %250, i32 0, i32 7
  %252 = load ptr, ptr %251, align 8, !tbaa !30
  br label %253

253:                                              ; preds = %249, %245
  %254 = phi ptr [ %248, %245 ], [ %252, %249 ]
  store ptr %254, ptr %23, align 8, !tbaa !5
  %255 = load ptr, ptr %9, align 8, !tbaa !5
  %256 = load ptr, ptr %22, align 8, !tbaa !5
  call void @CopyBlock(ptr noundef %255, ptr noundef %256, i32 noundef 32)
  %257 = load ptr, ptr %10, align 8, !tbaa !5
  %258 = load ptr, ptr %23, align 8, !tbaa !5
  call void @CopyBlock(ptr noundef %257, ptr noundef %258, i32 noundef 32)
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  %259 = load i32, ptr %16, align 4, !tbaa !13
  %260 = icmp eq i32 15, %259
  br i1 %260, label %261, label %263

261:                                              ; preds = %253
  %262 = load ptr, ptr %11, align 8, !tbaa !5
  br label %265

263:                                              ; preds = %253
  %264 = load ptr, ptr %12, align 8, !tbaa !5
  br label %265

265:                                              ; preds = %263, %261
  %266 = phi ptr [ %262, %261 ], [ %264, %263 ]
  store ptr %266, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %267 = load i32, ptr %16, align 4, !tbaa !13
  %268 = icmp eq i32 15, %267
  br i1 %268, label %269, label %271

269:                                              ; preds = %265
  %270 = load ptr, ptr %13, align 8, !tbaa !5
  br label %273

271:                                              ; preds = %265
  %272 = load ptr, ptr %14, align 8, !tbaa !5
  br label %273

273:                                              ; preds = %271, %269
  %274 = phi ptr [ %270, %269 ], [ %272, %271 ]
  store ptr %274, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  %275 = load i32, ptr %16, align 4, !tbaa !13
  %276 = icmp eq i32 15, %275
  br i1 %276, label %277, label %279

277:                                              ; preds = %273
  %278 = load ptr, ptr %12, align 8, !tbaa !5
  br label %281

279:                                              ; preds = %273
  %280 = load ptr, ptr %11, align 8, !tbaa !5
  br label %281

281:                                              ; preds = %279, %277
  %282 = phi ptr [ %278, %277 ], [ %280, %279 ]
  store ptr %282, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  %283 = load i32, ptr %16, align 4, !tbaa !13
  %284 = icmp eq i32 15, %283
  br i1 %284, label %285, label %287

285:                                              ; preds = %281
  %286 = load ptr, ptr %14, align 8, !tbaa !5
  br label %289

287:                                              ; preds = %281
  %288 = load ptr, ptr %13, align 8, !tbaa !5
  br label %289

289:                                              ; preds = %287, %285
  %290 = phi ptr [ %286, %285 ], [ %288, %287 ]
  store ptr %290, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  store i32 24, ptr %28, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %291 = load i32, ptr %21, align 4, !tbaa !13
  %292 = mul nsw i32 24, %291
  store i32 %292, ptr %29, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  %293 = load ptr, ptr %15, align 8, !tbaa !5
  %294 = getelementptr inbounds i8, ptr %293, i64 80
  store ptr %294, ptr %30, align 8, !tbaa !5
  %295 = load ptr, ptr %30, align 8, !tbaa !5
  %296 = load ptr, ptr %15, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %296, i32 0, i32 3
  store ptr %295, ptr %297, align 8, !tbaa !32
  %298 = load ptr, ptr %30, align 8, !tbaa !5
  %299 = getelementptr inbounds i8, ptr %298, i64 24
  store ptr %299, ptr %30, align 8, !tbaa !5
  %300 = load ptr, ptr %15, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %300, i32 0, i32 3
  %302 = load ptr, ptr %301, align 8, !tbaa !32
  %303 = load ptr, ptr %30, align 8, !tbaa !5
  %304 = load ptr, ptr %24, align 8, !tbaa !5
  %305 = load ptr, ptr %18, align 8, !tbaa !5
  call void @cpSM2KE_CopyPointData(ptr noundef %302, ptr noundef %303, ptr noundef %304, ptr noundef %305)
  %306 = load i32, ptr %29, align 4, !tbaa !13
  %307 = load ptr, ptr %30, align 8, !tbaa !5
  %308 = sext i32 %306 to i64
  %309 = getelementptr inbounds i8, ptr %307, i64 %308
  store ptr %309, ptr %30, align 8, !tbaa !5
  %310 = load ptr, ptr %30, align 8, !tbaa !5
  %311 = load ptr, ptr %15, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %311, i32 0, i32 5
  store ptr %310, ptr %312, align 8, !tbaa !33
  %313 = load ptr, ptr %30, align 8, !tbaa !5
  %314 = getelementptr inbounds i8, ptr %313, i64 24
  store ptr %314, ptr %30, align 8, !tbaa !5
  %315 = load ptr, ptr %15, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %315, i32 0, i32 5
  %317 = load ptr, ptr %316, align 8, !tbaa !33
  %318 = load ptr, ptr %30, align 8, !tbaa !5
  %319 = load ptr, ptr %25, align 8, !tbaa !5
  %320 = load ptr, ptr %18, align 8, !tbaa !5
  call void @cpSM2KE_CopyPointData(ptr noundef %317, ptr noundef %318, ptr noundef %319, ptr noundef %320)
  %321 = load i32, ptr %29, align 4, !tbaa !13
  %322 = load ptr, ptr %30, align 8, !tbaa !5
  %323 = sext i32 %321 to i64
  %324 = getelementptr inbounds i8, ptr %322, i64 %323
  store ptr %324, ptr %30, align 8, !tbaa !5
  %325 = load ptr, ptr %30, align 8, !tbaa !5
  %326 = load ptr, ptr %15, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %326, i32 0, i32 4
  store ptr %325, ptr %327, align 8, !tbaa !34
  %328 = load ptr, ptr %30, align 8, !tbaa !5
  %329 = getelementptr inbounds i8, ptr %328, i64 24
  store ptr %329, ptr %30, align 8, !tbaa !5
  %330 = load ptr, ptr %15, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %330, i32 0, i32 4
  %332 = load ptr, ptr %331, align 8, !tbaa !34
  %333 = load ptr, ptr %30, align 8, !tbaa !5
  %334 = load ptr, ptr %26, align 8, !tbaa !5
  %335 = load ptr, ptr %18, align 8, !tbaa !5
  call void @cpSM2KE_CopyPointData(ptr noundef %332, ptr noundef %333, ptr noundef %334, ptr noundef %335)
  %336 = load i32, ptr %29, align 4, !tbaa !13
  %337 = load ptr, ptr %30, align 8, !tbaa !5
  %338 = sext i32 %336 to i64
  %339 = getelementptr inbounds i8, ptr %337, i64 %338
  store ptr %339, ptr %30, align 8, !tbaa !5
  %340 = load ptr, ptr %30, align 8, !tbaa !5
  %341 = load ptr, ptr %15, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %341, i32 0, i32 6
  store ptr %340, ptr %342, align 8, !tbaa !35
  %343 = load ptr, ptr %30, align 8, !tbaa !5
  %344 = getelementptr inbounds i8, ptr %343, i64 24
  store ptr %344, ptr %30, align 8, !tbaa !5
  %345 = load ptr, ptr %15, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct._GFpECKeyExchangeSM2, ptr %345, i32 0, i32 6
  %347 = load ptr, ptr %346, align 8, !tbaa !35
  %348 = load ptr, ptr %30, align 8, !tbaa !5
  %349 = load ptr, ptr %27, align 8, !tbaa !5
  %350 = load ptr, ptr %18, align 8, !tbaa !5
  call void @cpSM2KE_CopyPointData(ptr noundef %347, ptr noundef %348, ptr noundef %349, ptr noundef %350)
  store i32 0, ptr %8, align 4
  store i32 1, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %351

351:                                              ; preds = %289, %226, %220, %211, %201, %197, %191, %182, %172, %168, %162, %153, %143, %139, %133, %124, %114, %110, %104
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  br label %352

352:                                              ; preds = %351, %95
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  br label %353

353:                                              ; preds = %352, %84, %78, %68
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  br label %354

354:                                              ; preds = %353, %61, %57, %53
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %355

355:                                              ; preds = %354, %43, %33
  %356 = load i32, ptr %8, align 4
  ret i32 %356
}

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_GFpECKeyExchangeSM2", !11, i64 0, !11, i64 4, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72}
!11 = !{!"int", !7, i64 0}
!12 = !{!10, !11, i64 4}
!13 = !{!11, !11, i64 0}
!14 = !{!10, !6, i64 8}
!15 = !{!16, !11, i64 0}
!16 = !{!"_cpGFpEC", !11, i64 0, !11, i64 4, !6, i64 8, !11, i64 16, !11, i64 20, !11, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !11, i64 64, !11, i64 68, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128}
!17 = !{!16, !11, i64 16}
!18 = !{!16, !6, i64 8}
!19 = !{!20, !6, i64 8}
!20 = !{!"_cpGFp", !11, i64 0, !11, i64 4, !6, i64 8}
!21 = !{!22, !11, i64 8}
!22 = !{!"_gsModEngine", !6, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !23, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !11, i64 96, !11, i64 100, !6, i64 104}
!23 = !{!"long long", !7, i64 0}
!24 = !{!16, !6, i64 80}
!25 = !{!16, !11, i64 24}
!26 = !{!27, !11, i64 0}
!27 = !{!"_cpGFpECPoint", !11, i64 0, !11, i64 4, !11, i64 8, !6, i64 16}
!28 = !{!27, !11, i64 8}
!29 = !{!22, !11, i64 16}
!30 = !{!10, !6, i64 48}
!31 = !{!10, !6, i64 56}
!32 = !{!10, !6, i64 16}
!33 = !{!10, !6, i64 32}
!34 = !{!10, !6, i64 24}
!35 = !{!10, !6, i64 40}


; 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 -1017, 1) i32 @ippsGFpECKeyExchangeSM2_Setup(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) local_unnamed_addr #0 {
  %8 = icmp eq ptr %6, null
  br i1 %8, label %141, label %9

9:                                                ; preds = %7
  %10 = load i32, ptr %6, align 8, !tbaa !5
  %11 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %6)
  %12 = trunc i64 %11 to i32
  %13 = xor i32 %10, %12
  %14 = icmp eq i32 %13, 1129136469
  br i1 %14, label %15, label %141

15:                                               ; preds = %9
  %16 = getelementptr inbounds i8, ptr %6, i64 4
  %17 = load i32, ptr %16, align 4, !tbaa !11
  %18 = add i32 %17, -17
  %or.cond = icmp ult i32 %18, -2
  br i1 %or.cond, label %141, label %19

19:                                               ; preds = %15
  %20 = icmp eq ptr %0, null
  %21 = icmp eq ptr %1, null
  %or.cond119 = or i1 %20, %21
  br i1 %or.cond119, label %141, label %22

22:                                               ; preds = %19
  %23 = getelementptr inbounds i8, ptr %6, i64 8
  %24 = load ptr, ptr %23, align 8, !tbaa !12
  %25 = icmp eq ptr %24, null
  br i1 %25, label %141, label %26

26:                                               ; preds = %22
  %27 = load i32, ptr %24, align 8, !tbaa !13
  %28 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %24)
  %29 = trunc i64 %28 to i32
  %30 = xor i32 %27, %29
  %31 = icmp eq i32 %30, 1129136461
  br i1 %31, label %32, label %141

32:                                               ; preds = %26
  %33 = getelementptr inbounds i8, ptr %24, i64 16
  %34 = load i32, ptr %33, align 8, !tbaa !15
  %.not = icmp eq i32 %34, 0
  br i1 %.not, label %141, label %35

35:                                               ; preds = %32
  %36 = getelementptr inbounds i8, ptr %24, i64 8
  %37 = load ptr, ptr %36, align 8, !tbaa !16
  %38 = getelementptr inbounds i8, ptr %37, i64 8
  %39 = load ptr, ptr %38, align 8, !tbaa !17
  %40 = getelementptr inbounds i8, ptr %39, i64 8
  %41 = load i32, ptr %40, align 8, !tbaa !19
  %42 = icmp sgt i32 %41, 1
  br i1 %42, label %141, label %43

43:                                               ; preds = %35
  %44 = getelementptr inbounds i8, ptr %24, i64 80
  %45 = load ptr, ptr %44, align 8, !tbaa !22
  %46 = getelementptr inbounds i8, ptr %45, i64 8
  %47 = load i32, ptr %46, align 8, !tbaa !19
  %48 = icmp sgt i32 %47, 1
  br i1 %48, label %141, label %49

49:                                               ; preds = %43
  %50 = getelementptr inbounds i8, ptr %24, i64 24
  %51 = load i32, ptr %50, align 8, !tbaa !23
  %52 = icmp sgt i32 %51, 255
  br i1 %52, label %53, label %141

53:                                               ; preds = %49
  %54 = icmp eq ptr %2, null
  br i1 %54, label %141, label %55

55:                                               ; preds = %53
  %56 = load i32, ptr %2, align 8, !tbaa !24
  %57 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %2)
  %58 = trunc i64 %57 to i32
  %59 = xor i32 %56, %58
  %60 = icmp eq i32 %59, 1129136462
  br i1 %60, label %61, label %141

61:                                               ; preds = %55
  %62 = getelementptr inbounds i8, ptr %2, i64 8
  %63 = load i32, ptr %62, align 8, !tbaa !26
  %64 = getelementptr inbounds i8, ptr %39, i64 16
  %65 = load i32, ptr %64, align 8, !tbaa !27
  %.not114 = icmp eq i32 %63, %65
  br i1 %.not114, label %66, label %141

66:                                               ; preds = %61
  %67 = tail call i32 @gfec_IsPointOnCurve(ptr noundef nonnull %2, ptr noundef nonnull %24) #3
  %68 = icmp eq i32 %67, 0
  br i1 %68, label %141, label %69

69:                                               ; preds = %66
  %70 = icmp eq ptr %4, null
  br i1 %70, label %141, label %71

71:                                               ; preds = %69
  %72 = load i32, ptr %4, align 8, !tbaa !24
  %73 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %4)
  %74 = trunc i64 %73 to i32
  %75 = xor i32 %72, %74
  %76 = icmp eq i32 %75, 1129136462
  br i1 %76, label %77, label %141

77:                                               ; preds = %71
  %78 = getelementptr inbounds i8, ptr %4, i64 8
  %79 = load i32, ptr %78, align 8, !tbaa !26
  %80 = load i32, ptr %64, align 8, !tbaa !27
  %.not115 = icmp eq i32 %79, %80
  br i1 %.not115, label %81, label %141

81:                                               ; preds = %77
  %82 = tail call i32 @gfec_IsPointOnCurve(ptr noundef nonnull %4, ptr noundef nonnull %24) #3
  %83 = icmp eq i32 %82, 0
  br i1 %83, label %141, label %84

84:                                               ; preds = %81
  %85 = icmp eq ptr %3, null
  br i1 %85, label %141, label %86

86:                                               ; preds = %84
  %87 = load i32, ptr %3, align 8, !tbaa !24
  %88 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %3)
  %89 = trunc i64 %88 to i32
  %90 = xor i32 %87, %89
  %91 = icmp eq i32 %90, 1129136462
  br i1 %91, label %92, label %141

92:                                               ; preds = %86
  %93 = getelementptr inbounds i8, ptr %3, i64 8
  %94 = load i32, ptr %93, align 8, !tbaa !26
  %95 = load i32, ptr %64, align 8, !tbaa !27
  %.not116 = icmp eq i32 %94, %95
  br i1 %.not116, label %96, label %141

96:                                               ; preds = %92
  %97 = tail call i32 @gfec_IsPointOnCurve(ptr noundef nonnull %3, ptr noundef nonnull %24) #3
  %98 = icmp eq i32 %97, 0
  br i1 %98, label %141, label %99

99:                                               ; preds = %96
  %100 = icmp eq ptr %5, null
  br i1 %100, label %141, label %101

101:                                              ; preds = %99
  %102 = load i32, ptr %5, align 8, !tbaa !24
  %103 = tail call i64 @IPP_UINT_PTR(ptr noundef nonnull %5)
  %104 = trunc i64 %103 to i32
  %105 = xor i32 %102, %104
  %106 = icmp eq i32 %105, 1129136462
  br i1 %106, label %107, label %141

107:                                              ; preds = %101
  %108 = getelementptr inbounds i8, ptr %5, i64 8
  %109 = load i32, ptr %108, align 8, !tbaa !26
  %110 = load i32, ptr %64, align 8, !tbaa !27
  %.not117 = icmp eq i32 %109, %110
  br i1 %.not117, label %111, label %141

111:                                              ; preds = %107
  %112 = tail call i32 @gfec_IsPointOnCurve(ptr noundef nonnull %5, ptr noundef nonnull %24) #3
  %113 = icmp eq i32 %112, 0
  br i1 %113, label %141, label %114

114:                                              ; preds = %111
  %115 = load i32, ptr %64, align 8, !tbaa !27
  %116 = icmp eq i32 %17, 15
  %117 = getelementptr inbounds i8, ptr %6, i64 48
  %118 = getelementptr inbounds i8, ptr %6, i64 56
  %.in = select i1 %116, ptr %117, ptr %118
  %119 = load ptr, ptr %.in, align 8, !tbaa !28
  br i1 %116, label %121, label %120

120:                                              ; preds = %114
  br label %121

121:                                              ; preds = %114, %120
  %122 = phi ptr [ %4, %120 ], [ %5, %114 ]
  %123 = phi ptr [ %2, %120 ], [ %3, %114 ]
  %124 = phi ptr [ %5, %120 ], [ %4, %114 ]
  %125 = phi ptr [ %3, %120 ], [ %2, %114 ]
  %.in118 = phi ptr [ %117, %120 ], [ %118, %114 ]
  %126 = load ptr, ptr %.in118, align 8, !tbaa !28
  tail call void @CopyBlock(ptr noundef nonnull %0, ptr noundef %119, i32 noundef 32)
  tail call void @CopyBlock(ptr noundef nonnull %1, ptr noundef %126, i32 noundef 32)
  %127 = mul nsw i32 %115, 24
  %128 = getelementptr inbounds i8, ptr %6, i64 80
  %129 = getelementptr inbounds i8, ptr %6, i64 16
  store ptr %128, ptr %129, align 8, !tbaa !29
  %130 = getelementptr inbounds i8, ptr %6, i64 104
  tail call void @cpSM2KE_CopyPointData(ptr noundef nonnull %128, ptr noundef nonnull %130, ptr noundef nonnull %125, ptr noundef nonnull %24)
  %131 = sext i32 %127 to i64
  %132 = getelementptr inbounds i8, ptr %130, i64 %131
  %133 = getelementptr inbounds i8, ptr %6, i64 32
  store ptr %132, ptr %133, align 8, !tbaa !30
  %134 = getelementptr inbounds i8, ptr %132, i64 24
  tail call void @cpSM2KE_CopyPointData(ptr noundef nonnull %132, ptr noundef nonnull %134, ptr noundef nonnull %124, ptr noundef nonnull %24)
  %135 = getelementptr inbounds i8, ptr %134, i64 %131
  %136 = getelementptr inbounds i8, ptr %6, i64 24
  store ptr %135, ptr %136, align 8, !tbaa !31
  %137 = getelementptr inbounds i8, ptr %135, i64 24
  tail call void @cpSM2KE_CopyPointData(ptr noundef nonnull %135, ptr noundef nonnull %137, ptr noundef nonnull %123, ptr noundef nonnull %24)
  %138 = getelementptr inbounds i8, ptr %137, i64 %131
  %139 = getelementptr inbounds i8, ptr %6, i64 40
  store ptr %138, ptr %139, align 8, !tbaa !32
  %140 = getelementptr inbounds i8, ptr %138, i64 24
  tail call void @cpSM2KE_CopyPointData(ptr noundef nonnull %138, ptr noundef nonnull %140, ptr noundef nonnull %122, ptr noundef nonnull %24)
  br label %141

141:                                              ; preds = %15, %19, %35, %111, %107, %101, %99, %96, %92, %86, %84, %81, %77, %71, %69, %66, %61, %55, %53, %49, %43, %121, %32, %26, %22, %9, %7
  %.4 = phi i32 [ -8, %7 ], [ -13, %9 ], [ -5, %15 ], [ -8, %19 ], [ -8, %22 ], [ -13, %26 ], [ -13, %32 ], [ -14, %35 ], [ 0, %121 ], [ -14, %43 ], [ -7, %49 ], [ -8, %53 ], [ -13, %55 ], [ -11, %61 ], [ -1017, %66 ], [ -8, %69 ], [ -13, %71 ], [ -11, %77 ], [ -1017, %81 ], [ -8, %84 ], [ -13, %86 ], [ -11, %92 ], [ -1017, %96 ], [ -8, %99 ], [ -13, %101 ], [ -11, %107 ], [ -1017, %111 ]
  ret i32 %.4
}

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @cpSM2KE_CopyPointData(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #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 = { 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 = !{!"_GFpECKeyExchangeSM2", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 4}
!12 = !{!6, !10, i64 8}
!13 = !{!14, !7, i64 0}
!14 = !{!"_cpGFpEC", !7, i64 0, !7, i64 4, !10, i64 8, !7, i64 16, !7, i64 20, !7, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !7, i64 64, !7, i64 68, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128}
!15 = !{!14, !7, i64 16}
!16 = !{!14, !10, i64 8}
!17 = !{!18, !10, i64 8}
!18 = !{!"_cpGFp", !7, i64 0, !7, i64 4, !10, i64 8}
!19 = !{!20, !7, i64 8}
!20 = !{!"_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, !21, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !7, i64 96, !7, i64 100, !10, i64 104}
!21 = !{!"long long", !8, i64 0}
!22 = !{!14, !10, i64 80}
!23 = !{!14, !7, i64 24}
!24 = !{!25, !7, i64 0}
!25 = !{!"_cpGFpECPoint", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16}
!26 = !{!25, !7, i64 8}
!27 = !{!20, !7, i64 16}
!28 = !{!10, !10, i64 0}
!29 = !{!6, !10, i64 16}
!30 = !{!6, !10, i64 32}
!31 = !{!6, !10, i64 24}
!32 = !{!6, !10, i64 40}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass