; LLVM IR from specinfo-ua/UAPKI :: library/uapkif/src/asn1 (constr_SET_OF)

; 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.asn_dec_rval_s = type { i32, i64 }
%struct.asn_TYPE_descriptor_s = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, i32, ptr, ptr, i32, ptr }
%struct.asn_SET_OF_specifics_s = type { i32, i32, i32 }
%struct.asn_struct_ctx_s = type { i16, i16, i32, ptr, i64 }
%struct.asn_TYPE_member_s = type { i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr }

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @SET_OF_decode_ber(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i64 noundef %4, i32 noundef %5) #0 {
  %7 = alloca %struct.asn_dec_rval_s, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i64, align 8
  %20 = alloca i32, align 4
  %21 = alloca %struct.asn_dec_rval_s, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca %struct.asn_dec_rval_s, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store i64 %4, ptr %12, align 8, !tbaa !9
  store i32 %5, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %29 = load ptr, ptr %9, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %29, i32 0, i32 19
  %31 = load ptr, ptr %30, align 8, !tbaa !13
  store ptr %31, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %32 = load ptr, ptr %9, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %32, i32 0, i32 17
  %34 = load ptr, ptr %33, align 8, !tbaa !15
  store ptr %34, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %35 = load ptr, ptr %10, align 8, !tbaa !5
  %36 = load ptr, ptr %35, align 8, !tbaa !5
  store ptr %36, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  store i64 0, ptr %19, align 8, !tbaa !9
  %37 = load ptr, ptr %16, align 8, !tbaa !5
  %38 = icmp eq ptr %37, null
  br i1 %38, label %39, label %56

39:                                               ; preds = %6
  %40 = load ptr, ptr %14, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %40, i32 0, i32 0
  %42 = load i32, ptr %41, align 4, !tbaa !16
  %43 = sext i32 %42 to i64
  %44 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %43) #6
  %45 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %44, ptr %45, align 8, !tbaa !5
  store ptr %44, ptr %16, align 8, !tbaa !5
  %46 = load ptr, ptr %16, align 8, !tbaa !5
  %47 = icmp eq ptr %46, null
  br i1 %47, label %48, label %55

48:                                               ; preds = %39
  br label %49

49:                                               ; preds = %48
  %50 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %50, align 8, !tbaa !18
  %51 = load i64, ptr %19, align 8, !tbaa !9
  %52 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %51, ptr %52, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %574

53:                                               ; No predecessors!
  br label %54

54:                                               ; preds = %53
  br label %55

55:                                               ; preds = %54, %39
  br label %56

56:                                               ; preds = %55, %6
  %57 = load ptr, ptr %16, align 8, !tbaa !5
  %58 = load ptr, ptr %14, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %58, i32 0, i32 1
  %60 = load i32, ptr %59, align 4, !tbaa !21
  %61 = sext i32 %60 to i64
  %62 = getelementptr inbounds i8, ptr %57, i64 %61
  store ptr %62, ptr %17, align 8, !tbaa !5
  %63 = load ptr, ptr %17, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %63, i32 0, i32 0
  %65 = load i16, ptr %64, align 8, !tbaa !22
  %66 = sext i16 %65 to i32
  switch i32 %66, label %567 [
    i32 0, label %67
    i32 1, label %132
    i32 2, label %456
  ]

67:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #5
  %68 = load ptr, ptr %8, align 8, !tbaa !5
  %69 = load ptr, ptr %9, align 8, !tbaa !5
  %70 = load ptr, ptr %17, align 8, !tbaa !5
  %71 = load ptr, ptr %11, align 8, !tbaa !5
  %72 = load i64, ptr %12, align 8, !tbaa !9
  %73 = load i32, ptr %13, align 4, !tbaa !11
  %74 = load ptr, ptr %17, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %74, i32 0, i32 4
  %76 = call { i32, i64 } @ber_check_tags(ptr noundef %68, ptr noundef %69, ptr noundef %70, ptr noundef %71, i64 noundef %72, i32 noundef %73, i32 noundef 1, ptr noundef %75, ptr noundef null)
  %77 = getelementptr inbounds { i32, i64 }, ptr %21, i32 0, i32 0
  %78 = extractvalue { i32, i64 } %76, 0
  store i32 %78, ptr %77, align 8
  %79 = getelementptr inbounds { i32, i64 }, ptr %21, i32 0, i32 1
  %80 = extractvalue { i32, i64 } %76, 1
  store i64 %80, ptr %79, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %21, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #5
  %81 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  %82 = load i32, ptr %81, align 8, !tbaa !18
  %83 = icmp ne i32 %82, 0
  br i1 %83, label %84, label %85

84:                                               ; preds = %67
  store i32 1, ptr %20, align 4
  br label %574

85:                                               ; preds = %67
  %86 = load ptr, ptr %17, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %86, i32 0, i32 4
  %88 = load i64, ptr %87, align 8, !tbaa !26
  %89 = icmp sge i64 %88, 0
  br i1 %89, label %90, label %97

90:                                               ; preds = %85
  %91 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %92 = load i64, ptr %91, align 8, !tbaa !20
  %93 = load ptr, ptr %17, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %93, i32 0, i32 4
  %95 = load i64, ptr %94, align 8, !tbaa !26
  %96 = add i64 %95, %92
  store i64 %96, ptr %94, align 8, !tbaa !26
  br label %97

97:                                               ; preds = %90, %85
  br label %98

98:                                               ; preds = %97
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %99 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %100 = load i64, ptr %99, align 8, !tbaa !20
  store i64 %100, ptr %22, align 8, !tbaa !9
  %101 = load ptr, ptr %11, align 8, !tbaa !5
  %102 = load i64, ptr %22, align 8, !tbaa !9
  %103 = getelementptr inbounds i8, ptr %101, i64 %102
  store ptr %103, ptr %11, align 8, !tbaa !5
  %104 = load i64, ptr %22, align 8, !tbaa !9
  %105 = load i64, ptr %12, align 8, !tbaa !9
  %106 = sub i64 %105, %104
  store i64 %106, ptr %12, align 8, !tbaa !9
  %107 = load ptr, ptr %17, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %107, i32 0, i32 4
  %109 = load i64, ptr %108, align 8, !tbaa !26
  %110 = icmp sge i64 %109, 0
  br i1 %110, label %111, label %117

111:                                              ; preds = %98
  %112 = load i64, ptr %22, align 8, !tbaa !9
  %113 = load ptr, ptr %17, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %113, i32 0, i32 4
  %115 = load i64, ptr %114, align 8, !tbaa !26
  %116 = sub i64 %115, %112
  store i64 %116, ptr %114, align 8, !tbaa !26
  br label %117

117:                                              ; preds = %111, %98
  %118 = load i64, ptr %22, align 8, !tbaa !9
  %119 = load i64, ptr %19, align 8, !tbaa !9
  %120 = add i64 %119, %118
  store i64 %120, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  br label %121

121:                                              ; preds = %117
  br label %122

122:                                              ; preds = %121
  br label %123

