; LLVM IR from specinfo-ua/UAPKI :: library/uapkic/src (ec)

; 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.EcCtx_st = type { ptr, ptr, ptr, ptr, i8, i8 }
%struct.EcParamsCtx_st = type { i32, ptr, ptr, ptr, ptr, i8, i64, ptr, ptr, i32, ptr }
%struct.EcGfpCtx_st = type { ptr, ptr, ptr, i8, i64 }
%struct.GfpCtx_st = type { ptr, ptr, ptr, ptr }
%struct.EC2m_st = type { ptr, i64, ptr, i64 }
%struct.Gf2mCtx_st = type { ptr, ptr, i64 }
%struct.ECPoint_st = type { ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [19 x i8], align 1

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

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

declare void @stacktrace_create(ptr noundef, i64 noundef, i32 noundef, ptr noundef) #1

declare void @stacktrace_add(ptr noundef, i64 noundef, i32 noundef) #1

declare ptr @ba_alloc_from_uint8(ptr noundef, i64 noundef) #1

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #2

declare ptr @wa_copy_with_alloc(ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @ec_get_params(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) #3 {
  %10 = alloca i32, align 4
  %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 ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i8, align 1
  %25 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store ptr %4, ptr %15, align 8, !tbaa !5
  store ptr %5, ptr %16, align 8, !tbaa !5
  store ptr %6, ptr %17, align 8, !tbaa !5
  store ptr %7, ptr %18, align 8, !tbaa !5
  store ptr %8, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 0, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  store ptr null, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  br label %26

26:                                               ; preds = %9
  %27 = load ptr, ptr %11, align 8, !tbaa !5
  %28 = icmp ne ptr %27, null
  br i1 %28, label %31, label %29

29:                                               ; preds = %26
  store i32 2, ptr %20, align 4, !tbaa !9
  %30 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 726, i32 noundef %30, ptr noundef null)
  br label %509

31:                                               ; preds = %26
  br label %32

32:                                               ; preds = %31
  br label %33

33:                                               ; preds = %32
  %34 = load ptr, ptr %11, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.EcCtx_st, ptr %34, i32 0, i32 0
  %36 = load ptr, ptr %35, align 8, !tbaa !11
  %37 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %36, i32 0, i32 0
  %38 = load i32, ptr %37, align 8, !tbaa !14
  %39 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 %38, ptr %39, align 4, !tbaa !9
  %40 = load ptr, ptr %12, align 8, !tbaa !5
  %41 = load i32, ptr %40, align 4, !tbaa !9
  %42 = icmp eq i32 0, %41
  br i1 %42, label %43, label %154

43:                                               ; preds = %33
  %44 = load ptr, ptr %11, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.EcCtx_st, ptr %44, i32 0, i32 0
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  %47 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %46, i32 0, i32 3
  %48 = load ptr, ptr %47, align 8, !tbaa !17
  %49 = getelementptr inbounds %struct.EcGfpCtx_st, ptr %48, i32 0, i32 0
  %50 = load ptr, ptr %49, align 8, !tbaa !18
  %51 = getelementptr inbounds %struct.GfpCtx_st, ptr %50, i32 0, i32 0
  %52 = load ptr, ptr %51, align 8, !tbaa !20
  %53 = call i64 @int_bit_len(ptr noundef %52)
  %54 = add i64 %53, 7
  %55 = udiv i64 %54, 8
  store i64 %55, ptr %22, align 8, !tbaa !22
  %56 = load ptr, ptr %13, align 8, !tbaa !5
  %57 = icmp ne ptr %56, null
  br i1 %57, label %58, label %89

58:                                               ; preds = %43
  br label %59

59:                                               ; preds = %58
  %60 = load ptr, ptr %11, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.EcCtx_st, ptr %60, i32 0, i32 0
  %62 = load ptr, ptr %61, align 8, !tbaa !11
  %63 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %62, i32 0, i32 3
  %64 = load ptr, ptr %63, align 8, !tbaa !17
  %65 = getelementptr inbounds %struct.EcGfpCtx_st, ptr %64, i32 0, i32 0
  %66 = load ptr, ptr %65, align 8, !tbaa !18
  %67 = getelementptr inbounds %struct.GfpCtx_st, ptr %66, i32 0, i32 0
  %68 = load ptr, ptr %67, align 8, !tbaa !20
  %69 = call ptr @wa_to_ba(ptr noundef %68)
  %70 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %69, ptr %70, align 8, !tbaa !5
  %71 = icmp eq ptr null, %69
  br i1 %71, label %72, label %74

72:                                               ; preds = %59
  store i32 2, ptr %20, align 4, !tbaa !9
  %73 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 733, i32 noundef %73)
  br label %509

74:                                               ; preds = %59
  br label %75

75:                                               ; preds = %74
  br label %76

76:                                               ; preds = %75
  br label %77

77:                                               ; preds = %76
  %78 = load ptr, ptr %13, align 8, !tbaa !5
  %79 = load ptr, ptr %78, align 8, !tbaa !5
  %80 = load i64, ptr %22, align 8, !tbaa !22
  %81 = call i32 @ba_change_len(ptr noundef %79, i64 noundef %80)
  store i32 %81, ptr %20, align 4, !tbaa !9
  %82 = load i32, ptr %20, align 4, !tbaa !9
  %83 = icmp ne i32 %82, 0
  br i1 %83, label %84, label %86

84:                                               ; preds = %77
  %85 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 734, i32 noundef %85)
  br label %509

86:                                               ; preds = %77
  br label %87

87:                                               ; preds = %86
  br label %88

88:                                               ; preds = %87
  br label %89

89:                                               ; preds = %88, %43
  %90 = load ptr, ptr %15, align 8, !tbaa !5
  %91 = icmp ne ptr %90, null
  br i1 %91, label %92, label %121

92:                                               ; preds = %89
  br label %93

93:                                               ; preds = %92
  %94 = load ptr, ptr %11, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.EcCtx_st, ptr %94, i32 0, i32 0
  %96 = load ptr, ptr %95, align 8, !tbaa !11
  %97 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %96, i32 0, i32 3
  %98 = load ptr, ptr %97, align 8, !tbaa !17
  %99 = getelementptr inbounds %struct.EcGfpCtx_st, ptr %98, i32 0, i32 1
  %100 = load ptr, ptr %99, align 8, !tbaa !23
  %101 = call ptr @wa_to_ba(ptr noundef %100)
  %102 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %101, ptr %102, align 8, !tbaa !5
  %103 = icmp eq ptr null, %101
  br i1 %103, label %104, label %106

104:                                              ; preds = %93
  store i32 2, ptr %20, align 4, !tbaa !9
  %105 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 738, i32 noundef %105)
  br label %509

106:                                              ; preds = %93
  br label %107

107:                                              ; preds = %106
  br label %108

108:                                              ; preds = %107
  br label %109

