; 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_enc_rval_s = type { i64, ptr, ptr }
%struct.asn_TYPE_descriptor_s = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, i32, ptr, ptr, i32, ptr }
%struct.asn_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_anonymous_set_ = type { ptr, i32, i32, ptr }
%struct.xer_tmp_enc_s = type { ptr, i64, i64 }

@.str.1 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1

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

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

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

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

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

declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
define dso_local void @SET_OF_encode_xer(ptr dead_on_unwind noalias writable sret(%struct.asn_enc_rval_s) align 8 %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef %5, ptr noundef %6) #5 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca %struct.asn_enc_rval_s, 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 ptr, align 8
  %22 = alloca i64, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca %struct.asn_enc_rval_s, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca %struct.asn_enc_rval_s, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i64, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i64, align 8
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i32 %3, ptr %10, align 4, !tbaa !9
  store i32 %4, ptr %11, align 4, !tbaa !9
  store ptr %5, ptr %12, align 8, !tbaa !5
  store ptr %6, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %44 = load ptr, ptr %8, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %44, i32 0, i32 19
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  store ptr %46, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %47 = load ptr, ptr %8, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %47, i32 0, i32 17
  %49 = load ptr, ptr %48, align 8, !tbaa !13
  store ptr %49, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %50 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %50, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %51 = load ptr, ptr %15, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %51, i32 0, i32 2
  %53 = load i32, ptr %52, align 4, !tbaa !14
  %54 = icmp ne i32 %53, 0
  br i1 %54, label %55, label %56

55:                                               ; preds = %7
  br label %75

56:                                               ; preds = %7
  %57 = load ptr, ptr %16, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %57, i32 0, i32 9
  %59 = load ptr, ptr %58, align 8, !tbaa !16
  %60 = load i8, ptr %59, align 1, !tbaa !18
  %61 = sext i8 %60 to i32
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %63, label %67

63:                                               ; preds = %56
  %64 = load ptr, ptr %16, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %64, i32 0, i32 9
  %66 = load ptr, ptr %65, align 8, !tbaa !16
  br label %73

67:                                               ; preds = %56
  %68 = load ptr, ptr %16, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %68, i32 0, i32 5
  %70 = load ptr, ptr %69, align 8, !tbaa !19
  %71 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %70, i32 0, i32 1
  %72 = load ptr, ptr %71, align 8, !tbaa !20
  br label %73

73:                                               ; preds = %67, %63
  %74 = phi ptr [ %66, %63 ], [ %72, %67 ]
  br label %75

75:                                               ; preds = %73, %55
  %76 = phi ptr [ null, %55 ], [ %74, %73 ]
  store ptr %76, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %77 = load ptr, ptr %18, align 8, !tbaa !5
  %78 = icmp ne ptr %77, null
  br i1 %78, label %79, label %82

79:                                               ; preds = %75
  %80 = load ptr, ptr %18, align 8, !tbaa !5
  %81 = call i64 @strlen(ptr noundef %80) #9
  br label %83

82:                                               ; preds = %75
  br label %83

83:                                               ; preds = %82, %79
  %84 = phi i64 [ %81, %79 ], [ 0, %82 ]
  store i64 %84, ptr %19, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  %85 = load i32, ptr %11, align 4, !tbaa !9
  %86 = and i32 %85, 2
  store i32 %86, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  store ptr null, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  store i64 0, ptr %22, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %87 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %87, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %88 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %88, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  %89 = load ptr, ptr %9, align 8, !tbaa !5
  %90 = icmp ne ptr %89, null
  br i1 %90, label %100, label %91

91:                                               ; preds = %83
  br label %92

92:                                               ; preds = %91
  %93 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %93, align 8, !tbaa !23
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %94, ptr %95, align 8, !tbaa !25
  %96 = load ptr, ptr %9, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %96, ptr %97, align 8, !tbaa !26
  call void @stacktrace_create(ptr noundef @.str.1, i64 noundef 921, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %26, align 4
  br label %551

98:                                               ; No predecessors!
  br label %99

99:                                               ; preds = %98
  br label %100

100:                                              ; preds = %99, %83
  %101 = load i32, ptr %20, align 4, !tbaa !9
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %103, label %122

103:                                              ; preds = %100
  %104 = load ptr, ptr %17, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.asn_anonymous_set_, ptr %104, i32 0, i32 1
  %106 = load i32, ptr %105, align 8, !tbaa !27
  %107 = sext i32 %106 to i64
  %108 = mul i64 %107, 24
  %109 = call noalias ptr @malloc(i64 noundef %108) #10
  store ptr %109, ptr %21, align 8, !tbaa !5
  %110 = load ptr, ptr %21, align 8, !tbaa !5
  %111 = icmp ne ptr %110, null
  br i1 %111, label %121, label %112

112:                                              ; preds = %103
  br label %113

113:                                              ; preds = %112
  %114 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %114, align 8, !tbaa !23
  %115 = load ptr, ptr %8, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %115, ptr %116, align 8, !tbaa !25
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %117, ptr %118, align 8, !tbaa !26
  call void @stacktrace_create(ptr noundef @.str.1, i64 noundef 927, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %26, align 4
  br label %551

119:                                              ; No predecessors!
  br label %120

120:                                              ; preds = %119
  br label %121

121:                                              ; preds = %120, %103
  store ptr @SET_OF_encode_xer_callback, ptr %12, align 8, !tbaa !5
  br label %122

122:                                              ; preds = %121, %100
  %123 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  store i64 0, ptr %123, align 8, !tbaa !23
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %124

124:                                              ; preds = %401, %122
  %125 = load i32, ptr %25, align 4, !tbaa !9
  %126 = load ptr, ptr %17, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.asn_anonymous_set_, ptr %126, i32 0, i32 1
  %128 = load i32, ptr %127, align 8, !tbaa !27
  %129 = icmp slt i32 %125, %128
  br i1 %129, label %130, label %404

130:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %131 = load ptr, ptr %17, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.asn_anonymous_set_, ptr %131, i32 0, i32 0
  %133 = load ptr, ptr %132, align 8, !tbaa !29
  %134 = load i32, ptr %25, align 4, !tbaa !9
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds ptr, ptr %133, i64 %135
  %137 = load ptr, ptr %136, align 8, !tbaa !5
  store ptr %137, ptr %28, align 8, !tbaa !5
  %138 = load ptr, ptr %28, align 8, !tbaa !5
  %139 = icmp ne ptr %138, null
  br i1 %139, label %141, label %140

140:                                              ; preds = %130
  store i32 8, ptr %26, align 4
  br label %398

141:                                              ; preds = %130
  %142 = load ptr, ptr %21, align 8, !tbaa !5
  %143 = icmp ne ptr %142, null
  br i1 %143, label %144, label %153

144:                                              ; preds = %141
  %145 = load ptr, ptr %21, align 8, !tbaa !5
  %146 = load i64, ptr %22, align 8, !tbaa !21
  %147 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %145, i64 %146
  call void @llvm.memset.p0.i64(ptr align 8 %147, i8 0, i64 24, i1 false)
  %148 = load ptr, ptr %21, align 8, !tbaa !5
  %149 = load i64, ptr %22, align 8, !tbaa !21
  %150 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %148, i64 %149
  store ptr %150, ptr %13, align 8, !tbaa !5
  %151 = load i64, ptr %22, align 8, !tbaa !21
  %152 = add i64 %151, 1
  store i64 %152, ptr %22, align 8, !tbaa !21
  br label %153

153:                                              ; preds = %144, %141
  %154 = load ptr, ptr %18, align 8, !tbaa !5
  %155 = icmp ne ptr %154, null
  br i1 %155, label %156, label %232

156:                                              ; preds = %153
  %157 = load i32, ptr %20, align 4, !tbaa !9
  %158 = icmp ne i32 %157, 0
  br i1 %158, label %210, label %159

159:                                              ; preds = %156
  br label %160

160:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  %161 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %161, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  store i32 1, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %162 = load i32, ptr %30, align 4, !tbaa !9
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %174

164:                                              ; preds = %160
  br label %165

165:                                              ; preds = %164
  %166 = load ptr, ptr %12, align 8, !tbaa !5
  %167 = load ptr, ptr %13, align 8, !tbaa !5
  %168 = call i32 %166(ptr noundef @.str.2, i64 noundef 1, ptr noundef %167)
  %169 = icmp slt i32 %168, 0
  br i1 %169, label %170, label %171

170:                                              ; preds = %165
  store i32 13, ptr %26, align 4
  br label %205

171:                                              ; preds = %165
  br label %172

172:                                              ; preds = %171
  br label %173

173:                                              ; preds = %172
  br label %174

174:                                              ; preds = %173, %160
  %175 = load i32, ptr %29, align 4, !tbaa !9
  %176 = icmp slt i32 %175, 0
  br i1 %176, label %177, label %178

177:                                              ; preds = %174
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %178

178:                                              ; preds = %177, %174
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %179

179:                                              ; preds = %193, %178
  %180 = load i32, ptr %31, align 4, !tbaa !9
  %181 = load i32, ptr %29, align 4, !tbaa !9
  %182 = icmp slt i32 %180, %181
  br i1 %182, label %183, label %196

183:                                              ; preds = %179
  br label %184

184:                                              ; preds = %183
  %185 = load ptr, ptr %12, align 8, !tbaa !5
  %186 = load ptr, ptr %13, align 8, !tbaa !5
  %187 = call i32 %185(ptr noundef @.str.3, i64 noundef 4, ptr noundef %186)
  %188 = icmp slt i32 %187, 0
  br i1 %188, label %189, label %190

189:                                              ; preds = %184
  store i32 13, ptr %26, align 4
  br label %205

190:                                              ; preds = %184
  br label %191

191:                                              ; preds = %190
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192
  %194 = load i32, ptr %31, align 4, !tbaa !9
  %195 = add nsw i32 %194, 1
  store i32 %195, ptr %31, align 4, !tbaa !9
  br label %179, !llvm.loop !30

196:                                              ; preds = %179
  %197 = load i32, ptr %30, align 4, !tbaa !9
  %198 = load i32, ptr %29, align 4, !tbaa !9
  %199 = mul nsw i32 4, %198
  %200 = add nsw i32 %197, %199
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %203 = load i64, ptr %202, align 8, !tbaa !23
  %204 = add nsw i64 %203, %201
  store i64 %204, ptr %202, align 8, !tbaa !23
  store i32 0, ptr %26, align 4
  br label %205

205:                                              ; preds = %196, %189, %170
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  %206 = load i32, ptr %26, align 4
  switch i32 %206, label %398 [
    i32 0, label %207
  ]

207:                                              ; preds = %205
  br label %208

208:                                              ; preds = %207
  br label %209

209:                                              ; preds = %208
  br label %210

210:                                              ; preds = %209, %156
  br label %211

211:                                              ; preds = %210
  %212 = load ptr, ptr %12, align 8, !tbaa !5
  %213 = load ptr, ptr %13, align 8, !tbaa !5
  %214 = call i32 %212(ptr noundef @.str.4, i64 noundef 1, ptr noundef %213)
  %215 = icmp slt i32 %214, 0
  br i1 %215, label %228, label %216

216:                                              ; preds = %211
  %217 = load ptr, ptr %12, align 8, !tbaa !5
  %218 = load ptr, ptr %18, align 8, !tbaa !5
  %219 = load i64, ptr %19, align 8, !tbaa !21
  %220 = load ptr, ptr %13, align 8, !tbaa !5
  %221 = call i32 %217(ptr noundef %218, i64 noundef %219, ptr noundef %220)
  %222 = icmp slt i32 %221, 0
  br i1 %222, label %228, label %223

223:                                              ; preds = %216
  %224 = load ptr, ptr %12, align 8, !tbaa !5
  %225 = load ptr, ptr %13, align 8, !tbaa !5
  %226 = call i32 %224(ptr noundef @.str.5, i64 noundef 1, ptr noundef %225)
  %227 = icmp slt i32 %226, 0
  br i1 %227, label %228, label %229

228:                                              ; preds = %223, %216, %211
  store i32 13, ptr %26, align 4
  br label %398

229:                                              ; preds = %223
  br label %230

230:                                              ; preds = %229
  br label %231

231:                                              ; preds = %230
  br label %232

232:                                              ; preds = %231, %153
  %233 = load i32, ptr %20, align 4, !tbaa !9
  %234 = icmp ne i32 %233, 0
  br i1 %234, label %292, label %235

235:                                              ; preds = %232
  %236 = load ptr, ptr %15, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %236, i32 0, i32 2
  %238 = load i32, ptr %237, align 4, !tbaa !14
  %239 = icmp eq i32 %238, 1
  br i1 %239, label %240, label %292

240:                                              ; preds = %235
  br label %241

241:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  %242 = load i32, ptr %10, align 4, !tbaa !9
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 1, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  %244 = load i32, ptr %33, align 4, !tbaa !9
  %245 = icmp ne i32 %244, 0
  br i1 %245, label %246, label %256

246:                                              ; preds = %241
  br label %247

247:                                              ; preds = %246
  %248 = load ptr, ptr %12, align 8, !tbaa !5
  %249 = load ptr, ptr %13, align 8, !tbaa !5
  %250 = call i32 %248(ptr noundef @.str.2, i64 noundef 1, ptr noundef %249)
  %251 = icmp slt i32 %250, 0
  br i1 %251, label %252, label %253

252:                                              ; preds = %247
  store i32 13, ptr %26, align 4
  br label %287

253:                                              ; preds = %247
  br label %254

254:                                              ; preds = %253
  br label %255

255:                                              ; preds = %254
  br label %256

256:                                              ; preds = %255, %241
  %257 = load i32, ptr %32, align 4, !tbaa !9
  %258 = icmp slt i32 %257, 0
  br i1 %258, label %259, label %260

259:                                              ; preds = %256
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %260

260:                                              ; preds = %259, %256
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %261

261:                                              ; preds = %275, %260
  %262 = load i32, ptr %34, align 4, !tbaa !9
  %263 = load i32, ptr %32, align 4, !tbaa !9
  %264 = icmp slt i32 %262, %263
  br i1 %264, label %265, label %278

265:                                              ; preds = %261
  br label %266

266:                                              ; preds = %265
  %267 = load ptr, ptr %12, align 8, !tbaa !5
  %268 = load ptr, ptr %13, align 8, !tbaa !5
  %269 = call i32 %267(ptr noundef @.str.3, i64 noundef 4, ptr noundef %268)
  %270 = icmp slt i32 %269, 0
  br i1 %270, label %271, label %272

271:                                              ; preds = %266
  store i32 13, ptr %26, align 4
  br label %287

272:                                              ; preds = %266
  br label %273

273:                                              ; preds = %272
  br label %274

274:                                              ; preds = %273
  br label %275

275:                                              ; preds = %274
  %276 = load i32, ptr %34, align 4, !tbaa !9
  %277 = add nsw i32 %276, 1
  store i32 %277, ptr %34, align 4, !tbaa !9
  br label %261, !llvm.loop !32

278:                                              ; preds = %261
  %279 = load i32, ptr %33, align 4, !tbaa !9
  %280 = load i32, ptr %32, align 4, !tbaa !9
  %281 = mul nsw i32 4, %280
  %282 = add nsw i32 %279, %281
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %285 = load i64, ptr %284, align 8, !tbaa !23
  %286 = add nsw i64 %285, %283
  store i64 %286, ptr %284, align 8, !tbaa !23
  store i32 0, ptr %26, align 4
  br label %287

287:                                              ; preds = %278, %271, %252
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  %288 = load i32, ptr %26, align 4
  switch i32 %288, label %398 [
    i32 0, label %289
  ]

289:                                              ; preds = %287
  br label %290

290:                                              ; preds = %289
  br label %291

291:                                              ; preds = %290
  br label %292

292:                                              ; preds = %291, %235, %232
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #8
  %293 = load ptr, ptr %16, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %293, i32 0, i32 5
  %295 = load ptr, ptr %294, align 8, !tbaa !19
  %296 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %295, i32 0, i32 8
  %297 = load ptr, ptr %296, align 8, !tbaa !33
  %298 = load ptr, ptr %16, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %298, i32 0, i32 5
  %300 = load ptr, ptr %299, align 8, !tbaa !19
  %301 = load ptr, ptr %28, align 8, !tbaa !5
  %302 = load i32, ptr %10, align 4, !tbaa !9
  %303 = load ptr, ptr %15, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %303, i32 0, i32 2
  %305 = load i32, ptr %304, align 4, !tbaa !14
  %306 = icmp ne i32 %305, 2
  %307 = zext i1 %306 to i32
  %308 = add nsw i32 %302, %307
  %309 = load i32, ptr %11, align 4, !tbaa !9
  %310 = load ptr, ptr %12, align 8, !tbaa !5
  %311 = load ptr, ptr %13, align 8, !tbaa !5
  call void %297(ptr dead_on_unwind writable sret(%struct.asn_enc_rval_s) align 8 %35, ptr noundef %300, ptr noundef %301, i32 noundef %308, i32 noundef %309, ptr noundef %310, ptr noundef %311)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %27, ptr align 8 %35, i64 24, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #8
  %312 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %27, i32 0, i32 0
  %313 = load i64, ptr %312, align 8, !tbaa !23
  %314 = icmp eq i64 %313, -1
  br i1 %314, label %315, label %320

315:                                              ; preds = %292
  %316 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %27, i32 0, i32 1
  %317 = load ptr, ptr %316, align 8, !tbaa !25
  store ptr %317, ptr %8, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %27, i32 0, i32 2
  %319 = load ptr, ptr %318, align 8, !tbaa !26
  store ptr %319, ptr %9, align 8, !tbaa !5
  store i32 13, ptr %26, align 4
  br label %398

320:                                              ; preds = %292
  %321 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %27, i32 0, i32 0
  %322 = load i64, ptr %321, align 8, !tbaa !23
  %323 = icmp eq i64 %322, 0
  br i1 %323, label %324, label %361

324:                                              ; preds = %320
  %325 = load ptr, ptr %15, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %325, i32 0, i32 2
  %327 = load i32, ptr %326, align 4, !tbaa !14
  %328 = icmp ne i32 %327, 0
  br i1 %328, label %329, label %361

329:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %330 = load ptr, ptr %16, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %330, i32 0, i32 5
  %332 = load ptr, ptr %331, align 8, !tbaa !19
  %333 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %332, i32 0, i32 1
  %334 = load ptr, ptr %333, align 8, !tbaa !20
  store ptr %334, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %335 = load ptr, ptr %36, align 8, !tbaa !5
  %336 = call i64 @strlen(ptr noundef %335) #9
  store i64 %336, ptr %37, align 8, !tbaa !21
  br label %337

337:                                              ; preds = %329
  %338 = load ptr, ptr %12, align 8, !tbaa !5
  %339 = load ptr, ptr %13, align 8, !tbaa !5
  %340 = call i32 %338(ptr noundef @.str.4, i64 noundef 1, ptr noundef %339)
  %341 = icmp slt i32 %340, 0
  br i1 %341, label %354, label %342

342:                                              ; preds = %337
  %343 = load ptr, ptr %12, align 8, !tbaa !5
  %344 = load ptr, ptr %36, align 8, !tbaa !5
  %345 = load i64, ptr %37, align 8, !tbaa !21
  %346 = load ptr, ptr %13, align 8, !tbaa !5
  %347 = call i32 %343(ptr noundef %344, i64 noundef %345, ptr noundef %346)
  %348 = icmp slt i32 %347, 0
  br i1 %348, label %354, label %349

349:                                              ; preds = %342
  %350 = load ptr, ptr %12, align 8, !tbaa !5
  %351 = load ptr, ptr %13, align 8, !tbaa !5
  %352 = call i32 %350(ptr noundef @.str.6, i64 noundef 2, ptr noundef %351)
  %353 = icmp slt i32 %352, 0
  br i1 %353, label %354, label %355

354:                                              ; preds = %349, %342, %337
  store i32 13, ptr %26, align 4
  br label %358

355:                                              ; preds = %349
  br label %356

356:                                              ; preds = %355
  br label %357

357:                                              ; preds = %356
  store i32 0, ptr %26, align 4
  br label %358

358:                                              ; preds = %357, %354
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  %359 = load i32, ptr %26, align 4
  switch i32 %359, label %398 [
    i32 0, label %360
  ]

360:                                              ; preds = %358
  br label %361

361:                                              ; preds = %360, %324, %320
  %362 = load ptr, ptr %18, align 8, !tbaa !5
  %363 = icmp ne ptr %362, null
  br i1 %363, label %364, label %389

364:                                              ; preds = %361
  br label %365

365:                                              ; preds = %364
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = load ptr, ptr %13, align 8, !tbaa !5
  %368 = call i32 %366(ptr noundef @.str.7, i64 noundef 2, ptr noundef %367)
  %369 = icmp slt i32 %368, 0
  br i1 %369, label %382, label %370

370:                                              ; preds = %365
  %371 = load ptr, ptr %12, align 8, !tbaa !5
  %372 = load ptr, ptr %18, align 8, !tbaa !5
  %373 = load i64, ptr %19, align 8, !tbaa !21
  %374 = load ptr, ptr %13, align 8, !tbaa !5
  %375 = call i32 %371(ptr noundef %372, i64 noundef %373, ptr noundef %374)
  %376 = icmp slt i32 %375, 0
  br i1 %376, label %382, label %377

377:                                              ; preds = %370
  %378 = load ptr, ptr %12, align 8, !tbaa !5
  %379 = load ptr, ptr %13, align 8, !tbaa !5
  %380 = call i32 %378(ptr noundef @.str.5, i64 noundef 1, ptr noundef %379)
  %381 = icmp slt i32 %380, 0
  br i1 %381, label %382, label %383

382:                                              ; preds = %377, %370, %365
  store i32 13, ptr %26, align 4
  br label %398

383:                                              ; preds = %377
  br label %384

384:                                              ; preds = %383
  br label %385

385:                                              ; preds = %384
  %386 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %387 = load i64, ptr %386, align 8, !tbaa !23
  %388 = add nsw i64 %387, 5
  store i64 %388, ptr %386, align 8, !tbaa !23
  br label %389

389:                                              ; preds = %385, %361
  %390 = load i64, ptr %19, align 8, !tbaa !21
  %391 = mul i64 2, %390
  %392 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %27, i32 0, i32 0
  %393 = load i64, ptr %392, align 8, !tbaa !23
  %394 = add i64 %391, %393
  %395 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %396 = load i64, ptr %395, align 8, !tbaa !23
  %397 = add i64 %396, %394
  store i64 %397, ptr %395, align 8, !tbaa !23
  store i32 0, ptr %26, align 4
  br label %398

398:                                              ; preds = %389, %382, %358, %315, %287, %228, %205, %140
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #8
  %399 = load i32, ptr %26, align 4
  switch i32 %399, label %551 [
    i32 0, label %400
    i32 8, label %401
    i32 13, label %511
  ]

400:                                              ; preds = %398
  br label %401

401:                                              ; preds = %400, %398
  %402 = load i32, ptr %25, align 4, !tbaa !9
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %25, align 4, !tbaa !9
  br label %124, !llvm.loop !35

404:                                              ; preds = %124
  %405 = load i32, ptr %20, align 4, !tbaa !9
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %459, label %407

407:                                              ; preds = %404
  br label %408

408:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  %409 = load i32, ptr %10, align 4, !tbaa !9
  %410 = sub nsw i32 %409, 1
  store i32 %410, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  store i32 1, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %411 = load i32, ptr %39, align 4, !tbaa !9
  %412 = icmp ne i32 %411, 0
  br i1 %412, label %413, label %423

413:                                              ; preds = %408
  br label %414

414:                                              ; preds = %413
  %415 = load ptr, ptr %12, align 8, !tbaa !5
  %416 = load ptr, ptr %13, align 8, !tbaa !5
  %417 = call i32 %415(ptr noundef @.str.2, i64 noundef 1, ptr noundef %416)
  %418 = icmp slt i32 %417, 0
  br i1 %418, label %419, label %420

419:                                              ; preds = %414
  store i32 13, ptr %26, align 4
  br label %454

420:                                              ; preds = %414
  br label %421

421:                                              ; preds = %420
  br label %422

422:                                              ; preds = %421
  br label %423

423:                                              ; preds = %422, %408
  %424 = load i32, ptr %38, align 4, !tbaa !9
  %425 = icmp slt i32 %424, 0
  br i1 %425, label %426, label %427

426:                                              ; preds = %423
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %427

427:                                              ; preds = %426, %423
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %428

428:                                              ; preds = %442, %427
  %429 = load i32, ptr %40, align 4, !tbaa !9
  %430 = load i32, ptr %38, align 4, !tbaa !9
  %431 = icmp slt i32 %429, %430
  br i1 %431, label %432, label %445

432:                                              ; preds = %428
  br label %433

433:                                              ; preds = %432
  %434 = load ptr, ptr %12, align 8, !tbaa !5
  %435 = load ptr, ptr %13, align 8, !tbaa !5
  %436 = call i32 %434(ptr noundef @.str.3, i64 noundef 4, ptr noundef %435)
  %437 = icmp slt i32 %436, 0
  br i1 %437, label %438, label %439

438:                                              ; preds = %433
  store i32 13, ptr %26, align 4
  br label %454

439:                                              ; preds = %433
  br label %440

440:                                              ; preds = %439
  br label %441

441:                                              ; preds = %440
  br label %442

442:                                              ; preds = %441
  %443 = load i32, ptr %40, align 4, !tbaa !9
  %444 = add nsw i32 %443, 1
  store i32 %444, ptr %40, align 4, !tbaa !9
  br label %428, !llvm.loop !36

445:                                              ; preds = %428
  %446 = load i32, ptr %39, align 4, !tbaa !9
  %447 = load i32, ptr %38, align 4, !tbaa !9
  %448 = mul nsw i32 4, %447
  %449 = add nsw i32 %446, %448
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %452 = load i64, ptr %451, align 8, !tbaa !23
  %453 = add nsw i64 %452, %450
  store i64 %453, ptr %451, align 8, !tbaa !23
  store i32 0, ptr %26, align 4
  br label %454

454:                                              ; preds = %445, %438, %419
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  %455 = load i32, ptr %26, align 4
  switch i32 %455, label %551 [
    i32 0, label %456
    i32 13, label %511
  ]

456:                                              ; preds = %454
  br label %457

457:                                              ; preds = %456
  br label %458

458:                                              ; preds = %457
  br label %459

459:                                              ; preds = %458, %404
  %460 = load ptr, ptr %21, align 8, !tbaa !5
  %461 = icmp ne ptr %460, null
  br i1 %461, label %462, label %510

462:                                              ; preds = %459
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %463 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %463, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %464 = load ptr, ptr %21, align 8, !tbaa !5
  %465 = load i64, ptr %22, align 8, !tbaa !21
  %466 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %464, i64 %465
  store ptr %466, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  store i64 0, ptr %43, align 8, !tbaa !21
  %467 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %467, ptr %12, align 8, !tbaa !5
  %468 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %468, ptr %13, align 8, !tbaa !5
  %469 = load ptr, ptr %21, align 8, !tbaa !5
  %470 = load i64, ptr %22, align 8, !tbaa !21
  call void @qsort(ptr noundef %469, i64 noundef %470, i64 noundef 24, ptr noundef @SET_OF_xer_order)
  br label %471

471:                                              ; preds = %503, %462
  %472 = load ptr, ptr %41, align 8, !tbaa !5
  %473 = load ptr, ptr %42, align 8, !tbaa !5
  %474 = icmp ult ptr %472, %473
  br i1 %474, label %475, label %506

475:                                              ; preds = %471
  br label %476

476:                                              ; preds = %475
  %477 = load ptr, ptr %12, align 8, !tbaa !5
  %478 = load ptr, ptr %41, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %478, i32 0, i32 0
  %480 = load ptr, ptr %479, align 8, !tbaa !37
  %481 = load ptr, ptr %41, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %481, i32 0, i32 1
  %483 = load i64, ptr %482, align 8, !tbaa !39
  %484 = load ptr, ptr %13, align 8, !tbaa !5
  %485 = call i32 %477(ptr noundef %480, i64 noundef %483, ptr noundef %484)
  %486 = icmp slt i32 %485, 0
  br i1 %486, label %487, label %488

487:                                              ; preds = %476
  store i32 13, ptr %26, align 4
  br label %507

488:                                              ; preds = %476
  br label %489

489:                                              ; preds = %488
  br label %490

490:                                              ; preds = %489
  %491 = load ptr, ptr %41, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %491, i32 0, i32 0
  %493 = load ptr, ptr %492, align 8, !tbaa !37
  call void @free(ptr noundef %493) #8
  %494 = load ptr, ptr %41, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %494, i32 0, i32 0
  store ptr null, ptr %495, align 8, !tbaa !37
  %496 = load ptr, ptr %41, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %496, i32 0, i32 0
  store ptr null, ptr %497, align 8, !tbaa !37
  %498 = load ptr, ptr %41, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %498, i32 0, i32 1
  %500 = load i64, ptr %499, align 8, !tbaa !39
  %501 = load i64, ptr %43, align 8, !tbaa !21
  %502 = add i64 %501, %500
  store i64 %502, ptr %43, align 8, !tbaa !21
  br label %503

503:                                              ; preds = %490
  %504 = load ptr, ptr %41, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %504, i32 1
  store ptr %505, ptr %41, align 8, !tbaa !5
  br label %471, !llvm.loop !40

506:                                              ; preds = %471
  store i32 0, ptr %26, align 4
  br label %507

507:                                              ; preds = %506, %487
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  %508 = load i32, ptr %26, align 4
  switch i32 %508, label %551 [
    i32 0, label %509
    i32 13, label %511
  ]

509:                                              ; preds = %507
  br label %510

510:                                              ; preds = %509, %459
  br label %517

511:                                              ; preds = %507, %454, %398
  %512 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  store i64 -1, ptr %512, align 8, !tbaa !23
  %513 = load ptr, ptr %8, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 1
  store ptr %513, ptr %514, align 8, !tbaa !25
  %515 = load ptr, ptr %9, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 2
  store ptr %515, ptr %516, align 8, !tbaa !26
  br label %517

517:                                              ; preds = %511, %510
  %518 = load ptr, ptr %21, align 8, !tbaa !5
  %519 = icmp ne ptr %518, null
  br i1 %519, label %520, label %545

520:                                              ; preds = %517
  br label %521

521:                                              ; preds = %542, %520
  %522 = load i64, ptr %22, align 8, !tbaa !21
  %523 = add i64 %522, -1
  store i64 %523, ptr %22, align 8, !tbaa !21
  %524 = icmp ugt i64 %522, 0
  br i1 %524, label %525, label %543

525:                                              ; preds = %521
  %526 = load ptr, ptr %21, align 8, !tbaa !5
  %527 = load i64, ptr %22, align 8, !tbaa !21
  %528 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %526, i64 %527
  %529 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %528, i32 0, i32 0
  %530 = load ptr, ptr %529, align 8, !tbaa !37
  %531 = icmp ne ptr %530, null
  br i1 %531, label %532, label %542

532:                                              ; preds = %525
  %533 = load ptr, ptr %21, align 8, !tbaa !5
  %534 = load i64, ptr %22, align 8, !tbaa !21
  %535 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %533, i64 %534
  %536 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %535, i32 0, i32 0
  %537 = load ptr, ptr %536, align 8, !tbaa !37
  call void @free(ptr noundef %537) #8
  %538 = load ptr, ptr %21, align 8, !tbaa !5
  %539 = load i64, ptr %22, align 8, !tbaa !21
  %540 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %538, i64 %539
  %541 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %540, i32 0, i32 0
  store ptr null, ptr %541, align 8, !tbaa !37
  br label %542

542:                                              ; preds = %532, %525
  br label %521, !llvm.loop !41

543:                                              ; preds = %521
  %544 = load ptr, ptr %21, align 8, !tbaa !5
  call void @free(ptr noundef %544) #8
  store ptr null, ptr %21, align 8, !tbaa !5
  br label %545

545:                                              ; preds = %543, %517
  br label %546

546:                                              ; preds = %545
  %547 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 2
  store ptr null, ptr %547, align 8, !tbaa !26
  %548 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 1
  store ptr null, ptr %548, align 8, !tbaa !25
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %14, i64 24, i1 false), !tbaa.struct !34
  store i32 1, ptr %26, align 4
  br label %551

549:                                              ; No predecessors!
  br label %550

550:                                              ; preds = %549
  store i32 0, ptr %26, align 4
  br label %551

551:                                              ; preds = %550, %546, %507, %454, %398, %113, %92
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #8
  %552 = load i32, ptr %26, align 4
  switch i32 %552, label %554 [
    i32 0, label %553
    i32 1, label %553
  ]

553:                                              ; preds = %551, %551
  ret void

554:                                              ; preds = %551
  unreachable
}

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #6

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

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

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

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

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

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

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


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

%struct.asn_enc_rval_s = type { i64, ptr, ptr }
%struct.xer_tmp_enc_s = type { ptr, i64, i64 }

@.str.1 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1

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

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

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

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

; Function Attrs: nofree
declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #3

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

15:                                               ; preds = %7
  %16 = getelementptr inbounds i8, ptr %12, i64 56
  %17 = load ptr, ptr %16, align 8, !tbaa !14
  %18 = load i8, ptr %17, align 1, !tbaa !16
  %.not187 = icmp eq i8 %18, 0
  br i1 %.not187, label %19, label %.thread203

19:                                               ; preds = %15
  %20 = getelementptr inbounds i8, ptr %12, i64 24
  %21 = load ptr, ptr %20, align 8, !tbaa !17
  %22 = getelementptr inbounds i8, ptr %21, i64 8
  %23 = load ptr, ptr %22, align 8, !tbaa !18
  %.not188 = icmp eq ptr %23, null
  br i1 %.not188, label %.thread, label %.thread203

.thread203:                                       ; preds = %15, %19
  %24 = phi ptr [ %23, %19 ], [ %17, %15 ]
  %25 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %24) #9
  br label %.thread

.thread:                                          ; preds = %7, %19, %.thread203
  %.not188202 = phi i1 [ false, %.thread203 ], [ true, %19 ], [ true, %7 ]
  %26 = phi ptr [ %24, %.thread203 ], [ null, %19 ], [ null, %7 ]
  %27 = phi i64 [ %25, %.thread203 ], [ 0, %19 ], [ 0, %7 ]
  %.not189 = icmp eq ptr %2, null
  br i1 %.not189, label %28, label %31

28:                                               ; preds = %.thread
  store i64 -1, ptr %0, align 8, !tbaa !19
  %29 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %29, align 8, !tbaa !22
  %30 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr null, ptr %30, align 8, !tbaa !23
  tail call void @stacktrace_create(ptr noundef nonnull @.str.1, i64 noundef 921, i32 noundef 101, ptr noundef null) #10
  br label %164

31:                                               ; preds = %.thread
  %32 = and i32 %4, 2
  %.not190 = icmp eq i32 %32, 0
  %.phi.trans.insert = getelementptr inbounds i8, ptr %2, i64 8
  %.pre = load i32, ptr %.phi.trans.insert, align 8, !tbaa !24
  br i1 %.not190, label %._crit_edge303, label %33

33:                                               ; preds = %31
  %34 = sext i32 %.pre to i64
  %35 = mul nsw i64 %34, 24
  %36 = tail call noalias ptr @malloc(i64 noundef %35) #11
  %.not191 = icmp eq ptr %36, null
  br i1 %.not191, label %37, label %._crit_edge303

37:                                               ; preds = %33
  store i64 -1, ptr %0, align 8, !tbaa !19
  %38 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %38, align 8, !tbaa !22
  %39 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %2, ptr %39, align 8, !tbaa !23
  tail call void @stacktrace_create(ptr noundef nonnull @.str.1, i64 noundef 927, i32 noundef 101, ptr noundef null) #10
  br label %164

._crit_edge303:                                   ; preds = %31, %33
  %.0169 = phi ptr [ %36, %33 ], [ null, %31 ]
  %.0163 = phi ptr [ @SET_OF_encode_xer_callback, %33 ], [ %5, %31 ]
  %40 = getelementptr inbounds i8, ptr %2, i64 8
  %41 = icmp sgt i32 %.pre, 0
  br i1 %41, label %.lr.ph277, label %._crit_edge278

.lr.ph277:                                        ; preds = %._crit_edge303
  %.not194 = icmp eq ptr %.0169, null
  %spec.store.select = tail call i32 @llvm.smax.i32(i32 %3, i32 0)
  %42 = icmp sgt i32 %3, 0
  %43 = shl nsw i32 %spec.store.select, 2
  %44 = or disjoint i32 %43, 1
  %45 = zext nneg i32 %44 to i64
  %46 = tail call i32 @llvm.smax.i32(i32 %3, i32 -1)
  %.not195267 = icmp slt i32 %3, 0
  %spec.store.select3 = shl i32 %46, 2
  %47 = add i32 %spec.store.select3, 5
  %48 = sext i32 %47 to i64
  %49 = getelementptr inbounds i8, ptr %12, i64 24
  %50 = shl i64 %27, 1
  br label %51

51:                                               ; preds = %.lr.ph277, %.thread228
  %52 = phi i32 [ %.pre, %.lr.ph277 ], [ %129, %.thread228 ]
  %indvars.iv = phi i64 [ 0, %.lr.ph277 ], [ %indvars.iv.next, %.thread228 ]
  %.0164275 = phi ptr [ %6, %.lr.ph277 ], [ %.2166237, %.thread228 ]
  %.sroa.0100.0274 = phi i64 [ 0, %.lr.ph277 ], [ %.sroa.0100.7236, %.thread228 ]
  %.0170273 = phi i64 [ 0, %.lr.ph277 ], [ %.2172235, %.thread228 ]
  %53 = load ptr, ptr %2, align 8, !tbaa !26
  %54 = getelementptr inbounds ptr, ptr %53, i64 %indvars.iv
  %55 = load ptr, ptr %54, align 8, !tbaa !27
  %.not193 = icmp eq ptr %55, null
  br i1 %.not193, label %.thread228, label %56

56:                                               ; preds = %51
  br i1 %.not194, label %60, label %57

57:                                               ; preds = %56
  %58 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %.0169, i64 %.0170273
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %58, i8 0, i64 24, i1 false)
  %59 = add i64 %.0170273, 1
  br label %60

60:                                               ; preds = %57, %56
  %.1171 = phi i64 [ %59, %57 ], [ %.0170273, %56 ]
  %.1165 = phi ptr [ %58, %57 ], [ %.0164275, %56 ]
  br i1 %.not188202, label %80, label %61

61:                                               ; preds = %60
  br i1 %.not190, label %62, label %71

62:                                               ; preds = %61
  %63 = call i32 %.0163(ptr noundef nonnull @.str.2, i64 noundef 1, ptr noundef %.1165) #10
  %64 = icmp slt i32 %63, 0
  br i1 %64, label %.thread220, label %65

65:                                               ; preds = %62
  br i1 %42, label %.lr.ph, label %._crit_edge

66:                                               ; preds = %.lr.ph
  %67 = add nuw nsw i32 %.0168266, 1
  %exitcond.not = icmp eq i32 %67, %3
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !28

.lr.ph:                                           ; preds = %65, %66
  %.0168266 = phi i32 [ %67, %66 ], [ 0, %65 ]
  %68 = call i32 %.0163(ptr noundef nonnull @.str.3, i64 noundef 4, ptr noundef %.1165) #10
  %69 = icmp slt i32 %68, 0
  br i1 %69, label %.thread220, label %66

._crit_edge:                                      ; preds = %66, %65
  %70 = add nsw i64 %.sroa.0100.0274, %45
  br label %71

71:                                               ; preds = %._crit_edge, %61
  %.sroa.0100.2 = phi i64 [ %.sroa.0100.0274, %61 ], [ %70, %._crit_edge ]
  %72 = call i32 %.0163(ptr noundef nonnull @.str.4, i64 noundef 1, ptr noundef %.1165) #10
  %73 = icmp slt i32 %72, 0
  br i1 %73, label %.thread220, label %74

74:                                               ; preds = %71
  %75 = call i32 %.0163(ptr noundef nonnull %26, i64 noundef %27, ptr noundef %.1165) #10
  %76 = icmp slt i32 %75, 0
  br i1 %76, label %.thread220, label %77

77:                                               ; preds = %74
  %78 = call i32 %.0163(ptr noundef nonnull @.str.5, i64 noundef 1, ptr noundef %.1165) #10
  %79 = icmp slt i32 %78, 0
  br i1 %79, label %.thread220, label %80

80:                                               ; preds = %77, %60
  %.sroa.0100.3 = phi i64 [ %.sroa.0100.2, %77 ], [ %.sroa.0100.0274, %60 ]
  %.pre305 = load i32, ptr %13, align 4, !tbaa !12
  %81 = icmp eq i32 %.pre305, 1
  %or.cond = select i1 %.not190, i1 %81, i1 false
  br i1 %or.cond, label %82, label %91

82:                                               ; preds = %80
  %83 = call i32 %.0163(ptr noundef nonnull @.str.2, i64 noundef 1, ptr noundef %.1165) #10
  %84 = icmp slt i32 %83, 0
  br i1 %84, label %.thread220, label %85

85:                                               ; preds = %82
  br i1 %.not195267, label %._crit_edge271, label %.lr.ph270

86:                                               ; preds = %.lr.ph270
  %87 = add nuw i32 %.0167268, 1
  %exitcond300.not = icmp eq i32 %.0167268, %46
  br i1 %exitcond300.not, label %._crit_edge271, label %.lr.ph270, !llvm.loop !30

.lr.ph270:                                        ; preds = %85, %86
  %.0167268 = phi i32 [ %87, %86 ], [ 0, %85 ]
  %88 = call i32 %.0163(ptr noundef nonnull @.str.3, i64 noundef 4, ptr noundef %.1165) #10
  %89 = icmp slt i32 %88, 0
  br i1 %89, label %.thread220, label %86

._crit_edge271:                                   ; preds = %86, %85
  %90 = add nsw i64 %.sroa.0100.3, %48
  %.pre304 = load i32, ptr %13, align 4, !tbaa !12
  br label %91

91:                                               ; preds = %._crit_edge271, %80
  %92 = phi i32 [ %.pre305, %80 ], [ %.pre304, %._crit_edge271 ]
  %.sroa.0100.5 = phi i64 [ %.sroa.0100.3, %80 ], [ %90, %._crit_edge271 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #10
  %93 = load ptr, ptr %49, align 8, !tbaa !17
  %94 = getelementptr inbounds i8, ptr %93, i64 64
  %95 = load ptr, ptr %94, align 8, !tbaa !31
  %96 = icmp ne i32 %92, 2
  %97 = zext i1 %96 to i32
  %98 = add nsw i32 %97, %3
  call void %95(ptr dead_on_unwind nonnull writable sret(%struct.asn_enc_rval_s) align 8 %8, ptr noundef %93, ptr noundef nonnull %55, i32 noundef %98, i32 noundef %4, ptr noundef %.0163, ptr noundef %.1165) #10
  %.sroa.0.0.copyload = load i64, ptr %8, align 8, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #10
  switch i64 %.sroa.0.0.copyload, label %114 [
    i64 -1, label %.thread220
    i64 0, label %99
  ]

99:                                               ; preds = %91
  %100 = load i32, ptr %13, align 4, !tbaa !12
  %.not196 = icmp eq i32 %100, 0
  br i1 %.not196, label %114, label %101

101:                                              ; preds = %99
  %102 = load ptr, ptr %49, align 8, !tbaa !17
  %103 = getelementptr inbounds i8, ptr %102, i64 8
  %104 = load ptr, ptr %103, align 8, !tbaa !18
  %105 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %104) #9
  %106 = call i32 %.0163(ptr noundef nonnull @.str.4, i64 noundef 1, ptr noundef %.1165) #10
  %107 = icmp slt i32 %106, 0
  br i1 %107, label %.thread220, label %108

108:                                              ; preds = %101
  %109 = call i32 %.0163(ptr noundef %104, i64 noundef %105, ptr noundef %.1165) #10
  %110 = icmp slt i32 %109, 0
  br i1 %110, label %.thread220, label %111

111:                                              ; preds = %108
  %112 = call i32 %.0163(ptr noundef nonnull @.str.6, i64 noundef 2, ptr noundef %.1165) #10
  %113 = icmp sgt i32 %112, -1
  br i1 %113, label %114, label %.thread220

114:                                              ; preds = %91, %111, %99
  br i1 %.not188202, label %126, label %115

115:                                              ; preds = %114
  %116 = call i32 %.0163(ptr noundef nonnull @.str.7, i64 noundef 2, ptr noundef %.1165) #10
  %117 = icmp slt i32 %116, 0
  br i1 %117, label %.thread220, label %118

118:                                              ; preds = %115
  %119 = call i32 %.0163(ptr noundef nonnull %26, i64 noundef %27, ptr noundef %.1165) #10
  %120 = icmp slt i32 %119, 0
  br i1 %120, label %.thread220, label %121

121:                                              ; preds = %118
  %122 = call i32 %.0163(ptr noundef nonnull @.str.5, i64 noundef 1, ptr noundef %.1165) #10
  %123 = icmp slt i32 %122, 0
  br i1 %123, label %.thread220, label %124

124:                                              ; preds = %121
  %125 = add nsw i64 %.sroa.0100.5, 5
  br label %126

126:                                              ; preds = %124, %114
  %.sroa.0100.6 = phi i64 [ %125, %124 ], [ %.sroa.0100.5, %114 ]
  %127 = add i64 %.sroa.0.0.copyload, %50
  %128 = add i64 %127, %.sroa.0100.6
  %.pre306 = load i32, ptr %40, align 8, !tbaa !24
  br label %.thread228

.thread228:                                       ; preds = %51, %126
  %129 = phi i32 [ %52, %51 ], [ %.pre306, %126 ]
  %.2166237 = phi ptr [ %.0164275, %51 ], [ %.1165, %126 ]
  %.sroa.0100.7236 = phi i64 [ %.sroa.0100.0274, %51 ], [ %128, %126 ]
  %.2172235 = phi i64 [ %.0170273, %51 ], [ %.1171, %126 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %130 = sext i32 %129 to i64
  %131 = icmp slt i64 %indvars.iv.next, %130
  br i1 %131, label %51, label %._crit_edge278, !llvm.loop !33

._crit_edge278:                                   ; preds = %.thread228, %._crit_edge303
  %.0170.lcssa = phi i64 [ 0, %._crit_edge303 ], [ %.2172235, %.thread228 ]
  %.sroa.0100.0.lcssa = phi i64 [ 0, %._crit_edge303 ], [ %.sroa.0100.7236, %.thread228 ]
  %.0164.lcssa = phi ptr [ %6, %._crit_edge303 ], [ %.2166237, %.thread228 ]
  br i1 %.not190, label %132, label %146

132:                                              ; preds = %._crit_edge278
  %133 = call i32 %.0163(ptr noundef nonnull @.str.2, i64 noundef 1, ptr noundef %.0164.lcssa) #10
  %134 = icmp slt i32 %133, 0
  br i1 %134, label %.thread220, label %135

135:                                              ; preds = %132
  %136 = call i32 @llvm.smax.i32(i32 %3, i32 1)
  %spec.store.select4 = add nsw i32 %136, -1
  %137 = icmp sgt i32 %3, 1
  br i1 %137, label %.lr.ph283, label %._crit_edge284

138:                                              ; preds = %.lr.ph283
  %139 = add nuw nsw i32 %.0159281, 1
  %exitcond302.not = icmp eq i32 %139, %spec.store.select4
  br i1 %exitcond302.not, label %._crit_edge284, label %.lr.ph283, !llvm.loop !34

.lr.ph283:                                        ; preds = %135, %138
  %.0159281 = phi i32 [ %139, %138 ], [ 0, %135 ]
  %140 = call i32 %.0163(ptr noundef nonnull @.str.3, i64 noundef 4, ptr noundef %.0164.lcssa) #10
  %141 = icmp slt i32 %140, 0
  br i1 %141, label %.thread220, label %138

._crit_edge284:                                   ; preds = %138, %135
  %142 = shl nsw i32 %spec.store.select4, 2
  %143 = or disjoint i32 %142, 1
  %144 = sext i32 %143 to i64
  %145 = add nsw i64 %.sroa.0100.0.lcssa, %144
  br label %146

146:                                              ; preds = %._crit_edge284, %._crit_edge278
  %.sroa.0100.9 = phi i64 [ %.sroa.0100.0.lcssa, %._crit_edge278 ], [ %145, %._crit_edge284 ]
  %.not192 = icmp eq ptr %.0169, null
  br i1 %.not192, label %.thread246, label %147

147:                                              ; preds = %146
  %148 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %.0169, i64 %.0170.lcssa
  call void @qsort(ptr noundef nonnull %.0169, i64 noundef %.0170.lcssa, i64 noundef 24, ptr noundef nonnull @SET_OF_xer_order) #10
  %149 = icmp sgt i64 %.0170.lcssa, 0
  br i1 %149, label %.lr.ph287, label %.preheader

.lr.ph287:                                        ; preds = %147, %155
  %.0158285 = phi ptr [ %157, %155 ], [ %.0169, %147 ]
  %150 = load ptr, ptr %.0158285, align 8, !tbaa !35
  %151 = getelementptr inbounds i8, ptr %.0158285, i64 8
  %152 = load i64, ptr %151, align 8, !tbaa !37
  %153 = call i32 %5(ptr noundef %150, i64 noundef %152, ptr noundef %6) #10
  %154 = icmp slt i32 %153, 0
  br i1 %154, label %.thread220, label %155

155:                                              ; preds = %.lr.ph287
  %156 = load ptr, ptr %.0158285, align 8, !tbaa !35
  call void @free(ptr noundef %156) #10
  store ptr null, ptr %.0158285, align 8, !tbaa !35
  %157 = getelementptr inbounds i8, ptr %.0158285, i64 24
  %158 = icmp ult ptr %157, %148
  br i1 %158, label %.lr.ph287, label %.thread220, !llvm.loop !38

.thread220:                                       ; preds = %111, %101, %108, %82, %62, %115, %118, %121, %91, %71, %74, %77, %.lr.ph, %.lr.ph270, %.lr.ph283, %.lr.ph287, %155, %132
  %.4 = phi i64 [ %.0170.lcssa, %132 ], [ %.0170.lcssa, %155 ], [ %.0170.lcssa, %.lr.ph287 ], [ %.0170.lcssa, %.lr.ph283 ], [ %.1171, %.lr.ph270 ], [ %.1171, %.lr.ph ], [ %.1171, %77 ], [ %.1171, %74 ], [ %.1171, %71 ], [ %.1171, %91 ], [ %.1171, %121 ], [ %.1171, %118 ], [ %.1171, %115 ], [ %.1171, %62 ], [ %.1171, %82 ], [ %.1171, %108 ], [ %.1171, %101 ], [ %.1171, %111 ]
  %.sroa.0100.10 = phi i64 [ -1, %132 ], [ -1, %.lr.ph287 ], [ %.sroa.0100.9, %155 ], [ -1, %.lr.ph283 ], [ -1, %.lr.ph270 ], [ -1, %.lr.ph ], [ -1, %111 ], [ -1, %101 ], [ -1, %108 ], [ -1, %82 ], [ -1, %62 ], [ -1, %115 ], [ -1, %118 ], [ -1, %121 ], [ %.sroa.0.0.copyload, %91 ], [ -1, %71 ], [ -1, %74 ], [ -1, %77 ]
  %.not197 = icmp eq ptr %.0169, null
  br i1 %.not197, label %.thread246, label %.preheader

.preheader:                                       ; preds = %147, %.thread220
  %.sroa.0100.10311 = phi i64 [ %.sroa.0100.10, %.thread220 ], [ %.sroa.0100.9, %147 ]
  %.4310 = phi i64 [ %.4, %.thread220 ], [ %.0170.lcssa, %147 ]
  %.not198291 = icmp eq i64 %.4310, 0
  br i1 %.not198291, label %._crit_edge293, label %.lr.ph292

.lr.ph292:                                        ; preds = %.preheader, %163
  %.in = phi i64 [ %159, %163 ], [ %.4310, %.preheader ]
  %159 = add i64 %.in, -1
  %160 = getelementptr inbounds %struct.xer_tmp_enc_s, ptr %.0169, i64 %159
  %161 = load ptr, ptr %160, align 8, !tbaa !35
  %.not199 = icmp eq ptr %161, null
  br i1 %.not199, label %163, label %162

162:                                              ; preds = %.lr.ph292
  call void @free(ptr noundef nonnull %161) #10
  store ptr null, ptr %160, align 8, !tbaa !35
  br label %163

163:                                              ; preds = %162, %.lr.ph292
  %.not198 = icmp eq i64 %159, 0
  br i1 %.not198, label %._crit_edge293, label %.lr.ph292, !llvm.loop !39

._crit_edge293:                                   ; preds = %163, %.preheader
  call void @free(ptr noundef nonnull %.0169) #10
  br label %.thread246

.thread246:                                       ; preds = %146, %.thread220, %._crit_edge293
  %.sroa.0100.10250 = phi i64 [ %.sroa.0100.10, %.thread220 ], [ %.sroa.0100.10311, %._crit_edge293 ], [ %.sroa.0100.9, %146 ]
  store i64 %.sroa.0100.10250, ptr %0, align 8, !tbaa !32
  %.sroa.15.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.15.0..sroa_idx, i8 0, i64 16, i1 false)
  br label %164

164:                                              ; preds = %.thread246, %37, %28
  ret void
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #5

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

; Function Attrs: nounwind uwtable
declare hidden i32 @SET_OF_encode_xer_callback(ptr noundef, i64 noundef, ptr noundef) #4

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #8

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nofree "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { nounwind }
attributes #11 = { nounwind allocsize(0) }

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

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


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