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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.asn_dec_rval_s = type { i32, i64 }
%struct.asn_per_data_s = type { ptr, i64, i64, i64, ptr, ptr }
%struct.asn_TYPE_descriptor_s = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, i32, ptr, ptr, i32, ptr }
%struct.asn_SEQUENCE_specifics_s = type { i32, i32, ptr, i32, ptr, i32, i32, i32, i32 }
%struct.asn_TYPE_member_s = type { i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [30 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: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #1

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

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

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

; Function Attrs: nounwind
declare void @free(ptr noundef) #4

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

44:                                               ; preds = %5
  br label %45

45:                                               ; preds = %44
  %46 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 2, ptr %46, align 8, !tbaa !12
  %47 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %47, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1156, i32 noundef 102, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %468

48:                                               ; No predecessors!
  br label %49

49:                                               ; preds = %48
  br label %50

50:                                               ; preds = %49, %5
  %51 = load ptr, ptr %13, align 8, !tbaa !5
  %52 = icmp ne ptr %51, null
  br i1 %52, label %69, label %53

53:                                               ; preds = %50
  %54 = load ptr, ptr %12, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %54, i32 0, i32 0
  %56 = load i32, ptr %55, align 8, !tbaa !16
  %57 = sext i32 %56 to i64
  %58 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %57) #9
  %59 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %58, ptr %59, align 8, !tbaa !5
  store ptr %58, ptr %13, align 8, !tbaa !5
  %60 = load ptr, ptr %13, align 8, !tbaa !5
  %61 = icmp ne ptr %60, null
  br i1 %61, label %68, label %62

62:                                               ; preds = %53
  br label %63

63:                                               ; preds = %62
  %64 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 2, ptr %64, align 8, !tbaa !12
  %65 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %65, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1162, i32 noundef 102, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %468

66:                                               ; No predecessors!
  br label %67

67:                                               ; preds = %66
  br label %68

68:                                               ; preds = %67, %53
  br label %69

69:                                               ; preds = %68, %50
  %70 = load ptr, ptr %12, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %70, i32 0, i32 8
  %72 = load i32, ptr %71, align 4, !tbaa !18
  %73 = icmp sge i32 %72, 0
  br i1 %73, label %74, label %86

74:                                               ; preds = %69
  %75 = load ptr, ptr %11, align 8, !tbaa !5
  %76 = call i32 @per_get_few_bits(ptr noundef %75, i32 noundef 1)
  store i32 %76, ptr %14, align 4, !tbaa !19
  %77 = load i32, ptr %14, align 4, !tbaa !19
  %78 = icmp slt i32 %77, 0
  br i1 %78, label %79, label %85

79:                                               ; preds = %74
  br label %80

80:                                               ; preds = %79
  %81 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 1, ptr %81, align 8, !tbaa !12
  %82 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %82, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1172, i32 noundef 100, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %468

83:                                               ; No predecessors!
  br label %84

84:                                               ; preds = %83
  br label %85

85:                                               ; preds = %84, %74
  br label %87

86:                                               ; preds = %69
  store i32 0, ptr %14, align 4, !tbaa !19
  br label %87

87:                                               ; preds = %86, %85
  call void @llvm.memset.p0.i64(ptr align 8 %16, i8 0, i64 48, i1 false)
  %88 = load ptr, ptr %12, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %88, i32 0, i32 5
  %90 = load i32, ptr %89, align 8, !tbaa !20
  %91 = icmp ne i32 %90, 0
  br i1 %91, label %92, label %132

92:                                               ; preds = %87
  %93 = load ptr, ptr %12, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %93, i32 0, i32 5
  %95 = load i32, ptr %94, align 8, !tbaa !20
  %96 = add nsw i32 %95, 7
  %97 = ashr i32 %96, 3
  %98 = add nsw i32 %97, 1
  %99 = sext i32 %98 to i64
  %100 = call noalias ptr @malloc(i64 noundef %99) #10
  store ptr %100, ptr %15, align 8, !tbaa !5
  %101 = load ptr, ptr %15, align 8, !tbaa !5
  %102 = icmp ne ptr %101, null
  br i1 %102, label %109, label %103

103:                                              ; preds = %92
  br label %104

104:                                              ; preds = %103
  %105 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 2, ptr %105, align 8, !tbaa !12
  %106 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %106, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1183, i32 noundef 102, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %468

107:                                              ; No predecessors!
  br label %108

108:                                              ; preds = %107
  br label %109

109:                                              ; preds = %108, %92
  %110 = load ptr, ptr %11, align 8, !tbaa !5
  %111 = load ptr, ptr %15, align 8, !tbaa !5
  %112 = load ptr, ptr %12, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %112, i32 0, i32 5
  %114 = load i32, ptr %113, align 8, !tbaa !20
  %115 = call i32 @per_get_many_bits(ptr noundef %110, ptr noundef %111, i32 noundef 0, i32 noundef %114)
  %116 = icmp ne i32 %115, 0
  br i1 %116, label %117, label %124

117:                                              ; preds = %109
  %118 = load ptr, ptr %15, align 8, !tbaa !5
  call void @free(ptr noundef %118) #8
  store ptr null, ptr %15, align 8, !tbaa !5
  br label %119

119:                                              ; preds = %117
  %120 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 1, ptr %120, align 8, !tbaa !12
  %121 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %121, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1188, i32 noundef 100, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %468

122:                                              ; No predecessors!
  br label %123

123:                                              ; preds = %122
  br label %124

124:                                              ; preds = %123, %109
  %125 = load ptr, ptr %15, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.asn_per_data_s, ptr %16, i32 0, i32 0
  store ptr %125, ptr %126, align 8, !tbaa !21
  %127 = load ptr, ptr %12, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %127, i32 0, i32 5
  %129 = load i32, ptr %128, align 8, !tbaa !20
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds %struct.asn_per_data_s, ptr %16, i32 0, i32 2
  store i64 %130, ptr %131, align 8, !tbaa !23
  br label %133

132:                                              ; preds = %87
  store ptr null, ptr %15, align 8, !tbaa !5
  br label %133

133:                                              ; preds = %132, %124
  store i32 0, ptr %18, align 4, !tbaa !19
  br label %134

134:                                              ; preds = %242, %133
  %135 = load i32, ptr %18, align 4, !tbaa !19
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %136, i32 0, i32 18
  %138 = load i32, ptr %137, align 8, !tbaa !24
  %139 = icmp slt i32 %135, %138
  br i1 %139, label %140, label %245

140:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %141 = load ptr, ptr %8, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %141, i32 0, i32 17
  %143 = load ptr, ptr %142, align 8, !tbaa !25
  %144 = load i32, ptr %18, align 4, !tbaa !19
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %143, i64 %145
  store ptr %146, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %147 = load i32, ptr %18, align 4, !tbaa !19
  %148 = load ptr, ptr %12, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %148, i32 0, i32 7
  %150 = load i32, ptr %149, align 8, !tbaa !26
  %151 = icmp sgt i32 %147, %150
  br i1 %151, label %152, label %159

152:                                              ; preds = %140
  %153 = load i32, ptr %18, align 4, !tbaa !19
  %154 = load ptr, ptr %12, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %154, i32 0, i32 8
  %156 = load i32, ptr %155, align 4, !tbaa !18
  %157 = icmp slt i32 %153, %156
  br i1 %157, label %158, label %159

158:                                              ; preds = %152
  store i32 14, ptr %19, align 4
  br label %239

159:                                              ; preds = %152, %140
  %160 = load ptr, ptr %20, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %160, i32 0, i32 0
  %162 = load i32, ptr %161, align 8, !tbaa !27
  %163 = and i32 %162, 1
  %164 = icmp ne i32 %163, 0
  br i1 %164, label %165, label %172

165:                                              ; preds = %159
  %166 = load ptr, ptr %13, align 8, !tbaa !5
  %167 = load ptr, ptr %20, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %167, i32 0, i32 2
  %169 = load i32, ptr %168, align 8, !tbaa !29
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds i8, ptr %166, i64 %170
  store ptr %171, ptr %22, align 8, !tbaa !5
  br label %179

172:                                              ; preds = %159
  %173 = load ptr, ptr %13, align 8, !tbaa !5
  %174 = load ptr, ptr %20, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %174, i32 0, i32 2
  %176 = load i32, ptr %175, align 8, !tbaa !29
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i8, ptr %173, i64 %177
  store ptr %178, ptr %21, align 8, !tbaa !5
  store ptr %21, ptr %22, align 8, !tbaa !5
  br label %179

179:                                              ; preds = %172, %165
  %180 = load ptr, ptr %20, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %180, i32 0, i32 1
  %182 = load i32, ptr %181, align 4, !tbaa !30
  %183 = icmp ne i32 %182, 0
  br i1 %183, label %184, label %213

184:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %185 = call i32 @per_get_few_bits(ptr noundef %16, i32 noundef 1)
  store i32 %185, ptr %23, align 4, !tbaa !19
  %186 = load i32, ptr %23, align 4, !tbaa !19
  %187 = icmp eq i32 %186, 0
  br i1 %187, label %188, label %209

188:                                              ; preds = %184
  %189 = load ptr, ptr %20, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %189, i32 0, i32 8
  %191 = load ptr, ptr %190, align 8, !tbaa !31
  %192 = icmp ne ptr %191, null
  br i1 %192, label %193, label %208

193:                                              ; preds = %188
  %194 = load ptr, ptr %20, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %194, i32 0, i32 8
  %196 = load ptr, ptr %195, align 8, !tbaa !31
  %197 = load ptr, ptr %22, align 8, !tbaa !5
  %198 = call i32 %196(i32 noundef 1, ptr noundef %197)
  %199 = icmp ne i32 %198, 0
  br i1 %199, label %200, label %207

200:                                              ; preds = %193
  %201 = load ptr, ptr %15, align 8, !tbaa !5
  call void @free(ptr noundef %201) #8
  store ptr null, ptr %15, align 8, !tbaa !5
  br label %202

202:                                              ; preds = %200
  %203 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 2, ptr %203, align 8, !tbaa !12
  %204 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %204, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1230, i32 noundef 102, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %210

205:                                              ; No predecessors!
  br label %206

206:                                              ; preds = %205
  br label %207

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

208:                                              ; preds = %207, %188
  store i32 14, ptr %19, align 4
  br label %210

209:                                              ; preds = %184
  store i32 0, ptr %19, align 4
  br label %210

210:                                              ; preds = %209, %208, %202
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  %211 = load i32, ptr %19, align 4
  switch i32 %211, label %239 [
    i32 0, label %212
  ]

212:                                              ; preds = %210
  br label %213

213:                                              ; preds = %212, %179
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #8
  %214 = load ptr, ptr %20, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %214, i32 0, i32 5
  %216 = load ptr, ptr %215, align 8, !tbaa !32
  %217 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %216, i32 0, i32 9
  %218 = load ptr, ptr %217, align 8, !tbaa !33
  %219 = load ptr, ptr %7, align 8, !tbaa !5
  %220 = load ptr, ptr %20, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %220, i32 0, i32 5
  %222 = load ptr, ptr %221, align 8, !tbaa !32
  %223 = load ptr, ptr %20, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %223, i32 0, i32 7
  %225 = load ptr, ptr %224, align 8, !tbaa !34
  %226 = load ptr, ptr %22, align 8, !tbaa !5
  %227 = load ptr, ptr %11, align 8, !tbaa !5
  %228 = call { i32, i64 } %218(ptr noundef %219, ptr noundef %222, ptr noundef %225, ptr noundef %226, ptr noundef %227)
  %229 = getelementptr inbounds { i32, i64 }, ptr %24, i32 0, i32 0
  %230 = extractvalue { i32, i64 } %228, 0
  store i32 %230, ptr %229, align 8
  %231 = getelementptr inbounds { i32, i64 }, ptr %24, i32 0, i32 1
  %232 = extractvalue { i32, i64 } %228, 1
  store i64 %232, ptr %231, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %17, ptr align 8 %24, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #8
  %233 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %17, i32 0, i32 0
  %234 = load i32, ptr %233, align 8, !tbaa !12
  %235 = icmp ne i32 %234, 0
  br i1 %235, label %236, label %238

236:                                              ; preds = %213
  %237 = load ptr, ptr %15, align 8, !tbaa !5
  call void @free(ptr noundef %237) #8
  store ptr null, ptr %15, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 %17, i64 16, i1 false), !tbaa.struct !35
  store i32 1, ptr %19, align 4
  br label %239

