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

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

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

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

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

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

36:                                               ; preds = %9
  %37 = load ptr, ptr %13, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %37, i32 0, i32 1
  %39 = load i16, ptr %38, align 2, !tbaa !13
  %40 = sext i16 %39 to i32
  br label %42

41:                                               ; preds = %9
  br label %42

42:                                               ; preds = %41, %36
  %43 = phi i32 [ %40, %36 ], [ 0, %41 ]
  store i32 %43, ptr %28, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  %44 = load ptr, ptr %11, align 8, !tbaa !5
  %45 = call i32 @ASN__STACK_OVERFLOW_CHECK(ptr noundef %44)
  %46 = icmp ne i32 %45, 0
  br i1 %46, label %47, label %68

47:                                               ; preds = %42
  br label %48

48:                                               ; preds = %47
  %49 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %49, align 8, !tbaa !16
  %50 = load ptr, ptr %13, align 8, !tbaa !5
  %51 = icmp ne ptr %50, null
  br i1 %51, label %52, label %57

52:                                               ; preds = %48
  %53 = load i32, ptr %28, align 4, !tbaa !11
  %54 = trunc i32 %53 to i16
  %55 = load ptr, ptr %13, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %55, i32 0, i32 1
  store i16 %54, ptr %56, align 2, !tbaa !13
  br label %57

57:                                               ; preds = %52, %48
  %58 = load ptr, ptr %13, align 8, !tbaa !5
  %59 = icmp ne ptr %58, null
  br i1 %59, label %60, label %63

60:                                               ; preds = %57
  %61 = load i64, ptr %20, align 8, !tbaa !9
  %62 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %61, ptr %62, align 8, !tbaa !18
  br label %65

63:                                               ; preds = %57
  %64 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %64, align 8, !tbaa !18
  br label %65

65:                                               ; preds = %63, %60
  store i32 1, ptr %30, align 4
  br label %618

66:                                               ; No predecessors!
  br label %67

67:                                               ; preds = %66
  br label %68

68:                                               ; preds = %67, %42
  %69 = load i32, ptr %28, align 4, !tbaa !11
  %70 = load i32, ptr %16, align 4, !tbaa !11
  %71 = icmp eq i32 %70, 1
  %72 = zext i1 %71 to i64
  %73 = select i1 %71, i32 -1, i32 0
  %74 = add nsw i32 %69, %73
  store i32 %74, ptr %29, align 4, !tbaa !11
  %75 = load i32, ptr %16, align 4, !tbaa !11
  %76 = icmp eq i32 %75, 0
  br i1 %76, label %77, label %205

77:                                               ; preds = %68
  %78 = load i32, ptr %29, align 4, !tbaa !11
  %79 = load ptr, ptr %12, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %79, i32 0, i32 13
  %81 = load i32, ptr %80, align 8, !tbaa !19
  %82 = icmp eq i32 %78, %81
  br i1 %82, label %83, label %205

83:                                               ; preds = %77
  %84 = load ptr, ptr %14, align 8, !tbaa !5
  %85 = load i64, ptr %15, align 8, !tbaa !9
  %86 = call i64 @ber_fetch_tag(ptr noundef %84, i64 noundef %85, ptr noundef %23)
  store i64 %86, ptr %21, align 8, !tbaa !9
  %87 = load i64, ptr %21, align 8, !tbaa !9
  switch i64 %87, label %130 [
    i64 -1, label %88
    i64 0, label %109
  ]

88:                                               ; preds = %83
  br label %89

89:                                               ; preds = %88
  %90 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %90, align 8, !tbaa !16
  %91 = load ptr, ptr %13, align 8, !tbaa !5
  %92 = icmp ne ptr %91, null
  br i1 %92, label %93, label %98

93:                                               ; preds = %89
  %94 = load i32, ptr %28, align 4, !tbaa !11
  %95 = trunc i32 %94 to i16
  %96 = load ptr, ptr %13, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %96, i32 0, i32 1
  store i16 %95, ptr %97, align 2, !tbaa !13
  br label %98

98:                                               ; preds = %93, %89
  %99 = load ptr, ptr %13, align 8, !tbaa !5
  %100 = icmp ne ptr %99, null
  br i1 %100, label %101, label %104

101:                                              ; preds = %98
  %102 = load i64, ptr %20, align 8, !tbaa !9
  %103 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %102, ptr %103, align 8, !tbaa !18
  br label %106

104:                                              ; preds = %98
  %105 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %105, align 8, !tbaa !18
  br label %106

106:                                              ; preds = %104, %101
  store i32 1, ptr %30, align 4
  br label %618

107:                                              ; No predecessors!
  br label %108

108:                                              ; preds = %107
  br label %109

109:                                              ; preds = %108, %83
  br label %110

110:                                              ; preds = %109
  %111 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 1, ptr %111, align 8, !tbaa !16
  %112 = load ptr, ptr %13, align 8, !tbaa !5
  %113 = icmp ne ptr %112, null
  br i1 %113, label %114, label %119

114:                                              ; preds = %110
  %115 = load i32, ptr %28, align 4, !tbaa !11
  %116 = trunc i32 %115 to i16
  %117 = load ptr, ptr %13, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %117, i32 0, i32 1
  store i16 %116, ptr %118, align 2, !tbaa !13
  br label %119

119:                                              ; preds = %114, %110
  %120 = load ptr, ptr %13, align 8, !tbaa !5
  %121 = icmp ne ptr %120, null
  br i1 %121, label %122, label %125

122:                                              ; preds = %119
  %123 = load i64, ptr %20, align 8, !tbaa !9
  %124 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %123, ptr %124, align 8, !tbaa !18
  br label %127

125:                                              ; preds = %119
  %126 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %126, align 8, !tbaa !18
  br label %127

127:                                              ; preds = %125, %122
  store i32 1, ptr %30, align 4
  br label %618

128:                                              ; No predecessors!
  br label %129

129:                                              ; preds = %128
  br label %130

130:                                              ; preds = %129, %83
  %131 = load ptr, ptr %14, align 8, !tbaa !5
  %132 = load i8, ptr %131, align 1, !tbaa !21
  %133 = zext i8 %132 to i32
  %134 = and i32 %133, 32
  %135 = icmp ne i32 %134, 0
  %136 = zext i1 %135 to i64
  %137 = select i1 %135, i32 1, i32 0
  store i32 %137, ptr %27, align 4, !tbaa !11
  %138 = load i32, ptr %27, align 4, !tbaa !11
  %139 = load ptr, ptr %14, align 8, !tbaa !5
  %140 = load i64, ptr %21, align 8, !tbaa !9
  %141 = getelementptr inbounds i8, ptr %139, i64 %140
  %142 = load i64, ptr %15, align 8, !tbaa !9
  %143 = load i64, ptr %21, align 8, !tbaa !9
  %144 = sub i64 %142, %143
  %145 = call i64 @ber_fetch_length(i32 noundef %138, ptr noundef %141, i64 noundef %144, ptr noundef %24)
  store i64 %145, ptr %22, align 8, !tbaa !9
  %146 = load i64, ptr %22, align 8, !tbaa !9
  switch i64 %146, label %189 [
    i64 -1, label %147
    i64 0, label %168
  ]

