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

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

%struct.asn_dec_rval_s = type { i32, i64 }
%struct.asn_TYPE_descriptor_s = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, i32, ptr, ptr, i32, ptr }
%struct.asn_CHOICE_specifics_s = type { i32, i32, i32, i32, ptr, i32, ptr, i32 }
%struct.asn_struct_ctx_s = type { i16, i16, i32, ptr, i64 }
%struct.asn_TYPE_member_s = type { i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr }

; 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

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

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

40:                                               ; preds = %6
  %41 = load ptr, ptr %11, align 8, !tbaa !5
  br label %46

42:                                               ; preds = %6
  %43 = load ptr, ptr %9, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %43, i32 0, i32 1
  %45 = load ptr, ptr %44, align 8, !tbaa !14
  br label %46

46:                                               ; preds = %42, %40
  %47 = phi ptr [ %41, %40 ], [ %45, %42 ]
  store ptr %47, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %48 = load ptr, ptr %10, align 8, !tbaa !5
  %49 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %49, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  store i64 0, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %50 = load ptr, ptr %16, align 8, !tbaa !5
  %51 = icmp eq ptr %50, null
  br i1 %51, label %52, label %69

52:                                               ; preds = %46
  %53 = load ptr, ptr %14, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %53, i32 0, i32 0
  %55 = load i32, ptr %54, align 8, !tbaa !15
  %56 = sext i32 %55 to i64
  %57 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %56) #6
  %58 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %57, ptr %58, align 8, !tbaa !5
  store ptr %57, ptr %16, align 8, !tbaa !5
  %59 = load ptr, ptr %16, align 8, !tbaa !5
  %60 = icmp eq ptr %59, null
  br i1 %60, label %61, label %68

61:                                               ; preds = %52
  br label %62

62:                                               ; preds = %61
  %63 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %63, align 8, !tbaa !17
  %64 = load i64, ptr %18, align 8, !tbaa !9
  %65 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %64, ptr %65, align 8, !tbaa !19
  store i32 1, ptr %20, align 4
  br label %448

66:                                               ; No predecessors!
  br label %67

67:                                               ; preds = %66
  br label %68

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

69:                                               ; preds = %68, %46
  %70 = load ptr, ptr %16, align 8, !tbaa !5
  %71 = load ptr, ptr %14, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %71, i32 0, i32 1
  %73 = load i32, ptr %72, align 4, !tbaa !20
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds i8, ptr %70, i64 %74
  store ptr %75, ptr %17, align 8, !tbaa !5
  %76 = load ptr, ptr %17, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %76, i32 0, i32 0
  %78 = load i16, ptr %77, align 8, !tbaa !21
  %79 = sext i16 %78 to i32
  %80 = icmp eq i32 %79, 0
  br i1 %80, label %81, label %88

81:                                               ; preds = %69
  %82 = load ptr, ptr %15, align 8, !tbaa !5
  %83 = load i8, ptr %82, align 1, !tbaa !24
  %84 = icmp ne i8 %83, 0
  br i1 %84, label %88, label %85

85:                                               ; preds = %81
  %86 = load ptr, ptr %17, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %86, i32 0, i32 0
  store i16 1, ptr %87, align 8, !tbaa !21
  br label %88

88:                                               ; preds = %85, %81, %69
  %89 = load ptr, ptr %17, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %89, i32 0, i32 1
  %91 = load i16, ptr %90, align 2, !tbaa !25
  %92 = sext i16 %91 to i32
  store i32 %92, ptr %19, align 4, !tbaa !26
  br label %93

93:                                               ; preds = %437, %88
  %94 = load ptr, ptr %17, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %94, i32 0, i32 0
  %96 = load i16, ptr %95, align 8, !tbaa !21
  %97 = sext i16 %96 to i32
  %98 = icmp sle i32 %97, 4
  br i1 %98, label %99, label %439

99:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %100 = load ptr, ptr %17, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %100, i32 0, i32 0
  %102 = load i16, ptr %101, align 8, !tbaa !21
  %103 = sext i16 %102 to i32
  %104 = icmp eq i32 %103, 2
  br i1 %104, label %105, label %193

105:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %106 = load ptr, ptr %9, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %106, i32 0, i32 17
  %108 = load ptr, ptr %107, align 8, !tbaa !27
  %109 = load i32, ptr %19, align 4, !tbaa !26
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %108, i64 %110
  store ptr %111, ptr %24, align 8, !tbaa !5
  %112 = load ptr, ptr %24, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %112, i32 0, i32 0
  %114 = load i32, ptr %113, align 8, !tbaa !28
  %115 = and i32 %114, 1
  %116 = icmp ne i32 %115, 0
  br i1 %116, label %117, label %124

117:                                              ; preds = %105
  %118 = load ptr, ptr %16, align 8, !tbaa !5
  %119 = load ptr, ptr %24, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %119, i32 0, i32 2
  %121 = load i32, ptr %120, align 8, !tbaa !30
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i8, ptr %118, i64 %122
  store ptr %123, ptr %27, align 8, !tbaa !5
  br label %131

124:                                              ; preds = %105
  %125 = load ptr, ptr %16, align 8, !tbaa !5
  %126 = load ptr, ptr %24, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %126, i32 0, i32 2
  %128 = load i32, ptr %127, align 8, !tbaa !30
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i8, ptr %125, i64 %129
  store ptr %130, ptr %26, align 8, !tbaa !5
  store ptr %26, ptr %27, align 8, !tbaa !5
  br label %131