238:                                              ; preds = %213
  store i32 0, ptr %19, align 4
  br label %239

239:                                              ; preds = %238, %236, %210, %158
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  %240 = load i32, ptr %19, align 4
  switch i32 %240, label %468 [
    i32 0, label %241
    i32 14, label %242
  ]

241:                                              ; preds = %239
  br label %242

242:                                              ; preds = %241, %239
  %243 = load i32, ptr %18, align 4, !tbaa !19
  %244 = add nsw i32 %243, 1
  store i32 %244, ptr %18, align 4, !tbaa !19
  br label %134, !llvm.loop !37

245:                                              ; preds = %134
  %246 = load ptr, ptr %15, align 8, !tbaa !5
  call void @free(ptr noundef %246) #8
  store ptr null, ptr %15, align 8, !tbaa !5
  %247 = load i32, ptr %14, align 4, !tbaa !19
  %248 = icmp ne i32 %247, 0
  br i1 %248, label %249, label %400

249:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %27) #8
  %250 = load ptr, ptr %11, align 8, !tbaa !5
  %251 = call i64 @uper_get_nslength(ptr noundef %250)
  store i64 %251, ptr %25, align 8, !tbaa !36
  %252 = load i64, ptr %25, align 8, !tbaa !36
  %253 = icmp slt i64 %252, 0
  br i1 %253, label %254, label %260