147:                                              ; preds = %130
  br label %148

148:                                              ; preds = %147
  %149 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %149, align 8, !tbaa !16
  %150 = load ptr, ptr %13, align 8, !tbaa !5
  %151 = icmp ne ptr %150, null
  br i1 %151, label %152, label %157

152:                                              ; preds = %148
  %153 = load i32, ptr %28, align 4, !tbaa !11
  %154 = trunc i32 %153 to i16
  %155 = load ptr, ptr %13, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %155, i32 0, i32 1
  store i16 %154, ptr %156, align 2, !tbaa !13
  br label %157

157:                                              ; preds = %152, %148
  %158 = load ptr, ptr %13, align 8, !tbaa !5
  %159 = icmp ne ptr %158, null
  br i1 %159, label %160, label %163

160:                                              ; preds = %157
  %161 = load i64, ptr %20, align 8, !tbaa !9
  %162 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %161, ptr %162, align 8, !tbaa !18
  br label %165

163:                                              ; preds = %157
  %164 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %164, align 8, !tbaa !18
  br label %165

165:                                              ; preds = %163, %160
  store i32 1, ptr %30, align 4
  br label %618

166:                                              ; No predecessors!
  br label %167

167:                                              ; preds = %166
  br label %168

168:                                              ; preds = %167, %130
  br label %169

169:                                              ; preds = %168
  %170 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 1, ptr %170, align 8, !tbaa !16
  %171 = load ptr, ptr %13, align 8, !tbaa !5
  %172 = icmp ne ptr %171, null
  br i1 %172, label %173, label %178

173:                                              ; preds = %169
  %174 = load i32, ptr %28, align 4, !tbaa !11
  %175 = trunc i32 %174 to i16
  %176 = load ptr, ptr %13, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %176, i32 0, i32 1
  store i16 %175, ptr %177, align 2, !tbaa !13
  br label %178

178:                                              ; preds = %173, %169
  %179 = load ptr, ptr %13, align 8, !tbaa !5
  %180 = icmp ne ptr %179, null
  br i1 %180, label %181, label %184

181:                                              ; preds = %178
  %182 = load i64, ptr %20, align 8, !tbaa !9
  %183 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %182, ptr %183, align 8, !tbaa !18
  br label %186

184:                                              ; preds = %178
  %185 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %185, align 8, !tbaa !18
  br label %186

186:                                              ; preds = %184, %181
  store i32 1, ptr %30, align 4
  br label %618

187:                                              ; No predecessors!
  br label %188

188:                                              ; preds = %187
  br label %189

189:                                              ; preds = %188, %130
  br label %190

190:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  %191 = load i64, ptr %21, align 8, !tbaa !9
  %192 = load i64, ptr %22, align 8, !tbaa !9
  %193 = add nsw i64 %191, %192
  store i64 %193, ptr %31, align 8, !tbaa !9
  %194 = load ptr, ptr %14, align 8, !tbaa !5
  %195 = load i64, ptr %31, align 8, !tbaa !9
  %196 = getelementptr inbounds i8, ptr %194, i64 %195
  store ptr %196, ptr %14, align 8, !tbaa !5
  %197 = load i64, ptr %31, align 8, !tbaa !9
  %198 = load i64, ptr %15, align 8, !tbaa !9
  %199 = sub i64 %198, %197
  store i64 %199, ptr %15, align 8, !tbaa !9
  %200 = load i64, ptr %31, align 8, !tbaa !9
  %201 = load i64, ptr %20, align 8, !tbaa !9
  %202 = add i64 %201, %200
  store i64 %202, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  br label %203

203:                                              ; preds = %190
  br label %204

204:                                              ; preds = %203
  br label %206

205:                                              ; preds = %77, %68
  br label %206

206:                                              ; preds = %205, %204
  %207 = load i32, ptr %29, align 4, !tbaa !11
  br label %208

208:                                              ; preds = %581, %206
  %209 = load i32, ptr %29, align 4, !tbaa !11
  %210 = load ptr, ptr %12, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %210, i32 0, i32 13
  %212 = load i32, ptr %211, align 8, !tbaa !19
  %213 = icmp slt i32 %209, %212
  br i1 %213, label %214, label %586

214:                                              ; preds = %208
  %215 = load ptr, ptr %14, align 8, !tbaa !5
  %216 = load i64, ptr %15, align 8, !tbaa !9
  %217 = call i64 @ber_fetch_tag(ptr noundef %215, i64 noundef %216, ptr noundef %23)
  store i64 %217, ptr %21, align 8, !tbaa !9
  %218 = load i64, ptr %21, align 8, !tbaa !9
  switch i64 %218, label %261 [
    i64 -1, label %219
    i64 0, label %240
  ]

219:                                              ; preds = %214
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 185, i32 noundef 100, ptr noundef null)
  br label %220

220:                                              ; preds = %219
  %221 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %221, align 8, !tbaa !16
  %222 = load ptr, ptr %13, align 8, !tbaa !5
  %223 = icmp ne ptr %222, null
  br i1 %223, label %224, label %229

224:                                              ; preds = %220
  %225 = load i32, ptr %28, align 4, !tbaa !11
  %226 = trunc i32 %225 to i16
  %227 = load ptr, ptr %13, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %227, i32 0, i32 1
  store i16 %226, ptr %228, align 2, !tbaa !13
  br label %229

229:                                              ; preds = %224, %220
  %230 = load ptr, ptr %13, align 8, !tbaa !5
  %231 = icmp ne ptr %230, null
  br i1 %231, label %232, label %235

232:                                              ; preds = %229
  %233 = load i64, ptr %20, align 8, !tbaa !9
  %234 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %233, ptr %234, align 8, !tbaa !18
  br label %237

235:                                              ; preds = %229
  %236 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %236, align 8, !tbaa !18
  br label %237

237:                                              ; preds = %235, %232
  store i32 1, ptr %30, align 4
  br label %618

238:                                              ; No predecessors!
  br label %239

239:                                              ; preds = %238
  br label %240

240:                                              ; preds = %239, %214
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 188, i32 noundef 100, ptr noundef null)
  br label %241

241:                                              ; preds = %240
  %242 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 1, ptr %242, align 8, !tbaa !16
  %243 = load ptr, ptr %13, align 8, !tbaa !5
  %244 = icmp ne ptr %243, null
  br i1 %244, label %245, label %250

245:                                              ; preds = %241
  %246 = load i32, ptr %28, align 4, !tbaa !11
  %247 = trunc i32 %246 to i16
  %248 = load ptr, ptr %13, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %248, i32 0, i32 1
  store i16 %247, ptr %249, align 2, !tbaa !13
  br label %250