131:                                              ; preds = %124, %117
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #5
  %132 = load ptr, ptr %24, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %132, i32 0, i32 5
  %134 = load ptr, ptr %133, align 8, !tbaa !31
  %135 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %134, i32 0, i32 7
  %136 = load ptr, ptr %135, align 8, !tbaa !32
  %137 = load ptr, ptr %8, align 8, !tbaa !5
  %138 = load ptr, ptr %24, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %138, i32 0, i32 5
  %140 = load ptr, ptr %139, align 8, !tbaa !31
  %141 = load ptr, ptr %27, align 8, !tbaa !5
  %142 = load ptr, ptr %24, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %142, i32 0, i32 9
  %144 = load ptr, ptr %143, align 8, !tbaa !33
  %145 = load ptr, ptr %12, align 8, !tbaa !5
  %146 = load i64, ptr %13, align 8, !tbaa !9
  %147 = call { i32, i64 } %136(ptr noundef %137, ptr noundef %140, ptr noundef %141, ptr noundef %144, ptr noundef %145, i64 noundef %146)
  %148 = getelementptr inbounds { i32, i64 }, ptr %28, i32 0, i32 0
  %149 = extractvalue { i32, i64 } %147, 0
  store i32 %149, ptr %148, align 8
  %150 = getelementptr inbounds { i32, i64 }, ptr %28, i32 0, i32 1
  %151 = extractvalue { i32, i64 } %147, 1
  store i64 %151, ptr %150, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %28, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #5
  br label %152

152:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %153 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %25, i32 0, i32 1
  %154 = load i64, ptr %153, align 8, !tbaa !19
  store i64 %154, ptr %29, align 8, !tbaa !9
  %155 = load ptr, ptr %12, align 8, !tbaa !5
  %156 = load i64, ptr %29, align 8, !tbaa !9
  %157 = getelementptr inbounds i8, ptr %155, i64 %156
  store ptr %157, ptr %12, align 8, !tbaa !5
  %158 = load i64, ptr %29, align 8, !tbaa !9
  %159 = load i64, ptr %13, align 8, !tbaa !9
  %160 = sub i64 %159, %158
  store i64 %160, ptr %13, align 8, !tbaa !9
  %161 = load i64, ptr %29, align 8, !tbaa !9
  %162 = load i64, ptr %18, align 8, !tbaa !9
  %163 = add i64 %162, %161
  store i64 %163, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %164

164:                                              ; preds = %152
  br label %165

165:                                              ; preds = %164
  %166 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %25, i32 0, i32 0
  %167 = load i32, ptr %166, align 8, !tbaa !17
  %168 = icmp ne i32 %167, 0
  br i1 %168, label %169, label %178

169:                                              ; preds = %165
  br label %170

170:                                              ; preds = %169
  %171 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %25, i32 0, i32 0
  %172 = load i32, ptr %171, align 8, !tbaa !17
  %173 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 %172, ptr %173, align 8, !tbaa !17
  %174 = load i64, ptr %18, align 8, !tbaa !9
  %175 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %174, ptr %175, align 8, !tbaa !19
  store i32 1, ptr %20, align 4
  br label %190

176:                                              ; No predecessors!
  br label %177

177:                                              ; preds = %176
  br label %178

178:                                              ; preds = %177, %165
  %179 = load ptr, ptr %16, align 8, !tbaa !5
  %180 = load ptr, ptr %14, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %180, i32 0, i32 2
  %182 = load i32, ptr %181, align 8, !tbaa !35
  %183 = load ptr, ptr %14, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %183, i32 0, i32 3
  %185 = load i32, ptr %184, align 4, !tbaa !36
  %186 = load i32, ptr %19, align 4, !tbaa !26
  %187 = add nsw i32 %186, 1
  call void @_set_present_idx(ptr noundef %179, i32 noundef %182, i32 noundef %185, i32 noundef %187)
  %188 = load ptr, ptr %17, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %188, i32 0, i32 0
  store i16 3, ptr %189, align 8, !tbaa !21
  store i32 0, ptr %20, align 4
  br label %190

190:                                              ; preds = %178, %170
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  %191 = load i32, ptr %20, align 4
  switch i32 %191, label %437 [
    i32 0, label %192
  ]

192:                                              ; preds = %190
  br label %193

193:                                              ; preds = %192, %99
  %194 = load ptr, ptr %17, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %194, i32 0, i32 0
  %196 = load i16, ptr %195, align 8, !tbaa !21
  %197 = sext i16 %196 to i32
  %198 = icmp eq i32 %197, 3
  br i1 %198, label %199, label %212

199:                                              ; preds = %193
  %200 = load ptr, ptr %15, align 8, !tbaa !5
  %201 = load i8, ptr %200, align 1, !tbaa !24
  %202 = icmp ne i8 %201, 0
  br i1 %202, label %212, label %203

203:                                              ; preds = %199
  %204 = load ptr, ptr %17, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %204, i32 0, i32 0
  store i16 5, ptr %205, align 8, !tbaa !21
  br label %206

206:                                              ; preds = %203
  %207 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %207, align 8, !tbaa !17
  %208 = load i64, ptr %18, align 8, !tbaa !9
  %209 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %208, ptr %209, align 8, !tbaa !19
  store i32 1, ptr %20, align 4
  br label %437

210:                                              ; No predecessors!
  br label %211

211:                                              ; preds = %210
  br label %212

212:                                              ; preds = %211, %199, %193
  %213 = load ptr, ptr %17, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %213, i32 0, i32 2
  %215 = load ptr, ptr %12, align 8, !tbaa !5
  %216 = load i64, ptr %13, align 8, !tbaa !9
  %217 = call i64 @xer_next_token(ptr noundef %214, ptr noundef %215, i64 noundef %216, ptr noundef %21)
  store i64 %217, ptr %22, align 8, !tbaa !9
  %218 = load i64, ptr %22, align 8, !tbaa !9
  %219 = icmp eq i64 %218, -1
  br i1 %219, label %220, label %227

220:                                              ; preds = %212
  br label %221

221:                                              ; preds = %220
  %222 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %222, align 8, !tbaa !17
  %223 = load i64, ptr %18, align 8, !tbaa !9
  %224 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %223, ptr %224, align 8, !tbaa !19
  store i32 1, ptr %20, align 4
  br label %437

