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

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

@.str.3 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [5 x i8], align 1
@_bit_pattern = external hidden global [16 x ptr], align 16

; Function Attrs: nounwind uwtable
define dso_local void @BIT_STRING_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) #0 {
  %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 [128 x i8], align 16
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %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 i32, align 4
  %36 = 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) #4
  call void @llvm.lifetime.start.p0(i64 128, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %37 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  store ptr %37, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  %38 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %39 = getelementptr inbounds i8, ptr %38, i64 118
  store ptr %39, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %40 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %40, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %41 = load i32, ptr %11, align 4, !tbaa !9
  %42 = and i32 %41, 2
  store i32 %42, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %43 = load ptr, ptr %18, align 8, !tbaa !5
  %44 = icmp ne ptr %43, null
  br i1 %44, label %45, label %50

45:                                               ; preds = %7
  %46 = load ptr, ptr %18, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.BIT_STRING_s, ptr %46, i32 0, i32 0
  %48 = load ptr, ptr %47, align 8, !tbaa !11
  %49 = icmp ne ptr %48, null
  br i1 %49, label %59, label %50

50:                                               ; preds = %45, %7
  br label %51

51:                                               ; preds = %50
  %52 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %52, align 8, !tbaa !16
  %53 = load ptr, ptr %8, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %53, ptr %54, align 8, !tbaa !18
  %55 = load ptr, ptr %9, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %55, ptr %56, align 8, !tbaa !19
  call void @stacktrace_create(ptr noundef @.str.3, i64 noundef 122, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %22, align 4
  br label %417

57:                                               ; No predecessors!
  br label %58

58:                                               ; preds = %57
  br label %59

59:                                               ; preds = %58, %45
  %60 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  store i64 0, ptr %60, align 8, !tbaa !16
  %61 = load ptr, ptr %18, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.BIT_STRING_s, ptr %61, i32 0, i32 0
  %63 = load ptr, ptr %62, align 8, !tbaa !11
  store ptr %63, ptr %20, align 8, !tbaa !5
  %64 = load ptr, ptr %20, align 8, !tbaa !5
  %65 = load ptr, ptr %18, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.BIT_STRING_s, ptr %65, i32 0, i32 1
  %67 = load i32, ptr %66, align 8, !tbaa !20
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds i8, ptr %64, i64 %68
  %70 = getelementptr inbounds i8, ptr %69, i64 -1
  store ptr %70, ptr %21, align 8, !tbaa !5
  br label %71

71:                                               ; preds = %200, %59
  %72 = load ptr, ptr %20, align 8, !tbaa !5
  %73 = load ptr, ptr %21, align 8, !tbaa !5
  %74 = icmp ult ptr %72, %73
  br i1 %74, label %75, label %203

75:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %76 = load ptr, ptr %20, align 8, !tbaa !5
  %77 = load i8, ptr %76, align 1, !tbaa !21
  %78 = zext i8 %77 to i32
  store i32 %78, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %79 = load i32, ptr %19, align 4, !tbaa !9
  %80 = icmp ne i32 %79, 0
  br i1 %80, label %81, label %82

81:                                               ; preds = %75
  br label %93

82:                                               ; preds = %75
  %83 = load ptr, ptr %20, align 8, !tbaa !5
  %84 = load ptr, ptr %18, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.BIT_STRING_s, ptr %84, i32 0, i32 0
  %86 = load ptr, ptr %85, align 8, !tbaa !11
  %87 = ptrtoint ptr %83 to i64
  %88 = ptrtoint ptr %86 to i64
  %89 = sub i64 %87, %88
  %90 = srem i64 %89, 8
  %91 = icmp eq i64 %90, 0
  %92 = zext i1 %91 to i32
  br label %93

93:                                               ; preds = %82, %81
  %94 = phi i32 [ 0, %81 ], [ %92, %82 ]
  store i32 %94, ptr %24, align 4, !tbaa !9
  %95 = load ptr, ptr %16, align 8, !tbaa !5
  %96 = load ptr, ptr %17, align 8, !tbaa !5
  %97 = icmp uge ptr %95, %96
  br i1 %97, label %101, label %98

98:                                               ; preds = %93
  %99 = load i32, ptr %24, align 4, !tbaa !9
  %100 = icmp ne i32 %99, 0
  br i1 %100, label %101, label %180

101:                                              ; preds = %98, %93
  %102 = load ptr, ptr %16, align 8, !tbaa !5
  %103 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %104 = ptrtoint ptr %102 to i64
  %105 = ptrtoint ptr %103 to i64
  %106 = sub i64 %104, %105
  %107 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %108 = load i64, ptr %107, align 8, !tbaa !16
  %109 = add nsw i64 %108, %106
  store i64 %109, ptr %107, align 8, !tbaa !16
  br label %110

110:                                              ; preds = %101
  %111 = load ptr, ptr %12, align 8, !tbaa !5
  %112 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %113 = load ptr, ptr %16, align 8, !tbaa !5
  %114 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %115 = ptrtoint ptr %113 to i64
  %116 = ptrtoint ptr %114 to i64
  %117 = sub i64 %115, %116
  %118 = load ptr, ptr %13, align 8, !tbaa !5
  %119 = call i32 %111(ptr noundef %112, i64 noundef %117, ptr noundef %118)
  %120 = icmp slt i32 %119, 0
  br i1 %120, label %121, label %122

121:                                              ; preds = %110
  store i32 9, ptr %22, align 4
  br label %197

122:                                              ; preds = %110
  br label %123

123:                                              ; preds = %122
  br label %124

124:                                              ; preds = %123
  %125 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  store ptr %125, ptr %16, align 8, !tbaa !5
  %126 = load i32, ptr %24, align 4, !tbaa !9
  %127 = icmp ne i32 %126, 0
  br i1 %127, label %128, label %179

128:                                              ; preds = %124
  br label %129

129:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %130 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %130, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  store i32 1, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %131 = load i32, ptr %26, align 4, !tbaa !9
  %132 = icmp ne i32 %131, 0
  br i1 %132, label %133, label %143

133:                                              ; preds = %129
  br label %134

134:                                              ; preds = %133
  %135 = load ptr, ptr %12, align 8, !tbaa !5
  %136 = load ptr, ptr %13, align 8, !tbaa !5
  %137 = call i32 %135(ptr noundef @.str.5, i64 noundef 1, ptr noundef %136)
  %138 = icmp slt i32 %137, 0
  br i1 %138, label %139, label %140

139:                                              ; preds = %134
  store i32 9, ptr %22, align 4
  br label %174

140:                                              ; preds = %134
  br label %141

141:                                              ; preds = %140
  br label %142

142:                                              ; preds = %141
  br label %143

143:                                              ; preds = %142, %129
  %144 = load i32, ptr %25, align 4, !tbaa !9
  %145 = icmp slt i32 %144, 0
  br i1 %145, label %146, label %147

146:                                              ; preds = %143
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %146, %143
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %162, %147
  %149 = load i32, ptr %27, align 4, !tbaa !9
  %150 = load i32, ptr %25, align 4, !tbaa !9
  %151 = icmp slt i32 %149, %150
  br i1 %151, label %152, label %165

152:                                              ; preds = %148
  br label %153

153:                                              ; preds = %152
  %154 = load ptr, ptr %12, align 8, !tbaa !5
  %155 = load ptr, ptr %13, align 8, !tbaa !5
  %156 = call i32 %154(ptr noundef @.str.6, i64 noundef 4, ptr noundef %155)
  %157 = icmp slt i32 %156, 0
  br i1 %157, label %158, label %159

158:                                              ; preds = %153
  store i32 9, ptr %22, align 4
  br label %174

159:                                              ; preds = %153
  br label %160

160:                                              ; preds = %159
  br label %161

161:                                              ; preds = %160
  br label %162

162:                                              ; preds = %161
  %163 = load i32, ptr %27, align 4, !tbaa !9
  %164 = add nsw i32 %163, 1
  store i32 %164, ptr %27, align 4, !tbaa !9
  br label %148, !llvm.loop !22

165:                                              ; preds = %148
  %166 = load i32, ptr %26, align 4, !tbaa !9
  %167 = load i32, ptr %25, align 4, !tbaa !9
  %168 = mul nsw i32 4, %167
  %169 = add nsw i32 %166, %168
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %172 = load i64, ptr %171, align 8, !tbaa !16
  %173 = add nsw i64 %172, %170
  store i64 %173, ptr %171, align 8, !tbaa !16
  store i32 0, ptr %22, align 4
  br label %174

174:                                              ; preds = %165, %158, %139
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  %175 = load i32, ptr %22, align 4
  switch i32 %175, label %197 [
    i32 0, label %176
  ]

176:                                              ; preds = %174
  br label %177

177:                                              ; preds = %176
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %178, %124
  br label %180

180:                                              ; preds = %179, %98
  %181 = load ptr, ptr %16, align 8, !tbaa !5
  %182 = getelementptr inbounds i8, ptr %181, i64 0
  %183 = load i32, ptr %23, align 4, !tbaa !9
  %184 = ashr i32 %183, 4
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds [16 x ptr], ptr @_bit_pattern, i64 0, i64 %185
  %187 = load ptr, ptr %186, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %182, ptr align 1 %187, i64 4, i1 false)
  %188 = load ptr, ptr %16, align 8, !tbaa !5
  %189 = getelementptr inbounds i8, ptr %188, i64 4
  %190 = load i32, ptr %23, align 4, !tbaa !9
  %191 = and i32 %190, 15
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds [16 x ptr], ptr @_bit_pattern, i64 0, i64 %192
  %194 = load ptr, ptr %193, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %189, ptr align 1 %194, i64 4, i1 false)
  %195 = load ptr, ptr %16, align 8, !tbaa !5
  %196 = getelementptr inbounds i8, ptr %195, i64 8
  store ptr %196, ptr %16, align 8, !tbaa !5
  store i32 0, ptr %22, align 4
  br label %197

