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

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

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

; 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 i32 @_SET_is_populated(ptr noundef, ptr noundef) #3

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

44:                                               ; preds = %6
  %45 = load ptr, ptr %11, align 8, !tbaa !5
  br label %50

46:                                               ; preds = %6
  %47 = load ptr, ptr %9, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %47, i32 0, i32 1
  %49 = load ptr, ptr %48, align 8, !tbaa !15
  br label %50

50:                                               ; preds = %46, %44
  %51 = phi ptr [ %45, %44 ], [ %49, %46 ]
  store ptr %51, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %52 = load ptr, ptr %10, align 8, !tbaa !5
  %53 = load ptr, ptr %52, align 8, !tbaa !5
  store ptr %53, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  store i64 0, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %54 = load ptr, ptr %17, align 8, !tbaa !5
  %55 = icmp eq ptr %54, null
  br i1 %55, label %56, label %73

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

65:                                               ; preds = %56
  br label %66

66:                                               ; preds = %65
  %67 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %67, align 8, !tbaa !18
  %68 = load i64, ptr %19, align 8, !tbaa !9
  %69 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %68, ptr %69, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %471

70:                                               ; No predecessors!
  br label %71

71:                                               ; preds = %70
  br label %72

72:                                               ; preds = %71, %56
  br label %73

73:                                               ; preds = %72, %50
  %74 = load ptr, ptr %17, align 8, !tbaa !5
  %75 = load ptr, ptr %14, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %75, i32 0, i32 1
  %77 = load i32, ptr %76, align 4, !tbaa !21
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds i8, ptr %74, i64 %78
  store ptr %79, ptr %18, align 8, !tbaa !5
  %80 = load ptr, ptr %18, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %80, i32 0, i32 1
  %82 = load i16, ptr %81, align 2, !tbaa !22
  %83 = sext i16 %82 to i32
  store i32 %83, ptr %20, align 4, !tbaa !25
  br label %84

84:                                               ; preds = %460, %73
  %85 = load ptr, ptr %18, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %85, i32 0, i32 0
  %87 = load i16, ptr %86, align 8, !tbaa !26
  %88 = sext i16 %87 to i32
  %89 = icmp sle i32 %88, 3
  br i1 %89, label %90, label %462

90:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %91 = load ptr, ptr %18, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %91, i32 0, i32 0
  %93 = load i16, ptr %92, align 8, !tbaa !26
  %94 = sext i16 %93 to i32
  %95 = icmp eq i32 %94, 2
  br i1 %95, label %96, label %218

96:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %97 = load ptr, ptr %17, align 8, !tbaa !5
  %98 = load ptr, ptr %14, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %98, i32 0, i32 2
  %100 = load i32, ptr %99, align 8, !tbaa !27
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds i8, ptr %97, i64 %101
  %103 = load i32, ptr %20, align 4, !tbaa !25
  %104 = sext i32 %103 to i64
  %105 = udiv i64 %104, 32
  %106 = getelementptr inbounds i32, ptr %102, i64 %105
  %107 = load i32, ptr %106, align 4, !tbaa !25
  %108 = load i32, ptr %20, align 4, !tbaa !25
  %109 = sext i32 %108 to i64
  %110 = urem i64 %109, 32
  %111 = sub i64 31, %110
  %112 = trunc i64 %111 to i32
  %113 = shl i32 1, %112
  %114 = and i32 %107, %113
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %116, label %123

116:                                              ; preds = %96
  br label %117

117:                                              ; preds = %116
  %118 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %118, align 8, !tbaa !18
  %119 = load i64, ptr %19, align 8, !tbaa !9
  %120 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %119, ptr %120, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %215

121:                                              ; No predecessors!
  br label %122

122:                                              ; preds = %121
  br label %123

123:                                              ; preds = %122, %96
  %124 = load ptr, ptr %15, align 8, !tbaa !5
  %125 = load i32, ptr %20, align 4, !tbaa !25
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %124, i64 %126
  store ptr %127, ptr %25, align 8, !tbaa !5
  %128 = load ptr, ptr %25, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %128, i32 0, i32 0
  %130 = load i32, ptr %129, align 8, !tbaa !28
  %131 = and i32 %130, 1
  %132 = icmp ne i32 %131, 0
  br i1 %132, label %133, label %140

133:                                              ; preds = %123
  %134 = load ptr, ptr %17, align 8, !tbaa !5
  %135 = load ptr, ptr %25, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %135, i32 0, i32 2
  %137 = load i32, ptr %136, align 8, !tbaa !30
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds i8, ptr %134, i64 %138
  store ptr %139, ptr %28, align 8, !tbaa !5
  br label %147

140:                                              ; preds = %123
  %141 = load ptr, ptr %17, align 8, !tbaa !5
  %142 = load ptr, ptr %25, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %142, i32 0, i32 2
  %144 = load i32, ptr %143, align 8, !tbaa !30
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds i8, ptr %141, i64 %145
  store ptr %146, ptr %27, align 8, !tbaa !5
  store ptr %27, ptr %28, align 8, !tbaa !5
  br label %147