123:                                              ; preds = %122
  %124 = load ptr, ptr %17, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %124, i32 0, i32 0
  %126 = load i16, ptr %125, align 8, !tbaa !22
  %127 = add i16 %126, 1
  store i16 %127, ptr %125, align 8, !tbaa !22
  %128 = load ptr, ptr %17, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %128, i32 0, i32 1
  store i16 0, ptr %129, align 2, !tbaa !27
  br label %130

130:                                              ; preds = %123
  br label %131

131:                                              ; preds = %130
  br label %132

132:                                              ; preds = %131, %56
  br label %133

133:                                              ; preds = %443, %132
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %134 = load ptr, ptr %17, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %134, i32 0, i32 1
  %136 = load i16, ptr %135, align 2, !tbaa !27
  %137 = sext i16 %136 to i32
  %138 = and i32 %137, 1
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %141

140:                                              ; preds = %133
  br label %295

141:                                              ; preds = %133
  %142 = load ptr, ptr %17, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %142, i32 0, i32 4
  %144 = load i64, ptr %143, align 8, !tbaa !26
  %145 = icmp eq i64 %144, 0
  br i1 %145, label %146, label %158

146:                                              ; preds = %141
  br label %147

147:                                              ; preds = %146
  %148 = load ptr, ptr %17, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %148, i32 0, i32 0
  store i16 10, ptr %149, align 8, !tbaa !22
  br label %150

150:                                              ; preds = %147
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151
  %153 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %153, align 8, !tbaa !18
  %154 = load i64, ptr %19, align 8, !tbaa !9
  %155 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %154, ptr %155, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %440

156:                                              ; No predecessors!
  br label %157

157:                                              ; preds = %156
  br label %158

158:                                              ; preds = %157, %141
  %159 = load ptr, ptr %11, align 8, !tbaa !5
  %160 = load i64, ptr %12, align 8, !tbaa !9
  %161 = load ptr, ptr %17, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %161, i32 0, i32 4
  %163 = load i64, ptr %162, align 8, !tbaa !26
  %164 = icmp ult i64 %160, %163
  br i1 %164, label %165, label %167

165:                                              ; preds = %158
  %166 = load i64, ptr %12, align 8, !tbaa !9
  br label %171

167:                                              ; preds = %158
  %168 = load ptr, ptr %17, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %168, i32 0, i32 4
  %170 = load i64, ptr %169, align 8, !tbaa !26
  br label %171

171:                                              ; preds = %167, %165
  %172 = phi i64 [ %166, %165 ], [ %170, %167 ]
  %173 = call i64 @ber_fetch_tag(ptr noundef %159, i64 noundef %172, ptr noundef %18)
  store i64 %173, ptr %23, align 8, !tbaa !9
  %174 = load i64, ptr %23, align 8, !tbaa !9
  switch i64 %174, label %207 [
    i64 0, label %175
    i64 -1, label %200
  ]

175:                                              ; preds = %171
  %176 = load ptr, ptr %17, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %176, i32 0, i32 4
  %178 = load i64, ptr %177, align 8, !tbaa !26
  %179 = icmp sge i64 %178, 0
  br i1 %179, label %180, label %186

180:                                              ; preds = %175
  %181 = load ptr, ptr %17, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %181, i32 0, i32 4
  %183 = load i64, ptr %182, align 8, !tbaa !26
  %184 = load i64, ptr %12, align 8, !tbaa !9
  %185 = icmp ule i64 %183, %184
  br i1 %185, label %193, label %186

186:                                              ; preds = %180, %175
  br label %187

187:                                              ; preds = %186
  %188 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %188, align 8, !tbaa !18
  %189 = load i64, ptr %19, align 8, !tbaa !9
  %190 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %189, ptr %190, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %440

191:                                              ; No predecessors!
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192, %180
  br label %194

194:                                              ; preds = %193
  %195 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %195, align 8, !tbaa !18
  %196 = load i64, ptr %19, align 8, !tbaa !9
  %197 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %196, ptr %197, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %440

198:                                              ; No predecessors!
  br label %199

199:                                              ; preds = %198
  br label %200

200:                                              ; preds = %199, %171
  br label %201

201:                                              ; preds = %200
  %202 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %202, align 8, !tbaa !18
  %203 = load i64, ptr %19, align 8, !tbaa !9
  %204 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %203, ptr %204, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %440

205:                                              ; No predecessors!
  br label %206

206:                                              ; preds = %205
  br label %207

207:                                              ; preds = %206, %171
  %208 = load ptr, ptr %17, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %208, i32 0, i32 4
  %210 = load i64, ptr %209, align 8, !tbaa !26
  %211 = icmp slt i64 %210, 0
  br i1 %211, label %212, label %268

212:                                              ; preds = %207
  %213 = load ptr, ptr %11, align 8, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %213, i64 0
  %215 = load i8, ptr %214, align 1, !tbaa !28
  %216 = zext i8 %215 to i32
  %217 = icmp eq i32 %216, 0
  br i1 %217, label %218, label %268

218:                                              ; preds = %212
  %219 = load i64, ptr %12, align 8, !tbaa !9
  %220 = load ptr, ptr %17, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %220, i32 0, i32 4
  %222 = load i64, ptr %221, align 8, !tbaa !26
  %223 = icmp ult i64 %219, %222
  br i1 %223, label %224, label %226

224:                                              ; preds = %218
  %225 = load i64, ptr %12, align 8, !tbaa !9
  br label %230

226:                                              ; preds = %218
  %227 = load ptr, ptr %17, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %227, i32 0, i32 4
  %229 = load i64, ptr %228, align 8, !tbaa !26
  br label %230

230:                                              ; preds = %226, %224
  %231 = phi i64 [ %225, %224 ], [ %229, %226 ]
  %232 = icmp ult i64 %231, 2
  br i1 %232, label %233, label %259

233:                                              ; preds = %230
  %234 = load ptr, ptr %17, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %234, i32 0, i32 4
  %236 = load i64, ptr %235, align 8, !tbaa !26
  %237 = icmp sge i64 %236, 0
  br i1 %237, label %238, label %251

238:                                              ; preds = %233
  %239 = load ptr, ptr %17, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %239, i32 0, i32 4
  %241 = load i64, ptr %240, align 8, !tbaa !26
  %242 = load i64, ptr %12, align 8, !tbaa !9
  %243 = icmp ule i64 %241, %242
  br i1 %243, label %244, label %251

244:                                              ; preds = %238
  br label %245

245:                                              ; preds = %244
  %246 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %246, align 8, !tbaa !18
  %247 = load i64, ptr %19, align 8, !tbaa !9
  %248 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %247, ptr %248, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %440

249:                                              ; No predecessors!
  br label %250

250:                                              ; preds = %249
  br label %258

251:                                              ; preds = %238, %233
  br label %252

252:                                              ; preds = %251
  %253 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %253, align 8, !tbaa !18
  %254 = load i64, ptr %19, align 8, !tbaa !9
  %255 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %254, ptr %255, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %440

256:                                              ; No predecessors!
  br label %257

257:                                              ; preds = %256
  br label %258

258:                                              ; preds = %257, %250
  br label %267

259:                                              ; preds = %230
  %260 = load ptr, ptr %11, align 8, !tbaa !5
  %261 = getelementptr inbounds i8, ptr %260, i64 1
  %262 = load i8, ptr %261, align 1, !tbaa !28
  %263 = zext i8 %262 to i32
  %264 = icmp eq i32 %263, 0
  br i1 %264, label %265, label %266

