; LLVM IR from tleonhardt/practical_cryptography_engineering :: mbedtls (pkwrite)

; 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.mbedtls_rsa_context = type { i32, i64, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, i32, i32 }
%struct.mbedtls_mpi = type { i32, i64, ptr }
%struct.mbedtls_ecp_keypair = type { %struct.mbedtls_ecp_group, %struct.mbedtls_mpi, %struct.mbedtls_ecp_point }
%struct.mbedtls_ecp_group = type { i32, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_ecp_point, %struct.mbedtls_mpi, i64, i64, i32, ptr, ptr, ptr, ptr, ptr, i64 }
%struct.mbedtls_ecp_point = type { %struct.mbedtls_mpi, %struct.mbedtls_mpi, %struct.mbedtls_mpi }

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

declare i32 @mbedtls_pk_get_type(ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @mbedtls_pk_rsa(ptr, ptr) #2

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @mbedtls_pk_ec(ptr, ptr) #2

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

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

declare i32 @mbedtls_asn1_write_tag(ptr noundef, ptr noundef, i8 noundef zeroext) #1

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

; Function Attrs: nounwind uwtable
define dso_local i32 @mbedtls_pk_write_key_der(ptr noundef %0, ptr noundef %1, i64 noundef %2) #3 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i64 %2, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  %16 = load ptr, ptr %6, align 8, !tbaa !5
  %17 = load i64, ptr %7, align 8, !tbaa !9
  %18 = getelementptr inbounds i8, ptr %16, i64 %17
  store ptr %18, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  store i64 0, ptr %10, align 8, !tbaa !9
  %19 = load ptr, ptr %5, align 8, !tbaa !5
  %20 = call i32 @mbedtls_pk_get_type(ptr noundef %19)
  %21 = icmp eq i32 %20, 1
  br i1 %21, label %22, label %203

22:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = getelementptr inbounds { ptr, ptr }, ptr %23, i32 0, i32 0
  %25 = load ptr, ptr %24, align 8
  %26 = getelementptr inbounds { ptr, ptr }, ptr %23, i32 0, i32 1
  %27 = load ptr, ptr %26, align 8
  %28 = call ptr @mbedtls_pk_rsa(ptr %25, ptr %27)
  store ptr %28, ptr %11, align 8, !tbaa !5
  br label %29

29:                                               ; preds = %22
  %30 = load ptr, ptr %6, align 8, !tbaa !5
  %31 = load ptr, ptr %11, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.mbedtls_rsa_context, ptr %31, i32 0, i32 9
  %33 = call i32 @mbedtls_asn1_write_mpi(ptr noundef %9, ptr noundef %30, ptr noundef %32)
  store i32 %33, ptr %8, align 4, !tbaa !11
  %34 = icmp slt i32 %33, 0
  br i1 %34, label %35, label %37

35:                                               ; preds = %29
  %36 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %36, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

37:                                               ; preds = %29
  %38 = load i32, ptr %8, align 4, !tbaa !11
  %39 = sext i32 %38 to i64
  %40 = load i64, ptr %10, align 8, !tbaa !9
  %41 = add i64 %40, %39
  store i64 %41, ptr %10, align 8, !tbaa !9
  br label %42

42:                                               ; preds = %37
  br label %43

43:                                               ; preds = %42
  br label %44

44:                                               ; preds = %43
  br label %45

45:                                               ; preds = %44
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = load ptr, ptr %11, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.mbedtls_rsa_context, ptr %47, i32 0, i32 8
  %49 = call i32 @mbedtls_asn1_write_mpi(ptr noundef %9, ptr noundef %46, ptr noundef %48)
  store i32 %49, ptr %8, align 4, !tbaa !11
  %50 = icmp slt i32 %49, 0
  br i1 %50, label %51, label %53

51:                                               ; preds = %45
  %52 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %52, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

53:                                               ; preds = %45
  %54 = load i32, ptr %8, align 4, !tbaa !11
  %55 = sext i32 %54 to i64
  %56 = load i64, ptr %10, align 8, !tbaa !9
  %57 = add i64 %56, %55
  store i64 %57, ptr %10, align 8, !tbaa !9
  br label %58

58:                                               ; preds = %53
  br label %59

59:                                               ; preds = %58
  br label %60

60:                                               ; preds = %59
  br label %61

61:                                               ; preds = %60
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = load ptr, ptr %11, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.mbedtls_rsa_context, ptr %63, i32 0, i32 7
  %65 = call i32 @mbedtls_asn1_write_mpi(ptr noundef %9, ptr noundef %62, ptr noundef %64)
  store i32 %65, ptr %8, align 4, !tbaa !11
  %66 = icmp slt i32 %65, 0
  br i1 %66, label %67, label %69

67:                                               ; preds = %61
  %68 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %68, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

69:                                               ; preds = %61
  %70 = load i32, ptr %8, align 4, !tbaa !11
  %71 = sext i32 %70 to i64
  %72 = load i64, ptr %10, align 8, !tbaa !9
  %73 = add i64 %72, %71
  store i64 %73, ptr %10, align 8, !tbaa !9
  br label %74

74:                                               ; preds = %69
  br label %75

75:                                               ; preds = %74
  br label %76

76:                                               ; preds = %75
  br label %77

77:                                               ; preds = %76
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = load ptr, ptr %11, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.mbedtls_rsa_context, ptr %79, i32 0, i32 6
  %81 = call i32 @mbedtls_asn1_write_mpi(ptr noundef %9, ptr noundef %78, ptr noundef %80)
  store i32 %81, ptr %8, align 4, !tbaa !11
  %82 = icmp slt i32 %81, 0
  br i1 %82, label %83, label %85

83:                                               ; preds = %77
  %84 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %84, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

85:                                               ; preds = %77
  %86 = load i32, ptr %8, align 4, !tbaa !11
  %87 = sext i32 %86 to i64
  %88 = load i64, ptr %10, align 8, !tbaa !9
  %89 = add i64 %88, %87
  store i64 %89, ptr %10, align 8, !tbaa !9
  br label %90

90:                                               ; preds = %85
  br label %91

91:                                               ; preds = %90
  br label %92

92:                                               ; preds = %91
  br label %93

93:                                               ; preds = %92
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = load ptr, ptr %11, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.mbedtls_rsa_context, ptr %95, i32 0, i32 5
  %97 = call i32 @mbedtls_asn1_write_mpi(ptr noundef %9, ptr noundef %94, ptr noundef %96)
  store i32 %97, ptr %8, align 4, !tbaa !11
  %98 = icmp slt i32 %97, 0
  br i1 %98, label %99, label %101

99:                                               ; preds = %93
  %100 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %100, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

101:                                              ; preds = %93
  %102 = load i32, ptr %8, align 4, !tbaa !11
  %103 = sext i32 %102 to i64
  %104 = load i64, ptr %10, align 8, !tbaa !9
  %105 = add i64 %104, %103
  store i64 %105, ptr %10, align 8, !tbaa !9
  br label %106

106:                                              ; preds = %101
  br label %107

107:                                              ; preds = %106
  br label %108

108:                                              ; preds = %107
  br label %109

109:                                              ; preds = %108
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  %111 = load ptr, ptr %11, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.mbedtls_rsa_context, ptr %111, i32 0, i32 4
  %113 = call i32 @mbedtls_asn1_write_mpi(ptr noundef %9, ptr noundef %110, ptr noundef %112)
  store i32 %113, ptr %8, align 4, !tbaa !11
  %114 = icmp slt i32 %113, 0
  br i1 %114, label %115, label %117

115:                                              ; preds = %109
  %116 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %116, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

117:                                              ; preds = %109
  %118 = load i32, ptr %8, align 4, !tbaa !11
  %119 = sext i32 %118 to i64
  %120 = load i64, ptr %10, align 8, !tbaa !9
  %121 = add i64 %120, %119
  store i64 %121, ptr %10, align 8, !tbaa !9
  br label %122

122:                                              ; preds = %117
  br label %123

123:                                              ; preds = %122
  br label %124

124:                                              ; preds = %123
  br label %125

125:                                              ; preds = %124
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = load ptr, ptr %11, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.mbedtls_rsa_context, ptr %127, i32 0, i32 3
  %129 = call i32 @mbedtls_asn1_write_mpi(ptr noundef %9, ptr noundef %126, ptr noundef %128)
  store i32 %129, ptr %8, align 4, !tbaa !11
  %130 = icmp slt i32 %129, 0
  br i1 %130, label %131, label %133

131:                                              ; preds = %125
  %132 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %132, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

133:                                              ; preds = %125
  %134 = load i32, ptr %8, align 4, !tbaa !11
  %135 = sext i32 %134 to i64
  %136 = load i64, ptr %10, align 8, !tbaa !9
  %137 = add i64 %136, %135
  store i64 %137, ptr %10, align 8, !tbaa !9
  br label %138

138:                                              ; preds = %133
  br label %139

139:                                              ; preds = %138
  br label %140

140:                                              ; preds = %139
  br label %141

141:                                              ; preds = %140
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = load ptr, ptr %11, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.mbedtls_rsa_context, ptr %143, i32 0, i32 2
  %145 = call i32 @mbedtls_asn1_write_mpi(ptr noundef %9, ptr noundef %142, ptr noundef %144)
  store i32 %145, ptr %8, align 4, !tbaa !11
  %146 = icmp slt i32 %145, 0
  br i1 %146, label %147, label %149

147:                                              ; preds = %141
  %148 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %148, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

149:                                              ; preds = %141
  %150 = load i32, ptr %8, align 4, !tbaa !11
  %151 = sext i32 %150 to i64
  %152 = load i64, ptr %10, align 8, !tbaa !9
  %153 = add i64 %152, %151
  store i64 %153, ptr %10, align 8, !tbaa !9
  br label %154

154:                                              ; preds = %149
  br label %155

155:                                              ; preds = %154
  br label %156

156:                                              ; preds = %155
  br label %157

157:                                              ; preds = %156
  %158 = load ptr, ptr %6, align 8, !tbaa !5
  %159 = call i32 @mbedtls_asn1_write_int(ptr noundef %9, ptr noundef %158, i32 noundef 0)
  store i32 %159, ptr %8, align 4, !tbaa !11
  %160 = icmp slt i32 %159, 0
  br i1 %160, label %161, label %163

161:                                              ; preds = %157
  %162 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %162, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

163:                                              ; preds = %157
  %164 = load i32, ptr %8, align 4, !tbaa !11
  %165 = sext i32 %164 to i64
  %166 = load i64, ptr %10, align 8, !tbaa !9
  %167 = add i64 %166, %165
  store i64 %167, ptr %10, align 8, !tbaa !9
  br label %168

168:                                              ; preds = %163
  br label %169

169:                                              ; preds = %168
  br label %170

170:                                              ; preds = %169
  br label %171

171:                                              ; preds = %170
  %172 = load ptr, ptr %6, align 8, !tbaa !5
  %173 = load i64, ptr %10, align 8, !tbaa !9
  %174 = call i32 @mbedtls_asn1_write_len(ptr noundef %9, ptr noundef %172, i64 noundef %173)
  store i32 %174, ptr %8, align 4, !tbaa !11
  %175 = icmp slt i32 %174, 0
  br i1 %175, label %176, label %178

176:                                              ; preds = %171
  %177 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %177, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

178:                                              ; preds = %171
  %179 = load i32, ptr %8, align 4, !tbaa !11
  %180 = sext i32 %179 to i64
  %181 = load i64, ptr %10, align 8, !tbaa !9
  %182 = add i64 %181, %180
  store i64 %182, ptr %10, align 8, !tbaa !9
  br label %183

183:                                              ; preds = %178
  br label %184

184:                                              ; preds = %183
  br label %185

185:                                              ; preds = %184
  br label %186

186:                                              ; preds = %185
  %187 = load ptr, ptr %6, align 8, !tbaa !5
  %188 = call i32 @mbedtls_asn1_write_tag(ptr noundef %9, ptr noundef %187, i8 noundef zeroext 48)
  store i32 %188, ptr %8, align 4, !tbaa !11
  %189 = icmp slt i32 %188, 0
  br i1 %189, label %190, label %192

190:                                              ; preds = %186
  %191 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %191, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %200

192:                                              ; preds = %186
  %193 = load i32, ptr %8, align 4, !tbaa !11
  %194 = sext i32 %193 to i64
  %195 = load i64, ptr %10, align 8, !tbaa !9
  %196 = add i64 %195, %194
  store i64 %196, ptr %10, align 8, !tbaa !9
  br label %197

197:                                              ; preds = %192
  br label %198

198:                                              ; preds = %197
  br label %199

199:                                              ; preds = %198
  store i32 0, ptr %12, align 4
  br label %200

200:                                              ; preds = %199, %190, %176, %161, %147, %131, %115, %99, %83, %67, %51, %35
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  %201 = load i32, ptr %12, align 4
  switch i32 %201, label %417 [
    i32 0, label %202
  ]

202:                                              ; preds = %200
  br label %414

203:                                              ; preds = %3
  %204 = load ptr, ptr %5, align 8, !tbaa !5
  %205 = call i32 @mbedtls_pk_get_type(ptr noundef %204)
  %206 = icmp eq i32 %205, 2
  br i1 %206, label %207, label %412

207:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  %209 = getelementptr inbounds { ptr, ptr }, ptr %208, i32 0, i32 0
  %210 = load ptr, ptr %209, align 8
  %211 = getelementptr inbounds { ptr, ptr }, ptr %208, i32 0, i32 1
  %212 = load ptr, ptr %211, align 8
  %213 = call ptr @mbedtls_pk_ec(ptr %210, ptr %212)
  store ptr %213, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  store i64 0, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %214

214:                                              ; preds = %207
  %215 = load ptr, ptr %6, align 8, !tbaa !5
  %216 = load ptr, ptr %13, align 8, !tbaa !5
  %217 = call i32 @pk_write_ec_pubkey(ptr noundef %9, ptr noundef %215, ptr noundef %216)
  store i32 %217, ptr %8, align 4, !tbaa !11
  %218 = icmp slt i32 %217, 0
  br i1 %218, label %219, label %221

219:                                              ; preds = %214
  %220 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %220, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

221:                                              ; preds = %214
  %222 = load i32, ptr %8, align 4, !tbaa !11
  %223 = sext i32 %222 to i64
  %224 = load i64, ptr %14, align 8, !tbaa !9
  %225 = add i64 %224, %223
  store i64 %225, ptr %14, align 8, !tbaa !9
  br label %226

226:                                              ; preds = %221
  br label %227

227:                                              ; preds = %226
  br label %228

228:                                              ; preds = %227
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = ptrtoint ptr %229 to i64
  %232 = ptrtoint ptr %230 to i64
  %233 = sub i64 %231, %232
  %234 = icmp slt i64 %233, 1
  br i1 %234, label %235, label %236

235:                                              ; preds = %228
  store i32 -108, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

236:                                              ; preds = %228
  %237 = load ptr, ptr %9, align 8, !tbaa !5
  %238 = getelementptr inbounds i8, ptr %237, i32 -1
  store ptr %238, ptr %9, align 8, !tbaa !5
  store i8 0, ptr %238, align 1, !tbaa !13
  %239 = load i64, ptr %14, align 8, !tbaa !9
  %240 = add i64 %239, 1
  store i64 %240, ptr %14, align 8, !tbaa !9
  br label %241

241:                                              ; preds = %236
  %242 = load ptr, ptr %6, align 8, !tbaa !5
  %243 = load i64, ptr %14, align 8, !tbaa !9
  %244 = call i32 @mbedtls_asn1_write_len(ptr noundef %9, ptr noundef %242, i64 noundef %243)
  store i32 %244, ptr %8, align 4, !tbaa !11
  %245 = icmp slt i32 %244, 0
  br i1 %245, label %246, label %248

246:                                              ; preds = %241
  %247 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %247, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

248:                                              ; preds = %241
  %249 = load i32, ptr %8, align 4, !tbaa !11
  %250 = sext i32 %249 to i64
  %251 = load i64, ptr %14, align 8, !tbaa !9
  %252 = add i64 %251, %250
  store i64 %252, ptr %14, align 8, !tbaa !9
  br label %253

253:                                              ; preds = %248
  br label %254

254:                                              ; preds = %253
  br label %255

255:                                              ; preds = %254
  br label %256

256:                                              ; preds = %255
  %257 = load ptr, ptr %6, align 8, !tbaa !5
  %258 = call i32 @mbedtls_asn1_write_tag(ptr noundef %9, ptr noundef %257, i8 noundef zeroext 3)
  store i32 %258, ptr %8, align 4, !tbaa !11
  %259 = icmp slt i32 %258, 0
  br i1 %259, label %260, label %262

260:                                              ; preds = %256
  %261 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %261, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

262:                                              ; preds = %256
  %263 = load i32, ptr %8, align 4, !tbaa !11
  %264 = sext i32 %263 to i64
  %265 = load i64, ptr %14, align 8, !tbaa !9
  %266 = add i64 %265, %264
  store i64 %266, ptr %14, align 8, !tbaa !9
  br label %267

267:                                              ; preds = %262
  br label %268

268:                                              ; preds = %267
  br label %269

269:                                              ; preds = %268
  br label %270

270:                                              ; preds = %269
  %271 = load ptr, ptr %6, align 8, !tbaa !5
  %272 = load i64, ptr %14, align 8, !tbaa !9
  %273 = call i32 @mbedtls_asn1_write_len(ptr noundef %9, ptr noundef %271, i64 noundef %272)
  store i32 %273, ptr %8, align 4, !tbaa !11
  %274 = icmp slt i32 %273, 0
  br i1 %274, label %275, label %277

275:                                              ; preds = %270
  %276 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %276, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

277:                                              ; preds = %270
  %278 = load i32, ptr %8, align 4, !tbaa !11
  %279 = sext i32 %278 to i64
  %280 = load i64, ptr %14, align 8, !tbaa !9
  %281 = add i64 %280, %279
  store i64 %281, ptr %14, align 8, !tbaa !9
  br label %282

282:                                              ; preds = %277
  br label %283

283:                                              ; preds = %282
  br label %284

284:                                              ; preds = %283
  br label %285

285:                                              ; preds = %284
  %286 = load ptr, ptr %6, align 8, !tbaa !5
  %287 = call i32 @mbedtls_asn1_write_tag(ptr noundef %9, ptr noundef %286, i8 noundef zeroext -95)
  store i32 %287, ptr %8, align 4, !tbaa !11
  %288 = icmp slt i32 %287, 0
  br i1 %288, label %289, label %291

289:                                              ; preds = %285
  %290 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %290, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

291:                                              ; preds = %285
  %292 = load i32, ptr %8, align 4, !tbaa !11
  %293 = sext i32 %292 to i64
  %294 = load i64, ptr %14, align 8, !tbaa !9
  %295 = add i64 %294, %293
  store i64 %295, ptr %14, align 8, !tbaa !9
  br label %296

296:                                              ; preds = %291
  br label %297

297:                                              ; preds = %296
  br label %298

298:                                              ; preds = %297
  %299 = load i64, ptr %14, align 8, !tbaa !9
  %300 = load i64, ptr %10, align 8, !tbaa !9
  %301 = add i64 %300, %299
  store i64 %301, ptr %10, align 8, !tbaa !9
  br label %302

302:                                              ; preds = %298
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = load ptr, ptr %13, align 8, !tbaa !5
  %305 = call i32 @pk_write_ec_param(ptr noundef %9, ptr noundef %303, ptr noundef %304)
  store i32 %305, ptr %8, align 4, !tbaa !11
  %306 = icmp slt i32 %305, 0
  br i1 %306, label %307, label %309

307:                                              ; preds = %302
  %308 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %308, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

309:                                              ; preds = %302
  %310 = load i32, ptr %8, align 4, !tbaa !11
  %311 = sext i32 %310 to i64
  %312 = load i64, ptr %15, align 8, !tbaa !9
  %313 = add i64 %312, %311
  store i64 %313, ptr %15, align 8, !tbaa !9
  br label %314

314:                                              ; preds = %309
  br label %315

315:                                              ; preds = %314
  br label %316

316:                                              ; preds = %315
  br label %317

317:                                              ; preds = %316
  %318 = load ptr, ptr %6, align 8, !tbaa !5
  %319 = load i64, ptr %15, align 8, !tbaa !9
  %320 = call i32 @mbedtls_asn1_write_len(ptr noundef %9, ptr noundef %318, i64 noundef %319)
  store i32 %320, ptr %8, align 4, !tbaa !11
  %321 = icmp slt i32 %320, 0
  br i1 %321, label %322, label %324

322:                                              ; preds = %317
  %323 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %323, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

324:                                              ; preds = %317
  %325 = load i32, ptr %8, align 4, !tbaa !11
  %326 = sext i32 %325 to i64
  %327 = load i64, ptr %15, align 8, !tbaa !9
  %328 = add i64 %327, %326
  store i64 %328, ptr %15, align 8, !tbaa !9
  br label %329

329:                                              ; preds = %324
  br label %330

330:                                              ; preds = %329
  br label %331

331:                                              ; preds = %330
  br label %332

332:                                              ; preds = %331
  %333 = load ptr, ptr %6, align 8, !tbaa !5
  %334 = call i32 @mbedtls_asn1_write_tag(ptr noundef %9, ptr noundef %333, i8 noundef zeroext -96)
  store i32 %334, ptr %8, align 4, !tbaa !11
  %335 = icmp slt i32 %334, 0
  br i1 %335, label %336, label %338

336:                                              ; preds = %332
  %337 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %337, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

338:                                              ; preds = %332
  %339 = load i32, ptr %8, align 4, !tbaa !11
  %340 = sext i32 %339 to i64
  %341 = load i64, ptr %15, align 8, !tbaa !9
  %342 = add i64 %341, %340
  store i64 %342, ptr %15, align 8, !tbaa !9
  br label %343

343:                                              ; preds = %338
  br label %344

344:                                              ; preds = %343
  br label %345

345:                                              ; preds = %344
  %346 = load i64, ptr %15, align 8, !tbaa !9
  %347 = load i64, ptr %10, align 8, !tbaa !9
  %348 = add i64 %347, %346
  store i64 %348, ptr %10, align 8, !tbaa !9
  br label %349

349:                                              ; preds = %345
  %350 = load ptr, ptr %6, align 8, !tbaa !5
  %351 = load ptr, ptr %13, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.mbedtls_ecp_keypair, ptr %351, i32 0, i32 1
  %353 = call i32 @mbedtls_asn1_write_mpi(ptr noundef %9, ptr noundef %350, ptr noundef %352)
  store i32 %353, ptr %8, align 4, !tbaa !11
  %354 = icmp slt i32 %353, 0
  br i1 %354, label %355, label %357

355:                                              ; preds = %349
  %356 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %356, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

357:                                              ; preds = %349
  %358 = load i32, ptr %8, align 4, !tbaa !11
  %359 = sext i32 %358 to i64
  %360 = load i64, ptr %10, align 8, !tbaa !9
  %361 = add i64 %360, %359
  store i64 %361, ptr %10, align 8, !tbaa !9
  br label %362

362:                                              ; preds = %357
  br label %363

363:                                              ; preds = %362
  br label %364

364:                                              ; preds = %363
  %365 = load ptr, ptr %9, align 8, !tbaa !5
  store i8 4, ptr %365, align 1, !tbaa !13
  br label %366

366:                                              ; preds = %364
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  %368 = call i32 @mbedtls_asn1_write_int(ptr noundef %9, ptr noundef %367, i32 noundef 1)
  store i32 %368, ptr %8, align 4, !tbaa !11
  %369 = icmp slt i32 %368, 0
  br i1 %369, label %370, label %372

370:                                              ; preds = %366
  %371 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %371, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

372:                                              ; preds = %366
  %373 = load i32, ptr %8, align 4, !tbaa !11
  %374 = sext i32 %373 to i64
  %375 = load i64, ptr %10, align 8, !tbaa !9
  %376 = add i64 %375, %374
  store i64 %376, ptr %10, align 8, !tbaa !9
  br label %377

377:                                              ; preds = %372
  br label %378

378:                                              ; preds = %377
  br label %379

379:                                              ; preds = %378
  br label %380

380:                                              ; preds = %379
  %381 = load ptr, ptr %6, align 8, !tbaa !5
  %382 = load i64, ptr %10, align 8, !tbaa !9
  %383 = call i32 @mbedtls_asn1_write_len(ptr noundef %9, ptr noundef %381, i64 noundef %382)
  store i32 %383, ptr %8, align 4, !tbaa !11
  %384 = icmp slt i32 %383, 0
  br i1 %384, label %385, label %387

385:                                              ; preds = %380
  %386 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %386, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

387:                                              ; preds = %380
  %388 = load i32, ptr %8, align 4, !tbaa !11
  %389 = sext i32 %388 to i64
  %390 = load i64, ptr %10, align 8, !tbaa !9
  %391 = add i64 %390, %389
  store i64 %391, ptr %10, align 8, !tbaa !9
  br label %392

392:                                              ; preds = %387
  br label %393

393:                                              ; preds = %392
  br label %394

394:                                              ; preds = %393
  br label %395

395:                                              ; preds = %394
  %396 = load ptr, ptr %6, align 8, !tbaa !5
  %397 = call i32 @mbedtls_asn1_write_tag(ptr noundef %9, ptr noundef %396, i8 noundef zeroext 48)
  store i32 %397, ptr %8, align 4, !tbaa !11
  %398 = icmp slt i32 %397, 0
  br i1 %398, label %399, label %401

399:                                              ; preds = %395
  %400 = load i32, ptr %8, align 4, !tbaa !11
  store i32 %400, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %409

401:                                              ; preds = %395
  %402 = load i32, ptr %8, align 4, !tbaa !11
  %403 = sext i32 %402 to i64
  %404 = load i64, ptr %10, align 8, !tbaa !9
  %405 = add i64 %404, %403
  store i64 %405, ptr %10, align 8, !tbaa !9
  br label %406

406:                                              ; preds = %401
  br label %407

407:                                              ; preds = %406
  br label %408

408:                                              ; preds = %407
  store i32 0, ptr %12, align 4
  br label %409

409:                                              ; preds = %408, %399, %385, %370, %355, %336, %322, %307, %289, %275, %260, %246, %235, %219
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  %410 = load i32, ptr %12, align 4
  switch i32 %410, label %417 [
    i32 0, label %411
  ]

411:                                              ; preds = %409
  br label %413

412:                                              ; preds = %203
  store i32 -14720, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %417

413:                                              ; preds = %411
  br label %414

414:                                              ; preds = %413, %202
  %415 = load i64, ptr %10, align 8, !tbaa !9
  %416 = trunc i64 %415 to i32
  store i32 %416, ptr %4, align 4
  store i32 1, ptr %12, align 4
  br label %417

417:                                              ; preds = %414, %412, %409, %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  %418 = load i32, ptr %4, align 4
  ret i32 %418
}

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

