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

; 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.ByteArray_st = type { ptr, i64 }
%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.WordArray_st = type { ptr, i64 }
%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 [17 x i8], align 1
@default_opt_level = external global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local i32 @eckcdsa_get_pubkey(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #0 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  store ptr null, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  store ptr null, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %17

17:                                               ; preds = %4
  %18 = load ptr, ptr %6, align 8, !tbaa !5
  %19 = icmp ne ptr %18, null
  br i1 %19, label %22, label %20

20:                                               ; preds = %17
  store i32 2, ptr %14, align 4, !tbaa !9
  %21 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 50, i32 noundef %21, ptr noundef null)
  br label %308

22:                                               ; preds = %17
  br label %23

23:                                               ; preds = %22
  br label %24

24:                                               ; preds = %23
  br label %25

25:                                               ; preds = %24
  %26 = load ptr, ptr %7, align 8, !tbaa !5
  %27 = icmp ne ptr %26, null
  br i1 %27, label %30, label %28

28:                                               ; preds = %25
  store i32 2, ptr %14, align 4, !tbaa !9
  %29 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 51, i32 noundef %29, ptr noundef null)
  br label %308

30:                                               ; preds = %25
  br label %31

31:                                               ; preds = %30
  br label %32

32:                                               ; preds = %31
  br label %33

33:                                               ; preds = %32
  %34 = load ptr, ptr %8, align 8, !tbaa !5
  %35 = icmp ne ptr %34, null
  br i1 %35, label %38, label %36

36:                                               ; preds = %33
  store i32 2, ptr %14, align 4, !tbaa !9
  %37 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 52, i32 noundef %37, ptr noundef null)
  br label %308

38:                                               ; preds = %33
  br label %39

39:                                               ; preds = %38
  br label %40

40:                                               ; preds = %39
  br label %41

41:                                               ; preds = %40
  %42 = load ptr, ptr %9, align 8, !tbaa !5
  %43 = icmp ne ptr %42, null
  br i1 %43, label %46, label %44

44:                                               ; preds = %41
  store i32 2, ptr %14, align 4, !tbaa !9
  %45 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 53, i32 noundef %45, ptr noundef null)
  br label %308

46:                                               ; preds = %41
  br label %47

47:                                               ; preds = %46
  br label %48

48:                                               ; preds = %47
  br label %49

49:                                               ; preds = %48
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.ByteArray_st, ptr %50, i32 0, i32 0
  %52 = load ptr, ptr %51, align 8, !tbaa !11
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.ByteArray_st, ptr %53, i32 0, i32 1
  %55 = load i64, ptr %54, align 8, !tbaa !14
  %56 = call ptr @wa_alloc_from_be(ptr noundef %52, i64 noundef %55)
  store ptr %56, ptr %11, align 8, !tbaa !5
  %57 = icmp eq ptr null, %56
  br i1 %57, label %58, label %60

58:                                               ; preds = %49
  store i32 2, ptr %14, align 4, !tbaa !9
  %59 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 55, i32 noundef %59)
  br label %308

60:                                               ; preds = %49
  br label %61

61:                                               ; preds = %60
  br label %62

62:                                               ; preds = %61
  %63 = load ptr, ptr %11, align 8, !tbaa !5
  %64 = call zeroext i1 @int_is_zero(ptr noundef %63)
  br i1 %64, label %74, label %65

65:                                               ; preds = %62
  %66 = load ptr, ptr %11, align 8, !tbaa !5
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.EcCtx_st, ptr %67, i32 0, i32 0
  %69 = load ptr, ptr %68, align 8, !tbaa !15
  %70 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %69, i32 0, i32 2
  %71 = load ptr, ptr %70, align 8, !tbaa !18
  %72 = call i32 @int_cmp(ptr noundef %66, ptr noundef %71)
  %73 = icmp sge i32 %72, 0
  br i1 %73, label %74, label %79

74:                                               ; preds = %65, %62
  br label %75

75:                                               ; preds = %74
  store i32 6, ptr %14, align 4, !tbaa !9
  %76 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 57, i32 noundef %76, ptr noundef null)
  br label %308

77:                                               ; No predecessors!
  br label %78

78:                                               ; preds = %77
  br label %79