147:                                              ; preds = %140, %133
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #5
  %148 = load ptr, ptr %25, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %148, i32 0, i32 5
  %150 = load ptr, ptr %149, align 8, !tbaa !31
  %151 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %150, i32 0, i32 7
  %152 = load ptr, ptr %151, align 8, !tbaa !32
  %153 = load ptr, ptr %8, align 8, !tbaa !5
  %154 = load ptr, ptr %25, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %154, i32 0, i32 5
  %156 = load ptr, ptr %155, align 8, !tbaa !31
  %157 = load ptr, ptr %28, align 8, !tbaa !5
  %158 = load ptr, ptr %25, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %158, i32 0, i32 9
  %160 = load ptr, ptr %159, align 8, !tbaa !33
  %161 = load ptr, ptr %12, align 8, !tbaa !5
  %162 = load i64, ptr %13, align 8, !tbaa !9
  %163 = call { i32, i64 } %152(ptr noundef %153, ptr noundef %156, ptr noundef %157, ptr noundef %160, ptr noundef %161, i64 noundef %162)
  %164 = getelementptr inbounds { i32, i64 }, ptr %29, i32 0, i32 0
  %165 = extractvalue { i32, i64 } %163, 0
  store i32 %165, ptr %164, align 8
  %166 = getelementptr inbounds { i32, i64 }, ptr %29, i32 0, i32 1
  %167 = extractvalue { i32, i64 } %163, 1
  store i64 %167, ptr %166, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %26, ptr align 8 %29, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  br label %168

168:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %169 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %26, i32 0, i32 1
  %170 = load i64, ptr %169, align 8, !tbaa !20
  store i64 %170, ptr %30, align 8, !tbaa !9
  %171 = load ptr, ptr %12, align 8, !tbaa !5
  %172 = load i64, ptr %30, align 8, !tbaa !9
  %173 = getelementptr inbounds i8, ptr %171, i64 %172
  store ptr %173, ptr %12, align 8, !tbaa !5
  %174 = load i64, ptr %30, align 8, !tbaa !9
  %175 = load i64, ptr %13, align 8, !tbaa !9
  %176 = sub i64 %175, %174
  store i64 %176, ptr %13, align 8, !tbaa !9
  %177 = load i64, ptr %30, align 8, !tbaa !9
  %178 = load i64, ptr %19, align 8, !tbaa !9
  %179 = add i64 %178, %177
  store i64 %179, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  br label %180

180:                                              ; preds = %168
  br label %181

181:                                              ; preds = %180
  %182 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %26, i32 0, i32 0
  %183 = load i32, ptr %182, align 8, !tbaa !18
  %184 = icmp ne i32 %183, 0
  br i1 %184, label %185, label %194

185:                                              ; preds = %181
  br label %186

186:                                              ; preds = %185
  %187 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %26, i32 0, i32 0
  %188 = load i32, ptr %187, align 8, !tbaa !18
  %189 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 %188, ptr %189, align 8, !tbaa !18
  %190 = load i64, ptr %19, align 8, !tbaa !9
  %191 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %190, ptr %191, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %215

192:                                              ; No predecessors!
  br label %193

193:                                              ; preds = %192
  br label %194

194:                                              ; preds = %193, %181
  %195 = load ptr, ptr %18, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %195, i32 0, i32 0
  store i16 1, ptr %196, align 8, !tbaa !26
  %197 = load i32, ptr %20, align 4, !tbaa !25
  %198 = sext i32 %197 to i64
  %199 = urem i64 %198, 32
  %200 = sub i64 31, %199
  %201 = trunc i64 %200 to i32
  %202 = shl i32 1, %201
  %203 = load ptr, ptr %17, align 8, !tbaa !5
  %204 = load ptr, ptr %14, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %204, i32 0, i32 2
  %206 = load i32, ptr %205, align 8, !tbaa !27
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds i8, ptr %203, i64 %207
  %209 = load i32, ptr %20, align 4, !tbaa !25
  %210 = sext i32 %209 to i64
  %211 = udiv i64 %210, 32
  %212 = getelementptr inbounds i32, ptr %208, i64 %211
  %213 = load i32, ptr %212, align 4, !tbaa !25
  %214 = or i32 %213, %202
  store i32 %214, ptr %212, align 4, !tbaa !25
  store i32 0, ptr %21, align 4
  br label %215

215:                                              ; preds = %194, %186, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #5
  %216 = load i32, ptr %21, align 4
  switch i32 %216, label %460 [
    i32 0, label %217
  ]

217:                                              ; preds = %215
  br label %218

218:                                              ; preds = %217, %90
  %219 = load ptr, ptr %18, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %219, i32 0, i32 2
  %221 = load ptr, ptr %12, align 8, !tbaa !5
  %222 = load i64, ptr %13, align 8, !tbaa !9
  %223 = call i64 @xer_next_token(ptr noundef %220, ptr noundef %221, i64 noundef %222, ptr noundef %22)
  store i64 %223, ptr %23, align 8, !tbaa !9
  %224 = load i64, ptr %23, align 8, !tbaa !9
  %225 = icmp eq i64 %224, -1
  br i1 %225, label %226, label %233

226:                                              ; preds = %218
  br label %227

227:                                              ; preds = %226
  %228 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %228, align 8, !tbaa !18
  %229 = load i64, ptr %19, align 8, !tbaa !9
  %230 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %229, ptr %230, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %460

231:                                              ; No predecessors!
  br label %232

232:                                              ; preds = %231
  br label %257

233:                                              ; preds = %218
  %234 = load i32, ptr %22, align 4, !tbaa !25
  switch i32 %234, label %256 [
    i32 0, label %235
    i32 3, label %242
    i32 2, label %242
    i32 1, label %256
  ]

235:                                              ; preds = %233
  br label %236

236:                                              ; preds = %235
  %237 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 1, ptr %237, align 8, !tbaa !18
  %238 = load i64, ptr %19, align 8, !tbaa !9
  %239 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %238, ptr %239, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %460

