; 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_enc_rval_s = type { 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: 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) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @SEQUENCE_encode_uper(ptr dead_on_unwind noalias writable sret(%struct.asn_enc_rval_s) align 8 %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #3 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca %struct.asn_enc_rval_s, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca %struct.asn_enc_rval_s, align 8
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  store ptr %4, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  %24 = load ptr, ptr %6, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %24, i32 0, i32 19
  %26 = load ptr, ptr %25, align 8, !tbaa !9
  store ptr %26, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %27 = load ptr, ptr %7, align 8, !tbaa !5
  %28 = load ptr, ptr %8, align 8, !tbaa !5
  %29 = icmp ne ptr %28, null
  br i1 %29, label %39, label %30

30:                                               ; preds = %5
  br label %31

31:                                               ; preds = %30
  %32 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %32, align 8, !tbaa !12
  %33 = load ptr, ptr %6, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %33, ptr %34, align 8, !tbaa !15
  %35 = load ptr, ptr %8, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %35, ptr %36, align 8, !tbaa !16
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1446, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %15, align 4
  br label %315

37:                                               ; No predecessors!
  br label %38

38:                                               ; preds = %37
  br label %39

39:                                               ; preds = %38, %5
  %40 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %11, i32 0, i32 0
  store i64 0, ptr %40, align 8, !tbaa !12
  %41 = load ptr, ptr %10, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %41, i32 0, i32 8
  %43 = load i32, ptr %42, align 4, !tbaa !17
  %44 = icmp sge i32 %43, 0
  br i1 %44, label %45, label %55

45:                                               ; preds = %39
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = load ptr, ptr %8, align 8, !tbaa !5
  %48 = call i32 @SEQUENCE_handle_extensions(ptr noundef %46, ptr noundef %47, ptr noundef null, ptr noundef null)
  store i32 %48, ptr %12, align 4, !tbaa !19
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = load i32, ptr %12, align 4, !tbaa !19
  %51 = icmp ne i32 %50, 0
  %52 = zext i1 %51 to i64
  %53 = select i1 %51, i32 1, i32 0
  %54 = call i32 @per_put_few_bits(ptr noundef %49, i32 noundef %53, i32 noundef 1)
  br label %56

55:                                               ; preds = %39
  store i32 0, ptr %12, align 4, !tbaa !19
  br label %56

56:                                               ; preds = %55, %45
  store i32 0, ptr %14, align 4, !tbaa !19
  br label %57

57:                                               ; preds = %134, %56
  %58 = load i32, ptr %14, align 4, !tbaa !19
  %59 = load ptr, ptr %10, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %59, i32 0, i32 5
  %61 = load i32, ptr %60, align 8, !tbaa !20
  %62 = icmp slt i32 %58, %61
  br i1 %62, label %63, label %137

63:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %64 = load ptr, ptr %10, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %64, i32 0, i32 4
  %66 = load ptr, ptr %65, align 8, !tbaa !21
  %67 = load i32, ptr %14, align 4, !tbaa !19
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds i32, ptr %66, i64 %68
  %70 = load i32, ptr %69, align 4, !tbaa !19
  store i32 %70, ptr %13, align 4, !tbaa !19
  %71 = load ptr, ptr %6, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %71, i32 0, i32 17
  %73 = load ptr, ptr %72, align 8, !tbaa !22
  %74 = load i32, ptr %13, align 4, !tbaa !19
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %73, i64 %75
  store ptr %76, ptr %16, align 8, !tbaa !5
  %77 = load ptr, ptr %16, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %77, i32 0, i32 0
  %79 = load i32, ptr %78, align 8, !tbaa !23
  %80 = and i32 %79, 1
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %82, label %93

82:                                               ; preds = %63
  %83 = load ptr, ptr %8, align 8, !tbaa !5
  %84 = load ptr, ptr %16, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %84, i32 0, i32 2
  %86 = load i32, ptr %85, align 8, !tbaa !25
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds i8, ptr %83, i64 %87
  store ptr %88, ptr %18, align 8, !tbaa !5
  %89 = load ptr, ptr %18, align 8, !tbaa !5
  %90 = load ptr, ptr %89, align 8, !tbaa !5
  %91 = icmp ne ptr %90, null
  %92 = zext i1 %91 to i32
  store i32 %92, ptr %19, align 4, !tbaa !19
  br label %100

93:                                               ; preds = %63
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  %95 = load ptr, ptr %16, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %95, i32 0, i32 2
  %97 = load i32, ptr %96, align 8, !tbaa !25
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds i8, ptr %94, i64 %98
  store ptr %99, ptr %17, align 8, !tbaa !5
  store ptr %17, ptr %18, align 8, !tbaa !5
  store i32 1, ptr %19, align 4, !tbaa !19
  br label %100

100:                                              ; preds = %93, %82
  %101 = load i32, ptr %19, align 4, !tbaa !19
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %103, label %116

103:                                              ; preds = %100
  %104 = load ptr, ptr %16, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %104, i32 0, i32 8
  %106 = load ptr, ptr %105, align 8, !tbaa !26
  %107 = icmp ne ptr %106, null
  br i1 %107, label %108, label %116

108:                                              ; preds = %103
  %109 = load ptr, ptr %16, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %109, i32 0, i32 8
  %111 = load ptr, ptr %110, align 8, !tbaa !26
  %112 = load ptr, ptr %18, align 8, !tbaa !5
  %113 = call i32 %111(i32 noundef 0, ptr noundef %112)
  %114 = icmp eq i32 %113, 1
  br i1 %114, label %115, label %116

115:                                              ; preds = %108
  store i32 0, ptr %19, align 4, !tbaa !19
  br label %116

116:                                              ; preds = %115, %108, %103, %100
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = load i32, ptr %19, align 4, !tbaa !19
  %119 = call i32 @per_put_few_bits(ptr noundef %117, i32 noundef %118, i32 noundef 1)
  %120 = icmp ne i32 %119, 0
  br i1 %120, label %121, label %130

121:                                              ; preds = %116
  br label %122

122:                                              ; preds = %121
  %123 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %123, align 8, !tbaa !12
  %124 = load ptr, ptr %6, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %124, ptr %125, align 8, !tbaa !15
  %126 = load ptr, ptr %8, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %126, ptr %127, align 8, !tbaa !16
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1496, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %15, align 4
  br label %131

128:                                              ; No predecessors!
  br label %129

129:                                              ; preds = %128
  br label %130

130:                                              ; preds = %129, %116
  store i32 0, ptr %15, align 4
  br label %131

131:                                              ; preds = %130, %122
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  %132 = load i32, ptr %15, align 4
  switch i32 %132, label %315 [
    i32 0, label %133
  ]

133:                                              ; preds = %131
  br label %134

134:                                              ; preds = %133
  %135 = load i32, ptr %14, align 4, !tbaa !19
  %136 = add nsw i32 %135, 1
  store i32 %136, ptr %14, align 4, !tbaa !19
  br label %57, !llvm.loop !27

137:                                              ; preds = %57
  store i32 0, ptr %13, align 4, !tbaa !19
  br label %138

138:                                              ; preds = %250, %137
  %139 = load i32, ptr %13, align 4, !tbaa !19
  %140 = load ptr, ptr %10, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %140, i32 0, i32 7
  %142 = load i32, ptr %141, align 8, !tbaa !29
  %143 = icmp slt i32 %142, 0
  br i1 %143, label %144, label %148

144:                                              ; preds = %138
  %145 = load ptr, ptr %6, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %145, i32 0, i32 18
  %147 = load i32, ptr %146, align 8, !tbaa !30
  br label %153

148:                                              ; preds = %138
  %149 = load ptr, ptr %10, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %149, i32 0, i32 8
  %151 = load i32, ptr %150, align 4, !tbaa !17
  %152 = sub nsw i32 %151, 1
  br label %153

153:                                              ; preds = %148, %144
  %154 = phi i32 [ %147, %144 ], [ %152, %148 ]
  %155 = icmp slt i32 %139, %154
  br i1 %155, label %156, label %253

156:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  %157 = load ptr, ptr %6, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %157, i32 0, i32 17
  %159 = load ptr, ptr %158, align 8, !tbaa !22
  %160 = load i32, ptr %13, align 4, !tbaa !19
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %159, i64 %161
  store ptr %162, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  %163 = load i32, ptr %13, align 4, !tbaa !19
  %164 = load ptr, ptr %10, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %164, i32 0, i32 7
  %166 = load i32, ptr %165, align 8, !tbaa !29
  %167 = icmp sgt i32 %163, %166
  br i1 %167, label %168, label %175

168:                                              ; preds = %156
  %169 = load i32, ptr %13, align 4, !tbaa !19
  %170 = load ptr, ptr %10, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.asn_SEQUENCE_specifics_s, ptr %170, i32 0, i32 8
  %172 = load i32, ptr %171, align 4, !tbaa !17
  %173 = icmp slt i32 %169, %172
  br i1 %173, label %174, label %175

174:                                              ; preds = %168
  store i32 11, ptr %15, align 4
  br label %247

175:                                              ; preds = %168, %156
  %176 = load ptr, ptr %20, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %176, i32 0, i32 0
  %178 = load i32, ptr %177, align 8, !tbaa !23
  %179 = and i32 %178, 1
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %207

181:                                              ; preds = %175
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  %183 = load ptr, ptr %20, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %183, i32 0, i32 2
  %185 = load i32, ptr %184, align 8, !tbaa !25
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i8, ptr %182, i64 %186
  store ptr %187, ptr %22, align 8, !tbaa !5
  %188 = load ptr, ptr %22, align 8, !tbaa !5
  %189 = load ptr, ptr %188, align 8, !tbaa !5
  %190 = icmp ne ptr %189, null
  br i1 %190, label %206, label %191

191:                                              ; preds = %181
  %192 = load ptr, ptr %20, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %192, i32 0, i32 1
  %194 = load i32, ptr %193, align 4, !tbaa !31
  %195 = icmp ne i32 %194, 0
  br i1 %195, label %196, label %197

196:                                              ; preds = %191
  store i32 11, ptr %15, align 4
  br label %247

197:                                              ; preds = %191
  br label %198

198:                                              ; preds = %197
  %199 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %199, align 8, !tbaa !12
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %200, ptr %201, align 8, !tbaa !15
  %202 = load ptr, ptr %8, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %202, ptr %203, align 8, !tbaa !16
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1527, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %15, align 4
  br label %247

204:                                              ; No predecessors!
  br label %205

205:                                              ; preds = %204
  br label %206

206:                                              ; preds = %205, %181
  br label %214

207:                                              ; preds = %175
  %208 = load ptr, ptr %8, align 8, !tbaa !5
  %209 = load ptr, ptr %20, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %209, i32 0, i32 2
  %211 = load i32, ptr %210, align 8, !tbaa !25
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds i8, ptr %208, i64 %212
  store ptr %213, ptr %21, align 8, !tbaa !5
  store ptr %21, ptr %22, align 8, !tbaa !5
  br label %214

214:                                              ; preds = %207, %206
  %215 = load ptr, ptr %20, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %215, i32 0, i32 8
  %217 = load ptr, ptr %216, align 8, !tbaa !26
  %218 = icmp ne ptr %217, null
  br i1 %218, label %219, label %227

219:                                              ; preds = %214
  %220 = load ptr, ptr %20, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %220, i32 0, i32 8
  %222 = load ptr, ptr %221, align 8, !tbaa !26
  %223 = load ptr, ptr %22, align 8, !tbaa !5
  %224 = call i32 %222(i32 noundef 0, ptr noundef %223)
  %225 = icmp eq i32 %224, 1
  br i1 %225, label %226, label %227

226:                                              ; preds = %219
  store i32 11, ptr %15, align 4
  br label %247

227:                                              ; preds = %219, %214
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #4
  %228 = load ptr, ptr %20, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %228, i32 0, i32 5
  %230 = load ptr, ptr %229, align 8, !tbaa !32
  %231 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %230, i32 0, i32 10
  %232 = load ptr, ptr %231, align 8, !tbaa !33
  %233 = load ptr, ptr %20, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %233, i32 0, i32 5
  %235 = load ptr, ptr %234, align 8, !tbaa !32
  %236 = load ptr, ptr %20, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %236, i32 0, i32 7
  %238 = load ptr, ptr %237, align 8, !tbaa !34
  %239 = load ptr, ptr %22, align 8, !tbaa !5
  %240 = load ptr, ptr %239, align 8, !tbaa !5
  %241 = load ptr, ptr %9, align 8, !tbaa !5
  call void %232(ptr dead_on_unwind writable sret(%struct.asn_enc_rval_s) align 8 %23, ptr noundef %235, ptr noundef %238, ptr noundef %240, ptr noundef %241)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %23, i64 24, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #4
  %242 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %11, i32 0, i32 0
  %243 = load i64, ptr %242, align 8, !tbaa !12
  %244 = icmp eq i64 %243, -1
  br i1 %244, label %245, label %246

245:                                              ; preds = %227
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %11, i64 24, i1 false), !tbaa.struct !35
  store i32 1, ptr %15, align 4
  br label %247

