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

; 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_x509_crl = type { %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, i32, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_named_data, %struct.mbedtls_x509_time, %struct.mbedtls_x509_time, %struct.mbedtls_x509_crl_entry, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, i32, i32, ptr, ptr }
%struct.mbedtls_asn1_named_data = type { %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, ptr, i8 }
%struct.mbedtls_x509_time = type { i32, i32, i32, i32, i32, i32 }
%struct.mbedtls_x509_crl_entry = type { %struct.mbedtls_asn1_buf, %struct.mbedtls_asn1_buf, %struct.mbedtls_x509_time, %struct.mbedtls_asn1_buf, ptr }
%struct.mbedtls_asn1_buf = type { i32, i64, ptr }

@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1

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

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

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

24:                                               ; preds = %4
  %25 = load i32, ptr %10, align 4, !tbaa !18
  %26 = icmp slt i32 %25, 0
  br i1 %26, label %32, label %27

27:                                               ; preds = %24
  %28 = load i32, ptr %10, align 4, !tbaa !18
  %29 = sext i32 %28 to i64
  %30 = load i64, ptr %11, align 8, !tbaa !9
  %31 = icmp uge i64 %29, %30
  br i1 %31, label %32, label %33

32:                                               ; preds = %27, %24
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

33:                                               ; preds = %27
  %34 = load i32, ptr %10, align 4, !tbaa !18
  %35 = sext i32 %34 to i64
  %36 = load i64, ptr %11, align 8, !tbaa !9
  %37 = sub i64 %36, %35
  store i64 %37, ptr %11, align 8, !tbaa !9
  %38 = load i32, ptr %10, align 4, !tbaa !18
  %39 = sext i32 %38 to i64
  %40 = load ptr, ptr %12, align 8, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %40, i64 %39
  store ptr %41, ptr %12, align 8, !tbaa !5
  br label %42

42:                                               ; preds = %33
  br label %43

43:                                               ; preds = %42
  %44 = load ptr, ptr %12, align 8, !tbaa !5
  %45 = load i64, ptr %11, align 8, !tbaa !9
  %46 = load ptr, ptr %8, align 8, !tbaa !5
  %47 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %44, i64 noundef %45, ptr noundef @.str.3, ptr noundef %46) #4
  store i32 %47, ptr %10, align 4, !tbaa !18
  br label %48

48:                                               ; preds = %43
  %49 = load i32, ptr %10, align 4, !tbaa !18
  %50 = icmp slt i32 %49, 0
  br i1 %50, label %56, label %51

51:                                               ; preds = %48
  %52 = load i32, ptr %10, align 4, !tbaa !18
  %53 = sext i32 %52 to i64
  %54 = load i64, ptr %11, align 8, !tbaa !9
  %55 = icmp uge i64 %53, %54
  br i1 %55, label %56, label %57

56:                                               ; preds = %51, %48
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

57:                                               ; preds = %51
  %58 = load i32, ptr %10, align 4, !tbaa !18
  %59 = sext i32 %58 to i64
  %60 = load i64, ptr %11, align 8, !tbaa !9
  %61 = sub i64 %60, %59
  store i64 %61, ptr %11, align 8, !tbaa !9
  %62 = load i32, ptr %10, align 4, !tbaa !18
  %63 = sext i32 %62 to i64
  %64 = load ptr, ptr %12, align 8, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %64, i64 %63
  store ptr %65, ptr %12, align 8, !tbaa !5
  br label %66

66:                                               ; preds = %57
  br label %67

67:                                               ; preds = %66
  %68 = load ptr, ptr %12, align 8, !tbaa !5
  %69 = load i64, ptr %11, align 8, !tbaa !9
  %70 = load ptr, ptr %9, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %70, i32 0, i32 5
  %72 = call i32 @mbedtls_x509_dn_gets(ptr noundef %68, i64 noundef %69, ptr noundef %71)
  store i32 %72, ptr %10, align 4, !tbaa !18
  br label %73

73:                                               ; preds = %67
  %74 = load i32, ptr %10, align 4, !tbaa !18
  %75 = icmp slt i32 %74, 0
  br i1 %75, label %81, label %76

76:                                               ; preds = %73
  %77 = load i32, ptr %10, align 4, !tbaa !18
  %78 = sext i32 %77 to i64
  %79 = load i64, ptr %11, align 8, !tbaa !9
  %80 = icmp uge i64 %78, %79
  br i1 %80, label %81, label %82

81:                                               ; preds = %76, %73
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

82:                                               ; preds = %76
  %83 = load i32, ptr %10, align 4, !tbaa !18
  %84 = sext i32 %83 to i64
  %85 = load i64, ptr %11, align 8, !tbaa !9
  %86 = sub i64 %85, %84
  store i64 %86, ptr %11, align 8, !tbaa !9
  %87 = load i32, ptr %10, align 4, !tbaa !18
  %88 = sext i32 %87 to i64
  %89 = load ptr, ptr %12, align 8, !tbaa !5
  %90 = getelementptr inbounds i8, ptr %89, i64 %88
  store ptr %90, ptr %12, align 8, !tbaa !5
  br label %91

91:                                               ; preds = %82
  br label %92

