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

; 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_CHOICE_specifics_s = type { i32, i32, i32, i32, ptr, i32, ptr, 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 }

@.str = external hidden unnamed_addr constant [28 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @CHOICE_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 i64, align 8
  %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 %struct.asn_TYPE_tag2member_s, align 4
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %struct.asn_dec_rval_s, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = 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
  %36 = load ptr, ptr %9, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %36, i32 0, i32 19
  %38 = load ptr, ptr %37, align 8, !tbaa !13
  store ptr %38, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %39 = load ptr, ptr %9, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %39, i32 0, i32 17
  %41 = load ptr, ptr %40, align 8, !tbaa !15
  store ptr %41, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %42 = load ptr, ptr %10, align 8, !tbaa !5
  %43 = load ptr, ptr %42, align 8, !tbaa !5
  store ptr %43, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  store i64 0, ptr %20, align 8, !tbaa !9
  %44 = load ptr, ptr %16, align 8, !tbaa !5
  %45 = icmp eq ptr %44, null
  br i1 %45, label %46, label %63

46:                                               ; preds = %6
  %47 = load ptr, ptr %14, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %47, i32 0, i32 0
  %49 = load i32, ptr %48, align 8, !tbaa !16
  %50 = sext i32 %49 to i64
  %51 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %50) #7
  %52 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %51, ptr %52, align 8, !tbaa !5
  store ptr %51, ptr %16, align 8, !tbaa !5
  %53 = load ptr, ptr %16, align 8, !tbaa !5
  %54 = icmp eq ptr %53, null
  br i1 %54, label %55, label %62

55:                                               ; preds = %46
  br label %56

56:                                               ; preds = %55
  %57 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %57, align 8, !tbaa !18
  %58 = load i64, ptr %20, align 8, !tbaa !9
  %59 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %58, ptr %59, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %702

60:                                               ; No predecessors!
  br label %61

61:                                               ; preds = %60
  br label %62

62:                                               ; preds = %61, %46
  br label %63

63:                                               ; preds = %62, %6
  %64 = load ptr, ptr %16, align 8, !tbaa !5
  %65 = load ptr, ptr %14, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %65, i32 0, i32 1
  %67 = load i32, ptr %66, align 4, !tbaa !21
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds i8, ptr %64, i64 %68
  store ptr %69, ptr %17, align 8, !tbaa !5
  %70 = load ptr, ptr %17, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %70, i32 0, i32 0
  %72 = load i16, ptr %71, align 8, !tbaa !22
  %73 = sext i16 %72 to i32
  switch i32 %73, label %695 [
    i32 0, label %74
    i32 1, label %151
    i32 2, label %334
    i32 3, label %507
    i32 4, label %695
  ]

74:                                               ; preds = %63
  %75 = load i32, ptr %13, align 4, !tbaa !11
  %76 = icmp ne i32 %75, 0
  br i1 %76, label %82, label %77

77:                                               ; preds = %74
  %78 = load ptr, ptr %9, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %78, i32 0, i32 13
  %80 = load i32, ptr %79, align 8, !tbaa !25
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %82, label %138

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

99:                                               ; preds = %82
  store i32 1, ptr %21, align 4
  br label %702

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

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

112:                                              ; preds = %105, %100
  br label %113

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

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

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

136:                                              ; preds = %132
  br label %137

137:                                              ; preds = %136
  br label %141

138:                                              ; preds = %77
  %139 = load ptr, ptr %17, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %139, i32 0, i32 4
  store i64 -1, ptr %140, align 8, !tbaa !27
  br label %141

141:                                              ; preds = %138, %137
  br label %142

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

149:                                              ; preds = %142
  br label %150

150:                                              ; preds = %149
  br label %151

151:                                              ; preds = %150, %63
  %152 = load ptr, ptr %11, align 8, !tbaa !5
  %153 = load i64, ptr %12, align 8, !tbaa !9
  %154 = load ptr, ptr %17, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %154, i32 0, i32 4
  %156 = load i64, ptr %155, align 8, !tbaa !27
  %157 = icmp ult i64 %153, %156
  br i1 %157, label %158, label %160

158:                                              ; preds = %151
  %159 = load i64, ptr %12, align 8, !tbaa !9
  br label %164

160:                                              ; preds = %151
  %161 = load ptr, ptr %17, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %161, i32 0, i32 4
  %163 = load i64, ptr %162, align 8, !tbaa !27
  br label %164

164:                                              ; preds = %160, %158
  %165 = phi i64 [ %159, %158 ], [ %163, %160 ]
  %166 = call i64 @ber_fetch_tag(ptr noundef %152, i64 noundef %165, ptr noundef %18)
  store i64 %166, ptr %19, align 8, !tbaa !9
  %167 = load i64, ptr %19, align 8, !tbaa !9
  switch i64 %167, label %194 [
    i64 0, label %168
    i64 -1, label %187
  ]

168:                                              ; preds = %164
  %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 !27
  %172 = icmp sge i64 %171, 0
  br i1 %172, label %173, label %179

173:                                              ; preds = %168
  %174 = load ptr, ptr %17, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %174, i32 0, i32 4
  %176 = load i64, ptr %175, align 8, !tbaa !27
  %177 = load i64, ptr %12, align 8, !tbaa !9
  %178 = icmp ule i64 %176, %177
  br i1 %178, label %186, label %179

179:                                              ; preds = %173, %168
  br label %180

180:                                              ; preds = %179
  %181 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %181, align 8, !tbaa !18
  %182 = load i64, ptr %20, align 8, !tbaa !9
  %183 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %182, ptr %183, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %702

184:                                              ; No predecessors!
  br label %185

185:                                              ; preds = %184
  br label %186

186:                                              ; preds = %185, %173
  br label %187

187:                                              ; preds = %186, %164
  br label %188

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

192:                                              ; No predecessors!
  br label %193

193:                                              ; preds = %192
  br label %194

194:                                              ; preds = %193, %164
  br label %195

195:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #6
  %196 = load i32, ptr %18, align 4, !tbaa !11
  %197 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %25, i32 0, i32 0
  store i32 %196, ptr %197, align 4, !tbaa !29
  %198 = load ptr, ptr %14, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %198, i32 0, i32 4
  %200 = load ptr, ptr %199, align 8, !tbaa !31
  %201 = load ptr, ptr %14, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %201, i32 0, i32 5
  %203 = load i32, ptr %202, align 8, !tbaa !32
  %204 = sext i32 %203 to i64
  %205 = call ptr @bsearch(ptr noundef %25, ptr noundef %200, i64 noundef %204, i64 noundef 16, ptr noundef @_search4tag)
  store ptr %205, ptr %24, align 8, !tbaa !5
  %206 = load ptr, ptr %24, align 8, !tbaa !5
  %207 = icmp ne ptr %206, null
  br i1 %207, label %208, label %224

208:                                              ; preds = %195
  br label %209

209:                                              ; preds = %208
  %210 = load ptr, ptr %17, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %210, i32 0, i32 0
  %212 = load i16, ptr %211, align 8, !tbaa !22
  %213 = add i16 %212, 1
  store i16 %213, ptr %211, align 8, !tbaa !22
  %214 = load ptr, ptr %17, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %214, i32 0, i32 1
  store i16 0, ptr %215, align 2, !tbaa !28
  br label %216

216:                                              ; preds = %209
  br label %217

