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

; 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_tag2member_s = type { i32, i32, i32, i32 }
%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_SEQUENCE_specifics_s = type { i32, i32, ptr, i32, ptr, i32, 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 } @SEQUENCE_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 i32, align 4
  %22 = alloca %struct.asn_dec_rval_s, align 8
  %23 = alloca i64, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i64, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca %struct.asn_TYPE_tag2member_s, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca %struct.asn_dec_rval_s, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = 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) #6
  %45 = load ptr, ptr %9, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %45, i32 0, i32 19
  %47 = load ptr, ptr %46, align 8, !tbaa !13
  store ptr %47, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %48 = load ptr, ptr %9, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %48, i32 0, i32 17
  %50 = load ptr, ptr %49, align 8, !tbaa !15
  store ptr %50, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %51 = load ptr, ptr %10, align 8, !tbaa !5
  %52 = load ptr, ptr %51, align 8, !tbaa !5
  store ptr %52, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  store i64 0, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %53 = load ptr, ptr %16, align 8, !tbaa !5
  %54 = icmp eq ptr %53, null
  br i1 %54, label %55, label %72

55:                                               ; preds = %6
  %56 = load ptr, ptr %14, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %56, i32 0, i32 0
  %58 = load i32, ptr %57, align 8, !tbaa !16
  %59 = sext i32 %58 to i64
  %60 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %59) #7
  %61 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %60, ptr %61, align 8, !tbaa !5
  store ptr %60, ptr %16, align 8, !tbaa !5
  %62 = load ptr, ptr %16, align 8, !tbaa !5
  %63 = icmp eq ptr %62, null
  br i1 %63, label %64, label %71

64:                                               ; preds = %55
  br label %65

65:                                               ; preds = %64
  %66 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %66, align 8, !tbaa !18
  %67 = load i64, ptr %19, align 8, !tbaa !9
  %68 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %67, ptr %68, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1133

69:                                               ; No predecessors!
  br label %70

70:                                               ; preds = %69
  br label %71

71:                                               ; preds = %70, %55
  br label %72

72:                                               ; preds = %71, %6
  %73 = load ptr, ptr %16, align 8, !tbaa !5
  %74 = load ptr, ptr %14, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %74, i32 0, i32 1
  %76 = load i32, ptr %75, align 4, !tbaa !21
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds i8, ptr %73, i64 %77
  store ptr %78, ptr %17, align 8, !tbaa !5
  %79 = load ptr, ptr %17, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %79, i32 0, i32 0
  %81 = load i16, ptr %80, align 8, !tbaa !22
  %82 = sext i16 %81 to i32
  switch i32 %82, label %1126 [
    i32 0, label %83
    i32 1, label %148
    i32 3, label %855
    i32 4, label %855
  ]

83:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #6
  %84 = load ptr, ptr %8, align 8, !tbaa !5
  %85 = load ptr, ptr %9, align 8, !tbaa !5
  %86 = load ptr, ptr %17, align 8, !tbaa !5
  %87 = load ptr, ptr %11, align 8, !tbaa !5
  %88 = load i64, ptr %12, align 8, !tbaa !9
  %89 = load i32, ptr %13, align 4, !tbaa !11
  %90 = load ptr, ptr %17, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %90, i32 0, i32 4
  %92 = call { i32, i64 } @ber_check_tags(ptr noundef %84, ptr noundef %85, ptr noundef %86, ptr noundef %87, i64 noundef %88, i32 noundef %89, i32 noundef 1, ptr noundef %91, ptr noundef null)
  %93 = getelementptr inbounds { i32, i64 }, ptr %22, i32 0, i32 0
  %94 = extractvalue { i32, i64 } %92, 0
  store i32 %94, ptr %93, align 8
  %95 = getelementptr inbounds { i32, i64 }, ptr %22, i32 0, i32 1
  %96 = extractvalue { i32, i64 } %92, 1
  store i64 %96, ptr %95, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %22, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #6
  %97 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  %98 = load i32, ptr %97, align 8, !tbaa !18
  %99 = icmp ne i32 %98, 0
  br i1 %99, label %100, label %101

100:                                              ; preds = %83
  store i32 1, ptr %21, align 4
  br label %1133

101:                                              ; preds = %83
  %102 = load ptr, ptr %17, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %102, i32 0, i32 4
  %104 = load i64, ptr %103, align 8, !tbaa !26
  %105 = icmp sge i64 %104, 0
  br i1 %105, label %106, label %113

106:                                              ; preds = %101
  %107 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %108 = load i64, ptr %107, align 8, !tbaa !20
  %109 = load ptr, ptr %17, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %109, i32 0, i32 4
  %111 = load i64, ptr %110, align 8, !tbaa !26
  %112 = add i64 %111, %108
  store i64 %112, ptr %110, align 8, !tbaa !26
  br label %113

113:                                              ; preds = %106, %101
  br label %114

114:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %115 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %116 = load i64, ptr %115, align 8, !tbaa !20
  store i64 %116, ptr %23, align 8, !tbaa !9
  %117 = load ptr, ptr %11, align 8, !tbaa !5
  %118 = load i64, ptr %23, align 8, !tbaa !9
  %119 = getelementptr inbounds i8, ptr %117, i64 %118
  store ptr %119, ptr %11, align 8, !tbaa !5
  %120 = load i64, ptr %23, align 8, !tbaa !9
  %121 = load i64, ptr %12, align 8, !tbaa !9
  %122 = sub i64 %121, %120
  store i64 %122, ptr %12, align 8, !tbaa !9
  %123 = load ptr, ptr %17, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %123, i32 0, i32 4
  %125 = load i64, ptr %124, align 8, !tbaa !26
  %126 = icmp sge i64 %125, 0
  br i1 %126, label %127, label %133

127:                                              ; preds = %114
  %128 = load i64, ptr %23, align 8, !tbaa !9
  %129 = load ptr, ptr %17, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %129, i32 0, i32 4
  %131 = load i64, ptr %130, align 8, !tbaa !26
  %132 = sub i64 %131, %128
  store i64 %132, ptr %130, align 8, !tbaa !26
  br label %133

133:                                              ; preds = %127, %114
  %134 = load i64, ptr %23, align 8, !tbaa !9
  %135 = load i64, ptr %19, align 8, !tbaa !9
  %136 = add i64 %135, %134
  store i64 %136, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %137

137:                                              ; preds = %133
  br label %138

138:                                              ; preds = %137
  br label %139

139:                                              ; preds = %138
  %140 = load ptr, ptr %17, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %140, i32 0, i32 0
  %142 = load i16, ptr %141, align 8, !tbaa !22
  %143 = add i16 %142, 1
  store i16 %143, ptr %141, align 8, !tbaa !22
  %144 = load ptr, ptr %17, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %144, i32 0, i32 1
  store i16 0, ptr %145, align 2, !tbaa !27
  br label %146

146:                                              ; preds = %139
  br label %147

147:                                              ; preds = %146
  br label %148

148:                                              ; preds = %147, %72
  %149 = load ptr, ptr %17, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %149, i32 0, i32 1
  %151 = load i16, ptr %150, align 2, !tbaa !27
  %152 = sext i16 %151 to i32
  %153 = ashr i32 %152, 1
  store i32 %153, ptr %20, align 4, !tbaa !11
  br label %154

154:                                              ; preds = %839, %148
  %155 = load i32, ptr %20, align 4, !tbaa !11
  %156 = load ptr, ptr %9, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %156, i32 0, i32 18
  %158 = load i32, ptr %157, align 8, !tbaa !28
  %159 = icmp slt i32 %155, %158
  br i1 %159, label %160, label %851

160:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %161 = load ptr, ptr %17, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %161, i32 0, i32 1
  %163 = load i16, ptr %162, align 2, !tbaa !27
  %164 = sext i16 %163 to i32
  %165 = and i32 %164, 1
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %167, label %168

167:                                              ; preds = %160
  br label %680

168:                                              ; preds = %160
  %169 = load ptr, ptr %17, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %169, i32 0, i32 4
  %171 = load i64, ptr %170, align 8, !tbaa !26
  %172 = icmp eq i64 %171, 0
  br i1 %172, label %173, label %218

173:                                              ; preds = %168
  %174 = load i32, ptr %20, align 4, !tbaa !11
  %175 = load ptr, ptr %15, align 8, !tbaa !5
  %176 = load i32, ptr %20, align 4, !tbaa !11
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %175, i64 %177
  %179 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %178, i32 0, i32 1
  %180 = load i32, ptr %179, align 4, !tbaa !29
  %181 = add nsw i32 %174, %180
  %182 = load ptr, ptr %9, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %182, i32 0, i32 18
  %184 = load i32, ptr %183, align 8, !tbaa !28
  %185 = icmp eq i32 %181, %184
  br i1 %185, label %206, label %186

186:                                              ; preds = %173
  %187 = load i32, ptr %20, align 4, !tbaa !11
  %188 = load ptr, ptr %14, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %188, i32 0, i32 7
  %190 = load i32, ptr %189, align 8, !tbaa !31
  %191 = icmp sgt i32 %187, %190
  br i1 %191, label %192, label %218

192:                                              ; preds = %186
  %193 = load i32, ptr %20, align 4, !tbaa !11
  %194 = load ptr, ptr %14, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %194, i32 0, i32 8
  %196 = load i32, ptr %195, align 4, !tbaa !32
  %197 = icmp slt i32 %193, %196
  br i1 %197, label %198, label %218

198:                                              ; preds = %192
  %199 = load ptr, ptr %14, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %199, i32 0, i32 8
  %201 = load i32, ptr %200, align 4, !tbaa !32
  %202 = load ptr, ptr %9, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %202, i32 0, i32 18
  %204 = load i32, ptr %203, align 8, !tbaa !28
  %205 = icmp sgt i32 %201, %204
  br i1 %205, label %206, label %218

206:                                              ; preds = %198, %173
  br label %207

207:                                              ; preds = %206
  %208 = load ptr, ptr %17, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %208, i32 0, i32 0
  store i16 10, ptr %209, align 8, !tbaa !22
  br label %210

210:                                              ; preds = %207
  br label %211

211:                                              ; preds = %210
  br label %212

212:                                              ; preds = %211
  %213 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %213, align 8, !tbaa !18
  %214 = load i64, ptr %19, align 8, !tbaa !9
  %215 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %214, ptr %215, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %836

216:                                              ; No predecessors!
  br label %217

217:                                              ; preds = %216
  br label %218

218:                                              ; preds = %217, %198, %192, %186, %168
  %219 = load ptr, ptr %11, align 8, !tbaa !5
  %220 = load i64, ptr %12, align 8, !tbaa !9
  %221 = load ptr, ptr %17, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %221, i32 0, i32 4
  %223 = load i64, ptr %222, align 8, !tbaa !26
  %224 = icmp ult i64 %220, %223
  br i1 %224, label %225, label %227

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

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

231:                                              ; preds = %227, %225
  %232 = phi i64 [ %226, %225 ], [ %230, %227 ]
  %233 = call i64 @ber_fetch_tag(ptr noundef %219, i64 noundef %232, ptr noundef %18)
  store i64 %233, ptr %26, align 8, !tbaa !9
  %234 = load i64, ptr %26, align 8, !tbaa !9
  switch i64 %234, label %267 [
    i64 0, label %235
    i64 -1, label %260
  ]

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

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

246:                                              ; preds = %240, %235
  br label %247

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

251:                                              ; No predecessors!
  br label %252

252:                                              ; preds = %251
  br label %253

253:                                              ; preds = %252, %240
  br label %254

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

258:                                              ; No predecessors!
  br label %259

259:                                              ; preds = %258
  br label %260

260:                                              ; preds = %259, %231
  br label %261

261:                                              ; preds = %260
  %262 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %262, align 8, !tbaa !18
  %263 = load i64, ptr %19, align 8, !tbaa !9
  %264 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %263, ptr %264, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %836

265:                                              ; No predecessors!
  br label %266

266:                                              ; preds = %265
  br label %267

267:                                              ; preds = %266, %231
  %268 = load ptr, ptr %17, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %268, i32 0, i32 4
  %270 = load i64, ptr %269, align 8, !tbaa !26
  %271 = icmp slt i64 %270, 0
  br i1 %271, label %272, label %362