109:                                              ; preds = %108
  %110 = load ptr, ptr %15, align 8, !tbaa !5
  %111 = load ptr, ptr %110, align 8, !tbaa !5
  %112 = load i64, ptr %22, align 8, !tbaa !22
  %113 = call i32 @ba_change_len(ptr noundef %111, i64 noundef %112)
  store i32 %113, ptr %20, align 4, !tbaa !9
  %114 = load i32, ptr %20, align 4, !tbaa !9
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %116, label %118

116:                                              ; preds = %109
  %117 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 739, i32 noundef %117)
  br label %509

118:                                              ; preds = %109
  br label %119

119:                                              ; preds = %118
  br label %120

120:                                              ; preds = %119
  br label %121

121:                                              ; preds = %120, %89
  %122 = load ptr, ptr %16, align 8, !tbaa !5
  %123 = icmp ne ptr %122, null
  br i1 %123, label %124, label %153

124:                                              ; preds = %121
  br label %125

125:                                              ; preds = %124
  %126 = load ptr, ptr %11, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.EcCtx_st, ptr %126, i32 0, i32 0
  %128 = load ptr, ptr %127, align 8, !tbaa !11
  %129 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %128, i32 0, i32 3
  %130 = load ptr, ptr %129, align 8, !tbaa !17
  %131 = getelementptr inbounds %struct.EcGfpCtx_st, ptr %130, i32 0, i32 2
  %132 = load ptr, ptr %131, align 8, !tbaa !24
  %133 = call ptr @wa_to_ba(ptr noundef %132)
  %134 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %133, ptr %134, align 8, !tbaa !5
  %135 = icmp eq ptr null, %133
  br i1 %135, label %136, label %138

136:                                              ; preds = %125
  store i32 2, ptr %20, align 4, !tbaa !9
  %137 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 743, i32 noundef %137)
  br label %509

138:                                              ; preds = %125
  br label %139

139:                                              ; preds = %138
  br label %140

140:                                              ; preds = %139
  br label %141

141:                                              ; preds = %140
  %142 = load ptr, ptr %16, align 8, !tbaa !5
  %143 = load ptr, ptr %142, align 8, !tbaa !5
  %144 = load i64, ptr %22, align 8, !tbaa !22
  %145 = call i32 @ba_change_len(ptr noundef %143, i64 noundef %144)
  store i32 %145, ptr %20, align 4, !tbaa !9
  %146 = load i32, ptr %20, align 4, !tbaa !9
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %148, label %150

148:                                              ; preds = %141
  %149 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 744, i32 noundef %149)
  br label %509

150:                                              ; preds = %141
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151
  br label %153

153:                                              ; preds = %152, %121
  br label %319

154:                                              ; preds = %33
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %155 = load ptr, ptr %11, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.EcCtx_st, ptr %155, i32 0, i32 0
  %157 = load ptr, ptr %156, align 8, !tbaa !11
  %158 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %157, i32 0, i32 4
  %159 = load ptr, ptr %158, align 8, !tbaa !25
  %160 = getelementptr inbounds %struct.EC2m_st, ptr %159, i32 0, i32 0
  %161 = load ptr, ptr %160, align 8, !tbaa !26
  %162 = getelementptr inbounds %struct.Gf2mCtx_st, ptr %161, i32 0, i32 0
  %163 = load ptr, ptr %162, align 8, !tbaa !28
  %164 = getelementptr inbounds i32, ptr %163, i64 2
  %165 = load i32, ptr %164, align 4, !tbaa !9
  %166 = icmp eq i32 %165, 0
  %167 = zext i1 %166 to i64
  %168 = select i1 %166, i32 3, i32 5
  %169 = sext i32 %168 to i64
  store i64 %169, ptr %23, align 8, !tbaa !22
  %170 = load ptr, ptr %11, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.EcCtx_st, ptr %170, i32 0, i32 0
  %172 = load ptr, ptr %171, align 8, !tbaa !11
  %173 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %172, i32 0, i32 4
  %174 = load ptr, ptr %173, align 8, !tbaa !25
  %175 = getelementptr inbounds %struct.EC2m_st, ptr %174, i32 0, i32 0
  %176 = load ptr, ptr %175, align 8, !tbaa !26
  %177 = getelementptr inbounds %struct.Gf2mCtx_st, ptr %176, i32 0, i32 0
  %178 = load ptr, ptr %177, align 8, !tbaa !28
  %179 = getelementptr inbounds i32, ptr %178, i64 0
  %180 = load i32, ptr %179, align 4, !tbaa !9
  %181 = sext i32 %180 to i64
  %182 = add i64 %181, 7
  %183 = lshr i64 %182, 3
  store i64 %183, ptr %22, align 8, !tbaa !22
  %184 = load ptr, ptr %14, align 8, !tbaa !5
  %185 = icmp ne ptr %184, null
  br i1 %185, label %186, label %211

186:                                              ; preds = %154
  br label %187

187:                                              ; preds = %186
  %188 = load i64, ptr %23, align 8, !tbaa !22
  %189 = mul i64 %188, 4
  %190 = call noalias ptr @malloc(i64 noundef %189) #6
  %191 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %190, ptr %191, align 8, !tbaa !5
  %192 = icmp eq ptr null, %190
  br i1 %192, label %193, label %195

193:                                              ; preds = %187
  store i32 1, ptr %20, align 4, !tbaa !9
  %194 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 752, i32 noundef %194, ptr noundef null)
  store i32 4, ptr %25, align 4
  br label %316

195:                                              ; preds = %187
  br label %196

196:                                              ; preds = %195
  br label %197

197:                                              ; preds = %196
  %198 = load ptr, ptr %14, align 8, !tbaa !5
  %199 = load ptr, ptr %198, align 8, !tbaa !5
  %200 = load ptr, ptr %11, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.EcCtx_st, ptr %200, i32 0, i32 0
  %202 = load ptr, ptr %201, align 8, !tbaa !11
  %203 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %202, i32 0, i32 4
  %204 = load ptr, ptr %203, align 8, !tbaa !25
  %205 = getelementptr inbounds %struct.EC2m_st, ptr %204, i32 0, i32 0
  %206 = load ptr, ptr %205, align 8, !tbaa !26
  %207 = getelementptr inbounds %struct.Gf2mCtx_st, ptr %206, i32 0, i32 0
  %208 = load ptr, ptr %207, align 8, !tbaa !28
  %209 = load i64, ptr %23, align 8, !tbaa !22
  %210 = mul i64 %209, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %199, ptr align 4 %208, i64 %210, i1 false)
  br label %211

211:                                              ; preds = %197, %154
  %212 = load ptr, ptr %15, align 8, !tbaa !5
  %213 = icmp ne ptr %212, null
  br i1 %213, label %214, label %235

214:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #5
  %215 = load ptr, ptr %11, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.EcCtx_st, ptr %215, i32 0, i32 0
  %217 = load ptr, ptr %216, align 8, !tbaa !11
  %218 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %217, i32 0, i32 4
  %219 = load ptr, ptr %218, align 8, !tbaa !25
  %220 = getelementptr inbounds %struct.EC2m_st, ptr %219, i32 0, i32 1
  %221 = load i64, ptr %220, align 8, !tbaa !30
  %222 = trunc i64 %221 to i8
  store i8 %222, ptr %24, align 1, !tbaa !31
  br label %223