217:                                              ; preds = %216
  %218 = load ptr, ptr %24, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %218, i32 0, i32 1
  %220 = load i32, ptr %219, align 4, !tbaa !33
  %221 = trunc i32 %220 to i16
  %222 = load ptr, ptr %17, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %222, i32 0, i32 1
  store i16 %221, ptr %223, align 2, !tbaa !28
  store i32 14, ptr %21, align 4
  br label %329

224:                                              ; preds = %195
  %225 = load ptr, ptr %14, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %225, i32 0, i32 7
  %227 = load i32, ptr %226, align 8, !tbaa !34
  %228 = icmp eq i32 %227, -1
  br i1 %228, label %229, label %236

229:                                              ; preds = %224
  br label %230

230:                                              ; preds = %229
  %231 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %231, align 8, !tbaa !18
  %232 = load i64, ptr %20, align 8, !tbaa !9
  %233 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %232, ptr %233, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %329

234:                                              ; No predecessors!
  br label %235

235:                                              ; preds = %234
  br label %327

236:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %237 = load ptr, ptr %8, align 8, !tbaa !5
  %238 = load ptr, ptr %11, align 8, !tbaa !5
  %239 = load i8, ptr %238, align 1, !tbaa !35
  %240 = zext i8 %239 to i32
  %241 = and i32 %240, 32
  %242 = icmp ne i32 %241, 0
  %243 = zext i1 %242 to i64
  %244 = select i1 %242, i32 1, i32 0
  %245 = load ptr, ptr %11, align 8, !tbaa !5
  %246 = load i64, ptr %19, align 8, !tbaa !9
  %247 = getelementptr inbounds i8, ptr %245, i64 %246
  %248 = load i64, ptr %12, align 8, !tbaa !9
  %249 = load ptr, ptr %17, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %249, i32 0, i32 4
  %251 = load i64, ptr %250, align 8, !tbaa !27
  %252 = icmp ult i64 %248, %251
  br i1 %252, label %253, label %255

253:                                              ; preds = %236
  %254 = load i64, ptr %12, align 8, !tbaa !9
  br label %259

255:                                              ; preds = %236
  %256 = load ptr, ptr %17, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %256, i32 0, i32 4
  %258 = load i64, ptr %257, align 8, !tbaa !27
  br label %259

259:                                              ; preds = %255, %253
  %260 = phi i64 [ %254, %253 ], [ %258, %255 ]
  %261 = load i64, ptr %19, align 8, !tbaa !9
  %262 = sub i64 %260, %261
  %263 = call i64 @ber_skip_length(ptr noundef %237, i32 noundef %244, ptr noundef %247, i64 noundef %262)
  store i64 %263, ptr %26, align 8, !tbaa !9
  %264 = load i64, ptr %26, align 8, !tbaa !9
  switch i64 %264, label %291 [
    i64 0, label %265
    i64 -1, label %284
  ]

265:                                              ; preds = %259
  %266 = load ptr, ptr %17, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %266, i32 0, i32 4
  %268 = load i64, ptr %267, align 8, !tbaa !27
  %269 = icmp sge i64 %268, 0
  br i1 %269, label %270, label %276

270:                                              ; preds = %265
  %271 = load ptr, ptr %17, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %271, i32 0, i32 4
  %273 = load i64, ptr %272, align 8, !tbaa !27
  %274 = load i64, ptr %12, align 8, !tbaa !9
  %275 = icmp ule i64 %273, %274
  br i1 %275, label %283, label %276

276:                                              ; preds = %270, %265
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 255, i32 noundef 100, ptr noundef null)
  br label %277

277:                                              ; preds = %276
  %278 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %278, align 8, !tbaa !18
  %279 = load i64, ptr %20, align 8, !tbaa !9
  %280 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %279, ptr %280, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %324

281:                                              ; No predecessors!
  br label %282

282:                                              ; preds = %281
  br label %283

283:                                              ; preds = %282, %270
  br label %284

284:                                              ; preds = %283, %259
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 261, i32 noundef 100, ptr noundef null)
  br label %285

285:                                              ; preds = %284
  %286 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %286, align 8, !tbaa !18
  %287 = load i64, ptr %20, align 8, !tbaa !9
  %288 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %287, ptr %288, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %324

289:                                              ; No predecessors!
  br label %290

290:                                              ; preds = %289
  br label %291

291:                                              ; preds = %290, %259
  br label %292

292:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %293 = load i64, ptr %26, align 8, !tbaa !9
  %294 = load i64, ptr %19, align 8, !tbaa !9
  %295 = add nsw i64 %293, %294
  store i64 %295, ptr %27, align 8, !tbaa !9
  %296 = load ptr, ptr %11, align 8, !tbaa !5
  %297 = load i64, ptr %27, align 8, !tbaa !9
  %298 = getelementptr inbounds i8, ptr %296, i64 %297
  store ptr %298, ptr %11, align 8, !tbaa !5
  %299 = load i64, ptr %27, align 8, !tbaa !9
  %300 = load i64, ptr %12, align 8, !tbaa !9
  %301 = sub i64 %300, %299
  store i64 %301, ptr %12, align 8, !tbaa !9
  %302 = load ptr, ptr %17, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %302, i32 0, i32 4
  %304 = load i64, ptr %303, align 8, !tbaa !27
  %305 = icmp sge i64 %304, 0
  br i1 %305, label %306, label %312

306:                                              ; preds = %292
  %307 = load i64, ptr %27, align 8, !tbaa !9
  %308 = load ptr, ptr %17, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %308, i32 0, i32 4
  %310 = load i64, ptr %309, align 8, !tbaa !27
  %311 = sub i64 %310, %307
  store i64 %311, ptr %309, align 8, !tbaa !27
  br label %312

312:                                              ; preds = %306, %292
  %313 = load i64, ptr %27, align 8, !tbaa !9
  %314 = load i64, ptr %20, align 8, !tbaa !9
  %315 = add i64 %314, %313
  store i64 %315, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  br label %316

316:                                              ; preds = %312
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317
  %319 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %319, align 8, !tbaa !18
  %320 = load i64, ptr %20, align 8, !tbaa !9
  %321 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %320, ptr %321, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %324

322:                                              ; No predecessors!
  br label %323

323:                                              ; preds = %322
  store i32 0, ptr %21, align 4
  br label %324

324:                                              ; preds = %323, %318, %285, %277
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  %325 = load i32, ptr %21, align 4
  switch i32 %325, label %329 [
    i32 0, label %326
  ]

326:                                              ; preds = %324
  br label %327

327:                                              ; preds = %326, %235
  br label %328

328:                                              ; preds = %327
  store i32 0, ptr %21, align 4
  br label %329

329:                                              ; preds = %328, %324, %230, %217
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  %330 = load i32, ptr %21, align 4
  switch i32 %330, label %702 [
    i32 0, label %331
    i32 14, label %333
  ]

331:                                              ; preds = %329
  br label %332

332:                                              ; preds = %331
  br label %333

333:                                              ; preds = %332, %329
  br label %334

334:                                              ; preds = %333, %63
  br label %335

335:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %336 = load ptr, ptr %15, align 8, !tbaa !5
  %337 = load ptr, ptr %17, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %337, i32 0, i32 1
  %339 = load i16, ptr %338, align 2, !tbaa !28
  %340 = sext i16 %339 to i64
  %341 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %336, i64 %340
  store ptr %341, ptr %28, align 8, !tbaa !5
  %342 = load ptr, ptr %28, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %342, i32 0, i32 0
  %344 = load i32, ptr %343, align 8, !tbaa !36
  %345 = and i32 %344, 1
  %346 = icmp ne i32 %345, 0
  br i1 %346, label %347, label %354