254:                                              ; preds = %249
  br label %255

255:                                              ; preds = %254
  %256 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 1, ptr %256, align 8, !tbaa !12
  %257 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %257, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1264, i32 noundef 100, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %397

258:                                              ; No predecessors!
  br label %259

259:                                              ; preds = %258
  br label %260

260:                                              ; preds = %259, %249
  %261 = load i64, ptr %25, align 8, !tbaa !36
  %262 = add nsw i64 %261, 15
  %263 = ashr i64 %262, 3
  %264 = call noalias ptr @malloc(i64 noundef %263) #10
  store ptr %264, ptr %26, align 8, !tbaa !5
  %265 = load ptr, ptr %26, align 8, !tbaa !5
  %266 = icmp ne ptr %265, null
  br i1 %266, label %273, label %267

267:                                              ; preds = %260
  br label %268

268:                                              ; preds = %267
  %269 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 1, ptr %269, align 8, !tbaa !12
  %270 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %270, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1271, i32 noundef 100, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %397

271:                                              ; No predecessors!
  br label %272

272:                                              ; preds = %271
  br label %273

273:                                              ; preds = %272, %260
  %274 = load ptr, ptr %11, align 8, !tbaa !5
  %275 = load ptr, ptr %26, align 8, !tbaa !5
  %276 = load i64, ptr %25, align 8, !tbaa !36
  %277 = trunc i64 %276 to i32
  %278 = call i32 @per_get_many_bits(ptr noundef %274, ptr noundef %275, i32 noundef 0, i32 noundef %277)
  %279 = icmp ne i32 %278, 0
  br i1 %279, label %280, label %287

280:                                              ; preds = %273
  %281 = load ptr, ptr %26, align 8, !tbaa !5
  call void @free(ptr noundef %281) #8
  store ptr null, ptr %26, align 8, !tbaa !5
  br label %282

282:                                              ; preds = %280
  %283 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 1, ptr %283, align 8, !tbaa !12
  %284 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %284, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1277, i32 noundef 100, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %397

285:                                              ; No predecessors!
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286, %273
  call void @llvm.memset.p0.i64(ptr align 8 %27, i8 0, i64 48, i1 false)
  %288 = load ptr, ptr %26, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.asn_per_data_s, ptr %27, i32 0, i32 0
  store ptr %288, ptr %289, align 8, !tbaa !21
  %290 = load i64, ptr %25, align 8, !tbaa !36
  %291 = getelementptr inbounds %struct.asn_per_data_s, ptr %27, i32 0, i32 2
  store i64 %290, ptr %291, align 8, !tbaa !23
  %292 = load ptr, ptr %12, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %292, i32 0, i32 7
  %294 = load i32, ptr %293, align 8, !tbaa !26
  %295 = add nsw i32 %294, 1
  store i32 %295, ptr %18, align 4, !tbaa !19
  br label %296

296:                                              ; preds = %374, %287
  %297 = load i32, ptr %18, align 4, !tbaa !19
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %298, i32 0, i32 18
  %300 = load i32, ptr %299, align 8, !tbaa !24
  %301 = icmp slt i32 %297, %300
  br i1 %301, label %302, label %377

302:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %303 = load ptr, ptr %8, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %303, i32 0, i32 17
  %305 = load ptr, ptr %304, align 8, !tbaa !25
  %306 = load i32, ptr %18, align 4, !tbaa !19
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %305, i64 %307
  store ptr %308, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %309 = load i32, ptr %18, align 4, !tbaa !19
  %310 = load ptr, ptr %12, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %310, i32 0, i32 7
  %312 = load i32, ptr %311, align 8, !tbaa !26
  %313 = icmp sgt i32 %309, %312
  br i1 %313, label %314, label %320

314:                                              ; preds = %302
  %315 = load i32, ptr %18, align 4, !tbaa !19
  %316 = load ptr, ptr %12, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %316, i32 0, i32 8
  %318 = load i32, ptr %317, align 4, !tbaa !18
  %319 = icmp slt i32 %315, %318
  br i1 %319, label %321, label %320

320:                                              ; preds = %314, %302
  store i32 25, ptr %19, align 4
  br label %371

321:                                              ; preds = %314
  %322 = load ptr, ptr %28, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %322, i32 0, i32 0
  %324 = load i32, ptr %323, align 8, !tbaa !27
  %325 = and i32 %324, 1
  %326 = icmp ne i32 %325, 0
  br i1 %326, label %327, label %334

327:                                              ; preds = %321
  %328 = load ptr, ptr %13, align 8, !tbaa !5
  %329 = load ptr, ptr %28, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %329, i32 0, i32 2
  %331 = load i32, ptr %330, align 8, !tbaa !29
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds i8, ptr %328, i64 %332
  store ptr %333, ptr %30, align 8, !tbaa !5
  br label %341

334:                                              ; preds = %321
  %335 = load ptr, ptr %13, align 8, !tbaa !5
  %336 = load ptr, ptr %28, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %336, i32 0, i32 2
  %338 = load i32, ptr %337, align 8, !tbaa !29
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds i8, ptr %335, i64 %339
  store ptr %340, ptr %29, align 8, !tbaa !5
  store ptr %29, ptr %30, align 8, !tbaa !5
  br label %341