79:                                               ; preds = %78, %65
  %80 = load ptr, ptr %11, align 8, !tbaa !5
  %81 = load ptr, ptr %6, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.EcCtx_st, ptr %81, i32 0, i32 0
  %83 = load ptr, ptr %82, align 8, !tbaa !15
  %84 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %83, i32 0, i32 2
  %85 = load ptr, ptr %84, align 8, !tbaa !18
  %86 = getelementptr inbounds %struct.WordArray_st, ptr %85, i32 0, i32 1
  %87 = load i64, ptr %86, align 8, !tbaa !20
  call void @wa_change_len(ptr noundef %80, i64 noundef %87)
  br label %88

88:                                               ; preds = %79
  %89 = load ptr, ptr %11, align 8, !tbaa !5
  %90 = load ptr, ptr %6, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.EcCtx_st, ptr %90, i32 0, i32 0
  %92 = load ptr, ptr %91, align 8, !tbaa !15
  %93 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %92, i32 0, i32 2
  %94 = load ptr, ptr %93, align 8, !tbaa !18
  %95 = call ptr @gfp_mod_inv_core(ptr noundef %89, ptr noundef %94)
  store ptr %95, ptr %12, align 8, !tbaa !5
  %96 = icmp eq ptr null, %95
  br i1 %96, label %97, label %99

97:                                               ; preds = %88
  store i32 2, ptr %14, align 4, !tbaa !9
  %98 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 61, i32 noundef %98)
  br label %308

99:                                               ; preds = %88
  br label %100

100:                                              ; preds = %99
  br label %101

101:                                              ; preds = %100
  %102 = load ptr, ptr %6, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.EcCtx_st, ptr %102, i32 0, i32 0
  %104 = load ptr, ptr %103, align 8, !tbaa !15
  %105 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %104, i32 0, i32 10
  %106 = load ptr, ptr %105, align 8, !tbaa !22
  %107 = icmp eq ptr %106, null
  br i1 %107, label %108, label %130

108:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %109 = load i32, ptr @default_opt_level, align 4, !tbaa !9
  %110 = lshr i32 %109, 8
  %111 = and i32 %110, 15
  store i32 %111, ptr %15, align 4, !tbaa !9
  %112 = load i32, ptr %15, align 4, !tbaa !9
  %113 = icmp eq i32 %112, 0
  br i1 %113, label %114, label %115

114:                                              ; preds = %108
  store i32 5, ptr %15, align 4, !tbaa !9
  br label %115

115:                                              ; preds = %114, %108
  br label %116

116:                                              ; preds = %115
  %117 = load ptr, ptr %6, align 8, !tbaa !5
  %118 = load i32, ptr %15, align 4, !tbaa !9
  %119 = call i32 @ec_set_sign_precomp(ptr noundef %117, i32 noundef 0, i32 noundef %118)
  store i32 %119, ptr %14, align 4, !tbaa !9
  %120 = load i32, ptr %14, align 4, !tbaa !9
  %121 = icmp ne i32 %120, 0
  br i1 %121, label %122, label %124

122:                                              ; preds = %116
  %123 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 68, i32 noundef %123)
  store i32 4, ptr %16, align 4
  br label %127

124:                                              ; preds = %116
  br label %125

125:                                              ; preds = %124
  br label %126

126:                                              ; preds = %125
  store i32 0, ptr %16, align 4
  br label %127

127:                                              ; preds = %126, %122
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  %128 = load i32, ptr %16, align 4
  switch i32 %128, label %313 [
    i32 0, label %129
    i32 4, label %308
  ]

129:                                              ; preds = %127
  br label %130

130:                                              ; preds = %129, %101
  %131 = load ptr, ptr %6, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.EcCtx_st, ptr %131, i32 0, i32 0
  %133 = load ptr, ptr %132, align 8, !tbaa !15
  %134 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %133, i32 0, i32 0
  %135 = load i32, ptr %134, align 8, !tbaa !23
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %186

137:                                              ; preds = %130
  br label %138

138:                                              ; preds = %137
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.EcCtx_st, ptr %139, i32 0, i32 0
  %141 = load ptr, ptr %140, align 8, !tbaa !15
  %142 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %141, i32 0, i32 3
  %143 = load ptr, ptr %142, align 8, !tbaa !24
  %144 = getelementptr inbounds %struct.EcGfpCtx_st, ptr %143, i32 0, i32 4
  %145 = load i64, ptr %144, align 8, !tbaa !25
  %146 = call ptr @ec_point_alloc(i64 noundef %145)
  store ptr %146, ptr %13, align 8, !tbaa !5
  %147 = icmp eq ptr null, %146
  br i1 %147, label %148, label %150