347:                                              ; preds = %335
  %348 = load ptr, ptr %16, align 8, !tbaa !5
  %349 = load ptr, ptr %28, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %349, i32 0, i32 2
  %351 = load i32, ptr %350, align 8, !tbaa !38
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds i8, ptr %348, i64 %352
  store ptr %353, ptr %30, align 8, !tbaa !5
  br label %361

354:                                              ; preds = %335
  %355 = load ptr, ptr %16, align 8, !tbaa !5
  %356 = load ptr, ptr %28, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %356, i32 0, i32 2
  %358 = load i32, ptr %357, align 8, !tbaa !38
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds i8, ptr %355, i64 %359
  store ptr %360, ptr %29, align 8, !tbaa !5
  store ptr %29, ptr %30, align 8, !tbaa !5
  br label %361

361:                                              ; preds = %354, %347
  %362 = load ptr, ptr %16, align 8, !tbaa !5
  %363 = load ptr, ptr %14, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %363, i32 0, i32 2
  %365 = load i32, ptr %364, align 8, !tbaa !39
  %366 = load ptr, ptr %14, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %366, i32 0, i32 3
  %368 = load i32, ptr %367, align 4, !tbaa !40
  %369 = load ptr, ptr %17, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %369, i32 0, i32 1
  %371 = load i16, ptr %370, align 2, !tbaa !28
  %372 = sext i16 %371 to i32
  %373 = add nsw i32 %372, 1
  call void @_set_present_idx(ptr noundef %362, i32 noundef %365, i32 noundef %368, i32 noundef %373)
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #6
  %374 = load ptr, ptr %28, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %374, i32 0, i32 5
  %376 = load ptr, ptr %375, align 8, !tbaa !41
  %377 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %376, i32 0, i32 5
  %378 = load ptr, ptr %377, align 8, !tbaa !42
  %379 = load ptr, ptr %8, align 8, !tbaa !5
  %380 = load ptr, ptr %28, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %380, i32 0, i32 5
  %382 = load ptr, ptr %381, align 8, !tbaa !41
  %383 = load ptr, ptr %30, align 8, !tbaa !5
  %384 = load ptr, ptr %11, align 8, !tbaa !5
  %385 = load i64, ptr %12, align 8, !tbaa !9
  %386 = load ptr, ptr %17, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %386, i32 0, i32 4
  %388 = load i64, ptr %387, align 8, !tbaa !27
  %389 = icmp ult i64 %385, %388
  br i1 %389, label %390, label %392

390:                                              ; preds = %361
  %391 = load i64, ptr %12, align 8, !tbaa !9
  br label %396

392:                                              ; preds = %361
  %393 = load ptr, ptr %17, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %393, i32 0, i32 4
  %395 = load i64, ptr %394, align 8, !tbaa !27
  br label %396

396:                                              ; preds = %392, %390
  %397 = phi i64 [ %391, %390 ], [ %395, %392 ]
  %398 = load ptr, ptr %28, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %398, i32 0, i32 4
  %400 = load i32, ptr %399, align 8, !tbaa !43
  %401 = call { i32, i64 } %378(ptr noundef %379, ptr noundef %382, ptr noundef %383, ptr noundef %384, i64 noundef %397, i32 noundef %400)
  %402 = getelementptr inbounds { i32, i64 }, ptr %31, i32 0, i32 0
  %403 = extractvalue { i32, i64 } %401, 0
  store i32 %403, ptr %402, align 8
  %404 = getelementptr inbounds { i32, i64 }, ptr %31, i32 0, i32 1
  %405 = extractvalue { i32, i64 } %401, 1
  store i64 %405, ptr %404, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %31, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #6
  %406 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  %407 = load i32, ptr %406, align 8, !tbaa !18
  switch i32 %407, label %467 [
    i32 0, label %467
    i32 1, label %408
    i32 2, label %458
  ]

408:                                              ; preds = %396
  %409 = load ptr, ptr %17, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %409, i32 0, i32 4
  %411 = load i64, ptr %410, align 8, !tbaa !27
  %412 = icmp sge i64 %411, 0
  br i1 %412, label %413, label %419

413:                                              ; preds = %408
  %414 = load ptr, ptr %17, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %414, i32 0, i32 4
  %416 = load i64, ptr %415, align 8, !tbaa !27
  %417 = load i64, ptr %12, align 8, !tbaa !9
  %418 = icmp ule i64 %416, %417
  br i1 %418, label %451, label %419

419:                                              ; preds = %413, %408
  br label %420

420:                                              ; preds = %419
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %421 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %422 = load i64, ptr %421, align 8, !tbaa !20
  store i64 %422, ptr %32, align 8, !tbaa !9
  %423 = load ptr, ptr %11, align 8, !tbaa !5
  %424 = load i64, ptr %32, align 8, !tbaa !9
  %425 = getelementptr inbounds i8, ptr %423, i64 %424
  store ptr %425, ptr %11, align 8, !tbaa !5
  %426 = load i64, ptr %32, align 8, !tbaa !9
  %427 = load i64, ptr %12, align 8, !tbaa !9
  %428 = sub i64 %427, %426
  store i64 %428, ptr %12, align 8, !tbaa !9
  %429 = load ptr, ptr %17, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %429, i32 0, i32 4
  %431 = load i64, ptr %430, align 8, !tbaa !27
  %432 = icmp sge i64 %431, 0
  br i1 %432, label %433, label %439

433:                                              ; preds = %420
  %434 = load i64, ptr %32, align 8, !tbaa !9
  %435 = load ptr, ptr %17, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %435, i32 0, i32 4
  %437 = load i64, ptr %436, align 8, !tbaa !27
  %438 = sub i64 %437, %434
  store i64 %438, ptr %436, align 8, !tbaa !27
  br label %439

439:                                              ; preds = %433, %420
  %440 = load i64, ptr %32, align 8, !tbaa !9
  %441 = load i64, ptr %20, align 8, !tbaa !9
  %442 = add i64 %441, %440
  store i64 %442, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  br label %443

443:                                              ; preds = %439
  br label %444

444:                                              ; preds = %443
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 313, i32 noundef 100, ptr noundef null)
  br label %445

445:                                              ; preds = %444
  %446 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %446, align 8, !tbaa !18
  %447 = load i64, ptr %20, align 8, !tbaa !9
  %448 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %447, ptr %448, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %493

449:                                              ; No predecessors!
  br label %450

450:                                              ; preds = %449
  br label %451

451:                                              ; preds = %450, %413
  br label %452

452:                                              ; preds = %451
  %453 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %453, align 8, !tbaa !18
  %454 = load i64, ptr %20, align 8, !tbaa !9
  %455 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %454, ptr %455, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %493

456:                                              ; No predecessors!
  br label %457

457:                                              ; preds = %456
  br label %458

458:                                              ; preds = %457, %396
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 318, i32 noundef 100, ptr noundef null)
  br label %459

459:                                              ; preds = %458
  %460 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  %461 = load i32, ptr %460, align 8, !tbaa !18
  %462 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 %461, ptr %462, align 8, !tbaa !18
  %463 = load i64, ptr %20, align 8, !tbaa !9
  %464 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %463, ptr %464, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %493

465:                                              ; No predecessors!
  br label %466

466:                                              ; preds = %465
  br label %467