197:                                              ; preds = %180, %174, %121
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  %198 = load i32, ptr %22, align 4
  switch i32 %198, label %417 [
    i32 0, label %199
    i32 9, label %408
  ]

199:                                              ; preds = %197
  br label %200

200:                                              ; preds = %199
  %201 = load ptr, ptr %20, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %201, i32 1
  store ptr %202, ptr %20, align 8, !tbaa !5
  br label %71, !llvm.loop !24

203:                                              ; preds = %71
  %204 = load i32, ptr %19, align 4, !tbaa !9
  %205 = icmp ne i32 %204, 0
  br i1 %205, label %267, label %206

206:                                              ; preds = %203
  %207 = load ptr, ptr %20, align 8, !tbaa !5
  %208 = load ptr, ptr %18, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.BIT_STRING_s, ptr %208, i32 0, i32 0
  %210 = load ptr, ptr %209, align 8, !tbaa !11
  %211 = ptrtoint ptr %207 to i64
  %212 = ptrtoint ptr %210 to i64
  %213 = sub i64 %211, %212
  %214 = srem i64 %213, 8
  %215 = icmp eq i64 %214, 0
  br i1 %215, label %216, label %267

216:                                              ; preds = %206
  br label %217

217:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %218 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %218, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  store i32 1, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %219 = load i32, ptr %29, align 4, !tbaa !9
  %220 = icmp ne i32 %219, 0
  br i1 %220, label %221, label %231