92:                                               ; preds = %91
  %93 = load ptr, ptr %12, align 8, !tbaa !5
  %94 = load i64, ptr %11, align 8, !tbaa !9
  %95 = load ptr, ptr %8, align 8, !tbaa !5
  %96 = load ptr, ptr %9, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %96, i32 0, i32 6
  %98 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %97, i32 0, i32 0
  %99 = load i32, ptr %98, align 8, !tbaa !19
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %100, i32 0, i32 6
  %102 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %101, i32 0, i32 1
  %103 = load i32, ptr %102, align 4, !tbaa !20
  %104 = load ptr, ptr %9, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %104, i32 0, i32 6
  %106 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %105, i32 0, i32 2
  %107 = load i32, ptr %106, align 8, !tbaa !21
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %108, i32 0, i32 6
  %110 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %109, i32 0, i32 3
  %111 = load i32, ptr %110, align 4, !tbaa !22
  %112 = load ptr, ptr %9, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %112, i32 0, i32 6
  %114 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %113, i32 0, i32 4
  %115 = load i32, ptr %114, align 8, !tbaa !23
  %116 = load ptr, ptr %9, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %116, i32 0, i32 6
  %118 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %117, i32 0, i32 5
  %119 = load i32, ptr %118, align 4, !tbaa !24
  %120 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %93, i64 noundef %94, ptr noundef @.str.4, ptr noundef %95, i32 noundef %99, i32 noundef %103, i32 noundef %107, i32 noundef %111, i32 noundef %115, i32 noundef %119) #4
  store i32 %120, ptr %10, align 4, !tbaa !18
  br label %121

121:                                              ; preds = %92
  %122 = load i32, ptr %10, align 4, !tbaa !18
  %123 = icmp slt i32 %122, 0
  br i1 %123, label %129, label %124

124:                                              ; preds = %121
  %125 = load i32, ptr %10, align 4, !tbaa !18
  %126 = sext i32 %125 to i64
  %127 = load i64, ptr %11, align 8, !tbaa !9
  %128 = icmp uge i64 %126, %127
  br i1 %128, label %129, label %130

129:                                              ; preds = %124, %121
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

130:                                              ; preds = %124
  %131 = load i32, ptr %10, align 4, !tbaa !18
  %132 = sext i32 %131 to i64
  %133 = load i64, ptr %11, align 8, !tbaa !9
  %134 = sub i64 %133, %132
  store i64 %134, ptr %11, align 8, !tbaa !9
  %135 = load i32, ptr %10, align 4, !tbaa !18
  %136 = sext i32 %135 to i64
  %137 = load ptr, ptr %12, align 8, !tbaa !5
  %138 = getelementptr inbounds i8, ptr %137, i64 %136
  store ptr %138, ptr %12, align 8, !tbaa !5
  br label %139

139:                                              ; preds = %130
  br label %140

140:                                              ; preds = %139
  %141 = load ptr, ptr %12, align 8, !tbaa !5
  %142 = load i64, ptr %11, align 8, !tbaa !9
  %143 = load ptr, ptr %8, align 8, !tbaa !5
  %144 = load ptr, ptr %9, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %144, i32 0, i32 7
  %146 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %145, i32 0, i32 0
  %147 = load i32, ptr %146, align 8, !tbaa !25
  %148 = load ptr, ptr %9, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %148, i32 0, i32 7
  %150 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %149, i32 0, i32 1
  %151 = load i32, ptr %150, align 4, !tbaa !26
  %152 = load ptr, ptr %9, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %152, i32 0, i32 7
  %154 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %153, i32 0, i32 2
  %155 = load i32, ptr %154, align 8, !tbaa !27
  %156 = load ptr, ptr %9, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %156, i32 0, i32 7
  %158 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %157, i32 0, i32 3
  %159 = load i32, ptr %158, align 4, !tbaa !28
  %160 = load ptr, ptr %9, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %160, i32 0, i32 7
  %162 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %161, i32 0, i32 4
  %163 = load i32, ptr %162, align 8, !tbaa !29
  %164 = load ptr, ptr %9, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %164, i32 0, i32 7
  %166 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %165, i32 0, i32 5
  %167 = load i32, ptr %166, align 4, !tbaa !30
  %168 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %141, i64 noundef %142, ptr noundef @.str.5, ptr noundef %143, i32 noundef %147, i32 noundef %151, i32 noundef %155, i32 noundef %159, i32 noundef %163, i32 noundef %167) #4
  store i32 %168, ptr %10, align 4, !tbaa !18
  br label %169

169:                                              ; preds = %140
  %170 = load i32, ptr %10, align 4, !tbaa !18
  %171 = icmp slt i32 %170, 0
  br i1 %171, label %177, label %172

172:                                              ; preds = %169
  %173 = load i32, ptr %10, align 4, !tbaa !18
  %174 = sext i32 %173 to i64
  %175 = load i64, ptr %11, align 8, !tbaa !9
  %176 = icmp uge i64 %174, %175
  br i1 %176, label %177, label %178

177:                                              ; preds = %172, %169
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

178:                                              ; preds = %172
  %179 = load i32, ptr %10, align 4, !tbaa !18
  %180 = sext i32 %179 to i64
  %181 = load i64, ptr %11, align 8, !tbaa !9
  %182 = sub i64 %181, %180
  store i64 %182, ptr %11, align 8, !tbaa !9
  %183 = load i32, ptr %10, align 4, !tbaa !18
  %184 = sext i32 %183 to i64
  %185 = load ptr, ptr %12, align 8, !tbaa !5
  %186 = getelementptr inbounds i8, ptr %185, i64 %184
  store ptr %186, ptr %12, align 8, !tbaa !5
  br label %187

187:                                              ; preds = %178
  br label %188