341:                                              ; preds = %334, %327
  %342 = call i32 @per_get_few_bits(ptr noundef %27, i32 noundef 1)
  store i32 %342, ptr %31, align 4, !tbaa !19
  %343 = load i32, ptr %31, align 4, !tbaa !19
  %344 = icmp sle i32 %343, 0
  br i1 %344, label %345, label %350

345:                                              ; preds = %341
  %346 = load i32, ptr %31, align 4, !tbaa !19
  %347 = icmp slt i32 %346, 0
  br i1 %347, label %348, label %349

348:                                              ; preds = %345
  store i32 23, ptr %19, align 4
  br label %371

349:                                              ; preds = %345
  store i32 25, ptr %19, align 4
  br label %371

350:                                              ; preds = %341
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #8
  %351 = load ptr, ptr %7, align 8, !tbaa !5
  %352 = load ptr, ptr %28, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %352, i32 0, i32 5
  %354 = load ptr, ptr %353, align 8, !tbaa !32
  %355 = load ptr, ptr %28, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %355, i32 0, i32 7
  %357 = load ptr, ptr %356, align 8, !tbaa !34
  %358 = load ptr, ptr %30, align 8, !tbaa !5
  %359 = load ptr, ptr %11, align 8, !tbaa !5
  %360 = call { i32, i64 } @uper_open_type_get(ptr noundef %351, ptr noundef %354, ptr noundef %357, ptr noundef %358, ptr noundef %359)
  %361 = getelementptr inbounds { i32, i64 }, ptr %32, i32 0, i32 0
  %362 = extractvalue { i32, i64 } %360, 0
  store i32 %362, ptr %361, align 8
  %363 = getelementptr inbounds { i32, i64 }, ptr %32, i32 0, i32 1
  %364 = extractvalue { i32, i64 } %360, 1
  store i64 %364, ptr %363, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %17, ptr align 8 %32, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #8
  %365 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %17, i32 0, i32 0
  %366 = load i32, ptr %365, align 8, !tbaa !12
  %367 = icmp ne i32 %366, 0
  br i1 %367, label %368, label %370

368:                                              ; preds = %350
  %369 = load ptr, ptr %26, align 8, !tbaa !5
  call void @free(ptr noundef %369) #8
  store ptr null, ptr %26, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 %17, i64 16, i1 false), !tbaa.struct !35
  store i32 1, ptr %19, align 4
  br label %371

370:                                              ; preds = %350
  store i32 0, ptr %19, align 4
  br label %371

371:                                              ; preds = %370, %368, %349, %348, %320
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  %372 = load i32, ptr %19, align 4
  switch i32 %372, label %397 [
    i32 0, label %373
    i32 25, label %374
    i32 23, label %377
  ]

373:                                              ; preds = %371
  br label %374

374:                                              ; preds = %373, %371
  %375 = load i32, ptr %18, align 4, !tbaa !19
  %376 = add nsw i32 %375, 1
  store i32 %376, ptr %18, align 4, !tbaa !19
  br label %296, !llvm.loop !39

377:                                              ; preds = %371, %296
  br label %378

378:                                              ; preds = %380, %377
  %379 = call i32 @per_get_few_bits(ptr noundef %27, i32 noundef 1)
  switch i32 %379, label %381 [
    i32 -1, label %394
    i32 0, label %380
  ]

380:                                              ; preds = %378
  br label %378

381:                                              ; preds = %378
  %382 = load ptr, ptr %7, align 8, !tbaa !5
  %383 = load ptr, ptr %11, align 8, !tbaa !5
  %384 = call i32 @uper_open_type_skip(ptr noundef %382, ptr noundef %383)
  %385 = icmp ne i32 %384, 0
  br i1 %385, label %386, label %393

386:                                              ; preds = %381
  %387 = load ptr, ptr %26, align 8, !tbaa !5
  call void @free(ptr noundef %387) #8
  store ptr null, ptr %26, align 8, !tbaa !5
  br label %388

388:                                              ; preds = %386
  %389 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 1, ptr %389, align 8, !tbaa !12
  %390 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %390, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1335, i32 noundef 100, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %397

391:                                              ; No predecessors!
  br label %392

392:                                              ; preds = %391
  br label %393

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

394:                                              ; preds = %393, %378
  br label %395

395:                                              ; preds = %394
  %396 = load ptr, ptr %26, align 8, !tbaa !5
  call void @free(ptr noundef %396) #8
  store ptr null, ptr %26, align 8, !tbaa !5
  store i32 0, ptr %19, align 4
  br label %397