223:                                              ; preds = %214
  %224 = call ptr @ba_alloc_from_uint8(ptr noundef %24, i64 noundef 1)
  %225 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %224, ptr %225, align 8, !tbaa !5
  %226 = icmp eq ptr null, %224
  br i1 %226, label %227, label %229

227:                                              ; preds = %223
  store i32 2, ptr %20, align 4, !tbaa !9
  %228 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 758, i32 noundef %228)
  store i32 4, ptr %25, align 4
  br label %232

229:                                              ; preds = %223
  br label %230

230:                                              ; preds = %229
  br label %231

231:                                              ; preds = %230
  store i32 0, ptr %25, align 4
  br label %232

232:                                              ; preds = %231, %227
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #5
  %233 = load i32, ptr %25, align 4
  switch i32 %233, label %316 [
    i32 0, label %234
  ]

234:                                              ; preds = %232
  br label %235

235:                                              ; preds = %234, %211
  %236 = load ptr, ptr %16, align 8, !tbaa !5
  %237 = icmp ne ptr %236, null
  br i1 %237, label %238, label %315

238:                                              ; preds = %235
  %239 = load ptr, ptr %11, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.EcCtx_st, ptr %239, i32 0, i32 0
  %241 = load ptr, ptr %240, align 8, !tbaa !11
  %242 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %241, i32 0, i32 5
  %243 = load i8, ptr %242, align 8, !tbaa !32, !range !33, !noundef !34
  %244 = trunc i8 %243 to i1
  br i1 %244, label %245, label %285

245:                                              ; preds = %238
  br label %246

246:                                              ; preds = %245
  %247 = load ptr, ptr %11, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.EcCtx_st, ptr %247, i32 0, i32 0
  %249 = load ptr, ptr %248, align 8, !tbaa !11
  %250 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %249, i32 0, i32 4
  %251 = load ptr, ptr %250, align 8, !tbaa !25
  %252 = getelementptr inbounds %struct.EC2m_st, ptr %251, i32 0, i32 2
  %253 = load ptr, ptr %252, align 8, !tbaa !35
  %254 = call ptr @wa_copy_with_alloc(ptr noundef %253)
  store ptr %254, ptr %21, align 8, !tbaa !5
  %255 = icmp eq ptr null, %254
  br i1 %255, label %256, label %258

256:                                              ; preds = %246
  store i32 2, ptr %20, align 4, !tbaa !9
  %257 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 763, i32 noundef %257)
  store i32 4, ptr %25, align 4
  br label %316

258:                                              ; preds = %246
  br label %259

259:                                              ; preds = %258
  br label %260

260:                                              ; preds = %259
  br label %261

261:                                              ; preds = %260
  %262 = load ptr, ptr %11, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.EcCtx_st, ptr %262, i32 0, i32 0
  %264 = load ptr, ptr %263, align 8, !tbaa !11
  %265 = load ptr, ptr %21, align 8, !tbaa !5
  %266 = call i32 @pb_to_onb(ptr noundef %264, ptr noundef %265)
  store i32 %266, ptr %20, align 4, !tbaa !9
  %267 = load i32, ptr %20, align 4, !tbaa !9
  %268 = icmp ne i32 %267, 0
  br i1 %268, label %269, label %271

269:                                              ; preds = %261
  %270 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 764, i32 noundef %270)
  store i32 4, ptr %25, align 4
  br label %316

271:                                              ; preds = %261
  br label %272

272:                                              ; preds = %271
  br label %273

273:                                              ; preds = %272
  br label %274

274:                                              ; preds = %273
  %275 = load ptr, ptr %21, align 8, !tbaa !5
  %276 = call ptr @wa_to_ba(ptr noundef %275)
  %277 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %276, ptr %277, align 8, !tbaa !5
  %278 = icmp eq ptr null, %276
  br i1 %278, label %279, label %281

279:                                              ; preds = %274
  store i32 2, ptr %20, align 4, !tbaa !9
  %280 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 765, i32 noundef %280)
  store i32 4, ptr %25, align 4
  br label %316

281:                                              ; preds = %274
  br label %282

282:                                              ; preds = %281
  br label %283

283:                                              ; preds = %282
  %284 = load ptr, ptr %21, align 8, !tbaa !5
  call void @wa_free(ptr noundef %284)
  store ptr null, ptr %21, align 8, !tbaa !5
  br label %302

285:                                              ; preds = %238
  br label %286

286:                                              ; preds = %285
  %287 = load ptr, ptr %11, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.EcCtx_st, ptr %287, i32 0, i32 0
  %289 = load ptr, ptr %288, align 8, !tbaa !11
  %290 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %289, i32 0, i32 4
  %291 = load ptr, ptr %290, align 8, !tbaa !25
  %292 = getelementptr inbounds %struct.EC2m_st, ptr %291, i32 0, i32 2
  %293 = load ptr, ptr %292, align 8, !tbaa !35
  %294 = call ptr @wa_to_ba(ptr noundef %293)
  %295 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %294, ptr %295, align 8, !tbaa !5
  %296 = icmp eq ptr null, %294
  br i1 %296, label %297, label %299

297:                                              ; preds = %286
  store i32 2, ptr %20, align 4, !tbaa !9
  %298 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 770, i32 noundef %298)
  store i32 4, ptr %25, align 4
  br label %316

299:                                              ; preds = %286
  br label %300

300:                                              ; preds = %299
  br label %301

301:                                              ; preds = %300
  br label %302

302:                                              ; preds = %301, %283
  br label %303

303:                                              ; preds = %302
  %304 = load ptr, ptr %16, align 8, !tbaa !5
  %305 = load ptr, ptr %304, align 8, !tbaa !5
  %306 = load i64, ptr %22, align 8, !tbaa !22
  %307 = call i32 @ba_change_len(ptr noundef %305, i64 noundef %306)
  store i32 %307, ptr %20, align 4, !tbaa !9
  %308 = load i32, ptr %20, align 4, !tbaa !9
  %309 = icmp ne i32 %308, 0
  br i1 %309, label %310, label %312

310:                                              ; preds = %303
  %311 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 772, i32 noundef %311)
  store i32 4, ptr %25, align 4
  br label %316

312:                                              ; preds = %303
  br label %313

313:                                              ; preds = %312
  br label %314

314:                                              ; preds = %313
  br label %315

315:                                              ; preds = %314, %235
  store i32 0, ptr %25, align 4
  br label %316

316:                                              ; preds = %315, %310, %297, %279, %269, %256, %232, %193
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  %317 = load i32, ptr %25, align 4
  switch i32 %317, label %512 [
    i32 0, label %318
    i32 4, label %509
  ]

318:                                              ; preds = %316
  br label %319

319:                                              ; preds = %318, %153
  %320 = load ptr, ptr %17, align 8, !tbaa !5
  %321 = icmp ne ptr %320, null
  br i1 %321, label %322, label %349

322:                                              ; preds = %319
  br label %323

