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

; 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_SET_specifics_s = type { i32, i32, i32, ptr, i32, ptr, i32, i32, ptr }
%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 [25 x i8], align 1

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

50:                                               ; preds = %6
  br label %51

51:                                               ; preds = %50
  %52 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %52, align 8, !tbaa !16
  %53 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 0, ptr %53, align 8, !tbaa !18
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 149, i32 noundef 102, ptr noundef null)
  store i32 1, ptr %22, align 4
  br label %906

54:                                               ; No predecessors!
  br label %55

55:                                               ; preds = %54
  br label %56

56:                                               ; preds = %55, %6
  %57 = load ptr, ptr %16, align 8, !tbaa !5
  %58 = icmp eq ptr %57, null
  br i1 %58, label %59, label %76

59:                                               ; preds = %56
  %60 = load ptr, ptr %14, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %60, i32 0, i32 0
  %62 = load i32, ptr %61, align 8, !tbaa !19
  %63 = sext i32 %62 to i64
  %64 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %63) #7
  %65 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %64, ptr %65, align 8, !tbaa !5
  store ptr %64, ptr %16, align 8, !tbaa !5
  %66 = load ptr, ptr %16, align 8, !tbaa !5
  %67 = icmp eq ptr %66, null
  br i1 %67, label %68, label %75

68:                                               ; preds = %59
  br label %69

69:                                               ; preds = %68
  %70 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %70, align 8, !tbaa !16
  %71 = load i64, ptr %20, align 8, !tbaa !9
  %72 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %71, ptr %72, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %906

73:                                               ; No predecessors!
  br label %74

74:                                               ; preds = %73
  br label %75

75:                                               ; preds = %74, %59
  br label %76

76:                                               ; preds = %75, %56
  %77 = load ptr, ptr %16, align 8, !tbaa !5
  %78 = load ptr, ptr %14, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %78, i32 0, i32 1
  %80 = load i32, ptr %79, align 4, !tbaa !22
  %81 = sext i32 %80 to i64
  %82 = getelementptr inbounds i8, ptr %77, i64 %81
  store ptr %82, ptr %17, align 8, !tbaa !5
  %83 = load ptr, ptr %17, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %83, i32 0, i32 0
  %85 = load i16, ptr %84, align 8, !tbaa !23
  %86 = sext i16 %85 to i32
  switch i32 %86, label %899 [
    i32 0, label %87
    i32 1, label %152
    i32 3, label %620
    i32 4, label %620
    i32 5, label %877
  ]

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

104:                                              ; preds = %87
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %906

105:                                              ; preds = %87
  %106 = load ptr, ptr %17, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %106, i32 0, i32 4
  %108 = load i64, ptr %107, align 8, !tbaa !26
  %109 = icmp sge i64 %108, 0
  br i1 %109, label %110, label %117

110:                                              ; preds = %105
  %111 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  %112 = load i64, ptr %111, align 8, !tbaa !18
  %113 = load ptr, ptr %17, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %113, i32 0, i32 4
  %115 = load i64, ptr %114, align 8, !tbaa !26
  %116 = add i64 %115, %112
  store i64 %116, ptr %114, align 8, !tbaa !26
  br label %117

117:                                              ; preds = %110, %105
  br label %118

118:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %119 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  %120 = load i64, ptr %119, align 8, !tbaa !18
  store i64 %120, ptr %24, align 8, !tbaa !9
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = load i64, ptr %24, align 8, !tbaa !9
  %123 = getelementptr inbounds i8, ptr %121, i64 %122
  store ptr %123, ptr %11, align 8, !tbaa !5
  %124 = load i64, ptr %24, align 8, !tbaa !9
  %125 = load i64, ptr %12, align 8, !tbaa !9
  %126 = sub i64 %125, %124
  store i64 %126, ptr %12, align 8, !tbaa !9
  %127 = load ptr, ptr %17, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %127, i32 0, i32 4
  %129 = load i64, ptr %128, align 8, !tbaa !26
  %130 = icmp sge i64 %129, 0
  br i1 %130, label %131, label %137

131:                                              ; preds = %118
  %132 = load i64, ptr %24, align 8, !tbaa !9
  %133 = load ptr, ptr %17, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %133, i32 0, i32 4
  %135 = load i64, ptr %134, align 8, !tbaa !26
  %136 = sub i64 %135, %132
  store i64 %136, ptr %134, align 8, !tbaa !26
  br label %137

137:                                              ; preds = %131, %118
  %138 = load i64, ptr %24, align 8, !tbaa !9
  %139 = load i64, ptr %20, align 8, !tbaa !9
  %140 = add i64 %139, %138
  store i64 %140, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  br label %141

141:                                              ; preds = %137
  br label %142

142:                                              ; preds = %141
  br label %143

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

150:                                              ; preds = %143
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151, %76
  br label %153

153:                                              ; preds = %613, %152
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %154 = load ptr, ptr %17, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %154, i32 0, i32 1
  %156 = load i16, ptr %155, align 2, !tbaa !27
  %157 = sext i16 %156 to i32
  %158 = and i32 %157, 1
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %160, label %166

160:                                              ; preds = %153
  %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 = ashr i32 %164, 1
  store i32 %165, ptr %21, align 4, !tbaa !11
  br label %408

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

171:                                              ; preds = %166
  store i32 11, ptr %22, align 4
  br label %610

172:                                              ; preds = %166
  %173 = load ptr, ptr %11, align 8, !tbaa !5
  %174 = load i64, ptr %12, align 8, !tbaa !9
  %175 = load ptr, ptr %17, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %175, i32 0, i32 4
  %177 = load i64, ptr %176, align 8, !tbaa !26
  %178 = icmp ult i64 %174, %177
  br i1 %178, label %179, label %181

179:                                              ; preds = %172
  %180 = load i64, ptr %12, align 8, !tbaa !9
  br label %185

181:                                              ; preds = %172
  %182 = load ptr, ptr %17, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %182, i32 0, i32 4
  %184 = load i64, ptr %183, align 8, !tbaa !26
  br label %185

185:                                              ; preds = %181, %179
  %186 = phi i64 [ %180, %179 ], [ %184, %181 ]
  %187 = call i64 @ber_fetch_tag(ptr noundef %173, i64 noundef %186, ptr noundef %18)
  store i64 %187, ptr %29, align 8, !tbaa !9
  %188 = load i64, ptr %29, align 8, !tbaa !9
  switch i64 %188, label %221 [
    i64 0, label %189
    i64 -1, label %214
  ]

189:                                              ; preds = %185
  %190 = load ptr, ptr %17, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %190, i32 0, i32 4
  %192 = load i64, ptr %191, align 8, !tbaa !26
  %193 = icmp sge i64 %192, 0
  br i1 %193, label %194, label %200

194:                                              ; preds = %189
  %195 = load ptr, ptr %17, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %195, i32 0, i32 4
  %197 = load i64, ptr %196, align 8, !tbaa !26
  %198 = load i64, ptr %12, align 8, !tbaa !9
  %199 = icmp ule i64 %197, %198
  br i1 %199, label %207, label %200

200:                                              ; preds = %194, %189
  br label %201

201:                                              ; preds = %200
  %202 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 1, ptr %202, align 8, !tbaa !16
  %203 = load i64, ptr %20, align 8, !tbaa !9
  %204 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %203, ptr %204, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

205:                                              ; No predecessors!
  br label %206

206:                                              ; preds = %205
  br label %207

207:                                              ; preds = %206, %194
  br label %208

208:                                              ; preds = %207
  %209 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %209, align 8, !tbaa !16
  %210 = load i64, ptr %20, align 8, !tbaa !9
  %211 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %210, ptr %211, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

212:                                              ; No predecessors!
  br label %213

213:                                              ; preds = %212
  br label %214

214:                                              ; preds = %213, %185
  br label %215

215:                                              ; preds = %214
  %216 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %216, align 8, !tbaa !16
  %217 = load i64, ptr %20, align 8, !tbaa !9
  %218 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %217, ptr %218, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

219:                                              ; No predecessors!
  br label %220

220:                                              ; preds = %219
  br label %221

221:                                              ; preds = %220, %185
  %222 = load ptr, ptr %17, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %222, i32 0, i32 4
  %224 = load i64, ptr %223, align 8, !tbaa !26
  %225 = icmp slt i64 %224, 0
  br i1 %225, label %226, label %282

226:                                              ; preds = %221
  %227 = load ptr, ptr %11, align 8, !tbaa !5
  %228 = getelementptr inbounds i8, ptr %227, i64 0
  %229 = load i8, ptr %228, align 1, !tbaa !28
  %230 = zext i8 %229 to i32
  %231 = icmp eq i32 %230, 0
  br i1 %231, label %232, label %282

232:                                              ; preds = %226
  %233 = load i64, ptr %12, align 8, !tbaa !9
  %234 = load ptr, ptr %17, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %234, i32 0, i32 4
  %236 = load i64, ptr %235, align 8, !tbaa !26
  %237 = icmp ult i64 %233, %236
  br i1 %237, label %238, label %240

238:                                              ; preds = %232
  %239 = load i64, ptr %12, align 8, !tbaa !9
  br label %244

240:                                              ; preds = %232
  %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
  br label %244

244:                                              ; preds = %240, %238
  %245 = phi i64 [ %239, %238 ], [ %243, %240 ]
  %246 = icmp ult i64 %245, 2
  br i1 %246, label %247, label %273

247:                                              ; preds = %244
  %248 = load ptr, ptr %17, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %248, i32 0, i32 4
  %250 = load i64, ptr %249, align 8, !tbaa !26
  %251 = icmp sge i64 %250, 0
  br i1 %251, label %252, label %265

252:                                              ; preds = %247
  %253 = load ptr, ptr %17, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %253, i32 0, i32 4
  %255 = load i64, ptr %254, align 8, !tbaa !26
  %256 = load i64, ptr %12, align 8, !tbaa !9
  %257 = icmp ule i64 %255, %256
  br i1 %257, label %258, label %265

258:                                              ; preds = %252
  br label %259

259:                                              ; preds = %258
  %260 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %260, align 8, !tbaa !16
  %261 = load i64, ptr %20, align 8, !tbaa !9
  %262 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %261, ptr %262, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