250:                                              ; preds = %245, %241
  %251 = load ptr, ptr %13, align 8, !tbaa !5
  %252 = icmp ne ptr %251, null
  br i1 %252, label %253, label %256

253:                                              ; preds = %250
  %254 = load i64, ptr %20, align 8, !tbaa !9
  %255 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %254, ptr %255, align 8, !tbaa !18
  br label %258

256:                                              ; preds = %250
  %257 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %257, align 8, !tbaa !18
  br label %258

258:                                              ; preds = %256, %253
  store i32 1, ptr %30, align 4
  br label %618

259:                                              ; No predecessors!
  br label %260

260:                                              ; preds = %259
  br label %261

261:                                              ; preds = %260, %214
  %262 = load ptr, ptr %14, align 8, !tbaa !5
  %263 = load i8, ptr %262, align 1, !tbaa !21
  %264 = zext i8 %263 to i32
  %265 = and i32 %264, 32
  %266 = icmp ne i32 %265, 0
  %267 = zext i1 %266 to i64
  %268 = select i1 %266, i32 1, i32 0
  store i32 %268, ptr %27, align 4, !tbaa !11
  %269 = load i32, ptr %16, align 4, !tbaa !11
  %270 = icmp ne i32 %269, 0
  br i1 %270, label %271, label %275

271:                                              ; preds = %261
  %272 = load i32, ptr %28, align 4, !tbaa !11
  %273 = icmp eq i32 %272, 0
  br i1 %273, label %274, label %275

274:                                              ; preds = %271
  br label %307

275:                                              ; preds = %271, %261
  %276 = load i32, ptr %23, align 4, !tbaa !11
  %277 = load ptr, ptr %12, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %277, i32 0, i32 12
  %279 = load ptr, ptr %278, align 8, !tbaa !22
  %280 = load i32, ptr %29, align 4, !tbaa !11
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds i32, ptr %279, i64 %281
  %283 = load i32, ptr %282, align 4, !tbaa !11
  %284 = icmp ne i32 %276, %283
  br i1 %284, label %285, label %306

285:                                              ; preds = %275
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 215, i32 noundef 100, ptr noundef null)
  br label %286

286:                                              ; preds = %285
  %287 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %287, align 8, !tbaa !16
  %288 = load ptr, ptr %13, align 8, !tbaa !5
  %289 = icmp ne ptr %288, null
  br i1 %289, label %290, label %295

290:                                              ; preds = %286
  %291 = load i32, ptr %28, align 4, !tbaa !11
  %292 = trunc i32 %291 to i16
  %293 = load ptr, ptr %13, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %293, i32 0, i32 1
  store i16 %292, ptr %294, align 2, !tbaa !13
  br label %295

295:                                              ; preds = %290, %286
  %296 = load ptr, ptr %13, align 8, !tbaa !5
  %297 = icmp ne ptr %296, null
  br i1 %297, label %298, label %301

298:                                              ; preds = %295
  %299 = load i64, ptr %20, align 8, !tbaa !9
  %300 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %299, ptr %300, align 8, !tbaa !18
  br label %303

301:                                              ; preds = %295
  %302 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %302, align 8, !tbaa !18
  br label %303

303:                                              ; preds = %301, %298
  store i32 1, ptr %30, align 4
  br label %618

304:                                              ; No predecessors!
  br label %305

305:                                              ; preds = %304
  br label %306

306:                                              ; preds = %305, %275
  br label %307

307:                                              ; preds = %306, %274
  %308 = load i32, ptr %29, align 4, !tbaa !11
  %309 = load ptr, ptr %12, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %309, i32 0, i32 13
  %311 = load i32, ptr %310, align 8, !tbaa !19
  %312 = sub nsw i32 %311, 1
  %313 = icmp slt i32 %308, %312
  br i1 %313, label %314, label %339

314:                                              ; preds = %307
  %315 = load i32, ptr %27, align 4, !tbaa !11
  %316 = icmp eq i32 %315, 0
  br i1 %316, label %317, label %338

317:                                              ; preds = %314
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 231, i32 noundef 100, ptr noundef null)
  br label %318

318:                                              ; preds = %317
  %319 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %319, align 8, !tbaa !16
  %320 = load ptr, ptr %13, align 8, !tbaa !5
  %321 = icmp ne ptr %320, null
  br i1 %321, label %322, label %327

322:                                              ; preds = %318
  %323 = load i32, ptr %28, align 4, !tbaa !11
  %324 = trunc i32 %323 to i16
  %325 = load ptr, ptr %13, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %325, i32 0, i32 1
  store i16 %324, ptr %326, align 2, !tbaa !13
  br label %327

327:                                              ; preds = %322, %318
  %328 = load ptr, ptr %13, align 8, !tbaa !5
  %329 = icmp ne ptr %328, null
  br i1 %329, label %330, label %333

330:                                              ; preds = %327
  %331 = load i64, ptr %20, align 8, !tbaa !9
  %332 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %331, ptr %332, align 8, !tbaa !18
  br label %335

333:                                              ; preds = %327
  %334 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %334, align 8, !tbaa !18
  br label %335

335:                                              ; preds = %333, %330
  store i32 1, ptr %30, align 4
  br label %618

336:                                              ; No predecessors!
  br label %337

337:                                              ; preds = %336
  br label %338

338:                                              ; preds = %337, %314
  br label %368

339:                                              ; preds = %307
  %340 = load i32, ptr %17, align 4, !tbaa !11
  %341 = load i32, ptr %27, align 4, !tbaa !11
  %342 = icmp ne i32 %340, %341
  br i1 %342, label %343, label %367

343:                                              ; preds = %339
  %344 = load i32, ptr %17, align 4, !tbaa !11
  %345 = icmp ne i32 %344, -1
  br i1 %345, label %346, label %367

346:                                              ; preds = %343
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 239, i32 noundef 100, ptr noundef null)
  br label %347

347:                                              ; preds = %346
  %348 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %348, align 8, !tbaa !16
  %349 = load ptr, ptr %13, align 8, !tbaa !5
  %350 = icmp ne ptr %349, null
  br i1 %350, label %351, label %356

351:                                              ; preds = %347
  %352 = load i32, ptr %28, align 4, !tbaa !11
  %353 = trunc i32 %352 to i16
  %354 = load ptr, ptr %13, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %354, i32 0, i32 1
  store i16 %353, ptr %355, align 2, !tbaa !13
  br label %356

356:                                              ; preds = %351, %347
  %357 = load ptr, ptr %13, align 8, !tbaa !5
  %358 = icmp ne ptr %357, null
  br i1 %358, label %359, label %362

359:                                              ; preds = %356
  %360 = load i64, ptr %20, align 8, !tbaa !9
  %361 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %360, ptr %361, align 8, !tbaa !18
  br label %364

