; LLVM IR from intel/qpl :: tools/ref (ref_own_copy)

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

; 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 uwtable
define dso_local i32 @ref_copy_le_le_nu(ptr noundef %0, i32 noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6) #1 {
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %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 i8, align 1
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i8, align 1
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i16, align 2
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store i32 %1, ptr %10, align 4, !tbaa !9
  store ptr %2, ptr %11, align 8, !tbaa !5
  store i32 %3, ptr %12, align 4, !tbaa !9
  store i32 %4, ptr %13, align 4, !tbaa !9
  store i32 %5, ptr %14, align 4, !tbaa !9
  store i32 %6, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #2
  store i8 1, ptr %16, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #2
  store i8 1, ptr %17, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #2
  store i8 0, ptr %18, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #2
  %36 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %36, ptr %19, align 4, !tbaa !9
  %37 = load i32, ptr %10, align 4, !tbaa !9
  %38 = load i8, ptr %16, align 1, !tbaa !11
  %39 = zext i8 %38 to i32
  %40 = shl i32 %39, %37
  %41 = trunc i32 %40 to i8
  store i8 %41, ptr %16, align 1, !tbaa !11
  %42 = load i32, ptr %15, align 4, !tbaa !9
  %43 = icmp eq i32 0, %42
  br i1 %43, label %44, label %135

44:                                               ; preds = %7
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #2
  %45 = load ptr, ptr %11, align 8, !tbaa !5
  %46 = load ptr, ptr %45, align 8, !tbaa !5
  store ptr %46, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #2
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %47

47:                                               ; preds = %112, %44
  %48 = load i32, ptr %21, align 4, !tbaa !9
  %49 = load i32, ptr %14, align 4, !tbaa !9
  %50 = icmp ult i32 %48, %49
  br i1 %50, label %52, label %51

51:                                               ; preds = %47
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #2
  br label %115

52:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #2
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %53

53:                                               ; preds = %108, %52
  %54 = load i32, ptr %23, align 4, !tbaa !9
  %55 = load i32, ptr %13, align 4, !tbaa !9
  %56 = icmp ult i32 %54, %55
  br i1 %56, label %58, label %57

57:                                               ; preds = %53
  store i32 5, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #2
  br label %111

58:                                               ; preds = %53
  %59 = load ptr, ptr %9, align 8, !tbaa !5
  %60 = load i8, ptr %59, align 1, !tbaa !11
  %61 = zext i8 %60 to i32
  %62 = load i8, ptr %16, align 1, !tbaa !11
  %63 = zext i8 %62 to i32
  %64 = and i32 %61, %63
  %65 = trunc i32 %64 to i8
  store i8 %65, ptr %18, align 1, !tbaa !11
  %66 = load i8, ptr %16, align 1, !tbaa !11
  %67 = zext i8 %66 to i32
  %68 = shl i32 %67, 1
  %69 = trunc i32 %68 to i8
  store i8 %69, ptr %16, align 1, !tbaa !11
  %70 = load i8, ptr %16, align 1, !tbaa !11
  %71 = icmp ne i8 %70, 0
  br i1 %71, label %75, label %72

72:                                               ; preds = %58
  store i8 1, ptr %16, align 1, !tbaa !11
  %73 = load ptr, ptr %9, align 8, !tbaa !5
  %74 = getelementptr inbounds i8, ptr %73, i32 1
  store ptr %74, ptr %9, align 8, !tbaa !5
  br label %75

75:                                               ; preds = %72, %58
  %76 = load i8, ptr %18, align 1, !tbaa !11
  %77 = zext i8 %76 to i32
  %78 = icmp ne i32 %77, 0
  br i1 %78, label %79, label %86

79:                                               ; preds = %75
  %80 = load ptr, ptr %20, align 8, !tbaa !5
  %81 = load i8, ptr %80, align 1, !tbaa !11
  %82 = zext i8 %81 to i32
  %83 = load i8, ptr %17, align 1, !tbaa !11
  %84 = zext i8 %83 to i32
  %85 = or i32 %82, %84
  br label %94

86:                                               ; preds = %75
  %87 = load ptr, ptr %20, align 8, !tbaa !5
  %88 = load i8, ptr %87, align 1, !tbaa !11
  %89 = zext i8 %88 to i32
  %90 = load i8, ptr %17, align 1, !tbaa !11
  %91 = zext i8 %90 to i32
  %92 = xor i32 %91, -1
  %93 = and i32 %89, %92
  br label %94

94:                                               ; preds = %86, %79
  %95 = phi i32 [ %85, %79 ], [ %93, %86 ]
  %96 = trunc i32 %95 to i8
  %97 = load ptr, ptr %20, align 8, !tbaa !5
  store i8 %96, ptr %97, align 1, !tbaa !11
  %98 = load i8, ptr %17, align 1, !tbaa !11
  %99 = zext i8 %98 to i32
  %100 = shl i32 %99, 1
  %101 = trunc i32 %100 to i8
  store i8 %101, ptr %17, align 1, !tbaa !11
  %102 = load i8, ptr %17, align 1, !tbaa !11
  %103 = icmp ne i8 %102, 0
  br i1 %103, label %107, label %104

104:                                              ; preds = %94
  store i8 1, ptr %17, align 1, !tbaa !11
  %105 = load ptr, ptr %20, align 8, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %105, i32 1
  store ptr %106, ptr %20, align 8, !tbaa !5
  br label %107

107:                                              ; preds = %104, %94
  br label %108

108:                                              ; preds = %107
  %109 = load i32, ptr %23, align 4, !tbaa !9
  %110 = add i32 %109, 1
  store i32 %110, ptr %23, align 4, !tbaa !9
  br label %53, !llvm.loop !12

111:                                              ; preds = %57
  br label %112

112:                                              ; preds = %111
  %113 = load i32, ptr %21, align 4, !tbaa !9
  %114 = add i32 %113, 1
  store i32 %114, ptr %21, align 4, !tbaa !9
  br label %47, !llvm.loop !14

115:                                              ; preds = %51
  %116 = load ptr, ptr %20, align 8, !tbaa !5
  %117 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %116, ptr %117, align 8, !tbaa !5
  %118 = load i8, ptr %17, align 1, !tbaa !11
  %119 = zext i8 %118 to i32
  %120 = icmp slt i32 1, %119
  br i1 %120, label %121, label %134

121:                                              ; preds = %115
  %122 = load i8, ptr %17, align 1, !tbaa !11
  %123 = zext i8 %122 to i32
  %124 = sub nsw i32 %123, 1
  %125 = load ptr, ptr %11, align 8, !tbaa !5
  %126 = load ptr, ptr %125, align 8, !tbaa !5
  %127 = load i8, ptr %126, align 1, !tbaa !11
  %128 = zext i8 %127 to i32
  %129 = and i32 %128, %124
  %130 = trunc i32 %129 to i8
  store i8 %130, ptr %126, align 1, !tbaa !11
  %131 = load ptr, ptr %11, align 8, !tbaa !5
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  %133 = getelementptr inbounds i8, ptr %132, i32 1
  store ptr %133, ptr %131, align 8, !tbaa !5
  br label %134

134:                                              ; preds = %121, %115
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #2
  br label %412

135:                                              ; preds = %7
  %136 = load i32, ptr %15, align 4, !tbaa !9
  %137 = icmp eq i32 1, %136
  br i1 %137, label %138, label %228

138:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #2
  %139 = load ptr, ptr %11, align 8, !tbaa !5
  %140 = load ptr, ptr %139, align 8, !tbaa !5
  store ptr %140, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #2
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %141