272:                                              ; preds = %267
  %273 = load ptr, ptr %11, align 8, !tbaa !5
  %274 = getelementptr inbounds i8, ptr %273, i64 0
  %275 = load i8, ptr %274, align 1, !tbaa !33
  %276 = zext i8 %275 to i32
  %277 = icmp eq i32 %276, 0
  br i1 %277, label %278, label %362

278:                                              ; preds = %272
  %279 = load i64, ptr %12, align 8, !tbaa !9
  %280 = load ptr, ptr %17, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %280, i32 0, i32 4
  %282 = load i64, ptr %281, align 8, !tbaa !26
  %283 = icmp ult i64 %279, %282
  br i1 %283, label %284, label %286

284:                                              ; preds = %278
  %285 = load i64, ptr %12, align 8, !tbaa !9
  br label %290

286:                                              ; preds = %278
  %287 = load ptr, ptr %17, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %287, i32 0, i32 4
  %289 = load i64, ptr %288, align 8, !tbaa !26
  br label %290

290:                                              ; preds = %286, %284
  %291 = phi i64 [ %285, %284 ], [ %289, %286 ]
  %292 = icmp ult i64 %291, 2
  br i1 %292, label %293, label %319

293:                                              ; preds = %290
  %294 = load ptr, ptr %17, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %294, i32 0, i32 4
  %296 = load i64, ptr %295, align 8, !tbaa !26
  %297 = icmp sge i64 %296, 0
  br i1 %297, label %298, label %311

298:                                              ; preds = %293
  %299 = load ptr, ptr %17, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %299, i32 0, i32 4
  %301 = load i64, ptr %300, align 8, !tbaa !26
  %302 = load i64, ptr %12, align 8, !tbaa !9
  %303 = icmp ule i64 %301, %302
  br i1 %303, label %304, label %311

304:                                              ; preds = %298
  br label %305

305:                                              ; preds = %304
  %306 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %306, align 8, !tbaa !18
  %307 = load i64, ptr %19, align 8, !tbaa !9
  %308 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %307, ptr %308, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %836

309:                                              ; No predecessors!
  br label %310

310:                                              ; preds = %309
  br label %318

311:                                              ; preds = %298, %293
  br label %312

312:                                              ; preds = %311
  %313 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %313, align 8, !tbaa !18
  %314 = load i64, ptr %19, align 8, !tbaa !9
  %315 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %314, ptr %315, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %836

316:                                              ; No predecessors!
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317, %310
  br label %361

319:                                              ; preds = %290
  %320 = load ptr, ptr %11, align 8, !tbaa !5
  %321 = getelementptr inbounds i8, ptr %320, i64 1
  %322 = load i8, ptr %321, align 1, !tbaa !33
  %323 = zext i8 %322 to i32
  %324 = icmp eq i32 %323, 0
  br i1 %324, label %325, label %360

325:                                              ; preds = %319
  %326 = load i32, ptr %20, align 4, !tbaa !11
  %327 = load ptr, ptr %15, align 8, !tbaa !5
  %328 = load i32, ptr %20, align 4, !tbaa !11
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %327, i64 %329
  %331 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %330, i32 0, i32 1
  %332 = load i32, ptr %331, align 4, !tbaa !29
  %333 = add nsw i32 %326, %332
  %334 = load ptr, ptr %9, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %334, i32 0, i32 18
  %336 = load i32, ptr %335, align 8, !tbaa !28
  %337 = icmp eq i32 %333, %336
  br i1 %337, label %358, label %338

338:                                              ; preds = %325
  %339 = load i32, ptr %20, align 4, !tbaa !11
  %340 = load ptr, ptr %14, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %340, i32 0, i32 7
  %342 = load i32, ptr %341, align 8, !tbaa !31
  %343 = icmp sgt i32 %339, %342
  br i1 %343, label %344, label %359

344:                                              ; preds = %338
  %345 = load i32, ptr %20, align 4, !tbaa !11
  %346 = load ptr, ptr %14, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %346, i32 0, i32 8
  %348 = load i32, ptr %347, align 4, !tbaa !32
  %349 = icmp slt i32 %345, %348
  br i1 %349, label %350, label %359

350:                                              ; preds = %344
  %351 = load ptr, ptr %14, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %351, i32 0, i32 8
  %353 = load i32, ptr %352, align 4, !tbaa !32
  %354 = load ptr, ptr %9, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %354, i32 0, i32 18
  %356 = load i32, ptr %355, align 8, !tbaa !28
  %357 = icmp sgt i32 %353, %356
  br i1 %357, label %358, label %359

358:                                              ; preds = %350, %325
  store i32 28, ptr %21, align 4
  br label %836

359:                                              ; preds = %350, %344, %338
  br label %360

360:                                              ; preds = %359, %319
  br label %361

361:                                              ; preds = %360, %318
  br label %362

362:                                              ; preds = %361, %272, %267
  store i32 0, ptr %28, align 4, !tbaa !11
  %363 = load i32, ptr %20, align 4, !tbaa !11
  %364 = load ptr, ptr %15, align 8, !tbaa !5
  %365 = load i32, ptr %20, align 4, !tbaa !11
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %364, i64 %366
  %368 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %367, i32 0, i32 1
  %369 = load i32, ptr %368, align 4, !tbaa !29
  %370 = add nsw i32 %363, %369
  %371 = add nsw i32 %370, 1
  store i32 %371, ptr %27, align 4, !tbaa !11
  %372 = load i32, ptr %27, align 4, !tbaa !11
  %373 = load ptr, ptr %9, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %373, i32 0, i32 18
  %375 = load i32, ptr %374, align 8, !tbaa !28
  %376 = icmp sgt i32 %372, %375
  br i1 %376, label %377, label %381

377:                                              ; preds = %362
  %378 = load ptr, ptr %9, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %378, i32 0, i32 18
  %380 = load i32, ptr %379, align 8, !tbaa !28
  store i32 %380, ptr %27, align 4, !tbaa !11
  br label %390

381:                                              ; preds = %362
  %382 = load i32, ptr %27, align 4, !tbaa !11
  %383 = load i32, ptr %20, align 4, !tbaa !11
  %384 = sub nsw i32 %382, %383
  %385 = icmp sgt i32 %384, 8
  br i1 %385, label %386, label %389

386:                                              ; preds = %381
  %387 = load i32, ptr %20, align 4, !tbaa !11
  %388 = add nsw i32 %387, 8
  store i32 %388, ptr %27, align 4, !tbaa !11
  store i32 1, ptr %28, align 4, !tbaa !11
  br label %389

389:                                              ; preds = %386, %381
  br label %390

390:                                              ; preds = %389, %377
  %391 = load i32, ptr %20, align 4, !tbaa !11
  store i32 %391, ptr %29, align 4, !tbaa !11
  br label %392

392:                                              ; preds = %442, %390
  %393 = load i32, ptr %29, align 4, !tbaa !11
  %394 = load i32, ptr %27, align 4, !tbaa !11
  %395 = icmp slt i32 %393, %394
  br i1 %395, label %396, label %445

396:                                              ; preds = %392
  %397 = load i32, ptr %18, align 4, !tbaa !11
  %398 = load ptr, ptr %15, align 8, !tbaa !5
  %399 = load i32, ptr %29, align 4, !tbaa !11
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %398, i64 %400
  %402 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %401, i32 0, i32 3
  %403 = load i32, ptr %402, align 4, !tbaa !34
  %404 = icmp eq i32 %397, %403
  br i1 %404, label %405, label %413

405:                                              ; preds = %396
  %406 = load i32, ptr %29, align 4, !tbaa !11
  store i32 %406, ptr %20, align 4, !tbaa !11
  %407 = load i32, ptr %20, align 4, !tbaa !11
  %408 = mul nsw i32 2, %407
  %409 = add nsw i32 1, %408
  %410 = trunc i32 %409 to i16
  %411 = load ptr, ptr %17, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %411, i32 0, i32 1
  store i16 %410, ptr %412, align 2, !tbaa !27
  br label %680

413:                                              ; preds = %396
  %414 = load ptr, ptr %15, align 8, !tbaa !5
  %415 = load i32, ptr %29, align 4, !tbaa !11
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %414, i64 %416
  %418 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %417, i32 0, i32 0
  %419 = load i32, ptr %418, align 8, !tbaa !35
  %420 = and i32 %419, 2
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %422, label %430

422:                                              ; preds = %413
  %423 = load i32, ptr %29, align 4, !tbaa !11
  store i32 %423, ptr %20, align 4, !tbaa !11
  %424 = load i32, ptr %20, align 4, !tbaa !11
  %425 = mul nsw i32 2, %424
  %426 = add nsw i32 1, %425
  %427 = trunc i32 %426 to i16
  %428 = load ptr, ptr %17, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %428, i32 0, i32 1
  store i16 %427, ptr %429, align 2, !tbaa !27
  br label %680

430:                                              ; preds = %413
  %431 = load ptr, ptr %15, align 8, !tbaa !5
  %432 = load i32, ptr %29, align 4, !tbaa !11
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %431, i64 %433
  %435 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %434, i32 0, i32 3
  %436 = load i32, ptr %435, align 4, !tbaa !34
  %437 = icmp eq i32 %436, -1
  br i1 %437, label %438, label %439

438:                                              ; preds = %430
  store i32 1, ptr %28, align 4, !tbaa !11
  br label %445

439:                                              ; preds = %430
  br label %440

440:                                              ; preds = %439
  br label %441

441:                                              ; preds = %440
  br label %442

442:                                              ; preds = %441
  %443 = load i32, ptr %29, align 4, !tbaa !11
  %444 = add nsw i32 %443, 1
  store i32 %444, ptr %29, align 4, !tbaa !11
  br label %392, !llvm.loop !36

445:                                              ; preds = %438, %392
  %446 = load i32, ptr %28, align 4, !tbaa !11
  %447 = icmp ne i32 %446, 0
  br i1 %447, label %448, label %530

448:                                              ; preds = %445
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #6
  %449 = load i32, ptr %18, align 4, !tbaa !11
  %450 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %31, i32 0, i32 0
  store i32 %449, ptr %450, align 4, !tbaa !38
  %451 = load i32, ptr %20, align 4, !tbaa !11
  %452 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %31, i32 0, i32 1
  store i32 %451, ptr %452, align 4, !tbaa !40
  %453 = load ptr, ptr %14, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %453, i32 0, i32 2
  %455 = load ptr, ptr %454, align 8, !tbaa !41
  %456 = load ptr, ptr %14, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %456, i32 0, i32 3
  %458 = load i32, ptr %457, align 8, !tbaa !42
  %459 = sext i32 %458 to i64
  %460 = call ptr @bsearch(ptr noundef %31, ptr noundef %455, i64 noundef %459, i64 noundef 16, ptr noundef @_t2e_cmp)
  store ptr %460, ptr %30, align 8, !tbaa !5
  %461 = load ptr, ptr %30, align 8, !tbaa !5
  %462 = icmp ne ptr %461, null
  br i1 %462, label %463, label %525

463:                                              ; preds = %448
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  store ptr null, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  %464 = load i32, ptr %20, align 4, !tbaa !11
  %465 = load ptr, ptr %15, align 8, !tbaa !5
  %466 = load i32, ptr %20, align 4, !tbaa !11
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %465, i64 %467
  %469 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %468, i32 0, i32 1
  %470 = load i32, ptr %469, align 4, !tbaa !29
  %471 = add nsw i32 %464, %470
  store i32 %471, ptr %35, align 4, !tbaa !11
  %472 = load ptr, ptr %30, align 8, !tbaa !5
  %473 = load ptr, ptr %30, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %473, i32 0, i32 2
  %475 = load i32, ptr %474, align 4, !tbaa !43
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %472, i64 %476
  store ptr %477, ptr %33, align 8, !tbaa !5
  %478 = load ptr, ptr %30, align 8, !tbaa !5
  %479 = load ptr, ptr %30, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %479, i32 0, i32 3
  %481 = load i32, ptr %480, align 4, !tbaa !44
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %478, i64 %482
  store ptr %483, ptr %34, align 8, !tbaa !5
  %484 = load ptr, ptr %33, align 8, !tbaa !5
  store ptr %484, ptr %30, align 8, !tbaa !5
  br label %485