188:                                              ; preds = %187
  %189 = load ptr, ptr %9, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %189, i32 0, i32 8
  store ptr %190, ptr %13, align 8, !tbaa !5
  %191 = load ptr, ptr %12, align 8, !tbaa !5
  %192 = load i64, ptr %11, align 8, !tbaa !9
  %193 = load ptr, ptr %8, align 8, !tbaa !5
  %194 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %191, i64 noundef %192, ptr noundef @.str.6, ptr noundef %193) #4
  store i32 %194, ptr %10, align 4, !tbaa !18
  br label %195

195:                                              ; preds = %188
  %196 = load i32, ptr %10, align 4, !tbaa !18
  %197 = icmp slt i32 %196, 0
  br i1 %197, label %203, label %198

198:                                              ; preds = %195
  %199 = load i32, ptr %10, align 4, !tbaa !18
  %200 = sext i32 %199 to i64
  %201 = load i64, ptr %11, align 8, !tbaa !9
  %202 = icmp uge i64 %200, %201
  br i1 %202, label %203, label %204

203:                                              ; preds = %198, %195
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

204:                                              ; preds = %198
  %205 = load i32, ptr %10, align 4, !tbaa !18
  %206 = sext i32 %205 to i64
  %207 = load i64, ptr %11, align 8, !tbaa !9
  %208 = sub i64 %207, %206
  store i64 %208, ptr %11, align 8, !tbaa !9
  %209 = load i32, ptr %10, align 4, !tbaa !18
  %210 = sext i32 %209 to i64
  %211 = load ptr, ptr %12, align 8, !tbaa !5
  %212 = getelementptr inbounds i8, ptr %211, i64 %210
  store ptr %212, ptr %12, align 8, !tbaa !5
  br label %213

213:                                              ; preds = %204
  br label %214

214:                                              ; preds = %213
  br label %215

215:                                              ; preds = %322, %214
  %216 = load ptr, ptr %13, align 8, !tbaa !5
  %217 = icmp ne ptr %216, null
  br i1 %217, label %218, label %224

218:                                              ; preds = %215
  %219 = load ptr, ptr %13, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.mbedtls_x509_crl_entry, ptr %219, i32 0, i32 0
  %221 = getelementptr inbounds %struct.mbedtls_asn1_buf, ptr %220, i32 0, i32 1
  %222 = load i64, ptr %221, align 8, !tbaa !31
  %223 = icmp ne i64 %222, 0
  br label %224

224:                                              ; preds = %218, %215
  %225 = phi i1 [ false, %215 ], [ %223, %218 ]
  br i1 %225, label %226, label %326

226:                                              ; preds = %224
  %227 = load ptr, ptr %12, align 8, !tbaa !5
  %228 = load i64, ptr %11, align 8, !tbaa !9
  %229 = load ptr, ptr %8, align 8, !tbaa !5
  %230 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %227, i64 noundef %228, ptr noundef @.str.7, ptr noundef %229) #4
  store i32 %230, ptr %10, align 4, !tbaa !18
  br label %231

231:                                              ; preds = %226
  %232 = load i32, ptr %10, align 4, !tbaa !18
  %233 = icmp slt i32 %232, 0
  br i1 %233, label %239, label %234

234:                                              ; preds = %231
  %235 = load i32, ptr %10, align 4, !tbaa !18
  %236 = sext i32 %235 to i64
  %237 = load i64, ptr %11, align 8, !tbaa !9
  %238 = icmp uge i64 %236, %237
  br i1 %238, label %239, label %240

239:                                              ; preds = %234, %231
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

240:                                              ; preds = %234
  %241 = load i32, ptr %10, align 4, !tbaa !18
  %242 = sext i32 %241 to i64
  %243 = load i64, ptr %11, align 8, !tbaa !9
  %244 = sub i64 %243, %242
  store i64 %244, ptr %11, align 8, !tbaa !9
  %245 = load i32, ptr %10, align 4, !tbaa !18
  %246 = sext i32 %245 to i64
  %247 = load ptr, ptr %12, align 8, !tbaa !5
  %248 = getelementptr inbounds i8, ptr %247, i64 %246
  store ptr %248, ptr %12, align 8, !tbaa !5
  br label %249

249:                                              ; preds = %240
  br label %250

250:                                              ; preds = %249
  %251 = load ptr, ptr %12, align 8, !tbaa !5
  %252 = load i64, ptr %11, align 8, !tbaa !9
  %253 = load ptr, ptr %13, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.mbedtls_x509_crl_entry, ptr %253, i32 0, i32 1
  %255 = call i32 @mbedtls_x509_serial_gets(ptr noundef %251, i64 noundef %252, ptr noundef %254)
  store i32 %255, ptr %10, align 4, !tbaa !18
  br label %256

256:                                              ; preds = %250
  %257 = load i32, ptr %10, align 4, !tbaa !18
  %258 = icmp slt i32 %257, 0
  br i1 %258, label %264, label %259

259:                                              ; preds = %256
  %260 = load i32, ptr %10, align 4, !tbaa !18
  %261 = sext i32 %260 to i64
  %262 = load i64, ptr %11, align 8, !tbaa !9
  %263 = icmp uge i64 %261, %262
  br i1 %263, label %264, label %265

264:                                              ; preds = %259, %256
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