148:                                              ; preds = %138
  store i32 2, ptr %14, align 4, !tbaa !9
  %149 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 72, i32 noundef %149)
  br label %308

150:                                              ; preds = %138
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151
  %153 = load ptr, ptr %6, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.EcCtx_st, ptr %153, i32 0, i32 0
  %155 = load ptr, ptr %154, align 8, !tbaa !15
  %156 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %155, i32 0, i32 3
  %157 = load ptr, ptr %156, align 8, !tbaa !24
  %158 = getelementptr inbounds %struct.EcGfpCtx_st, ptr %157, i32 0, i32 0
  %159 = load ptr, ptr %158, align 8, !tbaa !27
  %160 = getelementptr inbounds %struct.GfpCtx_st, ptr %159, i32 0, i32 0
  %161 = load ptr, ptr %160, align 8, !tbaa !28
  %162 = call i64 @int_bit_len(ptr noundef %161)
  %163 = add i64 %162, 7
  %164 = udiv i64 %163, 8
  store i64 %164, ptr %10, align 8, !tbaa !30
  br label %165

165:                                              ; preds = %152
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.EcCtx_st, ptr %166, i32 0, i32 0
  %168 = load ptr, ptr %167, align 8, !tbaa !15
  %169 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %168, i32 0, i32 3
  %170 = load ptr, ptr %169, align 8, !tbaa !24
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.EcCtx_st, ptr %171, i32 0, i32 0
  %173 = load ptr, ptr %172, align 8, !tbaa !15
  %174 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %173, i32 0, i32 10
  %175 = load ptr, ptr %174, align 8, !tbaa !22
  %176 = load ptr, ptr %12, align 8, !tbaa !5
  %177 = load ptr, ptr %13, align 8, !tbaa !5
  %178 = call i32 @ecp_dual_mul_opt(ptr noundef %170, ptr noundef %175, ptr noundef %176, ptr noundef null, ptr noundef null, ptr noundef %177)
  store i32 %178, ptr %14, align 4, !tbaa !9
  %179 = load i32, ptr %14, align 4, !tbaa !9
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %183

181:                                              ; preds = %165
  %182 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 74, i32 noundef %182)
  br label %308

183:                                              ; preds = %165
  br label %184

184:                                              ; preds = %183
  br label %185

185:                                              ; preds = %184
  br label %237

186:                                              ; preds = %130
  br label %187

187:                                              ; preds = %186
  %188 = load ptr, ptr %6, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.EcCtx_st, ptr %188, i32 0, i32 0
  %190 = load ptr, ptr %189, align 8, !tbaa !15
  %191 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %190, i32 0, i32 4
  %192 = load ptr, ptr %191, align 8, !tbaa !31
  %193 = getelementptr inbounds %struct.EC2m_st, ptr %192, i32 0, i32 3
  %194 = load i64, ptr %193, align 8, !tbaa !32
  %195 = call ptr @ec_point_alloc(i64 noundef %194)
  store ptr %195, ptr %13, align 8, !tbaa !5
  %196 = icmp eq ptr null, %195
  br i1 %196, label %197, label %199

197:                                              ; preds = %187
  store i32 2, ptr %14, align 4, !tbaa !9
  %198 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 77, i32 noundef %198)
  br label %308

199:                                              ; preds = %187
  br label %200

200:                                              ; preds = %199
  br label %201

201:                                              ; preds = %200
  %202 = load ptr, ptr %6, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.EcCtx_st, ptr %202, i32 0, i32 0
  %204 = load ptr, ptr %203, align 8, !tbaa !15
  %205 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %204, i32 0, i32 4
  %206 = load ptr, ptr %205, align 8, !tbaa !31
  %207 = getelementptr inbounds %struct.EC2m_st, ptr %206, i32 0, i32 0
  %208 = load ptr, ptr %207, align 8, !tbaa !34
  %209 = getelementptr inbounds %struct.Gf2mCtx_st, ptr %208, i32 0, i32 0
  %210 = load ptr, ptr %209, align 8, !tbaa !35
  %211 = getelementptr inbounds i32, ptr %210, i64 0
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = add i64 %213, 7
  %215 = udiv i64 %214, 8
  store i64 %215, ptr %10, align 8, !tbaa !30
  br label %216