240:                                              ; No predecessors!
  br label %241

241:                                              ; preds = %240
  br label %242

242:                                              ; preds = %241, %233, %233
  br label %243

243:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %244 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %244, ptr %31, align 8, !tbaa !9
  %245 = load ptr, ptr %12, align 8, !tbaa !5
  %246 = load i64, ptr %31, align 8, !tbaa !9
  %247 = getelementptr inbounds i8, ptr %245, i64 %246
  store ptr %247, ptr %12, align 8, !tbaa !5
  %248 = load i64, ptr %31, align 8, !tbaa !9
  %249 = load i64, ptr %13, align 8, !tbaa !9
  %250 = sub i64 %249, %248
  store i64 %250, ptr %13, align 8, !tbaa !9
  %251 = load i64, ptr %31, align 8, !tbaa !9
  %252 = load i64, ptr %19, align 8, !tbaa !9
  %253 = add i64 %252, %251
  store i64 %253, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  br label %254

254:                                              ; preds = %243
  br label %255

255:                                              ; preds = %254
  store i32 5, ptr %21, align 4
  br label %460, !llvm.loop !35

256:                                              ; preds = %233, %233
  br label %257

257:                                              ; preds = %256, %232
  %258 = load ptr, ptr %12, align 8, !tbaa !5
  %259 = load i64, ptr %23, align 8, !tbaa !9
  %260 = trunc i64 %259 to i32
  %261 = load ptr, ptr %16, align 8, !tbaa !5
  %262 = call i32 @xer_check_tag(ptr noundef %258, i32 noundef %260, ptr noundef %261)
  store i32 %262, ptr %24, align 4, !tbaa !25
  %263 = load ptr, ptr %18, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %263, i32 0, i32 0
  %265 = load i16, ptr %264, align 8, !tbaa !26
  %266 = sext i16 %265 to i32
  %267 = icmp eq i32 %266, 3
  br i1 %267, label %268, label %303

268:                                              ; preds = %257
  %269 = load i32, ptr %24, align 4, !tbaa !25
  %270 = load ptr, ptr %18, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %270, i32 0, i32 4
  %272 = call i32 @xer_skip_unknown(i32 noundef %269, ptr noundef %271)
  switch i32 %272, label %302 [
    i32 -1, label %273
    i32 1, label %282
    i32 0, label %285
    i32 2, label %299
  ]

273:                                              ; preds = %268
  %274 = load ptr, ptr %18, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %274, i32 0, i32 0
  store i16 4, ptr %275, align 8, !tbaa !26
  br label %276

276:                                              ; preds = %273
  %277 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %277, align 8, !tbaa !18
  %278 = load i64, ptr %19, align 8, !tbaa !9
  %279 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %278, ptr %279, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %460

280:                                              ; No predecessors!
  br label %281

281:                                              ; preds = %280
  br label %282

282:                                              ; preds = %281, %268
  %283 = load ptr, ptr %18, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %283, i32 0, i32 0
  store i16 1, ptr %284, align 8, !tbaa !26
  br label %285

285:                                              ; preds = %282, %268
  br label %286

286:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %287 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %287, ptr %32, align 8, !tbaa !9
  %288 = load ptr, ptr %12, align 8, !tbaa !5
  %289 = load i64, ptr %32, align 8, !tbaa !9
  %290 = getelementptr inbounds i8, ptr %288, i64 %289
  store ptr %290, ptr %12, align 8, !tbaa !5
  %291 = load i64, ptr %32, align 8, !tbaa !9
  %292 = load i64, ptr %13, align 8, !tbaa !9
  %293 = sub i64 %292, %291
  store i64 %293, ptr %13, align 8, !tbaa !9
  %294 = load i64, ptr %32, align 8, !tbaa !9
  %295 = load i64, ptr %19, align 8, !tbaa !9
  %296 = add i64 %295, %294
  store i64 %296, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %297

297:                                              ; preds = %286
  br label %298

298:                                              ; preds = %297
  store i32 5, ptr %21, align 4
  br label %460, !llvm.loop !35

299:                                              ; preds = %268
  %300 = load ptr, ptr %18, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %300, i32 0, i32 0
  store i16 1, ptr %301, align 8, !tbaa !26
  br label %302

302:                                              ; preds = %299, %268
  br label %303

303:                                              ; preds = %302, %257
  %304 = load i32, ptr %24, align 4, !tbaa !25
  switch i32 %304, label %458 [
    i32 2, label %305
    i32 3, label %315
    i32 1, label %357
    i32 5, label %380
    i32 7, label %380
  ]

305:                                              ; preds = %303
  %306 = load ptr, ptr %18, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %306, i32 0, i32 0
  %308 = load i16, ptr %307, align 8, !tbaa !26
  %309 = sext i16 %308 to i32
  %310 = icmp eq i32 %309, 0
  br i1 %310, label %311, label %312

311:                                              ; preds = %305
  br label %459

312:                                              ; preds = %305
  %313 = load ptr, ptr %18, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %313, i32 0, i32 0
  store i16 0, ptr %314, align 8, !tbaa !26
  br label %315

315:                                              ; preds = %312, %303
  %316 = load ptr, ptr %18, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %316, i32 0, i32 0
  %318 = load i16, ptr %317, align 8, !tbaa !26
  %319 = sext i16 %318 to i32
  %320 = icmp eq i32 %319, 0
  br i1 %320, label %321, label %356

