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

; 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.EC2m_st = type { ptr, i64, ptr, i64 }
%struct.WordArray_st = type { ptr, i64 }
%struct.ECPoint_st = type { ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [18 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

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

declare i64 @int_bit_len(ptr noundef) #1

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

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

declare ptr @wa_alloc_from_ba(ptr noundef) #1

declare zeroext i1 @int_is_zero(ptr noundef) #1

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

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

declare ptr @ec_point_alloc(i64 noundef) #1

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

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

declare void @ec_point_free(ptr noundef) #1

declare void @gf2m_mod_mul(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare ptr @wa_alloc(i64 noundef) #1

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

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

21:                                               ; preds = %18
  store i32 2, ptr %17, align 4, !tbaa !9
  %22 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 316, i32 noundef %22, ptr noundef null)
  br label %290

23:                                               ; preds = %18
  br label %24

24:                                               ; preds = %23
  br label %25

25:                                               ; preds = %24
  br label %26

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

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

31:                                               ; preds = %26
  br label %32

32:                                               ; preds = %31
  br label %33

33:                                               ; preds = %32
  br label %34

34:                                               ; preds = %33
  %35 = load ptr, ptr %6, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.ByteArray_st, ptr %35, i32 0, i32 1
  %37 = load i64, ptr %36, align 8, !tbaa !11
  %38 = icmp eq i64 %37, 32
  br i1 %38, label %51, label %39

39:                                               ; preds = %34
  %40 = load ptr, ptr %6, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.ByteArray_st, ptr %40, i32 0, i32 1
  %42 = load i64, ptr %41, align 8, !tbaa !11
  %43 = icmp eq i64 %42, 48
  br i1 %43, label %51, label %44

44:                                               ; preds = %39
  %45 = load ptr, ptr %6, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.ByteArray_st, ptr %45, i32 0, i32 1
  %47 = load i64, ptr %46, align 8, !tbaa !11
  %48 = icmp eq i64 %47, 64
  br i1 %48, label %51, label %49

49:                                               ; preds = %44
  store i32 2, ptr %17, align 4, !tbaa !9
  %50 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 318, i32 noundef %50, ptr noundef null)
  br label %290

51:                                               ; preds = %44, %39, %34
  br label %52

52:                                               ; preds = %51
  br label %53

53:                                               ; preds = %52
  br label %54

54:                                               ; preds = %53
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  %56 = icmp ne ptr %55, null
  br i1 %56, label %59, label %57

57:                                               ; preds = %54
  store i32 2, ptr %17, align 4, !tbaa !9
  %58 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 319, i32 noundef %58, ptr noundef null)
  br label %290

59:                                               ; preds = %54
  br label %60

60:                                               ; preds = %59
  br label %61

61:                                               ; preds = %60
  br label %62

62:                                               ; preds = %61
  %63 = load ptr, ptr %8, align 8, !tbaa !5
  %64 = icmp ne ptr %63, null
  br i1 %64, label %67, label %65

65:                                               ; preds = %62
  store i32 2, ptr %17, align 4, !tbaa !9
  %66 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 320, i32 noundef %66, ptr noundef null)
  br label %290

67:                                               ; preds = %62
  br label %68

68:                                               ; preds = %67
  br label %69

69:                                               ; preds = %68
  br label %70

70:                                               ; preds = %69
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.EcCtx_st, ptr %71, i32 0, i32 0
  %73 = load ptr, ptr %72, align 8, !tbaa !14
  %74 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %73, i32 0, i32 0
  %75 = load i32, ptr %74, align 8, !tbaa !17
  %76 = icmp eq i32 %75, 1
  br i1 %76, label %79, label %77

77:                                               ; preds = %70
  store i32 2, ptr %17, align 4, !tbaa !9
  %78 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 321, i32 noundef %78, ptr noundef null)
  br label %290

79:                                               ; preds = %70
  br label %80

80:                                               ; preds = %79
  br label %81

81:                                               ; preds = %80
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.EcCtx_st, ptr %82, i32 0, i32 0
  %84 = load ptr, ptr %83, align 8, !tbaa !14
  store ptr %84, ptr %9, align 8, !tbaa !5
  %85 = load ptr, ptr %5, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.EcCtx_st, ptr %85, i32 0, i32 5
  %87 = load i8, ptr %86, align 1, !tbaa !19, !range !20, !noundef !21
  %88 = trunc i8 %87 to i1
  %89 = zext i1 %88 to i32
  %90 = icmp eq i32 %89, 0
  br i1 %90, label %91, label %96

