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

; 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__PRIMITIVE_TYPE_s = type { ptr, i32 }

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

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @OBJECT_IDENTIFIER_set_single_arc(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @OBJECT_IDENTIFIER_set_arcs(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3) #2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca [17 x i8], align 16
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i32 %2, ptr %8, align 4, !tbaa !9
  store i32 %3, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store i32 1, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %31 = load i8, ptr %12, align 4, !tbaa !11
  %32 = sext i8 %31 to i32
  store i32 %32, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %33 = load ptr, ptr %6, align 8, !tbaa !5
  %34 = icmp ne ptr %33, null
  br i1 %34, label %35, label %47

35:                                               ; preds = %4
  %36 = load ptr, ptr %7, align 8, !tbaa !5
  %37 = icmp ne ptr %36, null
  br i1 %37, label %38, label %47

38:                                               ; preds = %35
  %39 = load i32, ptr %8, align 4, !tbaa !9
  %40 = icmp ult i32 %39, 1
  br i1 %40, label %47, label %41

41:                                               ; preds = %38
  %42 = load i32, ptr %8, align 4, !tbaa !9
  %43 = icmp ugt i32 %42, 16
  br i1 %43, label %47, label %44

44:                                               ; preds = %41
  %45 = load i32, ptr %9, align 4, !tbaa !9
  %46 = icmp ult i32 %45, 2
  br i1 %46, label %47, label %49

47:                                               ; preds = %44, %41, %38, %35, %4
  %48 = call ptr @__errno_location() #6
  store i32 22, ptr %48, align 4, !tbaa !9
  store i32 -1, ptr %5, align 4
  store i32 1, ptr %18, align 4
  br label %338

49:                                               ; preds = %44
  %50 = load i32, ptr %8, align 4, !tbaa !9
  switch i32 %50, label %76 [
    i32 1, label %51
    i32 2, label %60
    i32 4, label %69
  ]

51:                                               ; preds = %49
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %52, i64 0
  %54 = load i8, ptr %53, align 1, !tbaa !11
  %55 = zext i8 %54 to i32
  store i32 %55, ptr %14, align 4, !tbaa !9
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  %57 = getelementptr inbounds i8, ptr %56, i64 1
  %58 = load i8, ptr %57, align 1, !tbaa !11
  %59 = zext i8 %58 to i32
  store i32 %59, ptr %15, align 4, !tbaa !9
  br label %167

60:                                               ; preds = %49
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  %62 = getelementptr inbounds i16, ptr %61, i64 0
  %63 = load i16, ptr %62, align 2, !tbaa !12
  %64 = zext i16 %63 to i32
  store i32 %64, ptr %14, align 4, !tbaa !9
  %65 = load ptr, ptr %7, align 8, !tbaa !5
  %66 = getelementptr inbounds i16, ptr %65, i64 1
  %67 = load i16, ptr %66, align 2, !tbaa !12
  %68 = zext i16 %67 to i32
  store i32 %68, ptr %15, align 4, !tbaa !9
  br label %167

69:                                               ; preds = %49
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = getelementptr inbounds i32, ptr %70, i64 0
  %72 = load i32, ptr %71, align 4, !tbaa !9
  store i32 %72, ptr %14, align 4, !tbaa !9
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = getelementptr inbounds i32, ptr %73, i64 1
  %75 = load i32, ptr %74, align 4, !tbaa !9
  store i32 %75, ptr %15, align 4, !tbaa !9
  br label %167

76:                                               ; preds = %49
  store i32 0, ptr %14, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  %77 = load i32, ptr %13, align 4, !tbaa !9
  %78 = icmp ne i32 %77, 0
  br i1 %78, label %79, label %122

79:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = getelementptr inbounds i8, ptr %80, i64 1
  store ptr %81, ptr %19, align 8, !tbaa !5
  %82 = load ptr, ptr %19, align 8, !tbaa !5
  %83 = load i32, ptr %8, align 4, !tbaa !9
  %84 = zext i32 %83 to i64
  %85 = getelementptr inbounds i8, ptr %82, i64 %84
  store ptr %85, ptr %20, align 8, !tbaa !5
  br label %86

86:                                               ; preds = %104, %79
  %87 = load ptr, ptr %19, align 8, !tbaa !5
  %88 = load ptr, ptr %20, align 8, !tbaa !5
  %89 = icmp ult ptr %87, %88
  br i1 %89, label %90, label %107

90:                                               ; preds = %86
  %91 = load ptr, ptr %19, align 8, !tbaa !5
  %92 = load i8, ptr %91, align 1, !tbaa !11
  %93 = zext i8 %92 to i32
  %94 = load i32, ptr %14, align 4, !tbaa !9
  %95 = or i32 %94, %93
  store i32 %95, ptr %14, align 4, !tbaa !9
  %96 = load ptr, ptr %19, align 8, !tbaa !5
  %97 = load i32, ptr %8, align 4, !tbaa !9
  %98 = zext i32 %97 to i64
  %99 = getelementptr inbounds i8, ptr %96, i64 %98
  %100 = load i8, ptr %99, align 1, !tbaa !11
  %101 = zext i8 %100 to i32
  %102 = load i32, ptr %15, align 4, !tbaa !9
  %103 = or i32 %102, %101
  store i32 %103, ptr %15, align 4, !tbaa !9
  br label %104

104:                                              ; preds = %90
  %105 = load ptr, ptr %19, align 8, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %105, i32 1
  store ptr %106, ptr %19, align 8, !tbaa !5
  br label %86, !llvm.loop !14

107:                                              ; preds = %86
  %108 = load i32, ptr %14, align 4, !tbaa !9
  %109 = shl i32 %108, 8
  store i32 %109, ptr %14, align 4, !tbaa !9
  %110 = load i32, ptr %15, align 4, !tbaa !9
  %111 = shl i32 %110, 8
  store i32 %111, ptr %15, align 4, !tbaa !9
  %112 = load ptr, ptr %7, align 8, !tbaa !5
  %113 = getelementptr inbounds i8, ptr %112, i64 0
  %114 = load i8, ptr %113, align 1, !tbaa !11
  %115 = zext i8 %114 to i32
  store i32 %115, ptr %14, align 4, !tbaa !9
  %116 = load ptr, ptr %7, align 8, !tbaa !5
  %117 = load i32, ptr %8, align 4, !tbaa !9
  %118 = zext i32 %117 to i64
  %119 = getelementptr inbounds i8, ptr %116, i64 %118
  %120 = load i8, ptr %119, align 1, !tbaa !11
  %121 = zext i8 %120 to i32
  store i32 %121, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %166

122:                                              ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %123 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %123, ptr %21, align 8, !tbaa !5
  %124 = load ptr, ptr %21, align 8, !tbaa !5
  %125 = load i32, ptr %8, align 4, !tbaa !9
  %126 = zext i32 %125 to i64
  %127 = getelementptr inbounds i8, ptr %124, i64 %126
  %128 = getelementptr inbounds i8, ptr %127, i64 -1
  store ptr %128, ptr %22, align 8, !tbaa !5
  br label %129

129:                                              ; preds = %147, %122
  %130 = load ptr, ptr %21, align 8, !tbaa !5
  %131 = load ptr, ptr %22, align 8, !tbaa !5
  %132 = icmp ult ptr %130, %131
  br i1 %132, label %133, label %150

133:                                              ; preds = %129
  %134 = load ptr, ptr %21, align 8, !tbaa !5
  %135 = load i8, ptr %134, align 1, !tbaa !11
  %136 = zext i8 %135 to i32
  %137 = load i32, ptr %14, align 4, !tbaa !9
  %138 = or i32 %137, %136
  store i32 %138, ptr %14, align 4, !tbaa !9
  %139 = load ptr, ptr %21, align 8, !tbaa !5
  %140 = load i32, ptr %8, align 4, !tbaa !9
  %141 = zext i32 %140 to i64
  %142 = getelementptr inbounds i8, ptr %139, i64 %141
  %143 = load i8, ptr %142, align 1, !tbaa !11
  %144 = zext i8 %143 to i32
  %145 = load i32, ptr %15, align 4, !tbaa !9
  %146 = or i32 %145, %144
  store i32 %146, ptr %15, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %133
  %148 = load ptr, ptr %21, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i32 1
  store ptr %149, ptr %21, align 8, !tbaa !5
  br label %129, !llvm.loop !16

150:                                              ; preds = %129
  %151 = load ptr, ptr %7, align 8, !tbaa !5
  %152 = load i32, ptr %8, align 4, !tbaa !9
  %153 = zext i32 %152 to i64
  %154 = getelementptr inbounds i8, ptr %151, i64 %153
  %155 = getelementptr inbounds i8, ptr %154, i64 -1
  %156 = load i8, ptr %155, align 1, !tbaa !11
  %157 = zext i8 %156 to i32
  store i32 %157, ptr %14, align 4, !tbaa !9
  %158 = load ptr, ptr %7, align 8, !tbaa !5
  %159 = load i32, ptr %8, align 4, !tbaa !9
  %160 = zext i32 %159 to i64
  %161 = shl i64 %160, 1
  %162 = getelementptr inbounds i8, ptr %158, i64 %161
  %163 = getelementptr inbounds i8, ptr %162, i64 -1
  %164 = load i8, ptr %163, align 1, !tbaa !11
  %165 = zext i8 %164 to i32
  store i32 %165, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %166

166:                                              ; preds = %150, %107
  br label %167

167:                                              ; preds = %166, %69, %60, %51
  %168 = load i32, ptr %14, align 4, !tbaa !9
  %169 = icmp ule i32 %168, 1
  br i1 %169, label %170, label %176

170:                                              ; preds = %167
  %171 = load i32, ptr %15, align 4, !tbaa !9
  %172 = icmp uge i32 %171, 39
  br i1 %172, label %173, label %175

173:                                              ; preds = %170
  %174 = call ptr @__errno_location() #6
  store i32 34, ptr %174, align 4, !tbaa !9
  store i32 -1, ptr %5, align 4
  store i32 1, ptr %18, align 4
  br label %338

175:                                              ; preds = %170
  br label %182

176:                                              ; preds = %167
  %177 = load i32, ptr %14, align 4, !tbaa !9
  %178 = icmp ugt i32 %177, 2
  br i1 %178, label %179, label %181

179:                                              ; preds = %176
  %180 = call ptr @__errno_location() #6
  store i32 34, ptr %180, align 4, !tbaa !9
  store i32 -1, ptr %5, align 4
  store i32 1, ptr %18, align 4
  br label %338

181:                                              ; preds = %176
  br label %182

182:                                              ; preds = %181, %175
  %183 = load i32, ptr %8, align 4, !tbaa !9
  %184 = mul i32 %183, 8
  %185 = add i32 %184, 6
  %186 = udiv i32 %185, 7
  %187 = load i32, ptr %9, align 4, !tbaa !9
  %188 = mul i32 %186, %187
  store i32 %188, ptr %16, align 4, !tbaa !9
  %189 = load i32, ptr %16, align 4, !tbaa !9
  %190 = zext i32 %189 to i64
  %191 = add i64 %190, 1
  %192 = call noalias ptr @malloc(i64 noundef %191) #7
  store ptr %192, ptr %10, align 8, !tbaa !5
  store ptr %192, ptr %11, align 8, !tbaa !5
  %193 = load ptr, ptr %10, align 8, !tbaa !5
  %194 = icmp ne ptr %193, null
  br i1 %194, label %196, label %195

195:                                              ; preds = %182
  store i32 -1, ptr %5, align 4
  store i32 1, ptr %18, align 4
  br label %338

196:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 17, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %197 = getelementptr inbounds [17 x i8], ptr %24, i64 0, i64 0
  store ptr %197, ptr %25, align 8, !tbaa !5
  %198 = load ptr, ptr %25, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %198, i32 1
  store ptr %199, ptr %25, align 8, !tbaa !5
  store i8 0, ptr %198, align 1, !tbaa !11
  %200 = load ptr, ptr %7, align 8, !tbaa !5
  %201 = load i32, ptr %8, align 4, !tbaa !9
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds i8, ptr %200, i64 %202
  store ptr %203, ptr %7, align 8, !tbaa !5
  %204 = load i32, ptr %13, align 4, !tbaa !9
  %205 = icmp ne i32 %204, 0
  br i1 %205, label %206, label %228

206:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %207 = load ptr, ptr %7, align 8, !tbaa !5
  %208 = getelementptr inbounds i8, ptr %207, i64 -1
  store ptr %208, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %209 = load ptr, ptr %7, align 8, !tbaa !5
  %210 = load i32, ptr %8, align 4, !tbaa !9
  %211 = zext i32 %210 to i64
  %212 = getelementptr inbounds i8, ptr %209, i64 %211
  %213 = getelementptr inbounds i8, ptr %212, i64 -1
  store ptr %213, ptr %27, align 8, !tbaa !5
  br label %214

214:                                              ; preds = %222, %206
  %215 = load ptr, ptr %27, align 8, !tbaa !5
  %216 = load ptr, ptr %26, align 8, !tbaa !5
  %217 = icmp ugt ptr %215, %216
  br i1 %217, label %218, label %227

218:                                              ; preds = %214
  %219 = load ptr, ptr %27, align 8, !tbaa !5
  %220 = load i8, ptr %219, align 1, !tbaa !11
  %221 = load ptr, ptr %25, align 8, !tbaa !5
  store i8 %220, ptr %221, align 1, !tbaa !11
  br label %222

222:                                              ; preds = %218
  %223 = load ptr, ptr %25, align 8, !tbaa !5
  %224 = getelementptr inbounds i8, ptr %223, i32 1
  store ptr %224, ptr %25, align 8, !tbaa !5
  %225 = load ptr, ptr %27, align 8, !tbaa !5
  %226 = getelementptr inbounds i8, ptr %225, i32 -1
  store ptr %226, ptr %27, align 8, !tbaa !5
  br label %214, !llvm.loop !17

227:                                              ; preds = %214
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  br label %248

228:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %229 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %229, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %230 = load ptr, ptr %28, align 8, !tbaa !5
  %231 = load i32, ptr %8, align 4, !tbaa !9
  %232 = zext i32 %231 to i64
  %233 = getelementptr inbounds i8, ptr %230, i64 %232
  store ptr %233, ptr %29, align 8, !tbaa !5
  br label %234

234:                                              ; preds = %242, %228
  %235 = load ptr, ptr %28, align 8, !tbaa !5
  %236 = load ptr, ptr %29, align 8, !tbaa !5
  %237 = icmp ult ptr %235, %236
  br i1 %237, label %238, label %247

238:                                              ; preds = %234
  %239 = load ptr, ptr %28, align 8, !tbaa !5
  %240 = load i8, ptr %239, align 1, !tbaa !11
  %241 = load ptr, ptr %25, align 8, !tbaa !5
  store i8 %240, ptr %241, align 1, !tbaa !11
  br label %242

242:                                              ; preds = %238
  %243 = load ptr, ptr %25, align 8, !tbaa !5
  %244 = getelementptr inbounds i8, ptr %243, i32 1
  store ptr %244, ptr %25, align 8, !tbaa !5
  %245 = load ptr, ptr %28, align 8, !tbaa !5
  %246 = getelementptr inbounds i8, ptr %245, i32 1
  store ptr %246, ptr %28, align 8, !tbaa !5
  br label %234, !llvm.loop !18

247:                                              ; preds = %234
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %248

248:                                              ; preds = %247, %227
  %249 = load i32, ptr %14, align 4, !tbaa !9
  %250 = mul i32 %249, 40
  store i32 %250, ptr %14, align 4, !tbaa !9
  %251 = getelementptr inbounds [17 x i8], ptr %24, i64 0, i64 0
  %252 = load i32, ptr %8, align 4, !tbaa !9
  %253 = zext i32 %252 to i64
  %254 = getelementptr inbounds i8, ptr %251, i64 %253
  store ptr %254, ptr %23, align 8, !tbaa !5
  br label %255

255:                                              ; preds = %279, %248
  %256 = load ptr, ptr %23, align 8, !tbaa !5
  %257 = getelementptr inbounds [17 x i8], ptr %24, i64 0, i64 0
  %258 = icmp uge ptr %256, %257
  br i1 %258, label %259, label %282

259:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  %260 = load ptr, ptr %23, align 8, !tbaa !5
  %261 = load i8, ptr %260, align 1, !tbaa !11
  %262 = zext i8 %261 to i32
  store i32 %262, ptr %30, align 4, !tbaa !9
  %263 = load i32, ptr %14, align 4, !tbaa !9
  %264 = load i32, ptr %30, align 4, !tbaa !9
  %265 = add i32 %264, %263
  store i32 %265, ptr %30, align 4, !tbaa !9
  %266 = load i32, ptr %30, align 4, !tbaa !9
  %267 = trunc i32 %266 to i8
  %268 = load ptr, ptr %23, align 8, !tbaa !5
  store i8 %267, ptr %268, align 1, !tbaa !11
  %269 = load i32, ptr %30, align 4, !tbaa !9
  %270 = icmp uge i32 %269, 256
  br i1 %270, label %271, label %274

271:                                              ; preds = %259
  %272 = load i32, ptr %30, align 4, !tbaa !9
  %273 = lshr i32 %272, 8
  store i32 %273, ptr %14, align 4, !tbaa !9
  br label %275

274:                                              ; preds = %259
  store i32 15, ptr %18, align 4
  br label %276

275:                                              ; preds = %271
  store i32 0, ptr %18, align 4
  br label %276

276:                                              ; preds = %275, %274
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  %277 = load i32, ptr %18, align 4
  switch i32 %277, label %340 [
    i32 0, label %278
    i32 15, label %282
  ]

278:                                              ; preds = %276
  br label %279

279:                                              ; preds = %278
  %280 = load ptr, ptr %23, align 8, !tbaa !5
  %281 = getelementptr inbounds i8, ptr %280, i32 -1
  store ptr %281, ptr %23, align 8, !tbaa !5
  br label %255, !llvm.loop !19

282:                                              ; preds = %276, %255
  %283 = load ptr, ptr %11, align 8, !tbaa !5
  %284 = getelementptr inbounds [17 x i8], ptr %24, i64 0, i64 0
  %285 = load ptr, ptr %25, align 8, !tbaa !5
  %286 = getelementptr inbounds [17 x i8], ptr %24, i64 0, i64 0
  %287 = ptrtoint ptr %285 to i64
  %288 = ptrtoint ptr %286 to i64
  %289 = sub i64 %287, %288
  %290 = trunc i64 %289 to i32
  %291 = call i32 @OBJECT_IDENTIFIER_set_single_arc(ptr noundef %283, ptr noundef %284, i32 noundef %290, i32 noundef 1)
  %292 = load ptr, ptr %11, align 8, !tbaa !5
  %293 = sext i32 %291 to i64
  %294 = getelementptr inbounds i8, ptr %292, i64 %293
  store ptr %294, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 17, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  %295 = load ptr, ptr %7, align 8, !tbaa !5
  %296 = load i32, ptr %8, align 4, !tbaa !9
  %297 = zext i32 %296 to i64
  %298 = getelementptr inbounds i8, ptr %295, i64 %297
  store ptr %298, ptr %7, align 8, !tbaa !5
  store i32 2, ptr %17, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %311, %282
  %300 = load i32, ptr %17, align 4, !tbaa !9
  %301 = load i32, ptr %9, align 4, !tbaa !9
  %302 = icmp ult i32 %300, %301
  br i1 %302, label %303, label %318

303:                                              ; preds = %299
  %304 = load ptr, ptr %11, align 8, !tbaa !5
  %305 = load ptr, ptr %7, align 8, !tbaa !5
  %306 = load i32, ptr %8, align 4, !tbaa !9
  %307 = call i32 @OBJECT_IDENTIFIER_set_single_arc(ptr noundef %304, ptr noundef %305, i32 noundef %306, i32 noundef 0)
  %308 = load ptr, ptr %11, align 8, !tbaa !5
  %309 = sext i32 %307 to i64
  %310 = getelementptr inbounds i8, ptr %308, i64 %309
  store ptr %310, ptr %11, align 8, !tbaa !5
  br label %311

311:                                              ; preds = %303
  %312 = load i32, ptr %17, align 4, !tbaa !9
  %313 = add i32 %312, 1
  store i32 %313, ptr %17, align 4, !tbaa !9
  %314 = load ptr, ptr %7, align 8, !tbaa !5
  %315 = load i32, ptr %8, align 4, !tbaa !9
  %316 = zext i32 %315 to i64
  %317 = getelementptr inbounds i8, ptr %314, i64 %316
  store ptr %317, ptr %7, align 8, !tbaa !5
  br label %299, !llvm.loop !20

318:                                              ; preds = %299
  %319 = load ptr, ptr %11, align 8, !tbaa !5
  %320 = load ptr, ptr %10, align 8, !tbaa !5
  %321 = ptrtoint ptr %319 to i64
  %322 = ptrtoint ptr %320 to i64
  %323 = sub i64 %321, %322
  %324 = trunc i64 %323 to i32
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.ASN__PRIMITIVE_TYPE_s, ptr %325, i32 0, i32 1
  store i32 %324, ptr %326, align 8, !tbaa !21
  %327 = load ptr, ptr %6, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.ASN__PRIMITIVE_TYPE_s, ptr %327, i32 0, i32 0
  %329 = load ptr, ptr %328, align 8, !tbaa !23
  store ptr %329, ptr %11, align 8, !tbaa !5
  %330 = load ptr, ptr %10, align 8, !tbaa !5
  %331 = load ptr, ptr %6, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.ASN__PRIMITIVE_TYPE_s, ptr %331, i32 0, i32 0
  store ptr %330, ptr %332, align 8, !tbaa !23
  %333 = load ptr, ptr %11, align 8, !tbaa !5
  %334 = icmp ne ptr %333, null
  br i1 %334, label %335, label %337

335:                                              ; preds = %318
  %336 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %336) #5
  store ptr null, ptr %11, align 8, !tbaa !5
  br label %337

