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

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

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

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

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

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

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

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

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

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

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

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

62:                                               ; preds = %53
  br label %63

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

67:                                               ; No predecessors!
  br label %68

68:                                               ; preds = %67
  br label %69

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

70:                                               ; preds = %69, %47
  %71 = load ptr, ptr %14, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %71, i32 0, i32 2
  %73 = load i32, ptr %72, align 4, !tbaa !21
  %74 = icmp ne i32 %73, 0
  br i1 %74, label %75, label %82

75:                                               ; preds = %70
  %76 = load ptr, ptr %14, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %76, i32 0, i32 2
  %78 = load i32, ptr %77, align 4, !tbaa !21
  %79 = icmp eq i32 %78, 1
  %80 = zext i1 %79 to i64
  %81 = select i1 %79, ptr null, ptr @.str
  store ptr %81, ptr %16, align 8, !tbaa !5
  br label %101

82:                                               ; preds = %70
  %83 = load ptr, ptr %15, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %83, i32 0, i32 9
  %85 = load ptr, ptr %84, align 8, !tbaa !22
  %86 = load i8, ptr %85, align 1, !tbaa !24
  %87 = sext i8 %86 to i32
  %88 = icmp ne i32 %87, 0
  br i1 %88, label %89, label %93

89:                                               ; preds = %82
  %90 = load ptr, ptr %15, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %90, i32 0, i32 9
  %92 = load ptr, ptr %91, align 8, !tbaa !22
  br label %99

93:                                               ; preds = %82
  %94 = load ptr, ptr %15, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %94, i32 0, i32 5
  %96 = load ptr, ptr %95, align 8, !tbaa !25
  %97 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %96, i32 0, i32 1
  %98 = load ptr, ptr %97, align 8, !tbaa !15
  br label %99

99:                                               ; preds = %93, %89
  %100 = phi ptr [ %92, %89 ], [ %98, %93 ]
  store ptr %100, ptr %16, align 8, !tbaa !5
  br label %101

101:                                              ; preds = %99, %75
  %102 = load ptr, ptr %18, align 8, !tbaa !5
  %103 = load ptr, ptr %14, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %103, i32 0, i32 1
  %105 = load i32, ptr %104, align 4, !tbaa !26
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds i8, ptr %102, i64 %106
  store ptr %107, ptr %19, align 8, !tbaa !5
  br label %108

108:                                              ; preds = %327, %101
  %109 = load ptr, ptr %19, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %109, i32 0, i32 0
  %111 = load i16, ptr %110, align 8, !tbaa !27
  %112 = sext i16 %111 to i32
  %113 = icmp sle i32 %112, 2
  br i1 %113, label %114, label %329

114:                                              ; preds = %108
  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
  %115 = load ptr, ptr %19, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %115, i32 0, i32 0
  %117 = load i16, ptr %116, align 8, !tbaa !27
  %118 = sext i16 %117 to i32
  %119 = icmp eq i32 %118, 2
  br i1 %119, label %120, label %207

120:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #5
  %121 = load ptr, ptr %15, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %121, i32 0, i32 5
  %123 = load ptr, ptr %122, align 8, !tbaa !25
  %124 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %123, i32 0, i32 7
  %125 = load ptr, ptr %124, align 8, !tbaa !30
  %126 = load ptr, ptr %8, align 8, !tbaa !5
  %127 = load ptr, ptr %15, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %127, i32 0, i32 5
  %129 = load ptr, ptr %128, align 8, !tbaa !25
  %130 = load ptr, ptr %19, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %130, i32 0, i32 3
  %132 = load ptr, ptr %16, align 8, !tbaa !5
  %133 = load ptr, ptr %12, align 8, !tbaa !5
  %134 = load i64, ptr %13, align 8, !tbaa !9
  %135 = call { i32, i64 } %125(ptr noundef %126, ptr noundef %129, ptr noundef %131, ptr noundef %132, ptr noundef %133, i64 noundef %134)
  %136 = getelementptr inbounds { i32, i64 }, ptr %26, i32 0, i32 0
  %137 = extractvalue { i32, i64 } %135, 0
  store i32 %137, ptr %136, align 8
  %138 = getelementptr inbounds { i32, i64 }, ptr %26, i32 0, i32 1
  %139 = extractvalue { i32, i64 } %135, 1
  store i64 %139, ptr %138, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %26, i64 16, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #5
  %140 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %25, i32 0, i32 0
  %141 = load i32, ptr %140, align 8, !tbaa !18
  %142 = icmp eq i32 %141, 0
  br i1 %142, label %143, label %178

143:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %144 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %144, ptr %27, align 8, !tbaa !5
  %145 = load ptr, ptr %27, align 8, !tbaa !5
  %146 = load ptr, ptr %19, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %146, i32 0, i32 3
  %148 = load ptr, ptr %147, align 8, !tbaa !33
  %149 = call i32 @asn_set_add(ptr noundef %145, ptr noundef %148)
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %158

151:                                              ; preds = %143
  br label %152

152:                                              ; preds = %151
  %153 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %153, align 8, !tbaa !18
  %154 = load i64, ptr %20, align 8, !tbaa !9
  %155 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %154, ptr %155, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %175

156:                                              ; No predecessors!
  br label %157

157:                                              ; preds = %156
  br label %158

158:                                              ; preds = %157, %143
  %159 = load ptr, ptr %19, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %159, i32 0, i32 3
  store ptr null, ptr %160, align 8, !tbaa !33
  br label %161

161:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %162 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %25, i32 0, i32 1
  %163 = load i64, ptr %162, align 8, !tbaa !20
  store i64 %163, ptr %28, align 8, !tbaa !9
  %164 = load ptr, ptr %12, align 8, !tbaa !5
  %165 = load i64, ptr %28, align 8, !tbaa !9
  %166 = getelementptr inbounds i8, ptr %164, i64 %165
  store ptr %166, ptr %12, align 8, !tbaa !5
  %167 = load i64, ptr %28, align 8, !tbaa !9
  %168 = load i64, ptr %13, align 8, !tbaa !9
  %169 = sub i64 %168, %167
  store i64 %169, ptr %13, align 8, !tbaa !9
  %170 = load i64, ptr %28, align 8, !tbaa !9
  %171 = load i64, ptr %20, align 8, !tbaa !9
  %172 = add i64 %171, %170
  store i64 %172, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %173

173:                                              ; preds = %161
  br label %174

174:                                              ; preds = %173
  store i32 0, ptr %21, align 4
  br label %175

175:                                              ; preds = %174, %152
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  %176 = load i32, ptr %21, align 4
  switch i32 %176, label %204 [
    i32 0, label %177
  ]

177:                                              ; preds = %175
  br label %201

178:                                              ; preds = %120
  br label %179

179:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %180 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %25, i32 0, i32 1
  %181 = load i64, ptr %180, align 8, !tbaa !20
  store i64 %181, ptr %29, align 8, !tbaa !9
  %182 = load ptr, ptr %12, align 8, !tbaa !5
  %183 = load i64, ptr %29, align 8, !tbaa !9
  %184 = getelementptr inbounds i8, ptr %182, i64 %183
  store ptr %184, ptr %12, align 8, !tbaa !5
  %185 = load i64, ptr %29, align 8, !tbaa !9
  %186 = load i64, ptr %13, align 8, !tbaa !9
  %187 = sub i64 %186, %185
  store i64 %187, ptr %13, align 8, !tbaa !9
  %188 = load i64, ptr %29, align 8, !tbaa !9
  %189 = load i64, ptr %20, align 8, !tbaa !9
  %190 = add i64 %189, %188
  store i64 %190, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %191

191:                                              ; preds = %179
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192
  %194 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %25, i32 0, i32 0
  %195 = load i32, ptr %194, align 8, !tbaa !18
  %196 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 %195, ptr %196, align 8, !tbaa !18
  %197 = load i64, ptr %20, align 8, !tbaa !9
  %198 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %197, ptr %198, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %204

199:                                              ; No predecessors!
  br label %200

200:                                              ; preds = %199
  br label %201