221:                                              ; preds = %217
  br label %222

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

227:                                              ; preds = %222
  store i32 9, ptr %22, align 4
  br label %262

228:                                              ; preds = %222
  br label %229

229:                                              ; preds = %228
  br label %230

230:                                              ; preds = %229
  br label %231

231:                                              ; preds = %230, %217
  %232 = load i32, ptr %28, align 4, !tbaa !9
  %233 = icmp slt i32 %232, 0
  br i1 %233, label %234, label %235

234:                                              ; preds = %231
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %235

235:                                              ; preds = %234, %231
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %236

236:                                              ; preds = %250, %235
  %237 = load i32, ptr %30, align 4, !tbaa !9
  %238 = load i32, ptr %28, align 4, !tbaa !9
  %239 = icmp slt i32 %237, %238
  br i1 %239, label %240, label %253

240:                                              ; preds = %236
  br label %241

241:                                              ; preds = %240
  %242 = load ptr, ptr %12, align 8, !tbaa !5
  %243 = load ptr, ptr %13, align 8, !tbaa !5
  %244 = call i32 %242(ptr noundef @.str.6, i64 noundef 4, ptr noundef %243)
  %245 = icmp slt i32 %244, 0
  br i1 %245, label %246, label %247

246:                                              ; preds = %241
  store i32 9, ptr %22, align 4
  br label %262

247:                                              ; preds = %241
  br label %248

248:                                              ; preds = %247
  br label %249

249:                                              ; preds = %248
  br label %250

250:                                              ; preds = %249
  %251 = load i32, ptr %30, align 4, !tbaa !9
  %252 = add nsw i32 %251, 1
  store i32 %252, ptr %30, align 4, !tbaa !9
  br label %236, !llvm.loop !25

253:                                              ; preds = %236
  %254 = load i32, ptr %29, align 4, !tbaa !9
  %255 = load i32, ptr %28, align 4, !tbaa !9
  %256 = mul nsw i32 4, %255
  %257 = add nsw i32 %254, %256
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %260 = load i64, ptr %259, align 8, !tbaa !16
  %261 = add nsw i64 %260, %258
  store i64 %261, ptr %259, align 8, !tbaa !16
  store i32 0, ptr %22, align 4
  br label %262

262:                                              ; preds = %253, %246, %227
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  %263 = load i32, ptr %22, align 4
  switch i32 %263, label %417 [
    i32 0, label %264
    i32 9, label %408
  ]

264:                                              ; preds = %262
  br label %265

265:                                              ; preds = %264
  br label %266

266:                                              ; preds = %265
  br label %267

267:                                              ; preds = %266, %206, %203
  %268 = load ptr, ptr %16, align 8, !tbaa !5
  %269 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %270 = ptrtoint ptr %268 to i64
  %271 = ptrtoint ptr %269 to i64
  %272 = sub i64 %270, %271
  %273 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %274 = load i64, ptr %273, align 8, !tbaa !16
  %275 = add nsw i64 %274, %272
  store i64 %275, ptr %273, align 8, !tbaa !16
  br label %276

276:                                              ; preds = %267
  %277 = load ptr, ptr %12, align 8, !tbaa !5
  %278 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %279 = load ptr, ptr %16, align 8, !tbaa !5
  %280 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %281 = ptrtoint ptr %279 to i64
  %282 = ptrtoint ptr %280 to i64
  %283 = sub i64 %281, %282
  %284 = load ptr, ptr %13, align 8, !tbaa !5
  %285 = call i32 %277(ptr noundef %278, i64 noundef %283, ptr noundef %284)
  %286 = icmp slt i32 %285, 0
  br i1 %286, label %287, label %288

287:                                              ; preds = %276
  br label %408

288:                                              ; preds = %276
  br label %289

289:                                              ; preds = %288
  br label %290

290:                                              ; preds = %289
  %291 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  store ptr %291, ptr %16, align 8, !tbaa !5
  %292 = load ptr, ptr %20, align 8, !tbaa !5
  %293 = load ptr, ptr %21, align 8, !tbaa !5
  %294 = icmp eq ptr %292, %293
  br i1 %294, label %295, label %347

295:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %296 = load ptr, ptr %20, align 8, !tbaa !5
  %297 = load i8, ptr %296, align 1, !tbaa !21
  %298 = zext i8 %297 to i32
  store i32 %298, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %299 = load ptr, ptr %18, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.BIT_STRING_s, ptr %299, i32 0, i32 2
  %301 = load i32, ptr %300, align 4, !tbaa !26
  store i32 %301, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  store i32 7, ptr %33, align 4, !tbaa !9
  br label %302

302:                                              ; preds = %317, %295
  %303 = load i32, ptr %33, align 4, !tbaa !9
  %304 = load i32, ptr %32, align 4, !tbaa !9
  %305 = icmp sge i32 %303, %304
  br i1 %305, label %306, label %320

306:                                              ; preds = %302
  %307 = load i32, ptr %31, align 4, !tbaa !9
  %308 = load i32, ptr %33, align 4, !tbaa !9
  %309 = shl i32 1, %308
  %310 = and i32 %307, %309
  %311 = icmp ne i32 %310, 0
  %312 = zext i1 %311 to i64
  %313 = select i1 %311, i32 49, i32 48
  %314 = trunc i32 %313 to i8
  %315 = load ptr, ptr %16, align 8, !tbaa !5
  %316 = getelementptr inbounds i8, ptr %315, i32 1
  store ptr %316, ptr %16, align 8, !tbaa !5
  store i8 %314, ptr %315, align 1, !tbaa !21
  br label %317

317:                                              ; preds = %306
  %318 = load i32, ptr %33, align 4, !tbaa !9
  %319 = add nsw i32 %318, -1
  store i32 %319, ptr %33, align 4, !tbaa !9
  br label %302, !llvm.loop !27

320:                                              ; preds = %302
  %321 = load ptr, ptr %16, align 8, !tbaa !5
  %322 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %323 = ptrtoint ptr %321 to i64
  %324 = ptrtoint ptr %322 to i64
  %325 = sub i64 %323, %324
  %326 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %327 = load i64, ptr %326, align 8, !tbaa !16
  %328 = add nsw i64 %327, %325
  store i64 %328, ptr %326, align 8, !tbaa !16
  br label %329

329:                                              ; preds = %320
  %330 = load ptr, ptr %12, align 8, !tbaa !5
  %331 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %332 = load ptr, ptr %16, align 8, !tbaa !5
  %333 = getelementptr inbounds [128 x i8], ptr %15, i64 0, i64 0
  %334 = ptrtoint ptr %332 to i64
  %335 = ptrtoint ptr %333 to i64
  %336 = sub i64 %334, %335
  %337 = load ptr, ptr %13, align 8, !tbaa !5
  %338 = call i32 %330(ptr noundef %331, i64 noundef %336, ptr noundef %337)
  %339 = icmp slt i32 %338, 0
  br i1 %339, label %340, label %341

340:                                              ; preds = %329
  store i32 9, ptr %22, align 4
  br label %344

341:                                              ; preds = %329
  br label %342

342:                                              ; preds = %341
  br label %343

343:                                              ; preds = %342
  store i32 0, ptr %22, align 4
  br label %344

344:                                              ; preds = %343, %340
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  %345 = load i32, ptr %22, align 4
  switch i32 %345, label %417 [
    i32 0, label %346
    i32 9, label %408
  ]

346:                                              ; preds = %344
  br label %347

347:                                              ; preds = %346, %290
  %348 = load i32, ptr %19, align 4, !tbaa !9
  %349 = icmp ne i32 %348, 0
  br i1 %349, label %402, label %350

350:                                              ; preds = %347
  br label %351

351:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %352 = load i32, ptr %10, align 4, !tbaa !9
  %353 = sub nsw i32 %352, 1
  store i32 %353, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  store i32 1, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %354 = load i32, ptr %35, align 4, !tbaa !9
  %355 = icmp ne i32 %354, 0
  br i1 %355, label %356, label %366

356:                                              ; preds = %351
  br label %357

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

362:                                              ; preds = %357
  store i32 9, ptr %22, align 4
  br label %397

363:                                              ; preds = %357
  br label %364

364:                                              ; preds = %363
  br label %365

365:                                              ; preds = %364
  br label %366

366:                                              ; preds = %365, %351
  %367 = load i32, ptr %34, align 4, !tbaa !9
  %368 = icmp slt i32 %367, 0
  br i1 %368, label %369, label %370

369:                                              ; preds = %366
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %370

370:                                              ; preds = %369, %366
  store i32 0, ptr %36, align 4, !tbaa !9
  br label %371

371:                                              ; preds = %385, %370
  %372 = load i32, ptr %36, align 4, !tbaa !9
  %373 = load i32, ptr %34, align 4, !tbaa !9
  %374 = icmp slt i32 %372, %373
  br i1 %374, label %375, label %388

375:                                              ; preds = %371
  br label %376

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

381:                                              ; preds = %376
  store i32 9, ptr %22, align 4
  br label %397

382:                                              ; preds = %376
  br label %383

383:                                              ; preds = %382
  br label %384

384:                                              ; preds = %383
  br label %385