263:                                              ; No predecessors!
  br label %264

264:                                              ; preds = %263
  br label %272

265:                                              ; preds = %252, %247
  br label %266

266:                                              ; preds = %265
  %267 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 1, ptr %267, align 8, !tbaa !16
  %268 = load i64, ptr %20, align 8, !tbaa !9
  %269 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %268, ptr %269, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

270:                                              ; No predecessors!
  br label %271

271:                                              ; preds = %270
  br label %272

272:                                              ; preds = %271, %264
  br label %281

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

279:                                              ; preds = %273
  store i32 26, ptr %22, align 4
  br label %610

280:                                              ; preds = %273
  br label %281

281:                                              ; preds = %280, %272
  br label %282

282:                                              ; preds = %281, %226, %221
  %283 = load i32, ptr %18, align 4, !tbaa !11
  %284 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %26, i32 0, i32 0
  store i32 %283, ptr %284, align 4, !tbaa !29
  %285 = load ptr, ptr %14, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %285, i32 0, i32 3
  %287 = load ptr, ptr %286, align 8, !tbaa !31
  %288 = load ptr, ptr %14, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %288, i32 0, i32 4
  %290 = load i32, ptr %289, align 8, !tbaa !32
  %291 = sext i32 %290 to i64
  %292 = call ptr @bsearch(ptr noundef %26, ptr noundef %287, i64 noundef %291, i64 noundef 16, ptr noundef @_t2e_cmp)
  store ptr %292, ptr %25, align 8, !tbaa !5
  %293 = load ptr, ptr %25, align 8, !tbaa !5
  %294 = icmp ne ptr %293, null
  br i1 %294, label %295, label %305

295:                                              ; preds = %282
  %296 = load ptr, ptr %25, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.asn_TYPE_tag2member_s, ptr %296, i32 0, i32 1
  %298 = load i32, ptr %297, align 4, !tbaa !33
  store i32 %298, ptr %21, align 4, !tbaa !11
  %299 = load i32, ptr %21, align 4, !tbaa !11
  %300 = shl i32 %299, 1
  %301 = add nsw i32 %300, 1
  %302 = trunc i32 %301 to i16
  %303 = load ptr, ptr %17, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %303, i32 0, i32 1
  store i16 %302, ptr %304, align 2, !tbaa !27
  br label %407

305:                                              ; preds = %282
  %306 = load ptr, ptr %14, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %306, i32 0, i32 7
  %308 = load i32, ptr %307, align 4, !tbaa !34
  %309 = icmp eq i32 %308, 0
  br i1 %309, label %310, label %317

310:                                              ; preds = %305
  br label %311

311:                                              ; preds = %310
  %312 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %312, align 8, !tbaa !16
  %313 = load i64, ptr %20, align 8, !tbaa !9
  %314 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %313, ptr %314, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

315:                                              ; No predecessors!
  br label %316

316:                                              ; preds = %315
  br label %406

317:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %318 = load ptr, ptr %8, align 8, !tbaa !5
  %319 = load ptr, ptr %11, align 8, !tbaa !5
  %320 = load i8, ptr %319, align 1, !tbaa !28
  %321 = zext i8 %320 to i32
  %322 = and i32 %321, 32
  %323 = icmp ne i32 %322, 0
  %324 = zext i1 %323 to i64
  %325 = select i1 %323, i32 1, i32 0
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = load i64, ptr %29, align 8, !tbaa !9
  %328 = getelementptr inbounds i8, ptr %326, i64 %327
  %329 = load i64, ptr %12, align 8, !tbaa !9
  %330 = load ptr, ptr %17, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %330, i32 0, i32 4
  %332 = load i64, ptr %331, align 8, !tbaa !26
  %333 = icmp ult i64 %329, %332
  br i1 %333, label %334, label %336

334:                                              ; preds = %317
  %335 = load i64, ptr %12, align 8, !tbaa !9
  br label %340

336:                                              ; preds = %317
  %337 = load ptr, ptr %17, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %337, i32 0, i32 4
  %339 = load i64, ptr %338, align 8, !tbaa !26
  br label %340

340:                                              ; preds = %336, %334
  %341 = phi i64 [ %335, %334 ], [ %339, %336 ]
  %342 = load i64, ptr %29, align 8, !tbaa !9
  %343 = sub i64 %341, %342
  %344 = call i64 @ber_skip_length(ptr noundef %318, i32 noundef %325, ptr noundef %328, i64 noundef %343)
  store i64 %344, ptr %30, align 8, !tbaa !9
  %345 = load i64, ptr %30, align 8, !tbaa !9
  switch i64 %345, label %378 [
    i64 0, label %346
    i64 -1, label %371
  ]

346:                                              ; preds = %340
  %347 = load ptr, ptr %17, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %347, i32 0, i32 4
  %349 = load i64, ptr %348, align 8, !tbaa !26
  %350 = icmp sge i64 %349, 0
  br i1 %350, label %351, label %357

351:                                              ; preds = %346
  %352 = load ptr, ptr %17, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %352, i32 0, i32 4
  %354 = load i64, ptr %353, align 8, !tbaa !26
  %355 = load i64, ptr %12, align 8, !tbaa !9
  %356 = icmp ule i64 %354, %355
  br i1 %356, label %364, label %357

357:                                              ; preds = %351, %346
  br label %358

358:                                              ; preds = %357
  %359 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 1, ptr %359, align 8, !tbaa !16
  %360 = load i64, ptr %20, align 8, !tbaa !9
  %361 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %360, ptr %361, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %405

362:                                              ; No predecessors!
  br label %363

363:                                              ; preds = %362
  br label %364

364:                                              ; preds = %363, %351
  br label %365

365:                                              ; preds = %364
  %366 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %366, align 8, !tbaa !16
  %367 = load i64, ptr %20, align 8, !tbaa !9
  %368 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %367, ptr %368, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %405

369:                                              ; No predecessors!
  br label %370

370:                                              ; preds = %369
  br label %371

371:                                              ; preds = %370, %340
  br label %372

372:                                              ; preds = %371
  %373 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %373, align 8, !tbaa !16
  %374 = load i64, ptr %20, align 8, !tbaa !9
  %375 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %374, ptr %375, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %405

376:                                              ; No predecessors!
  br label %377

377:                                              ; preds = %376
  br label %378

378:                                              ; preds = %377, %340
  br label %379

379:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %380 = load i64, ptr %30, align 8, !tbaa !9
  %381 = load i64, ptr %29, align 8, !tbaa !9
  %382 = add nsw i64 %380, %381
  store i64 %382, ptr %31, align 8, !tbaa !9
  %383 = load ptr, ptr %11, align 8, !tbaa !5
  %384 = load i64, ptr %31, align 8, !tbaa !9
  %385 = getelementptr inbounds i8, ptr %383, i64 %384
  store ptr %385, ptr %11, align 8, !tbaa !5
  %386 = load i64, ptr %31, align 8, !tbaa !9
  %387 = load i64, ptr %12, align 8, !tbaa !9
  %388 = sub i64 %387, %386
  store i64 %388, ptr %12, align 8, !tbaa !9
  %389 = load ptr, ptr %17, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %389, i32 0, i32 4
  %391 = load i64, ptr %390, align 8, !tbaa !26
  %392 = icmp sge i64 %391, 0
  br i1 %392, label %393, label %399

393:                                              ; preds = %379
  %394 = load i64, ptr %31, align 8, !tbaa !9
  %395 = load ptr, ptr %17, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %395, i32 0, i32 4
  %397 = load i64, ptr %396, align 8, !tbaa !26
  %398 = sub i64 %397, %394
  store i64 %398, ptr %396, align 8, !tbaa !26
  br label %399

399:                                              ; preds = %393, %379
  %400 = load i64, ptr %31, align 8, !tbaa !9
  %401 = load i64, ptr %20, align 8, !tbaa !9
  %402 = add i64 %401, %400
  store i64 %402, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  br label %403

403:                                              ; preds = %399
  br label %404

404:                                              ; preds = %403
  store i32 13, ptr %22, align 4
  br label %405

405:                                              ; preds = %404, %372, %365, %358
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %610

406:                                              ; preds = %316
  br label %407

407:                                              ; preds = %406, %295
  br label %408

408:                                              ; preds = %407, %160
  %409 = load ptr, ptr %16, align 8, !tbaa !5
  %410 = load ptr, ptr %14, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %410, i32 0, i32 2
  %412 = load i32, ptr %411, align 8, !tbaa !35
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds i8, ptr %409, i64 %413
  %415 = load i32, ptr %21, align 4, !tbaa !11
  %416 = sext i32 %415 to i64
  %417 = udiv i64 %416, 32
  %418 = getelementptr inbounds i32, ptr %414, i64 %417
  %419 = load i32, ptr %418, align 4, !tbaa !11
  %420 = load i32, ptr %21, align 4, !tbaa !11
  %421 = sext i32 %420 to i64
  %422 = urem i64 %421, 32
  %423 = sub i64 31, %422
  %424 = trunc i64 %423 to i32
  %425 = shl i32 1, %424
  %426 = and i32 %419, %425
  %427 = icmp ne i32 %426, 0
  br i1 %427, label %428, label %435

428:                                              ; preds = %408
  br label %429

429:                                              ; preds = %428
  %430 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %430, align 8, !tbaa !16
  %431 = load i64, ptr %20, align 8, !tbaa !9
  %432 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %431, ptr %432, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

433:                                              ; No predecessors!
  br label %434

434:                                              ; preds = %433
  br label %435

435:                                              ; preds = %434, %408
  %436 = load ptr, ptr %15, align 8, !tbaa !5
  %437 = load i32, ptr %21, align 4, !tbaa !11
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %436, i64 %438
  %440 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %439, i32 0, i32 0
  %441 = load i32, ptr %440, align 8, !tbaa !36
  %442 = and i32 %441, 1
  %443 = icmp ne i32 %442, 0
  br i1 %443, label %444, label %454