397:                                              ; preds = %395, %388, %371, %282, %268, %255
  call void @llvm.lifetime.end.p0(i64 48, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  %398 = load i32, ptr %19, align 4
  switch i32 %398, label %468 [
    i32 0, label %399
  ]

399:                                              ; preds = %397
  br label %400

400:                                              ; preds = %399, %245
  %401 = load ptr, ptr %12, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %401, i32 0, i32 5
  %403 = load i32, ptr %402, align 8, !tbaa !20
  store i32 %403, ptr %18, align 4, !tbaa !19
  br label %404

404:                                              ; preds = %462, %400
  %405 = load i32, ptr %18, align 4, !tbaa !19
  %406 = load ptr, ptr %12, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %406, i32 0, i32 5
  %408 = load i32, ptr %407, align 8, !tbaa !20
  %409 = load ptr, ptr %12, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %409, i32 0, i32 6
  %411 = load i32, ptr %410, align 4, !tbaa !40
  %412 = add nsw i32 %408, %411
  %413 = icmp slt i32 %405, %412
  br i1 %413, label %414, label %465

414:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %415 = load ptr, ptr %8, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %415, i32 0, i32 17
  %417 = load ptr, ptr %416, align 8, !tbaa !25
  %418 = load i32, ptr %18, align 4, !tbaa !19
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %417, i64 %419
  store ptr %420, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %421 = load ptr, ptr %33, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %421, i32 0, i32 8
  %423 = load ptr, ptr %422, align 8, !tbaa !31
  %424 = icmp ne ptr %423, null
  br i1 %424, label %426, label %425

425:                                              ; preds = %414
  store i32 33, ptr %19, align 4
  br label %459

426:                                              ; preds = %414
  %427 = load ptr, ptr %33, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %427, i32 0, i32 0
  %429 = load i32, ptr %428, align 8, !tbaa !27
  %430 = and i32 %429, 1
  %431 = icmp ne i32 %430, 0
  br i1 %431, label %432, label %444

432:                                              ; preds = %426
  %433 = load ptr, ptr %13, align 8, !tbaa !5
  %434 = load ptr, ptr %33, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %434, i32 0, i32 2
  %436 = load i32, ptr %435, align 8, !tbaa !29
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds i8, ptr %433, i64 %437
  store ptr %438, ptr %34, align 8, !tbaa !5
  %439 = load ptr, ptr %34, align 8, !tbaa !5
  %440 = load ptr, ptr %439, align 8, !tbaa !5
  %441 = icmp ne ptr %440, null
  br i1 %441, label %442, label %443

442:                                              ; preds = %432
  store i32 33, ptr %19, align 4
  br label %459

443:                                              ; preds = %432
  br label %445

444:                                              ; preds = %426
  store i32 33, ptr %19, align 4
  br label %459

445:                                              ; preds = %443
  %446 = load ptr, ptr %33, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %446, i32 0, i32 8
  %448 = load ptr, ptr %447, align 8, !tbaa !31
  %449 = load ptr, ptr %34, align 8, !tbaa !5
  %450 = call i32 %448(i32 noundef 1, ptr noundef %449)
  %451 = icmp ne i32 %450, 0
  br i1 %451, label %452, label %458

452:                                              ; preds = %445
  br label %453

453:                                              ; preds = %452
  %454 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 0
  store i32 2, ptr %454, align 8, !tbaa !12
  %455 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %6, i32 0, i32 1
  store i64 0, ptr %455, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1367, i32 noundef 102, ptr noundef null)
  store i32 1, ptr %19, align 4
  br label %459

456:                                              ; No predecessors!
  br label %457

457:                                              ; preds = %456
  br label %458

458:                                              ; preds = %457, %445
  store i32 0, ptr %19, align 4
  br label %459

459:                                              ; preds = %458, %453, %444, %442, %425
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  %460 = load i32, ptr %19, align 4
  switch i32 %460, label %468 [
    i32 0, label %461
    i32 33, label %462
  ]

461:                                              ; preds = %459
  br label %462

462:                                              ; preds = %461, %459
  %463 = load i32, ptr %18, align 4, !tbaa !19
  %464 = add nsw i32 %463, 1
  store i32 %464, ptr %18, align 4, !tbaa !19
  br label %404, !llvm.loop !41

465:                                              ; preds = %404
  %466 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %17, i32 0, i32 1
  store i64 0, ptr %466, align 8, !tbaa !15
  %467 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %17, i32 0, i32 0
  store i32 0, ptr %467, align 8, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 %17, i64 16, i1 false), !tbaa.struct !35
  store i32 1, ptr %19, align 4
  br label %468

468:                                              ; preds = %465, %459, %397, %239, %119, %104, %80, %63, %45
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  %469 = load { i32, i64 }, ptr %6, align 8
  ret { i32, i64 } %469
}

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #7

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

declare i64 @uper_get_nslength(ptr noundef) #3

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

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

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

!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, !6, i64 152}
!10 = !{!"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, !11, i64 104, !6, i64 112, !11, i64 120, !6, i64 128, !6, i64 136, !11, i64 144, !6, i64 152}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !11, i64 0}
!13 = !{!"asn_dec_rval_s", !11, i64 0, !14, i64 8}
!14 = !{!"long", !7, i64 0}
!15 = !{!13, !14, i64 8}
!16 = !{!17, !11, i64 0}
!17 = !{!"asn_SEQUENCE_specifics_s", !11, i64 0, !11, i64 4, !6, i64 8, !11, i64 16, !6, i64 24, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44}
!18 = !{!17, !11, i64 44}
!19 = !{!11, !11, i64 0}
!20 = !{!17, !11, i64 32}
!21 = !{!22, !6, i64 0}
!22 = !{!"asn_per_data_s", !6, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !6, i64 32, !6, i64 40}
!23 = !{!22, !14, i64 16}
!24 = !{!10, !11, i64 144}
!25 = !{!10, !6, i64 136}
!26 = !{!17, !11, i64 40}
!27 = !{!28, !11, i64 0}
!28 = !{!"asn_TYPE_member_s", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!29 = !{!28, !11, i64 8}
!30 = !{!28, !11, i64 4}
!31 = !{!28, !6, i64 48}
!32 = !{!28, !6, i64 24}
!33 = !{!10, !6, i64 72}
!34 = !{!28, !6, i64 40}
!35 = !{i64 0, i64 4, !19, i64 8, i64 8, !36}
!36 = !{!14, !14, i64 0}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = distinct !{!39, !38}
!40 = !{!17, !11, i64 36}
!41 = distinct !{!41, !38}


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

@.str = external hidden unnamed_addr constant [30 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 nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #1

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

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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @SEQUENCE_decode_uper(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readnone %2, ptr nocapture noundef %3, ptr noundef %4) local_unnamed_addr #4 {
  %6 = alloca %struct.asn_per_data_s, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %struct.asn_per_data_s, align 8
  %9 = alloca ptr, align 8
  %10 = getelementptr inbounds i8, ptr %1, i64 152
  %11 = load ptr, ptr %10, align 8, !tbaa !5
  %12 = load ptr, ptr %3, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #7
  %13 = tail call i32 @ASN__STACK_OVERFLOW_CHECK(ptr noundef %0)
  %.not = icmp eq i32 %13, 0
  br i1 %.not, label %15, label %14

14:                                               ; preds = %5
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1156, i32 noundef 102, ptr noundef null) #7
  br label %.loopexit

15:                                               ; preds = %5
  %.not149 = icmp eq ptr %12, null
  br i1 %.not149, label %16, label %21

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

20:                                               ; preds = %16
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1162, i32 noundef 102, ptr noundef null) #7
  br label %.loopexit

21:                                               ; preds = %16, %15
  %.0 = phi ptr [ %12, %15 ], [ %19, %16 ]
  %22 = getelementptr inbounds i8, ptr %11, i64 44
  %23 = load i32, ptr %22, align 4, !tbaa !14
  %24 = icmp sgt i32 %23, -1
  br i1 %24, label %25, label %29

25:                                               ; preds = %21
  %26 = tail call i32 @per_get_few_bits(ptr noundef %4, i32 noundef 1) #7
  %27 = icmp slt i32 %26, 0
  br i1 %27, label %28, label %29

28:                                               ; preds = %25
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1172, i32 noundef 100, ptr noundef null) #7
  br label %.loopexit