385:                                              ; preds = %384
  %386 = load i32, ptr %36, align 4, !tbaa !9
  %387 = add nsw i32 %386, 1
  store i32 %387, ptr %36, align 4, !tbaa !9
  br label %371, !llvm.loop !28

388:                                              ; preds = %371
  %389 = load i32, ptr %35, align 4, !tbaa !9
  %390 = load i32, ptr %34, align 4, !tbaa !9
  %391 = mul nsw i32 4, %390
  %392 = add nsw i32 %389, %391
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 0
  %395 = load i64, ptr %394, align 8, !tbaa !16
  %396 = add nsw i64 %395, %393
  store i64 %396, ptr %394, align 8, !tbaa !16
  store i32 0, ptr %22, align 4
  br label %397

397:                                              ; preds = %388, %381, %362
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  %398 = load i32, ptr %22, align 4
  switch i32 %398, label %417 [
    i32 0, label %399
    i32 9, label %408
  ]

399:                                              ; preds = %397
  br label %400

400:                                              ; preds = %399
  br label %401

401:                                              ; preds = %400
  br label %402

402:                                              ; preds = %401, %347
  br label %403

403:                                              ; preds = %402
  %404 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 2
  store ptr null, ptr %404, align 8, !tbaa !19
  %405 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %14, i32 0, i32 1
  store ptr null, ptr %405, align 8, !tbaa !18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %14, i64 24, i1 false), !tbaa.struct !29
  store i32 1, ptr %22, align 4
  br label %417

406:                                              ; No predecessors!
  br label %407

407:                                              ; preds = %406
  br label %408

408:                                              ; preds = %407, %397, %344, %287, %262, %197
  br label %409

409:                                              ; preds = %408
  %410 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 0
  store i64 -1, ptr %410, align 8, !tbaa !16
  %411 = load ptr, ptr %8, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 1
  store ptr %411, ptr %412, align 8, !tbaa !18
  %413 = load ptr, ptr %9, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.asn_enc_rval_s, ptr %0, i32 0, i32 2
  store ptr %413, ptr %414, align 8, !tbaa !19
  call void @stacktrace_create(ptr noundef @.str.3, i64 noundef 173, i32 noundef 101, ptr noundef null)
  store i32 1, ptr %22, align 4
  br label %417

415:                                              ; No predecessors!
  br label %416

416:                                              ; preds = %415
  store i32 0, ptr %22, align 4
  br label %417

417:                                              ; preds = %416, %409, %403, %397, %344, %262, %197, %51
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 128, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #4
  %418 = load i32, ptr %22, align 4
  switch i32 %418, label %420 [
    i32 0, label %419
    i32 1, label %419
  ]

419:                                              ; preds = %417, %417
  ret void

420:                                              ; preds = %417
  unreachable
}

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

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

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

; 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) #3

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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, !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 0}
!12 = !{!"BIT_STRING_s", !6, i64 0, !10, i64 8, !10, i64 12, !13, i64 16}
!13 = !{!"asn_struct_ctx_s", !14, i64 0, !14, i64 2, !10, i64 4, !6, i64 8, !15, i64 16}
!14 = !{!"short", !7, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!17, !15, i64 0}
!17 = !{!"asn_enc_rval_s", !15, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!17, !6, i64 8}
!19 = !{!17, !6, i64 16}
!20 = !{!12, !10, i64 8}
!21 = !{!7, !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = distinct !{!25, !23}
!26 = !{!12, !10, i64 12}
!27 = distinct !{!27, !23}
!28 = distinct !{!28, !23}
!29 = !{i64 0, i64 8, !30, i64 8, i64 8, !5, i64 16, i64 8, !5}
!30 = !{!15, !15, i64 0}


; 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.3 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [5 x i8], align 1
@_bit_pattern = external hidden local_unnamed_addr global [16 x ptr], align 16

; Function Attrs: nounwind uwtable
define dso_local void @BIT_STRING_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 nocapture noundef readonly %5, ptr noundef %6) local_unnamed_addr #0 {
  %8 = alloca [128 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %8) #5
  %9 = and i32 %4, 2
  %.not = icmp eq ptr %2, null
  br i1 %.not, label %12, label %10

10:                                               ; preds = %7
  %11 = load ptr, ptr %2, align 8, !tbaa !5
  %.not113 = icmp eq ptr %11, null
  br i1 %.not113, label %12, label %15

12:                                               ; preds = %7, %10
  store i64 -1, ptr %0, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %13, align 8, !tbaa !16
  %14 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %2, ptr %14, align 8, !tbaa !17
  tail call void @stacktrace_create(ptr noundef nonnull @.str.3, i64 noundef 122, i32 noundef 101, ptr noundef null) #5
  br label %133

15:                                               ; preds = %10
  %16 = getelementptr inbounds i8, ptr %2, i64 8
  %17 = load i32, ptr %16, align 8, !tbaa !18
  %18 = sext i32 %17 to i64
  %19 = getelementptr inbounds i8, ptr %11, i64 %18
  %20 = getelementptr inbounds i8, ptr %19, i64 -1
  %21 = icmp ult ptr %11, %20
  br i1 %21, label %.lr.ph148, label %._crit_edge149