225:                                              ; No predecessors!
  br label %226

226:                                              ; preds = %225
  br label %251

227:                                              ; preds = %212
  %228 = load i32, ptr %21, align 4, !tbaa !26
  switch i32 %228, label %250 [
    i32 0, label %229
    i32 3, label %236
    i32 2, label %236
    i32 1, label %250
  ]

229:                                              ; preds = %227
  br label %230

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

234:                                              ; No predecessors!
  br label %235

235:                                              ; preds = %234
  br label %236

236:                                              ; preds = %235, %227, %227
  br label %237

237:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %238 = load i64, ptr %22, align 8, !tbaa !9
  store i64 %238, ptr %30, align 8, !tbaa !9
  %239 = load ptr, ptr %12, align 8, !tbaa !5
  %240 = load i64, ptr %30, align 8, !tbaa !9
  %241 = getelementptr inbounds i8, ptr %239, i64 %240
  store ptr %241, ptr %12, align 8, !tbaa !5
  %242 = load i64, ptr %30, align 8, !tbaa !9
  %243 = load i64, ptr %13, align 8, !tbaa !9
  %244 = sub i64 %243, %242
  store i64 %244, ptr %13, align 8, !tbaa !9
  %245 = load i64, ptr %30, align 8, !tbaa !9
  %246 = load i64, ptr %18, align 8, !tbaa !9
  %247 = add i64 %246, %245
  store i64 %247, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  br label %248

248:                                              ; preds = %237
  br label %249

249:                                              ; preds = %248
  store i32 5, ptr %20, align 4
  br label %437, !llvm.loop !37

250:                                              ; preds = %227, %227
  br label %251

251:                                              ; preds = %250, %226
  %252 = load ptr, ptr %12, align 8, !tbaa !5
  %253 = load i64, ptr %22, align 8, !tbaa !9
  %254 = trunc i64 %253 to i32
  %255 = load ptr, ptr %15, align 8, !tbaa !5
  %256 = call i32 @xer_check_tag(ptr noundef %252, i32 noundef %254, ptr noundef %255)
  store i32 %256, ptr %23, align 4, !tbaa !26
  %257 = load ptr, ptr %17, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %257, i32 0, i32 0
  %259 = load i16, ptr %258, align 8, !tbaa !21
  %260 = sext i16 %259 to i32
  %261 = icmp eq i32 %260, 4
  br i1 %261, label %262, label %297

262:                                              ; preds = %251
  %263 = load i32, ptr %23, align 4, !tbaa !26
  %264 = load ptr, ptr %17, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %264, i32 0, i32 4
  %266 = call i32 @xer_skip_unknown(i32 noundef %263, ptr noundef %265)
  switch i32 %266, label %296 [
    i32 -1, label %267
    i32 1, label %276
    i32 0, label %279
    i32 2, label %293
  ]

267:                                              ; preds = %262
  %268 = load ptr, ptr %17, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %268, i32 0, i32 0
  store i16 5, ptr %269, align 8, !tbaa !21
  br label %270

270:                                              ; preds = %267
  %271 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %271, align 8, !tbaa !17
  %272 = load i64, ptr %18, align 8, !tbaa !9
  %273 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %272, ptr %273, align 8, !tbaa !19
  store i32 1, ptr %20, align 4
  br label %437

274:                                              ; No predecessors!
  br label %275

275:                                              ; preds = %274
  store i32 5, ptr %20, align 4
  br label %437, !llvm.loop !37

276:                                              ; preds = %262
  %277 = load ptr, ptr %17, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %277, i32 0, i32 0
  store i16 3, ptr %278, align 8, !tbaa !21
  br label %279

279:                                              ; preds = %276, %262
  br label %280

280:                                              ; preds = %279
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %281 = load i64, ptr %22, align 8, !tbaa !9
  store i64 %281, ptr %31, align 8, !tbaa !9
  %282 = load ptr, ptr %12, align 8, !tbaa !5
  %283 = load i64, ptr %31, align 8, !tbaa !9
  %284 = getelementptr inbounds i8, ptr %282, i64 %283
  store ptr %284, ptr %12, align 8, !tbaa !5
  %285 = load i64, ptr %31, align 8, !tbaa !9
  %286 = load i64, ptr %13, align 8, !tbaa !9
  %287 = sub i64 %286, %285
  store i64 %287, ptr %13, align 8, !tbaa !9
  %288 = load i64, ptr %31, align 8, !tbaa !9
  %289 = load i64, ptr %18, align 8, !tbaa !9
  %290 = add i64 %289, %288
  store i64 %290, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  br label %291

291:                                              ; preds = %280
  br label %292

292:                                              ; preds = %291
  store i32 5, ptr %20, align 4
  br label %437, !llvm.loop !37

293:                                              ; preds = %262
  %294 = load ptr, ptr %17, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %294, i32 0, i32 0
  store i16 3, ptr %295, align 8, !tbaa !21
  br label %296

296:                                              ; preds = %293, %262
  br label %297

297:                                              ; preds = %296, %251
  %298 = load i32, ptr %23, align 4, !tbaa !26
  switch i32 %298, label %435 [
    i32 3, label %436
    i32 2, label %299
    i32 1, label %328
    i32 5, label %351
    i32 7, label %351
  ]

299:                                              ; preds = %297
  %300 = load ptr, ptr %17, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %300, i32 0, i32 0
  %302 = load i16, ptr %301, align 8, !tbaa !21
  %303 = sext i16 %302 to i32
  %304 = icmp ne i32 %303, 3
  br i1 %304, label %305, label %306

305:                                              ; preds = %299
  br label %436

306:                                              ; preds = %299
  br label %307

307:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %308 = load i64, ptr %22, align 8, !tbaa !9
  store i64 %308, ptr %32, align 8, !tbaa !9
  %309 = load ptr, ptr %12, align 8, !tbaa !5
  %310 = load i64, ptr %32, align 8, !tbaa !9
  %311 = getelementptr inbounds i8, ptr %309, i64 %310
  store ptr %311, ptr %12, align 8, !tbaa !5
  %312 = load i64, ptr %32, align 8, !tbaa !9
  %313 = load i64, ptr %13, align 8, !tbaa !9
  %314 = sub i64 %313, %312
  store i64 %314, ptr %13, align 8, !tbaa !9
  %315 = load i64, ptr %32, align 8, !tbaa !9
  %316 = load i64, ptr %18, align 8, !tbaa !9
  %317 = add i64 %316, %315
  store i64 %317, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %318

318:                                              ; preds = %307
  br label %319

319:                                              ; preds = %318
  %320 = load ptr, ptr %17, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %320, i32 0, i32 0
  store i16 5, ptr %321, align 8, !tbaa !21
  br label %322

322:                                              ; preds = %319
  %323 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %323, align 8, !tbaa !17
  %324 = load i64, ptr %18, align 8, !tbaa !9
  %325 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %324, ptr %325, align 8, !tbaa !19
  store i32 1, ptr %20, align 4
  br label %437

326:                                              ; No predecessors!
  br label %327

327:                                              ; preds = %326
  br label %328

328:                                              ; preds = %327, %297
  %329 = load ptr, ptr %17, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %329, i32 0, i32 0
  %331 = load i16, ptr %330, align 8, !tbaa !21
  %332 = sext i16 %331 to i32
  %333 = icmp eq i32 %332, 0
  br i1 %333, label %334, label %350

334:                                              ; preds = %328
  br label %335

335:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %336 = load i64, ptr %22, align 8, !tbaa !9
  store i64 %336, ptr %33, align 8, !tbaa !9
  %337 = load ptr, ptr %12, align 8, !tbaa !5
  %338 = load i64, ptr %33, align 8, !tbaa !9
  %339 = getelementptr inbounds i8, ptr %337, i64 %338
  store ptr %339, ptr %12, align 8, !tbaa !5
  %340 = load i64, ptr %33, align 8, !tbaa !9
  %341 = load i64, ptr %13, align 8, !tbaa !9
  %342 = sub i64 %341, %340
  store i64 %342, ptr %13, align 8, !tbaa !9
  %343 = load i64, ptr %33, align 8, !tbaa !9
  %344 = load i64, ptr %18, align 8, !tbaa !9
  %345 = add i64 %344, %343
  store i64 %345, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %346

346:                                              ; preds = %335
  br label %347

347:                                              ; preds = %346
  %348 = load ptr, ptr %17, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %348, i32 0, i32 0
  store i16 1, ptr %349, align 8, !tbaa !21
  store i32 5, ptr %20, align 4
  br label %437, !llvm.loop !37

350:                                              ; preds = %328
  br label %351

351:                                              ; preds = %350, %297, %297
  %352 = load ptr, ptr %17, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %352, i32 0, i32 0
  %354 = load i16, ptr %353, align 8, !tbaa !21
  %355 = sext i16 %354 to i32
  %356 = icmp ne i32 %355, 1
  br i1 %356, label %357, label %358

357:                                              ; preds = %351
  br label %436

358:                                              ; preds = %351
  store i32 0, ptr %19, align 4, !tbaa !26
  br label %359

359:                                              ; preds = %393, %358
  %360 = load i32, ptr %19, align 4, !tbaa !26
  %361 = load ptr, ptr %9, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %361, i32 0, i32 18
  %363 = load i32, ptr %362, align 8, !tbaa !39
  %364 = icmp slt i32 %360, %363
  br i1 %364, label %365, label %396

365:                                              ; preds = %359
  %366 = load ptr, ptr %9, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %366, i32 0, i32 17
  %368 = load ptr, ptr %367, align 8, !tbaa !27
  %369 = load i32, ptr %19, align 4, !tbaa !26
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %368, i64 %370
  store ptr %371, ptr %24, align 8, !tbaa !5
  %372 = load ptr, ptr %12, align 8, !tbaa !5
  %373 = load i64, ptr %22, align 8, !tbaa !9
  %374 = trunc i64 %373 to i32
  %375 = load ptr, ptr %24, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %375, i32 0, i32 9
  %377 = load ptr, ptr %376, align 8, !tbaa !33
  %378 = call i32 @xer_check_tag(ptr noundef %372, i32 noundef %374, ptr noundef %377)
  store i32 %378, ptr %23, align 4, !tbaa !26
  %379 = load i32, ptr %23, align 4, !tbaa !26
  switch i32 %379, label %388 [
    i32 3, label %380
    i32 1, label %380
    i32 5, label %387
    i32 7, label %387
  ]

380:                                              ; preds = %365, %365
  %381 = load i32, ptr %19, align 4, !tbaa !26
  %382 = trunc i32 %381 to i16
  %383 = load ptr, ptr %17, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %383, i32 0, i32 1
  store i16 %382, ptr %384, align 2, !tbaa !25
  %385 = load ptr, ptr %17, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %385, i32 0, i32 0
  store i16 2, ptr %386, align 8, !tbaa !21
  br label %392

387:                                              ; preds = %365, %365
  br label %393

388:                                              ; preds = %365
  %389 = load ptr, ptr %9, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %389, i32 0, i32 18
  %391 = load i32, ptr %390, align 8, !tbaa !39
  store i32 %391, ptr %19, align 4, !tbaa !26
  br label %392

392:                                              ; preds = %388, %380
  br label %396

393:                                              ; preds = %387
  %394 = load i32, ptr %19, align 4, !tbaa !26
  %395 = add nsw i32 %394, 1
  store i32 %395, ptr %19, align 4, !tbaa !26
  br label %359, !llvm.loop !40