29:                                               ; preds = %21, %25
  %.0122 = phi i32 [ %26, %25 ], [ 0, %21 ]
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %6, i8 0, i64 48, i1 false)
  %30 = getelementptr inbounds i8, ptr %11, i64 32
  %31 = load i32, ptr %30, align 8, !tbaa !15
  %.not151 = icmp eq i32 %31, 0
  br i1 %.not151, label %46, label %32

32:                                               ; preds = %29
  %33 = add nsw i32 %31, 7
  %34 = ashr i32 %33, 3
  %35 = add nsw i32 %34, 1
  %36 = sext i32 %35 to i64
  %37 = tail call noalias ptr @malloc(i64 noundef %36) #9
  %.not152 = icmp eq ptr %37, null
  br i1 %.not152, label %38, label %39

38:                                               ; preds = %32
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1183, i32 noundef 102, ptr noundef null) #7
  br label %.loopexit

39:                                               ; preds = %32
  %40 = tail call i32 @per_get_many_bits(ptr noundef %4, ptr noundef nonnull %37, i32 noundef 0, i32 noundef %31) #7
  %.not153 = icmp eq i32 %40, 0
  br i1 %.not153, label %42, label %41

41:                                               ; preds = %39
  tail call void @free(ptr noundef nonnull %37) #7
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1188, i32 noundef 100, ptr noundef null) #7
  br label %.loopexit

42:                                               ; preds = %39
  store ptr %37, ptr %6, align 8, !tbaa !16
  %43 = load i32, ptr %30, align 8, !tbaa !15
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds i8, ptr %6, i64 16
  store i64 %44, ptr %45, align 8, !tbaa !19
  br label %46

46:                                               ; preds = %29, %42
  %.0123 = phi ptr [ %37, %42 ], [ null, %29 ]
  %47 = getelementptr inbounds i8, ptr %1, i64 144
  %48 = load i32, ptr %47, align 8, !tbaa !20
  %49 = icmp sgt i32 %48, 0
  br i1 %49, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %46
  %50 = getelementptr inbounds i8, ptr %1, i64 136
  %51 = getelementptr inbounds i8, ptr %11, i64 40
  br label %52

52:                                               ; preds = %.lr.ph, %91
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %91 ]
  %53 = load ptr, ptr %50, align 8, !tbaa !21
  %54 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %53, i64 %indvars.iv
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  %55 = load i32, ptr %51, align 8, !tbaa !22
  %56 = sext i32 %55 to i64
  %57 = icmp sgt i64 %indvars.iv, %56
  br i1 %57, label %58, label %62

58:                                               ; preds = %52
  %59 = load i32, ptr %22, align 4, !tbaa !14
  %60 = sext i32 %59 to i64
  %61 = icmp slt i64 %indvars.iv, %60
  br i1 %61, label %.thread176, label %62

62:                                               ; preds = %58, %52
  %63 = load i32, ptr %54, align 8, !tbaa !23
  %64 = and i32 %63, 1
  %.not165 = icmp eq i32 %64, 0
  %65 = getelementptr inbounds i8, ptr %54, i64 8
  %66 = load i32, ptr %65, align 8, !tbaa !25
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds i8, ptr %.0, i64 %67
  br i1 %.not165, label %69, label %70

69:                                               ; preds = %62
  store ptr %68, ptr %7, align 8, !tbaa !11
  br label %70

70:                                               ; preds = %62, %69
  %.0136 = phi ptr [ %7, %69 ], [ %68, %62 ]
  %71 = getelementptr inbounds i8, ptr %54, i64 4
  %72 = load i32, ptr %71, align 4, !tbaa !26
  %.not166 = icmp eq i32 %72, 0
  br i1 %.not166, label %80, label %73

73:                                               ; preds = %70
  %74 = call i32 @per_get_few_bits(ptr noundef nonnull %6, i32 noundef 1) #7
  %.not169 = icmp eq i32 %74, 0
  br i1 %.not169, label %75, label %80

75:                                               ; preds = %73
  %76 = getelementptr inbounds i8, ptr %54, i64 48
  %77 = load ptr, ptr %76, align 8, !tbaa !27
  %.not167 = icmp eq ptr %77, null
  br i1 %.not167, label %.thread190, label %78

78:                                               ; preds = %75
  %79 = call i32 %77(i32 noundef 1, ptr noundef nonnull %.0136) #7
  %.not168 = icmp eq i32 %79, 0
  br i1 %.not168, label %.thread190, label %90

80:                                               ; preds = %73, %70
  %81 = getelementptr inbounds i8, ptr %54, i64 24
  %82 = load ptr, ptr %81, align 8, !tbaa !28
  %83 = getelementptr inbounds i8, ptr %82, i64 72
  %84 = load ptr, ptr %83, align 8, !tbaa !29
  %85 = getelementptr inbounds i8, ptr %54, i64 40
  %86 = load ptr, ptr %85, align 8, !tbaa !30
  %87 = call { i32, i64 } %84(ptr noundef %0, ptr noundef %82, ptr noundef %86, ptr noundef nonnull %.0136, ptr noundef %4) #7
  %88 = extractvalue { i32, i64 } %87, 0
  %.not170 = icmp eq i32 %88, 0
  br i1 %.not170, label %.thread176, label %.thread184

.thread184:                                       ; preds = %80
  %89 = extractvalue { i32, i64 } %87, 1
  call void @free(ptr noundef %.0123) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br label %.loopexit

.thread176:                                       ; preds = %58, %80
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br label %91

.thread190:                                       ; preds = %75, %78
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br label %91

90:                                               ; preds = %78
  call void @free(ptr noundef %.0123) #7
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1230, i32 noundef 102, ptr noundef null) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br label %.loopexit

91:                                               ; preds = %.thread190, %.thread176
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %92 = load i32, ptr %47, align 8, !tbaa !20
  %93 = sext i32 %92 to i64
  %94 = icmp slt i64 %indvars.iv.next, %93
  br i1 %94, label %52, label %._crit_edge, !llvm.loop !31