265:                                              ; preds = %259
  store i32 9, ptr %20, align 4
  br label %440

266:                                              ; preds = %259
  br label %267

267:                                              ; preds = %266, %258
  br label %268

268:                                              ; preds = %267, %212, %207
  %269 = load ptr, ptr %15, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %269, i32 0, i32 3
  %271 = load i32, ptr %270, align 4, !tbaa !29
  %272 = icmp ne i32 %271, -1
  br i1 %272, label %273, label %288

273:                                              ; preds = %268
  %274 = load i32, ptr %18, align 4, !tbaa !11
  %275 = load ptr, ptr %15, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %275, i32 0, i32 3
  %277 = load i32, ptr %276, align 4, !tbaa !29
  %278 = icmp eq i32 %274, %277
  br i1 %278, label %279, label %280

279:                                              ; preds = %273
  br label %287

280:                                              ; preds = %273
  br label %281

281:                                              ; preds = %280
  %282 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %282, align 8, !tbaa !18
  %283 = load i64, ptr %19, align 8, !tbaa !9
  %284 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %283, ptr %284, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %440

285:                                              ; No predecessors!
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286, %279
  br label %288

288:                                              ; preds = %287, %268
  %289 = load ptr, ptr %17, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %289, i32 0, i32 1
  %291 = load i16, ptr %290, align 2, !tbaa !27
  %292 = sext i16 %291 to i32
  %293 = or i32 %292, 1
  %294 = trunc i32 %293 to i16
  store i16 %294, ptr %290, align 2, !tbaa !27
  br label %295

295:                                              ; preds = %288, %140
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #5
  %296 = load ptr, ptr %15, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %296, i32 0, i32 5
  %298 = load ptr, ptr %297, align 8, !tbaa !31
  %299 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %298, i32 0, i32 5
  %300 = load ptr, ptr %299, align 8, !tbaa !32
  %301 = load ptr, ptr %8, align 8, !tbaa !5
  %302 = load ptr, ptr %15, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %302, i32 0, i32 5
  %304 = load ptr, ptr %303, align 8, !tbaa !31
  %305 = load ptr, ptr %17, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %305, i32 0, i32 3
  %307 = load ptr, ptr %11, align 8, !tbaa !5
  %308 = load i64, ptr %12, align 8, !tbaa !9
  %309 = load ptr, ptr %17, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %309, i32 0, i32 4
  %311 = load i64, ptr %310, align 8, !tbaa !26
  %312 = icmp ult i64 %308, %311
  br i1 %312, label %313, label %315

313:                                              ; preds = %295
  %314 = load i64, ptr %12, align 8, !tbaa !9
  br label %319

315:                                              ; preds = %295
  %316 = load ptr, ptr %17, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %316, i32 0, i32 4
  %318 = load i64, ptr %317, align 8, !tbaa !26
  br label %319

319:                                              ; preds = %315, %313
  %320 = phi i64 [ %314, %313 ], [ %318, %315 ]
  %321 = call { i32, i64 } %300(ptr noundef %301, ptr noundef %304, ptr noundef %306, ptr noundef %307, i64 noundef %320, i32 noundef 0)
  %322 = getelementptr inbounds { i32, i64 }, ptr %24, i32 0, i32 0
  %323 = extractvalue { i32, i64 } %321, 0
  store i32 %323, ptr %322, align 8
  %324 = getelementptr inbounds { i32, i64 }, ptr %24, i32 0, i32 1
  %325 = extractvalue { i32, i64 } %321, 1
  store i64 %325, ptr %324, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %24, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  %326 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  %327 = load i32, ptr %326, align 8, !tbaa !18
  switch i32 %327, label %414 [
    i32 0, label %328
    i32 1, label %350
    i32 2, label %394
  ]

328:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %329 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %329, ptr %25, align 8, !tbaa !5
  %330 = load ptr, ptr %25, align 8, !tbaa !5
  %331 = load ptr, ptr %17, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %331, i32 0, i32 3
  %333 = load ptr, ptr %332, align 8, !tbaa !33
  %334 = call i32 @asn_set_add(ptr noundef %330, ptr noundef %333)
  %335 = icmp ne i32 %334, 0
  br i1 %335, label %336, label %343

336:                                              ; preds = %328
  br label %337

337:                                              ; preds = %336
  %338 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %338, align 8, !tbaa !18
  %339 = load i64, ptr %19, align 8, !tbaa !9
  %340 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %339, ptr %340, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %347

341:                                              ; No predecessors!
  br label %342

342:                                              ; preds = %341
  br label %346

343:                                              ; preds = %328
  %344 = load ptr, ptr %17, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %344, i32 0, i32 3
  store ptr null, ptr %345, align 8, !tbaa !33
  br label %346

346:                                              ; preds = %343, %342
  store i32 0, ptr %20, align 4
  br label %347

347:                                              ; preds = %346, %337
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  %348 = load i32, ptr %20, align 4
  switch i32 %348, label %440 [
    i32 0, label %349
  ]

349:                                              ; preds = %347
  br label %414

350:                                              ; preds = %319
  %351 = load ptr, ptr %17, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %351, i32 0, i32 4
  %353 = load i64, ptr %352, align 8, !tbaa !26
  %354 = icmp sge i64 %353, 0
  br i1 %354, label %355, label %361

355:                                              ; preds = %350
  %356 = load ptr, ptr %17, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %356, i32 0, i32 4
  %358 = load i64, ptr %357, align 8, !tbaa !26
  %359 = load i64, ptr %12, align 8, !tbaa !9
  %360 = icmp ule i64 %358, %359
  br i1 %360, label %393, label %361

361:                                              ; preds = %355, %350
  br label %362

362:                                              ; preds = %361
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %363 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %364 = load i64, ptr %363, align 8, !tbaa !20
  store i64 %364, ptr %26, align 8, !tbaa !9
  %365 = load ptr, ptr %11, align 8, !tbaa !5
  %366 = load i64, ptr %26, align 8, !tbaa !9
  %367 = getelementptr inbounds i8, ptr %365, i64 %366
  store ptr %367, ptr %11, align 8, !tbaa !5
  %368 = load i64, ptr %26, align 8, !tbaa !9
  %369 = load i64, ptr %12, align 8, !tbaa !9
  %370 = sub i64 %369, %368
  store i64 %370, ptr %12, align 8, !tbaa !9
  %371 = load ptr, ptr %17, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %371, i32 0, i32 4
  %373 = load i64, ptr %372, align 8, !tbaa !26
  %374 = icmp sge i64 %373, 0
  br i1 %374, label %375, label %381

375:                                              ; preds = %362
  %376 = load i64, ptr %26, align 8, !tbaa !9
  %377 = load ptr, ptr %17, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %377, i32 0, i32 4
  %379 = load i64, ptr %378, align 8, !tbaa !26
  %380 = sub i64 %379, %376
  store i64 %380, ptr %378, align 8, !tbaa !26
  br label %381

381:                                              ; preds = %375, %362
  %382 = load i64, ptr %26, align 8, !tbaa !9
  %383 = load i64, ptr %19, align 8, !tbaa !9
  %384 = add i64 %383, %382
  store i64 %384, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  br label %385