.lr.ph148:                                        ; preds = %15
  %.not117 = icmp eq i32 %9, 0
  %spec.store.select = tail call i32 @llvm.smax.i32(i32 %3, i32 0)
  %22 = icmp sgt i32 %3, 0
  %23 = shl nsw i32 %spec.store.select, 2
  %24 = or disjoint i32 %23, 1
  %25 = zext nneg i32 %24 to i64
  br label %26

26:                                               ; preds = %.lr.ph148, %53
  %.sroa.0.0146 = phi i64 [ 0, %.lr.ph148 ], [ %.sroa.0.2, %53 ]
  %.0102.idx145 = phi i64 [ 0, %.lr.ph148 ], [ %.1.add, %53 ]
  %.0103144 = phi ptr [ %11, %.lr.ph148 ], [ %65, %53 ]
  %27 = load i8, ptr %.0103144, align 1, !tbaa !19
  %28 = zext i8 %27 to i32
  br i1 %.not117, label %29, label %36

29:                                               ; preds = %26
  %30 = load ptr, ptr %2, align 8, !tbaa !5
  %31 = ptrtoint ptr %.0103144 to i64
  %32 = ptrtoint ptr %30 to i64
  %33 = sub i64 %31, %32
  %34 = and i64 %33, 7
  %35 = icmp eq i64 %34, 0
  br label %36

36:                                               ; preds = %26, %29
  %37 = phi i1 [ %35, %29 ], [ false, %26 ]
  %38 = icmp sgt i64 %.0102.idx145, 117
  %or.cond = select i1 %38, i1 true, i1 %37
  br i1 %or.cond, label %39, label %53

39:                                               ; preds = %36
  %40 = add nsw i64 %.sroa.0.0146, %.0102.idx145
  %41 = call i32 %5(ptr noundef nonnull %8, i64 noundef %.0102.idx145, ptr noundef %6) #5
  %42 = icmp slt i32 %41, 0
  br i1 %42, label %.thread122, label %43

43:                                               ; preds = %39
  br i1 %37, label %44, label %53

44:                                               ; preds = %43
  %45 = call i32 %5(ptr noundef nonnull @.str.5, i64 noundef 1, ptr noundef %6) #5
  %46 = icmp slt i32 %45, 0
  br i1 %46, label %.thread122, label %47

47:                                               ; preds = %44
  br i1 %22, label %.lr.ph, label %._crit_edge

48:                                               ; preds = %.lr.ph
  %49 = add nuw nsw i32 %.0109143, 1
  %exitcond.not = icmp eq i32 %49, %3
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !20

.lr.ph:                                           ; preds = %47, %48
  %.0109143 = phi i32 [ %49, %48 ], [ 0, %47 ]
  %50 = call i32 %5(ptr noundef nonnull @.str.6, i64 noundef 4, ptr noundef %6) #5
  %51 = icmp slt i32 %50, 0
  br i1 %51, label %.thread122, label %48

._crit_edge:                                      ; preds = %48, %47
  %52 = add nsw i64 %40, %25
  br label %53

53:                                               ; preds = %._crit_edge, %43, %36
  %.1.idx = phi i64 [ 0, %._crit_edge ], [ 0, %43 ], [ %.0102.idx145, %36 ]
  %.sroa.0.2 = phi i64 [ %52, %._crit_edge ], [ %40, %43 ], [ %.sroa.0.0146, %36 ]
  %.1.ptr = getelementptr inbounds i8, ptr %8, i64 %.1.idx
  %54 = lshr i32 %28, 4
  %55 = zext nneg i32 %54 to i64
  %56 = getelementptr inbounds [16 x ptr], ptr @_bit_pattern, i64 0, i64 %55
  %57 = load ptr, ptr %56, align 8, !tbaa !22
  %58 = load i32, ptr %57, align 1
  store i32 %58, ptr %.1.ptr, align 1
  %59 = getelementptr inbounds i8, ptr %.1.ptr, i64 4
  %60 = and i32 %28, 15
  %61 = zext nneg i32 %60 to i64
  %62 = getelementptr inbounds [16 x ptr], ptr @_bit_pattern, i64 0, i64 %61
  %63 = load ptr, ptr %62, align 8, !tbaa !22
  %64 = load i32, ptr %63, align 1
  store i32 %64, ptr %59, align 1
  %.1.add = add nsw i64 %.1.idx, 8
  %65 = getelementptr inbounds i8, ptr %.0103144, i64 1
  %exitcond171.not = icmp eq ptr %65, %20
  br i1 %exitcond171.not, label %._crit_edge149, label %26, !llvm.loop !23

._crit_edge149:                                   ; preds = %53, %15
  %.0103.lcssa = phi ptr [ %11, %15 ], [ %20, %53 ]
  %.0102.idx.lcssa = phi i64 [ 0, %15 ], [ %.1.add, %53 ]
  %.sroa.0.0.lcssa = phi i64 [ 0, %15 ], [ %.sroa.0.2, %53 ]
  %.not114 = icmp eq i32 %9, 0
  br i1 %.not114, label %66, label %86

66:                                               ; preds = %._crit_edge149
  %67 = load ptr, ptr %2, align 8, !tbaa !5
  %68 = ptrtoint ptr %.0103.lcssa to i64
  %69 = ptrtoint ptr %67 to i64
  %70 = sub i64 %68, %69
  %71 = and i64 %70, 7
  %72 = icmp eq i64 %71, 0
  br i1 %72, label %73, label %86