246:                                              ; preds = %227
  store i32 0, ptr %15, align 4
  br label %247

247:                                              ; preds = %246, %245, %226, %198, %196, %174
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  %248 = load i32, ptr %15, align 4
  switch i32 %248, label %315 [
    i32 0, label %249
    i32 11, label %250
  ]

249:                                              ; preds = %247
  br label %250

250:                                              ; preds = %249, %247
  %251 = load i32, ptr %13, align 4, !tbaa !19
  %252 = add nsw i32 %251, 1
  store i32 %252, ptr %13, align 4, !tbaa !19
  br label %138, !llvm.loop !37

253:                                              ; preds = %153
  %254 = load i32, ptr %12, align 4, !tbaa !19
  %255 = icmp ne i32 %254, 0
  br i1 %255, label %262, label %256

256:                                              ; preds = %253
  br label %257

257:                                              ; preds = %256
  %258 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %11, i32 0, i32 2
  store ptr null, ptr %258, align 8, !tbaa !16
  %259 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %11, i32 0, i32 1
  store ptr null, ptr %259, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %11, i64 24, i1 false), !tbaa.struct !35
  store i32 1, ptr %15, align 4
  br label %315

260:                                              ; No predecessors!
  br label %261

261:                                              ; preds = %260
  br label %262