362:                                              ; preds = %356
  %363 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %363, align 8, !tbaa !18
  br label %364

364:                                              ; preds = %362, %359
  store i32 1, ptr %30, align 4
  br label %618

365:                                              ; No predecessors!
  br label %366

366:                                              ; preds = %365
  br label %367

367:                                              ; preds = %366, %343, %339
  br label %368

368:                                              ; preds = %367, %338
  %369 = load i32, ptr %27, align 4, !tbaa !11
  %370 = load ptr, ptr %14, align 8, !tbaa !5
  %371 = load i64, ptr %21, align 8, !tbaa !9
  %372 = getelementptr inbounds i8, ptr %370, i64 %371
  %373 = load i64, ptr %15, align 8, !tbaa !9
  %374 = load i64, ptr %21, align 8, !tbaa !9
  %375 = sub i64 %373, %374
  %376 = call i64 @ber_fetch_length(i32 noundef %369, ptr noundef %372, i64 noundef %375, ptr noundef %24)
  store i64 %376, ptr %22, align 8, !tbaa !9
  %377 = load i64, ptr %22, align 8, !tbaa !9
  switch i64 %377, label %420 [
    i64 -1, label %378
    i64 0, label %399
  ]

378:                                              ; preds = %368
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 252, i32 noundef 100, ptr noundef null)
  br label %379

379:                                              ; preds = %378
  %380 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %380, align 8, !tbaa !16
  %381 = load ptr, ptr %13, align 8, !tbaa !5
  %382 = icmp ne ptr %381, null
  br i1 %382, label %383, label %388

383:                                              ; preds = %379
  %384 = load i32, ptr %28, align 4, !tbaa !11
  %385 = trunc i32 %384 to i16
  %386 = load ptr, ptr %13, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %386, i32 0, i32 1
  store i16 %385, ptr %387, align 2, !tbaa !13
  br label %388

388:                                              ; preds = %383, %379
  %389 = load ptr, ptr %13, align 8, !tbaa !5
  %390 = icmp ne ptr %389, null
  br i1 %390, label %391, label %394

391:                                              ; preds = %388
  %392 = load i64, ptr %20, align 8, !tbaa !9
  %393 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %392, ptr %393, align 8, !tbaa !18
  br label %396

394:                                              ; preds = %388
  %395 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %395, align 8, !tbaa !18
  br label %396

396:                                              ; preds = %394, %391
  store i32 1, ptr %30, align 4
  br label %618

397:                                              ; No predecessors!
  br label %398

398:                                              ; preds = %397
  br label %399

399:                                              ; preds = %398, %368
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 255, i32 noundef 100, ptr noundef null)
  br label %400

400:                                              ; preds = %399
  %401 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 1, ptr %401, align 8, !tbaa !16
  %402 = load ptr, ptr %13, align 8, !tbaa !5
  %403 = icmp ne ptr %402, null
  br i1 %403, label %404, label %409

404:                                              ; preds = %400
  %405 = load i32, ptr %28, align 4, !tbaa !11
  %406 = trunc i32 %405 to i16
  %407 = load ptr, ptr %13, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %407, i32 0, i32 1
  store i16 %406, ptr %408, align 2, !tbaa !13
  br label %409

409:                                              ; preds = %404, %400
  %410 = load ptr, ptr %13, align 8, !tbaa !5
  %411 = icmp ne ptr %410, null
  br i1 %411, label %412, label %415

412:                                              ; preds = %409
  %413 = load i64, ptr %20, align 8, !tbaa !9
  %414 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %413, ptr %414, align 8, !tbaa !18
  br label %417

415:                                              ; preds = %409
  %416 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %416, align 8, !tbaa !18
  br label %417

417:                                              ; preds = %415, %412
  store i32 1, ptr %30, align 4
  br label %618

418:                                              ; No predecessors!
  br label %419

419:                                              ; preds = %418
  br label %420

420:                                              ; preds = %419, %368
  %421 = load i64, ptr %24, align 8, !tbaa !9
  %422 = icmp eq i64 %421, -1
  br i1 %422, label %423, label %466

423:                                              ; preds = %420
  %424 = load i64, ptr %25, align 8, !tbaa !9
  %425 = icmp eq i64 %424, -1
  br i1 %425, label %426, label %429

426:                                              ; preds = %423
  %427 = load i32, ptr %26, align 4, !tbaa !11
  %428 = add nsw i32 %427, 1
  store i32 %428, ptr %26, align 4, !tbaa !11
  br label %450

429:                                              ; preds = %423
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 275, i32 noundef 100, ptr noundef null)
  br label %430

430:                                              ; preds = %429
  %431 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %431, align 8, !tbaa !16
  %432 = load ptr, ptr %13, align 8, !tbaa !5
  %433 = icmp ne ptr %432, null
  br i1 %433, label %434, label %439

434:                                              ; preds = %430
  %435 = load i32, ptr %28, align 4, !tbaa !11
  %436 = trunc i32 %435 to i16
  %437 = load ptr, ptr %13, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %437, i32 0, i32 1
  store i16 %436, ptr %438, align 2, !tbaa !13
  br label %439

439:                                              ; preds = %434, %430
  %440 = load ptr, ptr %13, align 8, !tbaa !5
  %441 = icmp ne ptr %440, null
  br i1 %441, label %442, label %445

442:                                              ; preds = %439
  %443 = load i64, ptr %20, align 8, !tbaa !9
  %444 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %443, ptr %444, align 8, !tbaa !18
  br label %447

445:                                              ; preds = %439
  %446 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %446, align 8, !tbaa !18
  br label %447

447:                                              ; preds = %445, %442
  store i32 1, ptr %30, align 4
  br label %618

448:                                              ; No predecessors!
  br label %449

449:                                              ; preds = %448
  br label %450

450:                                              ; preds = %449, %426
  br label %451

451:                                              ; preds = %450
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  %452 = load i64, ptr %21, align 8, !tbaa !9
  %453 = load i64, ptr %22, align 8, !tbaa !9
  %454 = add nsw i64 %452, %453
  store i64 %454, ptr %32, align 8, !tbaa !9
  %455 = load ptr, ptr %14, align 8, !tbaa !5
  %456 = load i64, ptr %32, align 8, !tbaa !9
  %457 = getelementptr inbounds i8, ptr %455, i64 %456
  store ptr %457, ptr %14, align 8, !tbaa !5
  %458 = load i64, ptr %32, align 8, !tbaa !9
  %459 = load i64, ptr %15, align 8, !tbaa !9
  %460 = sub i64 %459, %458
  store i64 %460, ptr %15, align 8, !tbaa !9
  %461 = load i64, ptr %32, align 8, !tbaa !9
  %462 = load i64, ptr %20, align 8, !tbaa !9
  %463 = add i64 %462, %461
  store i64 %463, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  br label %464