444:                                              ; preds = %435
  %445 = load ptr, ptr %16, align 8, !tbaa !5
  %446 = load ptr, ptr %15, align 8, !tbaa !5
  %447 = load i32, ptr %21, align 4, !tbaa !11
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %446, i64 %448
  %450 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %449, i32 0, i32 2
  %451 = load i32, ptr %450, align 8, !tbaa !38
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds i8, ptr %445, i64 %452
  store ptr %453, ptr %28, align 8, !tbaa !5
  br label %464

454:                                              ; preds = %435
  %455 = load ptr, ptr %16, align 8, !tbaa !5
  %456 = load ptr, ptr %15, align 8, !tbaa !5
  %457 = load i32, ptr %21, align 4, !tbaa !11
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %456, i64 %458
  %460 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %459, i32 0, i32 2
  %461 = load i32, ptr %460, align 8, !tbaa !38
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds i8, ptr %455, i64 %462
  store ptr %463, ptr %27, align 8, !tbaa !5
  store ptr %27, ptr %28, align 8, !tbaa !5
  br label %464

464:                                              ; preds = %454, %444
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #6
  %465 = load ptr, ptr %15, align 8, !tbaa !5
  %466 = load i32, ptr %21, 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 5
  %470 = load ptr, ptr %469, align 8, !tbaa !39
  %471 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %470, i32 0, i32 5
  %472 = load ptr, ptr %471, align 8, !tbaa !40
  %473 = load ptr, ptr %8, align 8, !tbaa !5
  %474 = load ptr, ptr %15, align 8, !tbaa !5
  %475 = load i32, ptr %21, align 4, !tbaa !11
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %474, i64 %476
  %478 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %477, i32 0, i32 5
  %479 = load ptr, ptr %478, align 8, !tbaa !39
  %480 = load ptr, ptr %28, align 8, !tbaa !5
  %481 = load ptr, ptr %11, align 8, !tbaa !5
  %482 = load i64, ptr %12, 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 !26
  %486 = icmp ult i64 %482, %485
  br i1 %486, label %487, label %489

487:                                              ; preds = %464
  %488 = load i64, ptr %12, align 8, !tbaa !9
  br label %493

489:                                              ; preds = %464
  %490 = load ptr, ptr %17, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %490, i32 0, i32 4
  %492 = load i64, ptr %491, align 8, !tbaa !26
  br label %493

493:                                              ; preds = %489, %487
  %494 = phi i64 [ %488, %487 ], [ %492, %489 ]
  %495 = load ptr, ptr %15, align 8, !tbaa !5
  %496 = load i32, ptr %21, align 4, !tbaa !11
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %495, i64 %497
  %499 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %498, i32 0, i32 4
  %500 = load i32, ptr %499, align 8, !tbaa !41
  %501 = call { i32, i64 } %472(ptr noundef %473, ptr noundef %479, ptr noundef %480, ptr noundef %481, i64 noundef %494, i32 noundef %500)
  %502 = getelementptr inbounds { i32, i64 }, ptr %32, i32 0, i32 0
  %503 = extractvalue { i32, i64 } %501, 0
  store i32 %503, ptr %502, align 8
  %504 = getelementptr inbounds { i32, i64 }, ptr %32, i32 0, i32 1
  %505 = extractvalue { i32, i64 } %501, 1
  store i64 %505, ptr %504, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %19, ptr align 8 %32, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #6
  %506 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  %507 = load i32, ptr %506, align 8, !tbaa !16
  switch i32 %507, label %584 [
    i32 0, label %508
    i32 1, label %527
    i32 2, label %577
  ]

508:                                              ; preds = %493
  %509 = load i32, ptr %21, align 4, !tbaa !11
  %510 = sext i32 %509 to i64
  %511 = urem i64 %510, 32
  %512 = sub i64 31, %511
  %513 = trunc i64 %512 to i32
  %514 = shl i32 1, %513
  %515 = load ptr, ptr %16, align 8, !tbaa !5
  %516 = load ptr, ptr %14, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %516, i32 0, i32 2
  %518 = load i32, ptr %517, align 8, !tbaa !35
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds i8, ptr %515, i64 %519
  %521 = load i32, ptr %21, align 4, !tbaa !11
  %522 = sext i32 %521 to i64
  %523 = udiv i64 %522, 32
  %524 = getelementptr inbounds i32, ptr %520, i64 %523
  %525 = load i32, ptr %524, align 4, !tbaa !11
  %526 = or i32 %525, %514
  store i32 %526, ptr %524, align 4, !tbaa !11
  br label %584

527:                                              ; preds = %493
  %528 = load ptr, ptr %17, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %528, i32 0, i32 4
  %530 = load i64, ptr %529, align 8, !tbaa !26
  %531 = icmp sge i64 %530, 0
  br i1 %531, label %532, label %538

532:                                              ; preds = %527
  %533 = load ptr, ptr %17, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %533, i32 0, i32 4
  %535 = load i64, ptr %534, align 8, !tbaa !26
  %536 = load i64, ptr %12, align 8, !tbaa !9
  %537 = icmp ule i64 %535, %536
  br i1 %537, label %570, label %538

538:                                              ; preds = %532, %527
  br label %539

539:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %540 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  %541 = load i64, ptr %540, align 8, !tbaa !18
  store i64 %541, ptr %33, align 8, !tbaa !9
  %542 = load ptr, ptr %11, align 8, !tbaa !5
  %543 = load i64, ptr %33, align 8, !tbaa !9
  %544 = getelementptr inbounds i8, ptr %542, i64 %543
  store ptr %544, ptr %11, align 8, !tbaa !5
  %545 = load i64, ptr %33, align 8, !tbaa !9
  %546 = load i64, ptr %12, align 8, !tbaa !9
  %547 = sub i64 %546, %545
  store i64 %547, ptr %12, align 8, !tbaa !9
  %548 = load ptr, ptr %17, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %548, i32 0, i32 4
  %550 = load i64, ptr %549, align 8, !tbaa !26
  %551 = icmp sge i64 %550, 0
  br i1 %551, label %552, label %558

552:                                              ; preds = %539
  %553 = load i64, ptr %33, align 8, !tbaa !9
  %554 = load ptr, ptr %17, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %554, i32 0, i32 4
  %556 = load i64, ptr %555, align 8, !tbaa !26
  %557 = sub i64 %556, %553
  store i64 %557, ptr %555, align 8, !tbaa !26
  br label %558

558:                                              ; preds = %552, %539
  %559 = load i64, ptr %33, align 8, !tbaa !9
  %560 = load i64, ptr %20, align 8, !tbaa !9
  %561 = add i64 %560, %559
  store i64 %561, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %562

562:                                              ; preds = %558
  br label %563

563:                                              ; preds = %562
  br label %564

564:                                              ; preds = %563
  %565 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 1, ptr %565, align 8, !tbaa !16
  %566 = load i64, ptr %20, align 8, !tbaa !9
  %567 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %566, ptr %567, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

568:                                              ; No predecessors!
  br label %569

569:                                              ; preds = %568
  br label %570

570:                                              ; preds = %569, %532
  br label %571

571:                                              ; preds = %570
  %572 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %572, align 8, !tbaa !16
  %573 = load i64, ptr %20, align 8, !tbaa !9
  %574 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %573, ptr %574, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

575:                                              ; No predecessors!
  br label %576

576:                                              ; preds = %575
  br label %577

577:                                              ; preds = %576, %493
  br label %578

578:                                              ; preds = %577
  %579 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %579, align 8, !tbaa !16
  %580 = load i64, ptr %20, align 8, !tbaa !9
  %581 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %580, ptr %581, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %610

582:                                              ; No predecessors!
  br label %583

583:                                              ; preds = %582
  br label %584

584:                                              ; preds = %583, %508, %493
  br label %585

585:                                              ; preds = %584
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %586 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  %587 = load i64, ptr %586, align 8, !tbaa !18
  store i64 %587, ptr %34, align 8, !tbaa !9
  %588 = load ptr, ptr %11, align 8, !tbaa !5
  %589 = load i64, ptr %34, align 8, !tbaa !9
  %590 = getelementptr inbounds i8, ptr %588, i64 %589
  store ptr %590, ptr %11, align 8, !tbaa !5
  %591 = load i64, ptr %34, align 8, !tbaa !9
  %592 = load i64, ptr %12, align 8, !tbaa !9
  %593 = sub i64 %592, %591
  store i64 %593, ptr %12, align 8, !tbaa !9
  %594 = load ptr, ptr %17, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %594, i32 0, i32 4
  %596 = load i64, ptr %595, align 8, !tbaa !26
  %597 = icmp sge i64 %596, 0
  br i1 %597, label %598, label %604

598:                                              ; preds = %585
  %599 = load i64, ptr %34, align 8, !tbaa !9
  %600 = load ptr, ptr %17, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %600, i32 0, i32 4
  %602 = load i64, ptr %601, align 8, !tbaa !26
  %603 = sub i64 %602, %599
  store i64 %603, ptr %601, align 8, !tbaa !26
  br label %604

604:                                              ; preds = %598, %585
  %605 = load i64, ptr %34, align 8, !tbaa !9
  %606 = load i64, ptr %20, align 8, !tbaa !9
  %607 = add i64 %606, %605
  store i64 %607, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %608

608:                                              ; preds = %604
  br label %609

609:                                              ; preds = %608
  store i32 0, ptr %22, align 4
  br label %610

610:                                              ; preds = %609, %578, %571, %564, %429, %405, %311, %279, %266, %259, %215, %208, %201, %171
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  %611 = load i32, ptr %22, align 4
  switch i32 %611, label %906 [
    i32 0, label %612
    i32 11, label %616
    i32 13, label %613
    i32 26, label %617
  ]

612:                                              ; preds = %610
  br label %613

613:                                              ; preds = %612, %610
  %614 = load ptr, ptr %17, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %614, i32 0, i32 1
  store i16 0, ptr %615, align 2, !tbaa !27
  br label %153

616:                                              ; preds = %610
  br label %617

617:                                              ; preds = %616, %610
  %618 = load ptr, ptr %17, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %618, i32 0, i32 0
  store i16 3, ptr %619, align 8, !tbaa !23
  br label %620

620:                                              ; preds = %617, %76, %76
  br label %621