216:                                              ; preds = %201
  %217 = load ptr, ptr %6, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.EcCtx_st, ptr %217, i32 0, i32 0
  %219 = load ptr, ptr %218, align 8, !tbaa !15
  %220 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %219, i32 0, i32 4
  %221 = load ptr, ptr %220, align 8, !tbaa !31
  %222 = load ptr, ptr %6, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.EcCtx_st, ptr %222, i32 0, i32 0
  %224 = load ptr, ptr %223, align 8, !tbaa !15
  %225 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %224, i32 0, i32 10
  %226 = load ptr, ptr %225, align 8, !tbaa !22
  %227 = load ptr, ptr %12, align 8, !tbaa !5
  %228 = load ptr, ptr %13, align 8, !tbaa !5
  %229 = call i32 @ec2m_dual_mul_opt(ptr noundef %221, ptr noundef %226, ptr noundef %227, ptr noundef null, ptr noundef null, ptr noundef %228)
  store i32 %229, ptr %14, align 4, !tbaa !9
  %230 = load i32, ptr %14, align 4, !tbaa !9
  %231 = icmp ne i32 %230, 0
  br i1 %231, label %232, label %234

232:                                              ; preds = %216
  %233 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 79, i32 noundef %233)
  br label %308

234:                                              ; preds = %216
  br label %235

235:                                              ; preds = %234
  br label %236

236:                                              ; preds = %235
  br label %237

237:                                              ; preds = %236, %185
  br label %238

238:                                              ; preds = %237
  %239 = load ptr, ptr %13, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.ECPoint_st, ptr %239, i32 0, i32 0
  %241 = load ptr, ptr %240, align 8, !tbaa !37
  %242 = call ptr @wa_to_ba(ptr noundef %241)
  %243 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %242, ptr %243, align 8, !tbaa !5
  %244 = icmp eq ptr null, %242
  br i1 %244, label %245, label %247

245:                                              ; preds = %238
  store i32 2, ptr %14, align 4, !tbaa !9
  %246 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 82, i32 noundef %246)
  br label %308

247:                                              ; preds = %238
  br label %248

248:                                              ; preds = %247
  br label %249

249:                                              ; preds = %248
  br label %250

250:                                              ; preds = %249
  %251 = load ptr, ptr %13, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.ECPoint_st, ptr %251, i32 0, i32 1
  %253 = load ptr, ptr %252, align 8, !tbaa !39
  %254 = call ptr @wa_to_ba(ptr noundef %253)
  %255 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %254, ptr %255, align 8, !tbaa !5
  %256 = icmp eq ptr null, %254
  br i1 %256, label %257, label %259

257:                                              ; preds = %250
  store i32 2, ptr %14, align 4, !tbaa !9
  %258 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 83, i32 noundef %258)
  br label %308

259:                                              ; preds = %250
  br label %260

260:                                              ; preds = %259
  br label %261

261:                                              ; preds = %260
  br label %262

262:                                              ; preds = %261
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  %264 = load ptr, ptr %263, align 8, !tbaa !5
  %265 = load i64, ptr %10, align 8, !tbaa !30
  %266 = call i32 @ba_change_len(ptr noundef %264, i64 noundef %265)
  store i32 %266, ptr %14, align 4, !tbaa !9
  %267 = load i32, ptr %14, align 4, !tbaa !9
  %268 = icmp ne i32 %267, 0
  br i1 %268, label %269, label %271

269:                                              ; preds = %262
  %270 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 84, i32 noundef %270)
  br label %308

271:                                              ; preds = %262
  br label %272

272:                                              ; preds = %271
  br label %273

273:                                              ; preds = %272
  br label %274

274:                                              ; preds = %273
  %275 = load ptr, ptr %9, align 8, !tbaa !5
  %276 = load ptr, ptr %275, align 8, !tbaa !5
  %277 = load i64, ptr %10, align 8, !tbaa !30
  %278 = call i32 @ba_change_len(ptr noundef %276, i64 noundef %277)
  store i32 %278, ptr %14, align 4, !tbaa !9
  %279 = load i32, ptr %14, align 4, !tbaa !9
  %280 = icmp ne i32 %279, 0
  br i1 %280, label %281, label %283

281:                                              ; preds = %274
  %282 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 85, i32 noundef %282)
  br label %308

283:                                              ; preds = %274
  br label %284

284:                                              ; preds = %283
  br label %285

285:                                              ; preds = %284
  br label %286

286:                                              ; preds = %285
  %287 = load ptr, ptr %8, align 8, !tbaa !5
  %288 = load ptr, ptr %287, align 8, !tbaa !5
  %289 = call i32 @ba_swap(ptr noundef %288)
  store i32 %289, ptr %14, align 4, !tbaa !9
  %290 = load i32, ptr %14, align 4, !tbaa !9
  %291 = icmp ne i32 %290, 0
  br i1 %291, label %292, label %294