141:                                              ; preds = %217, %138
  %142 = load i32, ptr %25, align 4, !tbaa !9
  %143 = load i32, ptr %14, align 4, !tbaa !9
  %144 = icmp ult i32 %142, %143
  br i1 %144, label %146, label %145

145:                                              ; preds = %141
  store i32 8, ptr %22, align 4
  br label %220

146:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #2
  store i8 0, ptr %26, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #2
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %185, %146
  %148 = load i32, ptr %27, align 4, !tbaa !9
  %149 = load i32, ptr %13, align 4, !tbaa !9
  %150 = icmp ult i32 %148, %149
  br i1 %150, label %152, label %151

151:                                              ; preds = %147
  store i32 11, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #2
  br label %188

152:                                              ; preds = %147
  %153 = load ptr, ptr %9, align 8, !tbaa !5
  %154 = load i8, ptr %153, align 1, !tbaa !11
  %155 = zext i8 %154 to i32
  %156 = load i8, ptr %16, align 1, !tbaa !11
  %157 = zext i8 %156 to i32
  %158 = and i32 %155, %157
  %159 = trunc i32 %158 to i8
  store i8 %159, ptr %18, align 1, !tbaa !11
  %160 = load i8, ptr %16, align 1, !tbaa !11
  %161 = zext i8 %160 to i32
  %162 = shl i32 %161, 1
  %163 = trunc i32 %162 to i8
  store i8 %163, ptr %16, align 1, !tbaa !11
  %164 = load i8, ptr %16, align 1, !tbaa !11
  %165 = icmp ne i8 %164, 0
  br i1 %165, label %169, label %166

166:                                              ; preds = %152
  store i8 1, ptr %16, align 1, !tbaa !11
  %167 = load ptr, ptr %9, align 8, !tbaa !5
  %168 = getelementptr inbounds i8, ptr %167, i32 1
  store ptr %168, ptr %9, align 8, !tbaa !5
  br label %169

169:                                              ; preds = %166, %152
  %170 = load i8, ptr %18, align 1, !tbaa !11
  %171 = zext i8 %170 to i32
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %179

173:                                              ; preds = %169
  %174 = load i8, ptr %26, align 1, !tbaa !11
  %175 = zext i8 %174 to i32
  %176 = load i32, ptr %27, align 4, !tbaa !9
  %177 = shl i32 1, %176
  %178 = or i32 %175, %177
  br label %182

179:                                              ; preds = %169
  %180 = load i8, ptr %26, align 1, !tbaa !11
  %181 = zext i8 %180 to i32
  br label %182

182:                                              ; preds = %179, %173
  %183 = phi i32 [ %178, %173 ], [ %181, %179 ]
  %184 = trunc i32 %183 to i8
  store i8 %184, ptr %26, align 1, !tbaa !11
  br label %185

185:                                              ; preds = %182
  %186 = load i32, ptr %27, align 4, !tbaa !9
  %187 = add i32 %186, 1
  store i32 %187, ptr %27, align 4, !tbaa !9
  br label %147, !llvm.loop !15

188:                                              ; preds = %151
  %189 = load i32, ptr %13, align 4, !tbaa !9
  %190 = icmp eq i32 1, %189
  br i1 %190, label %191, label %208

191:                                              ; preds = %188
  %192 = load i8, ptr %26, align 1, !tbaa !11
  %193 = zext i8 %192 to i32
  %194 = icmp ult i32 0, %193
  br i1 %194, label %195, label %205

195:                                              ; preds = %191
  %196 = load i32, ptr %19, align 4, !tbaa !9
  %197 = icmp ult i32 255, %196
  br i1 %197, label %198, label %199

198:                                              ; preds = %195
  store i32 221, ptr %8, align 4
  store i32 1, ptr %22, align 4
  br label %214

199:                                              ; preds = %195
  %200 = load i32, ptr %19, align 4, !tbaa !9
  %201 = trunc i32 %200 to i8
  %202 = load ptr, ptr %24, align 8, !tbaa !5
  store i8 %201, ptr %202, align 1, !tbaa !11
  %203 = load ptr, ptr %24, align 8, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %203, i32 1
  store ptr %204, ptr %24, align 8, !tbaa !5
  br label %205

205:                                              ; preds = %199, %191
  %206 = load i32, ptr %19, align 4, !tbaa !9
  %207 = add i32 %206, 1
  store i32 %207, ptr %19, align 4, !tbaa !9
  br label %213

208:                                              ; preds = %188
  %209 = load i8, ptr %26, align 1, !tbaa !11
  %210 = load ptr, ptr %24, align 8, !tbaa !5
  store i8 %209, ptr %210, align 1, !tbaa !11
  %211 = load ptr, ptr %24, align 8, !tbaa !5
  %212 = getelementptr inbounds i8, ptr %211, i32 1
  store ptr %212, ptr %24, align 8, !tbaa !5
  br label %213

213:                                              ; preds = %208, %205
  store i32 0, ptr %22, align 4
  br label %214

214:                                              ; preds = %213, %198
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #2
  %215 = load i32, ptr %22, align 4
  switch i32 %215, label %220 [
    i32 0, label %216
  ]

216:                                              ; preds = %214
  br label %217

217:                                              ; preds = %216
  %218 = load i32, ptr %25, align 4, !tbaa !9
  %219 = add i32 %218, 1
  store i32 %219, ptr %25, align 4, !tbaa !9
  br label %141, !llvm.loop !16

220:                                              ; preds = %214, %145
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #2
  %221 = load i32, ptr %22, align 4
  switch i32 %221, label %225 [
    i32 8, label %222
  ]

222:                                              ; preds = %220
  %223 = load ptr, ptr %24, align 8, !tbaa !5
  %224 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %223, ptr %224, align 8, !tbaa !5
  store i32 0, ptr %22, align 4
  br label %225

225:                                              ; preds = %222, %220
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #2
  %226 = load i32, ptr %22, align 4
  switch i32 %226, label %413 [
    i32 0, label %227
  ]

227:                                              ; preds = %225
  br label %411

228:                                              ; preds = %135
  %229 = load i32, ptr %15, align 4, !tbaa !9
  %230 = icmp eq i32 2, %229
  br i1 %230, label %231, label %321

231:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #2
  %232 = load ptr, ptr %11, align 8, !tbaa !5
  %233 = load ptr, ptr %232, align 8, !tbaa !5
  store ptr %233, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #2
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %310, %231
  %235 = load i32, ptr %29, align 4, !tbaa !9
  %236 = load i32, ptr %14, align 4, !tbaa !9
  %237 = icmp ult i32 %235, %236
  br i1 %237, label %239, label %238

238:                                              ; preds = %234
  store i32 14, ptr %22, align 4
  br label %313

239:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #2
  store i16 0, ptr %30, align 2, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #2
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %240

240:                                              ; preds = %278, %239
  %241 = load i32, ptr %31, align 4, !tbaa !9
  %242 = load i32, ptr %13, align 4, !tbaa !9
  %243 = icmp ult i32 %241, %242
  br i1 %243, label %245, label %244

244:                                              ; preds = %240
  store i32 17, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #2
  br label %281