262:                                              ; preds = %261, %253
  %263 = load ptr, ptr %9, align 8, !tbaa !5
  %264 = load i32, ptr %12, align 4, !tbaa !19
  %265 = sext i32 %264 to i64
  %266 = call i32 @uper_put_nslength(ptr noundef %263, i64 noundef %265)
  %267 = icmp ne i32 %266, 0
  br i1 %267, label %268, label %277

268:                                              ; preds = %262
  br label %269

269:                                              ; preds = %268
  %270 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %270, align 8, !tbaa !12
  %271 = load ptr, ptr %6, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %271, ptr %272, align 8, !tbaa !15
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %273, ptr %274, align 8, !tbaa !16
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1555, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %15, align 4
  br label %315

275:                                              ; No predecessors!
  br label %276

276:                                              ; preds = %275
  br label %277

277:                                              ; preds = %276, %262
  %278 = load ptr, ptr %6, align 8, !tbaa !5
  %279 = load ptr, ptr %8, align 8, !tbaa !5
  %280 = load ptr, ptr %9, align 8, !tbaa !5
  %281 = call i32 @SEQUENCE_handle_extensions(ptr noundef %278, ptr noundef %279, ptr noundef %280, ptr noundef null)
  %282 = load i32, ptr %12, align 4, !tbaa !19
  %283 = icmp ne i32 %281, %282
  br i1 %283, label %284, label %293