323:                                              ; preds = %322
  %324 = load ptr, ptr %11, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.EcCtx_st, ptr %324, i32 0, i32 0
  %326 = load ptr, ptr %325, align 8, !tbaa !11
  %327 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %326, i32 0, i32 2
  %328 = load ptr, ptr %327, align 8, !tbaa !36
  %329 = call ptr @wa_to_ba(ptr noundef %328)
  %330 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %329, ptr %330, align 8, !tbaa !5
  %331 = icmp eq ptr null, %329
  br i1 %331, label %332, label %334

332:                                              ; preds = %323
  store i32 2, ptr %20, align 4, !tbaa !9
  %333 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 777, i32 noundef %333)
  br label %509

334:                                              ; preds = %323
  br label %335

335:                                              ; preds = %334
  br label %336

336:                                              ; preds = %335
  br label %337

337:                                              ; preds = %336
  %338 = load ptr, ptr %17, align 8, !tbaa !5
  %339 = load ptr, ptr %338, align 8, !tbaa !5
  %340 = load i64, ptr %22, align 8, !tbaa !22
  %341 = call i32 @ba_change_len(ptr noundef %339, i64 noundef %340)
  store i32 %341, ptr %20, align 4, !tbaa !9
  %342 = load i32, ptr %20, align 4, !tbaa !9
  %343 = icmp ne i32 %342, 0
  br i1 %343, label %344, label %346

344:                                              ; preds = %337
  %345 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 778, i32 noundef %345)
  br label %509

346:                                              ; preds = %337
  br label %347

347:                                              ; preds = %346
  br label %348

348:                                              ; preds = %347
  br label %349

349:                                              ; preds = %348, %319
  %350 = load ptr, ptr %18, align 8, !tbaa !5
  %351 = icmp ne ptr %350, null
  br i1 %351, label %352, label %429

352:                                              ; preds = %349
  %353 = load ptr, ptr %11, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.EcCtx_st, ptr %353, i32 0, i32 0
  %355 = load ptr, ptr %354, align 8, !tbaa !11
  %356 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %355, i32 0, i32 5
  %357 = load i8, ptr %356, align 8, !tbaa !32, !range !33, !noundef !34
  %358 = trunc i8 %357 to i1
  br i1 %358, label %359, label %399

359:                                              ; preds = %352
  br label %360

360:                                              ; preds = %359
  %361 = load ptr, ptr %11, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.EcCtx_st, ptr %361, i32 0, i32 0
  %363 = load ptr, ptr %362, align 8, !tbaa !11
  %364 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %363, i32 0, i32 1
  %365 = load ptr, ptr %364, align 8, !tbaa !37
  %366 = getelementptr inbounds %struct.ECPoint_st, ptr %365, i32 0, i32 0
  %367 = load ptr, ptr %366, align 8, !tbaa !38
  %368 = call ptr @wa_copy_with_alloc(ptr noundef %367)
  store ptr %368, ptr %21, align 8, !tbaa !5
  %369 = icmp eq ptr null, %368
  br i1 %369, label %370, label %372

370:                                              ; preds = %360
  store i32 2, ptr %20, align 4, !tbaa !9
  %371 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 783, i32 noundef %371)
  br label %509

372:                                              ; preds = %360
  br label %373

373:                                              ; preds = %372
  br label %374

374:                                              ; preds = %373
  br label %375

375:                                              ; preds = %374
  %376 = load ptr, ptr %11, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.EcCtx_st, ptr %376, i32 0, i32 0
  %378 = load ptr, ptr %377, align 8, !tbaa !11
  %379 = load ptr, ptr %21, align 8, !tbaa !5
  %380 = call i32 @pb_to_onb(ptr noundef %378, ptr noundef %379)
  store i32 %380, ptr %20, align 4, !tbaa !9
  %381 = load i32, ptr %20, align 4, !tbaa !9
  %382 = icmp ne i32 %381, 0
  br i1 %382, label %383, label %385

383:                                              ; preds = %375
  %384 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 784, i32 noundef %384)
  br label %509

385:                                              ; preds = %375
  br label %386

386:                                              ; preds = %385
  br label %387

387:                                              ; preds = %386
  br label %388

388:                                              ; preds = %387
  %389 = load ptr, ptr %21, align 8, !tbaa !5
  %390 = call ptr @wa_to_ba(ptr noundef %389)
  %391 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %390, ptr %391, align 8, !tbaa !5
  %392 = icmp eq ptr null, %390
  br i1 %392, label %393, label %395

393:                                              ; preds = %388
  store i32 2, ptr %20, align 4, !tbaa !9
  %394 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 785, i32 noundef %394)
  br label %509

395:                                              ; preds = %388
  br label %396

396:                                              ; preds = %395
  br label %397

397:                                              ; preds = %396
  %398 = load ptr, ptr %21, align 8, !tbaa !5
  call void @wa_free(ptr noundef %398)
  store ptr null, ptr %21, align 8, !tbaa !5
  br label %416

399:                                              ; preds = %352
  br label %400

400:                                              ; preds = %399
  %401 = load ptr, ptr %11, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.EcCtx_st, ptr %401, i32 0, i32 0
  %403 = load ptr, ptr %402, align 8, !tbaa !11
  %404 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %403, i32 0, i32 1
  %405 = load ptr, ptr %404, align 8, !tbaa !37
  %406 = getelementptr inbounds %struct.ECPoint_st, ptr %405, i32 0, i32 0
  %407 = load ptr, ptr %406, align 8, !tbaa !38
  %408 = call ptr @wa_to_ba(ptr noundef %407)
  %409 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %408, ptr %409, align 8, !tbaa !5
  %410 = icmp eq ptr null, %408
  br i1 %410, label %411, label %413

411:                                              ; preds = %400
  store i32 2, ptr %20, align 4, !tbaa !9
  %412 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 790, i32 noundef %412)
  br label %509

413:                                              ; preds = %400
  br label %414

414:                                              ; preds = %413
  br label %415

415:                                              ; preds = %414
  br label %416

416:                                              ; preds = %415, %397
  br label %417

417:                                              ; preds = %416
  %418 = load ptr, ptr %18, align 8, !tbaa !5
  %419 = load ptr, ptr %418, align 8, !tbaa !5
  %420 = load i64, ptr %22, align 8, !tbaa !22
  %421 = call i32 @ba_change_len(ptr noundef %419, i64 noundef %420)
  store i32 %421, ptr %20, align 4, !tbaa !9
  %422 = load i32, ptr %20, align 4, !tbaa !9
  %423 = icmp ne i32 %422, 0
  br i1 %423, label %424, label %426

424:                                              ; preds = %417
  %425 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 792, i32 noundef %425)
  br label %509

426:                                              ; preds = %417
  br label %427

427:                                              ; preds = %426
  br label %428

428:                                              ; preds = %427
  br label %429

429:                                              ; preds = %428, %349
  %430 = load ptr, ptr %19, align 8, !tbaa !5
  %431 = icmp ne ptr %430, null
  br i1 %431, label %432, label %508