73:                                               ; preds = %66
  %74 = call i32 %5(ptr noundef nonnull @.str.5, i64 noundef 1, ptr noundef %6) #5
  %75 = icmp slt i32 %74, 0
  br i1 %75, label %.thread122, label %76

76:                                               ; preds = %73
  %spec.store.select2 = call i32 @llvm.smax.i32(i32 %3, i32 0)
  %77 = icmp sgt i32 %3, 0
  br i1 %77, label %.lr.ph154, label %._crit_edge155

78:                                               ; preds = %.lr.ph154
  %79 = add nuw nsw i32 %.0104152, 1
  %exitcond172.not = icmp eq i32 %79, %3
  br i1 %exitcond172.not, label %._crit_edge155, label %.lr.ph154, !llvm.loop !24

.lr.ph154:                                        ; preds = %76, %78
  %.0104152 = phi i32 [ %79, %78 ], [ 0, %76 ]
  %80 = call i32 %5(ptr noundef nonnull @.str.6, i64 noundef 4, ptr noundef %6) #5
  %81 = icmp slt i32 %80, 0
  br i1 %81, label %.thread122, label %78

._crit_edge155:                                   ; preds = %78, %76
  %82 = shl nsw i32 %spec.store.select2, 2
  %83 = or disjoint i32 %82, 1
  %84 = zext nneg i32 %83 to i64
  %85 = add nsw i64 %.sroa.0.0.lcssa, %84
  br label %86

86:                                               ; preds = %._crit_edge155, %66, %._crit_edge149
  %.sroa.0.5 = phi i64 [ %.sroa.0.0.lcssa, %._crit_edge149 ], [ %85, %._crit_edge155 ], [ %.sroa.0.0.lcssa, %66 ]
  %87 = ptrtoint ptr %8 to i64
  %88 = add nsw i64 %.sroa.0.5, %.0102.idx.lcssa
  %89 = call i32 %5(ptr noundef nonnull %8, i64 noundef %.0102.idx.lcssa, ptr noundef %6) #5
  %90 = icmp slt i32 %89, 0
  br i1 %90, label %.thread122, label %91

91:                                               ; preds = %86
  %92 = icmp eq ptr %.0103.lcssa, %20
  br i1 %92, label %93, label %115

93:                                               ; preds = %91
  %94 = load i8, ptr %20, align 1, !tbaa !19
  %95 = zext i8 %94 to i32
  %96 = getelementptr inbounds i8, ptr %2, i64 12
  %97 = load i32, ptr %96, align 4, !tbaa !25
  %.not115156 = icmp sgt i32 %97, 7
  br i1 %.not115156, label %._crit_edge161, label %.lr.ph160.preheader