284:                                              ; preds = %277
  br label %285

285:                                              ; preds = %284
  %286 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %286, align 8, !tbaa !12
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %287, ptr %288, align 8, !tbaa !15
  %289 = load ptr, ptr %8, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %289, ptr %290, align 8, !tbaa !16
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1562, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %15, align 4
  br label %315

291:                                              ; No predecessors!
  br label %292

292:                                              ; preds = %291
  br label %293

293:                                              ; preds = %292, %277
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = load ptr, ptr %8, align 8, !tbaa !5
  %296 = load ptr, ptr %9, align 8, !tbaa !5
  %297 = call i32 @SEQUENCE_handle_extensions(ptr noundef %294, ptr noundef %295, ptr noundef null, ptr noundef %296)
  %298 = load i32, ptr %12, align 4, !tbaa !19
  %299 = icmp ne i32 %297, %298
  br i1 %299, label %300, label %309

300:                                              ; preds = %293
  br label %301

301:                                              ; preds = %300
  %302 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %302, align 8, !tbaa !12
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %303, ptr %304, align 8, !tbaa !15
  %305 = load ptr, ptr %8, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %305, ptr %306, align 8, !tbaa !16
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 1568, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %15, align 4
  br label %315

307:                                              ; No predecessors!
  br label %308