432:                                              ; preds = %429
  %433 = load ptr, ptr %11, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.EcCtx_st, ptr %433, i32 0, i32 0
  %435 = load ptr, ptr %434, align 8, !tbaa !11
  %436 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %435, i32 0, i32 5
  %437 = load i8, ptr %436, align 8, !tbaa !32, !range !33, !noundef !34
  %438 = trunc i8 %437 to i1
  br i1 %438, label %439, label %478

439:                                              ; preds = %432
  br label %440

440:                                              ; preds = %439
  %441 = load ptr, ptr %11, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.EcCtx_st, ptr %441, i32 0, i32 0
  %443 = load ptr, ptr %442, align 8, !tbaa !11
  %444 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %443, i32 0, i32 1
  %445 = load ptr, ptr %444, align 8, !tbaa !37
  %446 = getelementptr inbounds %struct.ECPoint_st, ptr %445, i32 0, i32 1
  %447 = load ptr, ptr %446, align 8, !tbaa !40
  %448 = call ptr @wa_copy_with_alloc(ptr noundef %447)
  store ptr %448, ptr %21, align 8, !tbaa !5
  %449 = icmp eq ptr null, %448
  br i1 %449, label %450, label %452

450:                                              ; preds = %440
  store i32 2, ptr %20, align 4, !tbaa !9
  %451 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 797, i32 noundef %451)
  br label %509

452:                                              ; preds = %440
  br label %453

453:                                              ; preds = %452
  br label %454

454:                                              ; preds = %453
  br label %455

455:                                              ; preds = %454
  %456 = load ptr, ptr %11, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.EcCtx_st, ptr %456, i32 0, i32 0
  %458 = load ptr, ptr %457, align 8, !tbaa !11
  %459 = load ptr, ptr %21, align 8, !tbaa !5
  %460 = call i32 @pb_to_onb(ptr noundef %458, ptr noundef %459)
  store i32 %460, ptr %20, align 4, !tbaa !9
  %461 = load i32, ptr %20, align 4, !tbaa !9
  %462 = icmp ne i32 %461, 0
  br i1 %462, label %463, label %465

463:                                              ; preds = %455
  %464 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 798, i32 noundef %464)
  br label %509

465:                                              ; preds = %455
  br label %466

466:                                              ; preds = %465
  br label %467

467:                                              ; preds = %466
  br label %468

468:                                              ; preds = %467
  %469 = load ptr, ptr %21, align 8, !tbaa !5
  %470 = call ptr @wa_to_ba(ptr noundef %469)
  %471 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %470, ptr %471, align 8, !tbaa !5
  %472 = icmp eq ptr null, %470
  br i1 %472, label %473, label %475

473:                                              ; preds = %468
  store i32 2, ptr %20, align 4, !tbaa !9
  %474 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 799, i32 noundef %474)
  br label %509

475:                                              ; preds = %468
  br label %476

476:                                              ; preds = %475
  br label %477

477:                                              ; preds = %476
  br label %495

478:                                              ; preds = %432
  br label %479

479:                                              ; preds = %478
  %480 = load ptr, ptr %11, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.EcCtx_st, ptr %480, i32 0, i32 0
  %482 = load ptr, ptr %481, align 8, !tbaa !11
  %483 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %482, i32 0, i32 1
  %484 = load ptr, ptr %483, align 8, !tbaa !37
  %485 = getelementptr inbounds %struct.ECPoint_st, ptr %484, i32 0, i32 1
  %486 = load ptr, ptr %485, align 8, !tbaa !40
  %487 = call ptr @wa_to_ba(ptr noundef %486)
  %488 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %487, ptr %488, align 8, !tbaa !5
  %489 = icmp eq ptr null, %487
  br i1 %489, label %490, label %492

490:                                              ; preds = %479
  store i32 2, ptr %20, align 4, !tbaa !9
  %491 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 802, i32 noundef %491)
  br label %509

492:                                              ; preds = %479
  br label %493

493:                                              ; preds = %492
  br label %494

494:                                              ; preds = %493
  br label %495

495:                                              ; preds = %494, %477
  br label %496

496:                                              ; preds = %495
  %497 = load ptr, ptr %19, align 8, !tbaa !5
  %498 = load ptr, ptr %497, align 8, !tbaa !5
  %499 = load i64, ptr %22, align 8, !tbaa !22
  %500 = call i32 @ba_change_len(ptr noundef %498, i64 noundef %499)
  store i32 %500, ptr %20, align 4, !tbaa !9
  %501 = load i32, ptr %20, align 4, !tbaa !9
  %502 = icmp ne i32 %501, 0
  br i1 %502, label %503, label %505

503:                                              ; preds = %496
  %504 = load i32, ptr %20, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 804, i32 noundef %504)
  br label %509

505:                                              ; preds = %496
  br label %506

506:                                              ; preds = %505
  br label %507

507:                                              ; preds = %506
  br label %508

508:                                              ; preds = %507, %429
  br label %509

509:                                              ; preds = %508, %503, %490, %473, %463, %450, %424, %411, %393, %383, %370, %344, %332, %316, %148, %136, %116, %104, %84, %72, %29
  %510 = load ptr, ptr %21, align 8, !tbaa !5
  call void @wa_free(ptr noundef %510)
  %511 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %511, ptr %10, align 4
  store i32 1, ptr %25, align 4
  br label %512

512:                                              ; preds = %509, %316
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  %513 = load i32, ptr %10, align 4
  ret i32 %513
}

declare i64 @int_bit_len(ptr noundef) #1

declare ptr @wa_to_ba(ptr noundef) #1

declare i32 @ba_change_len(ptr noundef, i64 noundef) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare i32 @pb_to_onb(ptr noundef, ptr noundef) #1

declare void @wa_free(ptr noundef) #1

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