292:                                              ; preds = %286
  %293 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 86, i32 noundef %293)
  br label %308

294:                                              ; preds = %286
  br label %295

295:                                              ; preds = %294
  br label %296

296:                                              ; preds = %295
  br label %297

297:                                              ; preds = %296
  %298 = load ptr, ptr %9, align 8, !tbaa !5
  %299 = load ptr, ptr %298, align 8, !tbaa !5
  %300 = call i32 @ba_swap(ptr noundef %299)
  store i32 %300, ptr %14, align 4, !tbaa !9
  %301 = load i32, ptr %14, align 4, !tbaa !9
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %303, label %305

303:                                              ; preds = %297
  %304 = load i32, ptr %14, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 87, i32 noundef %304)
  br label %308

305:                                              ; preds = %297
  br label %306

306:                                              ; preds = %305
  br label %307

307:                                              ; preds = %306
  br label %308

308:                                              ; preds = %307, %303, %292, %281, %269, %257, %245, %232, %197, %181, %148, %127, %97, %75, %58, %44, %36, %28, %20
  %309 = load ptr, ptr %13, align 8, !tbaa !5
  call void @ec_point_free(ptr noundef %309)
  %310 = load ptr, ptr %11, align 8, !tbaa !5
  call void @wa_free_private(ptr noundef %310)
  %311 = load ptr, ptr %12, align 8, !tbaa !5
  call void @wa_free_private(ptr noundef %311)
  %312 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %312, ptr %5, align 4
  store i32 1, ptr %16, align 4
  br label %313

313:                                              ; preds = %308, %127
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  %314 = load i32, ptr %5, align 4
  ret i32 %314
}

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

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

declare ptr @wa_alloc_from_be(ptr noundef, i64 noundef) #2

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

declare zeroext i1 @int_is_zero(ptr noundef) #2

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

declare void @wa_change_len(ptr noundef, i64 noundef) #2

declare ptr @gfp_mod_inv_core(ptr noundef, ptr noundef) #2

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

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

declare ptr @ec_point_alloc(i64 noundef) #2

declare i64 @int_bit_len(ptr noundef) #2

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

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

declare ptr @wa_to_ba(ptr noundef) #2

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

declare i32 @ba_swap(ptr noundef) #2

declare void @ec_point_free(ptr noundef) #2

declare void @wa_free_private(ptr noundef) #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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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, !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 = !{!"ByteArray_st", !6, i64 0, !13, i64 8}
!13 = !{!"long", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = !{!16, !6, i64 0}
!16 = !{!"EcCtx_st", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !17, i64 32, !17, i64 33}
!17 = !{!"_Bool", !7, i64 0}
!18 = !{!19, !6, i64 16}
!19 = !{!"EcParamsCtx_st", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !17, i64 40, !13, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !6, i64 80}
!20 = !{!21, !13, i64 8}
!21 = !{!"WordArray_st", !6, i64 0, !13, i64 8}
!22 = !{!19, !6, i64 80}
!23 = !{!19, !10, i64 0}
!24 = !{!19, !6, i64 24}
!25 = !{!26, !13, i64 32}
!26 = !{!"EcGfpCtx_st", !6, i64 0, !6, i64 8, !6, i64 16, !17, i64 24, !13, i64 32}
!27 = !{!26, !6, i64 0}
!28 = !{!29, !6, i64 0}
!29 = !{!"GfpCtx_st", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!30 = !{!13, !13, i64 0}
!31 = !{!19, !6, i64 32}
!32 = !{!33, !13, i64 24}
!33 = !{!"EC2m_st", !6, i64 0, !13, i64 8, !6, i64 16, !13, i64 24}
!34 = !{!33, !6, i64 0}
!35 = !{!36, !6, i64 0}
!36 = !{!"Gf2mCtx_st", !6, i64 0, !6, i64 8, !13, i64 16}
!37 = !{!38, !6, i64 0}
!38 = !{!"ECPoint_st", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!38, !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 [17 x i8], align 1
@default_opt_level = external local_unnamed_addr global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local i32 @eckcdsa_get_pubkey(ptr noundef %0, ptr noundef readonly %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #0 {
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %5, label %6

5:                                                ; preds = %4
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 50, i32 noundef 2, ptr noundef null) #2
  br label %124

6:                                                ; preds = %4
  %.not96 = icmp eq ptr %1, null
  br i1 %.not96, label %7, label %8

7:                                                ; preds = %6
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 51, i32 noundef 2, ptr noundef null) #2
  br label %124

8:                                                ; preds = %6
  %.not97 = icmp eq ptr %2, null
  br i1 %.not97, label %9, label %10

9:                                                ; preds = %8
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 52, i32 noundef 2, ptr noundef null) #2
  br label %124

10:                                               ; preds = %8
  %.not98 = icmp eq ptr %3, null
  br i1 %.not98, label %11, label %12

11:                                               ; preds = %10
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 53, i32 noundef 2, ptr noundef null) #2
  br label %124