621:                                              ; preds = %873, %871, %620
  %622 = load ptr, ptr %17, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %622, i32 0, i32 4
  %624 = load i64, ptr %623, align 8, !tbaa !26
  %625 = icmp ne i64 %624, 0
  br i1 %625, label %626, label %874

626:                                              ; preds = %621
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %627 = load ptr, ptr %11, align 8, !tbaa !5
  %628 = load i64, ptr %12, align 8, !tbaa !9
  %629 = load ptr, ptr %17, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %629, i32 0, i32 4
  %631 = load i64, ptr %630, align 8, !tbaa !26
  %632 = icmp ult i64 %628, %631
  br i1 %632, label %633, label %635

633:                                              ; preds = %626
  %634 = load i64, ptr %12, align 8, !tbaa !9
  br label %639

635:                                              ; preds = %626
  %636 = load ptr, ptr %17, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %636, i32 0, i32 4
  %638 = load i64, ptr %637, align 8, !tbaa !26
  br label %639

639:                                              ; preds = %635, %633
  %640 = phi i64 [ %634, %633 ], [ %638, %635 ]
  %641 = call i64 @ber_fetch_tag(ptr noundef %627, i64 noundef %640, ptr noundef %18)
  store i64 %641, ptr %35, align 8, !tbaa !9
  %642 = load i64, ptr %35, align 8, !tbaa !9
  switch i64 %642, label %675 [
    i64 0, label %643
    i64 -1, label %668
  ]

643:                                              ; preds = %639
  %644 = load ptr, ptr %17, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %644, i32 0, i32 4
  %646 = load i64, ptr %645, align 8, !tbaa !26
  %647 = icmp sge i64 %646, 0
  br i1 %647, label %648, label %654

648:                                              ; preds = %643
  %649 = load ptr, ptr %17, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %649, i32 0, i32 4
  %651 = load i64, ptr %650, align 8, !tbaa !26
  %652 = load i64, ptr %12, align 8, !tbaa !9
  %653 = icmp ule i64 %651, %652
  br i1 %653, label %661, label %654

654:                                              ; preds = %648, %643
  br label %655

655:                                              ; preds = %654
  %656 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 1, ptr %656, align 8, !tbaa !16
  %657 = load i64, ptr %20, align 8, !tbaa !9
  %658 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %657, ptr %658, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %871

659:                                              ; No predecessors!
  br label %660

660:                                              ; preds = %659
  br label %661

661:                                              ; preds = %660, %648
  br label %662

662:                                              ; preds = %661
  %663 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %663, align 8, !tbaa !16
  %664 = load i64, ptr %20, align 8, !tbaa !9
  %665 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %664, ptr %665, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %871

666:                                              ; No predecessors!
  br label %667

667:                                              ; preds = %666
  br label %668

668:                                              ; preds = %667, %639
  br label %669

669:                                              ; preds = %668
  %670 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %670, align 8, !tbaa !16
  %671 = load i64, ptr %20, align 8, !tbaa !9
  %672 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %671, ptr %672, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %871

673:                                              ; No predecessors!
  br label %674

674:                                              ; preds = %673
  br label %675

675:                                              ; preds = %674, %639
  %676 = load ptr, ptr %17, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %676, i32 0, i32 4
  %678 = load i64, ptr %677, align 8, !tbaa !26
  %679 = icmp slt i64 %678, 0
  br i1 %679, label %680, label %765

680:                                              ; preds = %675
  %681 = load ptr, ptr %11, align 8, !tbaa !5
  %682 = getelementptr inbounds i8, ptr %681, i64 0
  %683 = load i8, ptr %682, align 1, !tbaa !28
  %684 = zext i8 %683 to i32
  %685 = icmp eq i32 %684, 0
  br i1 %685, label %686, label %765

686:                                              ; preds = %680
  %687 = load i64, ptr %12, align 8, !tbaa !9
  %688 = load ptr, ptr %17, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %688, i32 0, i32 4
  %690 = load i64, ptr %689, align 8, !tbaa !26
  %691 = icmp ult i64 %687, %690
  br i1 %691, label %692, label %694

692:                                              ; preds = %686
  %693 = load i64, ptr %12, align 8, !tbaa !9
  br label %698

694:                                              ; preds = %686
  %695 = load ptr, ptr %17, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %695, i32 0, i32 4
  %697 = load i64, ptr %696, align 8, !tbaa !26
  br label %698

698:                                              ; preds = %694, %692
  %699 = phi i64 [ %693, %692 ], [ %697, %694 ]
  %700 = icmp ult i64 %699, 2
  br i1 %700, label %701, label %727

701:                                              ; preds = %698
  %702 = load ptr, ptr %17, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %702, i32 0, i32 4
  %704 = load i64, ptr %703, align 8, !tbaa !26
  %705 = icmp sge i64 %704, 0
  br i1 %705, label %706, label %719

706:                                              ; preds = %701
  %707 = load ptr, ptr %17, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %707, i32 0, i32 4
  %709 = load i64, ptr %708, align 8, !tbaa !26
  %710 = load i64, ptr %12, align 8, !tbaa !9
  %711 = icmp ule i64 %709, %710
  br i1 %711, label %712, label %719

712:                                              ; preds = %706
  br label %713

713:                                              ; preds = %712
  %714 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %714, align 8, !tbaa !16
  %715 = load i64, ptr %20, align 8, !tbaa !9
  %716 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %715, ptr %716, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %871

717:                                              ; No predecessors!
  br label %718

718:                                              ; preds = %717
  br label %726

719:                                              ; preds = %706, %701
  br label %720

720:                                              ; preds = %719
  %721 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 1, ptr %721, align 8, !tbaa !16
  %722 = load i64, ptr %20, align 8, !tbaa !9
  %723 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %722, ptr %723, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %871

724:                                              ; No predecessors!
  br label %725

725:                                              ; preds = %724
  br label %726

726:                                              ; preds = %725, %718
  br label %764

727:                                              ; preds = %698
  %728 = load ptr, ptr %11, align 8, !tbaa !5
  %729 = getelementptr inbounds i8, ptr %728, i64 1
  %730 = load i8, ptr %729, align 1, !tbaa !28
  %731 = zext i8 %730 to i32
  %732 = icmp eq i32 %731, 0
  br i1 %732, label %733, label %763

733:                                              ; preds = %727
  br label %734

734:                                              ; preds = %733
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  store i64 2, ptr %37, align 8, !tbaa !9
  %735 = load ptr, ptr %11, align 8, !tbaa !5
  %736 = load i64, ptr %37, align 8, !tbaa !9
  %737 = getelementptr inbounds i8, ptr %735, i64 %736
  store ptr %737, ptr %11, align 8, !tbaa !5
  %738 = load i64, ptr %37, align 8, !tbaa !9
  %739 = load i64, ptr %12, align 8, !tbaa !9
  %740 = sub i64 %739, %738
  store i64 %740, ptr %12, align 8, !tbaa !9
  %741 = load ptr, ptr %17, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %741, i32 0, i32 4
  %743 = load i64, ptr %742, align 8, !tbaa !26
  %744 = icmp sge i64 %743, 0
  br i1 %744, label %745, label %751

745:                                              ; preds = %734
  %746 = load i64, ptr %37, align 8, !tbaa !9
  %747 = load ptr, ptr %17, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %747, i32 0, i32 4
  %749 = load i64, ptr %748, align 8, !tbaa !26
  %750 = sub i64 %749, %746
  store i64 %750, ptr %748, align 8, !tbaa !26
  br label %751

751:                                              ; preds = %745, %734
  %752 = load i64, ptr %37, align 8, !tbaa !9
  %753 = load i64, ptr %20, align 8, !tbaa !9
  %754 = add i64 %753, %752
  store i64 %754, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %755

755:                                              ; preds = %751
  br label %756

756:                                              ; preds = %755
  %757 = load ptr, ptr %17, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %757, i32 0, i32 4
  %759 = load i64, ptr %758, align 8, !tbaa !26
  %760 = add nsw i64 %759, 1
  store i64 %760, ptr %758, align 8, !tbaa !26
  %761 = load ptr, ptr %17, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %761, i32 0, i32 0
  store i16 4, ptr %762, align 8, !tbaa !23
  store i32 51, ptr %22, align 4
  br label %871, !llvm.loop !42

763:                                              ; preds = %727
  br label %764

764:                                              ; preds = %763, %726
  br label %765

765:                                              ; preds = %764, %680, %675
  %766 = load ptr, ptr %14, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %766, i32 0, i32 7
  %768 = load i32, ptr %767, align 4, !tbaa !34
  %769 = icmp eq i32 %768, 0
  br i1 %769, label %776, label %770

770:                                              ; preds = %765
  %771 = load ptr, ptr %17, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %771, i32 0, i32 0
  %773 = load i16, ptr %772, align 8, !tbaa !23
  %774 = sext i16 %773 to i32
  %775 = icmp eq i32 %774, 4
  br i1 %775, label %776, label %783

776:                                              ; preds = %770, %765
  br label %777

777:                                              ; preds = %776
  %778 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %778, align 8, !tbaa !16
  %779 = load i64, ptr %20, align 8, !tbaa !9
  %780 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %779, ptr %780, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %871

781:                                              ; No predecessors!
  br label %782

782:                                              ; preds = %781
  br label %783

783:                                              ; preds = %782, %770
  %784 = load ptr, ptr %8, align 8, !tbaa !5
  %785 = load ptr, ptr %11, align 8, !tbaa !5
  %786 = load i8, ptr %785, align 1, !tbaa !28
  %787 = zext i8 %786 to i32
  %788 = and i32 %787, 32
  %789 = icmp ne i32 %788, 0
  %790 = zext i1 %789 to i64
  %791 = select i1 %789, i32 1, i32 0
  %792 = load ptr, ptr %11, align 8, !tbaa !5
  %793 = load i64, ptr %35, align 8, !tbaa !9
  %794 = getelementptr inbounds i8, ptr %792, i64 %793
  %795 = load i64, ptr %12, align 8, !tbaa !9
  %796 = load ptr, ptr %17, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %796, i32 0, i32 4
  %798 = load i64, ptr %797, align 8, !tbaa !26
  %799 = icmp ult i64 %795, %798
  br i1 %799, label %800, label %802

