; LLVM IR from Voultapher/sort-research-rs :: src/cpp/thirdparty/scandum (bench)

; 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
declare dso_local void @quad_swap_four16(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local void @parity_merge16(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) #1

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

34:                                               ; preds = %3
  %35 = load ptr, ptr %4, align 8, !tbaa !5
  %36 = getelementptr inbounds i16, ptr %35, i64 7
  %37 = load i16, ptr %36, align 2, !tbaa !9
  %38 = sext i16 %37 to i32
  %39 = load ptr, ptr %4, align 8, !tbaa !5
  %40 = getelementptr inbounds i16, ptr %39, i64 8
  %41 = load i16, ptr %40, align 2, !tbaa !9
  %42 = sext i16 %41 to i32
  %43 = icmp sgt i32 %38, %42
  %44 = zext i1 %43 to i32
  %45 = icmp sle i32 %44, 0
  br i1 %45, label %46, label %59

46:                                               ; preds = %34
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = getelementptr inbounds i16, ptr %47, i64 11
  %49 = load i16, ptr %48, align 2, !tbaa !9
  %50 = sext i16 %49 to i32
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds i16, ptr %51, i64 12
  %53 = load i16, ptr %52, align 2, !tbaa !9
  %54 = sext i16 %53 to i32
  %55 = icmp sgt i32 %50, %54
  %56 = zext i1 %55 to i32
  %57 = icmp sle i32 %56, 0
  br i1 %57, label %58, label %59

58:                                               ; preds = %46
  store i32 1, ptr %10, align 4
  br label %469

59:                                               ; preds = %46, %34, %3
  %60 = load ptr, ptr %4, align 8, !tbaa !5
  %61 = getelementptr inbounds i16, ptr %60, i64 0
  %62 = getelementptr inbounds i16, ptr %61, i64 0
  store ptr %62, ptr %7, align 8, !tbaa !5
  %63 = load ptr, ptr %4, align 8, !tbaa !5
  %64 = getelementptr inbounds i16, ptr %63, i64 0
  %65 = getelementptr inbounds i16, ptr %64, i64 4
  store ptr %65, ptr %8, align 8, !tbaa !5
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = getelementptr inbounds i16, ptr %66, i64 0
  store ptr %67, ptr %9, align 8, !tbaa !5
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  %69 = load i16, ptr %68, align 2, !tbaa !9
  %70 = sext i16 %69 to i32
  %71 = load ptr, ptr %8, align 8, !tbaa !5
  %72 = load i16, ptr %71, align 2, !tbaa !9
  %73 = sext i16 %72 to i32
  %74 = icmp sgt i32 %70, %73
  %75 = zext i1 %74 to i32
  %76 = icmp sle i32 %75, 0
  br i1 %76, label %77, label %82

77:                                               ; preds = %59
  %78 = load ptr, ptr %7, align 8, !tbaa !5
  %79 = getelementptr inbounds i16, ptr %78, i32 1
  store ptr %79, ptr %7, align 8, !tbaa !5
  %80 = load i16, ptr %78, align 2, !tbaa !9
  %81 = sext i16 %80 to i32
  br label %87

82:                                               ; preds = %59
  %83 = load ptr, ptr %8, align 8, !tbaa !5
  %84 = getelementptr inbounds i16, ptr %83, i32 1
  store ptr %84, ptr %8, align 8, !tbaa !5
  %85 = load i16, ptr %83, align 2, !tbaa !9
  %86 = sext i16 %85 to i32
  br label %87

87:                                               ; preds = %82, %77
  %88 = phi i32 [ %81, %77 ], [ %86, %82 ]
  %89 = trunc i32 %88 to i16
  %90 = load ptr, ptr %9, align 8, !tbaa !5
  %91 = getelementptr inbounds i16, ptr %90, i32 1
  store ptr %91, ptr %9, align 8, !tbaa !5
  store i16 %89, ptr %90, align 2, !tbaa !9
  %92 = load ptr, ptr %7, align 8, !tbaa !5
  %93 = load i16, ptr %92, align 2, !tbaa !9
  %94 = sext i16 %93 to i32
  %95 = load ptr, ptr %8, align 8, !tbaa !5
  %96 = load i16, ptr %95, align 2, !tbaa !9
  %97 = sext i16 %96 to i32
  %98 = icmp sgt i32 %94, %97
  %99 = zext i1 %98 to i32
  %100 = icmp sle i32 %99, 0
  br i1 %100, label %101, label %106

101:                                              ; preds = %87
  %102 = load ptr, ptr %7, align 8, !tbaa !5
  %103 = getelementptr inbounds i16, ptr %102, i32 1
  store ptr %103, ptr %7, align 8, !tbaa !5
  %104 = load i16, ptr %102, align 2, !tbaa !9
  %105 = sext i16 %104 to i32
  br label %111

106:                                              ; preds = %87
  %107 = load ptr, ptr %8, align 8, !tbaa !5
  %108 = getelementptr inbounds i16, ptr %107, i32 1
  store ptr %108, ptr %8, align 8, !tbaa !5
  %109 = load i16, ptr %107, align 2, !tbaa !9
  %110 = sext i16 %109 to i32
  br label %111

111:                                              ; preds = %106, %101
  %112 = phi i32 [ %105, %101 ], [ %110, %106 ]
  %113 = trunc i32 %112 to i16
  %114 = load ptr, ptr %9, align 8, !tbaa !5
  %115 = getelementptr inbounds i16, ptr %114, i32 1
  store ptr %115, ptr %9, align 8, !tbaa !5
  store i16 %113, ptr %114, align 2, !tbaa !9
  %116 = load ptr, ptr %7, align 8, !tbaa !5
  %117 = load i16, ptr %116, align 2, !tbaa !9
  %118 = sext i16 %117 to i32
  %119 = load ptr, ptr %8, align 8, !tbaa !5
  %120 = load i16, ptr %119, align 2, !tbaa !9
  %121 = sext i16 %120 to i32
  %122 = icmp sgt i32 %118, %121
  %123 = zext i1 %122 to i32
  %124 = icmp sle i32 %123, 0
  br i1 %124, label %125, label %130

125:                                              ; preds = %111
  %126 = load ptr, ptr %7, align 8, !tbaa !5
  %127 = getelementptr inbounds i16, ptr %126, i32 1
  store ptr %127, ptr %7, align 8, !tbaa !5
  %128 = load i16, ptr %126, align 2, !tbaa !9
  %129 = sext i16 %128 to i32
  br label %135

130:                                              ; preds = %111
  %131 = load ptr, ptr %8, align 8, !tbaa !5
  %132 = getelementptr inbounds i16, ptr %131, i32 1
  store ptr %132, ptr %8, align 8, !tbaa !5
  %133 = load i16, ptr %131, align 2, !tbaa !9
  %134 = sext i16 %133 to i32
  br label %135

135:                                              ; preds = %130, %125
  %136 = phi i32 [ %129, %125 ], [ %134, %130 ]
  %137 = trunc i32 %136 to i16
  %138 = load ptr, ptr %9, align 8, !tbaa !5
  %139 = getelementptr inbounds i16, ptr %138, i32 1
  store ptr %139, ptr %9, align 8, !tbaa !5
  store i16 %137, ptr %138, align 2, !tbaa !9
  %140 = load ptr, ptr %7, align 8, !tbaa !5
  %141 = load i16, ptr %140, align 2, !tbaa !9
  %142 = sext i16 %141 to i32
  %143 = load ptr, ptr %8, align 8, !tbaa !5
  %144 = load i16, ptr %143, align 2, !tbaa !9
  %145 = sext i16 %144 to i32
  %146 = icmp sgt i32 %142, %145
  %147 = zext i1 %146 to i32
  %148 = icmp sle i32 %147, 0
  br i1 %148, label %149, label %153

149:                                              ; preds = %135
  %150 = load ptr, ptr %7, align 8, !tbaa !5
  %151 = load i16, ptr %150, align 2, !tbaa !9
  %152 = sext i16 %151 to i32
  br label %157

153:                                              ; preds = %135
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = load i16, ptr %154, align 2, !tbaa !9
  %156 = sext i16 %155 to i32
  br label %157

157:                                              ; preds = %153, %149
  %158 = phi i32 [ %152, %149 ], [ %156, %153 ]
  %159 = trunc i32 %158 to i16
  %160 = load ptr, ptr %9, align 8, !tbaa !5
  store i16 %159, ptr %160, align 2, !tbaa !9
  %161 = load ptr, ptr %4, align 8, !tbaa !5
  %162 = getelementptr inbounds i16, ptr %161, i64 0
  %163 = getelementptr inbounds i16, ptr %162, i64 3
  store ptr %163, ptr %7, align 8, !tbaa !5
  %164 = load ptr, ptr %4, align 8, !tbaa !5
  %165 = getelementptr inbounds i16, ptr %164, i64 0
  %166 = getelementptr inbounds i16, ptr %165, i64 7
  store ptr %166, ptr %8, align 8, !tbaa !5
  %167 = load ptr, ptr %5, align 8, !tbaa !5
  %168 = getelementptr inbounds i16, ptr %167, i64 0
  %169 = getelementptr inbounds i16, ptr %168, i64 7
  store ptr %169, ptr %9, align 8, !tbaa !5
  %170 = load ptr, ptr %7, align 8, !tbaa !5
  %171 = load i16, ptr %170, align 2, !tbaa !9
  %172 = sext i16 %171 to i32
  %173 = load ptr, ptr %8, align 8, !tbaa !5
  %174 = load i16, ptr %173, align 2, !tbaa !9
  %175 = sext i16 %174 to i32
  %176 = icmp sgt i32 %172, %175
  %177 = zext i1 %176 to i32
  %178 = icmp sgt i32 %177, 0
  br i1 %178, label %179, label %184

179:                                              ; preds = %157
  %180 = load ptr, ptr %7, align 8, !tbaa !5
  %181 = getelementptr inbounds i16, ptr %180, i32 -1
  store ptr %181, ptr %7, align 8, !tbaa !5
  %182 = load i16, ptr %180, align 2, !tbaa !9
  %183 = sext i16 %182 to i32
  br label %189

184:                                              ; preds = %157
  %185 = load ptr, ptr %8, align 8, !tbaa !5
  %186 = getelementptr inbounds i16, ptr %185, i32 -1
  store ptr %186, ptr %8, align 8, !tbaa !5
  %187 = load i16, ptr %185, align 2, !tbaa !9
  %188 = sext i16 %187 to i32
  br label %189

189:                                              ; preds = %184, %179
  %190 = phi i32 [ %183, %179 ], [ %188, %184 ]
  %191 = trunc i32 %190 to i16
  %192 = load ptr, ptr %9, align 8, !tbaa !5
  %193 = getelementptr inbounds i16, ptr %192, i32 -1
  store ptr %193, ptr %9, align 8, !tbaa !5
  store i16 %191, ptr %192, align 2, !tbaa !9
  %194 = load ptr, ptr %7, align 8, !tbaa !5
  %195 = load i16, ptr %194, align 2, !tbaa !9
  %196 = sext i16 %195 to i32
  %197 = load ptr, ptr %8, align 8, !tbaa !5
  %198 = load i16, ptr %197, align 2, !tbaa !9
  %199 = sext i16 %198 to i32
  %200 = icmp sgt i32 %196, %199
  %201 = zext i1 %200 to i32
  %202 = icmp sgt i32 %201, 0
  br i1 %202, label %203, label %208

203:                                              ; preds = %189
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = getelementptr inbounds i16, ptr %204, i32 -1
  store ptr %205, ptr %7, align 8, !tbaa !5
  %206 = load i16, ptr %204, align 2, !tbaa !9
  %207 = sext i16 %206 to i32
  br label %213

208:                                              ; preds = %189
  %209 = load ptr, ptr %8, align 8, !tbaa !5
  %210 = getelementptr inbounds i16, ptr %209, i32 -1
  store ptr %210, ptr %8, align 8, !tbaa !5
  %211 = load i16, ptr %209, align 2, !tbaa !9
  %212 = sext i16 %211 to i32
  br label %213

213:                                              ; preds = %208, %203
  %214 = phi i32 [ %207, %203 ], [ %212, %208 ]
  %215 = trunc i32 %214 to i16
  %216 = load ptr, ptr %9, align 8, !tbaa !5
  %217 = getelementptr inbounds i16, ptr %216, i32 -1
  store ptr %217, ptr %9, align 8, !tbaa !5
  store i16 %215, ptr %216, align 2, !tbaa !9
  %218 = load ptr, ptr %7, align 8, !tbaa !5
  %219 = load i16, ptr %218, align 2, !tbaa !9
  %220 = sext i16 %219 to i32
  %221 = load ptr, ptr %8, align 8, !tbaa !5
  %222 = load i16, ptr %221, align 2, !tbaa !9
  %223 = sext i16 %222 to i32
  %224 = icmp sgt i32 %220, %223
  %225 = zext i1 %224 to i32
  %226 = icmp sgt i32 %225, 0
  br i1 %226, label %227, label %232

227:                                              ; preds = %213
  %228 = load ptr, ptr %7, align 8, !tbaa !5
  %229 = getelementptr inbounds i16, ptr %228, i32 -1
  store ptr %229, ptr %7, align 8, !tbaa !5
  %230 = load i16, ptr %228, align 2, !tbaa !9
  %231 = sext i16 %230 to i32
  br label %237

232:                                              ; preds = %213
  %233 = load ptr, ptr %8, align 8, !tbaa !5
  %234 = getelementptr inbounds i16, ptr %233, i32 -1
  store ptr %234, ptr %8, align 8, !tbaa !5
  %235 = load i16, ptr %233, align 2, !tbaa !9
  %236 = sext i16 %235 to i32
  br label %237

237:                                              ; preds = %232, %227
  %238 = phi i32 [ %231, %227 ], [ %236, %232 ]
  %239 = trunc i32 %238 to i16
  %240 = load ptr, ptr %9, align 8, !tbaa !5
  %241 = getelementptr inbounds i16, ptr %240, i32 -1
  store ptr %241, ptr %9, align 8, !tbaa !5
  store i16 %239, ptr %240, align 2, !tbaa !9
  %242 = load ptr, ptr %7, align 8, !tbaa !5
  %243 = load i16, ptr %242, align 2, !tbaa !9
  %244 = sext i16 %243 to i32
  %245 = load ptr, ptr %8, align 8, !tbaa !5
  %246 = load i16, ptr %245, align 2, !tbaa !9
  %247 = sext i16 %246 to i32
  %248 = icmp sgt i32 %244, %247
  %249 = zext i1 %248 to i32
  %250 = icmp sgt i32 %249, 0
  br i1 %250, label %251, label %255

251:                                              ; preds = %237
  %252 = load ptr, ptr %7, align 8, !tbaa !5
  %253 = load i16, ptr %252, align 2, !tbaa !9
  %254 = sext i16 %253 to i32
  br label %259

255:                                              ; preds = %237
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = load i16, ptr %256, align 2, !tbaa !9
  %258 = sext i16 %257 to i32
  br label %259

259:                                              ; preds = %255, %251
  %260 = phi i32 [ %254, %251 ], [ %258, %255 ]
  %261 = trunc i32 %260 to i16
  %262 = load ptr, ptr %9, align 8, !tbaa !5
  store i16 %261, ptr %262, align 2, !tbaa !9
  %263 = load ptr, ptr %4, align 8, !tbaa !5
  %264 = getelementptr inbounds i16, ptr %263, i64 8
  %265 = getelementptr inbounds i16, ptr %264, i64 0
  store ptr %265, ptr %7, align 8, !tbaa !5
  %266 = load ptr, ptr %4, align 8, !tbaa !5
  %267 = getelementptr inbounds i16, ptr %266, i64 8
  %268 = getelementptr inbounds i16, ptr %267, i64 4
  store ptr %268, ptr %8, align 8, !tbaa !5
  %269 = load ptr, ptr %5, align 8, !tbaa !5
  %270 = getelementptr inbounds i16, ptr %269, i64 8
  store ptr %270, ptr %9, align 8, !tbaa !5
  %271 = load ptr, ptr %7, align 8, !tbaa !5
  %272 = load i16, ptr %271, align 2, !tbaa !9
  %273 = sext i16 %272 to i32
  %274 = load ptr, ptr %8, align 8, !tbaa !5
  %275 = load i16, ptr %274, align 2, !tbaa !9
  %276 = sext i16 %275 to i32
  %277 = icmp sgt i32 %273, %276
  %278 = zext i1 %277 to i32
  %279 = icmp sle i32 %278, 0
  br i1 %279, label %280, label %285

280:                                              ; preds = %259
  %281 = load ptr, ptr %7, align 8, !tbaa !5
  %282 = getelementptr inbounds i16, ptr %281, i32 1
  store ptr %282, ptr %7, align 8, !tbaa !5
  %283 = load i16, ptr %281, align 2, !tbaa !9
  %284 = sext i16 %283 to i32
  br label %290

285:                                              ; preds = %259
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds i16, ptr %286, i32 1
  store ptr %287, ptr %8, align 8, !tbaa !5
  %288 = load i16, ptr %286, align 2, !tbaa !9
  %289 = sext i16 %288 to i32
  br label %290

290:                                              ; preds = %285, %280
  %291 = phi i32 [ %284, %280 ], [ %289, %285 ]
  %292 = trunc i32 %291 to i16
  %293 = load ptr, ptr %9, align 8, !tbaa !5
  %294 = getelementptr inbounds i16, ptr %293, i32 1
  store ptr %294, ptr %9, align 8, !tbaa !5
  store i16 %292, ptr %293, align 2, !tbaa !9
  %295 = load ptr, ptr %7, align 8, !tbaa !5
  %296 = load i16, ptr %295, align 2, !tbaa !9
  %297 = sext i16 %296 to i32
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = load i16, ptr %298, align 2, !tbaa !9
  %300 = sext i16 %299 to i32
  %301 = icmp sgt i32 %297, %300
  %302 = zext i1 %301 to i32
  %303 = icmp sle i32 %302, 0
  br i1 %303, label %304, label %309

304:                                              ; preds = %290
  %305 = load ptr, ptr %7, align 8, !tbaa !5
  %306 = getelementptr inbounds i16, ptr %305, i32 1
  store ptr %306, ptr %7, align 8, !tbaa !5
  %307 = load i16, ptr %305, align 2, !tbaa !9
  %308 = sext i16 %307 to i32
  br label %314

309:                                              ; preds = %290
  %310 = load ptr, ptr %8, align 8, !tbaa !5
  %311 = getelementptr inbounds i16, ptr %310, i32 1
  store ptr %311, ptr %8, align 8, !tbaa !5
  %312 = load i16, ptr %310, align 2, !tbaa !9
  %313 = sext i16 %312 to i32
  br label %314

314:                                              ; preds = %309, %304
  %315 = phi i32 [ %308, %304 ], [ %313, %309 ]
  %316 = trunc i32 %315 to i16
  %317 = load ptr, ptr %9, align 8, !tbaa !5
  %318 = getelementptr inbounds i16, ptr %317, i32 1
  store ptr %318, ptr %9, align 8, !tbaa !5
  store i16 %316, ptr %317, align 2, !tbaa !9
  %319 = load ptr, ptr %7, align 8, !tbaa !5
  %320 = load i16, ptr %319, align 2, !tbaa !9
  %321 = sext i16 %320 to i32
  %322 = load ptr, ptr %8, align 8, !tbaa !5
  %323 = load i16, ptr %322, align 2, !tbaa !9
  %324 = sext i16 %323 to i32
  %325 = icmp sgt i32 %321, %324
  %326 = zext i1 %325 to i32
  %327 = icmp sle i32 %326, 0
  br i1 %327, label %328, label %333

328:                                              ; preds = %314
  %329 = load ptr, ptr %7, align 8, !tbaa !5
  %330 = getelementptr inbounds i16, ptr %329, i32 1
  store ptr %330, ptr %7, align 8, !tbaa !5
  %331 = load i16, ptr %329, align 2, !tbaa !9
  %332 = sext i16 %331 to i32
  br label %338

333:                                              ; preds = %314
  %334 = load ptr, ptr %8, align 8, !tbaa !5
  %335 = getelementptr inbounds i16, ptr %334, i32 1
  store ptr %335, ptr %8, align 8, !tbaa !5
  %336 = load i16, ptr %334, align 2, !tbaa !9
  %337 = sext i16 %336 to i32
  br label %338

338:                                              ; preds = %333, %328
  %339 = phi i32 [ %332, %328 ], [ %337, %333 ]
  %340 = trunc i32 %339 to i16
  %341 = load ptr, ptr %9, align 8, !tbaa !5
  %342 = getelementptr inbounds i16, ptr %341, i32 1
  store ptr %342, ptr %9, align 8, !tbaa !5
  store i16 %340, ptr %341, align 2, !tbaa !9
  %343 = load ptr, ptr %7, align 8, !tbaa !5
  %344 = load i16, ptr %343, align 2, !tbaa !9
  %345 = sext i16 %344 to i32
  %346 = load ptr, ptr %8, align 8, !tbaa !5
  %347 = load i16, ptr %346, align 2, !tbaa !9
  %348 = sext i16 %347 to i32
  %349 = icmp sgt i32 %345, %348
  %350 = zext i1 %349 to i32
  %351 = icmp sle i32 %350, 0
  br i1 %351, label %352, label %356

352:                                              ; preds = %338
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  %354 = load i16, ptr %353, align 2, !tbaa !9
  %355 = sext i16 %354 to i32
  br label %360

356:                                              ; preds = %338
  %357 = load ptr, ptr %8, align 8, !tbaa !5
  %358 = load i16, ptr %357, align 2, !tbaa !9
  %359 = sext i16 %358 to i32
  br label %360

360:                                              ; preds = %356, %352
  %361 = phi i32 [ %355, %352 ], [ %359, %356 ]
  %362 = trunc i32 %361 to i16
  %363 = load ptr, ptr %9, align 8, !tbaa !5
  store i16 %362, ptr %363, align 2, !tbaa !9
  %364 = load ptr, ptr %4, align 8, !tbaa !5
  %365 = getelementptr inbounds i16, ptr %364, i64 8
  %366 = getelementptr inbounds i16, ptr %365, i64 3
  store ptr %366, ptr %7, align 8, !tbaa !5
  %367 = load ptr, ptr %4, align 8, !tbaa !5
  %368 = getelementptr inbounds i16, ptr %367, i64 8
  %369 = getelementptr inbounds i16, ptr %368, i64 7
  store ptr %369, ptr %8, align 8, !tbaa !5
  %370 = load ptr, ptr %5, align 8, !tbaa !5
  %371 = getelementptr inbounds i16, ptr %370, i64 8
  %372 = getelementptr inbounds i16, ptr %371, i64 7
  store ptr %372, ptr %9, align 8, !tbaa !5
  %373 = load ptr, ptr %7, align 8, !tbaa !5
  %374 = load i16, ptr %373, align 2, !tbaa !9
  %375 = sext i16 %374 to i32
  %376 = load ptr, ptr %8, align 8, !tbaa !5
  %377 = load i16, ptr %376, align 2, !tbaa !9
  %378 = sext i16 %377 to i32
  %379 = icmp sgt i32 %375, %378
  %380 = zext i1 %379 to i32
  %381 = icmp sgt i32 %380, 0
  br i1 %381, label %382, label %387

382:                                              ; preds = %360
  %383 = load ptr, ptr %7, align 8, !tbaa !5
  %384 = getelementptr inbounds i16, ptr %383, i32 -1
  store ptr %384, ptr %7, align 8, !tbaa !5
  %385 = load i16, ptr %383, align 2, !tbaa !9
  %386 = sext i16 %385 to i32
  br label %392

387:                                              ; preds = %360
  %388 = load ptr, ptr %8, align 8, !tbaa !5
  %389 = getelementptr inbounds i16, ptr %388, i32 -1
  store ptr %389, ptr %8, align 8, !tbaa !5
  %390 = load i16, ptr %388, align 2, !tbaa !9
  %391 = sext i16 %390 to i32
  br label %392

392:                                              ; preds = %387, %382
  %393 = phi i32 [ %386, %382 ], [ %391, %387 ]
  %394 = trunc i32 %393 to i16
  %395 = load ptr, ptr %9, align 8, !tbaa !5
  %396 = getelementptr inbounds i16, ptr %395, i32 -1
  store ptr %396, ptr %9, align 8, !tbaa !5
  store i16 %394, ptr %395, align 2, !tbaa !9
  %397 = load ptr, ptr %7, align 8, !tbaa !5
  %398 = load i16, ptr %397, align 2, !tbaa !9
  %399 = sext i16 %398 to i32
  %400 = load ptr, ptr %8, align 8, !tbaa !5
  %401 = load i16, ptr %400, align 2, !tbaa !9
  %402 = sext i16 %401 to i32
  %403 = icmp sgt i32 %399, %402
  %404 = zext i1 %403 to i32
  %405 = icmp sgt i32 %404, 0
  br i1 %405, label %406, label %411

406:                                              ; preds = %392
  %407 = load ptr, ptr %7, align 8, !tbaa !5
  %408 = getelementptr inbounds i16, ptr %407, i32 -1
  store ptr %408, ptr %7, align 8, !tbaa !5
  %409 = load i16, ptr %407, align 2, !tbaa !9
  %410 = sext i16 %409 to i32
  br label %416

411:                                              ; preds = %392
  %412 = load ptr, ptr %8, align 8, !tbaa !5
  %413 = getelementptr inbounds i16, ptr %412, i32 -1
  store ptr %413, ptr %8, align 8, !tbaa !5
  %414 = load i16, ptr %412, align 2, !tbaa !9
  %415 = sext i16 %414 to i32
  br label %416

416:                                              ; preds = %411, %406
  %417 = phi i32 [ %410, %406 ], [ %415, %411 ]
  %418 = trunc i32 %417 to i16
  %419 = load ptr, ptr %9, align 8, !tbaa !5
  %420 = getelementptr inbounds i16, ptr %419, i32 -1
  store ptr %420, ptr %9, align 8, !tbaa !5
  store i16 %418, ptr %419, align 2, !tbaa !9
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  %422 = load i16, ptr %421, align 2, !tbaa !9
  %423 = sext i16 %422 to i32
  %424 = load ptr, ptr %8, align 8, !tbaa !5
  %425 = load i16, ptr %424, align 2, !tbaa !9
  %426 = sext i16 %425 to i32
  %427 = icmp sgt i32 %423, %426
  %428 = zext i1 %427 to i32
  %429 = icmp sgt i32 %428, 0
  br i1 %429, label %430, label %435

430:                                              ; preds = %416
  %431 = load ptr, ptr %7, align 8, !tbaa !5
  %432 = getelementptr inbounds i16, ptr %431, i32 -1
  store ptr %432, ptr %7, align 8, !tbaa !5
  %433 = load i16, ptr %431, align 2, !tbaa !9
  %434 = sext i16 %433 to i32
  br label %440

435:                                              ; preds = %416
  %436 = load ptr, ptr %8, align 8, !tbaa !5
  %437 = getelementptr inbounds i16, ptr %436, i32 -1
  store ptr %437, ptr %8, align 8, !tbaa !5
  %438 = load i16, ptr %436, align 2, !tbaa !9
  %439 = sext i16 %438 to i32
  br label %440

440:                                              ; preds = %435, %430
  %441 = phi i32 [ %434, %430 ], [ %439, %435 ]
  %442 = trunc i32 %441 to i16
  %443 = load ptr, ptr %9, align 8, !tbaa !5
  %444 = getelementptr inbounds i16, ptr %443, i32 -1
  store ptr %444, ptr %9, align 8, !tbaa !5
  store i16 %442, ptr %443, align 2, !tbaa !9
  %445 = load ptr, ptr %7, align 8, !tbaa !5
  %446 = load i16, ptr %445, align 2, !tbaa !9
  %447 = sext i16 %446 to i32
  %448 = load ptr, ptr %8, align 8, !tbaa !5
  %449 = load i16, ptr %448, align 2, !tbaa !9
  %450 = sext i16 %449 to i32
  %451 = icmp sgt i32 %447, %450
  %452 = zext i1 %451 to i32
  %453 = icmp sgt i32 %452, 0
  br i1 %453, label %454, label %458

454:                                              ; preds = %440
  %455 = load ptr, ptr %7, align 8, !tbaa !5
  %456 = load i16, ptr %455, align 2, !tbaa !9
  %457 = sext i16 %456 to i32
  br label %462

458:                                              ; preds = %440
  %459 = load ptr, ptr %8, align 8, !tbaa !5
  %460 = load i16, ptr %459, align 2, !tbaa !9
  %461 = sext i16 %460 to i32
  br label %462

462:                                              ; preds = %458, %454
  %463 = phi i32 [ %457, %454 ], [ %461, %458 ]
  %464 = trunc i32 %463 to i16
  %465 = load ptr, ptr %9, align 8, !tbaa !5
  store i16 %464, ptr %465, align 2, !tbaa !9
  %466 = load ptr, ptr %4, align 8, !tbaa !5
  %467 = load ptr, ptr %5, align 8, !tbaa !5
  %468 = load ptr, ptr %6, align 8, !tbaa !5
  call void @parity_merge16(ptr noundef %466, ptr noundef %467, i64 noundef 8, i64 noundef 8, ptr noundef %468)
  store i32 0, ptr %10, align 4
  br label %469

469:                                              ; preds = %462, %58
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #2
  %470 = load i32, ptr %10, align 4
  switch i32 %470, label %472 [
    i32 0, label %471
    i32 1, label %471
  ]

471:                                              ; preds = %469, %469
  ret void

472:                                              ; preds = %469
  unreachable
}

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 = !{!"short", !7, 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: nounwind uwtable
declare dso_local void @quad_swap_four16(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @parity_merge16(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @parity_swap_sixteen16(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  tail call void @quad_swap_four16(ptr noundef %0, ptr noundef %2)
  %4 = getelementptr inbounds i8, ptr %0, i64 8
  tail call void @quad_swap_four16(ptr noundef nonnull %4, ptr noundef %2)
  %5 = getelementptr inbounds i8, ptr %0, i64 16
  tail call void @quad_swap_four16(ptr noundef nonnull %5, ptr noundef %2)
  %6 = getelementptr inbounds i8, ptr %0, i64 24
  tail call void @quad_swap_four16(ptr noundef nonnull %6, ptr noundef %2)
  %7 = getelementptr inbounds i8, ptr %0, i64 6
  %8 = load i16, ptr %7, align 2, !tbaa !5
  %9 = load i16, ptr %4, align 2, !tbaa !5
  %10 = icmp sgt i16 %8, %9
  br i1 %10, label %21, label %11

11:                                               ; preds = %3
  %12 = getelementptr inbounds i8, ptr %0, i64 14
  %13 = load i16, ptr %12, align 2, !tbaa !5
  %14 = load i16, ptr %5, align 2, !tbaa !5
  %15 = icmp sgt i16 %13, %14
  br i1 %15, label %21, label %16

16:                                               ; preds = %11
  %17 = getelementptr inbounds i8, ptr %0, i64 22
  %18 = load i16, ptr %17, align 2, !tbaa !5
  %19 = load i16, ptr %6, align 2, !tbaa !5
  %20 = icmp sgt i16 %18, %19
  br i1 %20, label %21, label %90

21:                                               ; preds = %16, %11, %3
  %22 = load i16, ptr %0, align 2, !tbaa !5
  %23 = icmp sgt i16 %22, %9
  %24 = getelementptr inbounds i8, ptr %0, i64 10
  %.0109.idx = select i1 %23, i64 0, i64 2
  %.0109 = getelementptr inbounds i8, ptr %0, i64 %.0109.idx
  %.0 = select i1 %23, ptr %24, ptr %4
  %.in = tail call i16 @llvm.smin.i16(i16 %22, i16 %9)
  %25 = getelementptr inbounds i8, ptr %1, i64 2
  store i16 %.in, ptr %1, align 2, !tbaa !5
  %26 = load i16, ptr %.0109, align 2, !tbaa !5
  %27 = load i16, ptr %.0, align 2, !tbaa !5
  %28 = icmp sgt i16 %26, %27
  %.1110.idx = select i1 %28, i64 0, i64 2
  %.1110 = getelementptr inbounds i8, ptr %.0109, i64 %.1110.idx
  %.1.idx = select i1 %28, i64 2, i64 0
  %.1 = getelementptr inbounds i8, ptr %.0, i64 %.1.idx
  %.in137 = tail call i16 @llvm.smin.i16(i16 %26, i16 %27)
  %29 = getelementptr inbounds i8, ptr %1, i64 4
  store i16 %.in137, ptr %25, align 2, !tbaa !5
  %30 = load i16, ptr %.1110, align 2, !tbaa !5
  %31 = load i16, ptr %.1, align 2, !tbaa !5
  %32 = icmp sgt i16 %30, %31
  %.2111.idx = select i1 %32, i64 0, i64 2
  %.2111 = getelementptr inbounds i8, ptr %.1110, i64 %.2111.idx
  %.2.idx = select i1 %32, i64 2, i64 0
  %.2 = getelementptr inbounds i8, ptr %.1, i64 %.2.idx
  %.in138 = tail call i16 @llvm.smin.i16(i16 %30, i16 %31)
  %33 = getelementptr inbounds i8, ptr %1, i64 6
  store i16 %.in138, ptr %29, align 2, !tbaa !5
  %34 = load i16, ptr %.2111, align 2, !tbaa !5
  %35 = load i16, ptr %.2, align 2, !tbaa !5
  %.in139 = tail call i16 @llvm.smin.i16(i16 %34, i16 %35)
  store i16 %.in139, ptr %33, align 2, !tbaa !5
  %36 = getelementptr inbounds i8, ptr %0, i64 14
  %37 = getelementptr inbounds i8, ptr %1, i64 14
  %38 = load i16, ptr %7, align 2, !tbaa !5
  %39 = load i16, ptr %36, align 2, !tbaa !5
  %40 = icmp sgt i16 %38, %39
  %41 = getelementptr inbounds i8, ptr %0, i64 4
  %42 = getelementptr inbounds i8, ptr %0, i64 12
  %.3112 = select i1 %40, ptr %41, ptr %7
  %.3 = select i1 %40, ptr %36, ptr %42
  %.in140 = tail call i16 @llvm.smax.i16(i16 %38, i16 %39)
  %43 = getelementptr inbounds i8, ptr %1, i64 12
  store i16 %.in140, ptr %37, align 2, !tbaa !5
  %44 = load i16, ptr %.3112, align 2, !tbaa !5
  %45 = load i16, ptr %.3, align 2, !tbaa !5
  %46 = icmp sgt i16 %44, %45
  %.4113.idx = select i1 %46, i64 -2, i64 0
  %.4113 = getelementptr inbounds i8, ptr %.3112, i64 %.4113.idx
  %.4.idx = select i1 %46, i64 0, i64 -2
  %.4 = getelementptr inbounds i8, ptr %.3, i64 %.4.idx
  %.in141 = tail call i16 @llvm.smax.i16(i16 %44, i16 %45)
  %47 = getelementptr inbounds i8, ptr %1, i64 10
  store i16 %.in141, ptr %43, align 2, !tbaa !5
  %48 = load i16, ptr %.4113, align 2, !tbaa !5
  %49 = load i16, ptr %.4, align 2, !tbaa !5
  %50 = icmp sgt i16 %48, %49
  %.5114.idx = select i1 %50, i64 -2, i64 0
  %.5114 = getelementptr inbounds i8, ptr %.4113, i64 %.5114.idx
  %.5.idx = select i1 %50, i64 0, i64 -2
  %.5 = getelementptr inbounds i8, ptr %.4, i64 %.5.idx
  %.in142 = tail call i16 @llvm.smax.i16(i16 %48, i16 %49)
  %51 = getelementptr inbounds i8, ptr %1, i64 8
  store i16 %.in142, ptr %47, align 2, !tbaa !5
  %52 = load i16, ptr %.5114, align 2, !tbaa !5
  %53 = load i16, ptr %.5, align 2, !tbaa !5
  %.in143 = tail call i16 @llvm.smax.i16(i16 %52, i16 %53)
  store i16 %.in143, ptr %51, align 2, !tbaa !5
  %54 = getelementptr inbounds i8, ptr %1, i64 16
  %55 = load i16, ptr %5, align 2, !tbaa !5
  %56 = load i16, ptr %6, align 2, !tbaa !5
  %57 = icmp sgt i16 %55, %56
  %58 = getelementptr inbounds i8, ptr %0, i64 18
  %59 = getelementptr inbounds i8, ptr %0, i64 26
  %.6115 = select i1 %57, ptr %5, ptr %58
  %.6 = select i1 %57, ptr %59, ptr %6
  %.in144 = tail call i16 @llvm.smin.i16(i16 %55, i16 %56)
  %60 = getelementptr inbounds i8, ptr %1, i64 18
  store i16 %.in144, ptr %54, align 2, !tbaa !5
  %61 = load i16, ptr %.6115, align 2, !tbaa !5
  %62 = load i16, ptr %.6, align 2, !tbaa !5
  %63 = icmp sgt i16 %61, %62
  %.7116.idx = select i1 %63, i64 0, i64 2
  %.7116 = getelementptr inbounds i8, ptr %.6115, i64 %.7116.idx
  %.7.idx = select i1 %63, i64 2, i64 0
  %.7 = getelementptr inbounds i8, ptr %.6, i64 %.7.idx
  %.in145 = tail call i16 @llvm.smin.i16(i16 %61, i16 %62)
  %64 = getelementptr inbounds i8, ptr %1, i64 20
  store i16 %.in145, ptr %60, align 2, !tbaa !5
  %65 = load i16, ptr %.7116, align 2, !tbaa !5
  %66 = load i16, ptr %.7, align 2, !tbaa !5
  %67 = icmp sgt i16 %65, %66
  %.8117.idx = select i1 %67, i64 0, i64 2
  %.8117 = getelementptr inbounds i8, ptr %.7116, i64 %.8117.idx
  %.8.idx = select i1 %67, i64 2, i64 0
  %.8 = getelementptr inbounds i8, ptr %.7, i64 %.8.idx
  %.in146 = tail call i16 @llvm.smin.i16(i16 %65, i16 %66)
  %68 = getelementptr inbounds i8, ptr %1, i64 22
  store i16 %.in146, ptr %64, align 2, !tbaa !5
  %69 = load i16, ptr %.8117, align 2, !tbaa !5
  %70 = load i16, ptr %.8, align 2, !tbaa !5
  %.in147 = tail call i16 @llvm.smin.i16(i16 %69, i16 %70)
  store i16 %.in147, ptr %68, align 2, !tbaa !5
  %71 = getelementptr inbounds i8, ptr %0, i64 22
  %72 = getelementptr inbounds i8, ptr %0, i64 30
  %73 = getelementptr inbounds i8, ptr %1, i64 30
  %74 = load i16, ptr %71, align 2, !tbaa !5
  %75 = load i16, ptr %72, align 2, !tbaa !5
  %76 = icmp sgt i16 %74, %75
  %77 = getelementptr inbounds i8, ptr %0, i64 20
  %78 = getelementptr inbounds i8, ptr %0, i64 28
  %.9118 = select i1 %76, ptr %77, ptr %71
  %.9 = select i1 %76, ptr %72, ptr %78
  %.in148 = tail call i16 @llvm.smax.i16(i16 %74, i16 %75)
  %79 = getelementptr inbounds i8, ptr %1, i64 28
  store i16 %.in148, ptr %73, align 2, !tbaa !5
  %80 = load i16, ptr %.9118, align 2, !tbaa !5
  %81 = load i16, ptr %.9, align 2, !tbaa !5
  %82 = icmp sgt i16 %80, %81
  %.10119.idx = select i1 %82, i64 -2, i64 0
  %.10119 = getelementptr inbounds i8, ptr %.9118, i64 %.10119.idx
  %.10.idx = select i1 %82, i64 0, i64 -2
  %.10 = getelementptr inbounds i8, ptr %.9, i64 %.10.idx
  %.in149 = tail call i16 @llvm.smax.i16(i16 %80, i16 %81)
  %83 = getelementptr inbounds i8, ptr %1, i64 26
  store i16 %.in149, ptr %79, align 2, !tbaa !5
  %84 = load i16, ptr %.10119, align 2, !tbaa !5
  %85 = load i16, ptr %.10, align 2, !tbaa !5
  %86 = icmp sgt i16 %84, %85
  %.11120.idx = select i1 %86, i64 -2, i64 0
  %.11120 = getelementptr inbounds i8, ptr %.10119, i64 %.11120.idx
  %.11.idx = select i1 %86, i64 0, i64 -2
  %.11 = getelementptr inbounds i8, ptr %.10, i64 %.11.idx
  %.in150 = tail call i16 @llvm.smax.i16(i16 %84, i16 %85)
  %87 = getelementptr inbounds i8, ptr %1, i64 24
  store i16 %.in150, ptr %83, align 2, !tbaa !5
  %88 = load i16, ptr %.11120, align 2, !tbaa !5
  %89 = load i16, ptr %.11, align 2, !tbaa !5
  %.in151 = tail call i16 @llvm.smax.i16(i16 %88, i16 %89)
  store i16 %.in151, ptr %87, align 2, !tbaa !5
  tail call void @parity_merge16(ptr noundef nonnull %0, ptr noundef nonnull %1, i64 noundef 8, i64 noundef 8, ptr noundef %2)
  br label %90

90:                                               ; preds = %16, %21
  ret void
}

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

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

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

!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 = !{!"short", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,SROAPass,SimplifyCFGPass,TailCallElimPass