12:                                               ; preds = %10
  %13 = load ptr, ptr %1, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %1, i64 8
  %15 = load i64, ptr %14, align 8, !tbaa !11
  %16 = tail call ptr @wa_alloc_from_be(ptr noundef %13, i64 noundef %15) #2
  %17 = icmp eq ptr %16, null
  br i1 %17, label %18, label %19

18:                                               ; preds = %12
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 55, i32 noundef 2) #2
  br label %124

19:                                               ; preds = %12
  %20 = tail call zeroext i1 @int_is_zero(ptr noundef nonnull %16) #2
  br i1 %20, label %27, label %21

21:                                               ; preds = %19
  %22 = load ptr, ptr %0, align 8, !tbaa !12
  %23 = getelementptr inbounds i8, ptr %22, i64 16
  %24 = load ptr, ptr %23, align 8, !tbaa !15
  %25 = tail call i32 @int_cmp(ptr noundef nonnull %16, ptr noundef %24) #2
  %26 = icmp sgt i32 %25, -1
  br i1 %26, label %27, label %28

27:                                               ; preds = %19, %21
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 57, i32 noundef 6, ptr noundef null) #2
  br label %124

28:                                               ; preds = %21
  %29 = load ptr, ptr %0, align 8, !tbaa !12
  %30 = getelementptr inbounds i8, ptr %29, i64 16
  %31 = load ptr, ptr %30, align 8, !tbaa !15
  %32 = getelementptr inbounds i8, ptr %31, i64 8
  %33 = load i64, ptr %32, align 8, !tbaa !18
  tail call void @wa_change_len(ptr noundef nonnull %16, i64 noundef %33) #2
  %34 = load ptr, ptr %0, align 8, !tbaa !12
  %35 = getelementptr inbounds i8, ptr %34, i64 16
  %36 = load ptr, ptr %35, align 8, !tbaa !15
  %37 = tail call ptr @gfp_mod_inv_core(ptr noundef nonnull %16, ptr noundef %36) #2
  %38 = icmp eq ptr %37, null
  br i1 %38, label %39, label %40

39:                                               ; preds = %28
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 61, i32 noundef 2) #2
  br label %124

40:                                               ; preds = %28
  %41 = load ptr, ptr %0, align 8, !tbaa !12
  %42 = getelementptr inbounds i8, ptr %41, i64 80
  %43 = load ptr, ptr %42, align 8, !tbaa !20
  %44 = icmp eq ptr %43, null
  br i1 %44, label %45, label %.thread

45:                                               ; preds = %40
  %46 = load i32, ptr @default_opt_level, align 4, !tbaa !21
  %47 = lshr i32 %46, 8
  %48 = and i32 %47, 15
  %49 = icmp eq i32 %48, 0
  %spec.store.select = select i1 %49, i32 5, i32 %48
  %50 = tail call i32 @ec_set_sign_precomp(ptr noundef nonnull %0, i32 noundef 0, i32 noundef %spec.store.select) #2
  %.not99 = icmp eq i32 %50, 0
  br i1 %.not99, label %..thread_crit_edge, label %51

..thread_crit_edge:                               ; preds = %45
  %.pre = load ptr, ptr %0, align 8, !tbaa !12
  br label %.thread

51:                                               ; preds = %45
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 68, i32 noundef %50) #2
  br label %124

.thread:                                          ; preds = %..thread_crit_edge, %40
  %52 = phi ptr [ %.pre, %..thread_crit_edge ], [ %41, %40 ]
  %53 = load i32, ptr %52, align 8, !tbaa !22
  %54 = icmp eq i32 %53, 0
  br i1 %54, label %55, label %77