485:                                              ; preds = %505, %463
  %486 = load ptr, ptr %30, align 8, !tbaa !5
  %487 = load ptr, ptr %34, align 8, !tbaa !5
  %488 = icmp ule ptr %486, %487
  br i1 %488, label %489, label %508

489:                                              ; preds = %485
  %490 = load ptr, ptr %30, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %490, i32 0, i32 1
  %492 = load i32, ptr %491, align 4, !tbaa !40
  %493 = load i32, ptr %35, align 4, !tbaa !11
  %494 = icmp sgt i32 %492, %493
  br i1 %494, label %495, label %496

495:                                              ; preds = %489
  br label %508

496:                                              ; preds = %489
  %497 = load ptr, ptr %30, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %497, i32 0, i32 1
  %499 = load i32, ptr %498, align 4, !tbaa !40
  %500 = load i32, ptr %20, align 4, !tbaa !11
  %501 = icmp slt i32 %499, %500
  br i1 %501, label %502, label %503

502:                                              ; preds = %496
  br label %505

503:                                              ; preds = %496
  %504 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %504, ptr %32, align 8, !tbaa !5
  br label %505

505:                                              ; preds = %503, %502
  %506 = load ptr, ptr %30, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %506, i32 1
  store ptr %507, ptr %30, align 8, !tbaa !5
  br label %485, !llvm.loop !45

508:                                              ; preds = %495, %485
  %509 = load ptr, ptr %32, align 8, !tbaa !5
  %510 = icmp ne ptr %509, null
  br i1 %510, label %511, label %521

511:                                              ; preds = %508
  %512 = load ptr, ptr %32, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %512, i32 0, i32 1
  %514 = load i32, ptr %513, align 4, !tbaa !40
  store i32 %514, ptr %20, align 4, !tbaa !11
  %515 = load i32, ptr %20, align 4, !tbaa !11
  %516 = mul nsw i32 2, %515
  %517 = add nsw i32 1, %516
  %518 = trunc i32 %517 to i16
  %519 = load ptr, ptr %17, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %519, i32 0, i32 1
  store i16 %518, ptr %520, align 2, !tbaa !27
  store i32 12, ptr %21, align 4
  br label %522

521:                                              ; preds = %508
  store i32 0, ptr %21, align 4
  br label %522

522:                                              ; preds = %521, %511
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  %523 = load i32, ptr %21, align 4
  switch i32 %523, label %527 [
    i32 0, label %524
  ]

524:                                              ; preds = %522
  br label %525

525:                                              ; preds = %524, %448
  %526 = load i32, ptr %27, align 4, !tbaa !11
  store i32 %526, ptr %29, align 4, !tbaa !11
  store i32 0, ptr %21, align 4
  br label %527

527:                                              ; preds = %525, %522
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  %528 = load i32, ptr %21, align 4
  switch i32 %528, label %836 [
    i32 0, label %529
    i32 12, label %680
  ]

529:                                              ; preds = %527
  br label %530

530:                                              ; preds = %529, %445
  %531 = load i32, ptr %29, align 4, !tbaa !11
  %532 = load i32, ptr %27, align 4, !tbaa !11
  %533 = icmp eq i32 %531, %532
  br i1 %533, label %534, label %673

534:                                              ; preds = %530
  %535 = load i32, ptr %20, align 4, !tbaa !11
  %536 = load ptr, ptr %15, align 8, !tbaa !5
  %537 = load i32, ptr %20, align 4, !tbaa !11
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %536, i64 %538
  %540 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %539, i32 0, i32 1
  %541 = load i32, ptr %540, align 4, !tbaa !29
  %542 = add nsw i32 %535, %541
  %543 = load ptr, ptr %14, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %543, i32 0, i32 7
  %545 = load i32, ptr %544, align 8, !tbaa !31
  %546 = icmp sgt i32 %542, %545
  br i1 %546, label %547, label %560

547:                                              ; preds = %534
  %548 = load i32, ptr %20, align 4, !tbaa !11
  %549 = load ptr, ptr %15, align 8, !tbaa !5
  %550 = load i32, ptr %20, align 4, !tbaa !11
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %549, i64 %551
  %553 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %552, i32 0, i32 1
  %554 = load i32, ptr %553, align 4, !tbaa !29
  %555 = add nsw i32 %548, %554
  %556 = load ptr, ptr %14, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %556, i32 0, i32 8
  %558 = load i32, ptr %557, align 4, !tbaa !32
  %559 = icmp slt i32 %555, %558
  br i1 %559, label %567, label %560

560:                                              ; preds = %547, %534
  br label %561

561:                                              ; preds = %560
  %562 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %562, align 8, !tbaa !18
  %563 = load i64, ptr %19, align 8, !tbaa !9
  %564 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %563, ptr %564, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %836

565:                                              ; No predecessors!
  br label %566

566:                                              ; preds = %565
  br label %672

567:                                              ; preds = %547
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %568 = load ptr, ptr %15, align 8, !tbaa !5
  %569 = load i32, ptr %20, align 4, !tbaa !11
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %568, i64 %570
  %572 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %571, i32 0, i32 1
  %573 = load i32, ptr %572, align 4, !tbaa !29
  %574 = load i32, ptr %20, align 4, !tbaa !11
  %575 = add nsw i32 %574, %573
  store i32 %575, ptr %20, align 4, !tbaa !11
  %576 = load ptr, ptr %8, align 8, !tbaa !5
  %577 = load ptr, ptr %11, align 8, !tbaa !5
  %578 = load i8, ptr %577, align 1, !tbaa !33
  %579 = zext i8 %578 to i32
  %580 = and i32 %579, 32
  %581 = icmp ne i32 %580, 0
  %582 = zext i1 %581 to i64
  %583 = select i1 %581, i32 1, i32 0
  %584 = load ptr, ptr %11, align 8, !tbaa !5
  %585 = load i64, ptr %26, align 8, !tbaa !9
  %586 = getelementptr inbounds i8, ptr %584, i64 %585
  %587 = load i64, ptr %12, align 8, !tbaa !9
  %588 = load ptr, ptr %17, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %588, i32 0, i32 4
  %590 = load i64, ptr %589, align 8, !tbaa !26
  %591 = icmp ult i64 %587, %590
  br i1 %591, label %592, label %594

592:                                              ; preds = %567
  %593 = load i64, ptr %12, align 8, !tbaa !9
  br label %598

594:                                              ; preds = %567
  %595 = load ptr, ptr %17, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %595, i32 0, i32 4
  %597 = load i64, ptr %596, align 8, !tbaa !26
  br label %598

598:                                              ; preds = %594, %592
  %599 = phi i64 [ %593, %592 ], [ %597, %594 ]
  %600 = load i64, ptr %26, align 8, !tbaa !9
  %601 = sub i64 %599, %600
  %602 = call i64 @ber_skip_length(ptr noundef %576, i32 noundef %583, ptr noundef %586, i64 noundef %601)
  store i64 %602, ptr %36, align 8, !tbaa !9
  %603 = load i64, ptr %36, align 8, !tbaa !9
  switch i64 %603, label %636 [
    i64 0, label %604
    i64 -1, label %629
  ]

604:                                              ; preds = %598
  %605 = load ptr, ptr %17, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %605, i32 0, i32 4
  %607 = load i64, ptr %606, align 8, !tbaa !26
  %608 = icmp sge i64 %607, 0
  br i1 %608, label %609, label %615

609:                                              ; preds = %604
  %610 = load ptr, ptr %17, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %610, i32 0, i32 4
  %612 = load i64, ptr %611, align 8, !tbaa !26
  %613 = load i64, ptr %12, align 8, !tbaa !9
  %614 = icmp ule i64 %612, %613
  br i1 %614, label %622, label %615

615:                                              ; preds = %609, %604
  br label %616

616:                                              ; preds = %615
  %617 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %617, align 8, !tbaa !18
  %618 = load i64, ptr %19, align 8, !tbaa !9
  %619 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %618, ptr %619, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %671

620:                                              ; No predecessors!
  br label %621

621:                                              ; preds = %620
  br label %622

622:                                              ; preds = %621, %609
  br label %623

623:                                              ; preds = %622
  %624 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %624, align 8, !tbaa !18
  %625 = load i64, ptr %19, align 8, !tbaa !9
  %626 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %625, ptr %626, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %671

627:                                              ; No predecessors!
  br label %628

628:                                              ; preds = %627
  br label %629

629:                                              ; preds = %628, %598
  br label %630

630:                                              ; preds = %629
  %631 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %631, align 8, !tbaa !18
  %632 = load i64, ptr %19, align 8, !tbaa !9
  %633 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %632, ptr %633, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %671

634:                                              ; No predecessors!
  br label %635

635:                                              ; preds = %634
  br label %636

636:                                              ; preds = %635, %598
  br label %637

637:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %638 = load i64, ptr %36, align 8, !tbaa !9
  %639 = load i64, ptr %26, align 8, !tbaa !9
  %640 = add nsw i64 %638, %639
  store i64 %640, ptr %37, align 8, !tbaa !9
  %641 = load ptr, ptr %11, align 8, !tbaa !5
  %642 = load i64, ptr %37, align 8, !tbaa !9
  %643 = getelementptr inbounds i8, ptr %641, i64 %642
  store ptr %643, ptr %11, align 8, !tbaa !5
  %644 = load i64, ptr %37, align 8, !tbaa !9
  %645 = load i64, ptr %12, align 8, !tbaa !9
  %646 = sub i64 %645, %644
  store i64 %646, ptr %12, align 8, !tbaa !9
  %647 = load ptr, ptr %17, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %647, i32 0, i32 4
  %649 = load i64, ptr %648, align 8, !tbaa !26
  %650 = icmp sge i64 %649, 0
  br i1 %650, label %651, label %657

651:                                              ; preds = %637
  %652 = load i64, ptr %37, align 8, !tbaa !9
  %653 = load ptr, ptr %17, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %653, i32 0, i32 4
  %655 = load i64, ptr %654, align 8, !tbaa !26
  %656 = sub i64 %655, %652
  store i64 %656, ptr %654, align 8, !tbaa !26
  br label %657

657:                                              ; preds = %651, %637
  %658 = load i64, ptr %37, align 8, !tbaa !9
  %659 = load i64, ptr %19, align 8, !tbaa !9
  %660 = add i64 %659, %658
  store i64 %660, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %661

661:                                              ; preds = %657
  br label %662

662:                                              ; preds = %661
  %663 = load ptr, ptr %17, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %663, i32 0, i32 1
  %665 = load i16, ptr %664, align 2, !tbaa !27
  %666 = sext i16 %665 to i32
  %667 = sub nsw i32 %666, 2
  %668 = trunc i32 %667 to i16
  store i16 %668, ptr %664, align 2, !tbaa !27
  %669 = load i32, ptr %20, align 4, !tbaa !11
  %670 = add nsw i32 %669, -1
  store i32 %670, ptr %20, align 4, !tbaa !11
  store i32 11, ptr %21, align 4
  br label %671

671:                                              ; preds = %662, %630, %623, %616
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %836

672:                                              ; preds = %566
  br label %673

673:                                              ; preds = %672, %530
  %674 = load ptr, ptr %17, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %674, i32 0, i32 1
  %676 = load i16, ptr %675, align 2, !tbaa !27
  %677 = sext i16 %676 to i32
  %678 = or i32 %677, 1
  %679 = trunc i32 %678 to i16
  store i16 %679, ptr %675, align 2, !tbaa !27
  br label %680

680:                                              ; preds = %673, %527, %422, %405, %167
  %681 = load ptr, ptr %15, align 8, !tbaa !5
  %682 = load i32, ptr %20, align 4, !tbaa !11
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %681, i64 %683
  %685 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %684, i32 0, i32 0
  %686 = load i32, ptr %685, align 8, !tbaa !35
  %687 = and i32 %686, 1
  %688 = icmp ne i32 %687, 0
  br i1 %688, label %689, label %699