308:                                              ; preds = %307
  br label %309

309:                                              ; preds = %308, %293
  br label %310

310:                                              ; preds = %309
  %311 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %11, i32 0, i32 2
  store ptr null, ptr %311, align 8, !tbaa !16
  %312 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %11, i32 0, i32 1
  store ptr null, ptr %312, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %11, i64 24, i1 false), !tbaa.struct !35
  store i32 1, ptr %15, align 4
  br label %315

313:                                              ; No predecessors!
  br label %314

314:                                              ; preds = %313
  store i32 0, ptr %15, align 4
  br label %315

315:                                              ; preds = %314, %310, %301, %285, %269, %257, %247, %131, %31
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  %316 = load i32, ptr %15, align 4
  switch i32 %316, label %318 [
    i32 0, label %317
    i32 1, label %317
  ]

317:                                              ; preds = %315, %315
  ret void

318:                                              ; preds = %315
  unreachable
}

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

declare i32 @per_put_few_bits(ptr noundef, i32 noundef, i32 noundef) #2

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind 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 #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 = !{!"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, !14, i64 0}
!13 = !{!"asn_enc_rval_s", !14, i64 0, !6, i64 8, !6, i64 16}
!14 = !{!"long", !7, i64 0}
!15 = !{!13, !6, i64 8}
!16 = !{!13, !6, i64 16}
!17 = !{!18, !11, i64 44}
!18 = !{!"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}
!19 = !{!11, !11, i64 0}
!20 = !{!18, !11, i64 32}
!21 = !{!18, !6, i64 24}
!22 = !{!10, !6, i64 136}
!23 = !{!24, !11, i64 0}
!24 = !{!"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}
!25 = !{!24, !11, i64 8}
!26 = !{!24, !6, i64 48}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!18, !11, i64 40}
!30 = !{!10, !11, i64 144}
!31 = !{!24, !11, i64 4}
!32 = !{!24, !6, i64 24}
!33 = !{!10, !6, i64 80}
!34 = !{!24, !6, i64 40}
!35 = !{i64 0, i64 8, !36, i64 8, i64 8, !5, i64 16, i64 8, !5}
!36 = !{!14, !14, i64 0}
!37 = distinct !{!37, !28}


; 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_enc_rval_s = type { 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 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 #1

; Function Attrs: nounwind uwtable
define dso_local void @SEQUENCE_encode_uper(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.asn_enc_rval_s) align 8 %0, ptr noundef %1, ptr nocapture noundef readnone %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %struct.asn_enc_rval_s, align 8
  %9 = getelementptr inbounds i8, ptr %1, i64 152
  %10 = load ptr, ptr %9, align 8, !tbaa !5
  %.not = icmp eq ptr %3, null
  br i1 %.not, label %11, label %14

11:                                               ; preds = %5
  store i64 -1, ptr %0, align 8, !tbaa !11
  %12 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %12, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr null, ptr %13, align 8, !tbaa !15
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1446, i32 noundef 101, ptr noundef null) #4
  br label %135

14:                                               ; preds = %5
  %15 = getelementptr inbounds i8, ptr %10, i64 44
  %16 = load i32, ptr %15, align 4, !tbaa !16
  %17 = icmp sgt i32 %16, -1
  br i1 %17, label %18, label %22

18:                                               ; preds = %14
  %19 = tail call i32 @SEQUENCE_handle_extensions(ptr noundef nonnull %1, ptr noundef nonnull %3, ptr noundef null, ptr noundef null)
  %.not103 = icmp ne i32 %19, 0
  %20 = zext i1 %.not103 to i32
  %21 = tail call i32 @per_put_few_bits(ptr noundef %4, i32 noundef %20, i32 noundef 1) #4
  br label %22

22:                                               ; preds = %14, %18
  %.098 = phi i32 [ %19, %18 ], [ 0, %14 ]
  %23 = getelementptr inbounds i8, ptr %10, i64 32
  %24 = load i32, ptr %23, align 8, !tbaa !18
  %25 = icmp sgt i32 %24, 0
  br i1 %25, label %.lr.ph, label %.preheader

.lr.ph:                                           ; preds = %22
  %26 = getelementptr inbounds i8, ptr %10, i64 24
  %27 = getelementptr inbounds i8, ptr %1, i64 136
  br label %31

.preheader:                                       ; preds = %.critedge, %22
  %28 = getelementptr inbounds i8, ptr %10, i64 40
  %29 = getelementptr inbounds i8, ptr %1, i64 144
  %30 = getelementptr inbounds i8, ptr %1, i64 136
  %.sroa.8.0..sroa_idx = getelementptr inbounds i8, ptr %8, i64 8
  br label %60

31:                                               ; preds = %.lr.ph, %.critedge
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %.critedge ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  %32 = load ptr, ptr %26, align 8, !tbaa !19
  %33 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv
  %34 = load i32, ptr %33, align 4, !tbaa !20
  %35 = load ptr, ptr %27, align 8, !tbaa !21
  %36 = sext i32 %34 to i64
  %37 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %35, i64 %36
  %38 = load i32, ptr %37, align 8, !tbaa !22
  %39 = and i32 %38, 1
  %.not112 = icmp eq i32 %39, 0
  %40 = getelementptr inbounds i8, ptr %37, i64 8
  %41 = load i32, ptr %40, align 8, !tbaa !24
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds i8, ptr %3, i64 %42
  br i1 %.not112, label %.thread, label %44

.thread:                                          ; preds = %31
  store ptr %43, ptr %6, align 8, !tbaa !25
  br label %46

44:                                               ; preds = %31
  %45 = load ptr, ptr %43, align 8, !tbaa !25
  %.not124 = icmp eq ptr %45, null
  br i1 %.not124, label %52, label %46

46:                                               ; preds = %.thread, %44
  %.093119 = phi ptr [ %6, %.thread ], [ %43, %44 ]
  %47 = getelementptr inbounds i8, ptr %37, i64 48
  %48 = load ptr, ptr %47, align 8, !tbaa !26
  %.not114 = icmp eq ptr %48, null
  br i1 %.not114, label %52, label %49

49:                                               ; preds = %46
  %50 = call i32 %48(i32 noundef 0, ptr noundef nonnull %.093119) #4
  %51 = icmp ne i32 %50, 1
  %spec.select = zext i1 %51 to i32
  br label %52

52:                                               ; preds = %49, %46, %44
  %.1 = phi i32 [ 1, %46 ], [ 0, %44 ], [ %spec.select, %49 ]
  %53 = call i32 @per_put_few_bits(ptr noundef %4, i32 noundef %.1, i32 noundef 1) #4
  %.not115 = icmp eq i32 %53, 0
  br i1 %.not115, label %.critedge, label %54

54:                                               ; preds = %52
  store i64 -1, ptr %0, align 8, !tbaa !11
  %55 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %55, align 8, !tbaa !14
  %56 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %3, ptr %56, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1496, i32 noundef 101, ptr noundef null) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  br label %135