321:                                              ; preds = %315
  %322 = load ptr, ptr %9, align 8, !tbaa !5
  %323 = load ptr, ptr %17, align 8, !tbaa !5
  %324 = call i32 @_SET_is_populated(ptr noundef %322, ptr noundef %323)
  %325 = icmp ne i32 %324, 0
  br i1 %325, label %326, label %348

326:                                              ; preds = %321
  br label %327

327:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %328 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %328, ptr %33, align 8, !tbaa !9
  %329 = load ptr, ptr %12, align 8, !tbaa !5
  %330 = load i64, ptr %33, align 8, !tbaa !9
  %331 = getelementptr inbounds i8, ptr %329, i64 %330
  store ptr %331, ptr %12, align 8, !tbaa !5
  %332 = load i64, ptr %33, align 8, !tbaa !9
  %333 = load i64, ptr %13, align 8, !tbaa !9
  %334 = sub i64 %333, %332
  store i64 %334, ptr %13, align 8, !tbaa !9
  %335 = load i64, ptr %33, align 8, !tbaa !9
  %336 = load i64, ptr %19, align 8, !tbaa !9
  %337 = add i64 %336, %335
  store i64 %337, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %338

338:                                              ; preds = %327
  br label %339

339:                                              ; preds = %338
  %340 = load ptr, ptr %18, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %340, i32 0, i32 0
  store i16 4, ptr %341, align 8, !tbaa !26
  br label %342

342:                                              ; preds = %339
  %343 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %343, align 8, !tbaa !18
  %344 = load i64, ptr %19, align 8, !tbaa !9
  %345 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %344, ptr %345, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %460

346:                                              ; No predecessors!
  br label %347

347:                                              ; preds = %346
  br label %355

348:                                              ; preds = %321
  br label %349

349:                                              ; preds = %348
  %350 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %350, align 8, !tbaa !18
  %351 = load i64, ptr %19, align 8, !tbaa !9
  %352 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %351, ptr %352, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %460

353:                                              ; No predecessors!
  br label %354

354:                                              ; preds = %353
  br label %355

355:                                              ; preds = %354, %347
  br label %356

356:                                              ; preds = %355, %315
  br label %357

357:                                              ; preds = %356, %303
  %358 = load ptr, ptr %18, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %358, i32 0, i32 0
  %360 = load i16, ptr %359, align 8, !tbaa !26
  %361 = sext i16 %360 to i32
  %362 = icmp eq i32 %361, 0
  br i1 %362, label %363, label %379

363:                                              ; preds = %357
  br label %364

364:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %365 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %365, ptr %34, align 8, !tbaa !9
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = load i64, ptr %34, align 8, !tbaa !9
  %368 = getelementptr inbounds i8, ptr %366, i64 %367
  store ptr %368, ptr %12, align 8, !tbaa !5
  %369 = load i64, ptr %34, align 8, !tbaa !9
  %370 = load i64, ptr %13, align 8, !tbaa !9
  %371 = sub i64 %370, %369
  store i64 %371, ptr %13, align 8, !tbaa !9
  %372 = load i64, ptr %34, align 8, !tbaa !9
  %373 = load i64, ptr %19, align 8, !tbaa !9
  %374 = add i64 %373, %372
  store i64 %374, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %375

375:                                              ; preds = %364
  br label %376

376:                                              ; preds = %375
  %377 = load ptr, ptr %18, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %377, i32 0, i32 0
  store i16 1, ptr %378, align 8, !tbaa !26
  store i32 5, ptr %21, align 4
  br label %460, !llvm.loop !35

379:                                              ; preds = %357
  br label %380

380:                                              ; preds = %379, %303, %303
  %381 = load ptr, ptr %18, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %381, i32 0, i32 0
  %383 = load i16, ptr %382, align 8, !tbaa !26
  %384 = sext i16 %383 to i32
  %385 = icmp ne i32 %384, 1
  br i1 %385, label %386, label %387

386:                                              ; preds = %380
  br label %459

387:                                              ; preds = %380
  store i32 0, ptr %20, align 4, !tbaa !25
  br label %388

388:                                              ; preds = %418, %387
  %389 = load i32, ptr %20, align 4, !tbaa !25
  %390 = load ptr, ptr %9, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %390, i32 0, i32 18
  %392 = load i32, ptr %391, align 8, !tbaa !37
  %393 = icmp slt i32 %389, %392
  br i1 %393, label %394, label %421

394:                                              ; preds = %388
  %395 = load ptr, ptr %12, align 8, !tbaa !5
  %396 = load i64, ptr %23, align 8, !tbaa !9
  %397 = trunc i64 %396 to i32
  %398 = load ptr, ptr %15, align 8, !tbaa !5
  %399 = load i32, ptr %20, align 4, !tbaa !25
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %398, i64 %400
  %402 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %401, i32 0, i32 9
  %403 = load ptr, ptr %402, align 8, !tbaa !33
  %404 = call i32 @xer_check_tag(ptr noundef %395, i32 noundef %397, ptr noundef %403)
  switch i32 %404, label %413 [
    i32 3, label %405
    i32 1, label %405
    i32 5, label %412
    i32 7, label %412
  ]

405:                                              ; preds = %394, %394
  %406 = load i32, ptr %20, align 4, !tbaa !25
  %407 = trunc i32 %406 to i16
  %408 = load ptr, ptr %18, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %408, i32 0, i32 1
  store i16 %407, ptr %409, align 2, !tbaa !22
  %410 = load ptr, ptr %18, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %410, i32 0, i32 0
  store i16 2, ptr %411, align 8, !tbaa !26
  br label %417