467:                                              ; preds = %466, %396, %396
  br label %468

468:                                              ; preds = %467
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %469 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  %470 = load i64, ptr %469, align 8, !tbaa !20
  store i64 %470, ptr %33, align 8, !tbaa !9
  %471 = load ptr, ptr %11, align 8, !tbaa !5
  %472 = load i64, ptr %33, align 8, !tbaa !9
  %473 = getelementptr inbounds i8, ptr %471, i64 %472
  store ptr %473, ptr %11, align 8, !tbaa !5
  %474 = load i64, ptr %33, align 8, !tbaa !9
  %475 = load i64, ptr %12, align 8, !tbaa !9
  %476 = sub i64 %475, %474
  store i64 %476, ptr %12, align 8, !tbaa !9
  %477 = load ptr, ptr %17, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %477, i32 0, i32 4
  %479 = load i64, ptr %478, align 8, !tbaa !27
  %480 = icmp sge i64 %479, 0
  br i1 %480, label %481, label %487

481:                                              ; preds = %468
  %482 = load i64, ptr %33, align 8, !tbaa !9
  %483 = load ptr, ptr %17, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %483, i32 0, i32 4
  %485 = load i64, ptr %484, align 8, !tbaa !27
  %486 = sub i64 %485, %482
  store i64 %486, ptr %484, align 8, !tbaa !27
  br label %487

487:                                              ; preds = %481, %468
  %488 = load i64, ptr %33, align 8, !tbaa !9
  %489 = load i64, ptr %20, align 8, !tbaa !9
  %490 = add i64 %489, %488
  store i64 %490, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %491

491:                                              ; preds = %487
  br label %492

492:                                              ; preds = %491
  store i32 0, ptr %21, align 4
  br label %493

493:                                              ; preds = %492, %459, %452, %445
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  %494 = load i32, ptr %21, align 4
  switch i32 %494, label %702 [
    i32 0, label %495
  ]

495:                                              ; preds = %493
  br label %496

496:                                              ; preds = %495
  br label %497

497:                                              ; preds = %496
  br label %498

498:                                              ; preds = %497
  %499 = load ptr, ptr %17, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %499, i32 0, i32 0
  %501 = load i16, ptr %500, align 8, !tbaa !22
  %502 = add i16 %501, 1
  store i16 %502, ptr %500, align 8, !tbaa !22
  %503 = load ptr, ptr %17, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %503, i32 0, i32 1
  store i16 0, ptr %504, align 2, !tbaa !28
  br label %505

505:                                              ; preds = %498
  br label %506

506:                                              ; preds = %505
  br label %507

507:                                              ; preds = %506, %63
  %508 = load ptr, ptr %17, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %508, i32 0, i32 4
  %510 = load i64, ptr %509, align 8, !tbaa !27
  %511 = icmp sgt i64 %510, 0
  br i1 %511, label %512, label %519

512:                                              ; preds = %507
  br label %513

513:                                              ; preds = %512
  %514 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %514, align 8, !tbaa !18
  %515 = load i64, ptr %20, align 8, !tbaa !9
  %516 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %515, ptr %516, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %702

517:                                              ; No predecessors!
  br label %518

518:                                              ; preds = %517
  br label %519

519:                                              ; preds = %518, %507
  %520 = load ptr, ptr %17, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %520, i32 0, i32 4
  %522 = load i64, ptr %521, align 8, !tbaa !27
  %523 = icmp eq i64 %522, -1
  br i1 %523, label %524, label %542

524:                                              ; preds = %519
  %525 = load i32, ptr %13, align 4, !tbaa !11
  %526 = icmp ne i32 %525, 0
  br i1 %526, label %542, label %527

527:                                              ; preds = %524
  %528 = load ptr, ptr %9, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %528, i32 0, i32 13
  %530 = load i32, ptr %529, align 8, !tbaa !25
  %531 = icmp ne i32 %530, 0
  br i1 %531, label %542, label %532

532:                                              ; preds = %527
  br label %533

533:                                              ; preds = %532
  %534 = load ptr, ptr %17, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %534, i32 0, i32 0
  %536 = load i16, ptr %535, align 8, !tbaa !22
  %537 = add i16 %536, 1
  store i16 %537, ptr %535, align 8, !tbaa !22
  %538 = load ptr, ptr %17, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %538, i32 0, i32 1
  store i16 0, ptr %539, align 2, !tbaa !28
  br label %540

540:                                              ; preds = %533
  br label %541

541:                                              ; preds = %540
  br label %695

542:                                              ; preds = %527, %524, %519
  br label %543

543:                                              ; preds = %684, %682, %542
  %544 = load ptr, ptr %17, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %544, i32 0, i32 4
  %546 = load i64, ptr %545, align 8, !tbaa !27
  %547 = icmp slt i64 %546, 0
  br i1 %547, label %548, label %685

548:                                              ; preds = %543
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %549 = load ptr, ptr %11, align 8, !tbaa !5
  %550 = load i64, ptr %12, align 8, !tbaa !9
  %551 = load ptr, ptr %17, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %551, i32 0, i32 4
  %553 = load i64, ptr %552, align 8, !tbaa !27
  %554 = icmp ult i64 %550, %553
  br i1 %554, label %555, label %557

555:                                              ; preds = %548
  %556 = load i64, ptr %12, align 8, !tbaa !9
  br label %561

557:                                              ; preds = %548
  %558 = load ptr, ptr %17, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %558, i32 0, i32 4
  %560 = load i64, ptr %559, align 8, !tbaa !27
  br label %561

561:                                              ; preds = %557, %555
  %562 = phi i64 [ %556, %555 ], [ %560, %557 ]
  %563 = call i64 @ber_fetch_tag(ptr noundef %549, i64 noundef %562, ptr noundef %18)
  store i64 %563, ptr %34, align 8, !tbaa !9
  %564 = load i64, ptr %34, align 8, !tbaa !9
  switch i64 %564, label %591 [
    i64 0, label %565
    i64 -1, label %584
  ]

565:                                              ; preds = %561
  %566 = load ptr, ptr %17, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %566, i32 0, i32 4
  %568 = load i64, ptr %567, align 8, !tbaa !27
  %569 = icmp sge i64 %568, 0
  br i1 %569, label %570, label %576

570:                                              ; preds = %565
  %571 = load ptr, ptr %17, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %571, i32 0, i32 4
  %573 = load i64, ptr %572, align 8, !tbaa !27
  %574 = load i64, ptr %12, align 8, !tbaa !9
  %575 = icmp ule i64 %573, %574
  br i1 %575, label %583, label %576

576:                                              ; preds = %570, %565
  br label %577

577:                                              ; preds = %576
  %578 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %578, align 8, !tbaa !18
  %579 = load i64, ptr %20, align 8, !tbaa !9
  %580 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %579, ptr %580, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %682

581:                                              ; No predecessors!
  br label %582

582:                                              ; preds = %581
  br label %583

583:                                              ; preds = %582, %570
  br label %584

584:                                              ; preds = %583, %561
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 369, i32 noundef 100, ptr noundef null)
  br label %585

585:                                              ; preds = %584
  %586 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %586, align 8, !tbaa !18
  %587 = load i64, ptr %20, align 8, !tbaa !9
  %588 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %587, ptr %588, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %682

589:                                              ; No predecessors!
  br label %590

590:                                              ; preds = %589
  br label %591