91:                                               ; preds = %81
  br label %92

92:                                               ; preds = %91
  store i32 14, ptr %17, align 4, !tbaa !9
  %93 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 326, i32 noundef %93, ptr noundef null)
  br label %290

94:                                               ; No predecessors!
  br label %95

95:                                               ; preds = %94
  br label %96

96:                                               ; preds = %95, %81
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %97, i32 0, i32 4
  %99 = load ptr, ptr %98, align 8, !tbaa !22
  store ptr %99, ptr %15, align 8, !tbaa !5
  %100 = load ptr, ptr %5, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.EcCtx_st, ptr %100, i32 0, i32 0
  %102 = load ptr, ptr %101, align 8, !tbaa !14
  %103 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %102, i32 0, i32 2
  %104 = load ptr, ptr %103, align 8, !tbaa !23
  %105 = call i64 @int_bit_len(ptr noundef %104)
  store i64 %105, ptr %16, align 8, !tbaa !24
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  %107 = call i64 @ba_get_len(ptr noundef %106)
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = call i64 @ba_get_len(ptr noundef %108)
  %110 = add i64 %107, %109
  %111 = and i64 %110, 1
  %112 = icmp eq i64 %111, 1
  br i1 %112, label %113, label %118

113:                                              ; preds = %96
  br label %114

114:                                              ; preds = %113
  store i32 3, ptr %17, align 4, !tbaa !9
  %115 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 335, i32 noundef %115, ptr noundef null)
  br label %290

116:                                              ; No predecessors!
  br label %117

117:                                              ; preds = %116
  br label %118

118:                                              ; preds = %117, %96
  br label %119

119:                                              ; preds = %118
  %120 = load ptr, ptr %7, align 8, !tbaa !5
  %121 = call ptr @wa_alloc_from_ba(ptr noundef %120)
  store ptr %121, ptr %11, align 8, !tbaa !5
  %122 = icmp eq ptr null, %121
  br i1 %122, label %123, label %125

123:                                              ; preds = %119
  store i32 2, ptr %17, align 4, !tbaa !9
  %124 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 338, i32 noundef %124)
  br label %290

125:                                              ; preds = %119
  br label %126

126:                                              ; preds = %125
  br label %127

127:                                              ; preds = %126
  br label %128

128:                                              ; preds = %127
  %129 = load ptr, ptr %8, align 8, !tbaa !5
  %130 = call ptr @wa_alloc_from_ba(ptr noundef %129)
  store ptr %130, ptr %10, align 8, !tbaa !5
  %131 = icmp eq ptr null, %130
  br i1 %131, label %132, label %134

132:                                              ; preds = %128
  store i32 2, ptr %17, align 4, !tbaa !9
  %133 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 339, i32 noundef %133)
  br label %290

134:                                              ; preds = %128
  br label %135

135:                                              ; preds = %134
  br label %136

136:                                              ; preds = %135
  %137 = load ptr, ptr %11, align 8, !tbaa !5
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.EcCtx_st, ptr %138, i32 0, i32 0
  %140 = load ptr, ptr %139, align 8, !tbaa !14
  %141 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %140, i32 0, i32 2
  %142 = load ptr, ptr %141, align 8, !tbaa !23
  %143 = call i32 @int_cmp(ptr noundef %137, ptr noundef %142)
  %144 = icmp sge i32 %143, 0
  br i1 %144, label %160, label %145

145:                                              ; preds = %136
  %146 = load ptr, ptr %10, align 8, !tbaa !5
  %147 = load ptr, ptr %5, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.EcCtx_st, ptr %147, i32 0, i32 0
  %149 = load ptr, ptr %148, align 8, !tbaa !14
  %150 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %149, i32 0, i32 2
  %151 = load ptr, ptr %150, align 8, !tbaa !23
  %152 = call i32 @int_cmp(ptr noundef %146, ptr noundef %151)
  %153 = icmp sge i32 %152, 0
  br i1 %153, label %160, label %154

154:                                              ; preds = %145
  %155 = load ptr, ptr %11, align 8, !tbaa !5
  %156 = call zeroext i1 @int_is_zero(ptr noundef %155)
  br i1 %156, label %160, label %157