201:                                              ; preds = %200, %177
  %202 = load ptr, ptr %19, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %202, i32 0, i32 0
  store i16 1, ptr %203, align 8, !tbaa !27
  store i32 0, ptr %21, align 4
  br label %204

204:                                              ; preds = %201, %193, %175
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  %205 = load i32, ptr %21, align 4
  switch i32 %205, label %327 [
    i32 0, label %206
  ]

206:                                              ; preds = %204
  br label %207

207:                                              ; preds = %206, %114
  %208 = load ptr, ptr %19, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %208, i32 0, i32 2
  %210 = load ptr, ptr %12, align 8, !tbaa !5
  %211 = load i64, ptr %13, align 8, !tbaa !9
  %212 = call i64 @xer_next_token(ptr noundef %209, ptr noundef %210, i64 noundef %211, ptr noundef %22)
  store i64 %212, ptr %23, align 8, !tbaa !9
  %213 = load i64, ptr %23, align 8, !tbaa !9
  %214 = icmp eq i64 %213, -1
  br i1 %214, label %215, label %222

215:                                              ; preds = %207
  br label %216

216:                                              ; preds = %215
  %217 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %217, align 8, !tbaa !18
  %218 = load i64, ptr %20, align 8, !tbaa !9
  %219 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %218, ptr %219, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %327

220:                                              ; No predecessors!
  br label %221

221:                                              ; preds = %220
  br label %246

222:                                              ; preds = %207
  %223 = load i32, ptr %22, align 4, !tbaa !32
  switch i32 %223, label %245 [
    i32 0, label %224
    i32 3, label %231
    i32 2, label %231
    i32 1, label %245
  ]

224:                                              ; preds = %222
  br label %225

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

229:                                              ; No predecessors!
  br label %230

230:                                              ; preds = %229
  br label %231

231:                                              ; preds = %230, %222, %222
  br label %232

232:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %233 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %233, ptr %30, align 8, !tbaa !9
  %234 = load ptr, ptr %12, align 8, !tbaa !5
  %235 = load i64, ptr %30, align 8, !tbaa !9
  %236 = getelementptr inbounds i8, ptr %234, i64 %235
  store ptr %236, ptr %12, align 8, !tbaa !5
  %237 = load i64, ptr %30, align 8, !tbaa !9
  %238 = load i64, ptr %13, align 8, !tbaa !9
  %239 = sub i64 %238, %237
  store i64 %239, ptr %13, align 8, !tbaa !9
  %240 = load i64, ptr %30, align 8, !tbaa !9
  %241 = load i64, ptr %20, align 8, !tbaa !9
  %242 = add i64 %241, %240
  store i64 %242, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  br label %243

243:                                              ; preds = %232
  br label %244

244:                                              ; preds = %243
  store i32 5, ptr %21, align 4
  br label %327, !llvm.loop !34

245:                                              ; preds = %222, %222
  br label %246

246:                                              ; preds = %245, %221
  %247 = load ptr, ptr %12, align 8, !tbaa !5
  %248 = load i64, ptr %23, align 8, !tbaa !9
  %249 = trunc i64 %248 to i32
  %250 = load ptr, ptr %17, align 8, !tbaa !5
  %251 = call i32 @xer_check_tag(ptr noundef %247, i32 noundef %249, ptr noundef %250)
  store i32 %251, ptr %24, align 4, !tbaa !32
  %252 = load i32, ptr %24, align 4, !tbaa !32
  switch i32 %252, label %325 [
    i32 2, label %253
    i32 3, label %263
    i32 1, label %292
    i32 5, label %315
    i32 7, label %315
  ]

253:                                              ; preds = %246
  %254 = load ptr, ptr %19, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %254, i32 0, i32 0
  %256 = load i16, ptr %255, align 8, !tbaa !27
  %257 = sext i16 %256 to i32
  %258 = icmp eq i32 %257, 0
  br i1 %258, label %259, label %260

259:                                              ; preds = %253
  br label %326

260:                                              ; preds = %253
  %261 = load ptr, ptr %19, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %261, i32 0, i32 0
  store i16 0, ptr %262, align 8, !tbaa !27
  br label %263

263:                                              ; preds = %260, %246
  %264 = load ptr, ptr %19, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %264, i32 0, i32 0
  %266 = load i16, ptr %265, align 8, !tbaa !27
  %267 = sext i16 %266 to i32
  %268 = icmp eq i32 %267, 0
  br i1 %268, label %269, label %291

269:                                              ; preds = %263
  br label %270

270:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %271 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %271, ptr %31, align 8, !tbaa !9
  %272 = load ptr, ptr %12, align 8, !tbaa !5
  %273 = load i64, ptr %31, align 8, !tbaa !9
  %274 = getelementptr inbounds i8, ptr %272, i64 %273
  store ptr %274, ptr %12, align 8, !tbaa !5
  %275 = load i64, ptr %31, align 8, !tbaa !9
  %276 = load i64, ptr %13, align 8, !tbaa !9
  %277 = sub i64 %276, %275
  store i64 %277, ptr %13, align 8, !tbaa !9
  %278 = load i64, ptr %31, align 8, !tbaa !9
  %279 = load i64, ptr %20, align 8, !tbaa !9
  %280 = add i64 %279, %278
  store i64 %280, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  br label %281

281:                                              ; preds = %270
  br label %282

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

285:                                              ; preds = %282
  %286 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 0, ptr %286, align 8, !tbaa !18
  %287 = load i64, ptr %20, align 8, !tbaa !9
  %288 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %287, ptr %288, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %327

289:                                              ; No predecessors!
  br label %290

290:                                              ; preds = %289
  br label %291

291:                                              ; preds = %290, %263
  br label %292

292:                                              ; preds = %291, %246
  %293 = load ptr, ptr %19, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %293, i32 0, i32 0
  %295 = load i16, ptr %294, align 8, !tbaa !27
  %296 = sext i16 %295 to i32
  %297 = icmp eq i32 %296, 0
  br i1 %297, label %298, label %314

298:                                              ; preds = %292
  br label %299

299:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %300 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %300, ptr %32, align 8, !tbaa !9
  %301 = load ptr, ptr %12, align 8, !tbaa !5
  %302 = load i64, ptr %32, align 8, !tbaa !9
  %303 = getelementptr inbounds i8, ptr %301, i64 %302
  store ptr %303, ptr %12, align 8, !tbaa !5
  %304 = load i64, ptr %32, align 8, !tbaa !9
  %305 = load i64, ptr %13, align 8, !tbaa !9
  %306 = sub i64 %305, %304
  store i64 %306, ptr %13, align 8, !tbaa !9
  %307 = load i64, ptr %32, align 8, !tbaa !9
  %308 = load i64, ptr %20, align 8, !tbaa !9
  %309 = add i64 %308, %307
  store i64 %309, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %310

310:                                              ; preds = %299
  br label %311

311:                                              ; preds = %310
  %312 = load ptr, ptr %19, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %312, i32 0, i32 0
  store i16 1, ptr %313, align 8, !tbaa !27
  store i32 5, ptr %21, align 4
  br label %327, !llvm.loop !34

314:                                              ; preds = %292
  br label %315

315:                                              ; preds = %314, %246, %246
  %316 = load ptr, ptr %19, 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 !27
  %319 = sext i16 %318 to i32
  %320 = icmp eq i32 %319, 1
  br i1 %320, label %321, label %324

321:                                              ; preds = %315
  %322 = load ptr, ptr %19, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %322, i32 0, i32 0
  store i16 2, ptr %323, align 8, !tbaa !27
  store i32 5, ptr %21, align 4
  br label %327, !llvm.loop !34

324:                                              ; preds = %315
  br label %326

325:                                              ; preds = %246
  br label %326

326:                                              ; preds = %325, %324, %259
  store i32 4, ptr %21, align 4
  br label %327

327:                                              ; preds = %326, %321, %311, %285, %244, %225, %216, %204
  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
  %328 = load i32, ptr %21, align 4
  switch i32 %328, label %338 [
    i32 5, label %108
    i32 4, label %329
  ]

329:                                              ; preds = %327, %108
  %330 = load ptr, ptr %19, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.asn_struct_ctx_s, ptr %330, i32 0, i32 0
  store i16 3, ptr %331, align 8, !tbaa !27
  br label %332

332:                                              ; preds = %329
  %333 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 0
  store i32 2, ptr %333, align 8, !tbaa !18
  %334 = load i64, ptr %20, align 8, !tbaa !9
  %335 = getelementptr inbounds %struct.asn_dec_rval_s, ptr %7, i32 0, i32 1
  store i64 %334, ptr %335, align 8, !tbaa !20
  store i32 1, ptr %21, align 4
  br label %338

336:                                              ; No predecessors!
  br label %337

337:                                              ; preds = %336
  store i32 0, ptr %21, align 4
  br label %338

338:                                              ; preds = %337, %332, %327, %63
  call void @llvm.lifetime.end.p0(i64 8, 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
  %339 = load i32, ptr %21, align 4
  switch i32 %339, label %342 [
    i32 0, label %340
    i32 1, label %340
  ]

340:                                              ; preds = %338, %338
  %341 = load { i32, i64 }, ptr %7, align 8
  ret { i32, i64 } %341

342:                                              ; preds = %338
  unreachable
}

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind allocsize(0,1) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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_OF_specifics_s", !13, i64 0, !13, i64 4, !13, i64 8}
!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 8}
!22 = !{!23, !6, i64 56}
!23 = !{!"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}
!24 = !{!7, !7, i64 0}
!25 = !{!23, !6, i64 24}
!26 = !{!17, !13, i64 4}
!27 = !{!28, !29, i64 0}
!28 = !{!"asn_struct_ctx_s", !29, i64 0, !29, i64 2, !13, i64 4, !6, i64 8, !10, i64 16}
!29 = !{!"short", !7, i64 0}
!30 = !{!12, !6, i64 56}
!31 = !{i64 0, i64 4, !32, i64 8, i64 8, !9}
!32 = !{!13, !13, i64 0}
!33 = !{!28, !6, i64 8}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}


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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local { i32, i64 } @SET_OF_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 #3 {
  %7 = alloca i32, align 4
  %8 = getelementptr inbounds i8, ptr %1, i64 152
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %1, i64 136
  %11 = load ptr, ptr %10, align 8, !tbaa !11
  %.not = icmp eq ptr %3, null
  br i1 %.not, label %12, label %15

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

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

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

24:                                               ; preds = %19, %15
  %.0102 = phi ptr [ %22, %19 ], [ %17, %15 ]
  %25 = getelementptr inbounds i8, ptr %9, i64 8
  %26 = load i32, ptr %25, align 4, !tbaa !16
  %.not117 = icmp eq i32 %26, 0
  br i1 %.not117, label %30, label %27

27:                                               ; preds = %24
  %28 = icmp eq i32 %26, 1
  %29 = select i1 %28, ptr null, ptr @.str
  br label %39

30:                                               ; preds = %24
  %31 = getelementptr inbounds i8, ptr %11, i64 56
  %32 = load ptr, ptr %31, align 8, !tbaa !17
  %33 = load i8, ptr %32, align 1, !tbaa !19
  %.not118 = icmp eq i8 %33, 0
  br i1 %.not118, label %34, label %39

34:                                               ; preds = %30
  %35 = getelementptr inbounds i8, ptr %11, i64 24
  %36 = load ptr, ptr %35, align 8, !tbaa !20
  %37 = getelementptr inbounds i8, ptr %36, i64 8
  %38 = load ptr, ptr %37, align 8, !tbaa !12
  br label %39

39:                                               ; preds = %34, %30, %27
  %.0101 = phi ptr [ %29, %27 ], [ %38, %34 ], [ %32, %30 ]
  %40 = getelementptr inbounds i8, ptr %9, i64 4
  %41 = load i32, ptr %40, align 4, !tbaa !21
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds i8, ptr %.0102, i64 %42
  %44 = load i16, ptr %43, align 8, !tbaa !22
  %45 = icmp slt i16 %44, 3
  br i1 %45, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %39
  %46 = getelementptr inbounds i8, ptr %11, i64 24
  %47 = getelementptr inbounds i8, ptr %43, i64 8
  %48 = getelementptr inbounds i8, ptr %43, i64 4
  br label %49

49:                                               ; preds = %.lr.ph, %96
  %50 = phi i16 [ %44, %.lr.ph ], [ %97, %96 ]
  %.0175 = phi ptr [ %4, %.lr.ph ], [ %.4, %96 ]
  %.096174 = phi i64 [ %5, %.lr.ph ], [ %.4100, %96 ]
  %.0103173 = phi i64 [ 0, %.lr.ph ], [ %.4107, %96 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %51 = icmp eq i16 %50, 2
  br i1 %51, label %52, label %69

52:                                               ; preds = %49
  %53 = load ptr, ptr %46, align 8, !tbaa !20
  %54 = getelementptr inbounds i8, ptr %53, i64 56
  %55 = load ptr, ptr %54, align 8, !tbaa !26
  %56 = call { i32, i64 } %55(ptr noundef %0, ptr noundef %53, ptr noundef nonnull %47, ptr noundef %.0101, ptr noundef %.0175, i64 noundef %.096174) #5
  %57 = extractvalue { i32, i64 } %56, 0
  %58 = extractvalue { i32, i64 } %56, 1
  %59 = icmp eq i32 %57, 0
  br i1 %59, label %60, label %63

60:                                               ; preds = %52
  %61 = load ptr, ptr %47, align 8, !tbaa !27
  %62 = call i32 @asn_set_add(ptr noundef nonnull %.0102, ptr noundef %61) #5
  %.not119 = icmp eq i32 %62, 0
  br i1 %.not119, label %65, label %.thread144

63:                                               ; preds = %52
  %64 = add i64 %58, %.0103173
  br label %.thread144

65:                                               ; preds = %60
  store ptr null, ptr %47, align 8, !tbaa !27
  %66 = getelementptr inbounds i8, ptr %.0175, i64 %58
  %67 = sub i64 %.096174, %58
  %68 = add i64 %58, %.0103173
  store i16 1, ptr %43, align 8, !tbaa !22
  br label %69

69:                                               ; preds = %65, %49
  %.3106 = phi i64 [ %68, %65 ], [ %.0103173, %49 ]
  %.399 = phi i64 [ %67, %65 ], [ %.096174, %49 ]
  %.3 = phi ptr [ %66, %65 ], [ %.0175, %49 ]
  %70 = call i64 @xer_next_token(ptr noundef nonnull %48, ptr noundef %.3, i64 noundef %.399, ptr noundef nonnull %7) #5
  %71 = icmp eq i64 %70, -1
  br i1 %71, label %.thread144, label %72

72:                                               ; preds = %69
  %73 = load i32, ptr %7, align 4, !tbaa !28
  switch i32 %73, label %78 [
    i32 0, label %.thread144
    i32 3, label %74
    i32 2, label %74
  ]

74:                                               ; preds = %72, %72
  %75 = getelementptr inbounds i8, ptr %.3, i64 %70
  %76 = sub i64 %.399, %70
  %77 = add i64 %70, %.3106
  %.pre = load i16, ptr %43, align 8, !tbaa !22
  br label %96, !llvm.loop !29

78:                                               ; preds = %72
  %79 = trunc i64 %70 to i32
  %80 = call i32 @xer_check_tag(ptr noundef %.3, i32 noundef %79, ptr noundef %16) #5
  switch i32 %80, label %.thread152 [
    i32 2, label %81
    i32 3, label %84
    i32 1, label %87
    i32 5, label %thread-pre-split141
    i32 7, label %thread-pre-split141
  ]

81:                                               ; preds = %78
  %82 = load i16, ptr %43, align 8, !tbaa !22
  %83 = icmp eq i16 %82, 0
  br i1 %83, label %.thread152, label %.loopexit159

84:                                               ; preds = %78
  %.pr = load i16, ptr %43, align 8, !tbaa !22
  %85 = icmp eq i16 %.pr, 0
  br i1 %85, label %.loopexit159, label %.thread140

.loopexit159:                                     ; preds = %84, %81
  %86 = add i64 %70, %.3106
  store i16 3, ptr %43, align 8, !tbaa !22
  br label %.thread144

87:                                               ; preds = %78
  %.pr139 = load i16, ptr %43, align 8, !tbaa !22
  %88 = icmp eq i16 %.pr139, 0
  br i1 %88, label %89, label %.thread140

89:                                               ; preds = %87
  %90 = getelementptr inbounds i8, ptr %.3, i64 %70
  %91 = sub i64 %.399, %70
  %92 = add i64 %70, %.3106
  store i16 1, ptr %43, align 8, !tbaa !22
  br label %96, !llvm.loop !29

thread-pre-split141:                              ; preds = %78, %78
  %.pr142 = load i16, ptr %43, align 8, !tbaa !22
  br label %.thread140

.thread140:                                       ; preds = %84, %thread-pre-split141, %87
  %93 = phi i16 [ %.pr142, %thread-pre-split141 ], [ %.pr139, %87 ], [ %.pr, %84 ]
  %94 = icmp eq i16 %93, 1
  br i1 %94, label %95, label %.thread152

95:                                               ; preds = %.thread140
  store i16 2, ptr %43, align 8, !tbaa !22
  br label %96, !llvm.loop !29

.thread144:                                       ; preds = %69, %72, %60, %.loopexit159, %63
  %.sroa.095.4.ph = phi i32 [ 0, %.loopexit159 ], [ %57, %63 ], [ 2, %60 ], [ 2, %69 ], [ 1, %72 ]
  %.sroa.8.4.ph = phi i64 [ %86, %.loopexit159 ], [ %64, %63 ], [ %.0103173, %60 ], [ %.3106, %69 ], [ %.3106, %72 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br label %99

.thread152:                                       ; preds = %78, %.thread140, %81
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br label %.loopexit

96:                                               ; preds = %95, %89, %74
  %97 = phi i16 [ 2, %95 ], [ 1, %89 ], [ %.pre, %74 ]
  %.4107 = phi i64 [ %.3106, %95 ], [ %92, %89 ], [ %77, %74 ]
  %.4100 = phi i64 [ %.399, %95 ], [ %91, %89 ], [ %76, %74 ]
  %.4 = phi ptr [ %.3, %95 ], [ %90, %89 ], [ %75, %74 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  %98 = icmp slt i16 %97, 3
  br i1 %98, label %49, label %.loopexit

.loopexit:                                        ; preds = %96, %39, %.thread152
  %.5 = phi i64 [ %.3106, %.thread152 ], [ 0, %39 ], [ %.4107, %96 ]
  store i16 3, ptr %43, align 8, !tbaa !22
  br label %99

99:                                               ; preds = %.thread144, %19, %.loopexit
  %.sroa.095.5 = phi i32 [ 2, %.loopexit ], [ 2, %19 ], [ %.sroa.095.4.ph, %.thread144 ]
  %.sroa.8.5 = phi i64 [ %.5, %.loopexit ], [ 0, %19 ], [ %.sroa.8.4.ph, %.thread144 ]
  %.fca.0.insert = insertvalue { i32, i64 } poison, i32 %.sroa.095.5, 0
  %.fca.1.insert = insertvalue { i32, i64 } %.fca.0.insert, i64 %.sroa.8.5, 1
  ret { i32, i64 } %.fca.1.insert
}

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind 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_OF_specifics_s", !10, i64 0, !10, i64 4, !10, i64 8}
!16 = !{!15, !10, i64 8}
!17 = !{!18, !7, i64 56}
!18 = !{!"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}
!19 = !{!8, !8, i64 0}
!20 = !{!18, !7, i64 24}
!21 = !{!15, !10, i64 4}
!22 = !{!23, !24, i64 0}
!23 = !{!"asn_struct_ctx_s", !24, i64 0, !24, i64 2, !10, i64 4, !7, i64 8, !25, i64 16}
!24 = !{!"short", !8, i64 0}
!25 = !{!"long", !8, i64 0}
!26 = !{!6, !7, i64 56}
!27 = !{!23, !7, i64 8}
!28 = !{!10, !10, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}


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