591:                                              ; preds = %590, %561
  %592 = load ptr, ptr %11, align 8, !tbaa !5
  %593 = getelementptr inbounds i8, ptr %592, i64 0
  %594 = load i8, ptr %593, align 1, !tbaa !35
  %595 = zext i8 %594 to i32
  %596 = icmp eq i32 %595, 0
  br i1 %596, label %597, label %674

597:                                              ; preds = %591
  %598 = load i64, ptr %12, align 8, !tbaa !9
  %599 = load ptr, ptr %17, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %599, i32 0, i32 4
  %601 = load i64, ptr %600, align 8, !tbaa !27
  %602 = icmp ult i64 %598, %601
  br i1 %602, label %603, label %605

603:                                              ; preds = %597
  %604 = load i64, ptr %12, align 8, !tbaa !9
  br label %609

605:                                              ; preds = %597
  %606 = load ptr, ptr %17, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %606, i32 0, i32 4
  %608 = load i64, ptr %607, align 8, !tbaa !27
  br label %609

609:                                              ; preds = %605, %603
  %610 = phi i64 [ %604, %603 ], [ %608, %605 ]
  %611 = icmp ult i64 %610, 2
  br i1 %611, label %612, label %638

612:                                              ; preds = %609
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 378, i32 noundef 100, ptr noundef null)
  %613 = load ptr, ptr %17, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %613, i32 0, i32 4
  %615 = load i64, ptr %614, align 8, !tbaa !27
  %616 = icmp sge i64 %615, 0
  br i1 %616, label %617, label %630

617:                                              ; preds = %612
  %618 = load ptr, ptr %17, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %618, i32 0, i32 4
  %620 = load i64, ptr %619, align 8, !tbaa !27
  %621 = load i64, ptr %12, align 8, !tbaa !9
  %622 = icmp ule i64 %620, %621
  br i1 %622, label %623, label %630

623:                                              ; preds = %617
  br label %624

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

628:                                              ; No predecessors!
  br label %629

629:                                              ; preds = %628
  br label %637

630:                                              ; preds = %617, %612
  br label %631

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

635:                                              ; No predecessors!
  br label %636

636:                                              ; preds = %635
  br label %637

637:                                              ; preds = %636, %629
  br label %673

638:                                              ; preds = %609
  %639 = load ptr, ptr %11, align 8, !tbaa !5
  %640 = getelementptr inbounds i8, ptr %639, i64 1
  %641 = load i8, ptr %640, align 1, !tbaa !35
  %642 = zext i8 %641 to i32
  %643 = icmp eq i32 %642, 0
  br i1 %643, label %644, label %672

644:                                              ; preds = %638
  br label %645

645:                                              ; preds = %644
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  store i64 2, ptr %35, align 8, !tbaa !9
  %646 = load ptr, ptr %11, align 8, !tbaa !5
  %647 = load i64, ptr %35, align 8, !tbaa !9
  %648 = getelementptr inbounds i8, ptr %646, i64 %647
  store ptr %648, ptr %11, align 8, !tbaa !5
  %649 = load i64, ptr %35, align 8, !tbaa !9
  %650 = load i64, ptr %12, align 8, !tbaa !9
  %651 = sub i64 %650, %649
  store i64 %651, ptr %12, align 8, !tbaa !9
  %652 = load ptr, ptr %17, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %652, i32 0, i32 4
  %654 = load i64, ptr %653, align 8, !tbaa !27
  %655 = icmp sge i64 %654, 0
  br i1 %655, label %656, label %662

656:                                              ; preds = %645
  %657 = load i64, ptr %35, align 8, !tbaa !9
  %658 = load ptr, ptr %17, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %658, i32 0, i32 4
  %660 = load i64, ptr %659, align 8, !tbaa !27
  %661 = sub i64 %660, %657
  store i64 %661, ptr %659, align 8, !tbaa !27
  br label %662

662:                                              ; preds = %656, %645
  %663 = load i64, ptr %35, align 8, !tbaa !9
  %664 = load i64, ptr %20, align 8, !tbaa !9
  %665 = add i64 %664, %663
  store i64 %665, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %666

666:                                              ; preds = %662
  br label %667

667:                                              ; preds = %666
  %668 = load ptr, ptr %17, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %668, i32 0, i32 4
  %670 = load i64, ptr %669, align 8, !tbaa !27
  %671 = add nsw i64 %670, 1
  store i64 %671, ptr %669, align 8, !tbaa !27
  store i32 48, ptr %21, align 4
  br label %682, !llvm.loop !44

672:                                              ; preds = %638
  br label %673

673:                                              ; preds = %672, %637
  br label %681

674:                                              ; preds = %591
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 395, i32 noundef 100, ptr noundef null)
  br label %675

675:                                              ; preds = %674
  %676 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %676, align 8, !tbaa !18
  %677 = load i64, ptr %20, align 8, !tbaa !9
  %678 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %677, ptr %678, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %682

679:                                              ; No predecessors!
  br label %680

680:                                              ; preds = %679
  br label %681

681:                                              ; preds = %680, %673
  store i32 0, ptr %21, align 4
  br label %682

682:                                              ; preds = %681, %675, %667, %631, %624, %585, %577
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  %683 = load i32, ptr %21, align 4
  switch i32 %683, label %702 [
    i32 0, label %684
    i32 48, label %543
  ]

684:                                              ; preds = %682
  br label %543, !llvm.loop !44

685:                                              ; preds = %543
  br label %686

686:                                              ; preds = %685
  %687 = load ptr, ptr %17, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %687, i32 0, i32 0
  %689 = load i16, ptr %688, align 8, !tbaa !22
  %690 = add i16 %689, 1
  store i16 %690, ptr %688, align 8, !tbaa !22
  %691 = load ptr, ptr %17, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %691, i32 0, i32 1
  store i16 0, ptr %692, align 2, !tbaa !28
  br label %693

693:                                              ; preds = %686
  br label %694

694:                                              ; preds = %693
  br label %695

695:                                              ; preds = %694, %541, %63, %63
  br label %696

696:                                              ; preds = %695
  %697 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %697, align 8, !tbaa !18
  %698 = load i64, ptr %20, align 8, !tbaa !9
  %699 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %698, ptr %699, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %702

700:                                              ; No predecessors!
  br label %701

701:                                              ; preds = %700
  store i32 0, ptr %21, align 4
  br label %702

702:                                              ; preds = %701, %696, %682, %513, %493, %329, %188, %180, %99, %56
  call void @llvm.lifetime.end.p0(i64 8, 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
  %703 = load i32, ptr %21, align 4
  switch i32 %703, label %706 [
    i32 0, label %704
    i32 1, label %704
  ]

704:                                              ; preds = %702, %702
  %705 = load { i32, i64 }, ptr %7, align 8
  ret { i32, i64 } %705

706:                                              ; preds = %702
  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 @_search4tag(ptr noundef, ptr noundef) #0

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

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

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

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_CHOICE_specifics_s", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !6, i64 16, !12, i64 24, !6, i64 32, !12, i64 40}
!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 = !{!14, !12, i64 104}
!26 = !{i64 0, i64 4, !11, i64 8, i64 8, !9}
!27 = !{!23, !10, i64 16}
!28 = !{!23, !24, i64 2}
!29 = !{!30, !12, i64 0}
!30 = !{!"asn_TYPE_tag2member_s", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12}
!31 = !{!17, !6, i64 16}
!32 = !{!17, !12, i64 24}
!33 = !{!30, !12, i64 4}
!34 = !{!17, !12, i64 40}
!35 = !{!7, !7, i64 0}
!36 = !{!37, !12, i64 0}
!37 = !{!"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}
!38 = !{!37, !12, i64 8}
!39 = !{!17, !12, i64 8}
!40 = !{!17, !12, i64 12}
!41 = !{!37, !6, i64 24}
!42 = !{!14, !6, i64 40}
!43 = !{!37, !12, i64 16}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}


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

%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 }