245:                                              ; preds = %240
  %246 = load ptr, ptr %9, align 8, !tbaa !5
  %247 = load i8, ptr %246, align 1, !tbaa !11
  %248 = zext i8 %247 to i32
  %249 = load i8, ptr %16, align 1, !tbaa !11
  %250 = zext i8 %249 to i32
  %251 = and i32 %248, %250
  %252 = trunc i32 %251 to i8
  store i8 %252, ptr %18, align 1, !tbaa !11
  %253 = load i8, ptr %16, align 1, !tbaa !11
  %254 = zext i8 %253 to i32
  %255 = shl i32 %254, 1
  %256 = trunc i32 %255 to i8
  store i8 %256, ptr %16, align 1, !tbaa !11
  %257 = load i8, ptr %16, align 1, !tbaa !11
  %258 = icmp ne i8 %257, 0
  br i1 %258, label %262, label %259

259:                                              ; preds = %245
  store i8 1, ptr %16, align 1, !tbaa !11
  %260 = load ptr, ptr %9, align 8, !tbaa !5
  %261 = getelementptr inbounds i8, ptr %260, i32 1
  store ptr %261, ptr %9, align 8, !tbaa !5
  br label %262

262:                                              ; preds = %259, %245
  %263 = load i8, ptr %18, align 1, !tbaa !11
  %264 = zext i8 %263 to i32
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %272

266:                                              ; preds = %262
  %267 = load i16, ptr %30, align 2, !tbaa !17
  %268 = zext i16 %267 to i32
  %269 = load i32, ptr %31, align 4, !tbaa !9
  %270 = shl i32 1, %269
  %271 = or i32 %268, %270
  br label %275

272:                                              ; preds = %262
  %273 = load i16, ptr %30, align 2, !tbaa !17
  %274 = zext i16 %273 to i32
  br label %275

275:                                              ; preds = %272, %266
  %276 = phi i32 [ %271, %266 ], [ %274, %272 ]
  %277 = trunc i32 %276 to i16
  store i16 %277, ptr %30, align 2, !tbaa !17
  br label %278

278:                                              ; preds = %275
  %279 = load i32, ptr %31, align 4, !tbaa !9
  %280 = add i32 %279, 1
  store i32 %280, ptr %31, align 4, !tbaa !9
  br label %240, !llvm.loop !19

281:                                              ; preds = %244
  %282 = load i32, ptr %13, align 4, !tbaa !9
  %283 = icmp eq i32 1, %282
  br i1 %283, label %284, label %301

284:                                              ; preds = %281
  %285 = load i16, ptr %30, align 2, !tbaa !17
  %286 = zext i16 %285 to i32
  %287 = icmp ult i32 0, %286
  br i1 %287, label %288, label %298

288:                                              ; preds = %284
  %289 = load i32, ptr %19, align 4, !tbaa !9
  %290 = icmp ult i32 65535, %289
  br i1 %290, label %291, label %292

291:                                              ; preds = %288
  store i32 221, ptr %8, align 4
  store i32 1, ptr %22, align 4
  br label %307

292:                                              ; preds = %288
  %293 = load i32, ptr %19, align 4, !tbaa !9
  %294 = trunc i32 %293 to i16
  %295 = load ptr, ptr %28, align 8, !tbaa !5
  store i16 %294, ptr %295, align 2, !tbaa !17
  %296 = load ptr, ptr %28, align 8, !tbaa !5
  %297 = getelementptr inbounds i16, ptr %296, i32 1
  store ptr %297, ptr %28, align 8, !tbaa !5
  br label %298

298:                                              ; preds = %292, %284
  %299 = load i32, ptr %19, align 4, !tbaa !9
  %300 = add i32 %299, 1
  store i32 %300, ptr %19, align 4, !tbaa !9
  br label %306

301:                                              ; preds = %281
  %302 = load i16, ptr %30, align 2, !tbaa !17
  %303 = load ptr, ptr %28, align 8, !tbaa !5
  store i16 %302, ptr %303, align 2, !tbaa !17
  %304 = load ptr, ptr %28, align 8, !tbaa !5
  %305 = getelementptr inbounds i16, ptr %304, i32 1
  store ptr %305, ptr %28, align 8, !tbaa !5
  br label %306

306:                                              ; preds = %301, %298
  store i32 0, ptr %22, align 4
  br label %307

307:                                              ; preds = %306, %291
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #2
  %308 = load i32, ptr %22, align 4
  switch i32 %308, label %313 [
    i32 0, label %309
  ]

309:                                              ; preds = %307
  br label %310

310:                                              ; preds = %309
  %311 = load i32, ptr %29, align 4, !tbaa !9
  %312 = add i32 %311, 1
  store i32 %312, ptr %29, align 4, !tbaa !9
  br label %234, !llvm.loop !20

313:                                              ; preds = %307, %238
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #2
  %314 = load i32, ptr %22, align 4
  switch i32 %314, label %318 [
    i32 14, label %315
  ]

315:                                              ; preds = %313
  %316 = load ptr, ptr %28, align 8, !tbaa !5
  %317 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %316, ptr %317, align 8, !tbaa !5
  store i32 0, ptr %22, align 4
  br label %318

318:                                              ; preds = %315, %313
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #2
  %319 = load i32, ptr %22, align 4
  switch i32 %319, label %413 [
    i32 0, label %320
  ]

320:                                              ; preds = %318
  br label %410

321:                                              ; preds = %228
  %322 = load i32, ptr %15, align 4, !tbaa !9
  %323 = icmp eq i32 3, %322
  br i1 %323, label %324, label %409

324:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #2
  %325 = load ptr, ptr %11, align 8, !tbaa !5
  %326 = load ptr, ptr %325, align 8, !tbaa !5
  store ptr %326, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #2
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %327

327:                                              ; preds = %398, %324
  %328 = load i32, ptr %33, align 4, !tbaa !9
  %329 = load i32, ptr %14, align 4, !tbaa !9
  %330 = icmp ult i32 %328, %329
  br i1 %330, label %332, label %331

331:                                              ; preds = %327
  store i32 20, ptr %22, align 4
  br label %401

332:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #2
  store i32 0, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #2
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %333

333:                                              ; preds = %368, %332
  %334 = load i32, ptr %35, align 4, !tbaa !9
  %335 = load i32, ptr %13, align 4, !tbaa !9
  %336 = icmp ult i32 %334, %335
  br i1 %336, label %338, label %337

337:                                              ; preds = %333
  store i32 23, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #2
  br label %371

338:                                              ; preds = %333
  %339 = load ptr, ptr %9, align 8, !tbaa !5
  %340 = load i8, ptr %339, align 1, !tbaa !11
  %341 = zext i8 %340 to i32
  %342 = load i8, ptr %16, align 1, !tbaa !11
  %343 = zext i8 %342 to i32
  %344 = and i32 %341, %343
  %345 = trunc i32 %344 to i8
  store i8 %345, ptr %18, align 1, !tbaa !11
  %346 = load i8, ptr %16, align 1, !tbaa !11
  %347 = zext i8 %346 to i32
  %348 = shl i32 %347, 1
  %349 = trunc i32 %348 to i8
  store i8 %349, ptr %16, align 1, !tbaa !11
  %350 = load i8, ptr %16, align 1, !tbaa !11
  %351 = icmp ne i8 %350, 0
  br i1 %351, label %355, label %352

352:                                              ; preds = %338
  store i8 1, ptr %16, align 1, !tbaa !11
  %353 = load ptr, ptr %9, align 8, !tbaa !5
  %354 = getelementptr inbounds i8, ptr %353, i32 1
  store ptr %354, ptr %9, align 8, !tbaa !5
  br label %355