396:                                              ; preds = %392, %359
  %397 = load i32, ptr %19, align 4, !tbaa !26
  %398 = load ptr, ptr %9, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %398, i32 0, i32 18
  %400 = load i32, ptr %399, align 8, !tbaa !39
  %401 = icmp ne i32 %397, %400
  br i1 %401, label %402, label %403

402:                                              ; preds = %396
  store i32 5, ptr %20, align 4
  br label %437, !llvm.loop !37

403:                                              ; preds = %396
  %404 = load ptr, ptr %14, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.asn_CHOICE_specifics_s, ptr %404, i32 0, i32 7
  %406 = load i32, ptr %405, align 8, !tbaa !41
  %407 = icmp ne i32 %406, -1
  br i1 %407, label %408, label %434

408:                                              ; preds = %403
  %409 = load i32, ptr %23, align 4, !tbaa !26
  %410 = and i32 %409, 2
  %411 = icmp ne i32 %410, 0
  br i1 %411, label %412, label %415

412:                                              ; preds = %408
  %413 = load ptr, ptr %17, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %413, i32 0, i32 0
  store i16 3, ptr %414, align 8, !tbaa !21
  br label %420

415:                                              ; preds = %408
  %416 = load ptr, ptr %17, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %416, i32 0, i32 4
  store i64 1, ptr %417, align 8, !tbaa !42
  %418 = load ptr, ptr %17, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %418, i32 0, i32 0
  store i16 4, ptr %419, align 8, !tbaa !21
  br label %420

420:                                              ; preds = %415, %412
  br label %421

421:                                              ; preds = %420
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %422 = load i64, ptr %22, align 8, !tbaa !9
  store i64 %422, ptr %34, align 8, !tbaa !9
  %423 = load ptr, ptr %12, align 8, !tbaa !5
  %424 = load i64, ptr %34, align 8, !tbaa !9
  %425 = getelementptr inbounds i8, ptr %423, i64 %424
  store ptr %425, ptr %12, align 8, !tbaa !5
  %426 = load i64, ptr %34, align 8, !tbaa !9
  %427 = load i64, ptr %13, align 8, !tbaa !9
  %428 = sub i64 %427, %426
  store i64 %428, ptr %13, align 8, !tbaa !9
  %429 = load i64, ptr %34, align 8, !tbaa !9
  %430 = load i64, ptr %18, align 8, !tbaa !9
  %431 = add i64 %430, %429
  store i64 %431, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %432

432:                                              ; preds = %421
  br label %433

433:                                              ; preds = %432
  store i32 5, ptr %20, align 4
  br label %437, !llvm.loop !37

434:                                              ; preds = %403
  br label %436

435:                                              ; preds = %297
  br label %436

436:                                              ; preds = %435, %434, %357, %305, %297
  store i32 4, ptr %20, align 4
  br label %437

437:                                              ; preds = %436, %433, %402, %347, %322, %292, %275, %270, %249, %230, %221, %206, %190
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  %438 = load i32, ptr %20, align 4
  switch i32 %438, label %448 [
    i32 5, label %93
    i32 4, label %439
  ]

439:                                              ; preds = %437, %93
  %440 = load ptr, ptr %17, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %440, i32 0, i32 0
  store i16 5, ptr %441, align 8, !tbaa !21
  br label %442

442:                                              ; preds = %439
  %443 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %443, align 8, !tbaa !17
  %444 = load i64, ptr %18, align 8, !tbaa !9
  %445 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %444, ptr %445, align 8, !tbaa !19
  store i32 1, ptr %20, align 4
  br label %448

446:                                              ; No predecessors!
  br label %447

447:                                              ; preds = %446
  store i32 0, ptr %20, align 4
  br label %448

448:                                              ; preds = %447, %442, %437, %62
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  %449 = load i32, ptr %20, align 4
  switch i32 %449, label %452 [
    i32 0, label %450
    i32 1, label %450
  ]

450:                                              ; preds = %448, %448
  %451 = load { i32, i64 }, ptr %7, align 8
  ret { i32, i64 } %451

452:                                              ; preds = %448
  unreachable
}