declare i32 @mbedtls_asn1_write_int(ptr noundef, ptr noundef, i32 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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { 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 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!7, !7, i64 0}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

declare i32 @mbedtls_pk_get_type(ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @mbedtls_pk_rsa(ptr, ptr) local_unnamed_addr #2

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @mbedtls_pk_ec(ptr, ptr) local_unnamed_addr #2

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

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

declare i32 @mbedtls_asn1_write_tag(ptr noundef, ptr noundef, i8 noundef zeroext) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
define dso_local i32 @mbedtls_pk_write_key_der(ptr noundef %0, ptr noundef %1, i64 noundef %2) local_unnamed_addr #3 {
  %4 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #4
  %5 = getelementptr inbounds i8, ptr %1, i64 %2
  store ptr %5, ptr %4, align 8, !tbaa !5
  %6 = tail call i32 @mbedtls_pk_get_type(ptr noundef %0) #4
  %7 = icmp eq i32 %6, 1
  br i1 %7, label %8, label %68

8:                                                ; preds = %3
  %9 = load ptr, ptr %0, align 8
  %10 = getelementptr inbounds i8, ptr %0, i64 8
  %11 = load ptr, ptr %10, align 8
  %12 = tail call ptr @mbedtls_pk_rsa(ptr %9, ptr %11)
  %13 = getelementptr inbounds i8, ptr %12, i64 184
  %14 = call i32 @mbedtls_asn1_write_mpi(ptr noundef nonnull %4, ptr noundef %1, ptr noundef nonnull %13) #4
  %15 = icmp slt i32 %14, 0
  br i1 %15, label %.thread, label %16

16:                                               ; preds = %8
  %17 = getelementptr inbounds i8, ptr %12, i64 160
  %18 = call i32 @mbedtls_asn1_write_mpi(ptr noundef nonnull %4, ptr noundef %1, ptr noundef nonnull %17) #4
  %19 = icmp slt i32 %18, 0
  br i1 %19, label %.thread, label %20

20:                                               ; preds = %16
  %21 = getelementptr inbounds i8, ptr %12, i64 136
  %22 = call i32 @mbedtls_asn1_write_mpi(ptr noundef nonnull %4, ptr noundef %1, ptr noundef nonnull %21) #4
  %23 = icmp slt i32 %22, 0
  br i1 %23, label %.thread, label %24

24:                                               ; preds = %20
  %25 = getelementptr inbounds i8, ptr %12, i64 112
  %26 = call i32 @mbedtls_asn1_write_mpi(ptr noundef nonnull %4, ptr noundef %1, ptr noundef nonnull %25) #4
  %27 = icmp slt i32 %26, 0
  br i1 %27, label %.thread, label %28

28:                                               ; preds = %24
  %29 = getelementptr inbounds i8, ptr %12, i64 88
  %30 = call i32 @mbedtls_asn1_write_mpi(ptr noundef nonnull %4, ptr noundef %1, ptr noundef nonnull %29) #4
  %31 = icmp slt i32 %30, 0
  br i1 %31, label %.thread, label %32

32:                                               ; preds = %28
  %33 = getelementptr inbounds i8, ptr %12, i64 64
  %34 = call i32 @mbedtls_asn1_write_mpi(ptr noundef nonnull %4, ptr noundef %1, ptr noundef nonnull %33) #4
  %35 = icmp slt i32 %34, 0
  br i1 %35, label %.thread, label %36

36:                                               ; preds = %32
  %37 = getelementptr inbounds i8, ptr %12, i64 40
  %38 = call i32 @mbedtls_asn1_write_mpi(ptr noundef nonnull %4, ptr noundef %1, ptr noundef nonnull %37) #4
  %39 = icmp slt i32 %38, 0
  br i1 %39, label %.thread, label %40

40:                                               ; preds = %36
  %41 = getelementptr inbounds i8, ptr %12, i64 16
  %42 = call i32 @mbedtls_asn1_write_mpi(ptr noundef nonnull %4, ptr noundef %1, ptr noundef nonnull %41) #4
  %43 = icmp slt i32 %42, 0
  br i1 %43, label %.thread, label %44

44:                                               ; preds = %40
  %45 = call i32 @mbedtls_asn1_write_int(ptr noundef nonnull %4, ptr noundef %1, i32 noundef 0) #4
  %46 = icmp slt i32 %45, 0
  br i1 %46, label %.thread, label %47

47:                                               ; preds = %44
  %narrow176 = add nuw i32 %18, %14
  %48 = zext i32 %narrow176 to i64
  %49 = zext nneg i32 %22 to i64
  %50 = add nuw nsw i64 %49, %48
  %51 = zext nneg i32 %26 to i64
  %52 = add nuw nsw i64 %50, %51
  %53 = zext nneg i32 %30 to i64
  %54 = add nuw nsw i64 %52, %53
  %55 = zext nneg i32 %34 to i64
  %56 = add nuw nsw i64 %54, %55
  %57 = zext nneg i32 %38 to i64
  %58 = add nuw nsw i64 %56, %57
  %59 = zext nneg i32 %42 to i64
  %60 = add nuw nsw i64 %58, %59
  %61 = zext nneg i32 %45 to i64
  %62 = add nuw nsw i64 %60, %61
  %63 = call i32 @mbedtls_asn1_write_len(ptr noundef nonnull %4, ptr noundef %1, i64 noundef %62) #4
  %64 = icmp slt i32 %63, 0
  br i1 %64, label %.thread, label %65

65:                                               ; preds = %47
  %66 = call i32 @mbedtls_asn1_write_tag(ptr noundef nonnull %4, ptr noundef %1, i8 noundef zeroext 48) #4
  %67 = icmp slt i32 %66, 0
  br i1 %67, label %.thread, label %138

68:                                               ; preds = %3
  %69 = tail call i32 @mbedtls_pk_get_type(ptr noundef %0) #4
  %70 = icmp eq i32 %69, 2
  br i1 %70, label %71, label %.thread

71:                                               ; preds = %68
  %72 = load ptr, ptr %0, align 8
  %73 = getelementptr inbounds i8, ptr %0, i64 8
  %74 = load ptr, ptr %73, align 8
  %75 = tail call ptr @mbedtls_pk_ec(ptr %72, ptr %74)
  %76 = call i32 @pk_write_ec_pubkey(ptr noundef nonnull %4, ptr noundef %1, ptr noundef %75)
  %77 = icmp slt i32 %76, 0
  br i1 %77, label %.thread, label %78

78:                                               ; preds = %71
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = ptrtoint ptr %79 to i64
  %81 = ptrtoint ptr %1 to i64
  %82 = sub i64 %80, %81
  %83 = icmp slt i64 %82, 1
  br i1 %83, label %.thread, label %84

84:                                               ; preds = %78
  %85 = getelementptr inbounds i8, ptr %79, i64 -1
  store ptr %85, ptr %4, align 8, !tbaa !5
  store i8 0, ptr %85, align 1, !tbaa !9
  %narrow = add nuw i32 %76, 1
  %86 = zext i32 %narrow to i64
  %87 = call i32 @mbedtls_asn1_write_len(ptr noundef nonnull %4, ptr noundef %1, i64 noundef %86) #4
  %88 = icmp slt i32 %87, 0
  br i1 %88, label %.thread, label %89

89:                                               ; preds = %84
  %90 = call i32 @mbedtls_asn1_write_tag(ptr noundef nonnull %4, ptr noundef %1, i8 noundef zeroext 3) #4
  %91 = icmp slt i32 %90, 0
  br i1 %91, label %.thread, label %92

92:                                               ; preds = %89
  %93 = zext nneg i32 %87 to i64
  %94 = add nuw nsw i64 %93, %86
  %95 = zext nneg i32 %90 to i64
  %96 = add nuw nsw i64 %94, %95
  %97 = call i32 @mbedtls_asn1_write_len(ptr noundef nonnull %4, ptr noundef %1, i64 noundef %96) #4
  %98 = icmp slt i32 %97, 0
  br i1 %98, label %.thread, label %99

99:                                               ; preds = %92
  %100 = call i32 @mbedtls_asn1_write_tag(ptr noundef nonnull %4, ptr noundef %1, i8 noundef zeroext -95) #4
  %101 = icmp slt i32 %100, 0
  br i1 %101, label %.thread, label %102

102:                                              ; preds = %99
  %103 = zext nneg i32 %97 to i64
  %104 = zext nneg i32 %100 to i64
  %105 = call i32 @pk_write_ec_param(ptr noundef nonnull %4, ptr noundef %1, ptr noundef %75)
  %106 = icmp slt i32 %105, 0
  br i1 %106, label %.thread, label %107

107:                                              ; preds = %102
  %108 = zext nneg i32 %105 to i64
  %109 = call i32 @mbedtls_asn1_write_len(ptr noundef nonnull %4, ptr noundef %1, i64 noundef %108) #4
  %110 = icmp slt i32 %109, 0
  br i1 %110, label %.thread, label %111

111:                                              ; preds = %107
  %112 = call i32 @mbedtls_asn1_write_tag(ptr noundef nonnull %4, ptr noundef %1, i8 noundef zeroext -96) #4
  %113 = icmp slt i32 %112, 0
  br i1 %113, label %.thread, label %114

114:                                              ; preds = %111
  %115 = getelementptr inbounds i8, ptr %75, i64 248
  %116 = call i32 @mbedtls_asn1_write_mpi(ptr noundef nonnull %4, ptr noundef %1, ptr noundef nonnull %115) #4
  %117 = icmp slt i32 %116, 0
  br i1 %117, label %.thread, label %118

118:                                              ; preds = %114
  %119 = load ptr, ptr %4, align 8, !tbaa !5
  store i8 4, ptr %119, align 1, !tbaa !9
  %120 = call i32 @mbedtls_asn1_write_int(ptr noundef nonnull %4, ptr noundef %1, i32 noundef 1) #4
  %121 = icmp slt i32 %120, 0
  br i1 %121, label %.thread, label %122

122:                                              ; preds = %118
  %narrow175 = add nuw i32 %109, %105
  %123 = zext i32 %narrow175 to i64
  %124 = zext nneg i32 %112 to i64
  %125 = zext nneg i32 %116 to i64
  %126 = zext nneg i32 %120 to i64
  %127 = add nuw nsw i64 %96, %103
  %128 = add nuw nsw i64 %127, %104
  %129 = add nuw nsw i64 %128, %123
  %130 = add nuw nsw i64 %129, %124
  %131 = add nuw nsw i64 %130, %125
  %132 = add nuw nsw i64 %131, %126
  %133 = call i32 @mbedtls_asn1_write_len(ptr noundef nonnull %4, ptr noundef %1, i64 noundef %132) #4
  %134 = icmp slt i32 %133, 0
  br i1 %134, label %.thread, label %135

135:                                              ; preds = %122
  %136 = call i32 @mbedtls_asn1_write_tag(ptr noundef nonnull %4, ptr noundef %1, i8 noundef zeroext 48) #4
  %137 = icmp slt i32 %136, 0
  br i1 %137, label %.thread, label %138

138:                                              ; preds = %135, %65
  %.sink = phi i32 [ %63, %65 ], [ %133, %135 ]
  %.sink187 = phi i64 [ %62, %65 ], [ %132, %135 ]
  %.sink186 = phi i32 [ %66, %65 ], [ %136, %135 ]
  %139 = trunc i64 %.sink187 to i32
  %140 = add i32 %.sink, %139
  %141 = add i32 %140, %.sink186
  br label %.thread

.thread:                                          ; preds = %135, %122, %118, %114, %111, %107, %102, %99, %92, %89, %84, %78, %71, %16, %65, %47, %44, %40, %36, %32, %28, %24, %20, %8, %68, %138
  %.2 = phi i32 [ %141, %138 ], [ -14720, %68 ], [ %66, %65 ], [ %63, %47 ], [ %45, %44 ], [ %42, %40 ], [ %38, %36 ], [ %34, %32 ], [ %30, %28 ], [ %26, %24 ], [ %22, %20 ], [ %14, %8 ], [ %18, %16 ], [ %136, %135 ], [ %133, %122 ], [ %120, %118 ], [ %116, %114 ], [ %112, %111 ], [ %109, %107 ], [ %105, %102 ], [ %100, %99 ], [ %97, %92 ], [ %90, %89 ], [ %87, %84 ], [ -108, %78 ], [ %76, %71 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #4
  ret i32 %.2
}

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

declare i32 @mbedtls_asn1_write_int(ptr noundef, ptr noundef, i32 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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { 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 = !{!7, !7, i64 0}


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