464:                                              ; preds = %451
  br label %465

465:                                              ; preds = %464
  br label %581

466:                                              ; preds = %420
  %467 = load i32, ptr %26, align 4, !tbaa !11
  %468 = icmp ne i32 %467, 0
  br i1 %468, label %469, label %490

469:                                              ; preds = %466
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 284, i32 noundef 100, ptr noundef null)
  br label %470

470:                                              ; preds = %469
  %471 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %471, align 8, !tbaa !16
  %472 = load ptr, ptr %13, align 8, !tbaa !5
  %473 = icmp ne ptr %472, null
  br i1 %473, label %474, label %479

474:                                              ; preds = %470
  %475 = load i32, ptr %28, align 4, !tbaa !11
  %476 = trunc i32 %475 to i16
  %477 = load ptr, ptr %13, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %477, i32 0, i32 1
  store i16 %476, ptr %478, align 2, !tbaa !13
  br label %479

479:                                              ; preds = %474, %470
  %480 = load ptr, ptr %13, align 8, !tbaa !5
  %481 = icmp ne ptr %480, null
  br i1 %481, label %482, label %485

482:                                              ; preds = %479
  %483 = load i64, ptr %20, align 8, !tbaa !9
  %484 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %483, ptr %484, align 8, !tbaa !18
  br label %487

485:                                              ; preds = %479
  %486 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %486, align 8, !tbaa !18
  br label %487

487:                                              ; preds = %485, %482
  store i32 1, ptr %30, align 4
  br label %618

488:                                              ; No predecessors!
  br label %489

489:                                              ; preds = %488
  br label %490

490:                                              ; preds = %489, %466
  br label %491

491:                                              ; preds = %490
  %492 = load i64, ptr %25, align 8, !tbaa !9
  %493 = icmp eq i64 %492, -1
  br i1 %493, label %494, label %524

494:                                              ; preds = %491
  %495 = load i64, ptr %24, align 8, !tbaa !9
  %496 = load i64, ptr %21, align 8, !tbaa !9
  %497 = add nsw i64 %495, %496
  %498 = load i64, ptr %22, align 8, !tbaa !9
  %499 = add nsw i64 %497, %498
  store i64 %499, ptr %25, align 8, !tbaa !9
  %500 = load i64, ptr %25, align 8, !tbaa !9
  %501 = icmp slt i64 %500, 0
  br i1 %501, label %502, label %523

502:                                              ; preds = %494
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 297, i32 noundef 100, ptr noundef null)
  br label %503

503:                                              ; preds = %502
  %504 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %504, align 8, !tbaa !16
  %505 = load ptr, ptr %13, align 8, !tbaa !5
  %506 = icmp ne ptr %505, null
  br i1 %506, label %507, label %512

507:                                              ; preds = %503
  %508 = load i32, ptr %28, align 4, !tbaa !11
  %509 = trunc i32 %508 to i16
  %510 = load ptr, ptr %13, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %510, i32 0, i32 1
  store i16 %509, ptr %511, align 2, !tbaa !13
  br label %512

512:                                              ; preds = %507, %503
  %513 = load ptr, ptr %13, align 8, !tbaa !5
  %514 = icmp ne ptr %513, null
  br i1 %514, label %515, label %518

515:                                              ; preds = %512
  %516 = load i64, ptr %20, align 8, !tbaa !9
  %517 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %516, ptr %517, align 8, !tbaa !18
  br label %520

518:                                              ; preds = %512
  %519 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %519, align 8, !tbaa !18
  br label %520

520:                                              ; preds = %518, %515
  store i32 1, ptr %30, align 4
  br label %618

521:                                              ; No predecessors!
  br label %522

522:                                              ; preds = %521
  br label %523

523:                                              ; preds = %522, %494
  br label %554

524:                                              ; preds = %491
  %525 = load i64, ptr %25, align 8, !tbaa !9
  %526 = load i64, ptr %24, align 8, !tbaa !9
  %527 = load i64, ptr %21, align 8, !tbaa !9
  %528 = add nsw i64 %526, %527
  %529 = load i64, ptr %22, align 8, !tbaa !9
  %530 = add nsw i64 %528, %529
  %531 = icmp ne i64 %525, %530
  br i1 %531, label %532, label %553

532:                                              ; preds = %524
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 307, i32 noundef 100, ptr noundef null)
  br label %533

533:                                              ; preds = %532
  %534 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 2, ptr %534, align 8, !tbaa !16
  %535 = load ptr, ptr %13, align 8, !tbaa !5
  %536 = icmp ne ptr %535, null
  br i1 %536, label %537, label %542

537:                                              ; preds = %533
  %538 = load i32, ptr %28, align 4, !tbaa !11
  %539 = trunc i32 %538 to i16
  %540 = load ptr, ptr %13, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %540, i32 0, i32 1
  store i16 %539, ptr %541, align 2, !tbaa !13
  br label %542

542:                                              ; preds = %537, %533
  %543 = load ptr, ptr %13, align 8, !tbaa !5
  %544 = icmp ne ptr %543, null
  br i1 %544, label %545, label %548

545:                                              ; preds = %542
  %546 = load i64, ptr %20, align 8, !tbaa !9
  %547 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %546, ptr %547, align 8, !tbaa !18
  br label %550

548:                                              ; preds = %542
  %549 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 0, ptr %549, align 8, !tbaa !18
  br label %550

550:                                              ; preds = %548, %545
  store i32 1, ptr %30, align 4
  br label %618

551:                                              ; No predecessors!
  br label %552

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552, %524
  br label %554

554:                                              ; preds = %553, %523
  br label %555

555:                                              ; preds = %554
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  %556 = load i64, ptr %21, align 8, !tbaa !9
  %557 = load i64, ptr %22, align 8, !tbaa !9
  %558 = add nsw i64 %556, %557
  store i64 %558, ptr %33, align 8, !tbaa !9
  %559 = load ptr, ptr %14, align 8, !tbaa !5
  %560 = load i64, ptr %33, align 8, !tbaa !9
  %561 = getelementptr inbounds i8, ptr %559, i64 %560
  store ptr %561, ptr %14, align 8, !tbaa !5
  %562 = load i64, ptr %33, align 8, !tbaa !9
  %563 = load i64, ptr %15, align 8, !tbaa !9
  %564 = sub i64 %563, %562
  store i64 %564, ptr %15, align 8, !tbaa !9
  %565 = load i64, ptr %33, align 8, !tbaa !9
  %566 = load i64, ptr %20, align 8, !tbaa !9
  %567 = add i64 %566, %565
  store i64 %567, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  br label %568

568:                                              ; preds = %555
  br label %569