157:                                              ; preds = %154
  %158 = load ptr, ptr %10, align 8, !tbaa !5
  %159 = call zeroext i1 @int_is_zero(ptr noundef %158)
  br i1 %159, label %160, label %165

160:                                              ; preds = %157, %154, %145, %136
  br label %161

161:                                              ; preds = %160
  store i32 3, ptr %17, align 4, !tbaa !9
  %162 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 344, i32 noundef %162, ptr noundef null)
  br label %290

163:                                              ; No predecessors!
  br label %164

164:                                              ; preds = %163
  br label %165

165:                                              ; preds = %164, %157
  br label %166

166:                                              ; preds = %165
  %167 = load ptr, ptr %6, align 8, !tbaa !5
  %168 = call ptr @wa_alloc_from_ba(ptr noundef %167)
  store ptr %168, ptr %13, align 8, !tbaa !5
  %169 = icmp eq ptr null, %168
  br i1 %169, label %170, label %172

170:                                              ; preds = %166
  store i32 2, ptr %17, align 4, !tbaa !9
  %171 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 347, i32 noundef %171)
  br label %290

172:                                              ; preds = %166
  br label %173

173:                                              ; preds = %172
  br label %174

174:                                              ; preds = %173
  %175 = load ptr, ptr %13, align 8, !tbaa !5
  %176 = load ptr, ptr %9, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %176, i32 0, i32 6
  %178 = load i64, ptr %177, align 8, !tbaa !25
  call void @int_truncate(ptr noundef %175, i64 noundef %178)
  %179 = load ptr, ptr %13, align 8, !tbaa !5
  %180 = load ptr, ptr %15, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.EC2m_st, ptr %180, i32 0, i32 3
  %182 = load i64, ptr %181, align 8, !tbaa !26
  call void @wa_change_len(ptr noundef %179, i64 noundef %182)
  %183 = load ptr, ptr %9, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %183, i32 0, i32 5
  %185 = load i8, ptr %184, align 8, !tbaa !28, !range !20, !noundef !21
  %186 = trunc i8 %185 to i1
  br i1 %186, label %187, label %199

187:                                              ; preds = %174
  br label %188

188:                                              ; preds = %187
  %189 = load ptr, ptr %9, align 8, !tbaa !5
  %190 = load ptr, ptr %13, align 8, !tbaa !5
  %191 = call i32 @onb_to_pb(ptr noundef %189, ptr noundef %190)
  store i32 %191, ptr %17, align 4, !tbaa !9
  %192 = load i32, ptr %17, align 4, !tbaa !9
  %193 = icmp ne i32 %192, 0
  br i1 %193, label %194, label %196

194:                                              ; preds = %188
  %195 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 352, i32 noundef %195)
  br label %290

196:                                              ; preds = %188
  br label %197

197:                                              ; preds = %196
  br label %198

198:                                              ; preds = %197
  br label %199

199:                                              ; preds = %198, %174
  %200 = load ptr, ptr %13, align 8, !tbaa !5
  %201 = call zeroext i1 @int_is_zero(ptr noundef %200)
  br i1 %201, label %202, label %207

202:                                              ; preds = %199
  %203 = load ptr, ptr %13, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.WordArray_st, ptr %203, i32 0, i32 0
  %205 = load ptr, ptr %204, align 8, !tbaa !29
  %206 = getelementptr inbounds i64, ptr %205, i64 0
  store i64 1, ptr %206, align 8, !tbaa !24
  br label %207

207:                                              ; preds = %202, %199
  br label %208

208:                                              ; preds = %207
  %209 = load ptr, ptr %15, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.EC2m_st, ptr %209, i32 0, i32 3
  %211 = load i64, ptr %210, align 8, !tbaa !26
  %212 = call ptr @ec_point_alloc(i64 noundef %211)
  store ptr %212, ptr %14, align 8, !tbaa !5
  %213 = icmp eq ptr null, %212
  br i1 %213, label %214, label %216

214:                                              ; preds = %208
  store i32 2, ptr %17, align 4, !tbaa !9
  %215 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 359, i32 noundef %215)
  br label %290

216:                                              ; preds = %208
  br label %217

217:                                              ; preds = %216
  br label %218

218:                                              ; preds = %217
  br label %219