689:                                              ; preds = %680
  %690 = load ptr, ptr %16, align 8, !tbaa !5
  %691 = load ptr, ptr %15, align 8, !tbaa !5
  %692 = load i32, ptr %20, align 4, !tbaa !11
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %691, i64 %693
  %695 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %694, i32 0, i32 2
  %696 = load i32, ptr %695, align 8, !tbaa !46
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds i8, ptr %690, i64 %697
  store ptr %698, ptr %25, align 8, !tbaa !5
  br label %709

699:                                              ; preds = %680
  %700 = load ptr, ptr %16, align 8, !tbaa !5
  %701 = load ptr, ptr %15, align 8, !tbaa !5
  %702 = load i32, ptr %20, align 4, !tbaa !11
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %701, i64 %703
  %705 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %704, i32 0, i32 2
  %706 = load i32, ptr %705, align 8, !tbaa !46
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds i8, ptr %700, i64 %707
  store ptr %708, ptr %24, align 8, !tbaa !5
  store ptr %24, ptr %25, align 8, !tbaa !5
  br label %709

709:                                              ; preds = %699, %689
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #6
  %710 = load ptr, ptr %15, align 8, !tbaa !5
  %711 = load i32, ptr %20, align 4, !tbaa !11
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %710, i64 %712
  %714 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %713, i32 0, i32 5
  %715 = load ptr, ptr %714, align 8, !tbaa !47
  %716 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %715, i32 0, i32 5
  %717 = load ptr, ptr %716, align 8, !tbaa !48
  %718 = load ptr, ptr %8, align 8, !tbaa !5
  %719 = load ptr, ptr %15, align 8, !tbaa !5
  %720 = load i32, ptr %20, align 4, !tbaa !11
  %721 = sext i32 %720 to i64
  %722 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %719, i64 %721
  %723 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %722, i32 0, i32 5
  %724 = load ptr, ptr %723, align 8, !tbaa !47
  %725 = load ptr, ptr %25, align 8, !tbaa !5
  %726 = load ptr, ptr %11, align 8, !tbaa !5
  %727 = load i64, ptr %12, align 8, !tbaa !9
  %728 = load ptr, ptr %17, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %728, i32 0, i32 4
  %730 = load i64, ptr %729, align 8, !tbaa !26
  %731 = icmp ult i64 %727, %730
  br i1 %731, label %732, label %734

732:                                              ; preds = %709
  %733 = load i64, ptr %12, align 8, !tbaa !9
  br label %738

734:                                              ; preds = %709
  %735 = load ptr, ptr %17, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %735, i32 0, i32 4
  %737 = load i64, ptr %736, align 8, !tbaa !26
  br label %738

738:                                              ; preds = %734, %732
  %739 = phi i64 [ %733, %732 ], [ %737, %734 ]
  %740 = load ptr, ptr %15, align 8, !tbaa !5
  %741 = load i32, ptr %20, align 4, !tbaa !11
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %740, i64 %742
  %744 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %743, i32 0, i32 4
  %745 = load i32, ptr %744, align 8, !tbaa !49
  %746 = call { i32, i64 } %717(ptr noundef %718, ptr noundef %724, ptr noundef %725, ptr noundef %726, i64 noundef %739, i32 noundef %745)
  %747 = getelementptr inbounds { i32, i64 }, ptr %38, i32 0, i32 0
  %748 = extractvalue { i32, i64 } %746, 0
  store i32 %748, ptr %747, align 8
  %749 = getelementptr inbounds { i32, i64 }, ptr %38, i32 0, i32 1
  %750 = extractvalue { i32, i64 } %746, 1
  store i64 %750, ptr %749, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %38, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #6
  %751 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  %752 = load i32, ptr %751, align 8, !tbaa !18
  switch i32 %752, label %810 [
    i32 0, label %810
    i32 1, label %753
    i32 2, label %803
  ]

753:                                              ; preds = %738
  %754 = load ptr, ptr %17, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %754, i32 0, i32 4
  %756 = load i64, ptr %755, align 8, !tbaa !26
  %757 = icmp sge i64 %756, 0
  br i1 %757, label %758, label %764

758:                                              ; preds = %753
  %759 = load ptr, ptr %17, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %759, i32 0, i32 4
  %761 = load i64, ptr %760, align 8, !tbaa !26
  %762 = load i64, ptr %12, align 8, !tbaa !9
  %763 = icmp ule i64 %761, %762
  br i1 %763, label %796, label %764

764:                                              ; preds = %758, %753
  br label %765

765:                                              ; preds = %764
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %766 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %767 = load i64, ptr %766, align 8, !tbaa !20
  store i64 %767, ptr %39, align 8, !tbaa !9
  %768 = load ptr, ptr %11, align 8, !tbaa !5
  %769 = load i64, ptr %39, align 8, !tbaa !9
  %770 = getelementptr inbounds i8, ptr %768, i64 %769
  store ptr %770, ptr %11, align 8, !tbaa !5
  %771 = load i64, ptr %39, align 8, !tbaa !9
  %772 = load i64, ptr %12, align 8, !tbaa !9
  %773 = sub i64 %772, %771
  store i64 %773, ptr %12, align 8, !tbaa !9
  %774 = load ptr, ptr %17, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %774, i32 0, i32 4
  %776 = load i64, ptr %775, align 8, !tbaa !26
  %777 = icmp sge i64 %776, 0
  br i1 %777, label %778, label %784

778:                                              ; preds = %765
  %779 = load i64, ptr %39, align 8, !tbaa !9
  %780 = load ptr, ptr %17, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %780, i32 0, i32 4
  %782 = load i64, ptr %781, align 8, !tbaa !26
  %783 = sub i64 %782, %779
  store i64 %783, ptr %781, align 8, !tbaa !26
  br label %784

784:                                              ; preds = %778, %765
  %785 = load i64, ptr %39, align 8, !tbaa !9
  %786 = load i64, ptr %19, align 8, !tbaa !9
  %787 = add i64 %786, %785
  store i64 %787, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  br label %788

788:                                              ; preds = %784
  br label %789

789:                                              ; preds = %788
  br label %790

790:                                              ; preds = %789
  %791 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %791, align 8, !tbaa !18
  %792 = load i64, ptr %19, align 8, !tbaa !9
  %793 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %792, ptr %793, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %836

794:                                              ; No predecessors!
  br label %795

795:                                              ; preds = %794
  br label %796

796:                                              ; preds = %795, %758
  br label %797

797:                                              ; preds = %796
  %798 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %798, align 8, !tbaa !18
  %799 = load i64, ptr %19, align 8, !tbaa !9
  %800 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %799, ptr %800, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %836

801:                                              ; No predecessors!
  br label %802

802:                                              ; preds = %801
  br label %803

803:                                              ; preds = %802, %738
  br label %804

804:                                              ; preds = %803
  %805 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %805, align 8, !tbaa !18
  %806 = load i64, ptr %19, align 8, !tbaa !9
  %807 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %806, ptr %807, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %836

808:                                              ; No predecessors!
  br label %809

809:                                              ; preds = %808
  br label %810

810:                                              ; preds = %809, %738, %738
  br label %811

811:                                              ; preds = %810
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %812 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %813 = load i64, ptr %812, align 8, !tbaa !20
  store i64 %813, ptr %40, align 8, !tbaa !9
  %814 = load ptr, ptr %11, align 8, !tbaa !5
  %815 = load i64, ptr %40, align 8, !tbaa !9
  %816 = getelementptr inbounds i8, ptr %814, i64 %815
  store ptr %816, ptr %11, align 8, !tbaa !5
  %817 = load i64, ptr %40, align 8, !tbaa !9
  %818 = load i64, ptr %12, align 8, !tbaa !9
  %819 = sub i64 %818, %817
  store i64 %819, ptr %12, align 8, !tbaa !9
  %820 = load ptr, ptr %17, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %820, i32 0, i32 4
  %822 = load i64, ptr %821, align 8, !tbaa !26
  %823 = icmp sge i64 %822, 0
  br i1 %823, label %824, label %830

824:                                              ; preds = %811
  %825 = load i64, ptr %40, align 8, !tbaa !9
  %826 = load ptr, ptr %17, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %826, i32 0, i32 4
  %828 = load i64, ptr %827, align 8, !tbaa !26
  %829 = sub i64 %828, %825
  store i64 %829, ptr %827, align 8, !tbaa !26
  br label %830

830:                                              ; preds = %824, %811
  %831 = load i64, ptr %40, align 8, !tbaa !9
  %832 = load i64, ptr %19, align 8, !tbaa !9
  %833 = add i64 %832, %831
  store i64 %833, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  br label %834

834:                                              ; preds = %830
  br label %835

835:                                              ; preds = %834
  store i32 0, ptr %21, align 4
  br label %836

836:                                              ; preds = %835, %804, %797, %790, %671, %561, %527, %358, %312, %305, %261, %254, %247, %212
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  %837 = load i32, ptr %21, align 4
  switch i32 %837, label %1133 [
    i32 0, label %838
    i32 11, label %839
    i32 28, label %852
  ]

838:                                              ; preds = %836
  br label %839

839:                                              ; preds = %838, %836
  %840 = load i32, ptr %20, align 4, !tbaa !11
  %841 = add nsw i32 %840, 1
  store i32 %841, ptr %20, align 4, !tbaa !11
  %842 = load ptr, ptr %17, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %842, i32 0, i32 1
  %844 = load i16, ptr %843, align 2, !tbaa !27
  %845 = sext i16 %844 to i32
  %846 = and i32 %845, -2
  %847 = add nsw i32 %846, 2
  %848 = trunc i32 %847 to i16
  %849 = load ptr, ptr %17, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %849, i32 0, i32 1
  store i16 %848, ptr %850, align 2, !tbaa !27
  br label %154, !llvm.loop !50

851:                                              ; preds = %154
  br label %852

852:                                              ; preds = %851, %836
  %853 = load ptr, ptr %17, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %853, i32 0, i32 0
  store i16 3, ptr %854, align 8, !tbaa !22
  br label %855

855:                                              ; preds = %852, %72, %72
  br label %856

856:                                              ; preds = %1119, %1117, %855
  %857 = load ptr, ptr %17, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %857, i32 0, i32 4
  %859 = load i64, ptr %858, align 8, !tbaa !26
  %860 = icmp ne i64 %859, 0
  br i1 %860, label %861, label %1120

861:                                              ; preds = %856
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %862 = load ptr, ptr %11, align 8, !tbaa !5
  %863 = load i64, ptr %12, align 8, !tbaa !9
  %864 = load ptr, ptr %17, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %864, i32 0, i32 4
  %866 = load i64, ptr %865, align 8, !tbaa !26
  %867 = icmp ult i64 %863, %866
  br i1 %867, label %868, label %870

868:                                              ; preds = %861
  %869 = load i64, ptr %12, align 8, !tbaa !9
  br label %874

870:                                              ; preds = %861
  %871 = load ptr, ptr %17, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %871, i32 0, i32 4
  %873 = load i64, ptr %872, align 8, !tbaa !26
  br label %874

874:                                              ; preds = %870, %868
  %875 = phi i64 [ %869, %868 ], [ %873, %870 ]
  %876 = call i64 @ber_fetch_tag(ptr noundef %862, i64 noundef %875, ptr noundef %18)
  store i64 %876, ptr %41, align 8, !tbaa !9
  %877 = load i64, ptr %41, align 8, !tbaa !9
  switch i64 %877, label %910 [
    i64 0, label %878
    i64 -1, label %903
  ]

878:                                              ; preds = %874
  %879 = load ptr, ptr %17, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %879, i32 0, i32 4
  %881 = load i64, ptr %880, align 8, !tbaa !26
  %882 = icmp sge i64 %881, 0
  br i1 %882, label %883, label %889

883:                                              ; preds = %878
  %884 = load ptr, ptr %17, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %884, i32 0, i32 4
  %886 = load i64, ptr %885, align 8, !tbaa !26
  %887 = load i64, ptr %12, align 8, !tbaa !9
  %888 = icmp ule i64 %886, %887
  br i1 %888, label %896, label %889