569:                                              ; preds = %568
  %570 = load i64, ptr %21, align 8, !tbaa !9
  %571 = load i64, ptr %22, align 8, !tbaa !9
  %572 = add nsw i64 %570, %571
  %573 = load i64, ptr %25, align 8, !tbaa !9
  %574 = sub nsw i64 %573, %572
  store i64 %574, ptr %25, align 8, !tbaa !9
  %575 = load i64, ptr %15, align 8, !tbaa !9
  %576 = load i64, ptr %25, align 8, !tbaa !9
  %577 = icmp sgt i64 %575, %576
  br i1 %577, label %578, label %580

578:                                              ; preds = %569
  %579 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %579, ptr %15, align 8, !tbaa !9
  br label %580

580:                                              ; preds = %578, %569
  br label %581

581:                                              ; preds = %580, %465
  %582 = load i32, ptr %29, align 4, !tbaa !11
  %583 = add nsw i32 %582, 1
  store i32 %583, ptr %29, align 4, !tbaa !11
  %584 = load i32, ptr %28, align 4, !tbaa !11
  %585 = add nsw i32 %584, 1
  store i32 %585, ptr %28, align 4, !tbaa !11
  br label %208, !llvm.loop !23

586:                                              ; preds = %208
  %587 = load ptr, ptr %19, align 8, !tbaa !5
  %588 = icmp ne ptr %587, null
  br i1 %588, label %589, label %592

589:                                              ; preds = %586
  %590 = load i32, ptr %27, align 4, !tbaa !11
  %591 = load ptr, ptr %19, align 8, !tbaa !5
  store i32 %590, ptr %591, align 4, !tbaa !11
  br label %592

592:                                              ; preds = %589, %586
  %593 = load i32, ptr %26, align 4, !tbaa !11
  %594 = icmp ne i32 %593, 0
  br i1 %594, label %595, label %600

595:                                              ; preds = %592
  %596 = load i32, ptr %26, align 4, !tbaa !11
  %597 = sub nsw i32 0, %596
  %598 = sext i32 %597 to i64
  %599 = load ptr, ptr %18, align 8, !tbaa !5
  store i64 %598, ptr %599, align 8, !tbaa !9
  br label %603

600:                                              ; preds = %592
  %601 = load i64, ptr %24, align 8, !tbaa !9
  %602 = load ptr, ptr %18, align 8, !tbaa !5
  store i64 %601, ptr %602, align 8, !tbaa !9
  br label %603

603:                                              ; preds = %600, %595
  br label %604

604:                                              ; preds = %603
  %605 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 0
  store i32 0, ptr %605, align 8, !tbaa !16
  %606 = load ptr, ptr %13, align 8, !tbaa !5
  %607 = icmp ne ptr %606, null
  br i1 %607, label %608, label %613

608:                                              ; preds = %604
  %609 = load i32, ptr %28, align 4, !tbaa !11
  %610 = trunc i32 %609 to i16
  %611 = load ptr, ptr %13, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %611, i32 0, i32 1
  store i16 %610, ptr %612, align 2, !tbaa !13
  br label %613

613:                                              ; preds = %608, %604
  %614 = load i64, ptr %20, align 8, !tbaa !9
  %615 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %10, i32 0, i32 1
  store i64 %614, ptr %615, align 8, !tbaa !18
  store i32 1, ptr %30, align 4
  br label %618

616:                                              ; No predecessors!
  br label %617

617:                                              ; preds = %616
  store i32 0, ptr %30, align 4
  br label %618

618:                                              ; preds = %617, %613, %550, %520, %487, %447, %417, %396, %364, %335, %303, %258, %237, %186, %165, %127, %106, %65
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  %619 = load i32, ptr %30, align 4
  switch i32 %619, label %622 [
    i32 0, label %620
    i32 1, label %620
  ]

620:                                              ; preds = %618, %618
  %621 = load { i32, i64 }, ptr %10, align 8
  ret { i32, i64 } %621

622:                                              ; preds = %618
  unreachable
}

; Function Attrs: nounwind uwtable
declare hidden i32 @ASN__STACK_OVERFLOW_CHECK(ptr noundef) #1

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