800:                                              ; preds = %783
  %801 = load i64, ptr %12, align 8, !tbaa !9
  br label %806

802:                                              ; preds = %783
  %803 = load ptr, ptr %17, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %803, i32 0, i32 4
  %805 = load i64, ptr %804, align 8, !tbaa !26
  br label %806

806:                                              ; preds = %802, %800
  %807 = phi i64 [ %801, %800 ], [ %805, %802 ]
  %808 = load i64, ptr %35, align 8, !tbaa !9
  %809 = sub i64 %807, %808
  %810 = call i64 @ber_skip_length(ptr noundef %784, i32 noundef %791, ptr noundef %794, i64 noundef %809)
  store i64 %810, ptr %36, align 8, !tbaa !9
  %811 = load i64, ptr %36, align 8, !tbaa !9
  switch i64 %811, label %844 [
    i64 0, label %812
    i64 -1, label %837
  ]

812:                                              ; preds = %806
  %813 = load ptr, ptr %17, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %813, i32 0, i32 4
  %815 = load i64, ptr %814, align 8, !tbaa !26
  %816 = icmp sge i64 %815, 0
  br i1 %816, label %817, label %823

817:                                              ; preds = %812
  %818 = load ptr, ptr %17, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %818, i32 0, i32 4
  %820 = load i64, ptr %819, align 8, !tbaa !26
  %821 = load i64, ptr %12, align 8, !tbaa !9
  %822 = icmp ule i64 %820, %821
  br i1 %822, label %830, label %823

823:                                              ; preds = %817, %812
  br label %824

824:                                              ; preds = %823
  %825 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 1, ptr %825, align 8, !tbaa !16
  %826 = load i64, ptr %20, align 8, !tbaa !9
  %827 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %826, ptr %827, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %871

828:                                              ; No predecessors!
  br label %829

829:                                              ; preds = %828
  br label %830

830:                                              ; preds = %829, %817
  br label %831

831:                                              ; preds = %830
  %832 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %832, align 8, !tbaa !16
  %833 = load i64, ptr %20, align 8, !tbaa !9
  %834 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %833, ptr %834, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %871

835:                                              ; No predecessors!
  br label %836

836:                                              ; preds = %835
  br label %837

837:                                              ; preds = %836, %806
  br label %838

838:                                              ; preds = %837
  %839 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %839, align 8, !tbaa !16
  %840 = load i64, ptr %20, align 8, !tbaa !9
  %841 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %840, ptr %841, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %871

842:                                              ; No predecessors!
  br label %843

843:                                              ; preds = %842
  br label %844

844:                                              ; preds = %843, %806
  br label %845

845:                                              ; preds = %844
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %846 = load i64, ptr %35, align 8, !tbaa !9
  %847 = load i64, ptr %36, align 8, !tbaa !9
  %848 = add nsw i64 %846, %847
  store i64 %848, ptr %38, align 8, !tbaa !9
  %849 = load ptr, ptr %11, align 8, !tbaa !5
  %850 = load i64, ptr %38, align 8, !tbaa !9
  %851 = getelementptr inbounds i8, ptr %849, i64 %850
  store ptr %851, ptr %11, align 8, !tbaa !5
  %852 = load i64, ptr %38, align 8, !tbaa !9
  %853 = load i64, ptr %12, align 8, !tbaa !9
  %854 = sub i64 %853, %852
  store i64 %854, ptr %12, align 8, !tbaa !9
  %855 = load ptr, ptr %17, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %855, i32 0, i32 4
  %857 = load i64, ptr %856, align 8, !tbaa !26
  %858 = icmp sge i64 %857, 0
  br i1 %858, label %859, label %865

859:                                              ; preds = %845
  %860 = load i64, ptr %38, align 8, !tbaa !9
  %861 = load ptr, ptr %17, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %861, i32 0, i32 4
  %863 = load i64, ptr %862, align 8, !tbaa !26
  %864 = sub i64 %863, %860
  store i64 %864, ptr %862, align 8, !tbaa !26
  br label %865

865:                                              ; preds = %859, %845
  %866 = load i64, ptr %38, align 8, !tbaa !9
  %867 = load i64, ptr %20, align 8, !tbaa !9
  %868 = add i64 %867, %866
  store i64 %868, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %869

869:                                              ; preds = %865
  br label %870

870:                                              ; preds = %869
  store i32 0, ptr %22, align 4
  br label %871

871:                                              ; preds = %870, %838, %831, %824, %777, %756, %720, %713, %669, %662, %655
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  %872 = load i32, ptr %22, align 4
  switch i32 %872, label %906 [
    i32 0, label %873
    i32 51, label %621
  ]

873:                                              ; preds = %871
  br label %621, !llvm.loop !42

874:                                              ; preds = %621
  %875 = load ptr, ptr %17, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %875, i32 0, i32 0
  store i16 5, ptr %876, align 8, !tbaa !23
  br label %877

877:                                              ; preds = %874, %76
  %878 = load ptr, ptr %9, align 8, !tbaa !5
  %879 = load ptr, ptr %16, align 8, !tbaa !5
  %880 = call i32 @_SET_is_populated(ptr noundef %878, ptr noundef %879)
  %881 = icmp ne i32 %880, 0
  br i1 %881, label %889, label %882

882:                                              ; preds = %877
  br label %883

883:                                              ; preds = %882
  %884 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 2, ptr %884, align 8, !tbaa !16
  %885 = load i64, ptr %20, align 8, !tbaa !9
  %886 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %885, ptr %886, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %906

887:                                              ; No predecessors!
  br label %888

888:                                              ; preds = %887
  br label %889

889:                                              ; preds = %888, %877
  br label %890

890:                                              ; preds = %889
  %891 = load ptr, ptr %17, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %891, i32 0, i32 0
  %893 = load i16, ptr %892, align 8, !tbaa !23
  %894 = add i16 %893, 1
  store i16 %894, ptr %892, align 8, !tbaa !23
  %895 = load ptr, ptr %17, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %895, i32 0, i32 1
  store i16 0, ptr %896, align 2, !tbaa !27
  br label %897

897:                                              ; preds = %890
  br label %898

898:                                              ; preds = %897
  br label %899

899:                                              ; preds = %898, %76
  br label %900

900:                                              ; preds = %899
  %901 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 0
  store i32 0, ptr %901, align 8, !tbaa !16
  %902 = load i64, ptr %20, align 8, !tbaa !9
  %903 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %19, i32 0, i32 1
  store i64 %902, ptr %903, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !21
  store i32 1, ptr %22, align 4
  br label %906

904:                                              ; No predecessors!
  br label %905

905:                                              ; preds = %904
  store i32 0, ptr %22, align 4
  br label %906

906:                                              ; preds = %905, %900, %883, %871, %610, %104, %69, %51
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 16, 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
  %907 = load i32, ptr %22, align 4
  switch i32 %907, label %910 [
    i32 0, label %908
    i32 1, label %908
  ]

908:                                              ; preds = %906, %906
  %909 = load { i32, i64 }, ptr %7, align 8
  ret { i32, i64 } %909

910:                                              ; preds = %906
  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 uwtable
declare hidden i32 @ASN__STACK_OVERFLOW_CHECK(ptr noundef) #0

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

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 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

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

; 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) #2