355:                                              ; preds = %352, %338
  %356 = load i8, ptr %18, align 1, !tbaa !11
  %357 = zext i8 %356 to i32
  %358 = icmp ne i32 %357, 0
  br i1 %358, label %359, label %364

359:                                              ; preds = %355
  %360 = load i32, ptr %34, align 4, !tbaa !9
  %361 = load i32, ptr %35, align 4, !tbaa !9
  %362 = shl i32 1, %361
  %363 = or i32 %360, %362
  br label %366

364:                                              ; preds = %355
  %365 = load i32, ptr %34, align 4, !tbaa !9
  br label %366

366:                                              ; preds = %364, %359
  %367 = phi i32 [ %363, %359 ], [ %365, %364 ]
  store i32 %367, ptr %34, align 4, !tbaa !9
  br label %368

368:                                              ; preds = %366
  %369 = load i32, ptr %35, align 4, !tbaa !9
  %370 = add i32 %369, 1
  store i32 %370, ptr %35, align 4, !tbaa !9
  br label %333, !llvm.loop !21

371:                                              ; preds = %337
  %372 = load i32, ptr %13, align 4, !tbaa !9
  %373 = icmp eq i32 1, %372
  br i1 %373, label %374, label %389

374:                                              ; preds = %371
  %375 = load i32, ptr %34, align 4, !tbaa !9
  %376 = icmp ult i32 0, %375
  br i1 %376, label %377, label %386

377:                                              ; preds = %374
  %378 = load i32, ptr %19, align 4, !tbaa !9
  %379 = icmp eq i32 -1, %378
  br i1 %379, label %380, label %381

380:                                              ; preds = %377
  store i32 221, ptr %8, align 4
  store i32 1, ptr %22, align 4
  br label %395

381:                                              ; preds = %377
  %382 = load i32, ptr %19, align 4, !tbaa !9
  %383 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 %382, ptr %383, align 4, !tbaa !9
  %384 = load ptr, ptr %32, align 8, !tbaa !5
  %385 = getelementptr inbounds i32, ptr %384, i32 1
  store ptr %385, ptr %32, align 8, !tbaa !5
  br label %386

386:                                              ; preds = %381, %374
  %387 = load i32, ptr %19, align 4, !tbaa !9
  %388 = add i32 %387, 1
  store i32 %388, ptr %19, align 4, !tbaa !9
  br label %394

389:                                              ; preds = %371
  %390 = load i32, ptr %34, align 4, !tbaa !9
  %391 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 %390, ptr %391, align 4, !tbaa !9
  %392 = load ptr, ptr %32, align 8, !tbaa !5
  %393 = getelementptr inbounds i32, ptr %392, i32 1
  store ptr %393, ptr %32, align 8, !tbaa !5
  br label %394

394:                                              ; preds = %389, %386
  store i32 0, ptr %22, align 4
  br label %395

395:                                              ; preds = %394, %380
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #2
  %396 = load i32, ptr %22, align 4
  switch i32 %396, label %401 [
    i32 0, label %397
  ]

397:                                              ; preds = %395
  br label %398

398:                                              ; preds = %397
  %399 = load i32, ptr %33, align 4, !tbaa !9
  %400 = add i32 %399, 1
  store i32 %400, ptr %33, align 4, !tbaa !9
  br label %327, !llvm.loop !22

401:                                              ; preds = %395, %331
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #2
  %402 = load i32, ptr %22, align 4
  switch i32 %402, label %406 [
    i32 20, label %403
  ]

403:                                              ; preds = %401
  %404 = load ptr, ptr %32, align 8, !tbaa !5
  %405 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %404, ptr %405, align 8, !tbaa !5
  store i32 0, ptr %22, align 4
  br label %406

406:                                              ; preds = %403, %401
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #2
  %407 = load i32, ptr %22, align 4
  switch i32 %407, label %413 [
    i32 0, label %408
  ]

408:                                              ; preds = %406
  br label %409

409:                                              ; preds = %408, %321
  br label %410

410:                                              ; preds = %409, %320
  br label %411

411:                                              ; preds = %410, %227
  br label %412

412:                                              ; preds = %411, %134
  store i32 0, ptr %8, align 4
  store i32 1, ptr %22, align 4
  br label %413

413:                                              ; preds = %412, %406, %318, %225
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #2
  %414 = load i32, ptr %8, align 4
  ret i32 %414
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}
!17 = !{!18, !18, i64 0}
!18 = !{!"short", !7, i64 0}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !13}
!21 = distinct !{!21, !13}
!22 = distinct !{!22, !13}


; 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: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local noundef i32 @ref_copy_le_le_nu(ptr nocapture noundef readonly %0, i32 noundef %1, ptr nocapture noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6) local_unnamed_addr #0 {
  %8 = shl nuw i32 1, %1
  %9 = trunc i32 %8 to i8
  switch i32 %6, label %.critedge [
    i32 0, label %10
    i32 1, label %30
    i32 2, label %67
    i32 3, label %111
  ]

10:                                               ; preds = %7
  %.not368 = icmp eq i32 %5, 0
  %.not369 = icmp eq i32 %4, 0
  %or.cond = or i1 %.not368, %.not369
  br i1 %or.cond, label %.critedge, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %10
  %11 = load ptr, ptr %2, align 8, !tbaa !5
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge351.us
  %.0160360.us = phi i32 [ %23, %._crit_edge351.us ], [ 0, %.preheader.us.preheader ]
  %.0161359.us = phi ptr [ %spec.select233.us, %._crit_edge351.us ], [ %11, %.preheader.us.preheader ]
  %.0173358.us = phi i8 [ %spec.select232.us, %._crit_edge351.us ], [ 1, %.preheader.us.preheader ]
  %.0176357.us = phi i8 [ %spec.select231.us, %._crit_edge351.us ], [ %9, %.preheader.us.preheader ]
  %.0195356.us = phi ptr [ %spec.select.us, %._crit_edge351.us ], [ %0, %.preheader.us.preheader ]
  br label %12

12:                                               ; preds = %.preheader.us, %12
  %.0154349.us = phi i32 [ 0, %.preheader.us ], [ %22, %12 ]
  %.1162348.us = phi ptr [ %.0161359.us, %.preheader.us ], [ %spec.select233.us, %12 ]
  %.1174347.us = phi i8 [ %.0173358.us, %.preheader.us ], [ %spec.select232.us, %12 ]
  %.1177346.us = phi i8 [ %.0176357.us, %.preheader.us ], [ %spec.select231.us, %12 ]
  %.1196345.us = phi ptr [ %.0195356.us, %.preheader.us ], [ %spec.select.us, %12 ]
  %13 = load i8, ptr %.1196345.us, align 1, !tbaa !9
  %14 = and i8 %13, %.1177346.us
  %15 = shl i8 %.1177346.us, 1
  %.not228.us = icmp eq i8 %15, 0
  %spec.select.idx.us = zext i1 %.not228.us to i64
  %spec.select.us = getelementptr inbounds i8, ptr %.1196345.us, i64 %spec.select.idx.us
  %spec.select231.us = tail call i8 @llvm.umax.i8(i8 %15, i8 1)
  %.not229.us = icmp eq i8 %14, 0
  %16 = load i8, ptr %.1162348.us, align 1, !tbaa !9
  %17 = or i8 %16, %.1174347.us
  %18 = xor i8 %.1174347.us, -1
  %19 = and i8 %16, %18
  %20 = select i1 %.not229.us, i8 %19, i8 %17
  store i8 %20, ptr %.1162348.us, align 1, !tbaa !9
  %21 = shl i8 %.1174347.us, 1
  %.not230.us = icmp eq i8 %21, 0
  %spec.select232.us = tail call i8 @llvm.umax.i8(i8 %21, i8 1)
  %spec.select233.idx.us = zext i1 %.not230.us to i64
  %spec.select233.us = getelementptr inbounds i8, ptr %.1162348.us, i64 %spec.select233.idx.us
  %22 = add nuw i32 %.0154349.us, 1
  %exitcond385.not = icmp eq i32 %22, %4
  br i1 %exitcond385.not, label %._crit_edge351.us, label %12, !llvm.loop !10