._crit_edge:                                      ; preds = %91, %46
  call void @free(ptr noundef %.0123) #7
  %.not154 = icmp eq i32 %.0122, 0
  br i1 %.not154, label %157, label %95

95:                                               ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) #7
  %96 = call i64 @uper_get_nslength(ptr noundef %4) #7
  %97 = icmp slt i64 %96, 0
  br i1 %97, label %98, label %99

98:                                               ; preds = %95
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1264, i32 noundef 100, ptr noundef null) #7
  br label %.thread210

99:                                               ; preds = %95
  %100 = add nuw nsw i64 %96, 15
  %101 = lshr i64 %100, 3
  %102 = call noalias ptr @malloc(i64 noundef %101) #9
  %.not155 = icmp eq ptr %102, null
  br i1 %.not155, label %103, label %104

103:                                              ; preds = %99
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1271, i32 noundef 100, ptr noundef null) #7
  br label %.thread210

104:                                              ; preds = %99
  %105 = trunc i64 %96 to i32
  %106 = call i32 @per_get_many_bits(ptr noundef %4, ptr noundef nonnull %102, i32 noundef 0, i32 noundef %105) #7
  %.not156 = icmp eq i32 %106, 0
  br i1 %.not156, label %108, label %107

107:                                              ; preds = %104
  call void @free(ptr noundef nonnull %102) #7
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1277, i32 noundef 100, ptr noundef null) #7
  br label %.thread210

108:                                              ; preds = %104
  %109 = getelementptr inbounds i8, ptr %8, i64 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %109, i8 0, i64 40, i1 false)
  store ptr %102, ptr %8, align 8, !tbaa !16
  %110 = getelementptr inbounds i8, ptr %8, i64 16
  store i64 %96, ptr %110, align 8, !tbaa !19
  %111 = getelementptr inbounds i8, ptr %11, i64 40
  %112 = load i32, ptr %111, align 8, !tbaa !22
  %.1129232 = add nsw i32 %112, 1
  %113 = load i32, ptr %47, align 8, !tbaa !20
  %114 = icmp slt i32 %.1129232, %113
  br i1 %114, label %.lr.ph236, label %.loopexit223.preheader

.lr.ph236:                                        ; preds = %108
  %115 = getelementptr inbounds i8, ptr %1, i64 136
  %116 = sext i32 %112 to i64
  %117 = add nsw i64 %116, 1
  br label %118

118:                                              ; preds = %.lr.ph236, %148
  %indvars.iv244 = phi i64 [ %117, %.lr.ph236 ], [ %indvars.iv.next245, %148 ]
  %.1129.in233 = phi i32 [ %112, %.lr.ph236 ], [ %152, %148 ]
  %119 = load ptr, ptr %115, align 8, !tbaa !21
  %120 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %119, i64 %indvars.iv244
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #7
  %121 = load i32, ptr %111, align 8, !tbaa !22
  %.not157 = icmp slt i32 %.1129.in233, %121
  br i1 %.not157, label %148, label %122

122:                                              ; preds = %118
  %123 = load i32, ptr %22, align 4, !tbaa !14
  %124 = sext i32 %123 to i64
  %125 = icmp slt i64 %indvars.iv244, %124
  br i1 %125, label %126, label %148

126:                                              ; preds = %122
  %127 = load i32, ptr %120, align 8, !tbaa !23
  %128 = and i32 %127, 1
  %.not158 = icmp eq i32 %128, 0
  %129 = getelementptr inbounds i8, ptr %120, i64 8
  %130 = load i32, ptr %129, align 8, !tbaa !25
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds i8, ptr %.0, i64 %131
  br i1 %.not158, label %133, label %134

133:                                              ; preds = %126
  store ptr %132, ptr %9, align 8, !tbaa !11
  br label %134

134:                                              ; preds = %126, %133
  %.0124 = phi ptr [ %9, %133 ], [ %132, %126 ]
  %135 = call i32 @per_get_few_bits(ptr noundef nonnull %8, i32 noundef 1) #7
  %136 = icmp slt i32 %135, 1
  br i1 %136, label %137, label %139

137:                                              ; preds = %134
  %138 = icmp slt i32 %135, 0
  br i1 %138, label %147, label %148

139:                                              ; preds = %134
  %140 = getelementptr inbounds i8, ptr %120, i64 24
  %141 = load ptr, ptr %140, align 8, !tbaa !28
  %142 = getelementptr inbounds i8, ptr %120, i64 40
  %143 = load ptr, ptr %142, align 8, !tbaa !30
  %144 = call { i32, i64 } @uper_open_type_get(ptr noundef %0, ptr noundef %141, ptr noundef %143, ptr noundef nonnull %.0124, ptr noundef %4) #7
  %145 = extractvalue { i32, i64 } %144, 0
  %.not159 = icmp eq i32 %145, 0
  br i1 %.not159, label %148, label %.thread204

.thread204:                                       ; preds = %139
  %146 = extractvalue { i32, i64 } %144, 1
  call void @free(ptr noundef %102) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  br label %.thread210

147:                                              ; preds = %137
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  br label %.loopexit223.preheader

148:                                              ; preds = %122, %118, %137, %139
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  %indvars.iv.next245 = add nsw i64 %indvars.iv244, 1
  %149 = load i32, ptr %47, align 8, !tbaa !20
  %150 = sext i32 %149 to i64
  %151 = icmp slt i64 %indvars.iv.next245, %150
  %152 = trunc nsw i64 %indvars.iv244 to i32
  br i1 %151, label %118, label %.loopexit223.preheader, !llvm.loop !33

.loopexit223.preheader:                           ; preds = %148, %108, %147
  br label %.loopexit223

.loopexit223:                                     ; preds = %.loopexit223.preheader, %.loopexit223
  %153 = call i32 @per_get_few_bits(ptr noundef nonnull %8, i32 noundef 1) #7
  switch i32 %153, label %154 [
    i32 -1, label %.loopexit222
    i32 0, label %.loopexit223
  ]

154:                                              ; preds = %.loopexit223
  %155 = call i32 @uper_open_type_skip(ptr noundef %0, ptr noundef %4) #7
  %.not160 = icmp eq i32 %155, 0
  br i1 %.not160, label %.loopexit222, label %156

156:                                              ; preds = %154
  call void @free(ptr noundef %102) #7
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1335, i32 noundef 100, ptr noundef null) #7
  br label %.thread210