219:                                              ; preds = %218
  %220 = load ptr, ptr %15, align 8, !tbaa !5
  %221 = load ptr, ptr %5, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.EcCtx_st, ptr %221, i32 0, i32 0
  %223 = load ptr, ptr %222, align 8, !tbaa !14
  %224 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %223, i32 0, i32 10
  %225 = load ptr, ptr %224, align 8, !tbaa !31
  %226 = load ptr, ptr %10, align 8, !tbaa !5
  %227 = load ptr, ptr %5, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.EcCtx_st, ptr %227, i32 0, i32 3
  %229 = load ptr, ptr %228, align 8, !tbaa !32
  %230 = load ptr, ptr %11, align 8, !tbaa !5
  %231 = load ptr, ptr %14, align 8, !tbaa !5
  %232 = call i32 @ec2m_dual_mul_opt(ptr noundef %220, ptr noundef %225, ptr noundef %226, ptr noundef %229, ptr noundef %230, ptr noundef %231)
  store i32 %232, ptr %17, align 4, !tbaa !9
  %233 = load i32, ptr %17, align 4, !tbaa !9
  %234 = icmp ne i32 %233, 0
  br i1 %234, label %235, label %237

235:                                              ; preds = %219
  %236 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 361, i32 noundef %236)
  br label %290

237:                                              ; preds = %219
  br label %238

238:                                              ; preds = %237
  br label %239

239:                                              ; preds = %238
  br label %240

240:                                              ; preds = %239
  %241 = load ptr, ptr %15, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.EC2m_st, ptr %241, i32 0, i32 3
  %243 = load i64, ptr %242, align 8, !tbaa !26
  %244 = call ptr @wa_alloc(i64 noundef %243)
  store ptr %244, ptr %12, align 8, !tbaa !5
  %245 = icmp eq ptr null, %244
  br i1 %245, label %246, label %248

246:                                              ; preds = %240
  store i32 2, ptr %17, align 4, !tbaa !9
  %247 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 363, i32 noundef %247)
  br label %290

248:                                              ; preds = %240
  br label %249

249:                                              ; preds = %248
  br label %250

250:                                              ; preds = %249
  %251 = load ptr, ptr %15, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.EC2m_st, ptr %251, i32 0, i32 0
  %253 = load ptr, ptr %252, align 8, !tbaa !33
  %254 = load ptr, ptr %14, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.ECPoint_st, ptr %254, i32 0, i32 0
  %256 = load ptr, ptr %255, align 8, !tbaa !34
  %257 = load ptr, ptr %13, align 8, !tbaa !5
  %258 = load ptr, ptr %12, align 8, !tbaa !5
  call void @gf2m_mod_mul(ptr noundef %253, ptr noundef %256, ptr noundef %257, ptr noundef %258)
  %259 = load ptr, ptr %9, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.EcParamsCtx_st, ptr %259, i32 0, i32 5
  %261 = load i8, ptr %260, align 8, !tbaa !28, !range !20, !noundef !21
  %262 = trunc i8 %261 to i1
  br i1 %262, label %263, label %277

263:                                              ; preds = %250
  br label %264

264:                                              ; preds = %263
  %265 = load ptr, ptr %5, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.EcCtx_st, ptr %265, i32 0, i32 0
  %267 = load ptr, ptr %266, align 8, !tbaa !14
  %268 = load ptr, ptr %12, align 8, !tbaa !5
  %269 = call i32 @pb_to_onb(ptr noundef %267, ptr noundef %268)
  store i32 %269, ptr %17, align 4, !tbaa !9
  %270 = load i32, ptr %17, align 4, !tbaa !9
  %271 = icmp ne i32 %270, 0
  br i1 %271, label %272, label %274

272:                                              ; preds = %264
  %273 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_add(ptr noundef @.str, i64 noundef 367, i32 noundef %273)
  br label %290

274:                                              ; preds = %264
  br label %275

275:                                              ; preds = %274
  br label %276

276:                                              ; preds = %275
  br label %277

277:                                              ; preds = %276, %250
  %278 = load ptr, ptr %12, align 8, !tbaa !5
  %279 = load i64, ptr %16, align 8, !tbaa !24
  %280 = sub i64 %279, 1
  call void @int_truncate(ptr noundef %278, i64 noundef %280)
  %281 = load ptr, ptr %12, align 8, !tbaa !5
  %282 = load ptr, ptr %11, align 8, !tbaa !5
  %283 = call zeroext i1 @int_equals(ptr noundef %281, ptr noundef %282)
  br i1 %283, label %289, label %284