@.str = external hidden unnamed_addr constant [28 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @CHOICE_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 %struct.asn_TYPE_tag2member_s, align 4
  %9 = alloca ptr, align 8
  %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 %.thread270, label %21

21:                                               ; preds = %16, %6
  %.0198 = 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 %.0198, i64 %24
  %26 = load i16, ptr %25, align 8, !tbaa !16
  switch i16 %26, label %.thread270 [
    i16 0, label %27
    i16 1, label %._crit_edge298
    i16 2, label %._crit_edge299
    i16 3, label %._crit_edge302
  ]

._crit_edge302:                                   ; preds = %21
  %.phi.trans.insert303 = getelementptr inbounds i8, ptr %25, i64 16
  %.pre304 = load i64, ptr %.phi.trans.insert303, align 8, !tbaa !20
  br label %152

._crit_edge299:                                   ; preds = %21
  %.phi.trans.insert300 = getelementptr inbounds i8, ptr %25, i64 2
  %.pre301 = load i16, ptr %.phi.trans.insert300, align 2, !tbaa !21
  br label %101

._crit_edge298:                                   ; preds = %21
  %.phi.trans.insert = getelementptr inbounds i8, ptr %25, i64 16
  %.pre = load i64, ptr %.phi.trans.insert, align 8, !tbaa !20
  br label %53

27:                                               ; preds = %21
  %.not = icmp eq i32 %5, 0
  br i1 %.not, label %28, label %31

28:                                               ; preds = %27
  %29 = getelementptr inbounds i8, ptr %1, i64 104
  %30 = load i32, ptr %29, align 8, !tbaa !22
  %.not236 = icmp eq i32 %30, 0
  br i1 %.not236, label %46, label %31

31:                                               ; preds = %28, %27
  %32 = getelementptr inbounds i8, ptr %25, i64 16
  %33 = 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 %32, ptr noundef null) #6
  %34 = extractvalue { i32, i64 } %33, 0
  %35 = extractvalue { i32, i64 } %33, 1
  %.not237 = icmp eq i32 %34, 0
  br i1 %.not237, label %36, label %.thread270

36:                                               ; preds = %31
  %37 = load i64, ptr %32, align 8, !tbaa !20
  %38 = icmp sgt i64 %37, -1
  br i1 %38, label %41, label %.thread

.thread:                                          ; preds = %36
  %39 = getelementptr inbounds i8, ptr %3, i64 %35
  %40 = sub i64 %4, %35
  br label %48

41:                                               ; preds = %36
  %42 = add i64 %37, %35
  %43 = getelementptr inbounds i8, ptr %3, i64 %35
  %44 = sub i64 %4, %35
  %45 = icmp slt i64 %42, 0
  %spec.store.select = select i1 %45, i64 %42, i64 %37
  store i64 %spec.store.select, ptr %32, align 8
  br label %48

46:                                               ; preds = %28
  %47 = getelementptr inbounds i8, ptr %25, i64 16
  store i64 -1, ptr %47, align 8, !tbaa !20
  br label %48

48:                                               ; preds = %41, %.thread, %46
  %49 = phi i64 [ -1, %46 ], [ %37, %.thread ], [ %spec.store.select, %41 ]
  %.0199 = phi i64 [ 0, %46 ], [ %35, %.thread ], [ %35, %41 ]
  %.0189 = phi i64 [ %4, %46 ], [ %40, %.thread ], [ %44, %41 ]
  %.0 = phi ptr [ %3, %46 ], [ %39, %.thread ], [ %43, %41 ]
  %50 = load i16, ptr %25, align 8, !tbaa !16
  %51 = add i16 %50, 1
  store i16 %51, ptr %25, align 8, !tbaa !16
  %52 = getelementptr inbounds i8, ptr %25, i64 2
  store i16 0, ptr %52, align 2, !tbaa !21
  br label %53

53:                                               ; preds = %._crit_edge298, %48
  %54 = phi i64 [ %.pre, %._crit_edge298 ], [ %49, %48 ]
  %.1200 = phi i64 [ 0, %._crit_edge298 ], [ %.0199, %48 ]
  %.1190 = phi i64 [ %4, %._crit_edge298 ], [ %.0189, %48 ]
  %.1 = phi ptr [ %3, %._crit_edge298 ], [ %.0, %48 ]
  %55 = getelementptr inbounds i8, ptr %25, i64 16
  %.1190. = tail call i64 @llvm.umin.i64(i64 %.1190, i64 %54)
  %56 = call i64 @ber_fetch_tag(ptr noundef %.1, i64 noundef %.1190., ptr noundef nonnull %7) #6
  switch i64 %56, label %61 [
    i64 0, label %57
    i64 -1, label %60
  ]

57:                                               ; preds = %53
  %58 = load i64, ptr %55, align 8, !tbaa !20
  %59 = icmp slt i64 %58, 0
  %.not238 = icmp ugt i64 %58, %.1190
  %or.cond247 = or i1 %59, %.not238
  br i1 %or.cond247, label %.thread270, label %60

60:                                               ; preds = %57, %53
  br label %.thread270

61:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #6
  %62 = load i32, ptr %7, align 4, !tbaa !23
  store i32 %62, ptr %8, align 4, !tbaa !24
  %63 = getelementptr inbounds i8, ptr %11, i64 16
  %64 = load ptr, ptr %63, align 8, !tbaa !26
  %65 = getelementptr inbounds i8, ptr %11, i64 24
  %66 = load i32, ptr %65, align 8, !tbaa !27
  %67 = sext i32 %66 to i64
  %68 = call ptr @bsearch(ptr noundef %8, ptr noundef %64, i64 noundef %67, i64 noundef 16, ptr noundef @_search4tag)
  %.not239 = icmp eq ptr %68, null
  br i1 %.not239, label %69, label %94

69:                                               ; preds = %61
  %70 = getelementptr inbounds i8, ptr %11, i64 40
  %71 = load i32, ptr %70, align 8, !tbaa !28
  %72 = icmp eq i32 %71, -1
  br i1 %72, label %.thread254, label %73

73:                                               ; preds = %69
  %74 = load i8, ptr %.1, align 1, !tbaa !29
  %75 = lshr i8 %74, 5
  %.lobit = and i8 %75, 1
  %76 = zext nneg i8 %.lobit to i32
  %77 = getelementptr inbounds i8, ptr %.1, i64 %56
  %78 = load i64, ptr %55, align 8, !tbaa !20
  %.1190.248 = call i64 @llvm.umin.i64(i64 %.1190, i64 %78)
  %79 = sub i64 %.1190.248, %56
  %80 = call i64 @ber_skip_length(ptr noundef %0, i32 noundef %76, ptr noundef nonnull %77, i64 noundef %79) #6
  switch i64 %80, label %86 [
    i64 0, label %81
    i64 -1, label %85
  ]

81:                                               ; preds = %73
  %82 = load i64, ptr %55, align 8, !tbaa !20
  %83 = icmp slt i64 %82, 0
  %.not241 = icmp ugt i64 %82, %.1190
  %or.cond249 = or i1 %83, %.not241
  br i1 %or.cond249, label %84, label %85