412:                                              ; preds = %394, %394
  br label %418

413:                                              ; preds = %394
  %414 = load ptr, ptr %9, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %414, i32 0, i32 18
  %416 = load i32, ptr %415, align 8, !tbaa !37
  store i32 %416, ptr %20, align 4, !tbaa !25
  br label %417

417:                                              ; preds = %413, %405
  br label %421

418:                                              ; preds = %412
  %419 = load i32, ptr %20, align 4, !tbaa !25
  %420 = add nsw i32 %419, 1
  store i32 %420, ptr %20, align 4, !tbaa !25
  br label %388, !llvm.loop !38

421:                                              ; preds = %417, %388
  %422 = load i32, ptr %20, align 4, !tbaa !25
  %423 = load ptr, ptr %9, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %423, i32 0, i32 18
  %425 = load i32, ptr %424, align 8, !tbaa !37
  %426 = icmp ne i32 %422, %425
  br i1 %426, label %427, label %428

427:                                              ; preds = %421
  store i32 5, ptr %21, align 4
  br label %460, !llvm.loop !35

428:                                              ; preds = %421
  %429 = load ptr, ptr %14, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.asn_SET_specifics_s, ptr %429, i32 0, i32 7
  %431 = load i32, ptr %430, align 4, !tbaa !39
  %432 = icmp ne i32 %431, 0
  br i1 %432, label %433, label %457

433:                                              ; preds = %428
  %434 = load i32, ptr %24, align 4, !tbaa !25
  %435 = and i32 %434, 2
  %436 = icmp ne i32 %435, 0
  br i1 %436, label %437, label %438

437:                                              ; preds = %433
  br label %443

438:                                              ; preds = %433
  %439 = load ptr, ptr %18, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %439, i32 0, i32 4
  store i64 1, ptr %440, align 8, !tbaa !40
  %441 = load ptr, ptr %18, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %441, i32 0, i32 0
  store i16 3, ptr %442, align 8, !tbaa !26
  br label %443

443:                                              ; preds = %438, %437
  br label %444

444:                                              ; preds = %443
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %445 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %445, ptr %35, align 8, !tbaa !9
  %446 = load ptr, ptr %12, align 8, !tbaa !5
  %447 = load i64, ptr %35, align 8, !tbaa !9
  %448 = getelementptr inbounds i8, ptr %446, i64 %447
  store ptr %448, ptr %12, align 8, !tbaa !5
  %449 = load i64, ptr %35, align 8, !tbaa !9
  %450 = load i64, ptr %13, align 8, !tbaa !9
  %451 = sub i64 %450, %449
  store i64 %451, ptr %13, align 8, !tbaa !9
  %452 = load i64, ptr %35, align 8, !tbaa !9
  %453 = load i64, ptr %19, align 8, !tbaa !9
  %454 = add i64 %453, %452
  store i64 %454, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  br label %455

455:                                              ; preds = %444
  br label %456

456:                                              ; preds = %455
  store i32 5, ptr %21, align 4
  br label %460, !llvm.loop !35

457:                                              ; preds = %428
  br label %458

458:                                              ; preds = %457, %303
  br label %459

459:                                              ; preds = %458, %386, %311
  store i32 4, ptr %21, align 4
  br label %460

460:                                              ; preds = %459, %456, %427, %376, %349, %342, %298, %276, %255, %236, %227, %215
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  %461 = load i32, ptr %21, align 4
  switch i32 %461, label %471 [
    i32 5, label %84
    i32 4, label %462
  ]

462:                                              ; preds = %460, %84
  %463 = load ptr, ptr %18, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %463, i32 0, i32 0
  store i16 4, ptr %464, align 8, !tbaa !26
  br label %465

465:                                              ; preds = %462
  %466 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %466, align 8, !tbaa !18
  %467 = load i64, ptr %19, align 8, !tbaa !9
  %468 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %467, ptr %468, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %471

469:                                              ; No predecessors!
  br label %470

470:                                              ; preds = %469
  store i32 0, ptr %21, align 4
  br label %471

471:                                              ; preds = %470, %465, %460, %66
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, 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
  %472 = load i32, ptr %21, align 4
  switch i32 %472, label %475 [
    i32 0, label %473
    i32 1, label %473
  ]

473:                                              ; preds = %471, %471
  %474 = load { i32, i64 }, ptr %7, align 8
  ret { i32, i64 } %474

475:                                              ; preds = %471
  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 136}