; 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) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @_SET_is_populated(ptr noundef, ptr 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind 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 #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_dec_rval_s", !12, i64 0, !10, i64 8}
!18 = !{!17, !10, i64 8}
!19 = !{!20, !12, i64 0}
!20 = !{!"asn_SET_specifics_s", !12, i64 0, !12, i64 4, !12, i64 8, !6, i64 16, !12, i64 24, !6, i64 32, !12, i64 40, !12, i64 44, !6, i64 48}
!21 = !{i64 0, i64 4, !11, i64 8, i64 8, !9}
!22 = !{!20, !12, i64 4}
!23 = !{!24, !25, i64 0}
!24 = !{!"asn_struct_ctx_s", !25, i64 0, !25, i64 2, !12, i64 4, !6, i64 8, !10, i64 16}
!25 = !{!"short", !7, i64 0}
!26 = !{!24, !10, i64 16}
!27 = !{!24, !25, i64 2}
!28 = !{!7, !7, i64 0}
!29 = !{!30, !12, i64 0}
!30 = !{!"asn_TYPE_tag2member_s", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12}
!31 = !{!20, !6, i64 16}
!32 = !{!20, !12, i64 24}
!33 = !{!30, !12, i64 4}
!34 = !{!20, !12, i64 44}
!35 = !{!20, !12, i64 8}
!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 = !{!37, !6, i64 24}
!40 = !{!14, !6, i64 40}
!41 = !{!37, !12, i64 16}
!42 = distinct !{!42, !43}
!43 = !{!"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 [25 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @SET_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 = tail call i32 @ASN__STACK_OVERFLOW_CHECK(ptr noundef %0)
  %.not = icmp eq i32 %15, 0
  br i1 %.not, label %17, label %16

16:                                               ; preds = %6
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 149, i32 noundef 102, ptr noundef null) #6
  br label %.thread458

17:                                               ; preds = %6
  %18 = icmp eq ptr %14, null
  br i1 %18, label %19, label %24

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

24:                                               ; preds = %19, %17
  %.0366 = phi ptr [ %22, %19 ], [ %14, %17 ]
  %25 = getelementptr inbounds i8, ptr %11, i64 4
  %26 = load i32, ptr %25, align 4, !tbaa !15
  %27 = sext i32 %26 to i64
  %28 = getelementptr inbounds i8, ptr %.0366, i64 %27
  %29 = load i16, ptr %28, align 8, !tbaa !16
  switch i16 %29, label %.thread458 [
    i16 0, label %31
    i16 1, label %._crit_edge514
    i16 3, label %246
    i16 4, label %246
    i16 5, label %302
  ]

._crit_edge514:                                   ; preds = %24
  %.phi.trans.insert = getelementptr inbounds i8, ptr %28, i64 2
  %.pre.pre = load i16, ptr %.phi.trans.insert, align 2, !tbaa !20
  %30 = sext i16 %.pre.pre to i32
  br label %.peel.begin

31:                                               ; preds = %24
  %32 = getelementptr inbounds i8, ptr %28, i64 16
  %33 = tail call { i32, i64 } @ber_check_tags(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull %28, 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
  %.not404 = icmp eq i32 %34, 0
  br i1 %.not404, label %36, label %.thread458

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

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

.thread:                                          ; preds = %39, %36
  %42 = getelementptr inbounds i8, ptr %3, i64 %35
  %43 = sub i64 %4, %35
  %44 = load i16, ptr %28, align 8, !tbaa !16
  %45 = add i16 %44, 1
  store i16 %45, ptr %28, align 8, !tbaa !16
  %46 = getelementptr inbounds i8, ptr %28, i64 2
  store i16 0, ptr %46, align 2, !tbaa !20
  br label %.peel.begin

.peel.begin:                                      ; preds = %._crit_edge514, %.thread
  %.pre = phi i32 [ %30, %._crit_edge514 ], [ 0, %.thread ]
  %.0367 = phi i64 [ 0, %._crit_edge514 ], [ %35, %.thread ]
  %.0359 = phi i64 [ %4, %._crit_edge514 ], [ %43, %.thread ]
  %.0 = phi ptr [ %3, %._crit_edge514 ], [ %42, %.thread ]
  %47 = getelementptr inbounds i8, ptr %28, i64 2
  %48 = getelementptr inbounds i8, ptr %28, i64 16
  %49 = getelementptr inbounds i8, ptr %11, i64 16
  %50 = getelementptr inbounds i8, ptr %11, i64 24
  %51 = getelementptr inbounds i8, ptr %11, i64 8
  %52 = getelementptr inbounds i8, ptr %11, i64 44
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  %53 = and i32 %.pre, 1
  %.not405.peel = icmp eq i32 %53, 0
  br i1 %.not405.peel, label %56, label %54

54:                                               ; preds = %.peel.begin
  %55 = ashr i32 %.pre, 1
  br label %84

56:                                               ; preds = %.peel.begin
  %57 = load i64, ptr %48, align 8, !tbaa !21
  %58 = icmp eq i64 %57, 0
  br i1 %58, label %.loopexit, label %59

59:                                               ; preds = %56
  %.1360..peel = tail call i64 @llvm.umin.i64(i64 %.0359, i64 %57)
  %60 = call i64 @ber_fetch_tag(ptr noundef %.0, i64 noundef %.1360..peel, ptr noundef nonnull %7) #6
  switch i64 %60, label %61 [
    i64 0, label %.loopexit571
    i64 -1, label %.thread437
  ]

61:                                               ; preds = %59
  %62 = load i64, ptr %48, align 8, !tbaa !21
  %63 = icmp slt i64 %62, 0
  br i1 %63, label %64, label %73

64:                                               ; preds = %61
  %65 = load i8, ptr %.0, align 1, !tbaa !22
  %66 = icmp eq i8 %65, 0
  br i1 %66, label %67, label %73

67:                                               ; preds = %64
  %.1360.421.peel = call i64 @llvm.umin.i64(i64 %.0359, i64 %62)
  %68 = icmp ult i64 %.1360.421.peel, 2
  br i1 %68, label %.thread437, label %69

69:                                               ; preds = %67
  %70 = getelementptr inbounds i8, ptr %.0, i64 1
  %71 = load i8, ptr %70, align 1, !tbaa !22
  %72 = icmp eq i8 %71, 0
  br i1 %72, label %.loopexit, label %73

73:                                               ; preds = %69, %64, %61
  %74 = load i32, ptr %7, align 4, !tbaa !23
  store i32 %74, ptr %8, align 4, !tbaa !24
  %75 = load ptr, ptr %49, align 8, !tbaa !26
  %76 = load i32, ptr %50, align 8, !tbaa !27
  %77 = sext i32 %76 to i64
  %78 = call ptr @bsearch(ptr noundef %8, ptr noundef %75, i64 noundef %77, i64 noundef 16, ptr noundef @_t2e_cmp)
  %.not407.peel = icmp eq ptr %78, null
  br i1 %.not407.peel, label %128, label %79

79:                                               ; preds = %73
  %80 = getelementptr inbounds i8, ptr %78, i64 4
  %81 = load i32, ptr %80, align 4, !tbaa !28
  %.tr.peel = trunc i32 %81 to i16
  %82 = shl i16 %.tr.peel, 1
  %83 = or disjoint i16 %82, 1
  store i16 %83, ptr %47, align 2, !tbaa !20
  br label %84

84:                                               ; preds = %79, %54
  %.0374.peel = phi i32 [ %55, %54 ], [ %81, %79 ]
  %85 = load i32, ptr %51, align 8, !tbaa !29
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds i8, ptr %.0366, i64 %86
  %88 = sext i32 %.0374.peel to i64
  %89 = lshr i64 %88, 5
  %90 = getelementptr inbounds i32, ptr %87, i64 %89
  %91 = load i32, ptr %90, align 4, !tbaa !23
  %92 = and i32 %.0374.peel, 31
  %93 = xor i32 %92, 31
  %94 = shl nuw i32 1, %93
  %95 = and i32 %94, %91
  %.not411.peel = icmp eq i32 %95, 0
  br i1 %.not411.peel, label %96, label %.thread437

96:                                               ; preds = %84
  %97 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %13, i64 %88
  %98 = load i32, ptr %97, align 8, !tbaa !30
  %99 = and i32 %98, 1
  %.not412.peel = icmp eq i32 %99, 0
  %100 = getelementptr inbounds i8, ptr %97, i64 8
  %101 = load i32, ptr %100, align 8, !tbaa !32
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds i8, ptr %.0366, i64 %102
  br i1 %.not412.peel, label %104, label %105

104:                                              ; preds = %96
  store ptr %103, ptr %9, align 8, !tbaa !12
  br label %105

105:                                              ; preds = %104, %96
  %.0378.peel = phi ptr [ %9, %104 ], [ %103, %96 ]
  %106 = getelementptr inbounds i8, ptr %97, i64 24
  %107 = load ptr, ptr %106, align 8, !tbaa !33
  %108 = getelementptr inbounds i8, ptr %107, i64 40
  %109 = load ptr, ptr %108, align 8, !tbaa !34
  %110 = load i64, ptr %48, align 8, !tbaa !21
  %.1360.425.peel = call i64 @llvm.umin.i64(i64 %.0359, i64 %110)
  %111 = getelementptr inbounds i8, ptr %97, i64 16
  %112 = load i32, ptr %111, align 8, !tbaa !35
  %113 = call { i32, i64 } %109(ptr noundef %0, ptr noundef %107, ptr noundef nonnull %.0378.peel, ptr noundef %.0, i64 noundef %.1360.425.peel, i32 noundef %112) #6
  %114 = extractvalue { i32, i64 } %113, 0
  %115 = extractvalue { i32, i64 } %113, 1
  switch i32 %114, label %123 [
    i32 0, label %116
    i32 1, label %.loopexit572
    i32 2, label %.thread437
  ]

116:                                              ; preds = %105
  %117 = load i32, ptr %51, align 8, !tbaa !29
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds i8, ptr %.0366, i64 %118
  %120 = getelementptr inbounds i32, ptr %119, i64 %89
  %121 = load i32, ptr %120, align 4, !tbaa !23
  %122 = or i32 %121, %94
  store i32 %122, ptr %120, align 4, !tbaa !23
  br label %123

123:                                              ; preds = %116, %105
  %124 = load i64, ptr %48, align 8, !tbaa !21
  %125 = icmp sgt i64 %124, -1
  br i1 %125, label %126, label %.peel.next

126:                                              ; preds = %123
  %127 = sub i64 %124, %115
  br label %.sink.split.peel

128:                                              ; preds = %73
  %129 = load i32, ptr %52, align 4, !tbaa !36
  %130 = icmp eq i32 %129, 0
  br i1 %130, label %.thread437, label %131

131:                                              ; preds = %128
  %132 = load i8, ptr %.0, align 1, !tbaa !22
  %133 = lshr i8 %132, 5
  %.lobit.peel = and i8 %133, 1
  %134 = zext nneg i8 %.lobit.peel to i32
  %135 = getelementptr inbounds i8, ptr %.0, i64 %60
  %136 = load i64, ptr %48, align 8, !tbaa !21
  %.1360.423.peel = call i64 @llvm.umin.i64(i64 %.0359, i64 %136)
  %137 = sub i64 %.1360.423.peel, %60
  %138 = call i64 @ber_skip_length(ptr noundef %0, i32 noundef %134, ptr noundef nonnull %135, i64 noundef %137) #6
  switch i64 %138, label %139 [
    i64 0, label %.loopexit573
    i64 -1, label %.thread437
  ]

139:                                              ; preds = %131
  %140 = add nsw i64 %138, %60
  %141 = load i64, ptr %48, align 8, !tbaa !21
  %142 = icmp sgt i64 %141, -1
  br i1 %142, label %143, label %.peel.next

143:                                              ; preds = %139
  %144 = sub i64 %141, %140
  br label %.sink.split.peel

.sink.split.peel:                                 ; preds = %143, %126
  %.sink.peel = phi i64 [ %127, %126 ], [ %144, %143 ]
  %.pn.ph.peel = phi i64 [ %115, %126 ], [ %140, %143 ]
  store i64 %.sink.peel, ptr %48, align 8, !tbaa !21
  br label %.peel.next

.peel.next:                                       ; preds = %.sink.split.peel, %139, %123
  %.pn.peel = phi i64 [ %140, %139 ], [ %115, %123 ], [ %.pn.ph.peel, %.sink.split.peel ]
  %.3.ph.peel = getelementptr inbounds i8, ptr %.0, i64 %.pn.peel
  %.3362.ph.peel = sub i64 %.0359, %.pn.peel
  %.3370.ph.peel = add i64 %.pn.peel, %.0367
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  store i16 0, ptr %47, align 2, !tbaa !20
  br label %145

145:                                              ; preds = %245, %.peel.next
  %.1368 = phi i64 [ %.3370.ph.peel, %.peel.next ], [ %.3370.ph, %245 ]
  %.1360 = phi i64 [ %.3362.ph.peel, %.peel.next ], [ %.3362.ph, %245 ]
  %.1 = phi ptr [ %.3.ph.peel, %.peel.next ], [ %.3.ph, %245 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  %146 = load i64, ptr %48, align 8, !tbaa !21
  %147 = icmp eq i64 %146, 0
  br i1 %147, label %.loopexit, label %148

148:                                              ; preds = %145
  %.1360. = call i64 @llvm.umin.i64(i64 %.1360, i64 %146)
  %149 = call i64 @ber_fetch_tag(ptr noundef %.1, i64 noundef %.1360., ptr noundef nonnull %7) #6
  switch i64 %149, label %152 [
    i64 0, label %.loopexit571
    i64 -1, label %.thread437
  ]

.loopexit571:                                     ; preds = %148, %59
  %.1368.lcssa566 = phi i64 [ %.0367, %59 ], [ %.1368, %148 ]
  %.1360.lcssa562 = phi i64 [ %.0359, %59 ], [ %.1360, %148 ]
  %150 = load i64, ptr %48, align 8, !tbaa !21
  %151 = icmp slt i64 %150, 0
  %.not406 = icmp ugt i64 %150, %.1360.lcssa562
  %or.cond = select i1 %151, i1 true, i1 %.not406
  %spec.select = select i1 %or.cond, i32 1, i32 2
  br label %.thread437

152:                                              ; preds = %148
  %153 = load i64, ptr %48, align 8, !tbaa !21
  %154 = icmp slt i64 %153, 0
  br i1 %154, label %155, label %164

155:                                              ; preds = %152
  %156 = load i8, ptr %.1, align 1, !tbaa !22
  %157 = icmp eq i8 %156, 0
  br i1 %157, label %158, label %164

158:                                              ; preds = %155
  %.1360.421 = call i64 @llvm.umin.i64(i64 %.1360, i64 %153)
  %159 = icmp ult i64 %.1360.421, 2
  br i1 %159, label %.thread437, label %160

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

164:                                              ; preds = %160, %155, %152
  %165 = load i32, ptr %7, align 4, !tbaa !23
  store i32 %165, ptr %8, align 4, !tbaa !24
  %166 = load ptr, ptr %49, align 8, !tbaa !26
  %167 = load i32, ptr %50, align 8, !tbaa !27
  %168 = sext i32 %167 to i64
  %169 = call ptr @bsearch(ptr noundef %8, ptr noundef %166, i64 noundef %168, i64 noundef 16, ptr noundef @_t2e_cmp)
  %.not407 = icmp eq ptr %169, null
  br i1 %.not407, label %186, label %170

170:                                              ; preds = %164
  %171 = getelementptr inbounds i8, ptr %169, i64 4
  %172 = load i32, ptr %171, align 4, !tbaa !28
  %.tr = trunc i32 %172 to i16
  %173 = shl i16 %.tr, 1
  %174 = or disjoint i16 %173, 1
  store i16 %174, ptr %47, align 2, !tbaa !20
  %175 = load i32, ptr %51, align 8, !tbaa !29
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i8, ptr %.0366, i64 %176
  %178 = sext i32 %172 to i64
  %179 = lshr i64 %178, 5
  %180 = getelementptr inbounds i32, ptr %177, i64 %179
  %181 = load i32, ptr %180, align 4, !tbaa !23
  %182 = and i32 %172, 31
  %183 = xor i32 %182, 31
  %184 = shl nuw i32 1, %183
  %185 = and i32 %184, %181
  %.not411 = icmp eq i32 %185, 0
  br i1 %.not411, label %205, label %.thread437

186:                                              ; preds = %164
  %187 = load i32, ptr %52, align 4, !tbaa !36
  %188 = icmp eq i32 %187, 0
  br i1 %188, label %.thread437, label %189

189:                                              ; preds = %186
  %190 = load i8, ptr %.1, align 1, !tbaa !22
  %191 = lshr i8 %190, 5
  %.lobit = and i8 %191, 1
  %192 = zext nneg i8 %.lobit to i32
  %193 = getelementptr inbounds i8, ptr %.1, i64 %149
  %194 = load i64, ptr %48, align 8, !tbaa !21
  %.1360.423 = call i64 @llvm.umin.i64(i64 %.1360, i64 %194)
  %195 = sub i64 %.1360.423, %149
  %196 = call i64 @ber_skip_length(ptr noundef %0, i32 noundef %192, ptr noundef nonnull %193, i64 noundef %195) #6
  switch i64 %196, label %199 [
    i64 0, label %.loopexit573
    i64 -1, label %.thread437
  ]

.loopexit573:                                     ; preds = %189, %131
  %.1368.lcssa569 = phi i64 [ %.0367, %131 ], [ %.1368, %189 ]
  %.1360.lcssa565 = phi i64 [ %.0359, %131 ], [ %.1360, %189 ]
  %197 = load i64, ptr %48, align 8, !tbaa !21
  %198 = icmp slt i64 %197, 0
  %.not409 = icmp ugt i64 %197, %.1360.lcssa565
  %or.cond424 = select i1 %198, i1 true, i1 %.not409
  %spec.select433 = select i1 %or.cond424, i32 1, i32 2
  br label %.thread437

199:                                              ; preds = %189
  %200 = add nsw i64 %196, %149
  %201 = load i64, ptr %48, align 8, !tbaa !21
  %202 = icmp sgt i64 %201, -1
  br i1 %202, label %203, label %245

203:                                              ; preds = %199
  %204 = sub i64 %201, %200
  br label %.sink.split

205:                                              ; preds = %170
  %206 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %13, i64 %178
  %207 = load i32, ptr %206, align 8, !tbaa !30
  %208 = and i32 %207, 1
  %.not412 = icmp eq i32 %208, 0
  %209 = getelementptr inbounds i8, ptr %206, i64 8
  %210 = load i32, ptr %209, align 8, !tbaa !32
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds i8, ptr %.0366, i64 %211
  br i1 %.not412, label %213, label %214

213:                                              ; preds = %205
  store ptr %212, ptr %9, align 8, !tbaa !12
  br label %214

214:                                              ; preds = %205, %213
  %.0378 = phi ptr [ %9, %213 ], [ %212, %205 ]
  %215 = getelementptr inbounds i8, ptr %206, i64 24
  %216 = load ptr, ptr %215, align 8, !tbaa !33
  %217 = getelementptr inbounds i8, ptr %216, i64 40
  %218 = load ptr, ptr %217, align 8, !tbaa !34
  %219 = load i64, ptr %48, align 8, !tbaa !21
  %.1360.425 = call i64 @llvm.umin.i64(i64 %.1360, i64 %219)
  %220 = getelementptr inbounds i8, ptr %206, i64 16
  %221 = load i32, ptr %220, align 8, !tbaa !35
  %222 = call { i32, i64 } %218(ptr noundef %0, ptr noundef %216, ptr noundef nonnull %.0378, ptr noundef %.1, i64 noundef %.1360.425, i32 noundef %221) #6
  %223 = extractvalue { i32, i64 } %222, 0
  %224 = extractvalue { i32, i64 } %222, 1
  switch i32 %223, label %240 [
    i32 0, label %225
    i32 1, label %.loopexit572
    i32 2, label %.thread437
  ]

225:                                              ; preds = %214
  %226 = load i32, ptr %51, align 8, !tbaa !29
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds i8, ptr %.0366, i64 %227
  %229 = getelementptr inbounds i32, ptr %228, i64 %179
  %230 = load i32, ptr %229, align 4, !tbaa !23
  %231 = or i32 %230, %184
  store i32 %231, ptr %229, align 4, !tbaa !23
  br label %240

.loopexit572:                                     ; preds = %214, %105
  %.1368.lcssa568 = phi i64 [ %.0367, %105 ], [ %.1368, %214 ]
  %.1360.lcssa564 = phi i64 [ %.0359, %105 ], [ %.1360, %214 ]
  %.lcssa = phi i64 [ %115, %105 ], [ %224, %214 ]
  %232 = load i64, ptr %48, align 8, !tbaa !21
  %233 = icmp slt i64 %232, 0
  %.not413 = icmp ugt i64 %232, %.1360.lcssa564
  %or.cond426 = select i1 %233, i1 true, i1 %.not413
  br i1 %or.cond426, label %234, label %.thread437

234:                                              ; preds = %.loopexit572
  %235 = icmp sgt i64 %232, -1
  br i1 %235, label %236, label %238

236:                                              ; preds = %234
  %237 = sub i64 %232, %.lcssa
  store i64 %237, ptr %48, align 8, !tbaa !21
  br label %238

238:                                              ; preds = %236, %234
  %239 = add i64 %.lcssa, %.1368.lcssa568
  br label %.thread437

240:                                              ; preds = %214, %225
  %241 = load i64, ptr %48, align 8, !tbaa !21
  %242 = icmp sgt i64 %241, -1
  br i1 %242, label %243, label %245

243:                                              ; preds = %240
  %244 = sub i64 %241, %224
  br label %.sink.split

.thread437:                                       ; preds = %59, %67, %84, %105, %128, %131, %158, %148, %186, %189, %170, %214, %238, %.loopexit572, %.loopexit571, %.loopexit573
  %.sroa.0358.2.ph = phi i32 [ %spec.select433, %.loopexit573 ], [ %spec.select, %.loopexit571 ], [ 2, %.loopexit572 ], [ 1, %238 ], [ 2, %59 ], [ 1, %67 ], [ 2, %84 ], [ %114, %105 ], [ 2, %128 ], [ 2, %131 ], [ %223, %214 ], [ 2, %170 ], [ 2, %189 ], [ 2, %186 ], [ 2, %148 ], [ 1, %158 ]
  %.sroa.54.2.ph = phi i64 [ %.1368.lcssa569, %.loopexit573 ], [ %.1368.lcssa566, %.loopexit571 ], [ %.1368.lcssa568, %.loopexit572 ], [ %239, %238 ], [ %.0367, %59 ], [ %.0367, %67 ], [ %.0367, %84 ], [ %.0367, %105 ], [ %.0367, %128 ], [ %.0367, %131 ], [ %.1368, %158 ], [ %.1368, %148 ], [ %.1368, %186 ], [ %.1368, %189 ], [ %.1368, %170 ], [ %.1368, %214 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  br label %.thread458

.sink.split:                                      ; preds = %203, %243
  %.sink = phi i64 [ %244, %243 ], [ %204, %203 ]
  %.pn.ph = phi i64 [ %224, %243 ], [ %200, %203 ]
  store i64 %.sink, ptr %48, align 8, !tbaa !21
  br label %245

245:                                              ; preds = %.sink.split, %240, %199
  %.pn = phi i64 [ %200, %199 ], [ %224, %240 ], [ %.pn.ph, %.sink.split ]
  %.3.ph = getelementptr inbounds i8, ptr %.1, i64 %.pn
  %.3362.ph = sub i64 %.1360, %.pn
  %.3370.ph = add i64 %.pn, %.1368
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  store i16 0, ptr %47, align 2, !tbaa !20
  br label %145, !llvm.loop !37

.loopexit:                                        ; preds = %145, %160, %69, %56
  %.1368.lcssa = phi i64 [ %.0367, %56 ], [ %.0367, %69 ], [ %.1368, %160 ], [ %.1368, %145 ]
  %.1360.lcssa = phi i64 [ %.0359, %56 ], [ %.0359, %69 ], [ %.1360, %160 ], [ %.1360, %145 ]
  %.1.lcssa = phi ptr [ %.0, %56 ], [ %.0, %69 ], [ %.1, %160 ], [ %.1, %145 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  store i16 3, ptr %28, align 8, !tbaa !16
  br label %246

246:                                              ; preds = %.loopexit, %24, %24
  %.4371 = phi i64 [ 0, %24 ], [ 0, %24 ], [ %.1368.lcssa, %.loopexit ]
  %.4363 = phi i64 [ %4, %24 ], [ %4, %24 ], [ %.1360.lcssa, %.loopexit ]
  %.4 = phi ptr [ %3, %24 ], [ %3, %24 ], [ %.1.lcssa, %.loopexit ]
  %247 = getelementptr inbounds i8, ptr %28, i64 16
  %248 = load i64, ptr %247, align 8, !tbaa !21
  %.not414492 = icmp eq i64 %248, 0
  br i1 %.not414492, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %246
  %249 = getelementptr inbounds i8, ptr %11, i64 44
  br label %250

250:                                              ; preds = %.lr.ph, %300
  %251 = phi i64 [ %248, %.lr.ph ], [ %301, %300 ]
  %.5495 = phi ptr [ %.4, %.lr.ph ], [ %.6, %300 ]
  %.5364494 = phi i64 [ %.4363, %.lr.ph ], [ %.6365, %300 ]
  %.5372493 = phi i64 [ %.4371, %.lr.ph ], [ %.6373, %300 ]
  %.5364. = call i64 @llvm.umin.i64(i64 %.5364494, i64 %251)
  %252 = call i64 @ber_fetch_tag(ptr noundef %.5495, i64 noundef %.5364., ptr noundef nonnull %7) #6
  switch i64 %252, label %256 [
    i64 0, label %253
    i64 -1, label %.thread458
  ]

253:                                              ; preds = %250
  %254 = load i64, ptr %247, align 8, !tbaa !21
  %255 = icmp slt i64 %254, 0
  %.not416 = icmp ugt i64 %254, %.5364494
  %or.cond427 = or i1 %255, %.not416
  %spec.select434 = select i1 %or.cond427, i32 1, i32 2
  br label %.thread458

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

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

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

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

268:                                              ; preds = %264
  %269 = getelementptr inbounds i8, ptr %.5495, i64 2
  %270 = add i64 %.5364494, -2
  %271 = add i64 %.5372493, 2
  %272 = add nsw i64 %257, 1
  store i64 %272, ptr %247, align 8, !tbaa !21
  store i16 4, ptr %28, align 8, !tbaa !16
  br label %300, !llvm.loop !39

273:                                              ; preds = %264, %259, %256
  %274 = load i32, ptr %249, align 4, !tbaa !36
  %275 = icmp eq i32 %274, 0
  br i1 %275, label %.thread458, label %276

276:                                              ; preds = %273
  %277 = load i16, ptr %28, align 8, !tbaa !16
  %278 = icmp eq i16 %277, 4
  br i1 %278, label %.thread458, label %279

279:                                              ; preds = %276
  %280 = load i8, ptr %.5495, align 1, !tbaa !22
  %281 = lshr i8 %280, 5
  %.lobit418 = and i8 %281, 1
  %282 = zext nneg i8 %.lobit418 to i32
  %283 = getelementptr inbounds i8, ptr %.5495, i64 %252
  %.5364.430 = call i64 @llvm.umin.i64(i64 %.5364494, i64 %257)
  %284 = sub i64 %.5364.430, %252
  %285 = call i64 @ber_skip_length(ptr noundef %0, i32 noundef %282, ptr noundef nonnull %283, i64 noundef %284) #6
  switch i64 %285, label %289 [
    i64 0, label %286
    i64 -1, label %.thread458
  ]

286:                                              ; preds = %279
  %287 = load i64, ptr %247, align 8, !tbaa !21
  %288 = icmp slt i64 %287, 0
  %.not419 = icmp ugt i64 %287, %.5364494
  %or.cond431 = or i1 %288, %.not419
  %spec.select436 = select i1 %or.cond431, i32 1, i32 2
  br label %.thread458

289:                                              ; preds = %279
  %290 = add nsw i64 %285, %252
  %291 = getelementptr inbounds i8, ptr %.5495, i64 %290
  %292 = sub i64 %.5364494, %290
  %293 = load i64, ptr %247, align 8, !tbaa !21
  %294 = icmp sgt i64 %293, -1
  br i1 %294, label %295, label %297

295:                                              ; preds = %289
  %296 = sub i64 %293, %290
  store i64 %296, ptr %247, align 8, !tbaa !21
  br label %297

297:                                              ; preds = %295, %289
  %298 = phi i64 [ %296, %295 ], [ %293, %289 ]
  %299 = add i64 %290, %.5372493
  br label %300

300:                                              ; preds = %297, %268
  %301 = phi i64 [ %272, %268 ], [ %298, %297 ]
  %.6373 = phi i64 [ %271, %268 ], [ %299, %297 ]
  %.6365 = phi i64 [ %270, %268 ], [ %292, %297 ]
  %.6 = phi ptr [ %269, %268 ], [ %291, %297 ]
  %.not414 = icmp eq i64 %301, 0
  br i1 %.not414, label %._crit_edge, label %250

._crit_edge:                                      ; preds = %300, %246
  %.5372.lcssa = phi i64 [ %.4371, %246 ], [ %.6373, %300 ]
  store i16 5, ptr %28, align 8, !tbaa !16
  br label %302

302:                                              ; preds = %._crit_edge, %24
  %.7 = phi i64 [ 0, %24 ], [ %.5372.lcssa, %._crit_edge ]
  %303 = call i32 @_SET_is_populated(ptr noundef %1, ptr noundef nonnull %.0366)
  %.not415 = icmp eq i32 %303, 0
  br i1 %.not415, label %.thread458, label %304

304:                                              ; preds = %302
  %305 = load i16, ptr %28, align 8, !tbaa !16
  %306 = add i16 %305, 1
  store i16 %306, ptr %28, align 8, !tbaa !16
  %307 = getelementptr inbounds i8, ptr %28, i64 2
  store i16 0, ptr %307, align 2, !tbaa !20
  br label %.thread458

.thread458:                                       ; preds = %262, %279, %276, %273, %250, %286, %253, %.thread437, %304, %24, %302, %31, %19, %16
  %.sroa.0358.6 = phi i32 [ 2, %16 ], [ 2, %19 ], [ %34, %31 ], [ 2, %302 ], [ 0, %24 ], [ 0, %304 ], [ %.sroa.0358.2.ph, %.thread437 ], [ %spec.select436, %286 ], [ %spec.select434, %253 ], [ 1, %262 ], [ 2, %250 ], [ 2, %273 ], [ 2, %276 ], [ 2, %279 ]
  %.sroa.54.6 = phi i64 [ 0, %16 ], [ 0, %19 ], [ %35, %31 ], [ %.7, %302 ], [ 0, %24 ], [ %.7, %304 ], [ %.sroa.54.2.ph, %.thread437 ], [ %.5372493, %286 ], [ %.5372493, %253 ], [ %.5372493, %250 ], [ %.5372493, %273 ], [ %.5372493, %276 ], [ %.5372493, %279 ], [ %.5372493, %262 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.0358.6, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.54.6, 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: nounwind uwtable
declare hidden i32 @ASN__STACK_OVERFLOW_CHECK(ptr noundef) local_unnamed_addr #0

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

; 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 #3

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 #2

; 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 #2

; 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 #2

; Function Attrs: nounwind uwtable
declare hidden i32 @_SET_is_populated(ptr noundef, ptr 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 = { "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 = { 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 #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_SET_specifics_s", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 16, !10, i64 24, !7, i64 32, !10, i64 40, !10, i64 44, !7, i64 48}
!15 = !{!14, !10, i64 4}
!16 = !{!17, !18, i64 0}
!17 = !{!"asn_struct_ctx_s", !18, i64 0, !18, i64 2, !10, i64 4, !7, i64 8, !19, i64 16}
!18 = !{!"short", !8, i64 0}
!19 = !{!"long", !8, i64 0}
!20 = !{!17, !18, i64 2}
!21 = !{!17, !19, i64 16}
!22 = !{!8, !8, i64 0}
!23 = !{!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 = !{!25, !10, i64 4}
!29 = !{!14, !10, i64 8}
!30 = !{!31, !10, i64 0}
!31 = !{!"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}
!32 = !{!31, !10, i64 8}
!33 = !{!31, !7, i64 24}
!34 = !{!6, !7, i64 40}
!35 = !{!31, !10, i64 16}
!36 = !{!14, !10, i64 44}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.peeled.count", i32 1}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}


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