84:                                               ; preds = %81
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 255, i32 noundef 100, ptr noundef null) #6
  br label %.thread254

85:                                               ; preds = %81, %73
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 261, i32 noundef 100, ptr noundef null) #6
  br label %.thread254

86:                                               ; preds = %73
  %87 = add nsw i64 %80, %56
  %88 = load i64, ptr %55, align 8, !tbaa !20
  %89 = icmp sgt i64 %88, -1
  br i1 %89, label %90, label %92

90:                                               ; preds = %86
  %91 = sub i64 %88, %87
  store i64 %91, ptr %55, align 8, !tbaa !20
  br label %92

92:                                               ; preds = %90, %86
  %93 = add i64 %87, %.1200
  br label %.thread254

.thread254:                                       ; preds = %69, %92, %85, %84
  %.sroa.0181.3.ph = phi i32 [ 1, %84 ], [ 2, %85 ], [ 0, %92 ], [ 2, %69 ]
  %.sroa.25.3.ph = phi i64 [ %.1200, %84 ], [ %.1200, %85 ], [ %93, %92 ], [ %.1200, %69 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  br label %.thread270

94:                                               ; preds = %61
  %95 = load i16, ptr %25, align 8, !tbaa !16
  %96 = add i16 %95, 1
  store i16 %96, ptr %25, align 8, !tbaa !16
  %97 = getelementptr inbounds i8, ptr %25, i64 2
  %98 = getelementptr inbounds i8, ptr %68, i64 4
  %99 = load i32, ptr %98, align 4, !tbaa !30
  %100 = trunc i32 %99 to i16
  store i16 %100, ptr %97, align 2, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  br label %101

101:                                              ; preds = %._crit_edge299, %94
  %102 = phi i16 [ %.pre301, %._crit_edge299 ], [ %100, %94 ]
  %.4203 = phi i64 [ 0, %._crit_edge299 ], [ %.1200, %94 ]
  %.4193 = phi i64 [ %4, %._crit_edge299 ], [ %.1190, %94 ]
  %.4 = phi ptr [ %3, %._crit_edge299 ], [ %.1, %94 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  %103 = getelementptr inbounds i8, ptr %25, i64 2
  %104 = sext i16 %102 to i64
  %105 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %13, i64 %104
  %106 = load i32, ptr %105, align 8, !tbaa !31
  %107 = and i32 %106, 1
  %.not242 = icmp eq i32 %107, 0
  %108 = getelementptr inbounds i8, ptr %105, i64 8
  %109 = load i32, ptr %108, align 8, !tbaa !33
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds i8, ptr %.0198, i64 %110
  br i1 %.not242, label %112, label %113

112:                                              ; preds = %101
  store ptr %111, ptr %9, align 8, !tbaa !12
  br label %113

113:                                              ; preds = %101, %112
  %.0208 = phi ptr [ %9, %112 ], [ %111, %101 ]
  %114 = getelementptr inbounds i8, ptr %11, i64 8
  %115 = load i32, ptr %114, align 8, !tbaa !34
  %116 = getelementptr inbounds i8, ptr %11, i64 12
  %117 = load i32, ptr %116, align 4, !tbaa !35
  %118 = sext i16 %102 to i32
  %119 = add nsw i32 %118, 1
  call void @_set_present_idx(ptr noundef nonnull %.0198, i32 noundef %115, i32 noundef %117, i32 noundef %119)
  %120 = getelementptr inbounds i8, ptr %105, i64 24
  %121 = load ptr, ptr %120, align 8, !tbaa !36
  %122 = getelementptr inbounds i8, ptr %121, i64 40
  %123 = load ptr, ptr %122, align 8, !tbaa !37
  %124 = getelementptr inbounds i8, ptr %25, i64 16
  %125 = load i64, ptr %124, align 8, !tbaa !20
  %.4193. = call i64 @llvm.umin.i64(i64 %.4193, i64 %125)
  %126 = getelementptr inbounds i8, ptr %105, i64 16
  %127 = load i32, ptr %126, align 8, !tbaa !38
  %128 = call { i32, i64 } %123(ptr noundef %0, ptr noundef %121, ptr noundef nonnull %.0208, ptr noundef %.4, i64 noundef %.4193., i32 noundef %127) #6
  %129 = extractvalue { i32, i64 } %128, 0
  %130 = extractvalue { i32, i64 } %128, 1
  switch i32 %129, label %140 [
    i32 2, label %.thread262.sink.split
    i32 1, label %131
  ]

131:                                              ; preds = %113
  %132 = load i64, ptr %124, align 8, !tbaa !20
  %133 = icmp slt i64 %132, 0
  %.not243 = icmp ugt i64 %132, %.4193
  %or.cond250 = or i1 %133, %.not243
  br i1 %or.cond250, label %134, label %.thread262

134:                                              ; preds = %131
  %135 = icmp sgt i64 %132, -1
  br i1 %135, label %136, label %138

136:                                              ; preds = %134
  %137 = sub i64 %132, %130
  store i64 %137, ptr %124, align 8, !tbaa !20
  br label %138

138:                                              ; preds = %136, %134
  %139 = add i64 %130, %.4203
  br label %.thread262.sink.split

140:                                              ; preds = %113
  %141 = getelementptr inbounds i8, ptr %.4, i64 %130
  %142 = sub i64 %.4193, %130
  %143 = load i64, ptr %124, align 8, !tbaa !20
  %144 = icmp sgt i64 %143, -1
  br i1 %144, label %145, label %147

145:                                              ; preds = %140
  %146 = sub i64 %143, %130
  store i64 %146, ptr %124, align 8, !tbaa !20
  br label %147

.thread262.sink.split:                            ; preds = %113, %138
  %.sink = phi i64 [ 313, %138 ], [ 318, %113 ]
  %.sroa.25.4.ph.ph = phi i64 [ %139, %138 ], [ %.4203, %113 ]
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef %.sink, i32 noundef 100, ptr noundef null) #6
  br label %.thread262

.thread262:                                       ; preds = %.thread262.sink.split, %131
  %.sroa.0181.4.ph = phi i32 [ 2, %131 ], [ %129, %.thread262.sink.split ]
  %.sroa.25.4.ph = phi i64 [ %.4203, %131 ], [ %.sroa.25.4.ph.ph, %.thread262.sink.split ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  br label %.thread270

147:                                              ; preds = %145, %140
  %148 = phi i64 [ %146, %145 ], [ %143, %140 ]
  %149 = add i64 %130, %.4203
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  %150 = load i16, ptr %25, align 8, !tbaa !16
  %151 = add i16 %150, 1
  store i16 %151, ptr %25, align 8, !tbaa !16
  store i16 0, ptr %103, align 2, !tbaa !21
  br label %152

152:                                              ; preds = %._crit_edge302, %147
  %153 = phi i16 [ 3, %._crit_edge302 ], [ %151, %147 ]
  %154 = phi i64 [ %.pre304, %._crit_edge302 ], [ %148, %147 ]
  %.6205 = phi i64 [ 0, %._crit_edge302 ], [ %149, %147 ]
  %.6195 = phi i64 [ %4, %._crit_edge302 ], [ %142, %147 ]
  %.6 = phi ptr [ %3, %._crit_edge302 ], [ %141, %147 ]
  %155 = getelementptr inbounds i8, ptr %25, i64 16
  %156 = icmp sgt i64 %154, 0
  br i1 %156, label %.thread270, label %157

157:                                              ; preds = %152
  %158 = icmp ne i64 %154, -1
  %159 = icmp ne i32 %5, 0
  %or.cond = or i1 %159, %158
  br i1 %or.cond, label %166, label %160

160:                                              ; preds = %157
  %161 = getelementptr inbounds i8, ptr %1, i64 104
  %162 = load i32, ptr %161, align 8, !tbaa !22
  %.not244 = icmp eq i32 %162, 0
  br i1 %.not244, label %163, label %.lr.ph.preheader

163:                                              ; preds = %160
  %164 = add i16 %153, 1
  store i16 %164, ptr %25, align 8, !tbaa !16
  %165 = getelementptr inbounds i8, ptr %25, i64 2
  store i16 0, ptr %165, align 2, !tbaa !21
  br label %.thread270

166:                                              ; preds = %157
  %167 = icmp slt i64 %154, 0
  br i1 %167, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %160, %166
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %194
  %168 = phi i64 [ %195, %194 ], [ %154, %.lr.ph.preheader ]
  %.7288 = phi ptr [ %.8, %194 ], [ %.6, %.lr.ph.preheader ]
  %.7196287 = phi i64 [ %.8197, %194 ], [ %.6195, %.lr.ph.preheader ]
  %.7206286 = phi i64 [ %.8207, %194 ], [ %.6205, %.lr.ph.preheader ]
  %.7196. = call i64 @llvm.umin.i64(i64 %.7196287, i64 %168)
  %169 = call i64 @ber_fetch_tag(ptr noundef %.7288, i64 noundef %.7196., ptr noundef nonnull %7) #6
  switch i64 %169, label %173 [
    i64 0, label %170
    i64 -1, label %.loopexit
  ]

170:                                              ; preds = %.lr.ph
  %171 = load i64, ptr %155, align 8, !tbaa !20
  %172 = icmp slt i64 %171, 0
  %.not245 = icmp ugt i64 %171, %.7196287
  %or.cond251 = or i1 %172, %.not245
  br i1 %or.cond251, label %.thread270, label %.loopexit

.loopexit:                                        ; preds = %.lr.ph, %170
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 369, i32 noundef 100, ptr noundef null) #6
  br label %.thread270

173:                                              ; preds = %.lr.ph
  %174 = load i8, ptr %.7288, align 1, !tbaa !29
  %175 = icmp eq i8 %174, 0
  br i1 %175, label %176, label %193

176:                                              ; preds = %173
  %177 = load i64, ptr %155, align 8, !tbaa !20
  %.7196.252 = call i64 @llvm.umin.i64(i64 %.7196287, i64 %177)
  %178 = icmp ult i64 %.7196.252, 2
  br i1 %178, label %179, label %182

179:                                              ; preds = %176
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 378, i32 noundef 100, ptr noundef null) #6
  %180 = load i64, ptr %155, align 8, !tbaa !20
  %181 = icmp slt i64 %180, 0
  %.not246 = icmp ugt i64 %180, %.7196287
  %or.cond253 = or i1 %181, %.not246
  %spec.select = select i1 %or.cond253, i32 1, i32 2
  br label %.thread270