declare i64 @xer_next_token(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #4

declare i32 @xer_check_tag(ptr noundef, i32 noundef, ptr noundef) #4

declare i32 @xer_skip_unknown(i32 noundef, ptr noundef) #4

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 = { 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 = { "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 }
attributes #6 = { nounwind allocsize(0,1) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !6, i64 152}
!12 = !{!"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, !13, i64 104, !6, i64 112, !13, i64 120, !6, i64 128, !6, i64 136, !13, i64 144, !6, i64 152}
!13 = !{!"int", !7, i64 0}
!14 = !{!12, !6, i64 8}
!15 = !{!16, !13, i64 0}
!16 = !{!"asn_CHOICE_specifics_s", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !6, i64 16, !13, i64 24, !6, i64 32, !13, i64 40}
!17 = !{!18, !13, i64 0}
!18 = !{!"asn_dec_rval_s", !13, i64 0, !10, i64 8}
!19 = !{!18, !10, i64 8}
!20 = !{!16, !13, i64 4}
!21 = !{!22, !23, i64 0}
!22 = !{!"asn_struct_ctx_s", !23, i64 0, !23, i64 2, !13, i64 4, !6, i64 8, !10, i64 16}
!23 = !{!"short", !7, i64 0}
!24 = !{!7, !7, i64 0}
!25 = !{!22, !23, i64 2}
!26 = !{!13, !13, i64 0}
!27 = !{!12, !6, i64 136}
!28 = !{!29, !13, i64 0}
!29 = !{!"asn_TYPE_member_s", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!30 = !{!29, !13, i64 8}
!31 = !{!29, !6, i64 24}
!32 = !{!12, !6, i64 56}
!33 = !{!29, !6, i64 56}
!34 = !{i64 0, i64 4, !26, i64 8, i64 8, !9}
!35 = !{!16, !13, i64 8}
!36 = !{!16, !13, i64 12}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = !{!12, !13, i64 144}
!40 = distinct !{!40, !38}
!41 = !{!16, !13, i64 40}
!42 = !{!22, !10, i64 16}


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

%struct.asn_TYPE_member_s = type { i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr }

; 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

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

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @CHOICE_decode_xer(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef %2, ptr noundef %3, ptr noundef %4, i64 noundef %5) local_unnamed_addr #2 {
  %7 = alloca i32, align 4
  %8 = alloca ptr, 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 = %6
  %12 = getelementptr inbounds i8, ptr %1, i64 8
  %13 = load ptr, ptr %12, align 8, !tbaa !11
  br label %14

14:                                               ; preds = %6, %11
  %15 = phi ptr [ %13, %11 ], [ %3, %6 ]
  %16 = load ptr, ptr %2, align 8, !tbaa !12
  %17 = icmp eq ptr %16, null
  br i1 %17, label %18, label %23

18:                                               ; preds = %14
  %19 = load i32, ptr %10, align 8, !tbaa !13
  %20 = sext i32 %19 to i64
  %21 = tail call noalias ptr @calloc(i64 noundef 1, i64 noundef %20) #4
  store ptr %21, ptr %2, align 8, !tbaa !12
  %22 = icmp eq ptr %21, null
  br i1 %22, label %149, label %23

23:                                               ; preds = %18, %14
  %.0136 = phi ptr [ %21, %18 ], [ %16, %14 ]
  %24 = getelementptr inbounds i8, ptr %10, i64 4
  %25 = load i32, ptr %24, align 4, !tbaa !15
  %26 = sext i32 %25 to i64
  %27 = getelementptr inbounds i8, ptr %.0136, i64 %26
  %28 = load i16, ptr %27, align 8, !tbaa !16
  %29 = icmp eq i16 %28, 0
  br i1 %29, label %30, label %33

30:                                               ; preds = %23
  %31 = load i8, ptr %15, align 1, !tbaa !20
  %.not154 = icmp eq i8 %31, 0
  br i1 %.not154, label %32, label %.lr.ph215

32:                                               ; preds = %30
  store i16 1, ptr %27, align 8, !tbaa !16
  br label %.lr.ph215

33:                                               ; preds = %23
  %34 = icmp slt i16 %28, 5
  br i1 %34, label %.lr.ph215, label %.loopexit183

.lr.ph215:                                        ; preds = %30, %32, %33
  %35 = phi i16 [ %28, %33 ], [ 0, %30 ], [ 1, %32 ]
  %36 = getelementptr inbounds i8, ptr %27, i64 2
  %37 = load i16, ptr %36, align 2, !tbaa !21
  %38 = sext i16 %37 to i32
  %39 = getelementptr inbounds i8, ptr %1, i64 136
  %40 = getelementptr inbounds i8, ptr %10, i64 8
  %41 = getelementptr inbounds i8, ptr %10, i64 12
  %42 = getelementptr inbounds i8, ptr %27, i64 4
  %43 = getelementptr inbounds i8, ptr %27, i64 16
  %44 = getelementptr inbounds i8, ptr %1, i64 144
  %45 = getelementptr inbounds i8, ptr %10, i64 40
  br label %46

46:                                               ; preds = %.lr.ph215, %146
  %47 = phi i16 [ %35, %.lr.ph215 ], [ %147, %146 ]
  %.0214 = phi ptr [ %4, %.lr.ph215 ], [ %.2, %146 ]
  %.0133213 = phi i64 [ %5, %.lr.ph215 ], [ %.2135, %146 ]
  %.0137212 = phi i64 [ 0, %.lr.ph215 ], [ %.2139, %146 ]
  %.0140211 = phi i32 [ %38, %.lr.ph215 ], [ %.4, %146 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %48 = icmp eq i16 %47, 2
  br i1 %48, label %49, label %77

49:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  %50 = load ptr, ptr %39, align 8, !tbaa !22
  %51 = sext i32 %.0140211 to i64
  %52 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %50, i64 %51
  %53 = load i32, ptr %52, align 8, !tbaa !23
  %54 = and i32 %53, 1
  %.not155 = icmp eq i32 %54, 0
  %55 = getelementptr inbounds i8, ptr %52, i64 8
  %56 = load i32, ptr %55, align 8, !tbaa !25
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds i8, ptr %.0136, i64 %57
  br i1 %.not155, label %59, label %60

59:                                               ; preds = %49
  store ptr %58, ptr %8, align 8, !tbaa !12
  br label %60

60:                                               ; preds = %49, %59
  %.0148 = phi ptr [ %8, %59 ], [ %58, %49 ]
  %61 = getelementptr inbounds i8, ptr %52, i64 24
  %62 = load ptr, ptr %61, align 8, !tbaa !26
  %63 = getelementptr inbounds i8, ptr %62, i64 56
  %64 = load ptr, ptr %63, align 8, !tbaa !27
  %65 = getelementptr inbounds i8, ptr %52, i64 56
  %66 = load ptr, ptr %65, align 8, !tbaa !28
  %67 = call { i32, i64 } %64(ptr noundef %0, ptr noundef %62, ptr noundef nonnull %.0148, ptr noundef %66, ptr noundef %.0214, i64 noundef %.0133213) #5
  %68 = extractvalue { i32, i64 } %67, 0
  %69 = extractvalue { i32, i64 } %67, 1
  %70 = add i64 %69, %.0137212
  %.not156 = icmp eq i32 %68, 0
  br i1 %.not156, label %.thread, label %76

.thread:                                          ; preds = %60
  %71 = sub i64 %.0133213, %69
  %72 = getelementptr inbounds i8, ptr %.0214, i64 %69
  %73 = load i32, ptr %40, align 8, !tbaa !29
  %74 = load i32, ptr %41, align 4, !tbaa !30
  %75 = add nsw i32 %.0140211, 1
  call void @_set_present_idx(ptr noundef nonnull %.0136, i32 noundef %73, i32 noundef %74, i32 noundef %75)
  store i16 3, ptr %27, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  %.pr = load i16, ptr %27, align 8, !tbaa !16
  br label %77

76:                                               ; preds = %60
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  br label %.thread166

77:                                               ; preds = %.thread, %46
  %78 = phi i16 [ %.pr, %.thread ], [ %47, %46 ]
  %.1138 = phi i64 [ %70, %.thread ], [ %.0137212, %46 ]
  %.1134 = phi i64 [ %71, %.thread ], [ %.0133213, %46 ]
  %.1 = phi ptr [ %72, %.thread ], [ %.0214, %46 ]
  %79 = icmp eq i16 %78, 3
  br i1 %79, label %80, label %83

80:                                               ; preds = %77
  %81 = load i8, ptr %15, align 1, !tbaa !20
  %.not157 = icmp eq i8 %81, 0
  br i1 %.not157, label %82, label %83

82:                                               ; preds = %80
  store i16 5, ptr %27, align 8, !tbaa !16
  br label %.thread166

83:                                               ; preds = %80, %77
  %84 = call i64 @xer_next_token(ptr noundef nonnull %42, ptr noundef %.1, i64 noundef %.1134, ptr noundef nonnull %7) #5
  %85 = icmp eq i64 %84, -1
  br i1 %85, label %.thread166, label %86

86:                                               ; preds = %83
  %87 = load i32, ptr %7, align 4, !tbaa !31
  switch i32 %87, label %92 [
    i32 0, label %.thread166
    i32 3, label %88
    i32 2, label %88
  ]

88:                                               ; preds = %86, %86
  %89 = getelementptr inbounds i8, ptr %.1, i64 %84
  %90 = sub i64 %.1134, %84
  %91 = add i64 %84, %.1138
  br label %146, !llvm.loop !32

92:                                               ; preds = %86
  %93 = trunc i64 %84 to i32
  %94 = call i32 @xer_check_tag(ptr noundef %.1, i32 noundef %93, ptr noundef %15) #5
  %95 = load i16, ptr %27, align 8, !tbaa !16
  %96 = icmp eq i16 %95, 4
  br i1 %96, label %97, label %106

97:                                               ; preds = %92
  %98 = call i32 @xer_skip_unknown(i32 noundef %94, ptr noundef nonnull %43) #5
  switch i32 %98, label %106 [
    i32 -1, label %99
    i32 1, label %100
    i32 0, label %101
    i32 2, label %105
  ]

99:                                               ; preds = %97
  store i16 5, ptr %27, align 8, !tbaa !16
  br label %.thread166

100:                                              ; preds = %97
  store i16 3, ptr %27, align 8, !tbaa !16
  br label %101

101:                                              ; preds = %97, %100
  %102 = getelementptr inbounds i8, ptr %.1, i64 %84
  %103 = sub i64 %.1134, %84
  %104 = add i64 %84, %.1138
  br label %146, !llvm.loop !32

105:                                              ; preds = %97
  store i16 3, ptr %27, align 8, !tbaa !16
  br label %106

106:                                              ; preds = %97, %105, %92
  switch i32 %94, label %.thread175 [
    i32 7, label %thread-pre-split
    i32 2, label %107
    i32 1, label %111
    i32 5, label %thread-pre-split
  ]

107:                                              ; preds = %106
  %108 = load i16, ptr %27, align 8, !tbaa !16
  %.not158 = icmp eq i16 %108, 3
  br i1 %.not158, label %109, label %.thread175

109:                                              ; preds = %107
  %110 = add i64 %84, %.1138
  store i16 5, ptr %27, align 8, !tbaa !16
  br label %.thread166

111:                                              ; preds = %106
  %112 = load i16, ptr %27, align 8, !tbaa !16
  %113 = icmp eq i16 %112, 0
  br i1 %113, label %114, label %118

114:                                              ; preds = %111
  %115 = getelementptr inbounds i8, ptr %.1, i64 %84
  %116 = sub i64 %.1134, %84
  %117 = add i64 %84, %.1138
  store i16 1, ptr %27, align 8, !tbaa !16
  br label %146, !llvm.loop !32

thread-pre-split:                                 ; preds = %106, %106
  %.pr165 = load i16, ptr %27, align 8, !tbaa !16
  br label %118

118:                                              ; preds = %thread-pre-split, %111
  %119 = phi i16 [ %.pr165, %thread-pre-split ], [ %112, %111 ]
  %.not159 = icmp eq i16 %119, 1
  br i1 %.not159, label %.preheader, label %.thread175

.preheader:                                       ; preds = %118
  %120 = load i32, ptr %44, align 8, !tbaa !34
  %121 = icmp sgt i32 %120, 0
  br i1 %121, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %.preheader, %130
  %indvars.iv = phi i64 [ %indvars.iv.next, %130 ], [ 0, %.preheader ]
  %122 = load ptr, ptr %39, align 8, !tbaa !22
  %123 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %122, i64 %indvars.iv, i32 9
  %124 = load ptr, ptr %123, align 8, !tbaa !28
  %125 = call i32 @xer_check_tag(ptr noundef %.1, i32 noundef %93, ptr noundef %124) #5
  switch i32 %125, label %.loopexit.thread [
    i32 3, label %126
    i32 1, label %126
    i32 5, label %130
    i32 7, label %130
  ]

126:                                              ; preds = %.lr.ph, %.lr.ph
  %127 = trunc nuw nsw i64 %indvars.iv to i32
  %128 = trunc i64 %indvars.iv to i16
  store i16 %128, ptr %36, align 2, !tbaa !21
  store i16 2, ptr %27, align 8, !tbaa !16
  %.pre = load i32, ptr %44, align 8, !tbaa !34
  br label %.loopexit

.loopexit.thread:                                 ; preds = %.lr.ph
  %129 = load i32, ptr %44, align 8, !tbaa !34
  br label %136

130:                                              ; preds = %.lr.ph, %.lr.ph
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %131 = load i32, ptr %44, align 8, !tbaa !34
  %132 = sext i32 %131 to i64
  %133 = icmp slt i64 %indvars.iv.next, %132
  br i1 %133, label %.lr.ph, label %.loopexit.loopexit, !llvm.loop !35

.loopexit.loopexit:                               ; preds = %130
  %134 = trunc nuw nsw i64 %indvars.iv.next to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %.preheader, %126
  %135 = phi i32 [ %.pre, %126 ], [ %120, %.preheader ], [ %131, %.loopexit.loopexit ]
  %.1147 = phi i32 [ %125, %126 ], [ %94, %.preheader ], [ %125, %.loopexit.loopexit ]
  %.2142 = phi i32 [ %127, %126 ], [ 0, %.preheader ], [ %134, %.loopexit.loopexit ]
  %.not160 = icmp eq i32 %.2142, %135
  br i1 %.not160, label %136, label %146, !llvm.loop !32

136:                                              ; preds = %.loopexit.thread, %.loopexit
  %.1147240 = phi i32 [ %125, %.loopexit.thread ], [ %.1147, %.loopexit ]
  %137 = phi i32 [ %129, %.loopexit.thread ], [ %135, %.loopexit ]
  %138 = load i32, ptr %45, align 8, !tbaa !36
  %.not161 = icmp eq i32 %138, -1
  br i1 %.not161, label %.thread175, label %139

139:                                              ; preds = %136
  %140 = and i32 %.1147240, 2
  %.not162 = icmp eq i32 %140, 0
  br i1 %.not162, label %141, label %142

141:                                              ; preds = %139
  store i64 1, ptr %43, align 8, !tbaa !37
  br label %142

142:                                              ; preds = %139, %141
  %storemerge = phi i16 [ 4, %141 ], [ 3, %139 ]
  store i16 %storemerge, ptr %27, align 8, !tbaa !16
  %143 = getelementptr inbounds i8, ptr %.1, i64 %84
  %144 = sub i64 %.1134, %84
  %145 = add i64 %84, %.1138
  br label %146, !llvm.loop !32

.thread166:                                       ; preds = %83, %86, %109, %99, %82, %76
  %.sroa.0132.3.ph = phi i32 [ %68, %76 ], [ 0, %82 ], [ 2, %99 ], [ 0, %109 ], [ 2, %83 ], [ 1, %86 ]
  %.sroa.9.3.ph = phi i64 [ %70, %76 ], [ %.1138, %82 ], [ %.1138, %99 ], [ %110, %109 ], [ %.1138, %86 ], [ %.1138, %83 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br label %149

.thread175:                                       ; preds = %106, %136, %118, %107
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br label %.loopexit183

146:                                              ; preds = %.loopexit, %142, %114, %101, %88
  %.4 = phi i32 [ %.0140211, %114 ], [ %137, %142 ], [ %.0140211, %101 ], [ %.0140211, %88 ], [ %.2142, %.loopexit ]
  %.2139 = phi i64 [ %117, %114 ], [ %145, %142 ], [ %104, %101 ], [ %91, %88 ], [ %.1138, %.loopexit ]
  %.2135 = phi i64 [ %116, %114 ], [ %144, %142 ], [ %103, %101 ], [ %90, %88 ], [ %.1134, %.loopexit ]
  %.2 = phi ptr [ %115, %114 ], [ %143, %142 ], [ %102, %101 ], [ %89, %88 ], [ %.1, %.loopexit ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  %147 = load i16, ptr %27, align 8, !tbaa !16
  %148 = icmp slt i16 %147, 5
  br i1 %148, label %46, label %.loopexit183

.loopexit183:                                     ; preds = %146, %33, %.thread175
  %.3 = phi i64 [ %.1138, %.thread175 ], [ 0, %33 ], [ %.2139, %146 ]
  store i16 5, ptr %27, align 8, !tbaa !16
  br label %149

149:                                              ; preds = %.thread166, %18, %.loopexit183
  %.sroa.0132.4 = phi i32 [ 2, %.loopexit183 ], [ 2, %18 ], [ %.sroa.0132.3.ph, %.thread166 ]
  %.sroa.9.4 = phi i64 [ %.3, %.loopexit183 ], [ 0, %18 ], [ %.sroa.9.3.ph, %.thread166 ]
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.0132.4, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.9.4, 1
  ret { i32, i64 } %.fca.1.insert
}

declare i64 @xer_next_token(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @xer_check_tag(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @xer_skip_unknown(i32 noundef, ptr noundef) local_unnamed_addr #3

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 = { 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 = { "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 allocsize(0,1) }
attributes #5 = { 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 = !{!6, !7, i64 8}
!12 = !{!7, !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"asn_CHOICE_specifics_s", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !7, i64 16, !10, i64 24, !7, i64 32, !10, i64 40}
!15 = !{!14, !10, i64 4}
!16 = !{!17, !18, i64 0}
!17 = !{!"asn_struct_ctx_s", !18, i64 0, !18, i64 2, !10, i64 4, !7, i64 8, !19, i64 16}
!18 = !{!"short", !8, i64 0}
!19 = !{!"long", !8, i64 0}
!20 = !{!8, !8, i64 0}
!21 = !{!17, !18, i64 2}
!22 = !{!6, !7, i64 136}
!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, !7, i64 24}
!27 = !{!6, !7, i64 56}
!28 = !{!24, !7, i64 56}
!29 = !{!14, !10, i64 8}
!30 = !{!14, !10, i64 12}
!31 = !{!10, !10, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!6, !10, i64 144}
!35 = distinct !{!35, !33}
!36 = !{!14, !10, i64 40}
!37 = !{!17, !19, i64 16}


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