265:                                              ; preds = %259
  %266 = load i32, ptr %10, align 4, !tbaa !18
  %267 = sext i32 %266 to i64
  %268 = load i64, ptr %11, align 8, !tbaa !9
  %269 = sub i64 %268, %267
  store i64 %269, ptr %11, align 8, !tbaa !9
  %270 = load i32, ptr %10, align 4, !tbaa !18
  %271 = sext i32 %270 to i64
  %272 = load ptr, ptr %12, align 8, !tbaa !5
  %273 = getelementptr inbounds i8, ptr %272, i64 %271
  store ptr %273, ptr %12, align 8, !tbaa !5
  br label %274

274:                                              ; preds = %265
  br label %275

275:                                              ; preds = %274
  %276 = load ptr, ptr %12, align 8, !tbaa !5
  %277 = load i64, ptr %11, align 8, !tbaa !9
  %278 = load ptr, ptr %13, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.mbedtls_x509_crl_entry, ptr %278, i32 0, i32 2
  %280 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %279, i32 0, i32 0
  %281 = load i32, ptr %280, align 8, !tbaa !32
  %282 = load ptr, ptr %13, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.mbedtls_x509_crl_entry, ptr %282, i32 0, i32 2
  %284 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %283, i32 0, i32 1
  %285 = load i32, ptr %284, align 4, !tbaa !33
  %286 = load ptr, ptr %13, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.mbedtls_x509_crl_entry, ptr %286, i32 0, i32 2
  %288 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %287, i32 0, i32 2
  %289 = load i32, ptr %288, align 8, !tbaa !34
  %290 = load ptr, ptr %13, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.mbedtls_x509_crl_entry, ptr %290, i32 0, i32 2
  %292 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %291, i32 0, i32 3
  %293 = load i32, ptr %292, align 4, !tbaa !35
  %294 = load ptr, ptr %13, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.mbedtls_x509_crl_entry, ptr %294, i32 0, i32 2
  %296 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %295, i32 0, i32 4
  %297 = load i32, ptr %296, align 8, !tbaa !36
  %298 = load ptr, ptr %13, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.mbedtls_x509_crl_entry, ptr %298, i32 0, i32 2
  %300 = getelementptr inbounds %struct.mbedtls_x509_time, ptr %299, i32 0, i32 5
  %301 = load i32, ptr %300, align 4, !tbaa !37
  %302 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %276, i64 noundef %277, ptr noundef @.str.8, i32 noundef %281, i32 noundef %285, i32 noundef %289, i32 noundef %293, i32 noundef %297, i32 noundef %301) #4
  store i32 %302, ptr %10, align 4, !tbaa !18
  br label %303

303:                                              ; preds = %275
  %304 = load i32, ptr %10, align 4, !tbaa !18
  %305 = icmp slt i32 %304, 0
  br i1 %305, label %311, label %306

306:                                              ; preds = %303
  %307 = load i32, ptr %10, align 4, !tbaa !18
  %308 = sext i32 %307 to i64
  %309 = load i64, ptr %11, align 8, !tbaa !9
  %310 = icmp uge i64 %308, %309
  br i1 %310, label %311, label %312

311:                                              ; preds = %306, %303
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

312:                                              ; preds = %306
  %313 = load i32, ptr %10, align 4, !tbaa !18
  %314 = sext i32 %313 to i64
  %315 = load i64, ptr %11, align 8, !tbaa !9
  %316 = sub i64 %315, %314
  store i64 %316, ptr %11, align 8, !tbaa !9
  %317 = load i32, ptr %10, align 4, !tbaa !18
  %318 = sext i32 %317 to i64
  %319 = load ptr, ptr %12, align 8, !tbaa !5
  %320 = getelementptr inbounds i8, ptr %319, i64 %318
  store ptr %320, ptr %12, align 8, !tbaa !5
  br label %321

321:                                              ; preds = %312
  br label %322

322:                                              ; preds = %321
  %323 = load ptr, ptr %13, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.mbedtls_x509_crl_entry, ptr %323, i32 0, i32 4
  %325 = load ptr, ptr %324, align 8, !tbaa !38
  store ptr %325, ptr %13, align 8, !tbaa !5
  br label %215, !llvm.loop !39

326:                                              ; preds = %224
  %327 = load ptr, ptr %12, align 8, !tbaa !5
  %328 = load i64, ptr %11, align 8, !tbaa !9
  %329 = load ptr, ptr %8, align 8, !tbaa !5
  %330 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %327, i64 noundef %328, ptr noundef @.str.9, ptr noundef %329) #4
  store i32 %330, ptr %10, align 4, !tbaa !18
  br label %331

331:                                              ; preds = %326
  %332 = load i32, ptr %10, align 4, !tbaa !18
  %333 = icmp slt i32 %332, 0
  br i1 %333, label %339, label %334

334:                                              ; preds = %331
  %335 = load i32, ptr %10, align 4, !tbaa !18
  %336 = sext i32 %335 to i64
  %337 = load i64, ptr %11, align 8, !tbaa !9
  %338 = icmp uge i64 %336, %337
  br i1 %338, label %339, label %340

339:                                              ; preds = %334, %331
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

340:                                              ; preds = %334
  %341 = load i32, ptr %10, align 4, !tbaa !18
  %342 = sext i32 %341 to i64
  %343 = load i64, ptr %11, align 8, !tbaa !9
  %344 = sub i64 %343, %342
  store i64 %344, ptr %11, align 8, !tbaa !9
  %345 = load i32, ptr %10, align 4, !tbaa !18
  %346 = sext i32 %345 to i64
  %347 = load ptr, ptr %12, align 8, !tbaa !5
  %348 = getelementptr inbounds i8, ptr %347, i64 %346
  store ptr %348, ptr %12, align 8, !tbaa !5
  br label %349