182:                                              ; preds = %176
  %183 = getelementptr inbounds i8, ptr %.7288, i64 1
  %184 = load i8, ptr %183, align 1, !tbaa !29
  %185 = icmp eq i8 %184, 0
  br i1 %185, label %186, label %194

186:                                              ; preds = %182
  %187 = getelementptr inbounds i8, ptr %.7288, i64 2
  %188 = add i64 %.7196287, -2
  %189 = add nsw i64 %177, -2
  %190 = icmp slt i64 %177, 0
  %spec.select316 = select i1 %190, i64 %177, i64 %189
  %191 = add i64 %.7206286, 2
  %192 = add nsw i64 %spec.select316, 1
  store i64 %192, ptr %155, align 8, !tbaa !20
  br label %194, !llvm.loop !39

193:                                              ; preds = %173
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 395, i32 noundef 100, ptr noundef null) #6
  br label %.thread270

194:                                              ; preds = %182, %186
  %195 = phi i64 [ %192, %186 ], [ %177, %182 ]
  %.8207 = phi i64 [ %191, %186 ], [ %.7206286, %182 ]
  %.8197 = phi i64 [ %188, %186 ], [ %.7196287, %182 ]
  %.8 = phi ptr [ %187, %186 ], [ %.7288, %182 ]
  %196 = icmp slt i64 %195, 0
  br i1 %196, label %.lr.ph, label %._crit_edge.loopexit

._crit_edge.loopexit:                             ; preds = %194
  %.pre305 = load i16, ptr %25, align 8, !tbaa !16
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %166
  %197 = phi i16 [ %153, %166 ], [ %.pre305, %._crit_edge.loopexit ]
  %.7206.lcssa = phi i64 [ %.6205, %166 ], [ %.8207, %._crit_edge.loopexit ]
  %198 = add i16 %197, 1
  store i16 %198, ptr %25, align 8, !tbaa !16
  %199 = getelementptr inbounds i8, ptr %25, i64 2
  store i16 0, ptr %199, align 2, !tbaa !21
  br label %.thread270

.thread270:                                       ; preds = %179, %170, %.loopexit, %193, %.thread262, %.thread254, %._crit_edge, %163, %21, %152, %57, %31, %16, %60
  %.sroa.0181.8 = phi i32 [ 2, %60 ], [ 2, %16 ], [ %34, %31 ], [ 1, %57 ], [ 2, %152 ], [ 0, %21 ], [ 0, %163 ], [ 0, %._crit_edge ], [ %.sroa.0181.3.ph, %.thread254 ], [ %.sroa.0181.4.ph, %.thread262 ], [ %spec.select, %179 ], [ 1, %170 ], [ 2, %.loopexit ], [ 2, %193 ]
  %.sroa.25.8 = phi i64 [ %.1200, %60 ], [ 0, %16 ], [ %35, %31 ], [ %.1200, %57 ], [ %.6205, %152 ], [ 0, %21 ], [ %.6205, %163 ], [ %.7206.lcssa, %._crit_edge ], [ %.sroa.25.3.ph, %.thread254 ], [ %.sroa.25.4.ph, %.thread262 ], [ %.7206286, %179 ], [ %.7206286, %170 ], [ %.7206286, %.loopexit ], [ %.7206286, %193 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.0181.8, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.25.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 @_search4tag(ptr noundef, ptr noundef) #0

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

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

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

; 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_CHOICE_specifics_s", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !7, i64 16, !10, i64 24, !7, i64 32, !10, i64 40}
!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, !19, i64 16}
!21 = !{!17, !18, i64 2}
!22 = !{!6, !10, i64 104}
!23 = !{!10, !10, i64 0}
!24 = !{!25, !10, i64 0}
!25 = !{!"asn_TYPE_tag2member_s", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!26 = !{!14, !7, i64 16}
!27 = !{!14, !10, i64 24}
!28 = !{!14, !10, i64 40}
!29 = !{!8, !8, i64 0}
!30 = !{!25, !10, i64 4}
!31 = !{!32, !10, i64 0}
!32 = !{!"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}
!33 = !{!32, !10, i64 8}
!34 = !{!14, !10, i64 8}
!35 = !{!14, !10, i64 12}
!36 = !{!32, !7, i64 24}
!37 = !{!6, !7, i64 40}
!38 = !{!32, !10, i64 16}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}


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