._crit_edge351.us:                                ; preds = %12
  %23 = add nuw i32 %.0160360.us, 1
  %exitcond386.not = icmp eq i32 %23, %5
  br i1 %exitcond386.not, label %._crit_edge361, label %.preheader.us, !llvm.loop !12

._crit_edge361:                                   ; preds = %._crit_edge351.us
  store ptr %spec.select233.us, ptr %2, align 8, !tbaa !5
  %.not401 = icmp eq i8 %21, 0
  br i1 %.not401, label %.critedge, label %24

24:                                               ; preds = %._crit_edge361
  %25 = add i8 %spec.select232.us, -1
  %26 = load i8, ptr %spec.select233.us, align 1, !tbaa !9
  %27 = and i8 %26, %25
  store i8 %27, ptr %spec.select233.us, align 1, !tbaa !9
  %28 = load ptr, ptr %2, align 8, !tbaa !5
  %29 = getelementptr inbounds i8, ptr %28, i64 1
  br label %.critedge.sink.split

30:                                               ; preds = %7
  %31 = load ptr, ptr %2, align 8, !tbaa !5
  %.not225.not338.not = icmp eq i32 %5, 0
  br i1 %.not225.not338.not, label %.critedge.sink.split, label %.preheader272.lr.ph

.preheader272.lr.ph:                              ; preds = %30
  %32 = icmp eq i32 %4, 1
  %xtraiter427 = and i32 %4, 1
  %33 = icmp eq i32 %4, 1
  %unroll_iter432 = and i32 %4, -2
  %lcmp.mod428.not = icmp eq i32 %xtraiter427, 0
  br label %.preheader272

.preheader272:                                    ; preds = %.preheader272.lr.ph, %65
  %.0148343 = phi i32 [ 0, %.preheader272.lr.ph ], [ %66, %65 ]
  %.0149342 = phi ptr [ %31, %.preheader272.lr.ph ], [ %.3152.ph, %65 ]
  %.0164341 = phi i32 [ %3, %.preheader272.lr.ph ], [ %.2166.ph, %65 ]
  %.3179340 = phi i8 [ %9, %.preheader272.lr.ph ], [ %.4180.lcssa394, %65 ]
  %.3198339 = phi ptr [ %0, %.preheader272.lr.ph ], [ %.4199.lcssa392, %65 ]
  switch i32 %4, label %.lr.ph [
    i32 0, label %._crit_edge.thread
    i32 1, label %._crit_edge.unr-lcssa
  ]

._crit_edge.unr-lcssa:                            ; preds = %.lr.ph, %.preheader272
  %spec.select234.lcssa.ph = phi ptr [ poison, %.preheader272 ], [ %spec.select234.1, %.lr.ph ]
  %spec.select235.lcssa.ph = phi i8 [ poison, %.preheader272 ], [ %spec.select235.1, %.lr.ph ]
  %.lcssa409.ph = phi i8 [ poison, %.preheader272 ], [ %54, %.lr.ph ]
  %.0146335.unr = phi i32 [ 0, %.preheader272 ], [ %55, %.lr.ph ]
  %.0147334.unr = phi i8 [ 0, %.preheader272 ], [ %54, %.lr.ph ]
  %.4180333.unr = phi i8 [ %.3179340, %.preheader272 ], [ %spec.select235.1, %.lr.ph ]
  %.4199332.unr = phi ptr [ %.3198339, %.preheader272 ], [ %spec.select234.1, %.lr.ph ]
  br i1 %lcmp.mod428.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.unr-lcssa
  %34 = load i8, ptr %.4199332.unr, align 1, !tbaa !9
  %35 = and i8 %34, %.4180333.unr
  %36 = shl i8 %.4180333.unr, 1
  %.not226.epil = icmp eq i8 %36, 0
  %spec.select234.idx.epil = zext i1 %.not226.epil to i64
  %spec.select234.epil = getelementptr inbounds i8, ptr %.4199332.unr, i64 %spec.select234.idx.epil
  %spec.select235.epil = tail call i8 @llvm.umax.i8(i8 %36, i8 1)
  %.not227.epil = icmp eq i8 %35, 0
  %37 = shl nuw i32 1, %.0146335.unr
  %38 = trunc i32 %37 to i8
  %39 = select i1 %.not227.epil, i8 0, i8 %38
  %40 = or i8 %39, %.0147334.unr
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.unr-lcssa, %.lr.ph.epil
  %spec.select234.lcssa = phi ptr [ %spec.select234.lcssa.ph, %._crit_edge.unr-lcssa ], [ %spec.select234.epil, %.lr.ph.epil ]
  %spec.select235.lcssa = phi i8 [ %spec.select235.lcssa.ph, %._crit_edge.unr-lcssa ], [ %spec.select235.epil, %.lr.ph.epil ]
  %.lcssa409 = phi i8 [ %.lcssa409.ph, %._crit_edge.unr-lcssa ], [ %40, %.lr.ph.epil ]
  br i1 %32, label %56, label %._crit_edge.thread

.lr.ph:                                           ; preds = %.preheader272, %.lr.ph
  %.0146335 = phi i32 [ %55, %.lr.ph ], [ 0, %.preheader272 ]
  %.0147334 = phi i8 [ %54, %.lr.ph ], [ 0, %.preheader272 ]
  %.4180333 = phi i8 [ %spec.select235.1, %.lr.ph ], [ %.3179340, %.preheader272 ]
  %.4199332 = phi ptr [ %spec.select234.1, %.lr.ph ], [ %.3198339, %.preheader272 ]
  %niter433 = phi i32 [ %niter433.next.1, %.lr.ph ], [ 0, %.preheader272 ]
  %41 = load i8, ptr %.4199332, align 1, !tbaa !9
  %42 = and i8 %41, %.4180333
  %43 = shl i8 %.4180333, 1
  %.not226 = icmp eq i8 %43, 0
  %spec.select234.idx = zext i1 %.not226 to i64
  %spec.select234 = getelementptr inbounds i8, ptr %.4199332, i64 %spec.select234.idx
  %spec.select235 = tail call i8 @llvm.umax.i8(i8 %43, i8 1)
  %.not227 = icmp eq i8 %42, 0
  %44 = shl nuw i32 1, %.0146335
  %45 = trunc i32 %44 to i8
  %46 = select i1 %.not227, i8 0, i8 %45
  %47 = or i8 %46, %.0147334
  %48 = load i8, ptr %spec.select234, align 1, !tbaa !9
  %49 = and i8 %48, %spec.select235
  %50 = shl i8 %spec.select235, 1
  %.not226.1 = icmp eq i8 %50, 0
  %spec.select234.idx.1 = zext i1 %.not226.1 to i64
  %spec.select234.1 = getelementptr inbounds i8, ptr %spec.select234, i64 %spec.select234.idx.1
  %spec.select235.1 = tail call i8 @llvm.umax.i8(i8 %50, i8 1)
  %.not227.1 = icmp eq i8 %49, 0
  %51 = shl nuw i32 2, %.0146335
  %52 = trunc i32 %51 to i8
  %53 = select i1 %.not227.1, i8 0, i8 %52
  %54 = or i8 %53, %47
  %55 = add nuw i32 %.0146335, 2
  %niter433.next.1 = add i32 %niter433, 2
  %niter433.ncmp.1 = icmp eq i32 %niter433.next.1, %unroll_iter432
  br i1 %niter433.ncmp.1, label %._crit_edge.unr-lcssa, label %.lr.ph, !llvm.loop !13