.critedge:                                        ; preds = %52
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %57 = load i32, ptr %23, align 8, !tbaa !18
  %58 = sext i32 %57 to i64
  %59 = icmp slt i64 %indvars.iv.next, %58
  br i1 %59, label %31, label %.preheader, !llvm.loop !27

60:                                               ; preds = %.preheader, %116
  %indvars.iv131 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next132, %116 ]
  %.sroa.0.0 = phi i64 [ 0, %.preheader ], [ %.sroa.0.1.ph, %116 ]
  %61 = load i32, ptr %28, align 8, !tbaa !29
  %62 = icmp slt i32 %61, 0
  br i1 %62, label %63, label %65

63:                                               ; preds = %60
  %64 = load i32, ptr %29, align 8, !tbaa !30
  br label %68

65:                                               ; preds = %60
  %66 = load i32, ptr %15, align 4, !tbaa !16
  %67 = add nsw i32 %66, -1
  br label %68

68:                                               ; preds = %65, %63
  %69 = phi i32 [ %64, %63 ], [ %67, %65 ]
  %70 = sext i32 %69 to i64
  %71 = icmp slt i64 %indvars.iv131, %70
  br i1 %71, label %72, label %117

72:                                               ; preds = %68
  %73 = load ptr, ptr %30, align 8, !tbaa !21
  %74 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %73, i64 %indvars.iv131
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  %75 = sext i32 %61 to i64
  %76 = icmp sgt i64 %indvars.iv131, %75
  br i1 %76, label %77, label %81