55:                                               ; preds = %.thread
  %56 = getelementptr inbounds i8, ptr %52, i64 24
  %57 = load ptr, ptr %56, align 8, !tbaa !23
  %58 = getelementptr inbounds i8, ptr %57, i64 32
  %59 = load i64, ptr %58, align 8, !tbaa !24
  %60 = tail call ptr @ec_point_alloc(i64 noundef %59) #2
  %61 = icmp eq ptr %60, null
  br i1 %61, label %62, label %63

62:                                               ; preds = %55
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 72, i32 noundef 2) #2
  br label %124

63:                                               ; preds = %55
  %64 = load ptr, ptr %0, align 8, !tbaa !12
  %65 = getelementptr inbounds i8, ptr %64, i64 24
  %66 = load ptr, ptr %65, align 8, !tbaa !23
  %67 = load ptr, ptr %66, align 8, !tbaa !26
  %68 = load ptr, ptr %67, align 8, !tbaa !27
  %69 = tail call i64 @int_bit_len(ptr noundef %68) #2
  %70 = load ptr, ptr %0, align 8, !tbaa !12
  %71 = getelementptr inbounds i8, ptr %70, i64 24
  %72 = load ptr, ptr %71, align 8, !tbaa !23
  %73 = getelementptr inbounds i8, ptr %70, i64 80
  %74 = load ptr, ptr %73, align 8, !tbaa !20
  %75 = tail call i32 @ecp_dual_mul_opt(ptr noundef %72, ptr noundef %74, ptr noundef nonnull %37, ptr noundef null, ptr noundef null, ptr noundef nonnull %60) #2
  %.not101 = icmp eq i32 %75, 0
  br i1 %.not101, label %97, label %76

76:                                               ; preds = %63
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 74, i32 noundef %75) #2
  br label %124

77:                                               ; preds = %.thread
  %78 = getelementptr inbounds i8, ptr %52, i64 32
  %79 = load ptr, ptr %78, align 8, !tbaa !29
  %80 = getelementptr inbounds i8, ptr %79, i64 24
  %81 = load i64, ptr %80, align 8, !tbaa !30
  %82 = tail call ptr @ec_point_alloc(i64 noundef %81) #2
  %83 = icmp eq ptr %82, null
  br i1 %83, label %84, label %85

84:                                               ; preds = %77
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 77, i32 noundef 2) #2
  br label %124

85:                                               ; preds = %77
  %86 = load ptr, ptr %0, align 8, !tbaa !12
  %87 = getelementptr inbounds i8, ptr %86, i64 32
  %88 = load ptr, ptr %87, align 8, !tbaa !29
  %89 = load ptr, ptr %88, align 8, !tbaa !32
  %90 = load ptr, ptr %89, align 8, !tbaa !33
  %91 = load i32, ptr %90, align 4, !tbaa !21
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds i8, ptr %86, i64 80
  %94 = load ptr, ptr %93, align 8, !tbaa !20
  %95 = tail call i32 @ec2m_dual_mul_opt(ptr noundef nonnull %88, ptr noundef %94, ptr noundef nonnull %37, ptr noundef null, ptr noundef null, ptr noundef nonnull %82) #2
  %.not100 = icmp eq i32 %95, 0
  br i1 %.not100, label %97, label %96

96:                                               ; preds = %85
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 79, i32 noundef %95) #2
  br label %124

97:                                               ; preds = %63, %85
  %.075.in.in = phi i64 [ %69, %63 ], [ %92, %85 ]
  %.072 = phi ptr [ %60, %63 ], [ %82, %85 ]
  %.075.in = add i64 %.075.in.in, 7
  %.075 = lshr i64 %.075.in, 3
  %98 = load ptr, ptr %.072, align 8, !tbaa !35
  %99 = tail call ptr @wa_to_ba(ptr noundef %98) #2
  store ptr %99, ptr %2, align 8, !tbaa !37
  %100 = icmp eq ptr %99, null
  br i1 %100, label %101, label %102

101:                                              ; preds = %97
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 82, i32 noundef 2) #2
  br label %124

102:                                              ; preds = %97
  %103 = getelementptr inbounds i8, ptr %.072, i64 8
  %104 = load ptr, ptr %103, align 8, !tbaa !38
  %105 = tail call ptr @wa_to_ba(ptr noundef %104) #2
  store ptr %105, ptr %3, align 8, !tbaa !37
  %106 = icmp eq ptr %105, null
  br i1 %106, label %107, label %108

107:                                              ; preds = %102
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 83, i32 noundef 2) #2
  br label %124