.lr.ph160.preheader:                              ; preds = %93
  %98 = sub i32 7, %97
  %99 = zext i32 %98 to i64
  %scevgep = getelementptr i8, ptr %8, i64 %99
  %100 = add nuw nsw i64 %99, 1
  %min.iters.check = icmp ult i32 %98, 15
  br i1 %min.iters.check, label %.lr.ph160.preheader183, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph160.preheader
  %n.vec = and i64 %100, 8589934576
  %.cast = trunc i64 %n.vec to i32
  %ind.end = sub i32 7, %.cast
  %ind.end181 = getelementptr i8, ptr %8, i64 %n.vec
  %broadcast.splatinsert = insertelement <16 x i32> poison, i32 %95, i64 0
  %broadcast.splat = shufflevector <16 x i32> %broadcast.splatinsert, <16 x i32> poison, <16 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <16 x i32> [ <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 -1, i32 -2, i32 -3, i32 -4, i32 -5, i32 -6, i32 -7, i32 -8>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %next.gep = getelementptr i8, ptr %8, i64 %index
  %101 = shl nuw <16 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>, %vec.ind
  %102 = and <16 x i32> %101, %broadcast.splat
  %103 = icmp eq <16 x i32> %102, zeroinitializer
  %104 = select <16 x i1> %103, <16 x i8> <i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48>, <16 x i8> <i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49>
  store <16 x i8> %104, ptr %next.gep, align 16, !tbaa !19
  %index.next = add nuw i64 %index, 16
  %vec.ind.next = add <16 x i32> %vec.ind, <i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16, i32 -16>
  %105 = icmp eq i64 %index.next, %n.vec
  br i1 %105, label %middle.block, label %vector.body, !llvm.loop !26

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %100, %n.vec
  br i1 %cmp.n, label %._crit_edge161.loopexit, label %.lr.ph160.preheader183

.lr.ph160.preheader183:                           ; preds = %middle.block, %.lr.ph160.preheader
  %.0101158.ph = phi i32 [ 7, %.lr.ph160.preheader ], [ %ind.end, %middle.block ]
  %.3157.ph = phi ptr [ %8, %.lr.ph160.preheader ], [ %ind.end181, %middle.block ]
  br label %.lr.ph160

.lr.ph160:                                        ; preds = %.lr.ph160.preheader183, %.lr.ph160
  %.0101158 = phi i32 [ %110, %.lr.ph160 ], [ %.0101158.ph, %.lr.ph160.preheader183 ]
  %.3157 = phi ptr [ %109, %.lr.ph160 ], [ %.3157.ph, %.lr.ph160.preheader183 ]
  %106 = shl nuw i32 1, %.0101158
  %107 = and i32 %106, %95
  %.not116 = icmp eq i32 %107, 0
  %108 = select i1 %.not116, i8 48, i8 49
  %109 = getelementptr inbounds i8, ptr %.3157, i64 1
  store i8 %108, ptr %.3157, align 1, !tbaa !19
  %110 = add nsw i32 %.0101158, -1
  %exitcond173.not = icmp eq ptr %.3157, %scevgep
  br i1 %exitcond173.not, label %._crit_edge161.loopexit, label %.lr.ph160, !llvm.loop !29

._crit_edge161.loopexit:                          ; preds = %.lr.ph160, %middle.block
  %.lcssa = phi ptr [ %ind.end181, %middle.block ], [ %109, %.lr.ph160 ]
  %.pre = ptrtoint ptr %.lcssa to i64
  br label %._crit_edge161

._crit_edge161:                                   ; preds = %._crit_edge161.loopexit, %93
  %.pre-phi = phi i64 [ %.pre, %._crit_edge161.loopexit ], [ %87, %93 ]
  %111 = sub i64 %.pre-phi, %87
  %112 = add nsw i64 %111, %88
  %113 = call i32 %5(ptr noundef nonnull %8, i64 noundef %111, ptr noundef %6) #5
  %114 = icmp slt i32 %113, 0
  br i1 %114, label %.thread122, label %115

115:                                              ; preds = %._crit_edge161, %91
  %.sroa.0.6 = phi i64 [ %112, %._crit_edge161 ], [ %88, %91 ]
  br i1 %.not114, label %116, label %130

116:                                              ; preds = %115
  %117 = call i32 %5(ptr noundef nonnull @.str.5, i64 noundef 1, ptr noundef %6) #5
  %118 = icmp slt i32 %117, 0
  br i1 %118, label %.thread122, label %119

119:                                              ; preds = %116
  %120 = call i32 @llvm.smax.i32(i32 %3, i32 1)
  %spec.store.select3 = add nsw i32 %120, -1
  %121 = icmp sgt i32 %3, 1
  br i1 %121, label %.lr.ph165, label %._crit_edge166

122:                                              ; preds = %.lr.ph165
  %123 = add nuw nsw i32 %.0163, 1
  %exitcond174.not = icmp eq i32 %123, %spec.store.select3
  br i1 %exitcond174.not, label %._crit_edge166, label %.lr.ph165, !llvm.loop !30

.lr.ph165:                                        ; preds = %119, %122
  %.0163 = phi i32 [ %123, %122 ], [ 0, %119 ]
  %124 = call i32 %5(ptr noundef nonnull @.str.6, i64 noundef 4, ptr noundef %6) #5
  %125 = icmp slt i32 %124, 0
  br i1 %125, label %.thread122, label %122

._crit_edge166:                                   ; preds = %122, %119
  %126 = shl nsw i32 %spec.store.select3, 2
  %127 = or disjoint i32 %126, 1
  %128 = sext i32 %127 to i64
  %129 = add nsw i64 %.sroa.0.6, %128
  br label %130

130:                                              ; preds = %._crit_edge166, %115
  %.sroa.0.8 = phi i64 [ %.sroa.0.6, %115 ], [ %129, %._crit_edge166 ]
  store i64 %.sroa.0.8, ptr %0, align 8, !tbaa !31
  %.sroa.16.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.16.0..sroa_idx, i8 0, i64 16, i1 false)
  br label %133

.thread122:                                       ; preds = %44, %39, %.lr.ph, %.lr.ph154, %.lr.ph165, %116, %73, %._crit_edge161, %86
  store i64 -1, ptr %0, align 8, !tbaa !14
  %131 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %1, ptr %131, align 8, !tbaa !16
  %132 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %2, ptr %132, align 8, !tbaa !17
  call void @stacktrace_create(ptr noundef nonnull @.str.3, i64 noundef 173, i32 noundef 101, ptr noundef null) #5
  br label %133

133:                                              ; preds = %.thread122, %130, %12
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %8) #5
  ret void
}

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 }

!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 0}
!6 = !{!"BIT_STRING_s", !7, i64 0, !10, i64 8, !10, i64 12, !11, i64 16}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"asn_struct_ctx_s", !12, i64 0, !12, i64 2, !10, i64 4, !7, i64 8, !13, i64 16}
!12 = !{!"short", !8, i64 0}
!13 = !{!"long", !8, i64 0}
!14 = !{!15, !13, i64 0}
!15 = !{!"asn_enc_rval_s", !13, i64 0, !7, i64 8, !7, i64 16}
!16 = !{!15, !7, i64 8}
!17 = !{!15, !7, i64 16}
!18 = !{!6, !10, i64 8}
!19 = !{!8, !8, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !21}
!24 = distinct !{!24, !21}
!25 = !{!6, !10, i64 12}
!26 = distinct !{!26, !21, !27, !28}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !21, !28, !27}
!30 = distinct !{!30, !21}
!31 = !{!13, !13, i64 0}


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