77:                                               ; preds = %72
  %78 = load i32, ptr %15, align 4, !tbaa !16
  %79 = sext i32 %78 to i64
  %80 = icmp slt i64 %indvars.iv131, %79
  br i1 %80, label %116, label %81

81:                                               ; preds = %77, %72
  %82 = load i32, ptr %74, align 8, !tbaa !22
  %83 = and i32 %82, 1
  %.not108 = icmp eq i32 %83, 0
  %84 = getelementptr inbounds i8, ptr %74, i64 8
  %85 = load i32, ptr %84, align 8, !tbaa !24
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds i8, ptr %3, i64 %86
  br i1 %.not108, label %96, label %88

88:                                               ; preds = %81
  %89 = load ptr, ptr %87, align 8, !tbaa !25
  %.not109 = icmp eq ptr %89, null
  br i1 %.not109, label %90, label %97

90:                                               ; preds = %88
  %91 = getelementptr inbounds i8, ptr %74, i64 4
  %92 = load i32, ptr %91, align 4, !tbaa !31
  %.not110 = icmp eq i32 %92, 0
  br i1 %.not110, label %93, label %116

93:                                               ; preds = %90
  store i64 -1, ptr %0, align 8, !tbaa !11
  %94 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %94, align 8, !tbaa !14
  %95 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %3, ptr %95, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1527, i32 noundef 101, ptr noundef null) #4
  br label %115

96:                                               ; preds = %81
  store ptr %87, ptr %7, align 8, !tbaa !25
  br label %97

97:                                               ; preds = %88, %96
  %98 = phi ptr [ %89, %88 ], [ %87, %96 ]
  %.0 = phi ptr [ %87, %88 ], [ %7, %96 ]
  %99 = getelementptr inbounds i8, ptr %74, i64 48
  %100 = load ptr, ptr %99, align 8, !tbaa !26
  %.not111 = icmp eq ptr %100, null
  br i1 %.not111, label %104, label %101

101:                                              ; preds = %97
  %102 = call i32 %100(i32 noundef 0, ptr noundef nonnull %.0) #4
  %103 = icmp eq i32 %102, 1
  br i1 %103, label %116, label %._crit_edge

._crit_edge:                                      ; preds = %101
  %.pre = load ptr, ptr %.0, align 8, !tbaa !25
  br label %104

104:                                              ; preds = %._crit_edge, %97
  %105 = phi ptr [ %.pre, %._crit_edge ], [ %98, %97 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #4
  %106 = getelementptr inbounds i8, ptr %74, i64 24
  %107 = load ptr, ptr %106, align 8, !tbaa !32
  %108 = getelementptr inbounds i8, ptr %107, i64 80
  %109 = load ptr, ptr %108, align 8, !tbaa !33
  %110 = getelementptr inbounds i8, ptr %74, i64 40
  %111 = load ptr, ptr %110, align 8, !tbaa !34
  call void %109(ptr dead_on_unwind nonnull writable sret(%struct.asn_enc_rval_s) align 8 %8, ptr noundef %107, ptr noundef %111, ptr noundef %105, ptr noundef %4) #4
  %.sroa.0.0.copyload = load i64, ptr %8, align 8, !tbaa !35
  %112 = load <2 x ptr>, ptr %.sroa.8.0..sroa_idx, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #4
  %113 = icmp eq i64 %.sroa.0.0.copyload, -1
  br i1 %113, label %114, label %116

114:                                              ; preds = %104
  store i64 -1, ptr %0, align 8, !tbaa !35
  %.sroa.8.0..sroa_idx39 = getelementptr inbounds i8, ptr %0, i64 8
  store <2 x ptr> %112, ptr %.sroa.8.0..sroa_idx39, align 8, !tbaa !25
  br label %115

115:                                              ; preds = %114, %93
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  br label %135

116:                                              ; preds = %77, %90, %101, %104
  %.sroa.0.1.ph = phi i64 [ %.sroa.0.0.copyload, %104 ], [ %.sroa.0.0, %101 ], [ %.sroa.0.0, %90 ], [ %.sroa.0.0, %77 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  %indvars.iv.next132 = add nuw nsw i64 %indvars.iv131, 1
  br label %60, !llvm.loop !36

117:                                              ; preds = %68
  %.not104 = icmp eq i32 %.098, 0
  br i1 %.not104, label %118, label %119

118:                                              ; preds = %117
  store i64 %.sroa.0.0, ptr %0, align 8, !tbaa !35
  %.sroa.8.0..sroa_idx41 = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.8.0..sroa_idx41, i8 0, i64 16, i1 false)
  br label %135

119:                                              ; preds = %117
  %120 = sext i32 %.098 to i64
  %121 = call i32 @uper_put_nslength(ptr noundef %4, i64 noundef %120) #4
  %.not105 = icmp eq i32 %121, 0
  br i1 %.not105, label %125, label %122

122:                                              ; preds = %119
  store i64 -1, ptr %0, align 8, !tbaa !11
  %123 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %123, align 8, !tbaa !14
  %124 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %3, ptr %124, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1555, i32 noundef 101, ptr noundef null) #4
  br label %135