108:                                              ; preds = %102
  %109 = load ptr, ptr %2, align 8, !tbaa !37
  %110 = tail call i32 @ba_change_len(ptr noundef %109, i64 noundef %.075) #2
  %.not102 = icmp eq i32 %110, 0
  br i1 %.not102, label %112, label %111

111:                                              ; preds = %108
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 84, i32 noundef %110) #2
  br label %124

112:                                              ; preds = %108
  %113 = load ptr, ptr %3, align 8, !tbaa !37
  %114 = tail call i32 @ba_change_len(ptr noundef %113, i64 noundef %.075) #2
  %.not103 = icmp eq i32 %114, 0
  br i1 %.not103, label %116, label %115

115:                                              ; preds = %112
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 85, i32 noundef %114) #2
  br label %124

116:                                              ; preds = %112
  %117 = load ptr, ptr %2, align 8, !tbaa !37
  %118 = tail call i32 @ba_swap(ptr noundef %117) #2
  %.not104 = icmp eq i32 %118, 0
  br i1 %.not104, label %120, label %119

119:                                              ; preds = %116
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 86, i32 noundef %118) #2
  br label %124

120:                                              ; preds = %116
  %121 = load ptr, ptr %3, align 8, !tbaa !37
  %122 = tail call i32 @ba_swap(ptr noundef %121) #2
  %.not105 = icmp eq i32 %122, 0
  br i1 %.not105, label %124, label %123

123:                                              ; preds = %120
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 87, i32 noundef %122) #2
  br label %124

124:                                              ; preds = %51, %120, %123, %119, %115, %111, %107, %101, %96, %84, %76, %62, %39, %27, %18, %11, %9, %7, %5
  %.074 = phi ptr [ null, %18 ], [ %16, %27 ], [ %16, %39 ], [ %16, %51 ], [ %16, %62 ], [ %16, %76 ], [ %16, %101 ], [ %16, %107 ], [ %16, %111 ], [ %16, %115 ], [ %16, %119 ], [ %16, %123 ], [ %16, %120 ], [ %16, %84 ], [ %16, %96 ], [ null, %11 ], [ null, %9 ], [ null, %7 ], [ null, %5 ]
  %.073 = phi ptr [ null, %18 ], [ null, %27 ], [ null, %39 ], [ %37, %51 ], [ %37, %62 ], [ %37, %76 ], [ %37, %101 ], [ %37, %107 ], [ %37, %111 ], [ %37, %115 ], [ %37, %119 ], [ %37, %123 ], [ %37, %120 ], [ %37, %84 ], [ %37, %96 ], [ null, %11 ], [ null, %9 ], [ null, %7 ], [ null, %5 ]
  %.1 = phi ptr [ null, %18 ], [ null, %27 ], [ null, %39 ], [ null, %51 ], [ null, %62 ], [ %60, %76 ], [ %.072, %101 ], [ %.072, %107 ], [ %.072, %111 ], [ %.072, %115 ], [ %.072, %119 ], [ %.072, %123 ], [ %.072, %120 ], [ null, %84 ], [ %82, %96 ], [ null, %11 ], [ null, %9 ], [ null, %7 ], [ null, %5 ]
  %.071 = phi i32 [ 2, %18 ], [ 6, %27 ], [ 2, %39 ], [ %50, %51 ], [ 2, %62 ], [ %75, %76 ], [ 2, %101 ], [ 2, %107 ], [ %110, %111 ], [ %114, %115 ], [ %118, %119 ], [ %122, %123 ], [ 0, %120 ], [ 2, %84 ], [ %95, %96 ], [ 2, %11 ], [ 2, %9 ], [ 2, %7 ], [ 2, %5 ]
  tail call void @ec_point_free(ptr noundef %.1) #2
  tail call void @wa_free_private(ptr noundef %.074) #2
  tail call void @wa_free_private(ptr noundef %.073) #2
  ret i32 %.071
}

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

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

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

declare zeroext i1 @int_is_zero(ptr noundef) local_unnamed_addr #1

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

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

declare ptr @gfp_mod_inv_core(ptr noundef, ptr noundef) local_unnamed_addr #1

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

declare ptr @ec_point_alloc(i64 noundef) local_unnamed_addr #1

declare i64 @int_bit_len(ptr noundef) local_unnamed_addr #1

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

declare i32 @ec2m_dual_mul_opt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, 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

declare i32 @ba_swap(ptr noundef) local_unnamed_addr #1

declare void @ec_point_free(ptr noundef) local_unnamed_addr #1

declare void @wa_free_private(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 = { "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 }

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


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