!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, !6, i64 0}
!12 = !{!"EcCtx_st", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !13, i64 32, !13, i64 33}
!13 = !{!"_Bool", !7, i64 0}
!14 = !{!15, !10, i64 0}
!15 = !{!"EcParamsCtx_st", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !13, i64 40, !16, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !6, i64 80}
!16 = !{!"long", !7, i64 0}
!17 = !{!15, !6, i64 24}
!18 = !{!19, !6, i64 0}
!19 = !{!"EcGfpCtx_st", !6, i64 0, !6, i64 8, !6, i64 16, !13, i64 24, !16, i64 32}
!20 = !{!21, !6, i64 0}
!21 = !{!"GfpCtx_st", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!22 = !{!16, !16, i64 0}
!23 = !{!19, !6, i64 8}
!24 = !{!19, !6, i64 16}
!25 = !{!15, !6, i64 32}
!26 = !{!27, !6, i64 0}
!27 = !{!"EC2m_st", !6, i64 0, !16, i64 8, !6, i64 16, !16, i64 24}
!28 = !{!29, !6, i64 0}
!29 = !{!"Gf2mCtx_st", !6, i64 0, !6, i64 8, !16, i64 16}
!30 = !{!27, !16, i64 8}
!31 = !{!7, !7, i64 0}
!32 = !{!15, !13, i64 40}
!33 = !{i8 0, i8 2}
!34 = !{}
!35 = !{!27, !6, i64 16}
!36 = !{!15, !6, i64 16}
!37 = !{!15, !6, i64 8}
!38 = !{!39, !6, i64 0}
!39 = !{!"ECPoint_st", !6, i64 0, !6, i64 8, !6, i64 16}
!40 = !{!39, !6, i64 8}


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

@.str = external hidden unnamed_addr constant [19 x i8], align 1

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

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

declare void @stacktrace_create(ptr noundef, i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare void @stacktrace_add(ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #1

declare ptr @ba_alloc_from_uint8(ptr noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #2

declare ptr @wa_copy_with_alloc(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local i32 @ec_get_params(ptr noundef readonly %0, ptr nocapture noundef writeonly %1, ptr noundef writeonly %2, ptr noundef writeonly %3, ptr noundef writeonly %4, ptr noundef %5, ptr noundef writeonly %6, ptr noundef %7, ptr noundef writeonly %8) local_unnamed_addr #3 {
  %10 = alloca i8, align 1
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %11, label %12

11:                                               ; preds = %9
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 726, i32 noundef 2, ptr noundef null) #5
  br label %.thread183

12:                                               ; preds = %9
  %13 = load ptr, ptr %0, align 8, !tbaa !5
  %14 = load i32, ptr %13, align 8, !tbaa !11
  store i32 %14, ptr %1, align 4, !tbaa !15
  %15 = icmp eq i32 %14, 0
  br i1 %15, label %16, label %62

16:                                               ; preds = %12
  %17 = getelementptr inbounds i8, ptr %13, i64 24
  %18 = load ptr, ptr %17, align 8, !tbaa !16
  %19 = load ptr, ptr %18, align 8, !tbaa !17
  %20 = load ptr, ptr %19, align 8, !tbaa !19
  %21 = tail call i64 @int_bit_len(ptr noundef %20) #5
  %22 = add i64 %21, 7
  %23 = lshr i64 %22, 3
  %.not167 = icmp eq ptr %2, null
  br i1 %.not167, label %36, label %24

24:                                               ; preds = %16
  %25 = load ptr, ptr %0, align 8, !tbaa !5
  %26 = getelementptr inbounds i8, ptr %25, i64 24
  %27 = load ptr, ptr %26, align 8, !tbaa !16
  %28 = load ptr, ptr %27, align 8, !tbaa !17
  %29 = load ptr, ptr %28, align 8, !tbaa !19
  %30 = tail call ptr @wa_to_ba(ptr noundef %29) #5
  store ptr %30, ptr %2, align 8, !tbaa !21
  %31 = icmp eq ptr %30, null
  br i1 %31, label %32, label %33

32:                                               ; preds = %24
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 733, i32 noundef 2) #5
  br label %.thread183

33:                                               ; preds = %24
  %34 = tail call i32 @ba_change_len(ptr noundef nonnull %30, i64 noundef %23) #5
  %.not168 = icmp eq i32 %34, 0
  br i1 %.not168, label %36, label %35

35:                                               ; preds = %33
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 734, i32 noundef %34) #5
  br label %.thread183

36:                                               ; preds = %33, %16
  %.not169 = icmp eq ptr %4, null
  br i1 %.not169, label %49, label %37

37:                                               ; preds = %36
  %38 = load ptr, ptr %0, align 8, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %38, i64 24
  %40 = load ptr, ptr %39, align 8, !tbaa !16
  %41 = getelementptr inbounds i8, ptr %40, i64 8
  %42 = load ptr, ptr %41, align 8, !tbaa !22
  %43 = tail call ptr @wa_to_ba(ptr noundef %42) #5
  store ptr %43, ptr %4, align 8, !tbaa !21
  %44 = icmp eq ptr %43, null
  br i1 %44, label %45, label %46

45:                                               ; preds = %37
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 738, i32 noundef 2) #5
  br label %.thread183

46:                                               ; preds = %37
  %47 = tail call i32 @ba_change_len(ptr noundef nonnull %43, i64 noundef %23) #5
  %.not170 = icmp eq i32 %47, 0
  br i1 %.not170, label %49, label %48

48:                                               ; preds = %46
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 739, i32 noundef %47) #5
  br label %.thread183

49:                                               ; preds = %46, %36
  %.not171 = icmp eq ptr %5, null
  br i1 %.not171, label %126, label %50

50:                                               ; preds = %49
  %51 = load ptr, ptr %0, align 8, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %51, i64 24
  %53 = load ptr, ptr %52, align 8, !tbaa !16
  %54 = getelementptr inbounds i8, ptr %53, i64 16
  %55 = load ptr, ptr %54, align 8, !tbaa !23
  %56 = tail call ptr @wa_to_ba(ptr noundef %55) #5
  store ptr %56, ptr %5, align 8, !tbaa !21
  %57 = icmp eq ptr %56, null
  br i1 %57, label %58, label %59

58:                                               ; preds = %50
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 743, i32 noundef 2) #5
  br label %.thread183

59:                                               ; preds = %50
  %60 = tail call i32 @ba_change_len(ptr noundef nonnull %56, i64 noundef %23) #5
  %.not172 = icmp eq i32 %60, 0
  br i1 %.not172, label %126, label %61

61:                                               ; preds = %59
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 744, i32 noundef %60) #5
  br label %.thread183

62:                                               ; preds = %12
  %63 = getelementptr inbounds i8, ptr %13, i64 32
  %64 = load ptr, ptr %63, align 8, !tbaa !24
  %65 = load ptr, ptr %64, align 8, !tbaa !25
  %66 = load ptr, ptr %65, align 8, !tbaa !27
  %67 = load i32, ptr %66, align 4, !tbaa !15
  %68 = sext i32 %67 to i64
  %69 = add nsw i64 %68, 7
  %70 = lshr i64 %69, 3
  %.not161 = icmp eq ptr %3, null
  br i1 %.not161, label %85, label %71

71:                                               ; preds = %62
  %72 = getelementptr inbounds i8, ptr %66, i64 8
  %73 = load i32, ptr %72, align 4, !tbaa !15
  %74 = icmp eq i32 %73, 0
  %75 = select i1 %74, i64 12, i64 20
  %76 = tail call noalias ptr @malloc(i64 noundef %75) #6
  store ptr %76, ptr %3, align 8, !tbaa !21
  %77 = icmp eq ptr %76, null
  br i1 %77, label %78, label %79

78:                                               ; preds = %71
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 752, i32 noundef 1, ptr noundef null) #5
  br label %.thread183

79:                                               ; preds = %71
  %80 = load ptr, ptr %0, align 8, !tbaa !5
  %81 = getelementptr inbounds i8, ptr %80, i64 32
  %82 = load ptr, ptr %81, align 8, !tbaa !24
  %83 = load ptr, ptr %82, align 8, !tbaa !25
  %84 = load ptr, ptr %83, align 8, !tbaa !27
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %76, ptr noundef nonnull align 4 dereferenceable(12) %84, i64 %75, i1 false)
  br label %85