349:                                              ; preds = %340
  br label %350

350:                                              ; preds = %349
  %351 = load ptr, ptr %12, align 8, !tbaa !5
  %352 = load i64, ptr %11, align 8, !tbaa !9
  %353 = load ptr, ptr %9, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %353, i32 0, i32 3
  %355 = load ptr, ptr %9, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %355, i32 0, i32 13
  %357 = load i32, ptr %356, align 4, !tbaa !41
  %358 = load ptr, ptr %9, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %358, i32 0, i32 12
  %360 = load i32, ptr %359, align 8, !tbaa !42
  %361 = load ptr, ptr %9, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.mbedtls_x509_crl, ptr %361, i32 0, i32 14
  %363 = load ptr, ptr %362, align 8, !tbaa !43
  %364 = call i32 @mbedtls_x509_sig_alg_gets(ptr noundef %351, i64 noundef %352, ptr noundef %354, i32 noundef %357, i32 noundef %360, ptr noundef %363)
  store i32 %364, ptr %10, align 4, !tbaa !18
  br label %365

365:                                              ; preds = %350
  %366 = load i32, ptr %10, align 4, !tbaa !18
  %367 = icmp slt i32 %366, 0
  br i1 %367, label %373, label %368

368:                                              ; preds = %365
  %369 = load i32, ptr %10, align 4, !tbaa !18
  %370 = sext i32 %369 to i64
  %371 = load i64, ptr %11, align 8, !tbaa !9
  %372 = icmp uge i64 %370, %371
  br i1 %372, label %373, label %374

373:                                              ; preds = %368, %365
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

374:                                              ; preds = %368
  %375 = load i32, ptr %10, align 4, !tbaa !18
  %376 = sext i32 %375 to i64
  %377 = load i64, ptr %11, align 8, !tbaa !9
  %378 = sub i64 %377, %376
  store i64 %378, ptr %11, align 8, !tbaa !9
  %379 = load i32, ptr %10, align 4, !tbaa !18
  %380 = sext i32 %379 to i64
  %381 = load ptr, ptr %12, align 8, !tbaa !5
  %382 = getelementptr inbounds i8, ptr %381, i64 %380
  store ptr %382, ptr %12, align 8, !tbaa !5
  br label %383

383:                                              ; preds = %374
  br label %384

384:                                              ; preds = %383
  %385 = load ptr, ptr %12, align 8, !tbaa !5
  %386 = load i64, ptr %11, align 8, !tbaa !9
  %387 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %385, i64 noundef %386, ptr noundef @.str.10) #4
  store i32 %387, ptr %10, align 4, !tbaa !18
  br label %388

388:                                              ; preds = %384
  %389 = load i32, ptr %10, align 4, !tbaa !18
  %390 = icmp slt i32 %389, 0
  br i1 %390, label %396, label %391

391:                                              ; preds = %388
  %392 = load i32, ptr %10, align 4, !tbaa !18
  %393 = sext i32 %392 to i64
  %394 = load i64, ptr %11, align 8, !tbaa !9
  %395 = icmp uge i64 %393, %394
  br i1 %395, label %396, label %397

396:                                              ; preds = %391, %388
  store i32 -10624, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

397:                                              ; preds = %391
  %398 = load i32, ptr %10, align 4, !tbaa !18
  %399 = sext i32 %398 to i64
  %400 = load i64, ptr %11, align 8, !tbaa !9
  %401 = sub i64 %400, %399
  store i64 %401, ptr %11, align 8, !tbaa !9
  %402 = load i32, ptr %10, align 4, !tbaa !18
  %403 = sext i32 %402 to i64
  %404 = load ptr, ptr %12, align 8, !tbaa !5
  %405 = getelementptr inbounds i8, ptr %404, i64 %403
  store ptr %405, ptr %12, align 8, !tbaa !5
  br label %406

406:                                              ; preds = %397
  br label %407

407:                                              ; preds = %406
  %408 = load i64, ptr %7, align 8, !tbaa !9
  %409 = load i64, ptr %11, align 8, !tbaa !9
  %410 = sub i64 %408, %409
  %411 = trunc i64 %410 to i32
  store i32 %411, ptr %5, align 4
  store i32 1, ptr %14, align 4
  br label %412

412:                                              ; preds = %407, %396, %373, %339, %311, %264, %239, %203, %177, %129, %81, %56, %32
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  %413 = load i32, ptr %5, align 4
  ret i32 %413
}

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #2

declare i32 @mbedtls_x509_dn_gets(ptr noundef, i64 noundef, ptr noundef) #3

declare i32 @mbedtls_x509_serial_gets(ptr noundef, i64 noundef, ptr noundef) #3