889:                                              ; preds = %883, %878
  br label %890

890:                                              ; preds = %889
  %891 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %891, align 8, !tbaa !18
  %892 = load i64, ptr %19, align 8, !tbaa !9
  %893 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %892, ptr %893, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1117

894:                                              ; No predecessors!
  br label %895

895:                                              ; preds = %894
  br label %896

896:                                              ; preds = %895, %883
  br label %897

897:                                              ; preds = %896
  %898 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %898, align 8, !tbaa !18
  %899 = load i64, ptr %19, align 8, !tbaa !9
  %900 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %899, ptr %900, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1117

901:                                              ; No predecessors!
  br label %902

902:                                              ; preds = %901
  br label %903

903:                                              ; preds = %902, %874
  br label %904

904:                                              ; preds = %903
  %905 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %905, align 8, !tbaa !18
  %906 = load i64, ptr %19, align 8, !tbaa !9
  %907 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %906, ptr %907, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1117

908:                                              ; No predecessors!
  br label %909

909:                                              ; preds = %908
  br label %910

910:                                              ; preds = %909, %874
  %911 = load ptr, ptr %17, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %911, i32 0, i32 4
  %913 = load i64, ptr %912, align 8, !tbaa !26
  %914 = icmp slt i64 %913, 0
  br i1 %914, label %915, label %1000

915:                                              ; preds = %910
  %916 = load ptr, ptr %11, align 8, !tbaa !5
  %917 = getelementptr inbounds i8, ptr %916, i64 0
  %918 = load i8, ptr %917, align 1, !tbaa !33
  %919 = zext i8 %918 to i32
  %920 = icmp eq i32 %919, 0
  br i1 %920, label %921, label %1000

921:                                              ; preds = %915
  %922 = load i64, ptr %12, align 8, !tbaa !9
  %923 = load ptr, ptr %17, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %923, i32 0, i32 4
  %925 = load i64, ptr %924, align 8, !tbaa !26
  %926 = icmp ult i64 %922, %925
  br i1 %926, label %927, label %929

927:                                              ; preds = %921
  %928 = load i64, ptr %12, align 8, !tbaa !9
  br label %933

929:                                              ; preds = %921
  %930 = load ptr, ptr %17, align 8, !tbaa !5
  %931 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %930, i32 0, i32 4
  %932 = load i64, ptr %931, align 8, !tbaa !26
  br label %933

933:                                              ; preds = %929, %927
  %934 = phi i64 [ %928, %927 ], [ %932, %929 ]
  %935 = icmp ult i64 %934, 2
  br i1 %935, label %936, label %962

936:                                              ; preds = %933
  %937 = load ptr, ptr %17, align 8, !tbaa !5
  %938 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %937, i32 0, i32 4
  %939 = load i64, ptr %938, align 8, !tbaa !26
  %940 = icmp sge i64 %939, 0
  br i1 %940, label %941, label %954

941:                                              ; preds = %936
  %942 = load ptr, ptr %17, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %942, i32 0, i32 4
  %944 = load i64, ptr %943, align 8, !tbaa !26
  %945 = load i64, ptr %12, align 8, !tbaa !9
  %946 = icmp ule i64 %944, %945
  br i1 %946, label %947, label %954

947:                                              ; preds = %941
  br label %948

948:                                              ; preds = %947
  %949 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %949, align 8, !tbaa !18
  %950 = load i64, ptr %19, align 8, !tbaa !9
  %951 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %950, ptr %951, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1117

952:                                              ; No predecessors!
  br label %953

953:                                              ; preds = %952
  br label %961

954:                                              ; preds = %941, %936
  br label %955

955:                                              ; preds = %954
  %956 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %956, align 8, !tbaa !18
  %957 = load i64, ptr %19, align 8, !tbaa !9
  %958 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %957, ptr %958, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1117

959:                                              ; No predecessors!
  br label %960

960:                                              ; preds = %959
  br label %961

961:                                              ; preds = %960, %953
  br label %999

962:                                              ; preds = %933
  %963 = load ptr, ptr %11, align 8, !tbaa !5
  %964 = getelementptr inbounds i8, ptr %963, i64 1
  %965 = load i8, ptr %964, align 1, !tbaa !33
  %966 = zext i8 %965 to i32
  %967 = icmp eq i32 %966, 0
  br i1 %967, label %968, label %998

968:                                              ; preds = %962
  br label %969

969:                                              ; preds = %968
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  store i64 2, ptr %43, align 8, !tbaa !9
  %970 = load ptr, ptr %11, align 8, !tbaa !5
  %971 = load i64, ptr %43, align 8, !tbaa !9
  %972 = getelementptr inbounds i8, ptr %970, i64 %971
  store ptr %972, ptr %11, align 8, !tbaa !5
  %973 = load i64, ptr %43, align 8, !tbaa !9
  %974 = load i64, ptr %12, align 8, !tbaa !9
  %975 = sub i64 %974, %973
  store i64 %975, ptr %12, align 8, !tbaa !9
  %976 = load ptr, ptr %17, align 8, !tbaa !5
  %977 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %976, i32 0, i32 4
  %978 = load i64, ptr %977, align 8, !tbaa !26
  %979 = icmp sge i64 %978, 0
  br i1 %979, label %980, label %986

980:                                              ; preds = %969
  %981 = load i64, ptr %43, align 8, !tbaa !9
  %982 = load ptr, ptr %17, align 8, !tbaa !5
  %983 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %982, i32 0, i32 4
  %984 = load i64, ptr %983, align 8, !tbaa !26
  %985 = sub i64 %984, %981
  store i64 %985, ptr %983, align 8, !tbaa !26
  br label %986

986:                                              ; preds = %980, %969
  %987 = load i64, ptr %43, align 8, !tbaa !9
  %988 = load i64, ptr %19, align 8, !tbaa !9
  %989 = add i64 %988, %987
  store i64 %989, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  br label %990

990:                                              ; preds = %986
  br label %991

991:                                              ; preds = %990
  %992 = load ptr, ptr %17, align 8, !tbaa !5
  %993 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %992, i32 0, i32 4
  %994 = load i64, ptr %993, align 8, !tbaa !26
  %995 = add nsw i64 %994, 1
  store i64 %995, ptr %993, align 8, !tbaa !26
  %996 = load ptr, ptr %17, align 8, !tbaa !5
  %997 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %996, i32 0, i32 0
  store i16 4, ptr %997, align 8, !tbaa !22
  store i32 57, ptr %21, align 4
  br label %1117, !llvm.loop !51

998:                                              ; preds = %962
  br label %999

999:                                              ; preds = %998, %961
  br label %1000

1000:                                             ; preds = %999, %915, %910
  %1001 = load ptr, ptr %9, align 8, !tbaa !5
  %1002 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %1001, i32 0, i32 18
  %1003 = load i32, ptr %1002, align 8, !tbaa !28
  %1004 = load ptr, ptr %14, align 8, !tbaa !5
  %1005 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %1004, i32 0, i32 7
  %1006 = load i32, ptr %1005, align 8, !tbaa !31
  %1007 = icmp sgt i32 %1003, %1006
  br i1 %1007, label %1008, label %1022

1008:                                             ; preds = %1000
  %1009 = load ptr, ptr %9, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %1009, i32 0, i32 18
  %1011 = load i32, ptr %1010, align 8, !tbaa !28
  %1012 = load ptr, ptr %14, align 8, !tbaa !5
  %1013 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %1012, i32 0, i32 8
  %1014 = load i32, ptr %1013, align 4, !tbaa !32
  %1015 = icmp slt i32 %1011, %1014
  br i1 %1015, label %1016, label %1022

1016:                                             ; preds = %1008
  %1017 = load ptr, ptr %17, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1017, i32 0, i32 0
  %1019 = load i16, ptr %1018, align 8, !tbaa !22
  %1020 = sext i16 %1019 to i32
  %1021 = icmp eq i32 %1020, 4
  br i1 %1021, label %1022, label %1029

1022:                                             ; preds = %1016, %1008, %1000
  br label %1023

1023:                                             ; preds = %1022
  %1024 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1024, align 8, !tbaa !18
  %1025 = load i64, ptr %19, align 8, !tbaa !9
  %1026 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1025, ptr %1026, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1117

1027:                                             ; No predecessors!
  br label %1028

1028:                                             ; preds = %1027
  br label %1029

1029:                                             ; preds = %1028, %1016
  %1030 = load ptr, ptr %8, align 8, !tbaa !5
  %1031 = load ptr, ptr %11, align 8, !tbaa !5
  %1032 = load i8, ptr %1031, align 1, !tbaa !33
  %1033 = zext i8 %1032 to i32
  %1034 = and i32 %1033, 32
  %1035 = icmp ne i32 %1034, 0
  %1036 = zext i1 %1035 to i64
  %1037 = select i1 %1035, i32 1, i32 0
  %1038 = load ptr, ptr %11, align 8, !tbaa !5
  %1039 = load i64, ptr %41, align 8, !tbaa !9
  %1040 = getelementptr inbounds i8, ptr %1038, i64 %1039
  %1041 = load i64, ptr %12, align 8, !tbaa !9
  %1042 = load ptr, ptr %17, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1042, i32 0, i32 4
  %1044 = load i64, ptr %1043, align 8, !tbaa !26
  %1045 = icmp ult i64 %1041, %1044
  br i1 %1045, label %1046, label %1048

1046:                                             ; preds = %1029
  %1047 = load i64, ptr %12, align 8, !tbaa !9
  br label %1052

1048:                                             ; preds = %1029
  %1049 = load ptr, ptr %17, align 8, !tbaa !5
  %1050 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1049, i32 0, i32 4
  %1051 = load i64, ptr %1050, align 8, !tbaa !26
  br label %1052

1052:                                             ; preds = %1048, %1046
  %1053 = phi i64 [ %1047, %1046 ], [ %1051, %1048 ]
  %1054 = load i64, ptr %41, align 8, !tbaa !9
  %1055 = sub i64 %1053, %1054
  %1056 = call i64 @ber_skip_length(ptr noundef %1030, i32 noundef %1037, ptr noundef %1040, i64 noundef %1055)
  store i64 %1056, ptr %42, align 8, !tbaa !9
  %1057 = load i64, ptr %42, align 8, !tbaa !9
  switch i64 %1057, label %1090 [
    i64 0, label %1058
    i64 -1, label %1083
  ]

1058:                                             ; preds = %1052
  %1059 = load ptr, ptr %17, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1059, i32 0, i32 4
  %1061 = load i64, ptr %1060, align 8, !tbaa !26
  %1062 = icmp sge i64 %1061, 0
  br i1 %1062, label %1063, label %1069

1063:                                             ; preds = %1058
  %1064 = load ptr, ptr %17, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1064, i32 0, i32 4
  %1066 = load i64, ptr %1065, align 8, !tbaa !26
  %1067 = load i64, ptr %12, align 8, !tbaa !9
  %1068 = icmp ule i64 %1066, %1067
  br i1 %1068, label %1076, label %1069

1069:                                             ; preds = %1063, %1058
  br label %1070

1070:                                             ; preds = %1069
  %1071 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %1071, align 8, !tbaa !18
  %1072 = load i64, ptr %19, align 8, !tbaa !9
  %1073 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1072, ptr %1073, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1117

1074:                                             ; No predecessors!
  br label %1075

1075:                                             ; preds = %1074
  br label %1076

1076:                                             ; preds = %1075, %1063
  br label %1077

1077:                                             ; preds = %1076
  %1078 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1078, align 8, !tbaa !18
  %1079 = load i64, ptr %19, align 8, !tbaa !9
  %1080 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1079, ptr %1080, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1117

1081:                                             ; No predecessors!
  br label %1082

1082:                                             ; preds = %1081
  br label %1083

1083:                                             ; preds = %1082, %1052
  br label %1084

1084:                                             ; preds = %1083
  %1085 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %1085, align 8, !tbaa !18
  %1086 = load i64, ptr %19, align 8, !tbaa !9
  %1087 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1086, ptr %1087, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1117

1088:                                             ; No predecessors!
  br label %1089

1089:                                             ; preds = %1088
  br label %1090