85:                                               ; preds = %79, %62
  %86 = phi ptr [ %80, %79 ], [ %13, %62 ]
  %.not162 = icmp eq ptr %4, null
  br i1 %.not162, label %95, label %87

87:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #5
  %88 = getelementptr inbounds i8, ptr %86, i64 32
  %89 = load ptr, ptr %88, align 8, !tbaa !24
  %90 = getelementptr inbounds i8, ptr %89, i64 8
  %91 = load i64, ptr %90, align 8, !tbaa !29
  %92 = trunc i64 %91 to i8
  store i8 %92, ptr %10, align 1, !tbaa !30
  %93 = call ptr @ba_alloc_from_uint8(ptr noundef nonnull %10, i64 noundef 1) #5
  store ptr %93, ptr %4, align 8, !tbaa !21
  %.not163 = icmp eq ptr %93, null
  br i1 %.not163, label %.thread, label %94

.thread:                                          ; preds = %87
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 758, i32 noundef 2) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #5
  br label %.thread183

94:                                               ; preds = %87
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #5
  br label %95

95:                                               ; preds = %94, %85
  %.not164 = icmp eq ptr %5, null
  br i1 %.not164, label %126, label %96

96:                                               ; preds = %95
  %97 = load ptr, ptr %0, align 8, !tbaa !5
  %98 = getelementptr inbounds i8, ptr %97, i64 40
  %99 = load i8, ptr %98, align 8, !tbaa !31, !range !32, !noundef !33
  %100 = trunc nuw i8 %99 to i1
  %101 = getelementptr inbounds i8, ptr %97, i64 32
  %102 = load ptr, ptr %101, align 8, !tbaa !24
  %103 = getelementptr inbounds i8, ptr %102, i64 16
  %104 = load ptr, ptr %103, align 8, !tbaa !34
  br i1 %100, label %105, label %118

105:                                              ; preds = %96
  %106 = call ptr @wa_copy_with_alloc(ptr noundef %104) #5
  %107 = icmp eq ptr %106, null
  br i1 %107, label %108, label %109

108:                                              ; preds = %105
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 763, i32 noundef 2) #5
  br label %.thread183

109:                                              ; preds = %105
  %110 = load ptr, ptr %0, align 8, !tbaa !5
  %111 = call i32 @pb_to_onb(ptr noundef %110, ptr noundef nonnull %106) #5
  %.not165 = icmp eq i32 %111, 0
  br i1 %.not165, label %113, label %112

112:                                              ; preds = %109
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 764, i32 noundef %111) #5
  br label %.thread183

113:                                              ; preds = %109
  %114 = call ptr @wa_to_ba(ptr noundef nonnull %106) #5
  store ptr %114, ptr %5, align 8, !tbaa !21
  %115 = icmp eq ptr %114, null
  br i1 %115, label %116, label %117

116:                                              ; preds = %113
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 765, i32 noundef 2) #5
  br label %.thread183

117:                                              ; preds = %113
  call void @wa_free(ptr noundef nonnull %106) #5
  %.pre = load ptr, ptr %5, align 8, !tbaa !21
  br label %122

118:                                              ; preds = %96
  %119 = call ptr @wa_to_ba(ptr noundef %104) #5
  store ptr %119, ptr %5, align 8, !tbaa !21
  %120 = icmp eq ptr %119, null
  br i1 %120, label %121, label %122

121:                                              ; preds = %118
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 770, i32 noundef 2) #5
  br label %.thread183

122:                                              ; preds = %117, %118
  %123 = phi ptr [ %.pre, %117 ], [ %119, %118 ]
  %124 = call i32 @ba_change_len(ptr noundef %123, i64 noundef %70) #5
  %.not166 = icmp eq i32 %124, 0
  br i1 %.not166, label %126, label %125

125:                                              ; preds = %122
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 772, i32 noundef %124) #5
  br label %.thread183

126:                                              ; preds = %122, %95, %49, %59
  %.0112 = phi i64 [ %23, %59 ], [ %23, %49 ], [ %70, %95 ], [ %70, %122 ]
  %.not173 = icmp eq ptr %6, null
  br i1 %.not173, label %137, label %127

127:                                              ; preds = %126
  %128 = load ptr, ptr %0, align 8, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %128, i64 16
  %130 = load ptr, ptr %129, align 8, !tbaa !35
  %131 = call ptr @wa_to_ba(ptr noundef %130) #5
  store ptr %131, ptr %6, align 8, !tbaa !21
  %132 = icmp eq ptr %131, null
  br i1 %132, label %133, label %134

133:                                              ; preds = %127
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 777, i32 noundef 2) #5
  br label %.thread183

134:                                              ; preds = %127
  %135 = call i32 @ba_change_len(ptr noundef nonnull %131, i64 noundef %.0112) #5
  %.not174 = icmp eq i32 %135, 0
  br i1 %.not174, label %137, label %136

136:                                              ; preds = %134
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 778, i32 noundef %135) #5
  br label %.thread183

137:                                              ; preds = %134, %126
  %.not175 = icmp eq ptr %7, null
  br i1 %.not175, label %167, label %138

138:                                              ; preds = %137
  %139 = load ptr, ptr %0, align 8, !tbaa !5
  %140 = getelementptr inbounds i8, ptr %139, i64 40
  %141 = load i8, ptr %140, align 8, !tbaa !31, !range !32, !noundef !33
  %142 = trunc nuw i8 %141 to i1
  %143 = getelementptr inbounds i8, ptr %139, i64 8
  %144 = load ptr, ptr %143, align 8, !tbaa !36
  %145 = load ptr, ptr %144, align 8, !tbaa !37
  br i1 %142, label %146, label %159

146:                                              ; preds = %138
  %147 = call ptr @wa_copy_with_alloc(ptr noundef %145) #5
  %148 = icmp eq ptr %147, null
  br i1 %148, label %149, label %150

149:                                              ; preds = %146
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 783, i32 noundef 2) #5
  br label %.thread183

150:                                              ; preds = %146
  %151 = load ptr, ptr %0, align 8, !tbaa !5
  %152 = call i32 @pb_to_onb(ptr noundef %151, ptr noundef nonnull %147) #5
  %.not176 = icmp eq i32 %152, 0
  br i1 %.not176, label %154, label %153

153:                                              ; preds = %150
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 784, i32 noundef %152) #5
  br label %.thread183

154:                                              ; preds = %150
  %155 = call ptr @wa_to_ba(ptr noundef nonnull %147) #5
  store ptr %155, ptr %7, align 8, !tbaa !21
  %156 = icmp eq ptr %155, null
  br i1 %156, label %157, label %158

157:                                              ; preds = %154
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 785, i32 noundef 2) #5
  br label %.thread183

158:                                              ; preds = %154
  call void @wa_free(ptr noundef nonnull %147) #5
  %.pre187 = load ptr, ptr %7, align 8, !tbaa !21
  br label %163

159:                                              ; preds = %138
  %160 = call ptr @wa_to_ba(ptr noundef %145) #5
  store ptr %160, ptr %7, align 8, !tbaa !21
  %161 = icmp eq ptr %160, null
  br i1 %161, label %162, label %163