.thread210:                                       ; preds = %98, %107, %156, %103, %.thread204
  %.sroa.0121.7.ph = phi i32 [ %145, %.thread204 ], [ 1, %103 ], [ 1, %156 ], [ 1, %107 ], [ 1, %98 ]
  %.sroa.18.7.ph = phi i64 [ %146, %.thread204 ], [ 0, %103 ], [ 0, %156 ], [ 0, %107 ], [ 0, %98 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #7
  br label %.loopexit

.loopexit222:                                     ; preds = %.loopexit223, %154
  call void @free(ptr noundef %102) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #7
  br label %157

157:                                              ; preds = %.loopexit222, %._crit_edge
  %158 = getelementptr inbounds i8, ptr %11, i64 36
  %159 = load i32, ptr %158, align 4, !tbaa !34
  %160 = icmp sgt i32 %159, 0
  br i1 %160, label %.lr.ph239, label %.loopexit

.lr.ph239:                                        ; preds = %157
  %161 = load i32, ptr %30, align 8, !tbaa !15
  %162 = getelementptr inbounds i8, ptr %1, i64 136
  %163 = sext i32 %161 to i64
  br label %164

164:                                              ; preds = %.lr.ph239, %183
  %165 = phi i32 [ %159, %.lr.ph239 ], [ %184, %183 ]
  %166 = phi i32 [ %161, %.lr.ph239 ], [ %185, %183 ]
  %indvars.iv247 = phi i64 [ %163, %.lr.ph239 ], [ %indvars.iv.next248, %183 ]
  %167 = load ptr, ptr %162, align 8, !tbaa !21
  %168 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %167, i64 %indvars.iv247
  %169 = getelementptr inbounds i8, ptr %168, i64 48
  %170 = load ptr, ptr %169, align 8, !tbaa !27
  %.not161 = icmp eq ptr %170, null
  br i1 %.not161, label %183, label %171

171:                                              ; preds = %164
  %172 = load i32, ptr %168, align 8, !tbaa !23
  %173 = and i32 %172, 1
  %.not162 = icmp eq i32 %173, 0
  br i1 %.not162, label %183, label %174

174:                                              ; preds = %171
  %175 = getelementptr inbounds i8, ptr %168, i64 8
  %176 = load i32, ptr %175, align 8, !tbaa !25
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i8, ptr %.0, i64 %177
  %179 = load ptr, ptr %178, align 8, !tbaa !11
  %.not163 = icmp eq ptr %179, null
  br i1 %.not163, label %180, label %183

180:                                              ; preds = %174
  %181 = call i32 %170(i32 noundef 1, ptr noundef nonnull %178) #7
  %.not164 = icmp eq i32 %181, 0
  br i1 %.not164, label %._crit_edge250, label %182

._crit_edge250:                                   ; preds = %180
  %.pre = load i32, ptr %30, align 8, !tbaa !15
  %.pre251 = load i32, ptr %158, align 4, !tbaa !34
  br label %183

182:                                              ; preds = %180
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1367, i32 noundef 102, ptr noundef null) #7
  br label %.loopexit

183:                                              ; preds = %._crit_edge250, %164, %174, %171
  %184 = phi i32 [ %.pre251, %._crit_edge250 ], [ %165, %164 ], [ %165, %174 ], [ %165, %171 ]
  %185 = phi i32 [ %.pre, %._crit_edge250 ], [ %166, %164 ], [ %166, %174 ], [ %166, %171 ]
  %indvars.iv.next248 = add nsw i64 %indvars.iv247, 1
  %186 = add nsw i32 %184, %185
  %187 = sext i32 %186 to i64
  %188 = icmp slt i64 %indvars.iv.next248, %187
  br i1 %188, label %164, label %.loopexit, !llvm.loop !35

.loopexit:                                        ; preds = %183, %157, %182, %.thread210, %90, %.thread184, %41, %38, %28, %20, %14
  %.sroa.0121.11 = phi i32 [ 2, %14 ], [ 1, %28 ], [ 1, %41 ], [ 2, %90 ], [ 2, %182 ], [ 2, %38 ], [ 2, %20 ], [ %88, %.thread184 ], [ %.sroa.0121.7.ph, %.thread210 ], [ 0, %157 ], [ 0, %183 ]
  %.sroa.18.11 = phi i64 [ 0, %14 ], [ 0, %28 ], [ 0, %41 ], [ 0, %90 ], [ 0, %182 ], [ 0, %38 ], [ 0, %20 ], [ %89, %.thread184 ], [ %.sroa.18.7.ph, %.thread210 ], [ 0, %157 ], [ 0, %183 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #7
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.0121.11, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.18.11, 1
  ret { i32, i64 } %.fca.1.insert
}

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

declare i32 @per_get_few_bits(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #6

declare i32 @per_get_many_bits(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare i64 @uper_get_nslength(ptr noundef) local_unnamed_addr #2

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

declare i32 @uper_open_type_skip(ptr noundef, ptr noundef) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 nounwind willreturn allockind("free") memory(argmem: readwrite, 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 = { 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) 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 #7 = { nounwind }
attributes #8 = { nounwind allocsize(0,1) }
attributes #9 = { nounwind allocsize(0) }

!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 = !{!7, !7, i64 0}
!12 = !{!13, !10, i64 0}
!13 = !{!"asn_SEQUENCE_specifics_s", !10, i64 0, !10, i64 4, !7, i64 8, !10, i64 16, !7, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44}
!14 = !{!13, !10, i64 44}
!15 = !{!13, !10, i64 32}
!16 = !{!17, !7, i64 0}
!17 = !{!"asn_per_data_s", !7, i64 0, !18, i64 8, !18, i64 16, !18, i64 24, !7, i64 32, !7, i64 40}
!18 = !{!"long", !8, i64 0}
!19 = !{!17, !18, i64 16}
!20 = !{!6, !10, i64 144}
!21 = !{!6, !7, i64 136}
!22 = !{!13, !10, i64 40}
!23 = !{!24, !10, i64 0}
!24 = !{!"asn_TYPE_member_s", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56}
!25 = !{!24, !10, i64 8}
!26 = !{!24, !10, i64 4}
!27 = !{!24, !7, i64 48}
!28 = !{!24, !7, i64 24}
!29 = !{!6, !7, i64 72}
!30 = !{!24, !7, i64 40}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = !{!13, !10, i64 36}
!35 = distinct !{!35, !32}


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