385:                                              ; preds = %381
  br label %386

386:                                              ; preds = %385
  br label %387

387:                                              ; preds = %386
  %388 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %388, align 8, !tbaa !18
  %389 = load i64, ptr %19, align 8, !tbaa !9
  %390 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %389, ptr %390, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %440

391:                                              ; No predecessors!
  br label %392

392:                                              ; preds = %391
  br label %393

393:                                              ; preds = %392, %355
  br label %394

394:                                              ; preds = %393, %319
  %395 = load ptr, ptr %15, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %395, i32 0, i32 5
  %397 = load ptr, ptr %396, align 8, !tbaa !31
  %398 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %397, i32 0, i32 2
  %399 = load ptr, ptr %398, align 8, !tbaa !34
  %400 = load ptr, ptr %15, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %400, i32 0, i32 5
  %402 = load ptr, ptr %401, align 8, !tbaa !31
  %403 = load ptr, ptr %17, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %403, i32 0, i32 3
  %405 = load ptr, ptr %404, align 8, !tbaa !33
  call void %399(ptr noundef %402, ptr noundef %405, i32 noundef 0)
  %406 = load ptr, ptr %17, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %406, i32 0, i32 3
  store ptr null, ptr %407, align 8, !tbaa !33
  br label %408

408:                                              ; preds = %394
  %409 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %409, align 8, !tbaa !18
  %410 = load i64, ptr %19, align 8, !tbaa !9
  %411 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %410, ptr %411, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %440

412:                                              ; No predecessors!
  br label %413

413:                                              ; preds = %412
  br label %414

414:                                              ; preds = %413, %349, %319
  br label %415

415:                                              ; preds = %414
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %416 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %417 = load i64, ptr %416, align 8, !tbaa !20
  store i64 %417, ptr %27, align 8, !tbaa !9
  %418 = load ptr, ptr %11, align 8, !tbaa !5
  %419 = load i64, ptr %27, align 8, !tbaa !9
  %420 = getelementptr inbounds i8, ptr %418, i64 %419
  store ptr %420, ptr %11, align 8, !tbaa !5
  %421 = load i64, ptr %27, align 8, !tbaa !9
  %422 = load i64, ptr %12, align 8, !tbaa !9
  %423 = sub i64 %422, %421
  store i64 %423, ptr %12, align 8, !tbaa !9
  %424 = load ptr, ptr %17, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %424, i32 0, i32 4
  %426 = load i64, ptr %425, align 8, !tbaa !26
  %427 = icmp sge i64 %426, 0
  br i1 %427, label %428, label %434

428:                                              ; preds = %415
  %429 = load i64, ptr %27, align 8, !tbaa !9
  %430 = load ptr, ptr %17, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %430, i32 0, i32 4
  %432 = load i64, ptr %431, align 8, !tbaa !26
  %433 = sub i64 %432, %429
  store i64 %433, ptr %431, align 8, !tbaa !26
  br label %434

434:                                              ; preds = %428, %415
  %435 = load i64, ptr %27, align 8, !tbaa !9
  %436 = load i64, ptr %19, align 8, !tbaa !9
  %437 = add i64 %436, %435
  store i64 %437, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  br label %438

438:                                              ; preds = %434
  br label %439

439:                                              ; preds = %438
  store i32 0, ptr %20, align 4
  br label %440

440:                                              ; preds = %439, %408, %387, %347, %281, %265, %252, %245, %201, %194, %187, %152
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  %441 = load i32, ptr %20, align 4
  switch i32 %441, label %574 [
    i32 0, label %442
    i32 9, label %446
  ]

442:                                              ; preds = %440
  br label %443

443:                                              ; preds = %442
  %444 = load ptr, ptr %17, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %444, i32 0, i32 1
  store i16 0, ptr %445, align 2, !tbaa !27
  br label %133

446:                                              ; preds = %440
  br label %447

447:                                              ; preds = %446
  %448 = load ptr, ptr %17, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %448, i32 0, i32 0
  %450 = load i16, ptr %449, align 8, !tbaa !22
  %451 = add i16 %450, 1
  store i16 %451, ptr %449, align 8, !tbaa !22
  %452 = load ptr, ptr %17, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %452, i32 0, i32 1
  store i16 0, ptr %453, align 2, !tbaa !27
  br label %454

454:                                              ; preds = %447
  br label %455

455:                                              ; preds = %454
  br label %456

456:                                              ; preds = %455, %56
  br label %457

457:                                              ; preds = %560, %456
  %458 = load ptr, ptr %17, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %458, i32 0, i32 4
  %460 = load i64, ptr %459, align 8, !tbaa !26
  %461 = icmp slt i64 %460, 0
  br i1 %461, label %462, label %561

462:                                              ; preds = %457
  %463 = load i64, ptr %12, align 8, !tbaa !9
  %464 = load ptr, ptr %17, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %464, i32 0, i32 4
  %466 = load i64, ptr %465, align 8, !tbaa !26
  %467 = icmp ult i64 %463, %466
  br i1 %467, label %468, label %470

468:                                              ; preds = %462
  %469 = load i64, ptr %12, align 8, !tbaa !9
  br label %474

470:                                              ; preds = %462
  %471 = load ptr, ptr %17, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %471, i32 0, i32 4
  %473 = load i64, ptr %472, align 8, !tbaa !26
  br label %474

474:                                              ; preds = %470, %468
  %475 = phi i64 [ %469, %468 ], [ %473, %470 ]
  %476 = icmp ult i64 %475, 2
  br i1 %476, label %477, label %513

477:                                              ; preds = %474
  %478 = load i64, ptr %12, align 8, !tbaa !9
  %479 = load ptr, ptr %17, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %479, i32 0, i32 4
  %481 = load i64, ptr %480, align 8, !tbaa !26
  %482 = icmp ult i64 %478, %481
  br i1 %482, label %483, label %485

483:                                              ; preds = %477
  %484 = load i64, ptr %12, align 8, !tbaa !9
  br label %489

485:                                              ; preds = %477
  %486 = load ptr, ptr %17, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %486, i32 0, i32 4
  %488 = load i64, ptr %487, align 8, !tbaa !26
  br label %489

489:                                              ; preds = %485, %483
  %490 = phi i64 [ %484, %483 ], [ %488, %485 ]
  %491 = icmp ugt i64 %490, 0
  br i1 %491, label %492, label %505

492:                                              ; preds = %489
  %493 = load ptr, ptr %11, align 8, !tbaa !5
  %494 = getelementptr inbounds i8, ptr %493, i64 0
  %495 = load i8, ptr %494, align 1, !tbaa !28
  %496 = sext i8 %495 to i32
  %497 = icmp ne i32 %496, 0
  br i1 %497, label %498, label %505

498:                                              ; preds = %492
  br label %499

499:                                              ; preds = %498
  %500 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %500, align 8, !tbaa !18
  %501 = load i64, ptr %19, align 8, !tbaa !9
  %502 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %501, ptr %502, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %574

503:                                              ; No predecessors!
  br label %504

504:                                              ; preds = %503
  br label %512

505:                                              ; preds = %492, %489
  br label %506

506:                                              ; preds = %505
  %507 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %507, align 8, !tbaa !18
  %508 = load i64, ptr %19, align 8, !tbaa !9
  %509 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %508, ptr %509, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %574

510:                                              ; No predecessors!
  br label %511

511:                                              ; preds = %510
  br label %512

512:                                              ; preds = %511, %504
  br label %513

513:                                              ; preds = %512, %474
  %514 = load ptr, ptr %11, align 8, !tbaa !5
  %515 = getelementptr inbounds i8, ptr %514, i64 0
  %516 = load i8, ptr %515, align 1, !tbaa !28
  %517 = sext i8 %516 to i32
  %518 = icmp eq i32 %517, 0
  br i1 %518, label %519, label %553

519:                                              ; preds = %513
  %520 = load ptr, ptr %11, align 8, !tbaa !5
  %521 = getelementptr inbounds i8, ptr %520, i64 1
  %522 = load i8, ptr %521, align 1, !tbaa !28
  %523 = sext i8 %522 to i32
  %524 = icmp eq i32 %523, 0
  br i1 %524, label %525, label %553

525:                                              ; preds = %519
  br label %526

526:                                              ; preds = %525
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  store i64 2, ptr %28, align 8, !tbaa !9
  %527 = load ptr, ptr %11, align 8, !tbaa !5
  %528 = load i64, ptr %28, align 8, !tbaa !9
  %529 = getelementptr inbounds i8, ptr %527, i64 %528
  store ptr %529, ptr %11, align 8, !tbaa !5
  %530 = load i64, ptr %28, align 8, !tbaa !9
  %531 = load i64, ptr %12, align 8, !tbaa !9
  %532 = sub i64 %531, %530
  store i64 %532, ptr %12, align 8, !tbaa !9
  %533 = load ptr, ptr %17, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %533, i32 0, i32 4
  %535 = load i64, ptr %534, align 8, !tbaa !26
  %536 = icmp sge i64 %535, 0
  br i1 %536, label %537, label %543

537:                                              ; preds = %526
  %538 = load i64, ptr %28, align 8, !tbaa !9
  %539 = load ptr, ptr %17, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %539, i32 0, i32 4
  %541 = load i64, ptr %540, align 8, !tbaa !26
  %542 = sub i64 %541, %538
  store i64 %542, ptr %540, align 8, !tbaa !26
  br label %543

543:                                              ; preds = %537, %526
  %544 = load i64, ptr %28, align 8, !tbaa !9
  %545 = load i64, ptr %19, align 8, !tbaa !9
  %546 = add i64 %545, %544
  store i64 %546, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %547

547:                                              ; preds = %543
  br label %548

548:                                              ; preds = %547
  %549 = load ptr, ptr %17, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %549, i32 0, i32 4
  %551 = load i64, ptr %550, align 8, !tbaa !26
  %552 = add nsw i64 %551, 1
  store i64 %552, ptr %550, align 8, !tbaa !26
  br label %560

553:                                              ; preds = %519, %513
  br label %554

554:                                              ; preds = %553
  %555 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %555, align 8, !tbaa !18
  %556 = load i64, ptr %19, align 8, !tbaa !9
  %557 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %556, ptr %557, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %574

558:                                              ; No predecessors!
  br label %559

559:                                              ; preds = %558
  br label %560

560:                                              ; preds = %559, %548
  br label %457, !llvm.loop !35

561:                                              ; preds = %457
  br label %562

562:                                              ; preds = %561
  %563 = load ptr, ptr %17, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %563, i32 0, i32 0
  store i16 10, ptr %564, align 8, !tbaa !22
  br label %565

565:                                              ; preds = %562
  br label %566

566:                                              ; preds = %565
  br label %567

567:                                              ; preds = %566, %56
  br label %568

568:                                              ; preds = %567
  %569 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %569, align 8, !tbaa !18
  %570 = load i64, ptr %19, align 8, !tbaa !9
  %571 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %570, ptr %571, align 8, !tbaa !20
  store i32 1, ptr %20, align 4
  br label %574

572:                                              ; No predecessors!
  br label %573

573:                                              ; preds = %572
  store i32 0, ptr %20, align 4
  br label %574

574:                                              ; preds = %573, %568, %554, %506, %499, %440, %84, %49
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  %575 = load i32, ptr %20, align 4
  switch i32 %575, label %578 [
    i32 0, label %576
    i32 1, label %576
  ]

576:                                              ; preds = %574, %574
  %577 = load { i32, i64 }, ptr %7, align 8
  ret { i32, i64 } %577

578:                                              ; preds = %574
  unreachable
}

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

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

declare { i32, i64 } @ber_check_tags(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #3

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

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

declare i64 @ber_fetch_tag(ptr noundef, i64 noundef, ptr noundef) #3

declare i32 @asn_set_add(ptr noundef, ptr noundef) #3

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

!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 = !{!14, !6, i64 152}
!14 = !{!"asn_TYPE_descriptor_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !12, i64 104, !6, i64 112, !12, i64 120, !6, i64 128, !6, i64 136, !12, i64 144, !6, i64 152}
!15 = !{!14, !6, i64 136}
!16 = !{!17, !12, i64 0}
!17 = !{!"asn_SET_OF_specifics_s", !12, i64 0, !12, i64 4, !12, i64 8}
!18 = !{!19, !12, i64 0}
!19 = !{!"asn_dec_rval_s", !12, i64 0, !10, i64 8}
!20 = !{!19, !10, i64 8}
!21 = !{!17, !12, i64 4}
!22 = !{!23, !24, i64 0}
!23 = !{!"asn_struct_ctx_s", !24, i64 0, !24, i64 2, !12, i64 4, !6, i64 8, !10, i64 16}
!24 = !{!"short", !7, i64 0}
!25 = !{i64 0, i64 4, !11, i64 8, i64 8, !9}
!26 = !{!23, !10, i64 16}
!27 = !{!23, !24, i64 2}
!28 = !{!7, !7, i64 0}
!29 = !{!30, !12, i64 12}
!30 = !{!"asn_TYPE_member_s", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!31 = !{!30, !6, i64 24}
!32 = !{!14, !6, i64 40}
!33 = !{!23, !6, i64 8}
!34 = !{!14, !6, i64 16}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}


; 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: nounwind uwtable
define dso_local { i32, i64 } @SET_OF_decode_ber(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2, ptr noundef %3, i64 noundef %4, i32 noundef %5) local_unnamed_addr #0 {
  %7 = alloca i32, align 4
  %8 = getelementptr inbounds i8, ptr %1, i64 152
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %1, i64 136
  %11 = load ptr, ptr %10, align 8, !tbaa !11
  %12 = load ptr, ptr %2, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %13 = icmp eq ptr %12, null
  br i1 %13, label %14, label %19

14:                                               ; preds = %6
  %15 = load i32, ptr %9, align 4, !tbaa !13
  %16 = sext i32 %15 to i64
  %17 = tail call noalias ptr @calloc(i64 noundef 1, i64 noundef %16) #6
  store ptr %17, ptr %2, align 8, !tbaa !12
  %18 = icmp eq ptr %17, null
  br i1 %18, label %.thread197, label %19

19:                                               ; preds = %14, %6
  %.0151 = phi ptr [ %17, %14 ], [ %12, %6 ]
  %20 = getelementptr inbounds i8, ptr %9, i64 4
  %21 = load i32, ptr %20, align 4, !tbaa !15
  %22 = sext i32 %21 to i64
  %23 = getelementptr inbounds i8, ptr %.0151, i64 %22
  %24 = load i16, ptr %23, align 8, !tbaa !16
  switch i16 %24, label %.thread197 [
    i16 0, label %27
    i16 1, label %._crit_edge286
    i16 2, label %147
  ]

._crit_edge286:                                   ; preds = %19
  %.phi.trans.insert287 = getelementptr inbounds i8, ptr %23, i64 2
  %.pre.pre = load i16, ptr %.phi.trans.insert287, align 2, !tbaa !20
  %.phi.trans.insert291 = getelementptr inbounds i8, ptr %23, i64 16
  %.pre283.pre.pre = load i64, ptr %.phi.trans.insert291, align 8, !tbaa !21
  %25 = and i16 %.pre.pre, 1
  %26 = icmp eq i16 %25, 0
  br label %.peel.begin

27:                                               ; preds = %19
  %28 = getelementptr inbounds i8, ptr %23, i64 16
  %29 = tail call { i32, i64 } @ber_check_tags(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull %23, ptr noundef %3, i64 noundef %4, i32 noundef %5, i32 noundef 1, ptr noundef nonnull %28, ptr noundef null) #5
  %30 = extractvalue { i32, i64 } %29, 0
  %31 = extractvalue { i32, i64 } %29, 1
  %.not = icmp eq i32 %30, 0
  br i1 %.not, label %32, label %.thread197

32:                                               ; preds = %27
  %33 = load i64, ptr %28, align 8, !tbaa !21
  %34 = icmp sgt i64 %33, -1
  br i1 %34, label %35, label %.thread

35:                                               ; preds = %32
  %36 = add i64 %33, %31
  %37 = icmp slt i64 %36, 0
  %spec.store.select = select i1 %37, i64 %36, i64 %33
  store i64 %spec.store.select, ptr %28, align 8
  br label %.thread

.thread:                                          ; preds = %35, %32
  %.pre283.pre293 = phi i64 [ %spec.store.select, %35 ], [ %33, %32 ]
  %38 = getelementptr inbounds i8, ptr %3, i64 %31
  %39 = sub i64 %4, %31
  %40 = load i16, ptr %23, align 8, !tbaa !16
  %41 = add i16 %40, 1
  store i16 %41, ptr %23, align 8, !tbaa !16
  %42 = getelementptr inbounds i8, ptr %23, i64 2
  store i16 0, ptr %42, align 2, !tbaa !20
  br label %.peel.begin

.peel.begin:                                      ; preds = %._crit_edge286, %.thread
  %.pre283.pre = phi i64 [ %.pre283.pre.pre, %._crit_edge286 ], [ %.pre283.pre293, %.thread ]
  %.pre = phi i1 [ %26, %._crit_edge286 ], [ true, %.thread ]
  %.0152 = phi i64 [ 0, %._crit_edge286 ], [ %31, %.thread ]
  %.0146 = phi i64 [ %4, %._crit_edge286 ], [ %39, %.thread ]
  %.0 = phi ptr [ %3, %._crit_edge286 ], [ %38, %.thread ]
  %43 = getelementptr inbounds i8, ptr %23, i64 2
  %44 = getelementptr inbounds i8, ptr %23, i64 16
  %45 = getelementptr inbounds i8, ptr %11, i64 12
  %46 = getelementptr inbounds i8, ptr %11, i64 24
  %47 = getelementptr inbounds i8, ptr %23, i64 8
  br i1 %.pre, label %48, label %71

48:                                               ; preds = %.peel.begin
  %49 = icmp eq i64 %.pre283.pre, 0
  br i1 %49, label %.loopexit379, label %50

50:                                               ; preds = %48
  %.1147..peel = tail call i64 @llvm.umin.i64(i64 %.0146, i64 %.pre283.pre)
  %51 = call i64 @ber_fetch_tag(ptr noundef %.0, i64 noundef %.1147..peel, ptr noundef nonnull %7) #5
  switch i64 %51, label %52 [
    i64 0, label %.loopexit380
    i64 -1, label %.thread197
  ]

52:                                               ; preds = %50
  %53 = load i64, ptr %44, align 8, !tbaa !21
  %54 = icmp slt i64 %53, 0
  br i1 %54, label %55, label %64

55:                                               ; preds = %52
  %56 = load i8, ptr %.0, align 1, !tbaa !22
  %57 = icmp eq i8 %56, 0
  br i1 %57, label %58, label %64

58:                                               ; preds = %55
  %.1147.186.peel = call i64 @llvm.umin.i64(i64 %.0146, i64 %53)
  %59 = icmp ult i64 %.1147.186.peel, 2
  br i1 %59, label %.thread197, label %60

60:                                               ; preds = %58
  %61 = getelementptr inbounds i8, ptr %.0, i64 1
  %62 = load i8, ptr %61, align 1, !tbaa !22
  %63 = icmp eq i8 %62, 0
  br i1 %63, label %.thread294, label %64

64:                                               ; preds = %60, %55, %52
  %65 = load i32, ptr %45, align 4, !tbaa !23
  %.not180.peel = icmp eq i32 %65, -1
  %66 = load i32, ptr %7, align 4
  %67 = icmp eq i32 %66, %65
  %or.cond189.peel = select i1 %.not180.peel, i1 true, i1 %67
  br i1 %or.cond189.peel, label %68, label %.thread197

68:                                               ; preds = %64
  %69 = load i16, ptr %43, align 2, !tbaa !20
  %70 = or i16 %69, 1
  store i16 %70, ptr %43, align 2, !tbaa !20
  br label %71

71:                                               ; preds = %68, %.peel.begin
  %72 = phi i64 [ %.pre283.pre, %.peel.begin ], [ %53, %68 ]
  %73 = load ptr, ptr %46, align 8, !tbaa !25
  %74 = getelementptr inbounds i8, ptr %73, i64 40
  %75 = load ptr, ptr %74, align 8, !tbaa !26
  %.1147.190.peel = call i64 @llvm.umin.i64(i64 %.0146, i64 %72)
  %76 = call { i32, i64 } %75(ptr noundef %0, ptr noundef %73, ptr noundef nonnull %47, ptr noundef %.0, i64 noundef %.1147.190.peel, i32 noundef 0) #5
  %77 = extractvalue { i32, i64 } %76, 0
  %78 = extractvalue { i32, i64 } %76, 1
  switch i32 %77, label %82 [
    i32 0, label %79
    i32 1, label %.loopexit381
    i32 2, label %.loopexit
  ]

79:                                               ; preds = %71
  %80 = load ptr, ptr %47, align 8, !tbaa !27
  %81 = call i32 @asn_set_add(ptr noundef nonnull %.0151, ptr noundef %80) #5
  %.not183.peel = icmp eq i32 %81, 0
  br i1 %.not183.peel, label %.thread194.peel, label %.thread197

.thread194.peel:                                  ; preds = %79
  store ptr null, ptr %47, align 8, !tbaa !27
  br label %82

82:                                               ; preds = %.thread194.peel, %71
  %83 = getelementptr inbounds i8, ptr %.0, i64 %78
  %84 = sub i64 %.0146, %78
  %85 = load i64, ptr %44, align 8, !tbaa !21
  %86 = icmp sgt i64 %85, -1
  br i1 %86, label %87, label %.peel.next

87:                                               ; preds = %82
  %88 = sub i64 %85, %78
  store i64 %88, ptr %44, align 8, !tbaa !21
  br label %.peel.next

.peel.next:                                       ; preds = %87, %82
  %.pre283290.peel = phi i64 [ %85, %82 ], [ %88, %87 ]
  %89 = add i64 %78, %.0152
  store i16 0, ptr %43, align 2, !tbaa !20
  br label %90

90:                                               ; preds = %143, %.peel.next
  %.pre283 = phi i64 [ %.pre283290.peel, %.peel.next ], [ %.pre283290, %143 ]
  %.1153 = phi i64 [ %89, %.peel.next ], [ %144, %143 ]
  %.1147 = phi i64 [ %84, %.peel.next ], [ %138, %143 ]
  %.1 = phi ptr [ %83, %.peel.next ], [ %137, %143 ]
  %91 = icmp eq i64 %.pre283, 0
  br i1 %91, label %.loopexit379, label %92

.loopexit379:                                     ; preds = %90, %48
  %.1153.lcssa = phi i64 [ %.0152, %48 ], [ %.1153, %90 ]
  store i16 10, ptr %23, align 8, !tbaa !16
  br label %.thread197

92:                                               ; preds = %90
  %.1147. = call i64 @llvm.umin.i64(i64 %.1147, i64 %.pre283)
  %93 = call i64 @ber_fetch_tag(ptr noundef %.1, i64 noundef %.1147., ptr noundef nonnull %7) #5
  switch i64 %93, label %96 [
    i64 0, label %.loopexit380
    i64 -1, label %.thread197
  ]

.loopexit380:                                     ; preds = %92, %50
  %.1153.lcssa372 = phi i64 [ %.0152, %50 ], [ %.1153, %92 ]
  %.1147.lcssa367 = phi i64 [ %.0146, %50 ], [ %.1147, %92 ]
  %94 = load i64, ptr %44, align 8, !tbaa !21
  %95 = icmp slt i64 %94, 0
  %.not179 = icmp ugt i64 %94, %.1147.lcssa367
  %or.cond = select i1 %95, i1 true, i1 %.not179
  %spec.select = select i1 %or.cond, i32 1, i32 2
  br label %.thread197

96:                                               ; preds = %92
  %97 = load i64, ptr %44, align 8, !tbaa !21
  %98 = icmp slt i64 %97, 0
  br i1 %98, label %99, label %108

99:                                               ; preds = %96
  %100 = load i8, ptr %.1, align 1, !tbaa !22
  %101 = icmp eq i8 %100, 0
  br i1 %101, label %102, label %108

102:                                              ; preds = %99
  %.1147.186 = call i64 @llvm.umin.i64(i64 %.1147, i64 %97)
  %103 = icmp ult i64 %.1147.186, 2
  br i1 %103, label %.thread197, label %104

104:                                              ; preds = %102
  %105 = getelementptr inbounds i8, ptr %.1, i64 1
  %106 = load i8, ptr %105, align 1, !tbaa !22
  %107 = icmp eq i8 %106, 0
  br i1 %107, label %.thread294, label %108

108:                                              ; preds = %104, %99, %96
  %109 = load i32, ptr %45, align 4, !tbaa !23
  %.not180 = icmp eq i32 %109, -1
  %110 = load i32, ptr %7, align 4
  %111 = icmp eq i32 %110, %109
  %or.cond189 = select i1 %.not180, i1 true, i1 %111
  br i1 %or.cond189, label %112, label %.thread197

112:                                              ; preds = %108
  %113 = load i16, ptr %43, align 2, !tbaa !20
  %114 = or i16 %113, 1
  store i16 %114, ptr %43, align 2, !tbaa !20
  %115 = load ptr, ptr %46, align 8, !tbaa !25
  %116 = getelementptr inbounds i8, ptr %115, i64 40
  %117 = load ptr, ptr %116, align 8, !tbaa !26
  %.1147.190 = call i64 @llvm.umin.i64(i64 %.1147, i64 %97)
  %118 = call { i32, i64 } %117(ptr noundef %0, ptr noundef %115, ptr noundef nonnull %47, ptr noundef %.1, i64 noundef %.1147.190, i32 noundef 0) #5
  %119 = extractvalue { i32, i64 } %118, 0
  %120 = extractvalue { i32, i64 } %118, 1
  switch i32 %119, label %136 [
    i32 0, label %121
    i32 1, label %.loopexit381
    i32 2, label %.loopexit
  ]

121:                                              ; preds = %112
  %122 = load ptr, ptr %47, align 8, !tbaa !27
  %123 = call i32 @asn_set_add(ptr noundef nonnull %.0151, ptr noundef %122) #5
  %.not183 = icmp eq i32 %123, 0
  br i1 %.not183, label %.thread194, label %.thread197

.thread194:                                       ; preds = %121
  store ptr null, ptr %47, align 8, !tbaa !27
  br label %136

.loopexit381:                                     ; preds = %112, %71
  %.1153.lcssa375 = phi i64 [ %.0152, %71 ], [ %.1153, %112 ]
  %.1147.lcssa370 = phi i64 [ %.0146, %71 ], [ %.1147, %112 ]
  %.lcssa360 = phi i64 [ %78, %71 ], [ %120, %112 ]
  %124 = load i64, ptr %44, align 8, !tbaa !21
  %125 = icmp slt i64 %124, 0
  %.not182 = icmp ugt i64 %124, %.1147.lcssa370
  %or.cond191 = select i1 %125, i1 true, i1 %.not182
  br i1 %or.cond191, label %126, label %.loopexit

126:                                              ; preds = %.loopexit381
  %127 = icmp sgt i64 %124, -1
  br i1 %127, label %128, label %130

128:                                              ; preds = %126
  %129 = sub i64 %124, %.lcssa360
  store i64 %129, ptr %44, align 8, !tbaa !21
  br label %130

130:                                              ; preds = %128, %126
  %131 = add i64 %.lcssa360, %.1153.lcssa375
  br label %.thread197

.loopexit:                                        ; preds = %71, %112, %.loopexit381
  %.1153377 = phi i64 [ %.1153.lcssa375, %.loopexit381 ], [ %.0152, %71 ], [ %.1153, %112 ]
  %132 = load ptr, ptr %46, align 8, !tbaa !25
  %133 = getelementptr inbounds i8, ptr %132, i64 16
  %134 = load ptr, ptr %133, align 8, !tbaa !28
  %135 = load ptr, ptr %47, align 8, !tbaa !27
  call void %134(ptr noundef %132, ptr noundef %135, i32 noundef 0) #5
  store ptr null, ptr %47, align 8, !tbaa !27
  br label %.thread197

136:                                              ; preds = %.thread194, %112
  %137 = getelementptr inbounds i8, ptr %.1, i64 %120
  %138 = sub i64 %.1147, %120
  %139 = load i64, ptr %44, align 8, !tbaa !21
  %140 = icmp sgt i64 %139, -1
  br i1 %140, label %141, label %143

141:                                              ; preds = %136
  %142 = sub i64 %139, %120
  store i64 %142, ptr %44, align 8, !tbaa !21
  br label %143

143:                                              ; preds = %136, %141
  %.pre283290 = phi i64 [ %139, %136 ], [ %142, %141 ]
  %144 = add i64 %120, %.1153
  store i16 0, ptr %43, align 2, !tbaa !20
  br label %90, !llvm.loop !29

.thread294:                                       ; preds = %104, %60
  %.1153.lcssa374 = phi i64 [ %.0152, %60 ], [ %.1153, %104 ]
  %.1147.lcssa369 = phi i64 [ %.0146, %60 ], [ %.1147, %104 ]
  %.1.lcssa364 = phi ptr [ %.0, %60 ], [ %.1, %104 ]
  %.lcssa = phi i64 [ %53, %60 ], [ %97, %104 ]
  %145 = load i16, ptr %23, align 8, !tbaa !16
  %146 = add i16 %145, 1
  store i16 %146, ptr %23, align 8, !tbaa !16
  store i16 0, ptr %43, align 2, !tbaa !20
  br label %.lr.ph.preheader

147:                                              ; preds = %19
  %.phi.trans.insert = getelementptr inbounds i8, ptr %23, i64 16
  %.promoted.pre = load i64, ptr %.phi.trans.insert, align 8, !tbaa !21
  %148 = icmp slt i64 %.promoted.pre, 0
  br i1 %148, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.thread294, %147
  %.3302 = phi ptr [ %.1.lcssa364, %.thread294 ], [ %3, %147 ]
  %.3149301 = phi i64 [ %.1147.lcssa369, %.thread294 ], [ %4, %147 ]
  %.3155300 = phi i64 [ %.1153.lcssa374, %.thread294 ], [ 0, %147 ]
  %.promoted299 = phi i64 [ %.lcssa, %.thread294 ], [ %.promoted.pre, %147 ]
  %149 = getelementptr inbounds i8, ptr %23, i64 16
  %150 = shl i64 %.promoted299, 1
  %151 = sub i64 %.3155300, %150
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %165
  %.4257 = phi ptr [ %166, %165 ], [ %.3302, %.lr.ph.preheader ]
  %.4150256 = phi i64 [ %167, %165 ], [ %.3149301, %.lr.ph.preheader ]
  %.4156255 = phi i64 [ %168, %165 ], [ %.3155300, %.lr.ph.preheader ]
  %152 = phi i64 [ %169, %165 ], [ %.promoted299, %.lr.ph.preheader ]
  %153 = icmp ult i64 %.4150256, 2
  br i1 %153, label %154, label %158

154:                                              ; preds = %.lr.ph
  %.not184 = icmp eq i64 %.4150256, 0
  br i1 %.not184, label %157, label %155

155:                                              ; preds = %154
  %156 = load i8, ptr %.4257, align 1, !tbaa !22
  %.not185 = icmp eq i8 %156, 0
  br i1 %.not185, label %157, label %.thread197

157:                                              ; preds = %154, %155
  br label %.thread197

158:                                              ; preds = %.lr.ph
  %159 = load i8, ptr %.4257, align 1, !tbaa !22
  %160 = icmp eq i8 %159, 0
  br i1 %160, label %161, label %.thread197

161:                                              ; preds = %158
  %162 = getelementptr inbounds i8, ptr %.4257, i64 1
  %163 = load i8, ptr %162, align 1, !tbaa !22
  %164 = icmp eq i8 %163, 0
  br i1 %164, label %165, label %.thread197

165:                                              ; preds = %161
  %166 = getelementptr inbounds i8, ptr %.4257, i64 2
  %167 = add i64 %.4150256, -2
  %168 = add i64 %.4156255, 2
  %169 = add i64 %152, 1
  store i64 %169, ptr %149, align 8, !tbaa !21
  %exitcond.not = icmp eq i64 %169, 0
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !31

._crit_edge:                                      ; preds = %165, %147
  %.4156.lcssa = phi i64 [ 0, %147 ], [ %151, %165 ]
  store i16 10, ptr %23, align 8, !tbaa !16
  br label %.thread197

.thread197:                                       ; preds = %50, %58, %64, %79, %102, %121, %108, %92, %161, %158, %.loopexit380, %.loopexit379, %130, %.loopexit, %._crit_edge, %19, %155, %27, %14, %157
  %.sroa.0139.5 = phi i32 [ 1, %157 ], [ 2, %14 ], [ %30, %27 ], [ 2, %155 ], [ 0, %19 ], [ 0, %._crit_edge ], [ %spec.select, %.loopexit380 ], [ 0, %.loopexit379 ], [ 1, %130 ], [ 2, %.loopexit ], [ 2, %158 ], [ 2, %161 ], [ 2, %50 ], [ 1, %58 ], [ 2, %64 ], [ 2, %79 ], [ 2, %121 ], [ 2, %108 ], [ 2, %92 ], [ 1, %102 ]
  %.sroa.22.5 = phi i64 [ %.4156255, %157 ], [ 0, %14 ], [ %31, %27 ], [ %.4156255, %155 ], [ 0, %19 ], [ %.4156.lcssa, %._crit_edge ], [ %.1153.lcssa372, %.loopexit380 ], [ %.1153.lcssa, %.loopexit379 ], [ %131, %130 ], [ %.1153377, %.loopexit ], [ %.4156255, %158 ], [ %.4156255, %161 ], [ %.0152, %50 ], [ %.0152, %58 ], [ %.0152, %64 ], [ %.0152, %79 ], [ %.1153, %102 ], [ %.1153, %121 ], [ %.1153, %108 ], [ %.1153, %92 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.0139.5, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.22.5, 1
  ret { i32, i64 } %.fca.1.insert
}

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

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

declare { i32, i64 } @ber_check_tags(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

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

declare i64 @ber_fetch_tag(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @asn_set_add(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.i64(i64, i64) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 152}
!6 = !{!"asn_TYPE_descriptor_s", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !10, i64 104, !7, i64 112, !10, i64 120, !7, i64 128, !7, i64 136, !10, i64 144, !7, i64 152}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !7, i64 136}
!12 = !{!7, !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"asn_SET_OF_specifics_s", !10, i64 0, !10, i64 4, !10, i64 8}
!15 = !{!14, !10, i64 4}
!16 = !{!17, !18, i64 0}
!17 = !{!"asn_struct_ctx_s", !18, i64 0, !18, i64 2, !10, i64 4, !7, i64 8, !19, i64 16}
!18 = !{!"short", !8, i64 0}
!19 = !{!"long", !8, i64 0}
!20 = !{!17, !18, i64 2}
!21 = !{!17, !19, i64 16}
!22 = !{!8, !8, i64 0}
!23 = !{!24, !10, i64 12}
!24 = !{!"asn_TYPE_member_s", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56}
!25 = !{!24, !7, i64 24}
!26 = !{!6, !7, i64 40}
!27 = !{!17, !7, i64 8}
!28 = !{!6, !7, i64 16}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.peeled.count", i32 1}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}


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