284:                                              ; preds = %277
  br label %285

285:                                              ; preds = %284
  store i32 3, ptr %17, align 4, !tbaa !9
  %286 = load i32, ptr %17, align 4, !tbaa !9
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 373, i32 noundef %286, ptr noundef null)
  br label %290

287:                                              ; No predecessors!
  br label %288

288:                                              ; preds = %287
  br label %289

289:                                              ; preds = %288, %277
  br label %290

290:                                              ; preds = %289, %285, %272, %246, %235, %214, %194, %170, %161, %132, %123, %114, %92, %77, %65, %57, %49, %29, %21
  %291 = load ptr, ptr %11, align 8, !tbaa !5
  call void @wa_free(ptr noundef %291)
  %292 = load ptr, ptr %10, align 8, !tbaa !5
  call void @wa_free(ptr noundef %292)
  %293 = load ptr, ptr %12, align 8, !tbaa !5
  call void @wa_free(ptr noundef %293)
  %294 = load ptr, ptr %13, align 8, !tbaa !5
  call void @wa_free(ptr noundef %294)
  %295 = load ptr, ptr %14, align 8, !tbaa !5
  call void @ec_point_free(ptr noundef %295)
  %296 = load i32, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  ret i32 %296
}

declare i64 @ba_get_len(ptr noundef) #1

declare void @int_truncate(ptr noundef, i64 noundef) #1

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

declare zeroext i1 @int_equals(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 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 #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, !13, i64 8}
!12 = !{!"ByteArray_st", !6, i64 0, !13, i64 8}
!13 = !{!"long", !7, i64 0}
!14 = !{!15, !6, i64 0}
!15 = !{!"EcCtx_st", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !16, i64 32, !16, i64 33}
!16 = !{!"_Bool", !7, i64 0}
!17 = !{!18, !10, i64 0}
!18 = !{!"EcParamsCtx_st", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !16, i64 40, !13, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !6, i64 80}
!19 = !{!15, !16, i64 33}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!18, !6, i64 32}
!23 = !{!18, !6, i64 16}
!24 = !{!13, !13, i64 0}
!25 = !{!18, !13, i64 48}
!26 = !{!27, !13, i64 24}
!27 = !{!"EC2m_st", !6, i64 0, !13, i64 8, !6, i64 16, !13, i64 24}
!28 = !{!18, !16, i64 40}
!29 = !{!30, !6, i64 0}
!30 = !{!"WordArray_st", !6, i64 0, !13, i64 8}
!31 = !{!18, !6, i64 80}
!32 = !{!15, !6, i64 24}
!33 = !{!27, !6, i64 0}
!34 = !{!35, !6, i64 0}
!35 = !{!"ECPoint_st", !6, i64 0, !6, i64 8, !6, i64 16}


; 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 [18 x i8], align 1

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

declare i64 @int_bit_len(ptr noundef) local_unnamed_addr #0

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

declare ptr @wa_alloc_from_ba(ptr noundef) local_unnamed_addr #0

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

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

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

declare ptr @ec_point_alloc(i64 noundef) local_unnamed_addr #0

declare i32 @ec2m_dual_mul_opt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

declare void @ec_point_free(ptr noundef) local_unnamed_addr #0

declare void @gf2m_mod_mul(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @wa_alloc(i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local i32 @dstu4145_verify(ptr noundef readonly %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #1 {
  %.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 316, i32 noundef 2, ptr noundef null) #2
  br label %112

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

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

8:                                                ; preds = %6
  %9 = getelementptr inbounds i8, ptr %1, i64 8
  %10 = load i64, ptr %9, align 8, !tbaa !5
  switch i64 %10, label %11 [
    i64 32, label %12
    i64 48, label %12
    i64 64, label %12
  ]

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

12:                                               ; preds = %8, %8, %8
  %.not103 = icmp eq ptr %2, null
  br i1 %.not103, label %13, label %14

13:                                               ; preds = %12
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 319, i32 noundef 2, ptr noundef null) #2
  br label %112

14:                                               ; preds = %12
  %.not104 = icmp eq ptr %3, null
  br i1 %.not104, label %15, label %16

15:                                               ; preds = %14
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 320, i32 noundef 2, ptr noundef null) #2
  br label %112

16:                                               ; preds = %14
  %17 = load ptr, ptr %0, align 8, !tbaa !11
  %18 = load i32, ptr %17, align 8, !tbaa !14
  %19 = icmp eq i32 %18, 1
  br i1 %19, label %21, label %20