162:                                              ; preds = %159
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 790, i32 noundef 2) #5
  br label %.thread183

163:                                              ; preds = %158, %159
  %164 = phi ptr [ %.pre187, %158 ], [ %160, %159 ]
  %165 = call i32 @ba_change_len(ptr noundef %164, i64 noundef %.0112) #5
  %.not177 = icmp eq i32 %165, 0
  br i1 %.not177, label %167, label %166

166:                                              ; preds = %163
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 792, i32 noundef %165) #5
  br label %.thread183

167:                                              ; preds = %163, %137
  %.not178 = icmp eq ptr %8, null
  br i1 %.not178, label %.thread183, label %168

168:                                              ; preds = %167
  %169 = load ptr, ptr %0, align 8, !tbaa !5
  %170 = getelementptr inbounds i8, ptr %169, i64 40
  %171 = load i8, ptr %170, align 8, !tbaa !31, !range !32, !noundef !33
  %172 = trunc nuw i8 %171 to i1
  %173 = getelementptr inbounds i8, ptr %169, i64 8
  %174 = load ptr, ptr %173, align 8, !tbaa !36
  %175 = getelementptr inbounds i8, ptr %174, i64 8
  %176 = load ptr, ptr %175, align 8, !tbaa !39
  br i1 %172, label %177, label %189

177:                                              ; preds = %168
  %178 = call ptr @wa_copy_with_alloc(ptr noundef %176) #5
  %179 = icmp eq ptr %178, null
  br i1 %179, label %180, label %181

180:                                              ; preds = %177
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 797, i32 noundef 2) #5
  br label %.thread183

181:                                              ; preds = %177
  %182 = load ptr, ptr %0, align 8, !tbaa !5
  %183 = call i32 @pb_to_onb(ptr noundef %182, ptr noundef nonnull %178) #5
  %.not179 = icmp eq i32 %183, 0
  br i1 %.not179, label %185, label %184

184:                                              ; preds = %181
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 798, i32 noundef %183) #5
  br label %.thread183

185:                                              ; preds = %181
  %186 = call ptr @wa_to_ba(ptr noundef nonnull %178) #5
  store ptr %186, ptr %8, align 8, !tbaa !21
  %187 = icmp eq ptr %186, null
  br i1 %187, label %188, label %193

188:                                              ; preds = %185
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 799, i32 noundef 2) #5
  br label %.thread183

189:                                              ; preds = %168
  %190 = call ptr @wa_to_ba(ptr noundef %176) #5
  store ptr %190, ptr %8, align 8, !tbaa !21
  %191 = icmp eq ptr %190, null
  br i1 %191, label %192, label %193

192:                                              ; preds = %189
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 802, i32 noundef 2) #5
  br label %.thread183

193:                                              ; preds = %185, %189
  %194 = phi ptr [ %186, %185 ], [ %190, %189 ]
  %.6 = phi ptr [ %178, %185 ], [ null, %189 ]
  %195 = call i32 @ba_change_len(ptr noundef nonnull %194, i64 noundef %.0112) #5
  %.not180 = icmp eq i32 %195, 0
  br i1 %.not180, label %.thread183, label %196

196:                                              ; preds = %193
  call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 804, i32 noundef %195) #5
  br label %.thread183

.thread183:                                       ; preds = %.thread, %121, %125, %116, %112, %108, %78, %11, %32, %35, %45, %48, %58, %61, %133, %136, %149, %153, %157, %162, %166, %180, %184, %188, %192, %196, %193, %167
  %.9 = phi i32 [ 2, %32 ], [ %34, %35 ], [ 2, %45 ], [ %47, %48 ], [ 2, %58 ], [ %60, %61 ], [ 2, %133 ], [ %135, %136 ], [ 2, %149 ], [ %152, %153 ], [ 2, %157 ], [ %165, %166 ], [ 2, %180 ], [ %183, %184 ], [ 2, %188 ], [ %195, %196 ], [ 0, %193 ], [ 2, %192 ], [ 0, %167 ], [ 2, %162 ], [ 2, %11 ], [ 2, %.thread ], [ 2, %121 ], [ %124, %125 ], [ 2, %116 ], [ %111, %112 ], [ 2, %108 ], [ 1, %78 ]
  %.7 = phi ptr [ null, %32 ], [ null, %35 ], [ null, %45 ], [ null, %48 ], [ null, %58 ], [ null, %61 ], [ null, %133 ], [ null, %136 ], [ null, %149 ], [ %147, %153 ], [ %147, %157 ], [ null, %166 ], [ null, %180 ], [ %178, %184 ], [ %178, %188 ], [ %.6, %196 ], [ %.6, %193 ], [ null, %192 ], [ null, %167 ], [ null, %162 ], [ null, %11 ], [ null, %.thread ], [ null, %121 ], [ null, %125 ], [ %106, %116 ], [ %106, %112 ], [ null, %108 ], [ null, %78 ]
  call void @wa_free(ptr noundef %.7) #5
  ret i32 %.9
}

declare i64 @int_bit_len(ptr noundef) local_unnamed_addr #1

declare ptr @wa_to_ba(ptr noundef) local_unnamed_addr #1

declare i32 @ba_change_len(ptr noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare i32 @pb_to_onb(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @wa_free(ptr noundef) local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 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 #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind }
attributes #6 = { nounwind allocsize(0) }

!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 = !{!"EcCtx_st", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 33}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"_Bool", !8, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"EcParamsCtx_st", !13, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !10, i64 40, !14, i64 48, !7, i64 56, !7, i64 64, !13, i64 72, !7, i64 80}
!13 = !{!"int", !8, i64 0}
!14 = !{!"long", !8, i64 0}
!15 = !{!13, !13, i64 0}
!16 = !{!12, !7, i64 24}
!17 = !{!18, !7, i64 0}
!18 = !{!"EcGfpCtx_st", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !14, i64 32}
!19 = !{!20, !7, i64 0}
!20 = !{!"GfpCtx_st", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!21 = !{!7, !7, i64 0}
!22 = !{!18, !7, i64 8}
!23 = !{!18, !7, i64 16}
!24 = !{!12, !7, i64 32}
!25 = !{!26, !7, i64 0}
!26 = !{!"EC2m_st", !7, i64 0, !14, i64 8, !7, i64 16, !14, i64 24}
!27 = !{!28, !7, i64 0}
!28 = !{!"Gf2mCtx_st", !7, i64 0, !7, i64 8, !14, i64 16}
!29 = !{!26, !14, i64 8}
!30 = !{!8, !8, i64 0}
!31 = !{!12, !10, i64 40}
!32 = !{i8 0, i8 2}
!33 = !{}
!34 = !{!26, !7, i64 16}
!35 = !{!12, !7, i64 16}
!36 = !{!12, !7, i64 8}
!37 = !{!38, !7, i64 0}
!38 = !{!"ECPoint_st", !7, i64 0, !7, i64 8, !7, i64 16}
!39 = !{!38, !7, i64 8}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass