; LLVM IR from specinfo-ua/UAPKI :: library/uapkif/src/asn1 (constr_SEQUENCE_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_sequence_ = type { ptr, i32, i32, ptr }

@.str = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.6 = 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 uwtable
define dso_local void @SEQUENCE_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) #2 {
  %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 i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %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 i64, align 8
  %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 i32, align 4
  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) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %36 = load ptr, ptr %8, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %36, i32 0, i32 19
  %38 = load ptr, ptr %37, align 8, !tbaa !11
  store ptr %38, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %39 = load ptr, ptr %8, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %39, i32 0, i32 17
  %41 = load ptr, ptr %40, align 8, !tbaa !13
  store ptr %41, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %42 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %42, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %43 = load ptr, ptr %15, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %43, i32 0, i32 2
  %45 = load i32, ptr %44, align 4, !tbaa !14
  %46 = icmp ne i32 %45, 0
  br i1 %46, label %47, label %48

47:                                               ; preds = %7
  br label %67

48:                                               ; preds = %7
  %49 = load ptr, ptr %16, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %49, i32 0, i32 9
  %51 = load ptr, ptr %50, align 8, !tbaa !16
  %52 = load i8, ptr %51, align 1, !tbaa !18
  %53 = sext i8 %52 to i32
  %54 = icmp ne i32 %53, 0
  br i1 %54, label %55, label %59

55:                                               ; preds = %48
  %56 = load ptr, ptr %16, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %56, i32 0, i32 9
  %58 = load ptr, ptr %57, align 8, !tbaa !16
  br label %65

59:                                               ; preds = %48
  %60 = load ptr, ptr %16, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %60, i32 0, i32 5
  %62 = load ptr, ptr %61, align 8, !tbaa !19
  %63 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %62, i32 0, i32 1
  %64 = load ptr, ptr %63, align 8, !tbaa !20
  br label %65

65:                                               ; preds = %59, %55
  %66 = phi ptr [ %58, %55 ], [ %64, %59 ]
  br label %67

67:                                               ; preds = %65, %47
  %68 = phi ptr [ null, %47 ], [ %66, %65 ]
  store ptr %68, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %69 = load ptr, ptr %18, align 8, !tbaa !5
  %70 = icmp ne ptr %69, null
  br i1 %70, label %71, label %75

71:                                               ; preds = %67
  %72 = load ptr, ptr %18, align 8, !tbaa !5
  %73 = call i64 @strlen(ptr noundef %72) #6
  %74 = trunc i64 %73 to i32
  br label %76

75:                                               ; preds = %67
  br label %76

76:                                               ; preds = %75, %71
  %77 = phi i32 [ %74, %71 ], [ 0, %75 ]
  store i32 %77, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %78 = load i32, ptr %11, align 4, !tbaa !9
  %79 = and i32 %78, 2
  store i32 %79, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %80 = load ptr, ptr %9, align 8, !tbaa !5
  %81 = icmp ne ptr %80, null
  br i1 %81, label %91, label %82

82:                                               ; preds = %76
  br label %83

83:                                               ; preds = %82
  %84 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %84, align 8, !tbaa !21
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %85, ptr %86, align 8, !tbaa !24
  %87 = load ptr, ptr %9, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %87, ptr %88, align 8, !tbaa !25
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 138, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %22, align 4
  br label %420

89:                                               ; No predecessors!
  br label %90

90:                                               ; preds = %89
  br label %91

91:                                               ; preds = %90, %76
  %92 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  store i64 0, ptr %92, align 8, !tbaa !21
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %93

93:                                               ; preds = %347, %91
  %94 = load i32, ptr %21, align 4, !tbaa !9
  %95 = load ptr, ptr %17, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.asn_anonymous_sequence_, ptr %95, i32 0, i32 1
  %97 = load i32, ptr %96, align 8, !tbaa !26
  %98 = icmp slt i32 %94, %97
  br i1 %98, label %99, label %350

99:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %100 = load ptr, ptr %17, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.asn_anonymous_sequence_, ptr %100, i32 0, i32 0
  %102 = load ptr, ptr %101, align 8, !tbaa !28
  %103 = load i32, ptr %21, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds ptr, ptr %102, i64 %104
  %106 = load ptr, ptr %105, align 8, !tbaa !5
  store ptr %106, ptr %23, align 8, !tbaa !5
  %107 = load ptr, ptr %23, align 8, !tbaa !5
  %108 = icmp ne ptr %107, null
  br i1 %108, label %110, label %109

109:                                              ; preds = %99
  store i32 6, ptr %22, align 4
  br label %344

110:                                              ; preds = %99
  %111 = load ptr, ptr %18, align 8, !tbaa !5
  %112 = icmp ne ptr %111, null
  br i1 %112, label %113, label %190

113:                                              ; preds = %110
  %114 = load i32, ptr %20, align 4, !tbaa !9
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %167, label %116

116:                                              ; preds = %113
  br label %117

117:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %118 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %118, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  store i32 1, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %119 = load i32, ptr %25, align 4, !tbaa !9
  %120 = icmp ne i32 %119, 0
  br i1 %120, label %121, label %131

121:                                              ; preds = %117
  br label %122

122:                                              ; preds = %121
  %123 = load ptr, ptr %12, align 8, !tbaa !5
  %124 = load ptr, ptr %13, align 8, !tbaa !5
  %125 = call i32 %123(ptr noundef @.str.1, i64 noundef 1, ptr noundef %124)
  %126 = icmp slt i32 %125, 0
  br i1 %126, label %127, label %128

127:                                              ; preds = %122
  store i32 11, ptr %22, align 4
  br label %162

128:                                              ; preds = %122
  br label %129

129:                                              ; preds = %128
  br label %130

130:                                              ; preds = %129
  br label %131

131:                                              ; preds = %130, %117
  %132 = load i32, ptr %24, align 4, !tbaa !9
  %133 = icmp slt i32 %132, 0
  br i1 %133, label %134, label %135

134:                                              ; preds = %131
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %135

135:                                              ; preds = %134, %131
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %136

136:                                              ; preds = %150, %135
  %137 = load i32, ptr %26, align 4, !tbaa !9
  %138 = load i32, ptr %24, align 4, !tbaa !9
  %139 = icmp slt i32 %137, %138
  br i1 %139, label %140, label %153

140:                                              ; preds = %136
  br label %141

141:                                              ; preds = %140
  %142 = load ptr, ptr %12, align 8, !tbaa !5
  %143 = load ptr, ptr %13, align 8, !tbaa !5
  %144 = call i32 %142(ptr noundef @.str.2, i64 noundef 4, ptr noundef %143)
  %145 = icmp slt i32 %144, 0
  br i1 %145, label %146, label %147

146:                                              ; preds = %141
  store i32 11, ptr %22, align 4
  br label %162

147:                                              ; preds = %141
  br label %148

148:                                              ; preds = %147
  br label %149

149:                                              ; preds = %148
  br label %150

150:                                              ; preds = %149
  %151 = load i32, ptr %26, align 4, !tbaa !9
  %152 = add nsw i32 %151, 1
  store i32 %152, ptr %26, align 4, !tbaa !9
  br label %136, !llvm.loop !29

153:                                              ; preds = %136
  %154 = load i32, ptr %25, align 4, !tbaa !9
  %155 = load i32, ptr %24, align 4, !tbaa !9
  %156 = mul nsw i32 4, %155
  %157 = add nsw i32 %154, %156
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %160 = load i64, ptr %159, align 8, !tbaa !21
  %161 = add nsw i64 %160, %158
  store i64 %161, ptr %159, align 8, !tbaa !21
  store i32 0, ptr %22, align 4
  br label %162

162:                                              ; preds = %153, %146, %127
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  %163 = load i32, ptr %22, align 4
  switch i32 %163, label %344 [
    i32 0, label %164
  ]

164:                                              ; preds = %162
  br label %165

165:                                              ; preds = %164
  br label %166

166:                                              ; preds = %165
  br label %167

167:                                              ; preds = %166, %113
  br label %168

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

173:                                              ; preds = %168
  %174 = load ptr, ptr %12, align 8, !tbaa !5
  %175 = load ptr, ptr %18, align 8, !tbaa !5
  %176 = load i32, ptr %19, align 4, !tbaa !9
  %177 = zext i32 %176 to i64
  %178 = load ptr, ptr %13, align 8, !tbaa !5
  %179 = call i32 %174(ptr noundef %175, i64 noundef %177, ptr noundef %178)
  %180 = icmp slt i32 %179, 0
  br i1 %180, label %186, label %181

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

186:                                              ; preds = %181, %173, %168
  store i32 11, ptr %22, align 4
  br label %344

187:                                              ; preds = %181
  br label %188

188:                                              ; preds = %187
  br label %189

189:                                              ; preds = %188
  br label %190

190:                                              ; preds = %189, %110
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #5
  %191 = load ptr, ptr %16, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %191, i32 0, i32 5
  %193 = load ptr, ptr %192, align 8, !tbaa !19
  %194 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %193, i32 0, i32 8
  %195 = load ptr, ptr %194, align 8, !tbaa !31
  %196 = load ptr, ptr %16, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %196, i32 0, i32 5
  %198 = load ptr, ptr %197, align 8, !tbaa !19
  %199 = load ptr, ptr %23, align 8, !tbaa !5
  %200 = load i32, ptr %10, align 4, !tbaa !9
  %201 = add nsw i32 %200, 1
  %202 = load i32, ptr %11, align 4, !tbaa !9
  %203 = load ptr, ptr %12, align 8, !tbaa !5
  %204 = load ptr, ptr %13, align 8, !tbaa !5
  call void %195(ptr dead_on_unwind writable sret(%struct.asn_enc_rval_s) align 8 %27, ptr noundef %198, ptr noundef %199, i32 noundef %201, i32 noundef %202, ptr noundef %203, ptr noundef %204)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %27, i64 24, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #5
  %205 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  %206 = load i64, ptr %205, align 8, !tbaa !21
  %207 = icmp eq i64 %206, -1
  br i1 %207, label %208, label %209

208:                                              ; preds = %190
  store i32 1, ptr %22, align 4
  br label %344

209:                                              ; preds = %190
  %210 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  %211 = load i64, ptr %210, align 8, !tbaa !21
  %212 = icmp eq i64 %211, 0
  br i1 %212, label %213, label %305

213:                                              ; preds = %209
  %214 = load ptr, ptr %15, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.asn_SET_OF_specifics_s, ptr %214, i32 0, i32 2
  %216 = load i32, ptr %215, align 4, !tbaa !14
  %217 = icmp ne i32 %216, 0
  br i1 %217, label %218, label %305

218:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %219 = load ptr, ptr %16, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.asn_TYPE_member_s, ptr %219, i32 0, i32 5
  %221 = load ptr, ptr %220, align 8, !tbaa !19
  %222 = getelementptr inbounds %struct.asn_TYPE_descriptor_s, ptr %221, i32 0, i32 1
  %223 = load ptr, ptr %222, align 8, !tbaa !20
  store ptr %223, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %224 = load ptr, ptr %28, align 8, !tbaa !5
  %225 = call i64 @strlen(ptr noundef %224) #6
  store i64 %225, ptr %29, align 8, !tbaa !33
  %226 = load i32, ptr %20, align 4, !tbaa !9
  %227 = icmp ne i32 %226, 0
  br i1 %227, label %280, label %228

228:                                              ; preds = %218
  br label %229

229:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  %230 = load i32, ptr %10, align 4, !tbaa !9
  %231 = add nsw i32 %230, 1
  store i32 %231, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 1, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  %232 = load i32, ptr %31, align 4, !tbaa !9
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %234, label %244

234:                                              ; preds = %229
  br label %235

235:                                              ; preds = %234
  %236 = load ptr, ptr %12, align 8, !tbaa !5
  %237 = load ptr, ptr %13, align 8, !tbaa !5
  %238 = call i32 %236(ptr noundef @.str.1, i64 noundef 1, ptr noundef %237)
  %239 = icmp slt i32 %238, 0
  br i1 %239, label %240, label %241

240:                                              ; preds = %235
  store i32 11, ptr %22, align 4
  br label %275

241:                                              ; preds = %235
  br label %242

242:                                              ; preds = %241
  br label %243

243:                                              ; preds = %242
  br label %244

244:                                              ; preds = %243, %229
  %245 = load i32, ptr %30, align 4, !tbaa !9
  %246 = icmp slt i32 %245, 0
  br i1 %246, label %247, label %248

247:                                              ; preds = %244
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %248

248:                                              ; preds = %247, %244
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %263, %248
  %250 = load i32, ptr %32, align 4, !tbaa !9
  %251 = load i32, ptr %30, align 4, !tbaa !9
  %252 = icmp slt i32 %250, %251
  br i1 %252, label %253, label %266

253:                                              ; preds = %249
  br label %254

254:                                              ; preds = %253
  %255 = load ptr, ptr %12, align 8, !tbaa !5
  %256 = load ptr, ptr %13, align 8, !tbaa !5
  %257 = call i32 %255(ptr noundef @.str.2, i64 noundef 4, ptr noundef %256)
  %258 = icmp slt i32 %257, 0
  br i1 %258, label %259, label %260

259:                                              ; preds = %254
  store i32 11, ptr %22, align 4
  br label %275

260:                                              ; preds = %254
  br label %261

261:                                              ; preds = %260
  br label %262

262:                                              ; preds = %261
  br label %263

263:                                              ; preds = %262
  %264 = load i32, ptr %32, align 4, !tbaa !9
  %265 = add nsw i32 %264, 1
  store i32 %265, ptr %32, align 4, !tbaa !9
  br label %249, !llvm.loop !34

266:                                              ; preds = %249
  %267 = load i32, ptr %31, align 4, !tbaa !9
  %268 = load i32, ptr %30, align 4, !tbaa !9
  %269 = mul nsw i32 4, %268
  %270 = add nsw i32 %267, %269
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %273 = load i64, ptr %272, align 8, !tbaa !21
  %274 = add nsw i64 %273, %271
  store i64 %274, ptr %272, align 8, !tbaa !21
  store i32 0, ptr %22, align 4
  br label %275

275:                                              ; preds = %266, %259, %240
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  %276 = load i32, ptr %22, align 4
  switch i32 %276, label %302 [
    i32 0, label %277
  ]

277:                                              ; preds = %275
  br label %278

278:                                              ; preds = %277
  br label %279

279:                                              ; preds = %278
  br label %280

280:                                              ; preds = %279, %218
  br label %281

281:                                              ; preds = %280
  %282 = load ptr, ptr %12, align 8, !tbaa !5
  %283 = load ptr, ptr %13, align 8, !tbaa !5
  %284 = call i32 %282(ptr noundef @.str.3, i64 noundef 1, ptr noundef %283)
  %285 = icmp slt i32 %284, 0
  br i1 %285, label %298, label %286

286:                                              ; preds = %281
  %287 = load ptr, ptr %12, align 8, !tbaa !5
  %288 = load ptr, ptr %28, align 8, !tbaa !5
  %289 = load i64, ptr %29, align 8, !tbaa !33
  %290 = load ptr, ptr %13, align 8, !tbaa !5
  %291 = call i32 %287(ptr noundef %288, i64 noundef %289, ptr noundef %290)
  %292 = icmp slt i32 %291, 0
  br i1 %292, label %298, label %293

293:                                              ; preds = %286
  %294 = load ptr, ptr %12, align 8, !tbaa !5
  %295 = load ptr, ptr %13, align 8, !tbaa !5
  %296 = call i32 %294(ptr noundef @.str.5, i64 noundef 2, ptr noundef %295)
  %297 = icmp slt i32 %296, 0
  br i1 %297, label %298, label %299

298:                                              ; preds = %293, %286, %281
  store i32 11, ptr %22, align 4
  br label %302

299:                                              ; preds = %293
  br label %300

300:                                              ; preds = %299
  br label %301

301:                                              ; preds = %300
  store i32 0, ptr %22, align 4
  br label %302

302:                                              ; preds = %301, %298, %275
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  %303 = load i32, ptr %22, align 4
  switch i32 %303, label %344 [
    i32 0, label %304
  ]

304:                                              ; preds = %302
  br label %305

305:                                              ; preds = %304, %213, %209
  %306 = load ptr, ptr %18, align 8, !tbaa !5
  %307 = icmp ne ptr %306, null
  br i1 %307, label %308, label %334

308:                                              ; preds = %305
  br label %309

309:                                              ; preds = %308
  %310 = load ptr, ptr %12, align 8, !tbaa !5
  %311 = load ptr, ptr %13, align 8, !tbaa !5
  %312 = call i32 %310(ptr noundef @.str.6, i64 noundef 2, ptr noundef %311)
  %313 = icmp slt i32 %312, 0
  br i1 %313, label %327, label %314

314:                                              ; preds = %309
  %315 = load ptr, ptr %12, align 8, !tbaa !5
  %316 = load ptr, ptr %18, align 8, !tbaa !5
  %317 = load i32, ptr %19, align 4, !tbaa !9
  %318 = zext i32 %317 to i64
  %319 = load ptr, ptr %13, align 8, !tbaa !5
  %320 = call i32 %315(ptr noundef %316, i64 noundef %318, ptr noundef %319)
  %321 = icmp slt i32 %320, 0
  br i1 %321, label %327, label %322

322:                                              ; preds = %314
  %323 = load ptr, ptr %12, align 8, !tbaa !5
  %324 = load ptr, ptr %13, align 8, !tbaa !5
  %325 = call i32 %323(ptr noundef @.str.4, i64 noundef 1, ptr noundef %324)
  %326 = icmp slt i32 %325, 0
  br i1 %326, label %327, label %328

327:                                              ; preds = %322, %314, %309
  store i32 11, ptr %22, align 4
  br label %344

328:                                              ; preds = %322
  br label %329

329:                                              ; preds = %328
  br label %330

330:                                              ; preds = %329
  %331 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %332 = load i64, ptr %331, align 8, !tbaa !21
  %333 = add nsw i64 %332, 5
  store i64 %333, ptr %331, align 8, !tbaa !21
  br label %334

334:                                              ; preds = %330, %305
  %335 = load i32, ptr %19, align 4, !tbaa !9
  %336 = mul i32 2, %335
  %337 = zext i32 %336 to i64
  %338 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  %339 = load i64, ptr %338, align 8, !tbaa !21
  %340 = add nsw i64 %337, %339
  %341 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %342 = load i64, ptr %341, align 8, !tbaa !21
  %343 = add nsw i64 %342, %340
  store i64 %343, ptr %341, align 8, !tbaa !21
  store i32 0, ptr %22, align 4
  br label %344

344:                                              ; preds = %334, %327, %302, %208, %186, %162, %109
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  %345 = load i32, ptr %22, align 4
  switch i32 %345, label %420 [
    i32 0, label %346
    i32 6, label %347
    i32 11, label %411
  ]

346:                                              ; preds = %344
  br label %347

347:                                              ; preds = %346, %344
  %348 = load i32, ptr %21, align 4, !tbaa !9
  %349 = add nsw i32 %348, 1
  store i32 %349, ptr %21, align 4, !tbaa !9
  br label %93, !llvm.loop !35

350:                                              ; preds = %93
  %351 = load i32, ptr %20, align 4, !tbaa !9
  %352 = icmp ne i32 %351, 0
  br i1 %352, label %405, label %353

353:                                              ; preds = %350
  br label %354

354:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %355 = load i32, ptr %10, align 4, !tbaa !9
  %356 = sub nsw i32 %355, 1
  store i32 %356, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  store i32 1, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %357 = load i32, ptr %34, align 4, !tbaa !9
  %358 = icmp ne i32 %357, 0
  br i1 %358, label %359, label %369

359:                                              ; preds = %354
  br label %360

360:                                              ; preds = %359
  %361 = load ptr, ptr %12, align 8, !tbaa !5
  %362 = load ptr, ptr %13, align 8, !tbaa !5
  %363 = call i32 %361(ptr noundef @.str.1, i64 noundef 1, ptr noundef %362)
  %364 = icmp slt i32 %363, 0
  br i1 %364, label %365, label %366

365:                                              ; preds = %360
  store i32 11, ptr %22, align 4
  br label %400

366:                                              ; preds = %360
  br label %367

367:                                              ; preds = %366
  br label %368

368:                                              ; preds = %367
  br label %369

369:                                              ; preds = %368, %354
  %370 = load i32, ptr %33, align 4, !tbaa !9
  %371 = icmp slt i32 %370, 0
  br i1 %371, label %372, label %373

372:                                              ; preds = %369
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %373

373:                                              ; preds = %372, %369
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %374

374:                                              ; preds = %388, %373
  %375 = load i32, ptr %35, align 4, !tbaa !9
  %376 = load i32, ptr %33, align 4, !tbaa !9
  %377 = icmp slt i32 %375, %376
  br i1 %377, label %378, label %391

378:                                              ; preds = %374
  br label %379

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

384:                                              ; preds = %379
  store i32 11, ptr %22, align 4
  br label %400

385:                                              ; preds = %379
  br label %386

386:                                              ; preds = %385
  br label %387

387:                                              ; preds = %386
  br label %388

388:                                              ; preds = %387
  %389 = load i32, ptr %35, align 4, !tbaa !9
  %390 = add nsw i32 %389, 1
  store i32 %390, ptr %35, align 4, !tbaa !9
  br label %374, !llvm.loop !36

391:                                              ; preds = %374
  %392 = load i32, ptr %34, align 4, !tbaa !9
  %393 = load i32, ptr %33, align 4, !tbaa !9
  %394 = mul nsw i32 4, %393
  %395 = add nsw i32 %392, %394
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %398 = load i64, ptr %397, align 8, !tbaa !21
  %399 = add nsw i64 %398, %396
  store i64 %399, ptr %397, align 8, !tbaa !21
  store i32 0, ptr %22, align 4
  br label %400

400:                                              ; preds = %391, %384, %365
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  %401 = load i32, ptr %22, align 4
  switch i32 %401, label %420 [
    i32 0, label %402
    i32 11, label %411
  ]

402:                                              ; preds = %400
  br label %403

403:                                              ; preds = %402
  br label %404

404:                                              ; preds = %403
  br label %405

405:                                              ; preds = %404, %350
  br label %406

406:                                              ; preds = %405
  %407 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 2
  store ptr null, ptr %407, align 8, !tbaa !25
  %408 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 1
  store ptr null, ptr %408, align 8, !tbaa !24
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %14, i64 24, i1 false), !tbaa.struct !32
  store i32 1, ptr %22, align 4
  br label %420

409:                                              ; No predecessors!
  br label %410

410:                                              ; preds = %409
  br label %411

411:                                              ; preds = %410, %400, %344
  br label %412

412:                                              ; preds = %411
  %413 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %413, align 8, !tbaa !21
  %414 = load ptr, ptr %8, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %414, ptr %415, align 8, !tbaa !24
  %416 = load ptr, ptr %9, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %416, ptr %417, align 8, !tbaa !25
  call void @stacktrace_create(ptr noundef @.str, i64 noundef 185, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %22, align 4
  br label %420

418:                                              ; No predecessors!
  br label %419

419:                                              ; preds = %418
  store i32 0, ptr %22, align 4
  br label %420

420:                                              ; preds = %419, %412, %406, %400, %344, %83
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #5
  %421 = load i32, ptr %22, align 4
  switch i32 %421, label %423 [
    i32 0, label %422
    i32 1, label %422
  ]

422:                                              ; preds = %420, %420
  ret void

423:                                              ; preds = %420
  unreachable
}

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

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

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

!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, !23, i64 0}
!22 = !{!"asn_enc_rval_s", !23, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!"long", !7, i64 0}
!24 = !{!22, !6, i64 8}
!25 = !{!22, !6, i64 16}
!26 = !{!27, !10, i64 8}
!27 = !{!"", !6, i64 0, !10, i64 8, !10, i64 12, !6, i64 16}
!28 = !{!27, !6, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!12, !6, i64 64}
!32 = !{i64 0, i64 8, !33, i64 8, i64 8, !5, i64 16, i64 8, !5}
!33 = !{!23, !23, i64 0}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}


; 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 }

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

; Function Attrs: nounwind uwtable
define dso_local void @SEQUENCE_OF_encode_xer(ptr dead_on_unwind noalias nocapture 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) local_unnamed_addr #0 {
  %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
  %12 = getelementptr inbounds i8, ptr %9, i64 8
  %13 = load i32, ptr %12, align 4, !tbaa !12
  %.not = icmp eq i32 %13, 0
  br i1 %.not, label %14, label %.thread

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

18:                                               ; preds = %14
  %19 = getelementptr inbounds i8, ptr %11, i64 24
  %20 = load ptr, ptr %19, align 8, !tbaa !17
  %21 = getelementptr inbounds i8, ptr %20, i64 8
  %22 = load ptr, ptr %21, align 8, !tbaa !18
  %.not121 = icmp eq ptr %22, null
  br i1 %.not121, label %.thread, label %.thread131

.thread131:                                       ; preds = %14, %18
  %23 = phi ptr [ %22, %18 ], [ %16, %14 ]
  %24 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %23) #5
  %25 = trunc i64 %24 to i32
  br label %.thread

.thread:                                          ; preds = %7, %18, %.thread131
  %.not121130 = phi i1 [ false, %.thread131 ], [ true, %18 ], [ true, %7 ]
  %26 = phi ptr [ %23, %.thread131 ], [ null, %18 ], [ null, %7 ]
  %27 = phi i32 [ %25, %.thread131 ], [ 0, %18 ], [ 0, %7 ]
  %28 = and i32 %4, 2
  %.not122 = icmp eq ptr %2, null
  br i1 %.not122, label %44, label %.preheader

.preheader:                                       ; preds = %.thread
  %29 = getelementptr inbounds i8, ptr %2, i64 8
  %30 = load i32, ptr %29, align 8, !tbaa !19
  %31 = icmp sgt i32 %30, 0
  br i1 %31, label %.lr.ph176, label %._crit_edge177

.lr.ph176:                                        ; preds = %.preheader
  %.not125 = icmp eq i32 %28, 0
  %spec.store.select = tail call i32 @llvm.smax.i32(i32 %3, i32 0)
  %32 = icmp sgt i32 %3, 0
  %33 = shl nsw i32 %spec.store.select, 2
  %34 = or disjoint i32 %33, 1
  %35 = zext nneg i32 %34 to i64
  %36 = zext i32 %27 to i64
  %37 = getelementptr inbounds i8, ptr %11, i64 24
  %38 = add i32 %3, 1
  %spec.store.select3 = tail call i32 @llvm.smax.i32(i32 %38, i32 0)
  %.not128169 = icmp slt i32 %3, 0
  %39 = shl nsw i32 %spec.store.select3, 2
  %40 = or disjoint i32 %39, 1
  %41 = zext nneg i32 %40 to i64
  %42 = shl i32 %27, 1
  %43 = zext i32 %42 to i64
  br label %47

44:                                               ; preds = %.thread
  store i64 -1, ptr %0, align 8, !tbaa !21
  %45 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %45, align 8, !tbaa !24
  %46 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr null, ptr %46, align 8, !tbaa !25
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 138, i32 noundef 101, ptr noundef null) #6
  br label %.loopexit

47:                                               ; preds = %.lr.ph176, %117
  %48 = phi i32 [ %30, %.lr.ph176 ], [ %118, %117 ]
  %indvars.iv = phi i64 [ 0, %.lr.ph176 ], [ %indvars.iv.next, %117 ]
  %.sroa.0.0175 = phi i64 [ 0, %.lr.ph176 ], [ %.sroa.0.9.ph, %117 ]
  %49 = load ptr, ptr %2, align 8, !tbaa !26
  %50 = getelementptr inbounds ptr, ptr %49, i64 %indvars.iv
  %51 = load ptr, ptr %50, align 8, !tbaa !27
  %.not124 = icmp eq ptr %51, null
  br i1 %.not124, label %117, label %52

52:                                               ; preds = %47
  br i1 %.not121130, label %72, label %53

53:                                               ; preds = %52
  br i1 %.not125, label %54, label %63

54:                                               ; preds = %53
  %55 = tail call i32 %5(ptr noundef nonnull @.str.1, i64 noundef 1, ptr noundef %6) #6
  %56 = icmp slt i32 %55, 0
  br i1 %56, label %.thread149, label %57

57:                                               ; preds = %54
  br i1 %32, label %.lr.ph, label %._crit_edge

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

.lr.ph:                                           ; preds = %57, %58
  %.0112168 = phi i32 [ %59, %58 ], [ 0, %57 ]
  %60 = tail call i32 %5(ptr noundef nonnull @.str.2, i64 noundef 4, ptr noundef %6) #6
  %61 = icmp slt i32 %60, 0
  br i1 %61, label %.thread149, label %58

._crit_edge:                                      ; preds = %58, %57
  %62 = add nsw i64 %.sroa.0.0175, %35
  br label %63

63:                                               ; preds = %._crit_edge, %53
  %.sroa.0.2 = phi i64 [ %.sroa.0.0175, %53 ], [ %62, %._crit_edge ]
  %64 = tail call i32 %5(ptr noundef nonnull @.str.3, i64 noundef 1, ptr noundef %6) #6
  %65 = icmp slt i32 %64, 0
  br i1 %65, label %.thread149, label %66

66:                                               ; preds = %63
  %67 = tail call i32 %5(ptr noundef nonnull %26, i64 noundef %36, ptr noundef %6) #6
  %68 = icmp slt i32 %67, 0
  br i1 %68, label %.thread149, label %69

69:                                               ; preds = %66
  %70 = tail call i32 %5(ptr noundef nonnull @.str.4, i64 noundef 1, ptr noundef %6) #6
  %71 = icmp slt i32 %70, 0
  br i1 %71, label %.thread149, label %72

72:                                               ; preds = %69, %52
  %.sroa.0.3 = phi i64 [ %.sroa.0.2, %69 ], [ %.sroa.0.0175, %52 ]
  %73 = load ptr, ptr %37, align 8, !tbaa !17
  %74 = getelementptr inbounds i8, ptr %73, i64 64
  %75 = load ptr, ptr %74, align 8, !tbaa !30
  tail call void %75(ptr dead_on_unwind nonnull writable sret(%struct.asn_enc_rval_s) align 8 %0, ptr noundef %73, ptr noundef nonnull %51, i32 noundef %38, i32 noundef %4, ptr noundef %5, ptr noundef %6) #6
  %76 = load i64, ptr %0, align 8, !tbaa !21
  switch i64 %76, label %102 [
    i64 -1, label %.loopexit
    i64 0, label %77
  ]

77:                                               ; preds = %72
  %78 = load i32, ptr %12, align 4, !tbaa !12
  %.not126 = icmp eq i32 %78, 0
  br i1 %.not126, label %102, label %79

79:                                               ; preds = %77
  %80 = load ptr, ptr %37, align 8, !tbaa !17
  %81 = getelementptr inbounds i8, ptr %80, i64 8
  %82 = load ptr, ptr %81, align 8, !tbaa !18
  %83 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %82) #5
  br i1 %.not125, label %84, label %93

84:                                               ; preds = %79
  %85 = tail call i32 %5(ptr noundef nonnull @.str.1, i64 noundef 1, ptr noundef %6) #6
  %86 = icmp slt i32 %85, 0
  br i1 %86, label %.thread149, label %87

87:                                               ; preds = %84
  br i1 %.not128169, label %._crit_edge173, label %.lr.ph172

88:                                               ; preds = %.lr.ph172
  %89 = add nuw i32 %.0109170, 1
  %exitcond185.not = icmp eq i32 %.0109170, %3
  br i1 %exitcond185.not, label %._crit_edge173, label %.lr.ph172, !llvm.loop !31

.lr.ph172:                                        ; preds = %87, %88
  %.0109170 = phi i32 [ %89, %88 ], [ 0, %87 ]
  %90 = tail call i32 %5(ptr noundef nonnull @.str.2, i64 noundef 4, ptr noundef %6) #6
  %91 = icmp slt i32 %90, 0
  br i1 %91, label %.thread149, label %88

._crit_edge173:                                   ; preds = %88, %87
  %92 = add nsw i64 %.sroa.0.3, %41
  br label %93

93:                                               ; preds = %._crit_edge173, %79
  %.sroa.0.5 = phi i64 [ %.sroa.0.3, %79 ], [ %92, %._crit_edge173 ]
  %94 = tail call i32 %5(ptr noundef nonnull @.str.3, i64 noundef 1, ptr noundef %6) #6
  %95 = icmp slt i32 %94, 0
  br i1 %95, label %.thread149, label %96

96:                                               ; preds = %93
  %97 = tail call i32 %5(ptr noundef %82, i64 noundef %83, ptr noundef %6) #6
  %98 = icmp slt i32 %97, 0
  br i1 %98, label %.thread149, label %99

99:                                               ; preds = %96
  %100 = tail call i32 %5(ptr noundef nonnull @.str.5, i64 noundef 2, ptr noundef %6) #6
  %101 = icmp slt i32 %100, 0
  br i1 %101, label %.thread149, label %102

102:                                              ; preds = %99, %72, %77
  %.sroa.0.7 = phi i64 [ %.sroa.0.3, %77 ], [ %.sroa.0.3, %72 ], [ %.sroa.0.5, %99 ]
  br i1 %.not121130, label %114, label %103

103:                                              ; preds = %102
  %104 = tail call i32 %5(ptr noundef nonnull @.str.6, i64 noundef 2, ptr noundef %6) #6
  %105 = icmp slt i32 %104, 0
  br i1 %105, label %.thread149, label %106

106:                                              ; preds = %103
  %107 = tail call i32 %5(ptr noundef nonnull %26, i64 noundef %36, ptr noundef %6) #6
  %108 = icmp slt i32 %107, 0
  br i1 %108, label %.thread149, label %109

109:                                              ; preds = %106
  %110 = tail call i32 %5(ptr noundef nonnull @.str.4, i64 noundef 1, ptr noundef %6) #6
  %111 = icmp slt i32 %110, 0
  br i1 %111, label %.thread149, label %112

112:                                              ; preds = %109
  %113 = add nsw i64 %.sroa.0.7, 5
  br label %114

114:                                              ; preds = %112, %102
  %.sroa.0.8 = phi i64 [ %113, %112 ], [ %.sroa.0.7, %102 ]
  %115 = add nsw i64 %76, %43
  %116 = add nsw i64 %115, %.sroa.0.8
  %.pre = load i32, ptr %29, align 8, !tbaa !19
  br label %117

117:                                              ; preds = %114, %47
  %118 = phi i32 [ %48, %47 ], [ %.pre, %114 ]
  %.sroa.0.9.ph = phi i64 [ %.sroa.0.0175, %47 ], [ %116, %114 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %119 = sext i32 %118 to i64
  %120 = icmp slt i64 %indvars.iv.next, %119
  br i1 %120, label %47, label %._crit_edge177, !llvm.loop !32

._crit_edge177:                                   ; preds = %117, %.preheader
  %.sroa.0.0.lcssa = phi i64 [ 0, %.preheader ], [ %.sroa.0.9.ph, %117 ]
  %.not123 = icmp eq i32 %28, 0
  br i1 %.not123, label %121, label %135

121:                                              ; preds = %._crit_edge177
  %122 = tail call i32 %5(ptr noundef nonnull @.str.1, i64 noundef 1, ptr noundef %6) #6
  %123 = icmp slt i32 %122, 0
  br i1 %123, label %.thread149, label %124

124:                                              ; preds = %121
  %125 = tail call i32 @llvm.smax.i32(i32 %3, i32 1)
  %spec.store.select4 = add nsw i32 %125, -1
  %126 = icmp sgt i32 %3, 1
  br i1 %126, label %.lr.ph180, label %._crit_edge181

127:                                              ; preds = %.lr.ph180
  %128 = add nuw nsw i32 %.0178, 1
  %exitcond187.not = icmp eq i32 %128, %spec.store.select4
  br i1 %exitcond187.not, label %._crit_edge181, label %.lr.ph180, !llvm.loop !33

.lr.ph180:                                        ; preds = %124, %127
  %.0178 = phi i32 [ %128, %127 ], [ 0, %124 ]
  %129 = tail call i32 %5(ptr noundef nonnull @.str.2, i64 noundef 4, ptr noundef %6) #6
  %130 = icmp slt i32 %129, 0
  br i1 %130, label %.thread149, label %127

._crit_edge181:                                   ; preds = %127, %124
  %131 = shl nsw i32 %spec.store.select4, 2
  %132 = or disjoint i32 %131, 1
  %133 = sext i32 %132 to i64
  %134 = add nsw i64 %.sroa.0.0.lcssa, %133
  br label %135

135:                                              ; preds = %._crit_edge181, %._crit_edge177
  %.sroa.0.11 = phi i64 [ %.sroa.0.0.lcssa, %._crit_edge177 ], [ %134, %._crit_edge181 ]
  store i64 %.sroa.0.11, ptr %0, align 8, !tbaa !34
  %.sroa.14.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.14.0..sroa_idx, i8 0, i64 16, i1 false)
  br label %.loopexit

.thread149:                                       ; preds = %99, %84, %93, %96, %54, %103, %106, %109, %63, %66, %69, %.lr.ph, %.lr.ph172, %.lr.ph180, %121
  store i64 -1, ptr %0, align 8, !tbaa !21
  %136 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %136, align 8, !tbaa !24
  %137 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %2, ptr %137, align 8, !tbaa !25
  tail call void @stacktrace_create(ptr noundef nonnull @.str, i64 noundef 185, i32 noundef 101, ptr noundef null) #6
  br label %.loopexit

.loopexit:                                        ; preds = %72, %.thread149, %135, %44
  ret void
}

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

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

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

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

attributes #0 = { 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 #1 = { 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 #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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind willreturn memory(read) }
attributes #6 = { 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 = !{!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, !10, i64 8}
!20 = !{!"", !7, i64 0, !10, i64 8, !10, i64 12, !7, i64 16}
!21 = !{!22, !23, i64 0}
!22 = !{!"asn_enc_rval_s", !23, i64 0, !7, i64 8, !7, i64 16}
!23 = !{!"long", !8, i64 0}
!24 = !{!22, !7, i64 8}
!25 = !{!22, !7, i64 16}
!26 = !{!20, !7, i64 0}
!27 = !{!7, !7, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!6, !7, i64 64}
!31 = distinct !{!31, !29}
!32 = distinct !{!32, !29}
!33 = distinct !{!33, !29}
!34 = !{!23, !23, i64 0}


; 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