337:                                              ; preds = %335, %318
  store i32 0, ptr %5, align 4
  store i32 1, ptr %18, align 4
  br label %338

338:                                              ; preds = %337, %195, %179, %173, %47
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  %339 = load i32, ptr %5, align 4
  ret i32 %339

340:                                              ; preds = %276
  unreachable
}

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"short", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !15}
!20 = distinct !{!20, !15}
!21 = !{!22, !10, i64 8}
!22 = !{!"ASN__PRIMITIVE_TYPE_s", !6, i64 0, !10, i64 8}
!23 = !{!22, !6, 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"

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

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

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @OBJECT_IDENTIFIER_set_single_arc(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @OBJECT_IDENTIFIER_set_arcs(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3) local_unnamed_addr #2 {
  %5 = alloca [17 x i8], align 16
  %6 = icmp eq ptr %0, null
  %7 = icmp eq ptr %1, null
  %or.cond.not137 = or i1 %6, %7
  %8 = add i32 %2, -17
  %9 = icmp ult i32 %8, -16
  %or.cond5 = or i1 %or.cond.not137, %9
  %10 = icmp ult i32 %3, 2
  %or.cond7 = or i1 %10, %or.cond5
  br i1 %or.cond7, label %11, label %13

11:                                               ; preds = %4
  %12 = tail call ptr @__errno_location() #5
  store i32 22, ptr %12, align 4, !tbaa !5
  br label %88

13:                                               ; preds = %4
  switch i32 %2, label %30 [
    i32 1, label %14
    i32 2, label %20
    i32 4, label %26
  ]

14:                                               ; preds = %13
  %15 = load i8, ptr %1, align 1, !tbaa !9
  %16 = zext i8 %15 to i32
  %17 = getelementptr inbounds i8, ptr %1, i64 1
  %18 = load i8, ptr %17, align 1, !tbaa !9
  %19 = zext i8 %18 to i32
  br label %37

20:                                               ; preds = %13
  %21 = load i16, ptr %1, align 2, !tbaa !10
  %22 = zext i16 %21 to i32
  %23 = getelementptr inbounds i8, ptr %1, i64 2
  %24 = load i16, ptr %23, align 2, !tbaa !10
  %25 = zext i16 %24 to i32
  br label %37

26:                                               ; preds = %13
  %27 = load i32, ptr %1, align 4, !tbaa !5
  %28 = getelementptr inbounds i8, ptr %1, i64 4
  %29 = load i32, ptr %28, align 4, !tbaa !5
  br label %37

30:                                               ; preds = %13
  %31 = zext nneg i32 %2 to i64
  %32 = load i8, ptr %1, align 1, !tbaa !9
  %33 = zext i8 %32 to i32
  %34 = getelementptr inbounds i8, ptr %1, i64 %31
  %35 = load i8, ptr %34, align 1, !tbaa !9
  %36 = zext i8 %35 to i32
  br label %37

37:                                               ; preds = %30, %26, %20, %14
  %.2129 = phi i32 [ %36, %30 ], [ %29, %26 ], [ %25, %20 ], [ %19, %14 ]
  %.2123 = phi i32 [ %33, %30 ], [ %27, %26 ], [ %22, %20 ], [ %16, %14 ]
  %38 = icmp ult i32 %.2123, 2
  br i1 %38, label %39, label %43

39:                                               ; preds = %37
  %40 = icmp ugt i32 %.2129, 38
  br i1 %40, label %41, label %46

41:                                               ; preds = %39
  %42 = tail call ptr @__errno_location() #5
  store i32 34, ptr %42, align 4, !tbaa !5
  br label %88

43:                                               ; preds = %37
  %.not = icmp eq i32 %.2123, 2
  br i1 %.not, label %46, label %44

44:                                               ; preds = %43
  %45 = tail call ptr @__errno_location() #5
  store i32 34, ptr %45, align 4, !tbaa !5
  br label %88

46:                                               ; preds = %43, %39
  %.tr = trunc nuw i32 %2 to i8
  %47 = shl nuw i8 %.tr, 3
  %.lhs.trunc = or disjoint i8 %47, 6
  %48 = udiv i8 %.lhs.trunc, 7
  %.zext = zext nneg i8 %48 to i32
  %49 = mul i32 %.zext, %3
  %50 = zext i32 %49 to i64
  %51 = add nuw nsw i64 %50, 1
  %52 = tail call noalias ptr @malloc(i64 noundef %51) #6
  %.not138 = icmp eq ptr %52, null
  br i1 %.not138, label %88, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %46
  call void @llvm.lifetime.start.p0(i64 17, ptr nonnull %5) #7
  store i8 0, ptr %5, align 16, !tbaa !9
  %53 = zext nneg i32 %2 to i64
  %54 = getelementptr inbounds i8, ptr %1, i64 %53
  %.0117144 = getelementptr inbounds i8, ptr %5, i64 1
  %scevgep = getelementptr i8, ptr %5, i64 %53
  %min.iters.check = icmp ult i32 %2, 32
  br i1 %min.iters.check, label %.lr.ph, label %vector.body.preheader

vector.body.preheader:                            ; preds = %.lr.ph.preheader
  %invariant.gep = getelementptr i8, ptr %54, i64 %53
  br label %vector.body

vector.body:                                      ; preds = %vector.body.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
  %next.gep = getelementptr i8, ptr %.0117144, i64 %index
  %55 = xor i64 %index, -1
  %gep = getelementptr i8, ptr %invariant.gep, i64 %55
  %56 = getelementptr inbounds i8, ptr %gep, i64 -15
  %57 = getelementptr inbounds i8, ptr %gep, i64 -31
  %wide.load = load <16 x i8>, ptr %56, align 1, !tbaa !9
  %reverse = shufflevector <16 x i8> %wide.load, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  %wide.load168 = load <16 x i8>, ptr %57, align 1, !tbaa !9
  %reverse169 = shufflevector <16 x i8> %wide.load168, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  %58 = getelementptr i8, ptr %next.gep, i64 16
  store <16 x i8> %reverse, ptr %next.gep, align 1, !tbaa !9
  store <16 x i8> %reverse169, ptr %58, align 1, !tbaa !9
  %index.next = add nuw i64 %index, 32
  br label %vector.body, !llvm.loop !12

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %.0117146 = phi ptr [ %.0117, %.lr.ph ], [ %.0117144, %.lr.ph.preheader ]
  %.0115.idx.in145 = phi i64 [ %.0115.idx, %.lr.ph ], [ %53, %.lr.ph.preheader ]
  %.0115.idx = add nsw i64 %.0115.idx.in145, -1
  %.0115.ptr = getelementptr inbounds i8, ptr %54, i64 %.0115.idx
  %59 = load i8, ptr %.0115.ptr, align 1, !tbaa !9
  store i8 %59, ptr %.0117146, align 1, !tbaa !9
  %.0117 = getelementptr inbounds i8, ptr %.0117146, i64 1
  %exitcond.not = icmp eq ptr %.0117146, %scevgep
  br i1 %exitcond.not, label %.lr.ph151.preheader.loopexit, label %.lr.ph, !llvm.loop !16

.lr.ph151.preheader.loopexit:                     ; preds = %.lr.ph
  %60 = ptrtoint ptr %.0117 to i64
  %61 = getelementptr inbounds i8, ptr %5, i64 %53
  %62 = mul i32 %.2123, 40
  br label %.lr.ph151

.lr.ph151:                                        ; preds = %.lr.ph151.preheader.loopexit, %.lr.ph151
  %.0118149 = phi ptr [ %69, %.lr.ph151 ], [ %61, %.lr.ph151.preheader.loopexit ]
  %.3148 = phi i32 [ %68, %.lr.ph151 ], [ %62, %.lr.ph151.preheader.loopexit ]
  %63 = load i8, ptr %.0118149, align 1, !tbaa !9
  %64 = zext i8 %63 to i32
  %65 = add i32 %.3148, %64
  %66 = trunc i32 %65 to i8
  store i8 %66, ptr %.0118149, align 1, !tbaa !9
  %67 = icmp ult i32 %65, 256
  %68 = lshr i32 %65, 8
  %69 = getelementptr inbounds i8, ptr %.0118149, i64 -1
  %.not141 = icmp ult ptr %69, %5
  %or.cond = select i1 %67, i1 true, i1 %.not141
  br i1 %or.cond, label %._crit_edge152, label %.lr.ph151, !llvm.loop !17

._crit_edge152:                                   ; preds = %.lr.ph151
  %70 = ptrtoint ptr %5 to i64
  %71 = sub i64 %60, %70
  %72 = trunc i64 %71 to i32
  %73 = call i32 @OBJECT_IDENTIFIER_set_single_arc(ptr noundef nonnull %52, ptr noundef nonnull %5, i32 noundef %72, i32 noundef 1)
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds i8, ptr %52, i64 %74
  call void @llvm.lifetime.end.p0(i64 17, ptr nonnull %5) #7
  %76 = icmp ugt i32 %3, 2
  br i1 %76, label %.lr.ph158, label %._crit_edge159

.lr.ph158:                                        ; preds = %._crit_edge152, %.lr.ph158
  %.pn156 = phi ptr [ %.0116, %.lr.ph158 ], [ %54, %._crit_edge152 ]
  %.0119155 = phi ptr [ %79, %.lr.ph158 ], [ %75, %._crit_edge152 ]
  %.0126154 = phi i32 [ %80, %.lr.ph158 ], [ 2, %._crit_edge152 ]
  %.0116 = getelementptr inbounds i8, ptr %.pn156, i64 %53
  %77 = call i32 @OBJECT_IDENTIFIER_set_single_arc(ptr noundef %.0119155, ptr noundef %.0116, i32 noundef %2, i32 noundef 0)
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds i8, ptr %.0119155, i64 %78
  %80 = add nuw i32 %.0126154, 1
  %exitcond164.not = icmp eq i32 %80, %3
  br i1 %exitcond164.not, label %._crit_edge159, label %.lr.ph158, !llvm.loop !18

._crit_edge159:                                   ; preds = %.lr.ph158, %._crit_edge152
  %.0119.lcssa = phi ptr [ %75, %._crit_edge152 ], [ %79, %.lr.ph158 ]
  %81 = ptrtoint ptr %.0119.lcssa to i64
  %82 = ptrtoint ptr %52 to i64
  %83 = sub i64 %81, %82
  %84 = trunc i64 %83 to i32
  %85 = getelementptr inbounds i8, ptr %0, i64 8
  store i32 %84, ptr %85, align 8, !tbaa !19
  %86 = load ptr, ptr %0, align 8, !tbaa !22
  store ptr %52, ptr %0, align 8, !tbaa !22
  %.not142 = icmp eq ptr %86, null
  br i1 %.not142, label %88, label %87

87:                                               ; preds = %._crit_edge159
  call void @free(ptr noundef nonnull %86) #7
  br label %88

88:                                               ; preds = %._crit_edge159, %87, %46, %44, %41, %11
  %.0 = phi i32 [ -1, %11 ], [ -1, %41 ], [ -1, %44 ], [ -1, %46 ], [ 0, %87 ], [ 0, %._crit_edge159 ]
  ret i32 %.0
}

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nofree nosync nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind willreturn memory(none) }
attributes #6 = { nounwind allocsize(0) }
attributes #7 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"short", !7, i64 0}
!12 = distinct !{!12, !13, !14, !15}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!"llvm.loop.isvectorized", i32 1}
!15 = !{!"llvm.loop.unroll.runtime.disable"}
!16 = distinct !{!16, !13, !15, !14}
!17 = distinct !{!17, !13}
!18 = distinct !{!18, !13}
!19 = !{!20, !6, i64 8}
!20 = !{!"ASN__PRIMITIVE_TYPE_s", !21, i64 0, !6, i64 8}
!21 = !{!"any pointer", !7, i64 0}
!22 = !{!20, !21, i64 0}


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