125:                                              ; preds = %119
  %126 = call i32 @SEQUENCE_handle_extensions(ptr noundef nonnull %1, ptr noundef nonnull %3, ptr noundef %4, ptr noundef null)
  %.not106 = icmp eq i32 %126, %.098
  br i1 %.not106, label %130, label %127

127:                                              ; preds = %125
  store i64 -1, ptr %0, align 8, !tbaa !11
  %128 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %128, align 8, !tbaa !14
  %129 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %3, ptr %129, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1562, i32 noundef 101, ptr noundef null) #4
  br label %135

130:                                              ; preds = %125
  %131 = call i32 @SEQUENCE_handle_extensions(ptr noundef nonnull %1, ptr noundef nonnull %3, ptr noundef null, ptr noundef %4)
  %.not107 = icmp eq i32 %131, %.098
  %.sroa.8.0..sroa_idx43 = getelementptr inbounds i8, ptr %0, i64 8
  br i1 %.not107, label %134, label %132

132:                                              ; preds = %130
  store i64 -1, ptr %0, align 8, !tbaa !11
  store ptr %1, ptr %.sroa.8.0..sroa_idx43, align 8, !tbaa !14
  %133 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %3, ptr %133, align 8, !tbaa !15
  call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 1568, i32 noundef 101, ptr noundef null) #4
  br label %135

134:                                              ; preds = %130
  store i64 %.sroa.0.0, ptr %0, align 8, !tbaa !35
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.8.0..sroa_idx43, i8 0, i64 16, i1 false)
  br label %135

135:                                              ; preds = %115, %54, %134, %132, %127, %122, %118, %11
  ret void
}

; Function Attrs: nounwind uwtable
declare hidden i32 @SEQUENCE_handle_extensions(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @per_put_few_bits(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare i32 @uper_put_nslength(ptr noundef, i64 noundef) local_unnamed_addr #1

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #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 = { 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 #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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, !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 = !{!12, !13, i64 0}
!12 = !{!"asn_enc_rval_s", !13, i64 0, !7, i64 8, !7, i64 16}
!13 = !{!"long", !8, i64 0}
!14 = !{!12, !7, i64 8}
!15 = !{!12, !7, i64 16}
!16 = !{!17, !10, i64 44}
!17 = !{!"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}
!18 = !{!17, !10, i64 32}
!19 = !{!17, !7, i64 24}
!20 = !{!10, !10, i64 0}
!21 = !{!6, !7, i64 136}
!22 = !{!23, !10, i64 0}
!23 = !{!"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}
!24 = !{!23, !10, i64 8}
!25 = !{!7, !7, i64 0}
!26 = !{!23, !7, i64 48}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!17, !10, i64 40}
!30 = !{!6, !10, i64 144}
!31 = !{!23, !10, i64 4}
!32 = !{!23, !7, i64 24}
!33 = !{!6, !7, i64 80}
!34 = !{!23, !7, i64 40}
!35 = !{!13, !13, i64 0}
!36 = distinct !{!36, !28}


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