56:                                               ; preds = %._crit_edge
  %.not224 = icmp eq i8 %.lcssa409, 0
  br i1 %.not224, label %62, label %57

57:                                               ; preds = %56
  %58 = icmp ugt i32 %.0164341, 255
  br i1 %58, label %.critedge, label %59

59:                                               ; preds = %57
  %60 = trunc nuw i32 %.0164341 to i8
  store i8 %60, ptr %.0149342, align 1, !tbaa !9
  %61 = getelementptr inbounds i8, ptr %.0149342, i64 1
  br label %62

62:                                               ; preds = %59, %56
  %.1150 = phi ptr [ %61, %59 ], [ %.0149342, %56 ]
  %63 = add i32 %.0164341, 1
  br label %65

._crit_edge.thread:                               ; preds = %.preheader272, %._crit_edge
  %.0147.lcssa396 = phi i8 [ %.lcssa409, %._crit_edge ], [ 0, %.preheader272 ]
  %.4180.lcssa395 = phi i8 [ %spec.select235.lcssa, %._crit_edge ], [ %.3179340, %.preheader272 ]
  %.4199.lcssa393 = phi ptr [ %spec.select234.lcssa, %._crit_edge ], [ %.3198339, %.preheader272 ]
  store i8 %.0147.lcssa396, ptr %.0149342, align 1, !tbaa !9
  %64 = getelementptr inbounds i8, ptr %.0149342, i64 1
  br label %65

65:                                               ; preds = %._crit_edge.thread, %62
  %.4180.lcssa394 = phi i8 [ %.4180.lcssa395, %._crit_edge.thread ], [ %spec.select235.lcssa, %62 ]
  %.4199.lcssa392 = phi ptr [ %.4199.lcssa393, %._crit_edge.thread ], [ %spec.select234.lcssa, %62 ]
  %.2166.ph = phi i32 [ %.0164341, %._crit_edge.thread ], [ %63, %62 ]
  %.3152.ph = phi ptr [ %64, %._crit_edge.thread ], [ %.1150, %62 ]
  %66 = add nuw i32 %.0148343, 1
  %exitcond384.not = icmp eq i32 %66, %5
  br i1 %exitcond384.not, label %.critedge.sink.split, label %.preheader272, !llvm.loop !14

67:                                               ; preds = %7
  %68 = load ptr, ptr %2, align 8, !tbaa !5
  %.not221.not310.not = icmp eq i32 %5, 0
  br i1 %.not221.not310.not, label %.critedge.sink.split, label %.preheader273.lr.ph

.preheader273.lr.ph:                              ; preds = %67
  %.not366 = icmp eq i32 %4, 0
  %69 = icmp eq i32 %4, 1
  br i1 %.not366, label %.preheader273.preheader, label %.preheader273.us.preheader

.preheader273.us.preheader:                       ; preds = %.preheader273.lr.ph
  %xtraiter420 = and i32 %4, 1
  %70 = icmp eq i32 %4, 1
  %unroll_iter425 = and i32 %4, -2
  %lcmp.mod421.not = icmp eq i32 %xtraiter420, 0
  br label %.preheader273.us

.preheader273.preheader:                          ; preds = %.preheader273.lr.ph
  %71 = zext i32 %5 to i64
  %72 = shl nuw nsw i64 %71, 1
  tail call void @llvm.memset.p0.i64(ptr align 2 %68, i8 0, i64 %72, i1 false), !tbaa !15
  %73 = add i32 %5, -1
  %74 = zext i32 %73 to i64
  %75 = shl nuw nsw i64 %74, 1
  %76 = getelementptr i8, ptr %68, i64 %75
  %scevgep382 = getelementptr i8, ptr %76, i64 2
  br label %.critedge.sink.split

.preheader273.us:                                 ; preds = %.preheader273.us.preheader, %87
  %.0140315.us = phi i32 [ %88, %87 ], [ 0, %.preheader273.us.preheader ]
  %.0141314.us = phi ptr [ %.3144.ph.us, %87 ], [ %68, %.preheader273.us.preheader ]
  %.3167313.us = phi i32 [ %.5169.ph.us, %87 ], [ %3, %.preheader273.us.preheader ]
  %.6182312.us = phi i8 [ %spec.select237.us.lcssa, %87 ], [ %9, %.preheader273.us.preheader ]
  %.6201311.us = phi ptr [ %spec.select236.us.lcssa, %87 ], [ %0, %.preheader273.us.preheader ]
  br i1 %70, label %._crit_edge.us317.unr-lcssa, label %.preheader273.us.new

77:                                               ; preds = %._crit_edge.us317
  store i16 %.lcssa412, ptr %.0141314.us, align 2, !tbaa !15
  %78 = getelementptr inbounds i8, ptr %.0141314.us, i64 2
  br label %87

79:                                               ; preds = %._crit_edge.us317
  %.not220.us = icmp eq i16 %.lcssa412, 0
  br i1 %.not220.us, label %85, label %80

80:                                               ; preds = %79
  %81 = icmp ugt i32 %.3167313.us, 65535
  br i1 %81, label %.critedge, label %82

82:                                               ; preds = %80
  %83 = trunc nuw i32 %.3167313.us to i16
  store i16 %83, ptr %.0141314.us, align 2, !tbaa !15
  %84 = getelementptr inbounds i8, ptr %.0141314.us, i64 2
  br label %85

85:                                               ; preds = %82, %79
  %.1142.us = phi ptr [ %84, %82 ], [ %.0141314.us, %79 ]
  %86 = add i32 %.3167313.us, 1
  br label %87

87:                                               ; preds = %85, %77
  %.5169.ph.us = phi i32 [ %.3167313.us, %77 ], [ %86, %85 ]
  %.3144.ph.us = phi ptr [ %78, %77 ], [ %.1142.us, %85 ]
  %88 = add nuw i32 %.0140315.us, 1
  %exitcond381.not = icmp eq i32 %88, %5
  br i1 %exitcond381.not, label %.critedge.sink.split, label %.preheader273.us, !llvm.loop !17