!15 = !{!12, !6, i64 8}
!16 = !{!17, !13, i64 0}
!17 = !{!"asn_SET_specifics_s", !13, i64 0, !13, i64 4, !13, i64 8, !6, i64 16, !13, i64 24, !6, i64 32, !13, i64 40, !13, i64 44, !6, i64 48}
!18 = !{!19, !13, i64 0}
!19 = !{!"asn_dec_rval_s", !13, i64 0, !10, i64 8}
!20 = !{!19, !10, i64 8}
!21 = !{!17, !13, i64 4}
!22 = !{!23, !24, i64 2}
!23 = !{!"asn_struct_ctx_s", !24, i64 0, !24, i64 2, !13, i64 4, !6, i64 8, !10, i64 16}
!24 = !{!"short", !7, i64 0}
!25 = !{!13, !13, i64 0}
!26 = !{!23, !24, i64 0}
!27 = !{!17, !13, i64 8}
!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, !25, i64 8, i64 8, !9}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = !{!12, !13, i64 144}
!38 = distinct !{!38, !36}
!39 = !{!17, !13, i64 44}
!40 = !{!23, !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 i32 @_SET_is_populated(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @SET_decode_xer(ptr noundef %0, ptr noundef %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
  %11 = getelementptr inbounds i8, ptr %1, i64 136
  %12 = load ptr, ptr %11, align 8, !tbaa !11
  %.not = icmp eq ptr %3, null
  br i1 %.not, label %13, label %16

13:                                               ; preds = %6
  %14 = getelementptr inbounds i8, ptr %1, i64 8
  %15 = load ptr, ptr %14, align 8, !tbaa !12
  br label %16

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

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

25:                                               ; preds = %20, %16
  %.0138 = phi ptr [ %23, %20 ], [ %18, %16 ]
  %26 = getelementptr inbounds i8, ptr %10, i64 4
  %27 = load i32, ptr %26, align 4, !tbaa !16
  %28 = sext i32 %27 to i64
  %29 = getelementptr inbounds i8, ptr %.0138, i64 %28
  %30 = getelementptr inbounds i8, ptr %29, i64 2
  %31 = load i16, ptr %29, align 8, !tbaa !17
  %32 = icmp slt i16 %31, 4
  br i1 %32, label %.lr.ph222, label %.loopexit194

.lr.ph222:                                        ; preds = %25
  %33 = load i16, ptr %30, align 2, !tbaa !21
  %34 = sext i16 %33 to i32
  %35 = getelementptr inbounds i8, ptr %10, i64 8
  %36 = getelementptr inbounds i8, ptr %29, i64 4
  %37 = getelementptr inbounds i8, ptr %29, i64 16
  %38 = getelementptr inbounds i8, ptr %1, i64 144
  %39 = getelementptr inbounds i8, ptr %10, i64 44
  br label %40

40:                                               ; preds = %.lr.ph222, %148
  %41 = phi i16 [ %31, %.lr.ph222 ], [ %149, %148 ]
  %.0221 = phi ptr [ %4, %.lr.ph222 ], [ %.3, %148 ]
  %.0134220 = phi i64 [ %5, %.lr.ph222 ], [ %.3137, %148 ]
  %.0139219 = phi i64 [ 0, %.lr.ph222 ], [ %.3142, %148 ]
  %.0143218 = phi i32 [ %34, %.lr.ph222 ], [ %.4147, %148 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %42 = icmp eq i16 %41, 2
  br i1 %42, label %43, label %84

43:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  %44 = load i32, ptr %35, align 8, !tbaa !22
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds i8, ptr %.0138, i64 %45
  %47 = sext i32 %.0143218 to i64
  %48 = lshr i64 %47, 5
  %49 = getelementptr inbounds i32, ptr %46, i64 %48
  %50 = load i32, ptr %49, align 4, !tbaa !23
  %51 = and i32 %.0143218, 31
  %52 = xor i32 %51, 31
  %53 = shl nuw i32 1, %52
  %54 = and i32 %50, %53
  %.not156 = icmp eq i32 %54, 0
  br i1 %.not156, label %55, label %.thread

55:                                               ; preds = %43
  %56 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %12, i64 %47
  %57 = load i32, ptr %56, align 8, !tbaa !24
  %58 = and i32 %57, 1
  %.not157 = icmp eq i32 %58, 0
  %59 = getelementptr inbounds i8, ptr %56, i64 8
  %60 = load i32, ptr %59, align 8, !tbaa !26
  %61 = sext i32 %60 to i64
  %62 = getelementptr inbounds i8, ptr %.0138, i64 %61
  br i1 %.not157, label %63, label %64

63:                                               ; preds = %55
  store ptr %62, ptr %8, align 8, !tbaa !13
  br label %64

64:                                               ; preds = %55, %63
  %.0150 = phi ptr [ %8, %63 ], [ %62, %55 ]
  %65 = getelementptr inbounds i8, ptr %56, i64 24
  %66 = load ptr, ptr %65, align 8, !tbaa !27
  %67 = getelementptr inbounds i8, ptr %66, i64 56
  %68 = load ptr, ptr %67, align 8, !tbaa !28
  %69 = getelementptr inbounds i8, ptr %56, i64 56
  %70 = load ptr, ptr %69, align 8, !tbaa !29
  %71 = call { i32, i64 } %68(ptr noundef %0, ptr noundef %66, ptr noundef nonnull %.0150, ptr noundef %70, ptr noundef %.0221, i64 noundef %.0134220) #5
  %72 = extractvalue { i32, i64 } %71, 0
  %73 = extractvalue { i32, i64 } %71, 1
  %74 = add i64 %73, %.0139219
  %.not158 = icmp eq i32 %72, 0
  br i1 %.not158, label %75, label %.thread

.thread:                                          ; preds = %43, %64
  %.sroa.0133.1.ph = phi i32 [ %72, %64 ], [ 2, %43 ]
  %.sroa.10.1.ph = phi i64 [ %74, %64 ], [ %.0139219, %43 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  br label %.thread177

75:                                               ; preds = %64
  %76 = sub i64 %.0134220, %73
  %77 = getelementptr inbounds i8, ptr %.0221, i64 %73
  store i16 1, ptr %29, align 8, !tbaa !17
  %78 = load i32, ptr %35, align 8, !tbaa !22
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds i8, ptr %.0138, i64 %79
  %81 = getelementptr inbounds i32, ptr %80, i64 %48
  %82 = load i32, ptr %81, align 4, !tbaa !23
  %83 = or i32 %82, %53
  store i32 %83, ptr %81, align 4, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  br label %84

84:                                               ; preds = %75, %40
  %.2141 = phi i64 [ %74, %75 ], [ %.0139219, %40 ]
  %.2136 = phi i64 [ %76, %75 ], [ %.0134220, %40 ]
  %.2 = phi ptr [ %77, %75 ], [ %.0221, %40 ]
  %85 = call i64 @xer_next_token(ptr noundef nonnull %36, ptr noundef %.2, i64 noundef %.2136, ptr noundef nonnull %7) #5
  %86 = icmp eq i64 %85, -1
  br i1 %86, label %.thread177, label %87

87:                                               ; preds = %84
  %88 = load i32, ptr %7, align 4, !tbaa !23
  switch i32 %88, label %93 [
    i32 0, label %.thread177
    i32 3, label %89
    i32 2, label %89
  ]

89:                                               ; preds = %87, %87
  %90 = getelementptr inbounds i8, ptr %.2, i64 %85
  %91 = sub i64 %.2136, %85
  %92 = add i64 %85, %.2141
  br label %148, !llvm.loop !30

93:                                               ; preds = %87
  %94 = trunc i64 %85 to i32
  %95 = call i32 @xer_check_tag(ptr noundef %.2, i32 noundef %94, ptr noundef %17) #5
  %96 = load i16, ptr %29, align 8, !tbaa !17
  %97 = icmp eq i16 %96, 3
  br i1 %97, label %98, label %107

98:                                               ; preds = %93
  %99 = call i32 @xer_skip_unknown(i32 noundef %95, ptr noundef nonnull %37) #5
  switch i32 %99, label %107 [
    i32 -1, label %100
    i32 1, label %101
    i32 0, label %102
    i32 2, label %106
  ]

100:                                              ; preds = %98
  store i16 4, ptr %29, align 8, !tbaa !17
  br label %.thread177

101:                                              ; preds = %98
  store i16 1, ptr %29, align 8, !tbaa !17
  br label %102

102:                                              ; preds = %98, %101
  %103 = getelementptr inbounds i8, ptr %.2, i64 %85
  %104 = sub i64 %.2136, %85
  %105 = add i64 %85, %.2141
  br label %148, !llvm.loop !30

106:                                              ; preds = %98
  store i16 1, ptr %29, align 8, !tbaa !17
  br label %107

107:                                              ; preds = %98, %106, %93
  switch i32 %95, label %.thread186 [
    i32 2, label %108
    i32 3, label %111
    i32 1, label %116
    i32 5, label %thread-pre-split174
    i32 7, label %thread-pre-split174
  ]

108:                                              ; preds = %107
  %109 = load i16, ptr %29, align 8, !tbaa !17
  %110 = icmp eq i16 %109, 0
  br i1 %110, label %.thread186, label %.thread170

.thread170:                                       ; preds = %108
  store i16 0, ptr %29, align 8, !tbaa !17
  br label %.loopexit195

111:                                              ; preds = %107
  %.pr = load i16, ptr %29, align 8, !tbaa !17
  %112 = icmp eq i16 %.pr, 0
  br i1 %112, label %.loopexit195, label %.thread173

.loopexit195:                                     ; preds = %111, %.thread170
  %113 = call i32 @_SET_is_populated(ptr noundef %1, ptr noundef nonnull %.0138)
  %.not163 = icmp eq i32 %113, 0
  br i1 %.not163, label %.thread177, label %114

114:                                              ; preds = %.loopexit195
  %115 = add i64 %85, %.2141
  store i16 4, ptr %29, align 8, !tbaa !17
  br label %.thread177

116:                                              ; preds = %107
  %.pr172 = load i16, ptr %29, align 8, !tbaa !17
  %117 = icmp eq i16 %.pr172, 0
  br i1 %117, label %118, label %.thread173

118:                                              ; preds = %116
  %119 = getelementptr inbounds i8, ptr %.2, i64 %85
  %120 = sub i64 %.2136, %85
  %121 = add i64 %85, %.2141
  store i16 1, ptr %29, align 8, !tbaa !17
  br label %148, !llvm.loop !30

thread-pre-split174:                              ; preds = %107, %107
  %.pr175 = load i16, ptr %29, align 8, !tbaa !17
  br label %.thread173

.thread173:                                       ; preds = %111, %thread-pre-split174, %116
  %122 = phi i16 [ %.pr175, %thread-pre-split174 ], [ %.pr172, %116 ], [ %.pr, %111 ]
  %.not159 = icmp eq i16 %122, 1
  br i1 %.not159, label %.preheader, label %.thread186

.preheader:                                       ; preds = %.thread173
  %123 = load i32, ptr %38, align 8, !tbaa !32
  %124 = icmp sgt i32 %123, 0
  br i1 %124, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %.preheader, %132
  %indvars.iv = phi i64 [ %indvars.iv.next, %132 ], [ 0, %.preheader ]
  %125 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %12, i64 %indvars.iv, i32 9
  %126 = load ptr, ptr %125, align 8, !tbaa !29
  %127 = call i32 @xer_check_tag(ptr noundef %.2, i32 noundef %94, ptr noundef %126) #5
  switch i32 %127, label %.loopexit.thread [
    i32 3, label %128
    i32 1, label %128
    i32 5, label %132
    i32 7, label %132
  ]

128:                                              ; preds = %.lr.ph, %.lr.ph
  %129 = trunc nuw nsw i64 %indvars.iv to i32
  %130 = trunc i64 %indvars.iv to i16
  store i16 %130, ptr %30, align 2, !tbaa !21
  store i16 2, ptr %29, align 8, !tbaa !17
  %.pre = load i32, ptr %38, align 8, !tbaa !32
  br label %.loopexit

.loopexit.thread:                                 ; preds = %.lr.ph
  %131 = load i32, ptr %38, align 8, !tbaa !32
  br label %138

132:                                              ; preds = %.lr.ph, %.lr.ph
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %133 = load i32, ptr %38, align 8, !tbaa !32
  %134 = sext i32 %133 to i64
  %135 = icmp slt i64 %indvars.iv.next, %134
  br i1 %135, label %.lr.ph, label %.loopexit.loopexit, !llvm.loop !33

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

.loopexit:                                        ; preds = %.loopexit.loopexit, %.preheader, %128
  %137 = phi i32 [ %.pre, %128 ], [ %123, %.preheader ], [ %133, %.loopexit.loopexit ]
  %.2145 = phi i32 [ %129, %128 ], [ 0, %.preheader ], [ %136, %.loopexit.loopexit ]
  %.not160 = icmp eq i32 %.2145, %137
  br i1 %.not160, label %138, label %148, !llvm.loop !30

138:                                              ; preds = %.loopexit.thread, %.loopexit
  %139 = phi i32 [ %131, %.loopexit.thread ], [ %137, %.loopexit ]
  %140 = load i32, ptr %39, align 4, !tbaa !34
  %.not161 = icmp eq i32 %140, 0
  br i1 %.not161, label %.thread186, label %141

141:                                              ; preds = %138
  %142 = and i32 %95, 2
  %.not162 = icmp eq i32 %142, 0
  br i1 %.not162, label %143, label %144

143:                                              ; preds = %141
  store i64 1, ptr %37, align 8, !tbaa !35
  store i16 3, ptr %29, align 8, !tbaa !17
  br label %144

144:                                              ; preds = %143, %141
  %145 = getelementptr inbounds i8, ptr %.2, i64 %85
  %146 = sub i64 %.2136, %85
  %147 = add i64 %85, %.2141
  br label %148, !llvm.loop !30

.thread177:                                       ; preds = %84, %87, %114, %100, %.loopexit195, %.thread
  %.sroa.0133.3.ph = phi i32 [ %.sroa.0133.1.ph, %.thread ], [ 2, %.loopexit195 ], [ 2, %100 ], [ 0, %114 ], [ 2, %84 ], [ 1, %87 ]
  %.sroa.10.3.ph = phi i64 [ %.sroa.10.1.ph, %.thread ], [ %.2141, %.loopexit195 ], [ %.2141, %100 ], [ %115, %114 ], [ %.2141, %87 ], [ %.2141, %84 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br label %151

.thread186:                                       ; preds = %107, %138, %.thread173, %108
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br label %.loopexit194

148:                                              ; preds = %.loopexit, %144, %118, %102, %89
  %.4147 = phi i32 [ %139, %144 ], [ %.0143218, %118 ], [ %.0143218, %102 ], [ %.0143218, %89 ], [ %.2145, %.loopexit ]
  %.3142 = phi i64 [ %147, %144 ], [ %121, %118 ], [ %105, %102 ], [ %92, %89 ], [ %.2141, %.loopexit ]
  %.3137 = phi i64 [ %146, %144 ], [ %120, %118 ], [ %104, %102 ], [ %91, %89 ], [ %.2136, %.loopexit ]
  %.3 = phi ptr [ %145, %144 ], [ %119, %118 ], [ %103, %102 ], [ %90, %89 ], [ %.2, %.loopexit ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  %149 = load i16, ptr %29, align 8, !tbaa !17
  %150 = icmp slt i16 %149, 4
  br i1 %150, label %40, label %.loopexit194

.loopexit194:                                     ; preds = %148, %25, %.thread186
  %.4 = phi i64 [ %.2141, %.thread186 ], [ 0, %25 ], [ %.3142, %148 ]
  store i16 4, ptr %29, align 8, !tbaa !17
  br label %151

151:                                              ; preds = %.thread177, %20, %.loopexit194
  %.sroa.0133.4 = phi i32 [ 2, %.loopexit194 ], [ 2, %20 ], [ %.sroa.0133.3.ph, %.thread177 ]
  %.sroa.10.4 = phi i64 [ %.4, %.loopexit194 ], [ 0, %20 ], [ %.sroa.10.3.ph, %.thread177 ]
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.0133.4, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.10.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 136}
!12 = !{!6, !7, i64 8}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !10, i64 0}
!15 = !{!"asn_SET_specifics_s", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 16, !10, i64 24, !7, i64 32, !10, i64 40, !10, i64 44, !7, i64 48}
!16 = !{!15, !10, i64 4}
!17 = !{!18, !19, i64 0}
!18 = !{!"asn_struct_ctx_s", !19, i64 0, !19, i64 2, !10, i64 4, !7, i64 8, !20, i64 16}
!19 = !{!"short", !8, i64 0}
!20 = !{!"long", !8, i64 0}
!21 = !{!18, !19, i64 2}
!22 = !{!15, !10, i64 8}
!23 = !{!10, !10, i64 0}
!24 = !{!25, !10, i64 0}
!25 = !{!"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}
!26 = !{!25, !10, i64 8}
!27 = !{!25, !7, i64 24}
!28 = !{!6, !7, i64 56}
!29 = !{!25, !7, i64 56}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!6, !10, i64 144}
!33 = distinct !{!33, !31}
!34 = !{!15, !10, i64 44}
!35 = !{!18, !20, 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