20:                                               ; preds = %16
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 321, i32 noundef 2, ptr noundef null) #2
  br label %112

21:                                               ; preds = %16
  %22 = getelementptr inbounds i8, ptr %0, i64 33
  %23 = load i8, ptr %22, align 1, !tbaa !17, !range !18, !noundef !19
  %24 = icmp eq i8 %23, 0
  br i1 %24, label %25, label %26

25:                                               ; preds = %21
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 326, i32 noundef 14, ptr noundef null) #2
  br label %112

26:                                               ; preds = %21
  %27 = getelementptr inbounds i8, ptr %17, i64 32
  %28 = load ptr, ptr %27, align 8, !tbaa !20
  %29 = getelementptr inbounds i8, ptr %17, i64 16
  %30 = load ptr, ptr %29, align 8, !tbaa !21
  %31 = tail call i64 @int_bit_len(ptr noundef %30) #2
  %32 = tail call i64 @ba_get_len(ptr noundef nonnull %3) #2
  %33 = tail call i64 @ba_get_len(ptr noundef nonnull %2) #2
  %34 = add i64 %33, %32
  %35 = and i64 %34, 1
  %.not105 = icmp eq i64 %35, 0
  br i1 %.not105, label %37, label %36

36:                                               ; preds = %26
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 335, i32 noundef 3, ptr noundef null) #2
  br label %112

37:                                               ; preds = %26
  %38 = tail call ptr @wa_alloc_from_ba(ptr noundef nonnull %2) #2
  %39 = icmp eq ptr %38, null
  br i1 %39, label %40, label %41

40:                                               ; preds = %37
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 338, i32 noundef 2) #2
  br label %112

41:                                               ; preds = %37
  %42 = tail call ptr @wa_alloc_from_ba(ptr noundef nonnull %3) #2
  %43 = icmp eq ptr %42, null
  br i1 %43, label %44, label %45

44:                                               ; preds = %41
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 339, i32 noundef 2) #2
  br label %112

45:                                               ; preds = %41
  %46 = load ptr, ptr %0, align 8, !tbaa !11
  %47 = getelementptr inbounds i8, ptr %46, i64 16
  %48 = load ptr, ptr %47, align 8, !tbaa !21
  %49 = tail call i32 @int_cmp(ptr noundef nonnull %38, ptr noundef %48) #2
  %50 = icmp sgt i32 %49, -1
  br i1 %50, label %61, label %51

51:                                               ; preds = %45
  %52 = load ptr, ptr %0, align 8, !tbaa !11
  %53 = getelementptr inbounds i8, ptr %52, i64 16
  %54 = load ptr, ptr %53, align 8, !tbaa !21
  %55 = tail call i32 @int_cmp(ptr noundef nonnull %42, ptr noundef %54) #2
  %56 = icmp sgt i32 %55, -1
  br i1 %56, label %61, label %57

57:                                               ; preds = %51
  %58 = tail call zeroext i1 @int_is_zero(ptr noundef nonnull %38) #2
  br i1 %58, label %61, label %59

59:                                               ; preds = %57
  %60 = tail call zeroext i1 @int_is_zero(ptr noundef nonnull %42) #2
  br i1 %60, label %61, label %62

61:                                               ; preds = %45, %51, %57, %59
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 344, i32 noundef 3, ptr noundef null) #2
  br label %112

62:                                               ; preds = %59
  %63 = tail call ptr @wa_alloc_from_ba(ptr noundef nonnull %1) #2
  %64 = icmp eq ptr %63, null
  br i1 %64, label %65, label %66

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

66:                                               ; preds = %62
  %67 = getelementptr inbounds i8, ptr %17, i64 48
  %68 = load i64, ptr %67, align 8, !tbaa !22
  tail call void @int_truncate(ptr noundef nonnull %63, i64 noundef %68) #2
  %69 = getelementptr inbounds i8, ptr %28, i64 24
  %70 = load i64, ptr %69, align 8, !tbaa !23
  tail call void @wa_change_len(ptr noundef nonnull %63, i64 noundef %70) #2
  %71 = getelementptr inbounds i8, ptr %17, i64 40
  %72 = load i8, ptr %71, align 8, !tbaa !25, !range !18, !noundef !19
  %73 = trunc nuw i8 %72 to i1
  br i1 %73, label %74, label %77