.preheader273.us.new:                             ; preds = %.preheader273.us, %.preheader273.us.new
  %.0138307.us = phi i32 [ %103, %.preheader273.us.new ], [ 0, %.preheader273.us ]
  %.0139306.us = phi i16 [ %102, %.preheader273.us.new ], [ 0, %.preheader273.us ]
  %.7183305.us = phi i8 [ %spec.select237.us.1, %.preheader273.us.new ], [ %.6182312.us, %.preheader273.us ]
  %.7202304.us = phi ptr [ %spec.select236.us.1, %.preheader273.us.new ], [ %.6201311.us, %.preheader273.us ]
  %niter426 = phi i32 [ %niter426.next.1, %.preheader273.us.new ], [ 0, %.preheader273.us ]
  %89 = load i8, ptr %.7202304.us, align 1, !tbaa !9
  %90 = and i8 %89, %.7183305.us
  %91 = shl i8 %.7183305.us, 1
  %.not222.us = icmp eq i8 %91, 0
  %spec.select236.idx.us = zext i1 %.not222.us to i64
  %spec.select236.us = getelementptr inbounds i8, ptr %.7202304.us, i64 %spec.select236.idx.us
  %spec.select237.us = tail call i8 @llvm.umax.i8(i8 %91, i8 1)
  %.not223.us = icmp eq i8 %90, 0
  %92 = shl nuw i32 1, %.0138307.us
  %93 = trunc i32 %92 to i16
  %94 = select i1 %.not223.us, i16 0, i16 %93
  %95 = or i16 %94, %.0139306.us
  %96 = load i8, ptr %spec.select236.us, align 1, !tbaa !9
  %97 = and i8 %96, %spec.select237.us
  %98 = shl i8 %spec.select237.us, 1
  %.not222.us.1 = icmp eq i8 %98, 0
  %spec.select236.idx.us.1 = zext i1 %.not222.us.1 to i64
  %spec.select236.us.1 = getelementptr inbounds i8, ptr %spec.select236.us, i64 %spec.select236.idx.us.1
  %spec.select237.us.1 = tail call i8 @llvm.umax.i8(i8 %98, i8 1)
  %.not223.us.1 = icmp eq i8 %97, 0
  %99 = shl nuw i32 2, %.0138307.us
  %100 = trunc i32 %99 to i16
  %101 = select i1 %.not223.us.1, i16 0, i16 %100
  %102 = or i16 %101, %95
  %103 = add nuw i32 %.0138307.us, 2
  %niter426.next.1 = add i32 %niter426, 2
  %niter426.ncmp.1 = icmp eq i32 %niter426.next.1, %unroll_iter425
  br i1 %niter426.ncmp.1, label %._crit_edge.us317.unr-lcssa, label %.preheader273.us.new, !llvm.loop !18

._crit_edge.us317.unr-lcssa:                      ; preds = %.preheader273.us.new, %.preheader273.us
  %spec.select236.us.lcssa.ph = phi ptr [ poison, %.preheader273.us ], [ %spec.select236.us.1, %.preheader273.us.new ]
  %spec.select237.us.lcssa.ph = phi i8 [ poison, %.preheader273.us ], [ %spec.select237.us.1, %.preheader273.us.new ]
  %.lcssa412.ph = phi i16 [ poison, %.preheader273.us ], [ %102, %.preheader273.us.new ]
  %.0138307.us.unr = phi i32 [ 0, %.preheader273.us ], [ %103, %.preheader273.us.new ]
  %.0139306.us.unr = phi i16 [ 0, %.preheader273.us ], [ %102, %.preheader273.us.new ]
  %.7183305.us.unr = phi i8 [ %.6182312.us, %.preheader273.us ], [ %spec.select237.us.1, %.preheader273.us.new ]
  %.7202304.us.unr = phi ptr [ %.6201311.us, %.preheader273.us ], [ %spec.select236.us.1, %.preheader273.us.new ]
  br i1 %lcmp.mod421.not, label %._crit_edge.us317, label %._crit_edge.us317.epilog-lcssa

._crit_edge.us317.epilog-lcssa:                   ; preds = %._crit_edge.us317.unr-lcssa
  %104 = load i8, ptr %.7202304.us.unr, align 1, !tbaa !9
  %105 = and i8 %104, %.7183305.us.unr
  %106 = shl i8 %.7183305.us.unr, 1
  %.not222.us.epil = icmp eq i8 %106, 0
  %spec.select236.idx.us.epil = zext i1 %.not222.us.epil to i64
  %spec.select236.us.epil = getelementptr inbounds i8, ptr %.7202304.us.unr, i64 %spec.select236.idx.us.epil
  %spec.select237.us.epil = tail call i8 @llvm.umax.i8(i8 %106, i8 1)
  %.not223.us.epil = icmp eq i8 %105, 0
  %107 = shl nuw i32 1, %.0138307.us.unr
  %108 = trunc i32 %107 to i16
  %109 = select i1 %.not223.us.epil, i16 0, i16 %108
  %110 = or i16 %109, %.0139306.us.unr
  br label %._crit_edge.us317

._crit_edge.us317:                                ; preds = %._crit_edge.us317.unr-lcssa, %._crit_edge.us317.epilog-lcssa
  %spec.select236.us.lcssa = phi ptr [ %spec.select236.us.lcssa.ph, %._crit_edge.us317.unr-lcssa ], [ %spec.select236.us.epil, %._crit_edge.us317.epilog-lcssa ]
  %spec.select237.us.lcssa = phi i8 [ %spec.select237.us.lcssa.ph, %._crit_edge.us317.unr-lcssa ], [ %spec.select237.us.epil, %._crit_edge.us317.epilog-lcssa ]
  %.lcssa412 = phi i16 [ %.lcssa412.ph, %._crit_edge.us317.unr-lcssa ], [ %110, %._crit_edge.us317.epilog-lcssa ]
  br i1 %69, label %79, label %77

111:                                              ; preds = %7
  %112 = load ptr, ptr %2, align 8, !tbaa !5
  %.not217.not287.not = icmp eq i32 %5, 0
  br i1 %.not217.not287.not, label %.critedge.sink.split, label %.preheader274.lr.ph

.preheader274.lr.ph:                              ; preds = %111
  %.not = icmp eq i32 %4, 0
  %113 = icmp eq i32 %4, 1
  br i1 %.not, label %.preheader274.preheader, label %.preheader274.us.preheader

.preheader274.us.preheader:                       ; preds = %.preheader274.lr.ph
  %xtraiter = and i32 %4, 1
  %114 = icmp eq i32 %4, 1
  %unroll_iter = and i32 %4, -2
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br label %.preheader274.us

.preheader274.preheader:                          ; preds = %.preheader274.lr.ph
  %115 = zext i32 %5 to i64
  %116 = shl nuw nsw i64 %115, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %112, i8 0, i64 %116, i1 false), !tbaa !19
  %117 = add i32 %5, -1
  %118 = zext i32 %117 to i64
  %119 = shl nuw nsw i64 %118, 2
  %120 = getelementptr i8, ptr %112, i64 %119
  %scevgep = getelementptr i8, ptr %120, i64 4
  br label %.critedge.sink.split

.preheader274.us:                                 ; preds = %.preheader274.us.preheader, %130
  %.0136292.us = phi i32 [ %131, %130 ], [ 0, %.preheader274.us.preheader ]
  %.0137291.us = phi ptr [ %.3.ph.us, %130 ], [ %112, %.preheader274.us.preheader ]
  %.6170290.us = phi i32 [ %.8172.ph.us, %130 ], [ %3, %.preheader274.us.preheader ]
  %.9289.us = phi i8 [ %spec.select241.us.lcssa, %130 ], [ %9, %.preheader274.us.preheader ]
  %.9204288.us = phi ptr [ %spec.select240.us.lcssa, %130 ], [ %0, %.preheader274.us.preheader ]
  br i1 %114, label %._crit_edge.us.unr-lcssa, label %.preheader274.us.new

121:                                              ; preds = %._crit_edge.us
  store i32 %.lcssa415, ptr %.0137291.us, align 4, !tbaa !19
  %122 = getelementptr inbounds i8, ptr %.0137291.us, i64 4
  br label %130

123:                                              ; preds = %._crit_edge.us
  %.not.us = icmp eq i32 %.lcssa415, 0
  br i1 %.not.us, label %128, label %124

124:                                              ; preds = %123
  %125 = icmp eq i32 %.6170290.us, -1
  br i1 %125, label %.critedge, label %126

126:                                              ; preds = %124
  store i32 %.6170290.us, ptr %.0137291.us, align 4, !tbaa !19
  %127 = getelementptr inbounds i8, ptr %.0137291.us, i64 4
  br label %128

128:                                              ; preds = %126, %123
  %.1.us = phi ptr [ %127, %126 ], [ %.0137291.us, %123 ]
  %129 = add i32 %.6170290.us, 1
  br label %130

130:                                              ; preds = %128, %121
  %.8172.ph.us = phi i32 [ %.6170290.us, %121 ], [ %129, %128 ]
  %.3.ph.us = phi ptr [ %122, %121 ], [ %.1.us, %128 ]
  %131 = add nuw i32 %.0136292.us, 1
  %exitcond379.not = icmp eq i32 %131, %5
  br i1 %exitcond379.not, label %.critedge.sink.split, label %.preheader274.us, !llvm.loop !21

.preheader274.us.new:                             ; preds = %.preheader274.us, %.preheader274.us.new
  %.0284.us = phi i32 [ %144, %.preheader274.us.new ], [ 0, %.preheader274.us ]
  %.0135283.us = phi i32 [ %143, %.preheader274.us.new ], [ 0, %.preheader274.us ]
  %.10282.us = phi i8 [ %spec.select241.us.1, %.preheader274.us.new ], [ %.9289.us, %.preheader274.us ]
  %.10205281.us = phi ptr [ %spec.select240.us.1, %.preheader274.us.new ], [ %.9204288.us, %.preheader274.us ]
  %niter = phi i32 [ %niter.next.1, %.preheader274.us.new ], [ 0, %.preheader274.us ]
  %132 = load i8, ptr %.10205281.us, align 1, !tbaa !9
  %133 = and i8 %132, %.10282.us
  %134 = shl i8 %.10282.us, 1
  %.not218.us = icmp eq i8 %134, 0
  %spec.select240.idx.us = zext i1 %.not218.us to i64
  %spec.select240.us = getelementptr inbounds i8, ptr %.10205281.us, i64 %spec.select240.idx.us
  %spec.select241.us = tail call i8 @llvm.umax.i8(i8 %134, i8 1)
  %.not219.us = icmp eq i8 %133, 0
  %135 = shl nuw i32 1, %.0284.us
  %136 = select i1 %.not219.us, i32 0, i32 %135
  %137 = or i32 %136, %.0135283.us
  %138 = load i8, ptr %spec.select240.us, align 1, !tbaa !9
  %139 = and i8 %138, %spec.select241.us
  %140 = shl i8 %spec.select241.us, 1
  %.not218.us.1 = icmp eq i8 %140, 0
  %spec.select240.idx.us.1 = zext i1 %.not218.us.1 to i64
  %spec.select240.us.1 = getelementptr inbounds i8, ptr %spec.select240.us, i64 %spec.select240.idx.us.1
  %spec.select241.us.1 = tail call i8 @llvm.umax.i8(i8 %140, i8 1)
  %.not219.us.1 = icmp eq i8 %139, 0
  %141 = shl nuw i32 2, %.0284.us
  %142 = select i1 %.not219.us.1, i32 0, i32 %141
  %143 = or i32 %142, %137
  %144 = add nuw i32 %.0284.us, 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.us.unr-lcssa, label %.preheader274.us.new, !llvm.loop !22

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader274.us.new, %.preheader274.us
  %spec.select240.us.lcssa.ph = phi ptr [ poison, %.preheader274.us ], [ %spec.select240.us.1, %.preheader274.us.new ]
  %spec.select241.us.lcssa.ph = phi i8 [ poison, %.preheader274.us ], [ %spec.select241.us.1, %.preheader274.us.new ]
  %.lcssa415.ph = phi i32 [ poison, %.preheader274.us ], [ %143, %.preheader274.us.new ]
  %.0284.us.unr = phi i32 [ 0, %.preheader274.us ], [ %144, %.preheader274.us.new ]
  %.0135283.us.unr = phi i32 [ 0, %.preheader274.us ], [ %143, %.preheader274.us.new ]
  %.10282.us.unr = phi i8 [ %.9289.us, %.preheader274.us ], [ %spec.select241.us.1, %.preheader274.us.new ]
  %.10205281.us.unr = phi ptr [ %.9204288.us, %.preheader274.us ], [ %spec.select240.us.1, %.preheader274.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %145 = load i8, ptr %.10205281.us.unr, align 1, !tbaa !9
  %146 = and i8 %145, %.10282.us.unr
  %147 = shl i8 %.10282.us.unr, 1
  %.not218.us.epil = icmp eq i8 %147, 0
  %spec.select240.idx.us.epil = zext i1 %.not218.us.epil to i64
  %spec.select240.us.epil = getelementptr inbounds i8, ptr %.10205281.us.unr, i64 %spec.select240.idx.us.epil
  %spec.select241.us.epil = tail call i8 @llvm.umax.i8(i8 %147, i8 1)
  %.not219.us.epil = icmp eq i8 %146, 0
  %148 = shl nuw i32 1, %.0284.us.unr
  %149 = select i1 %.not219.us.epil, i32 0, i32 %148
  %150 = or i32 %149, %.0135283.us.unr
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %spec.select240.us.lcssa = phi ptr [ %spec.select240.us.lcssa.ph, %._crit_edge.us.unr-lcssa ], [ %spec.select240.us.epil, %._crit_edge.us.epilog-lcssa ]
  %spec.select241.us.lcssa = phi i8 [ %spec.select241.us.lcssa.ph, %._crit_edge.us.unr-lcssa ], [ %spec.select241.us.epil, %._crit_edge.us.epilog-lcssa ]
  %.lcssa415 = phi i32 [ %.lcssa415.ph, %._crit_edge.us.unr-lcssa ], [ %150, %._crit_edge.us.epilog-lcssa ]
  br i1 %113, label %123, label %121

.critedge.sink.split:                             ; preds = %130, %87, %65, %111, %.preheader274.preheader, %67, %.preheader273.preheader, %30, %24
  %.sink = phi ptr [ %29, %24 ], [ %31, %30 ], [ %68, %67 ], [ %scevgep382, %.preheader273.preheader ], [ %112, %111 ], [ %scevgep, %.preheader274.preheader ], [ %.3152.ph, %65 ], [ %.3144.ph.us, %87 ], [ %.3.ph.us, %130 ]
  store ptr %.sink, ptr %2, align 8, !tbaa !5
  br label %.critedge

.critedge:                                        ; preds = %124, %80, %57, %.critedge.sink.split, %10, %._crit_edge361, %7
  %.9194 = phi i32 [ 0, %7 ], [ 0, %._crit_edge361 ], [ 0, %10 ], [ 0, %.critedge.sink.split ], [ 221, %57 ], [ 221, %80 ], [ 221, %124 ]
  ret i32 %.9194
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i8 @llvm.umax.i8(i8, i8) #1

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

attributes #0 = { nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) 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 speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }

!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 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11}
!13 = distinct !{!13, !11}
!14 = distinct !{!14, !11}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = distinct !{!17, !11}
!18 = distinct !{!18, !11}
!19 = !{!20, !20, i64 0}
!20 = !{!"int", !7, i64 0}
!21 = distinct !{!21, !11}
!22 = distinct !{!22, !11}


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