declare i32 @mbedtls_x509_sig_alg_gets(ptr noundef, i64 noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 "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 = { "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, !14, i64 48}
!12 = !{!"mbedtls_x509_crl", !13, i64 0, !13, i64 24, !14, i64 48, !13, i64 56, !13, i64 80, !15, i64 104, !16, i64 168, !16, i64 192, !17, i64 216, !13, i64 320, !13, i64 344, !13, i64 368, !14, i64 392, !14, i64 396, !6, i64 400, !6, i64 408}
!13 = !{!"mbedtls_asn1_buf", !14, i64 0, !10, i64 8, !6, i64 16}
!14 = !{!"int", !7, i64 0}
!15 = !{!"mbedtls_asn1_named_data", !13, i64 0, !13, i64 24, !6, i64 48, !7, i64 56}
!16 = !{!"mbedtls_x509_time", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20}
!17 = !{!"mbedtls_x509_crl_entry", !13, i64 0, !13, i64 24, !16, i64 48, !13, i64 72, !6, i64 96}
!18 = !{!14, !14, i64 0}
!19 = !{!12, !14, i64 168}
!20 = !{!12, !14, i64 172}
!21 = !{!12, !14, i64 176}
!22 = !{!12, !14, i64 180}
!23 = !{!12, !14, i64 184}
!24 = !{!12, !14, i64 188}
!25 = !{!12, !14, i64 192}
!26 = !{!12, !14, i64 196}
!27 = !{!12, !14, i64 200}
!28 = !{!12, !14, i64 204}
!29 = !{!12, !14, i64 208}
!30 = !{!12, !14, i64 212}
!31 = !{!17, !10, i64 8}
!32 = !{!17, !14, i64 48}
!33 = !{!17, !14, i64 52}
!34 = !{!17, !14, i64 56}
!35 = !{!17, !14, i64 60}
!36 = !{!17, !14, i64 64}
!37 = !{!17, !14, i64 68}
!38 = !{!17, !6, i64 96}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = !{!12, !14, i64 396}
!42 = !{!12, !14, i64 392}
!43 = !{!12, !6, i64 400}


; 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.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @mbedtls_x509_crl_info(ptr noundef %0, i64 noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #0 {
  %5 = getelementptr inbounds i8, ptr %3, i64 48
  %6 = load i32, ptr %5, align 8, !tbaa !5
  %7 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %0, i64 noundef %1, ptr noundef nonnull @.str.2, ptr noundef %2, i32 noundef %6) #3
  %8 = icmp slt i32 %7, 0
  br i1 %8, label %.loopexit, label %9

9:                                                ; preds = %4
  %10 = zext nneg i32 %7 to i64
  %.not = icmp ult i64 %10, %1
  br i1 %.not, label %11, label %.loopexit

11:                                               ; preds = %9
  %12 = sub i64 %1, %10
  %13 = getelementptr inbounds i8, ptr %0, i64 %10
  %14 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %13, i64 noundef %12, ptr noundef nonnull @.str.3, ptr noundef %2) #3
  %15 = icmp slt i32 %14, 0
  br i1 %15, label %.loopexit, label %16

16:                                               ; preds = %11
  %17 = zext nneg i32 %14 to i64
  %.not185 = icmp ugt i64 %12, %17
  br i1 %.not185, label %18, label %.loopexit

18:                                               ; preds = %16
  %19 = sub i64 %12, %17
  %20 = getelementptr inbounds i8, ptr %13, i64 %17
  %21 = getelementptr inbounds i8, ptr %3, i64 104
  %22 = tail call i32 @mbedtls_x509_dn_gets(ptr noundef %20, i64 noundef %19, ptr noundef nonnull %21) #3
  %23 = icmp slt i32 %22, 0
  br i1 %23, label %.loopexit, label %24

24:                                               ; preds = %18
  %25 = zext nneg i32 %22 to i64
  %.not186 = icmp ugt i64 %19, %25
  br i1 %.not186, label %26, label %.loopexit

26:                                               ; preds = %24
  %27 = sub i64 %19, %25
  %28 = getelementptr inbounds i8, ptr %20, i64 %25
  %29 = getelementptr inbounds i8, ptr %3, i64 168
  %30 = load i32, ptr %29, align 8, !tbaa !16
  %31 = getelementptr inbounds i8, ptr %3, i64 172
  %32 = load i32, ptr %31, align 4, !tbaa !17
  %33 = getelementptr inbounds i8, ptr %3, i64 176
  %34 = load i32, ptr %33, align 8, !tbaa !18
  %35 = getelementptr inbounds i8, ptr %3, i64 180
  %36 = load i32, ptr %35, align 4, !tbaa !19
  %37 = getelementptr inbounds i8, ptr %3, i64 184
  %38 = load i32, ptr %37, align 8, !tbaa !20
  %39 = getelementptr inbounds i8, ptr %3, i64 188
  %40 = load i32, ptr %39, align 4, !tbaa !21
  %41 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %28, i64 noundef %27, ptr noundef nonnull @.str.4, ptr noundef %2, i32 noundef %30, i32 noundef %32, i32 noundef %34, i32 noundef %36, i32 noundef %38, i32 noundef %40) #3
  %42 = icmp slt i32 %41, 0
  br i1 %42, label %.loopexit, label %43

43:                                               ; preds = %26
  %44 = zext nneg i32 %41 to i64
  %.not187 = icmp ugt i64 %27, %44
  br i1 %.not187, label %45, label %.loopexit

45:                                               ; preds = %43
  %46 = sub i64 %27, %44
  %47 = getelementptr inbounds i8, ptr %28, i64 %44
  %48 = getelementptr inbounds i8, ptr %3, i64 192
  %49 = load i32, ptr %48, align 8, !tbaa !22
  %50 = getelementptr inbounds i8, ptr %3, i64 196
  %51 = load i32, ptr %50, align 4, !tbaa !23
  %52 = getelementptr inbounds i8, ptr %3, i64 200
  %53 = load i32, ptr %52, align 8, !tbaa !24
  %54 = getelementptr inbounds i8, ptr %3, i64 204
  %55 = load i32, ptr %54, align 4, !tbaa !25
  %56 = getelementptr inbounds i8, ptr %3, i64 208
  %57 = load i32, ptr %56, align 8, !tbaa !26
  %58 = getelementptr inbounds i8, ptr %3, i64 212
  %59 = load i32, ptr %58, align 4, !tbaa !27
  %60 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %47, i64 noundef %46, ptr noundef nonnull @.str.5, ptr noundef %2, i32 noundef %49, i32 noundef %51, i32 noundef %53, i32 noundef %55, i32 noundef %57, i32 noundef %59) #3
  %61 = icmp slt i32 %60, 0
  br i1 %61, label %.loopexit, label %62