74:                                               ; preds = %66
  %75 = tail call i32 @onb_to_pb(ptr noundef nonnull %17, ptr noundef nonnull %63) #2
  %.not106 = icmp eq i32 %75, 0
  br i1 %.not106, label %77, label %76

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

77:                                               ; preds = %74, %66
  %78 = tail call zeroext i1 @int_is_zero(ptr noundef nonnull %63) #2
  br i1 %78, label %79, label %81

79:                                               ; preds = %77
  %80 = load ptr, ptr %63, align 8, !tbaa !26
  store i64 1, ptr %80, align 8, !tbaa !28
  br label %81

81:                                               ; preds = %77, %79
  %82 = load i64, ptr %69, align 8, !tbaa !23
  %83 = tail call ptr @ec_point_alloc(i64 noundef %82) #2
  %84 = icmp eq ptr %83, null
  br i1 %84, label %85, label %86

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

86:                                               ; preds = %81
  %87 = load ptr, ptr %0, align 8, !tbaa !11
  %88 = getelementptr inbounds i8, ptr %87, i64 80
  %89 = load ptr, ptr %88, align 8, !tbaa !29
  %90 = getelementptr inbounds i8, ptr %0, i64 24
  %91 = load ptr, ptr %90, align 8, !tbaa !30
  %92 = tail call i32 @ec2m_dual_mul_opt(ptr noundef nonnull %28, ptr noundef %89, ptr noundef nonnull %42, ptr noundef %91, ptr noundef nonnull %38, ptr noundef nonnull %83) #2
  %.not107 = icmp eq i32 %92, 0
  br i1 %.not107, label %94, label %93

93:                                               ; preds = %86
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 361, i32 noundef %92) #2
  br label %112

94:                                               ; preds = %86
  %95 = load i64, ptr %69, align 8, !tbaa !23
  %96 = tail call ptr @wa_alloc(i64 noundef %95) #2
  %97 = icmp eq ptr %96, null
  br i1 %97, label %98, label %99

98:                                               ; preds = %94
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 363, i32 noundef 2) #2
  br label %112

99:                                               ; preds = %94
  %100 = load ptr, ptr %28, align 8, !tbaa !31
  %101 = load ptr, ptr %83, align 8, !tbaa !32
  tail call void @gf2m_mod_mul(ptr noundef %100, ptr noundef %101, ptr noundef nonnull %63, ptr noundef nonnull %96) #2
  %102 = load i8, ptr %71, align 8, !tbaa !25, !range !18, !noundef !19
  %103 = trunc nuw i8 %102 to i1
  br i1 %103, label %104, label %108

104:                                              ; preds = %99
  %105 = load ptr, ptr %0, align 8, !tbaa !11
  %106 = tail call i32 @pb_to_onb(ptr noundef %105, ptr noundef nonnull %96) #2
  %.not108 = icmp eq i32 %106, 0
  br i1 %.not108, label %108, label %107

107:                                              ; preds = %104
  tail call void @stacktrace_add(ptr noundef nonnull @.str, i64 noundef 367, i32 noundef %106) #2
  br label %112

108:                                              ; preds = %104, %99
  %109 = add i64 %31, -1
  tail call void @int_truncate(ptr noundef nonnull %96, i64 noundef %109) #2
  %110 = tail call zeroext i1 @int_equals(ptr noundef nonnull %96, ptr noundef nonnull %38) #2
  br i1 %110, label %112, label %111

111:                                              ; preds = %108
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 373, i32 noundef 3, ptr noundef null) #2
  br label %112