1090:                                             ; preds = %1089, %1052
  br label %1091

1091:                                             ; preds = %1090
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %1092 = load i64, ptr %41, align 8, !tbaa !9
  %1093 = load i64, ptr %42, align 8, !tbaa !9
  %1094 = add nsw i64 %1092, %1093
  store i64 %1094, ptr %44, align 8, !tbaa !9
  %1095 = load ptr, ptr %11, align 8, !tbaa !5
  %1096 = load i64, ptr %44, align 8, !tbaa !9
  %1097 = getelementptr inbounds i8, ptr %1095, i64 %1096
  store ptr %1097, ptr %11, align 8, !tbaa !5
  %1098 = load i64, ptr %44, align 8, !tbaa !9
  %1099 = load i64, ptr %12, align 8, !tbaa !9
  %1100 = sub i64 %1099, %1098
  store i64 %1100, ptr %12, align 8, !tbaa !9
  %1101 = load ptr, ptr %17, align 8, !tbaa !5
  %1102 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1101, i32 0, i32 4
  %1103 = load i64, ptr %1102, align 8, !tbaa !26
  %1104 = icmp sge i64 %1103, 0
  br i1 %1104, label %1105, label %1111

1105:                                             ; preds = %1091
  %1106 = load i64, ptr %44, align 8, !tbaa !9
  %1107 = load ptr, ptr %17, align 8, !tbaa !5
  %1108 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1107, i32 0, i32 4
  %1109 = load i64, ptr %1108, align 8, !tbaa !26
  %1110 = sub i64 %1109, %1106
  store i64 %1110, ptr %1108, align 8, !tbaa !26
  br label %1111

1111:                                             ; preds = %1105, %1091
  %1112 = load i64, ptr %44, align 8, !tbaa !9
  %1113 = load i64, ptr %19, align 8, !tbaa !9
  %1114 = add i64 %1113, %1112
  store i64 %1114, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  br label %1115

1115:                                             ; preds = %1111
  br label %1116

1116:                                             ; preds = %1115
  store i32 0, ptr %21, align 4
  br label %1117

1117:                                             ; preds = %1116, %1084, %1077, %1070, %1023, %991, %955, %948, %904, %897, %890
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  %1118 = load i32, ptr %21, align 4
  switch i32 %1118, label %1133 [
    i32 0, label %1119
    i32 57, label %856
  ]

1119:                                             ; preds = %1117
  br label %856, !llvm.loop !51

1120:                                             ; preds = %856
  br label %1121

1121:                                             ; preds = %1120
  %1122 = load ptr, ptr %17, align 8, !tbaa !5
  %1123 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %1122, i32 0, i32 0
  store i16 10, ptr %1123, align 8, !tbaa !22
  br label %1124

1124:                                             ; preds = %1121
  br label %1125

1125:                                             ; preds = %1124
  br label %1126

1126:                                             ; preds = %1125, %72
  br label %1127

1127:                                             ; preds = %1126
  %1128 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %1128, align 8, !tbaa !18
  %1129 = load i64, ptr %19, align 8, !tbaa !9
  %1130 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %1129, ptr %1130, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %1133

1131:                                             ; No predecessors!
  br label %1132

1132:                                             ; preds = %1131
  store i32 0, ptr %21, align 4
  br label %1133

1133:                                             ; preds = %1132, %1127, %1117, %836, %100, %65
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  %1134 = load i32, ptr %21, align 4
  switch i32 %1134, label %1137 [
    i32 0, label %1135
    i32 1, label %1135
  ]

1135:                                             ; preds = %1133, %1133
  %1136 = load { i32, i64 }, ptr %7, align 8
  ret { i32, i64 } %1136

1137:                                             ; preds = %1133
  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

; Function Attrs: inlinehint nounwind uwtable
declare ptr @bsearch(ptr noundef nonnull, ptr noundef nonnull, i64 noundef, i64 noundef, ptr noundef nonnull) #5

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

declare i64 @ber_skip_length(ptr noundef, i32 noundef, ptr noundef, i64 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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }
attributes #7 = { 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_SEQUENCE_specifics_s", !12, i64 0, !12, i64 4, !6, i64 8, !12, i64 16, !6, i64 24, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44}
!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 = !{!14, !12, i64 144}
!29 = !{!30, !12, i64 4}
!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 = !{!17, !12, i64 40}
!32 = !{!17, !12, i64 44}
!33 = !{!7, !7, i64 0}
!34 = !{!30, !12, i64 12}
!35 = !{!30, !12, i64 0}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = !{!39, !12, i64 0}
!39 = !{!"asn_TYPE_tag2member_s", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12}
!40 = !{!39, !12, i64 4}
!41 = !{!17, !6, i64 8}
!42 = !{!17, !12, i64 16}
!43 = !{!39, !12, i64 8}
!44 = !{!39, !12, i64 12}
!45 = distinct !{!45, !37}
!46 = !{!30, !12, i64 8}
!47 = !{!30, !6, i64 24}
!48 = !{!14, !6, i64 40}
!49 = !{!30, !12, i64 16}
!50 = distinct !{!50, !37}
!51 = distinct !{!51, !37}


; 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"

%struct.asn_TYPE_tag2member_s = type { i32, i32, i32, i32 }
%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 } @SEQUENCE_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 = alloca ptr, align 8
  %9 = alloca %struct.asn_TYPE_tag2member_s, align 4
  %10 = getelementptr inbounds i8, ptr %1, i64 152
  %11 = load ptr, ptr %10, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %1, i64 136
  %13 = load ptr, ptr %12, align 8, !tbaa !11
  %14 = load ptr, ptr %2, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  %15 = icmp eq ptr %14, null
  br i1 %15, label %16, label %21

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

21:                                               ; preds = %16, %6
  %.0319 = phi ptr [ %19, %16 ], [ %14, %6 ]
  %22 = getelementptr inbounds i8, ptr %11, i64 4
  %23 = load i32, ptr %22, align 4, !tbaa !15
  %24 = sext i32 %23 to i64
  %25 = getelementptr inbounds i8, ptr %.0319, i64 %24
  %26 = load i16, ptr %25, align 8, !tbaa !16
  switch i16 %26, label %.thread473 [
    i16 0, label %27
    i16 1, label %._crit_edge586
    i16 3, label %244
    i16 4, label %244
  ]

._crit_edge586:                                   ; preds = %21
  %.phi.trans.insert = getelementptr inbounds i8, ptr %25, i64 2
  %.pre = load i16, ptr %.phi.trans.insert, align 2, !tbaa !20
  br label %43

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

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
  %38 = getelementptr inbounds i8, ptr %3, i64 %31
  %39 = sub i64 %4, %31
  %40 = load i16, ptr %25, align 8, !tbaa !16
  %41 = add i16 %40, 1
  store i16 %41, ptr %25, align 8, !tbaa !16
  %42 = getelementptr inbounds i8, ptr %25, i64 2
  store i16 0, ptr %42, align 2, !tbaa !20
  br label %43

43:                                               ; preds = %._crit_edge586, %.thread
  %44 = phi i16 [ %.pre, %._crit_edge586 ], [ 0, %.thread ]
  %.0320 = phi i64 [ 0, %._crit_edge586 ], [ %31, %.thread ]
  %.0311 = phi i64 [ %4, %._crit_edge586 ], [ %39, %.thread ]
  %.0 = phi ptr [ %3, %._crit_edge586 ], [ %38, %.thread ]
  %45 = getelementptr inbounds i8, ptr %25, i64 2
  %46 = ashr i16 %44, 1
  %47 = sext i16 %46 to i32
  %48 = getelementptr inbounds i8, ptr %1, i64 144
  %49 = load i32, ptr %48, align 8, !tbaa !22
  %50 = icmp sgt i32 %49, %47
  br i1 %50, label %.lr.ph545, label %.loopexit

.lr.ph545:                                        ; preds = %43
  %51 = getelementptr inbounds i8, ptr %25, i64 16
  %52 = getelementptr inbounds i8, ptr %11, i64 40
  %53 = getelementptr inbounds i8, ptr %11, i64 44
  %54 = getelementptr inbounds i8, ptr %9, i64 4
  %55 = getelementptr inbounds i8, ptr %11, i64 8
  %56 = getelementptr inbounds i8, ptr %11, i64 16
  br label %57