62:                                               ; preds = %45
  %63 = zext nneg i32 %60 to i64
  %.not188 = icmp ugt i64 %46, %63
  br i1 %.not188, label %64, label %.loopexit

64:                                               ; preds = %62
  %65 = sub i64 %46, %63
  %66 = getelementptr inbounds i8, ptr %47, i64 %63
  %67 = getelementptr inbounds i8, ptr %3, i64 216
  %68 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %66, i64 noundef %65, ptr noundef nonnull @.str.6, ptr noundef %2) #3
  %69 = icmp slt i32 %68, 0
  br i1 %69, label %.loopexit, label %70

70:                                               ; preds = %64
  %71 = zext nneg i32 %68 to i64
  %.not189 = icmp ugt i64 %65, %71
  br i1 %.not189, label %72, label %.loopexit

72:                                               ; preds = %70
  %73 = sub i64 %65, %71
  %74 = getelementptr inbounds i8, ptr %66, i64 %71
  br label %75

75:                                               ; preds = %72, %110
  %.0203 = phi ptr [ %67, %72 ], [ %114, %110 ]
  %.0148202 = phi ptr [ %74, %72 ], [ %112, %110 ]
  %.0149201 = phi i64 [ %73, %72 ], [ %111, %110 ]
  %76 = getelementptr inbounds i8, ptr %.0203, i64 8
  %77 = load i64, ptr %76, align 8, !tbaa !28
  %.not191 = icmp eq i64 %77, 0
  br i1 %.not191, label %.critedge, label %78

78:                                               ; preds = %75
  %79 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %.0148202, i64 noundef %.0149201, ptr noundef nonnull @.str.7, ptr noundef %2) #3
  %80 = icmp slt i32 %79, 0
  br i1 %80, label %.loopexit, label %81

81:                                               ; preds = %78
  %82 = zext nneg i32 %79 to i64
  %.not195 = icmp ugt i64 %.0149201, %82
  br i1 %.not195, label %83, label %.loopexit

83:                                               ; preds = %81
  %84 = sub i64 %.0149201, %82
  %85 = getelementptr inbounds i8, ptr %.0148202, i64 %82
  %86 = getelementptr inbounds i8, ptr %.0203, i64 24
  %87 = tail call i32 @mbedtls_x509_serial_gets(ptr noundef %85, i64 noundef %84, ptr noundef nonnull %86) #3
  %88 = icmp slt i32 %87, 0
  br i1 %88, label %.loopexit, label %89

89:                                               ; preds = %83
  %90 = zext nneg i32 %87 to i64
  %.not196 = icmp ugt i64 %84, %90
  br i1 %.not196, label %91, label %.loopexit

91:                                               ; preds = %89
  %92 = sub i64 %84, %90
  %93 = getelementptr inbounds i8, ptr %85, i64 %90
  %94 = getelementptr inbounds i8, ptr %.0203, i64 48
  %95 = load i32, ptr %94, align 8, !tbaa !29
  %96 = getelementptr inbounds i8, ptr %.0203, i64 52
  %97 = load i32, ptr %96, align 4, !tbaa !30
  %98 = getelementptr inbounds i8, ptr %.0203, i64 56
  %99 = load i32, ptr %98, align 8, !tbaa !31
  %100 = getelementptr inbounds i8, ptr %.0203, i64 60
  %101 = load i32, ptr %100, align 4, !tbaa !32
  %102 = getelementptr inbounds i8, ptr %.0203, i64 64
  %103 = load i32, ptr %102, align 8, !tbaa !33
  %104 = getelementptr inbounds i8, ptr %.0203, i64 68
  %105 = load i32, ptr %104, align 4, !tbaa !34
  %106 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %93, i64 noundef %92, ptr noundef nonnull @.str.8, i32 noundef %95, i32 noundef %97, i32 noundef %99, i32 noundef %101, i32 noundef %103, i32 noundef %105) #3
  %107 = icmp slt i32 %106, 0
  br i1 %107, label %.loopexit, label %108

108:                                              ; preds = %91
  %109 = zext nneg i32 %106 to i64
  %.not197 = icmp ugt i64 %92, %109
  br i1 %.not197, label %110, label %.loopexit

110:                                              ; preds = %108
  %111 = sub i64 %92, %109
  %112 = getelementptr inbounds i8, ptr %93, i64 %109
  %113 = getelementptr inbounds i8, ptr %.0203, i64 96
  %114 = load ptr, ptr %113, align 8, !tbaa !35
  %.not190 = icmp eq ptr %114, null
  br i1 %.not190, label %.critedge, label %75, !llvm.loop !36

.critedge:                                        ; preds = %110, %75
  %.0149.lcssa = phi i64 [ %111, %110 ], [ %.0149201, %75 ]
  %.0148.lcssa = phi ptr [ %112, %110 ], [ %.0148202, %75 ]
  %115 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %.0148.lcssa, i64 noundef %.0149.lcssa, ptr noundef nonnull @.str.9, ptr noundef %2) #3
  %116 = icmp slt i32 %115, 0
  br i1 %116, label %.loopexit, label %117