declare i64 @ber_fetch_length(i32 noundef, ptr noundef, i64 noundef, ptr noundef) #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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, !15, i64 2}
!14 = !{!"asn_struct_ctx_s", !15, i64 0, !15, i64 2, !12, i64 4, !6, i64 8, !10, i64 16}
!15 = !{!"short", !7, i64 0}
!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 104}
!20 = !{!"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}
!21 = !{!7, !7, i64 0}
!22 = !{!20, !6, i64 96}
!23 = distinct !{!23, !24}
!24 = !{!"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"

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

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

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

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @ber_check_tags(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr noundef %3, i64 noundef %4, i32 noundef %5, i32 noundef %6, ptr nocapture noundef writeonly %7, ptr noundef writeonly %8) local_unnamed_addr #1 {
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #4
  store i64 0, ptr %11, align 8, !tbaa !5
  %.not = icmp eq ptr %2, null
  br i1 %.not, label %12, label %.thread

12:                                               ; preds = %9
  %13 = tail call i32 @ASN__STACK_OVERFLOW_CHECK(ptr noundef %0)
  %.not200 = icmp eq i32 %13, 0
  br i1 %.not200, label %19, label %168

.thread:                                          ; preds = %9
  %14 = getelementptr inbounds i8, ptr %2, i64 2
  %15 = load i16, ptr %14, align 2, !tbaa !9
  %16 = sext i16 %15 to i32
  %17 = tail call i32 @ASN__STACK_OVERFLOW_CHECK(ptr noundef %0)
  %.not200219 = icmp eq i32 %17, 0
  br i1 %.not200219, label %19, label %18

18:                                               ; preds = %.thread
  store i16 %15, ptr %14, align 2, !tbaa !9
  br label %168

19:                                               ; preds = %.thread, %12
  %20 = phi i32 [ %16, %.thread ], [ 0, %12 ]
  %21 = icmp eq i32 %5, 1
  %22 = sext i1 %21 to i32
  %23 = add nsw i32 %20, %22
  %24 = icmp eq i32 %5, 0
  br i1 %24, label %25, label %58

25:                                               ; preds = %19
  %26 = getelementptr inbounds i8, ptr %1, i64 104
  %27 = load i32, ptr %26, align 8, !tbaa !14
  %28 = icmp eq i32 %23, %27
  br i1 %28, label %29, label %58

29:                                               ; preds = %25
  %30 = call i64 @ber_fetch_tag(ptr noundef %3, i64 noundef %4, ptr noundef nonnull %10) #4
  switch i64 %30, label %39 [
    i64 -1, label %31
    i64 0, label %35
  ]

31:                                               ; preds = %29
  br i1 %.not, label %168, label %32

32:                                               ; preds = %31
  %33 = trunc nsw i32 %20 to i16
  %34 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %33, ptr %34, align 2, !tbaa !9
  br label %168

35:                                               ; preds = %29
  br i1 %.not, label %168, label %36

36:                                               ; preds = %35
  %37 = trunc nsw i32 %20 to i16
  %38 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %37, ptr %38, align 2, !tbaa !9
  br label %168

39:                                               ; preds = %29
  %40 = load i8, ptr %3, align 1, !tbaa !16
  %41 = lshr i8 %40, 5
  %.lobit = and i8 %41, 1
  %42 = zext nneg i8 %.lobit to i32
  %43 = getelementptr inbounds i8, ptr %3, i64 %30
  %44 = sub i64 %4, %30
  %45 = call i64 @ber_fetch_length(i32 noundef %42, ptr noundef nonnull %43, i64 noundef %44, ptr noundef nonnull %11) #4
  switch i64 %45, label %54 [
    i64 -1, label %46
    i64 0, label %50
  ]

46:                                               ; preds = %39
  br i1 %.not, label %168, label %47

47:                                               ; preds = %46
  %48 = trunc nsw i32 %20 to i16
  %49 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %48, ptr %49, align 2, !tbaa !9
  br label %168

50:                                               ; preds = %39
  br i1 %.not, label %168, label %51

51:                                               ; preds = %50
  %52 = trunc nsw i32 %20 to i16
  %53 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %52, ptr %53, align 2, !tbaa !9
  br label %168

54:                                               ; preds = %39
  %55 = add nsw i64 %45, %30
  %56 = getelementptr inbounds i8, ptr %3, i64 %55
  %57 = sub i64 %4, %55
  br label %58

58:                                               ; preds = %19, %25, %54
  %.0188 = phi i64 [ %57, %54 ], [ %4, %25 ], [ %4, %19 ]
  %.0185 = phi i64 [ %55, %54 ], [ 0, %25 ], [ 0, %19 ]
  %.0178 = phi i32 [ %42, %54 ], [ -1, %25 ], [ -1, %19 ]
  %.0 = phi ptr [ %56, %54 ], [ %3, %25 ], [ %3, %19 ]
  %59 = getelementptr inbounds i8, ptr %1, i64 104
  %60 = load i32, ptr %59, align 8, !tbaa !14
  %61 = icmp slt i32 %23, %60
  br i1 %61, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %58
  %62 = icmp ne i32 %5, 0
  %63 = getelementptr inbounds i8, ptr %1, i64 96
  %64 = icmp ne i32 %6, -1
  %65 = sext i32 %23 to i64
  br label %66

66:                                               ; preds = %.lr.ph, %155
  %indvars.iv = phi i64 [ %65, %.lr.ph ], [ %indvars.iv.next, %155 ]
  %.1274 = phi ptr [ %.0, %.lr.ph ], [ %.2, %155 ]
  %.0177271 = phi i32 [ %20, %.lr.ph ], [ %156, %155 ]
  %.0180270 = phi i32 [ 0, %.lr.ph ], [ %.1181, %155 ]
  %.0182269 = phi i64 [ -1, %.lr.ph ], [ %.2184, %155 ]
  %.1186267 = phi i64 [ %.0185, %.lr.ph ], [ %.2187, %155 ]
  %.1189266 = phi i64 [ %.0188, %.lr.ph ], [ %.2190, %155 ]
  %67 = call i64 @ber_fetch_tag(ptr noundef %.1274, i64 noundef %.1189266, ptr noundef nonnull %10) #4
  switch i64 %67, label %76 [
    i64 -1, label %68
    i64 0, label %72
  ]

68:                                               ; preds = %66
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 185, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %69

69:                                               ; preds = %68
  %70 = trunc i32 %.0177271 to i16
  %71 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %70, ptr %71, align 2, !tbaa !9
  br label %168

72:                                               ; preds = %66
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 188, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %73

73:                                               ; preds = %72
  %74 = trunc i32 %.0177271 to i16
  %75 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %74, ptr %75, align 2, !tbaa !9
  br label %168

76:                                               ; preds = %66
  %77 = load i8, ptr %.1274, align 1, !tbaa !16
  %78 = lshr i8 %77, 5
  %.lobit205 = and i8 %78, 1
  %79 = zext nneg i8 %.lobit205 to i32
  %80 = icmp eq i32 %.0177271, 0
  %or.cond = select i1 %62, i1 %80, i1 false
  br i1 %or.cond, label %90, label %81

81:                                               ; preds = %76
  %82 = load i32, ptr %10, align 4, !tbaa !17
  %83 = load ptr, ptr %63, align 8, !tbaa !18
  %84 = getelementptr inbounds i32, ptr %83, i64 %indvars.iv
  %85 = load i32, ptr %84, align 4, !tbaa !17
  %.not206 = icmp eq i32 %82, %85
  br i1 %.not206, label %90, label %86

86:                                               ; preds = %81
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 215, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %87

87:                                               ; preds = %86
  %88 = trunc i32 %.0177271 to i16
  %89 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %88, ptr %89, align 2, !tbaa !9
  br label %168

90:                                               ; preds = %81, %76
  %91 = load i32, ptr %59, align 8, !tbaa !14
  %92 = add nsw i32 %91, -1
  %93 = sext i32 %92 to i64
  %94 = icmp slt i64 %indvars.iv, %93
  br i1 %94, label %95, label %101

95:                                               ; preds = %90
  %96 = icmp eq i8 %.lobit205, 0
  br i1 %96, label %97, label %107

97:                                               ; preds = %95
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 231, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %98

98:                                               ; preds = %97
  %99 = trunc i32 %.0177271 to i16
  %100 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %99, ptr %100, align 2, !tbaa !9
  br label %168

101:                                              ; preds = %90
  %102 = icmp ne i32 %79, %6
  %or.cond3 = and i1 %64, %102
  br i1 %or.cond3, label %103, label %107

103:                                              ; preds = %101
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 239, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %104

104:                                              ; preds = %103
  %105 = trunc i32 %.0177271 to i16
  %106 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %105, ptr %106, align 2, !tbaa !9
  br label %168

107:                                              ; preds = %101, %95
  %108 = getelementptr inbounds i8, ptr %.1274, i64 %67
  %109 = sub i64 %.1189266, %67
  %110 = call i64 @ber_fetch_length(i32 noundef %79, ptr noundef nonnull %108, i64 noundef %109, ptr noundef nonnull %11) #4
  switch i64 %110, label %119 [
    i64 -1, label %111
    i64 0, label %115
  ]

111:                                              ; preds = %107
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 252, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %112

112:                                              ; preds = %111
  %113 = trunc i32 %.0177271 to i16
  %114 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %113, ptr %114, align 2, !tbaa !9
  br label %168

115:                                              ; preds = %107
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 255, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %116

116:                                              ; preds = %115
  %117 = trunc i32 %.0177271 to i16
  %118 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %117, ptr %118, align 2, !tbaa !9
  br label %168

119:                                              ; preds = %107
  %120 = load i64, ptr %11, align 8, !tbaa !5
  %121 = icmp eq i64 %120, -1
  br i1 %121, label %122, label %132

122:                                              ; preds = %119
  %123 = icmp eq i64 %.0182269, -1
  br i1 %123, label %124, label %128

124:                                              ; preds = %122
  %125 = add nsw i32 %.0180270, 1
  %126 = add nsw i64 %110, %67
  %127 = sub i64 %.1189266, %126
  br label %155

128:                                              ; preds = %122
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 275, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %129

129:                                              ; preds = %128
  %130 = trunc i32 %.0177271 to i16
  %131 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %130, ptr %131, align 2, !tbaa !9
  br label %168

132:                                              ; preds = %119
  %.not207 = icmp eq i32 %.0180270, 0
  br i1 %.not207, label %137, label %133

133:                                              ; preds = %132
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 284, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %134

134:                                              ; preds = %133
  %135 = trunc i32 %.0177271 to i16
  %136 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %135, ptr %136, align 2, !tbaa !9
  br label %168

137:                                              ; preds = %132
  %138 = icmp eq i64 %.0182269, -1
  %139 = add i64 %110, %67
  %140 = add i64 %139, %120
  br i1 %138, label %141, label %147

141:                                              ; preds = %137
  %142 = icmp slt i64 %140, 0
  br i1 %142, label %143, label %152

143:                                              ; preds = %141
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 297, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %144

144:                                              ; preds = %143
  %145 = trunc i32 %.0177271 to i16
  %146 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %145, ptr %146, align 2, !tbaa !9
  br label %168

147:                                              ; preds = %137
  %.not208 = icmp eq i64 %.0182269, %140
  br i1 %.not208, label %152, label %148

148:                                              ; preds = %147
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 307, i32 noundef 100, ptr noundef null) #4
  br i1 %.not, label %168, label %149

149:                                              ; preds = %148
  %150 = trunc i32 %.0177271 to i16
  %151 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %150, ptr %151, align 2, !tbaa !9
  br label %168

152:                                              ; preds = %141, %147
  %.1183 = phi i64 [ %140, %141 ], [ %.0182269, %147 ]
  %153 = sub i64 %.1189266, %139
  %154 = sub nsw i64 %.1183, %139
  %spec.select = call i64 @llvm.smin.i64(i64 %153, i64 %154)
  br label %155

155:                                              ; preds = %152, %124
  %.2190 = phi i64 [ %127, %124 ], [ %spec.select, %152 ]
  %.pn = phi i64 [ %126, %124 ], [ %139, %152 ]
  %.2184 = phi i64 [ -1, %124 ], [ %154, %152 ]
  %.1181 = phi i32 [ %125, %124 ], [ 0, %152 ]
  %.2 = getelementptr inbounds i8, ptr %.1274, i64 %.pn
  %.2187 = add i64 %.pn, %.1186267
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %156 = add nsw i32 %.0177271, 1
  %157 = load i32, ptr %59, align 8, !tbaa !14
  %158 = sext i32 %157 to i64
  %159 = icmp slt i64 %indvars.iv.next, %158
  br i1 %159, label %66, label %._crit_edge, !llvm.loop !19

._crit_edge:                                      ; preds = %155, %58
  %.1186.lcssa = phi i64 [ %.0185, %58 ], [ %.2187, %155 ]
  %.0180.lcssa = phi i32 [ 0, %58 ], [ %.1181, %155 ]
  %.1179.lcssa = phi i32 [ %.0178, %58 ], [ %79, %155 ]
  %.0177.lcssa = phi i32 [ %20, %58 ], [ %156, %155 ]
  %.not202 = icmp eq ptr %8, null
  br i1 %.not202, label %161, label %160

160:                                              ; preds = %._crit_edge
  store i32 %.1179.lcssa, ptr %8, align 4, !tbaa !17
  br label %161

161:                                              ; preds = %160, %._crit_edge
  %.not203 = icmp eq i32 %.0180.lcssa, 0
  %162 = load i64, ptr %11, align 8
  %163 = sub nsw i32 0, %.0180.lcssa
  %164 = sext i32 %163 to i64
  %storemerge = select i1 %.not203, i64 %162, i64 %164
  store i64 %storemerge, ptr %7, align 8, !tbaa !5
  br i1 %.not, label %168, label %165

165:                                              ; preds = %161
  %166 = trunc i32 %.0177.lcssa to i16
  %167 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 %166, ptr %167, align 2, !tbaa !9
  br label %168

168:                                              ; preds = %148, %149, %143, %144, %133, %134, %128, %129, %115, %116, %111, %112, %103, %104, %97, %98, %86, %87, %72, %73, %68, %69, %12, %161, %165, %51, %50, %47, %46, %36, %35, %32, %31, %18
  %.sroa.0.0 = phi i32 [ 2, %18 ], [ 2, %31 ], [ 2, %32 ], [ 1, %35 ], [ 1, %36 ], [ 2, %46 ], [ 2, %47 ], [ 1, %50 ], [ 1, %51 ], [ 0, %165 ], [ 0, %161 ], [ 2, %12 ], [ 2, %69 ], [ 2, %68 ], [ 1, %73 ], [ 1, %72 ], [ 2, %87 ], [ 2, %86 ], [ 2, %98 ], [ 2, %97 ], [ 2, %104 ], [ 2, %103 ], [ 2, %112 ], [ 2, %111 ], [ 1, %116 ], [ 1, %115 ], [ 2, %129 ], [ 2, %128 ], [ 2, %134 ], [ 2, %133 ], [ 2, %144 ], [ 2, %143 ], [ 2, %149 ], [ 2, %148 ]
  %.sroa.18.16 = phi i64 [ 0, %18 ], [ 0, %31 ], [ 0, %32 ], [ 0, %35 ], [ 0, %36 ], [ 0, %46 ], [ 0, %47 ], [ 0, %50 ], [ 0, %51 ], [ %.1186.lcssa, %165 ], [ %.1186.lcssa, %161 ], [ 0, %12 ], [ %.1186267, %69 ], [ 0, %68 ], [ %.1186267, %73 ], [ 0, %72 ], [ %.1186267, %87 ], [ 0, %86 ], [ %.1186267, %98 ], [ 0, %97 ], [ %.1186267, %104 ], [ 0, %103 ], [ %.1186267, %112 ], [ 0, %111 ], [ %.1186267, %116 ], [ 0, %115 ], [ %.1186267, %129 ], [ 0, %128 ], [ %.1186267, %134 ], [ 0, %133 ], [ %.1186267, %144 ], [ 0, %143 ], [ %.1186267, %149 ], [ 0, %148 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.0.0, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.18.16, 1
  ret { i32, i64 } %.fca.1.insert
}

; Function Attrs: nounwind uwtable
declare hidden i32 @ASN__STACK_OVERFLOW_CHECK(ptr noundef) local_unnamed_addr #1

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

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

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

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

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

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

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


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