112:                                              ; preds = %108, %111, %107, %98, %93, %85, %76, %65, %61, %44, %40, %36, %25, %20, %15, %13, %11, %7, %5
  %.081 = phi ptr [ null, %25 ], [ null, %36 ], [ null, %40 ], [ null, %44 ], [ null, %61 ], [ null, %65 ], [ null, %76 ], [ null, %85 ], [ null, %93 ], [ null, %98 ], [ %96, %107 ], [ %96, %108 ], [ %96, %111 ], [ null, %20 ], [ null, %15 ], [ null, %13 ], [ null, %11 ], [ null, %7 ], [ null, %5 ]
  %.080 = phi ptr [ null, %25 ], [ null, %36 ], [ null, %40 ], [ null, %44 ], [ null, %61 ], [ null, %65 ], [ %63, %76 ], [ %63, %85 ], [ %63, %93 ], [ %63, %98 ], [ %63, %107 ], [ %63, %108 ], [ %63, %111 ], [ null, %20 ], [ null, %15 ], [ null, %13 ], [ null, %11 ], [ null, %7 ], [ null, %5 ]
  %.079 = phi ptr [ null, %25 ], [ null, %36 ], [ null, %40 ], [ null, %44 ], [ null, %61 ], [ null, %65 ], [ null, %76 ], [ null, %85 ], [ %83, %93 ], [ %83, %98 ], [ %83, %107 ], [ %83, %108 ], [ %83, %111 ], [ null, %20 ], [ null, %15 ], [ null, %13 ], [ null, %11 ], [ null, %7 ], [ null, %5 ]
  %.078 = phi ptr [ null, %25 ], [ null, %36 ], [ null, %40 ], [ %38, %44 ], [ %38, %61 ], [ %38, %65 ], [ %38, %76 ], [ %38, %85 ], [ %38, %93 ], [ %38, %98 ], [ %38, %107 ], [ %38, %108 ], [ %38, %111 ], [ null, %20 ], [ null, %15 ], [ null, %13 ], [ null, %11 ], [ null, %7 ], [ null, %5 ]
  %.077 = phi ptr [ null, %25 ], [ null, %36 ], [ null, %40 ], [ null, %44 ], [ %42, %61 ], [ %42, %65 ], [ %42, %76 ], [ %42, %85 ], [ %42, %93 ], [ %42, %98 ], [ %42, %107 ], [ %42, %108 ], [ %42, %111 ], [ null, %20 ], [ null, %15 ], [ null, %13 ], [ null, %11 ], [ null, %7 ], [ null, %5 ]
  %.1 = phi i32 [ 14, %25 ], [ 3, %36 ], [ 2, %40 ], [ 2, %44 ], [ 3, %61 ], [ 2, %65 ], [ %75, %76 ], [ 2, %85 ], [ %92, %93 ], [ 2, %98 ], [ %106, %107 ], [ 0, %108 ], [ 3, %111 ], [ 2, %20 ], [ 2, %15 ], [ 2, %13 ], [ 2, %11 ], [ 2, %7 ], [ 2, %5 ]
  tail call void @wa_free(ptr noundef %.078) #2
  tail call void @wa_free(ptr noundef %.077) #2
  tail call void @wa_free(ptr noundef %.081) #2
  tail call void @wa_free(ptr noundef %.080) #2
  tail call void @ec_point_free(ptr noundef %.079) #2
  ret i32 %.1
}

declare i64 @ba_get_len(ptr noundef) local_unnamed_addr #0

declare void @int_truncate(ptr noundef, i64 noundef) local_unnamed_addr #0

declare i32 @onb_to_pb(ptr noundef, ptr noundef) local_unnamed_addr #0

declare zeroext i1 @int_equals(ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @wa_free(ptr noundef) local_unnamed_addr #0

attributes #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 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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, !10, i64 8}
!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 = !{!12, !7, i64 0}
!12 = !{!"EcCtx_st", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !13, i64 32, !13, i64 33}
!13 = !{!"_Bool", !8, i64 0}
!14 = !{!15, !16, i64 0}
!15 = !{!"EcParamsCtx_st", !16, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !13, i64 40, !10, i64 48, !7, i64 56, !7, i64 64, !16, i64 72, !7, i64 80}
!16 = !{!"int", !8, i64 0}
!17 = !{!12, !13, i64 33}
!18 = !{i8 0, i8 2}
!19 = !{}
!20 = !{!15, !7, i64 32}
!21 = !{!15, !7, i64 16}
!22 = !{!15, !10, i64 48}
!23 = !{!24, !10, i64 24}
!24 = !{!"EC2m_st", !7, i64 0, !10, i64 8, !7, i64 16, !10, i64 24}
!25 = !{!15, !13, i64 40}
!26 = !{!27, !7, i64 0}
!27 = !{!"WordArray_st", !7, i64 0, !10, i64 8}
!28 = !{!10, !10, i64 0}
!29 = !{!15, !7, i64 80}
!30 = !{!12, !7, i64 24}
!31 = !{!24, !7, i64 0}
!32 = !{!33, !7, i64 0}
!33 = !{!"ECPoint_st", !7, i64 0, !7, i64 8, !7, i64 16}


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