57:                                               ; preds = %.lr.ph545, %237
  %58 = phi i16 [ %44, %.lr.ph545 ], [ %241, %237 ]
  %59 = phi i32 [ %49, %.lr.ph545 ], [ %242, %237 ]
  %.1541 = phi ptr [ %.0, %.lr.ph545 ], [ %.3.ph, %237 ]
  %.1312540 = phi i64 [ %.0311, %.lr.ph545 ], [ %.3314.ph, %237 ]
  %.1321539 = phi i64 [ %.0320, %.lr.ph545 ], [ %.3323.ph, %237 ]
  %.0328536 = phi i32 [ %47, %.lr.ph545 ], [ %238, %237 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  %60 = and i16 %58, 1
  %.not387 = icmp eq i16 %60, 0
  br i1 %.not387, label %61, label %202

61:                                               ; preds = %57
  %62 = load i64, ptr %51, align 8, !tbaa !21
  %63 = icmp eq i64 %62, 0
  br i1 %63, label %64, label %77

64:                                               ; preds = %61
  %65 = sext i32 %.0328536 to i64
  %66 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %13, i64 %65, i32 1
  %67 = load i32, ptr %66, align 4, !tbaa !23
  %68 = add nsw i32 %67, %.0328536
  %69 = icmp eq i32 %68, %59
  br i1 %69, label %76, label %70

70:                                               ; preds = %64
  %71 = load i32, ptr %52, align 8, !tbaa !25
  %72 = icmp sgt i32 %.0328536, %71
  br i1 %72, label %73, label %77

73:                                               ; preds = %70
  %74 = load i32, ptr %53, align 4, !tbaa !26
  %75 = icmp sgt i32 %74, %59
  br i1 %75, label %76, label %77

76:                                               ; preds = %73, %64
  store i16 10, ptr %25, align 8, !tbaa !16
  br label %.thread438

77:                                               ; preds = %73, %70, %61
  %.1312. = call i64 @llvm.umin.i64(i64 %.1312540, i64 %62)
  %78 = call i64 @ber_fetch_tag(ptr noundef %.1541, i64 noundef %.1312., ptr noundef nonnull %7) #6
  switch i64 %78, label %82 [
    i64 0, label %79
    i64 -1, label %.thread438
  ]

79:                                               ; preds = %77
  %80 = load i64, ptr %51, align 8, !tbaa !21
  %81 = icmp slt i64 %80, 0
  %.not388 = icmp ugt i64 %80, %.1312540
  %or.cond407 = select i1 %81, i1 true, i1 %.not388
  %spec.select422 = select i1 %or.cond407, i32 1, i32 2
  br label %.thread438

82:                                               ; preds = %77
  %83 = load i64, ptr %51, align 8, !tbaa !21
  %84 = icmp slt i64 %83, 0
  br i1 %84, label %85, label %108

85:                                               ; preds = %82
  %86 = load i8, ptr %.1541, align 1, !tbaa !27
  %87 = icmp eq i8 %86, 0
  br i1 %87, label %88, label %108

88:                                               ; preds = %85
  %.1312.408 = call i64 @llvm.umin.i64(i64 %.1312540, i64 %83)
  %89 = icmp ult i64 %.1312.408, 2
  br i1 %89, label %.thread438, label %90

90:                                               ; preds = %88
  %91 = getelementptr inbounds i8, ptr %.1541, i64 1
  %92 = load i8, ptr %91, align 1, !tbaa !27
  %93 = icmp eq i8 %92, 0
  br i1 %93, label %94, label %108

94:                                               ; preds = %90
  %95 = sext i32 %.0328536 to i64
  %96 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %13, i64 %95, i32 1
  %97 = load i32, ptr %96, align 4, !tbaa !23
  %98 = add nsw i32 %97, %.0328536
  %99 = load i32, ptr %48, align 8, !tbaa !22
  %100 = icmp eq i32 %98, %99
  br i1 %100, label %.thread464, label %101

101:                                              ; preds = %94
  %102 = load i32, ptr %52, align 8, !tbaa !25
  %103 = icmp sgt i32 %.0328536, %102
  br i1 %103, label %104, label %108

104:                                              ; preds = %101
  %105 = load i32, ptr %53, align 4, !tbaa !26
  %106 = icmp slt i32 %.0328536, %105
  %107 = icmp sgt i32 %105, %99
  %or.cond410 = and i1 %106, %107
  br i1 %or.cond410, label %.thread464, label %108

108:                                              ; preds = %101, %104, %90, %85, %82
  %109 = sext i32 %.0328536 to i64
  %110 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %13, i64 %109, i32 1
  %111 = load i32, ptr %110, align 4, !tbaa !23
  %112 = add nsw i32 %111, %.0328536
  %113 = load i32, ptr %48, align 8, !tbaa !22
  %.not389 = icmp slt i32 %112, %113
  br i1 %.not389, label %114, label %119

114:                                              ; preds = %108
  %115 = add nsw i32 %112, 1
  %116 = sub nsw i32 %115, %.0328536
  %117 = icmp sgt i32 %116, 8
  %118 = add nsw i32 %.0328536, 8
  %spec.select = zext i1 %117 to i32
  %spec.select411 = select i1 %117, i32 %118, i32 %115
  br label %119

119:                                              ; preds = %114, %108
  %.0343 = phi i32 [ 0, %108 ], [ %spec.select, %114 ]
  %.0342 = phi i32 [ %113, %108 ], [ %spec.select411, %114 ]
  %120 = icmp slt i32 %.0328536, %.0342
  br i1 %120, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %119
  %121 = load i32, ptr %7, align 4, !tbaa !28
  br label %122

122:                                              ; preds = %.lr.ph, %140
  %indvars.iv = phi i64 [ %109, %.lr.ph ], [ %indvars.iv.next, %140 ]
  %123 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %13, i64 %indvars.iv
  %124 = getelementptr inbounds i8, ptr %123, i64 12
  %125 = load i32, ptr %124, align 4, !tbaa !29
  %126 = icmp eq i32 %121, %125
  br i1 %126, label %127, label %131

127:                                              ; preds = %122
  %128 = trunc nsw i64 %indvars.iv to i32
  %.0345.tr397 = trunc i64 %indvars.iv to i16
  %129 = shl i16 %.0345.tr397, 1
  %130 = or disjoint i16 %129, 1
  store i16 %130, ptr %45, align 2, !tbaa !20
  br label %202

131:                                              ; preds = %122
  %132 = load i32, ptr %123, align 8, !tbaa !30
  %133 = and i32 %132, 2
  %.not390 = icmp eq i32 %133, 0
  br i1 %.not390, label %138, label %134

134:                                              ; preds = %131
  %135 = trunc nsw i64 %indvars.iv to i32
  %.0345.tr = trunc i64 %indvars.iv to i16
  %136 = shl i16 %.0345.tr, 1
  %137 = or disjoint i16 %136, 1
  store i16 %137, ptr %45, align 2, !tbaa !20
  br label %202

138:                                              ; preds = %131
  %139 = icmp eq i32 %125, -1
  br i1 %139, label %.thread430, label %140

140:                                              ; preds = %138
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond.not = icmp eq i32 %.0342, %lftr.wideiv
  br i1 %exitcond.not, label %._crit_edge, label %122, !llvm.loop !31

._crit_edge:                                      ; preds = %140, %119
  %.0345.lcssa = phi i32 [ %.0328536, %119 ], [ %.0342, %140 ]
  %.not391 = icmp eq i32 %.0343, 0
  br i1 %.not391, label %168, label %._crit_edge..thread430_crit_edge

._crit_edge..thread430_crit_edge:                 ; preds = %._crit_edge
  %.pre587 = load i32, ptr %7, align 4, !tbaa !28
  br label %.thread430

.thread430:                                       ; preds = %138, %._crit_edge..thread430_crit_edge
  %141 = phi i32 [ %.pre587, %._crit_edge..thread430_crit_edge ], [ %121, %138 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #6
  store i32 %141, ptr %9, align 4, !tbaa !33
  store i32 %.0328536, ptr %54, align 4, !tbaa !35
  %142 = load ptr, ptr %55, align 8, !tbaa !36
  %143 = load i32, ptr %56, align 8, !tbaa !37
  %144 = sext i32 %143 to i64
  %145 = call ptr @bsearch(ptr noundef %9, ptr noundef %142, i64 noundef %144, i64 noundef 16, ptr noundef @_t2e_cmp)
  %.not392 = icmp eq ptr %145, null
  br i1 %.not392, label %.thread590, label %146

146:                                              ; preds = %.thread430
  %147 = load i32, ptr %110, align 4, !tbaa !23
  %148 = add nsw i32 %147, %.0328536
  %149 = getelementptr inbounds i8, ptr %145, i64 8
  %150 = load i32, ptr %149, align 4, !tbaa !38
  %151 = getelementptr inbounds i8, ptr %145, i64 12
  %152 = load i32, ptr %151, align 4, !tbaa !39
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %145, i64 %153
  %.not393527 = icmp sgt i32 %150, %152
  br i1 %.not393527, label %.thread590, label %.lr.ph531.preheader

.lr.ph531.preheader:                              ; preds = %146
  %155 = sext i32 %150 to i64
  %156 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %145, i64 %155
  br label %.lr.ph531

.lr.ph531:                                        ; preds = %.lr.ph531.preheader, %160
  %.0348529 = phi ptr [ %162, %160 ], [ %156, %.lr.ph531.preheader ]
  %.0349528 = phi ptr [ %spec.select412, %160 ], [ null, %.lr.ph531.preheader ]
  %157 = getelementptr inbounds i8, ptr %.0348529, i64 4
  %158 = load i32, ptr %157, align 4, !tbaa !35
  %159 = icmp sgt i32 %158, %148
  br i1 %159, label %._crit_edge532, label %160

160:                                              ; preds = %.lr.ph531
  %161 = icmp slt i32 %158, %.0328536
  %spec.select412 = select i1 %161, ptr %.0349528, ptr %.0348529
  %162 = getelementptr inbounds i8, ptr %.0348529, i64 16
  %.not393 = icmp ugt ptr %162, %154
  br i1 %.not393, label %._crit_edge532, label %.lr.ph531, !llvm.loop !40

._crit_edge532:                                   ; preds = %160, %.lr.ph531
  %.0349.lcssa = phi ptr [ %spec.select412, %160 ], [ %.0349528, %.lr.ph531 ]
  %.not394 = icmp eq ptr %.0349.lcssa, null
  br i1 %.not394, label %.thread590, label %163

.thread590:                                       ; preds = %._crit_edge532, %.thread430, %146
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #6
  br label %170

163:                                              ; preds = %._crit_edge532
  %164 = getelementptr inbounds i8, ptr %.0349.lcssa, i64 4
  %165 = load i32, ptr %164, align 4, !tbaa !35
  %.tr = trunc i32 %165 to i16
  %166 = shl i16 %.tr, 1
  %167 = or disjoint i16 %166, 1
  store i16 %167, ptr %45, align 2, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #6
  br label %202

168:                                              ; preds = %._crit_edge
  %169 = icmp eq i32 %.0345.lcssa, %.0342
  br i1 %169, label %170, label %199

170:                                              ; preds = %.thread590, %168
  %171 = load i32, ptr %110, align 4, !tbaa !23
  %172 = add nsw i32 %171, %.0328536
  %173 = load i32, ptr %52, align 8, !tbaa !25
  %174 = icmp sgt i32 %172, %173
  br i1 %174, label %175, label %.thread438

175:                                              ; preds = %170
  %176 = load i32, ptr %53, align 4, !tbaa !26
  %177 = icmp slt i32 %172, %176
  br i1 %177, label %178, label %.thread438

178:                                              ; preds = %175
  %179 = load i8, ptr %.1541, align 1, !tbaa !27
  %180 = lshr i8 %179, 5
  %.lobit = and i8 %180, 1
  %181 = zext nneg i8 %.lobit to i32
  %182 = getelementptr inbounds i8, ptr %.1541, i64 %78
  %183 = load i64, ptr %51, align 8, !tbaa !21
  %.1312.413 = call i64 @llvm.umin.i64(i64 %.1312540, i64 %183)
  %184 = sub i64 %.1312.413, %78
  %185 = call i64 @ber_skip_length(ptr noundef %0, i32 noundef %181, ptr noundef nonnull %182, i64 noundef %184) #6
  switch i64 %185, label %189 [
    i64 0, label %186
    i64 -1, label %.thread438
  ]

186:                                              ; preds = %178
  %187 = load i64, ptr %51, align 8, !tbaa !21
  %188 = icmp slt i64 %187, 0
  %.not396 = icmp ugt i64 %187, %.1312540
  %or.cond414 = select i1 %188, i1 true, i1 %.not396
  %spec.select426 = select i1 %or.cond414, i32 1, i32 2
  br label %.thread438

189:                                              ; preds = %178
  %190 = add nsw i64 %185, %78
  %191 = load i64, ptr %51, align 8, !tbaa !21
  %192 = icmp sgt i64 %191, -1
  br i1 %192, label %193, label %195

193:                                              ; preds = %189
  %194 = sub i64 %191, %190
  store i64 %194, ptr %51, align 8, !tbaa !21
  br label %195

195:                                              ; preds = %193, %189
  %196 = load i16, ptr %45, align 2, !tbaa !20
  %197 = add i16 %196, -2
  store i16 %197, ptr %45, align 2, !tbaa !20
  %198 = add nsw i32 %172, -1
  br label %237

199:                                              ; preds = %168
  %200 = load i16, ptr %45, align 2, !tbaa !20
  %201 = or i16 %200, 1
  store i16 %201, ptr %45, align 2, !tbaa !20
  br label %202

202:                                              ; preds = %163, %57, %199, %134, %127
  %.6334 = phi i32 [ %.0328536, %57 ], [ %128, %127 ], [ %135, %134 ], [ %165, %163 ], [ %.0328536, %199 ]
  %203 = sext i32 %.6334 to i64
  %204 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %13, i64 %203
  %205 = load i32, ptr %204, align 8, !tbaa !30
  %206 = and i32 %205, 1
  %.not399 = icmp eq i32 %206, 0
  %207 = getelementptr inbounds i8, ptr %204, i64 8
  %208 = load i32, ptr %207, align 8, !tbaa !41
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i8, ptr %.0319, i64 %209
  br i1 %.not399, label %211, label %212

211:                                              ; preds = %202
  store ptr %210, ptr %8, align 8, !tbaa !12
  br label %212

212:                                              ; preds = %202, %211
  %.0341 = phi ptr [ %8, %211 ], [ %210, %202 ]
  %213 = getelementptr inbounds i8, ptr %204, i64 24
  %214 = load ptr, ptr %213, align 8, !tbaa !42
  %215 = getelementptr inbounds i8, ptr %214, i64 40
  %216 = load ptr, ptr %215, align 8, !tbaa !43
  %217 = load i64, ptr %51, align 8, !tbaa !21
  %.1312.415 = call i64 @llvm.umin.i64(i64 %.1312540, i64 %217)
  %218 = getelementptr inbounds i8, ptr %204, i64 16
  %219 = load i32, ptr %218, align 8, !tbaa !44
  %220 = call { i32, i64 } %216(ptr noundef %0, ptr noundef %214, ptr noundef nonnull %.0341, ptr noundef %.1541, i64 noundef %.1312.415, i32 noundef %219) #6
  %221 = extractvalue { i32, i64 } %220, 0
  %222 = extractvalue { i32, i64 } %220, 1
  switch i32 %221, label %232 [
    i32 2, label %.thread438
    i32 1, label %223
  ]

223:                                              ; preds = %212
  %224 = load i64, ptr %51, align 8, !tbaa !21
  %225 = icmp slt i64 %224, 0
  %.not400 = icmp ugt i64 %224, %.1312540
  %or.cond416 = select i1 %225, i1 true, i1 %.not400
  br i1 %or.cond416, label %226, label %.thread438

226:                                              ; preds = %223
  %227 = icmp sgt i64 %224, -1
  br i1 %227, label %228, label %230

228:                                              ; preds = %226
  %229 = sub i64 %224, %222
  store i64 %229, ptr %51, align 8, !tbaa !21
  br label %230

230:                                              ; preds = %228, %226
  %231 = add i64 %222, %.1321539
  br label %.thread438

232:                                              ; preds = %212
  %233 = load i64, ptr %51, align 8, !tbaa !21
  %234 = icmp sgt i64 %233, -1
  br i1 %234, label %235, label %237

235:                                              ; preds = %232
  %236 = sub i64 %233, %222
  store i64 %236, ptr %51, align 8, !tbaa !21
  br label %237

.thread438:                                       ; preds = %88, %77, %170, %175, %178, %212, %230, %76, %223, %79, %186
  %.sroa.0304.3.ph = phi i32 [ %spec.select426, %186 ], [ %spec.select422, %79 ], [ 2, %223 ], [ 0, %76 ], [ 1, %230 ], [ 1, %88 ], [ 2, %77 ], [ 2, %170 ], [ 2, %175 ], [ 2, %178 ], [ %221, %212 ]
  %.sroa.31.3.ph = phi i64 [ %.1321539, %186 ], [ %.1321539, %79 ], [ %.1321539, %223 ], [ %.1321539, %76 ], [ %231, %230 ], [ %.1321539, %212 ], [ %.1321539, %178 ], [ %.1321539, %175 ], [ %.1321539, %170 ], [ %.1321539, %77 ], [ %.1321539, %88 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  br label %.thread473

.thread464:                                       ; preds = %104, %94
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  br label %.loopexit

237:                                              ; preds = %232, %235, %195
  %.7335.ph = phi i32 [ %198, %195 ], [ %.6334, %235 ], [ %.6334, %232 ]
  %.pn = phi i64 [ %190, %195 ], [ %222, %235 ], [ %222, %232 ]
  %.3.ph = getelementptr inbounds i8, ptr %.1541, i64 %.pn
  %.3314.ph = sub i64 %.1312540, %.pn
  %.3323.ph = add i64 %.pn, %.1321539
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  %238 = add nsw i32 %.7335.ph, 1
  %239 = load i16, ptr %45, align 2, !tbaa !20
  %240 = and i16 %239, -2
  %241 = add i16 %240, 2
  store i16 %241, ptr %45, align 2, !tbaa !20
  %242 = load i32, ptr %48, align 8, !tbaa !22
  %243 = icmp slt i32 %238, %242
  br i1 %243, label %57, label %.loopexit, !llvm.loop !45

.loopexit:                                        ; preds = %237, %43, %.thread464
  %.1321523 = phi i64 [ %.1321539, %.thread464 ], [ %.0320, %43 ], [ %.3323.ph, %237 ]
  %.1312516 = phi i64 [ %.1312540, %.thread464 ], [ %.0311, %43 ], [ %.3314.ph, %237 ]
  %.1509 = phi ptr [ %.1541, %.thread464 ], [ %.0, %43 ], [ %.3.ph, %237 ]
  store i16 3, ptr %25, align 8, !tbaa !16
  br label %244

244:                                              ; preds = %.loopexit, %21, %21
  %.5325 = phi i64 [ 0, %21 ], [ 0, %21 ], [ %.1321523, %.loopexit ]
  %.5316 = phi i64 [ %4, %21 ], [ %4, %21 ], [ %.1312516, %.loopexit ]
  %.5 = phi ptr [ %3, %21 ], [ %3, %21 ], [ %.1509, %.loopexit ]
  %245 = getelementptr inbounds i8, ptr %25, i64 16
  %246 = load i64, ptr %245, align 8, !tbaa !21
  %.not401549 = icmp eq i64 %246, 0
  br i1 %.not401549, label %._crit_edge555, label %.lr.ph554

.lr.ph554:                                        ; preds = %244
  %247 = getelementptr inbounds i8, ptr %1, i64 144
  %248 = getelementptr inbounds i8, ptr %11, i64 40
  %249 = getelementptr inbounds i8, ptr %11, i64 44
  br label %250

250:                                              ; preds = %.lr.ph554, %304
  %251 = phi i64 [ %246, %.lr.ph554 ], [ %305, %304 ]
  %.6552 = phi ptr [ %.5, %.lr.ph554 ], [ %.7, %304 ]
  %.6317551 = phi i64 [ %.5316, %.lr.ph554 ], [ %.7318, %304 ]
  %.6326550 = phi i64 [ %.5325, %.lr.ph554 ], [ %.7327, %304 ]
  %.6317. = call i64 @llvm.umin.i64(i64 %.6317551, i64 %251)
  %252 = call i64 @ber_fetch_tag(ptr noundef %.6552, i64 noundef %.6317., ptr noundef nonnull %7) #6
  switch i64 %252, label %256 [
    i64 0, label %253
    i64 -1, label %.thread473
  ]

253:                                              ; preds = %250
  %254 = load i64, ptr %245, align 8, !tbaa !21
  %255 = icmp slt i64 %254, 0
  %.not402 = icmp ugt i64 %254, %.6317551
  %or.cond417 = or i1 %255, %.not402
  %spec.select427 = select i1 %or.cond417, i32 1, i32 2
  br label %.thread473

256:                                              ; preds = %250
  %257 = load i64, ptr %245, align 8, !tbaa !21
  %258 = icmp slt i64 %257, 0
  br i1 %258, label %259, label %273

259:                                              ; preds = %256
  %260 = load i8, ptr %.6552, align 1, !tbaa !27
  %261 = icmp eq i8 %260, 0
  br i1 %261, label %262, label %273

262:                                              ; preds = %259
  %.6317.418 = call i64 @llvm.umin.i64(i64 %.6317551, i64 %257)
  %263 = icmp ult i64 %.6317.418, 2
  br i1 %263, label %.thread473, label %264

264:                                              ; preds = %262
  %265 = getelementptr inbounds i8, ptr %.6552, i64 1
  %266 = load i8, ptr %265, align 1, !tbaa !27
  %267 = icmp eq i8 %266, 0
  br i1 %267, label %268, label %273

268:                                              ; preds = %264
  %269 = getelementptr inbounds i8, ptr %.6552, i64 2
  %270 = add i64 %.6317551, -2
  %271 = add i64 %.6326550, 2
  %272 = add nsw i64 %257, 1
  store i64 %272, ptr %245, align 8, !tbaa !21
  store i16 4, ptr %25, align 8, !tbaa !16
  br label %304, !llvm.loop !46

273:                                              ; preds = %264, %259, %256
  %274 = load i32, ptr %247, align 8, !tbaa !22
  %275 = load i32, ptr %248, align 8, !tbaa !25
  %276 = icmp sgt i32 %274, %275
  br i1 %276, label %277, label %.thread473

277:                                              ; preds = %273
  %278 = load i32, ptr %249, align 4, !tbaa !26
  %279 = icmp slt i32 %274, %278
  br i1 %279, label %280, label %.thread473

280:                                              ; preds = %277
  %281 = load i16, ptr %25, align 8, !tbaa !16
  %282 = icmp eq i16 %281, 4
  br i1 %282, label %.thread473, label %283

283:                                              ; preds = %280
  %284 = load i8, ptr %.6552, align 1, !tbaa !27
  %285 = lshr i8 %284, 5
  %.lobit404 = and i8 %285, 1
  %286 = zext nneg i8 %.lobit404 to i32
  %287 = getelementptr inbounds i8, ptr %.6552, i64 %252
  %.6317.420 = call i64 @llvm.umin.i64(i64 %.6317551, i64 %257)
  %288 = sub i64 %.6317.420, %252
  %289 = call i64 @ber_skip_length(ptr noundef %0, i32 noundef %286, ptr noundef nonnull %287, i64 noundef %288) #6
  switch i64 %289, label %293 [
    i64 0, label %290
    i64 -1, label %.thread473
  ]

290:                                              ; preds = %283
  %291 = load i64, ptr %245, align 8, !tbaa !21
  %292 = icmp slt i64 %291, 0
  %.not405 = icmp ugt i64 %291, %.6317551
  %or.cond421 = or i1 %292, %.not405
  %spec.select429 = select i1 %or.cond421, i32 1, i32 2
  br label %.thread473

293:                                              ; preds = %283
  %294 = add nsw i64 %289, %252
  %295 = getelementptr inbounds i8, ptr %.6552, i64 %294
  %296 = sub i64 %.6317551, %294
  %297 = load i64, ptr %245, align 8, !tbaa !21
  %298 = icmp sgt i64 %297, -1
  br i1 %298, label %299, label %301

299:                                              ; preds = %293
  %300 = sub i64 %297, %294
  store i64 %300, ptr %245, align 8, !tbaa !21
  br label %301

301:                                              ; preds = %299, %293
  %302 = phi i64 [ %300, %299 ], [ %297, %293 ]
  %303 = add i64 %294, %.6326550
  br label %304

304:                                              ; preds = %301, %268
  %305 = phi i64 [ %272, %268 ], [ %302, %301 ]
  %.7327 = phi i64 [ %271, %268 ], [ %303, %301 ]
  %.7318 = phi i64 [ %270, %268 ], [ %296, %301 ]
  %.7 = phi ptr [ %269, %268 ], [ %295, %301 ]
  %.not401 = icmp eq i64 %305, 0
  br i1 %.not401, label %._crit_edge555, label %250

._crit_edge555:                                   ; preds = %304, %244
  %.6326.lcssa = phi i64 [ %.5325, %244 ], [ %.7327, %304 ]
  store i16 10, ptr %25, align 8, !tbaa !16
  br label %.thread473

.thread473:                                       ; preds = %262, %283, %280, %277, %273, %250, %290, %253, %.thread438, %._crit_edge555, %21, %27, %16
  %.sroa.0304.8 = phi i32 [ 2, %16 ], [ %30, %27 ], [ 0, %21 ], [ 0, %._crit_edge555 ], [ %.sroa.0304.3.ph, %.thread438 ], [ %spec.select429, %290 ], [ %spec.select427, %253 ], [ 1, %262 ], [ 2, %250 ], [ 2, %273 ], [ 2, %277 ], [ 2, %280 ], [ 2, %283 ]
  %.sroa.31.8 = phi i64 [ 0, %16 ], [ %31, %27 ], [ 0, %21 ], [ %.6326.lcssa, %._crit_edge555 ], [ %.sroa.31.3.ph, %.thread438 ], [ %.6326550, %290 ], [ %.6326550, %253 ], [ %.6326550, %250 ], [ %.6326550, %273 ], [ %.6326550, %277 ], [ %.6326550, %280 ], [ %.6326550, %283 ], [ %.6326550, %262 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.0304.8, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.31.8, 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

; Function Attrs: inlinehint nounwind uwtable
declare ptr @bsearch(ptr noundef nonnull, ptr noundef nonnull, i64 noundef, i64 noundef, ptr noundef nonnull) local_unnamed_addr #4

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

declare i64 @ber_skip_length(ptr noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

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

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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { 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_SEQUENCE_specifics_s", !10, i64 0, !10, i64 4, !7, i64 8, !10, i64 16, !7, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44}
!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 = !{!6, !10, i64 144}
!23 = !{!24, !10, i64 4}
!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 = !{!14, !10, i64 40}
!26 = !{!14, !10, i64 44}
!27 = !{!8, !8, i64 0}
!28 = !{!10, !10, i64 0}
!29 = !{!24, !10, i64 12}
!30 = !{!24, !10, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!34, !10, i64 0}
!34 = !{!"asn_TYPE_tag2member_s", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!35 = !{!34, !10, i64 4}
!36 = !{!14, !7, i64 8}
!37 = !{!14, !10, i64 16}
!38 = !{!34, !10, i64 8}
!39 = !{!34, !10, i64 12}
!40 = distinct !{!40, !32}
!41 = !{!24, !10, i64 8}
!42 = !{!24, !7, i64 24}
!43 = !{!6, !7, i64 40}
!44 = !{!24, !10, i64 16}
!45 = distinct !{!45, !32}
!46 = distinct !{!46, !32}


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