117:                                              ; preds = %.critedge
  %118 = zext nneg i32 %115 to i64
  %.not192 = icmp ugt i64 %.0149.lcssa, %118
  br i1 %.not192, label %119, label %.loopexit

119:                                              ; preds = %117
  %120 = sub i64 %.0149.lcssa, %118
  %121 = getelementptr inbounds i8, ptr %.0148.lcssa, i64 %118
  %122 = getelementptr inbounds i8, ptr %3, i64 56
  %123 = getelementptr inbounds i8, ptr %3, i64 396
  %124 = load i32, ptr %123, align 4, !tbaa !38
  %125 = getelementptr inbounds i8, ptr %3, i64 392
  %126 = load i32, ptr %125, align 8, !tbaa !39
  %127 = getelementptr inbounds i8, ptr %3, i64 400
  %128 = load ptr, ptr %127, align 8, !tbaa !40
  %129 = tail call i32 @mbedtls_x509_sig_alg_gets(ptr noundef %121, i64 noundef %120, ptr noundef nonnull %122, i32 noundef %124, i32 noundef %126, ptr noundef %128) #3
  %130 = icmp slt i32 %129, 0
  br i1 %130, label %.loopexit, label %131

131:                                              ; preds = %119
  %132 = zext nneg i32 %129 to i64
  %.not193 = icmp ugt i64 %120, %132
  br i1 %.not193, label %133, label %.loopexit

133:                                              ; preds = %131
  %134 = sub i64 %120, %132
  %135 = getelementptr inbounds i8, ptr %121, i64 %132
  %136 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %135, i64 noundef %134, ptr noundef nonnull @.str.10) #3
  %137 = icmp sgt i32 %136, -1
  %138 = zext nneg i32 %136 to i64
  %.not194 = icmp ugt i64 %134, %138
  %or.cond = select i1 %137, i1 %.not194, i1 false
  br i1 %or.cond, label %139, label %.loopexit

139:                                              ; preds = %133
  %.neg = sub i64 %1, %134
  %140 = trunc i64 %.neg to i32
  %141 = add i32 %136, %140
  br label %.loopexit

.loopexit:                                        ; preds = %91, %108, %83, %89, %78, %81, %133, %119, %131, %.critedge, %117, %64, %70, %45, %62, %26, %43, %18, %24, %11, %16, %4, %9, %139
  %.0150 = phi i32 [ %141, %139 ], [ -10624, %9 ], [ -10624, %4 ], [ -10624, %16 ], [ -10624, %11 ], [ -10624, %24 ], [ -10624, %18 ], [ -10624, %43 ], [ -10624, %26 ], [ -10624, %62 ], [ -10624, %45 ], [ -10624, %70 ], [ -10624, %64 ], [ -10624, %117 ], [ -10624, %.critedge ], [ -10624, %131 ], [ -10624, %119 ], [ -10624, %133 ], [ -10624, %81 ], [ -10624, %78 ], [ -10624, %89 ], [ -10624, %83 ], [ -10624, %108 ], [ -10624, %91 ]
  ret i32 %.0150
}

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #1

declare i32 @mbedtls_x509_dn_gets(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare i32 @mbedtls_x509_serial_gets(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare i32 @mbedtls_x509_sig_alg_gets(ptr noundef, i64 noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #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 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !8, i64 48}
!6 = !{!"mbedtls_x509_crl", !7, i64 0, !7, i64 24, !8, i64 48, !7, i64 56, !7, i64 80, !13, i64 104, !14, i64 168, !14, i64 192, !15, i64 216, !7, i64 320, !7, i64 344, !7, i64 368, !8, i64 392, !8, i64 396, !12, i64 400, !12, i64 408}
!7 = !{!"mbedtls_asn1_buf", !8, i64 0, !11, i64 8, !12, i64 16}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"long", !9, i64 0}
!12 = !{!"any pointer", !9, i64 0}
!13 = !{!"mbedtls_asn1_named_data", !7, i64 0, !7, i64 24, !12, i64 48, !9, i64 56}
!14 = !{!"mbedtls_x509_time", !8, i64 0, !8, i64 4, !8, i64 8, !8, i64 12, !8, i64 16, !8, i64 20}
!15 = !{!"mbedtls_x509_crl_entry", !7, i64 0, !7, i64 24, !14, i64 48, !7, i64 72, !12, i64 96}
!16 = !{!6, !8, i64 168}
!17 = !{!6, !8, i64 172}
!18 = !{!6, !8, i64 176}
!19 = !{!6, !8, i64 180}
!20 = !{!6, !8, i64 184}
!21 = !{!6, !8, i64 188}
!22 = !{!6, !8, i64 192}
!23 = !{!6, !8, i64 196}
!24 = !{!6, !8, i64 200}
!25 = !{!6, !8, i64 204}
!26 = !{!6, !8, i64 208}
!27 = !{!6, !8, i64 212}
!28 = !{!15, !11, i64 8}
!29 = !{!15, !8, i64 48}
!30 = !{!15, !8, i64 52}
!31 = !{!15, !8, i64 56}
!32 = !{!15, !8, i64 60}
!33 = !{!15, !8, i64 64}
!34 = !{!15, !8, i64 68}
!35 = !{!15, !12, i64 96}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = !{!6, !8, i64 396}
!39 = !{!6, !8, i64 392}
!40 = !{!6, !12, i64 400}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass