; 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: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: nounwind uwtable
define dso_local void @partial_backward_merge16(ptr noundef %0, ptr noundef %1, i64 noundef %2, i64 noundef %3, ptr noundef %4) #2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i64 %2, ptr %8, align 8, !tbaa !9
  store i64 %3, ptr %9, align 8, !tbaa !9
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %18 = load i64, ptr %8, align 8, !tbaa !9
  %19 = load i64, ptr %9, align 8, !tbaa !9
  %20 = icmp eq i64 %18, %19
  br i1 %20, label %21, label %22

21:                                               ; preds = %5
  store i32 1, ptr %17, align 4
  br label %407

22:                                               ; preds = %5
  %23 = load ptr, ptr %6, align 8, !tbaa !5
  %24 = load i64, ptr %9, align 8, !tbaa !9
  %25 = getelementptr inbounds i16, ptr %23, i64 %24
  %26 = getelementptr inbounds i16, ptr %25, i64 -1
  store ptr %26, ptr %11, align 8, !tbaa !5
  %27 = load ptr, ptr %6, align 8, !tbaa !5
  %28 = load i64, ptr %8, align 8, !tbaa !9
  %29 = getelementptr inbounds i16, ptr %27, i64 %28
  %30 = getelementptr inbounds i16, ptr %29, i64 -1
  store ptr %30, ptr %12, align 8, !tbaa !5
  %31 = load ptr, ptr %11, align 8, !tbaa !5
  %32 = load i16, ptr %31, align 2, !tbaa !11
  %33 = sext i16 %32 to i32
  %34 = load ptr, ptr %11, align 8, !tbaa !5
  %35 = getelementptr inbounds i16, ptr %34, i64 1
  %36 = load i16, ptr %35, align 2, !tbaa !11
  %37 = sext i16 %36 to i32
  %38 = icmp sgt i32 %33, %37
  %39 = zext i1 %38 to i32
  %40 = icmp sle i32 %39, 0
  br i1 %40, label %41, label %42

41:                                               ; preds = %22
  store i32 1, ptr %17, align 4
  br label %407

42:                                               ; preds = %22
  %43 = load ptr, ptr %7, align 8, !tbaa !5
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  %45 = load i64, ptr %9, align 8, !tbaa !9
  %46 = getelementptr inbounds i16, ptr %44, i64 %45
  %47 = load i64, ptr %8, align 8, !tbaa !9
  %48 = load i64, ptr %9, align 8, !tbaa !9
  %49 = sub i64 %47, %48
  %50 = mul i64 %49, 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %43, ptr align 2 %46, i64 %50, i1 false)
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  %52 = load i64, ptr %8, align 8, !tbaa !9
  %53 = getelementptr inbounds i16, ptr %51, i64 %52
  %54 = load i64, ptr %9, align 8, !tbaa !9
  %55 = sub i64 0, %54
  %56 = getelementptr inbounds i16, ptr %53, i64 %55
  %57 = getelementptr inbounds i16, ptr %56, i64 -1
  store ptr %57, ptr %13, align 8, !tbaa !5
  br label %58

58:                                               ; preds = %240, %42
  %59 = load ptr, ptr %11, align 8, !tbaa !5
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = getelementptr inbounds i16, ptr %60, i64 32
  %62 = icmp ugt ptr %59, %61
  br i1 %62, label %63, label %68

63:                                               ; preds = %58
  %64 = load ptr, ptr %13, align 8, !tbaa !5
  %65 = load ptr, ptr %7, align 8, !tbaa !5
  %66 = getelementptr inbounds i16, ptr %65, i64 32
  %67 = icmp ugt ptr %64, %66
  br label %68

68:                                               ; preds = %63, %58
  %69 = phi i1 [ false, %58 ], [ %67, %63 ]
  br i1 %69, label %70, label %241

70:                                               ; preds = %68
  br label %71

71:                                               ; preds = %98, %70
  %72 = load ptr, ptr %11, align 8, !tbaa !5
  %73 = load i16, ptr %72, align 2, !tbaa !11
  %74 = sext i16 %73 to i32
  %75 = load ptr, ptr %13, align 8, !tbaa !5
  %76 = getelementptr inbounds i16, ptr %75, i64 -31
  %77 = load i16, ptr %76, align 2, !tbaa !11
  %78 = sext i16 %77 to i32
  %79 = icmp sgt i32 %74, %78
  %80 = zext i1 %79 to i32
  %81 = icmp sle i32 %80, 0
  br i1 %81, label %82, label %100

82:                                               ; preds = %71
  store i64 32, ptr %14, align 8, !tbaa !9
  br label %83

83:                                               ; preds = %89, %82
  %84 = load ptr, ptr %13, align 8, !tbaa !5
  %85 = getelementptr inbounds i16, ptr %84, i32 -1
  store ptr %85, ptr %13, align 8, !tbaa !5
  %86 = load i16, ptr %84, align 2, !tbaa !11
  %87 = load ptr, ptr %12, align 8, !tbaa !5
  %88 = getelementptr inbounds i16, ptr %87, i32 -1
  store ptr %88, ptr %12, align 8, !tbaa !5
  store i16 %86, ptr %87, align 2, !tbaa !11
  br label %89

89:                                               ; preds = %83
  %90 = load i64, ptr %14, align 8, !tbaa !9
  %91 = add i64 %90, -1
  store i64 %91, ptr %14, align 8, !tbaa !9
  %92 = icmp ne i64 %91, 0
  br i1 %92, label %83, label %93, !llvm.loop !13

93:                                               ; preds = %89
  %94 = load ptr, ptr %13, align 8, !tbaa !5
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = getelementptr inbounds i16, ptr %95, i64 32
  %97 = icmp ugt ptr %94, %96
  br i1 %97, label %98, label %99

98:                                               ; preds = %93
  br label %71

99:                                               ; preds = %93
  br label %241

100:                                              ; preds = %71
  br label %101

101:                                              ; preds = %128, %100
  %102 = load ptr, ptr %11, align 8, !tbaa !5
  %103 = getelementptr inbounds i16, ptr %102, i64 -31
  %104 = load i16, ptr %103, align 2, !tbaa !11
  %105 = sext i16 %104 to i32
  %106 = load ptr, ptr %13, align 8, !tbaa !5
  %107 = load i16, ptr %106, align 2, !tbaa !11
  %108 = sext i16 %107 to i32
  %109 = icmp sgt i32 %105, %108
  %110 = zext i1 %109 to i32
  %111 = icmp sgt i32 %110, 0
  br i1 %111, label %112, label %130

112:                                              ; preds = %101
  store i64 32, ptr %14, align 8, !tbaa !9
  br label %113

113:                                              ; preds = %119, %112
  %114 = load ptr, ptr %11, align 8, !tbaa !5
  %115 = getelementptr inbounds i16, ptr %114, i32 -1
  store ptr %115, ptr %11, align 8, !tbaa !5
  %116 = load i16, ptr %114, align 2, !tbaa !11
  %117 = load ptr, ptr %12, align 8, !tbaa !5
  %118 = getelementptr inbounds i16, ptr %117, i32 -1
  store ptr %118, ptr %12, align 8, !tbaa !5
  store i16 %116, ptr %117, align 2, !tbaa !11
  br label %119

119:                                              ; preds = %113
  %120 = load i64, ptr %14, align 8, !tbaa !9
  %121 = add i64 %120, -1
  store i64 %121, ptr %14, align 8, !tbaa !9
  %122 = icmp ne i64 %121, 0
  br i1 %122, label %113, label %123, !llvm.loop !15

123:                                              ; preds = %119
  %124 = load ptr, ptr %11, align 8, !tbaa !5
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds i16, ptr %125, i64 32
  %127 = icmp ugt ptr %124, %126
  br i1 %127, label %128, label %129

128:                                              ; preds = %123
  br label %101

129:                                              ; preds = %123
  br label %241

130:                                              ; preds = %101
  store i64 16, ptr %14, align 8, !tbaa !9
  br label %131

131:                                              ; preds = %236, %130
  %132 = load ptr, ptr %11, align 8, !tbaa !5
  %133 = load i16, ptr %132, align 2, !tbaa !11
  %134 = sext i16 %133 to i32
  %135 = load ptr, ptr %13, align 8, !tbaa !5
  %136 = getelementptr inbounds i16, ptr %135, i64 -1
  %137 = load i16, ptr %136, align 2, !tbaa !11
  %138 = sext i16 %137 to i32
  %139 = icmp sgt i32 %134, %138
  %140 = zext i1 %139 to i32
  %141 = icmp sle i32 %140, 0
  br i1 %141, label %142, label %153

142:                                              ; preds = %131
  %143 = load ptr, ptr %13, align 8, !tbaa !5
  %144 = getelementptr inbounds i16, ptr %143, i32 -1
  store ptr %144, ptr %13, align 8, !tbaa !5
  %145 = load i16, ptr %143, align 2, !tbaa !11
  %146 = load ptr, ptr %12, align 8, !tbaa !5
  %147 = getelementptr inbounds i16, ptr %146, i32 -1
  store ptr %147, ptr %12, align 8, !tbaa !5
  store i16 %145, ptr %146, align 2, !tbaa !11
  %148 = load ptr, ptr %13, align 8, !tbaa !5
  %149 = getelementptr inbounds i16, ptr %148, i32 -1
  store ptr %149, ptr %13, align 8, !tbaa !5
  %150 = load i16, ptr %148, align 2, !tbaa !11
  %151 = load ptr, ptr %12, align 8, !tbaa !5
  %152 = getelementptr inbounds i16, ptr %151, i32 -1
  store ptr %152, ptr %12, align 8, !tbaa !5
  store i16 %150, ptr %151, align 2, !tbaa !11
  br label %235

153:                                              ; preds = %131
  %154 = load ptr, ptr %11, align 8, !tbaa !5
  %155 = getelementptr inbounds i16, ptr %154, i64 -1
  %156 = load i16, ptr %155, align 2, !tbaa !11
  %157 = sext i16 %156 to i32
  %158 = load ptr, ptr %13, align 8, !tbaa !5
  %159 = load i16, ptr %158, align 2, !tbaa !11
  %160 = sext i16 %159 to i32
  %161 = icmp sgt i32 %157, %160
  %162 = zext i1 %161 to i32
  %163 = icmp sgt i32 %162, 0
  br i1 %163, label %164, label %175

164:                                              ; preds = %153
  %165 = load ptr, ptr %11, align 8, !tbaa !5
  %166 = getelementptr inbounds i16, ptr %165, i32 -1
  store ptr %166, ptr %11, align 8, !tbaa !5
  %167 = load i16, ptr %165, align 2, !tbaa !11
  %168 = load ptr, ptr %12, align 8, !tbaa !5
  %169 = getelementptr inbounds i16, ptr %168, i32 -1
  store ptr %169, ptr %12, align 8, !tbaa !5
  store i16 %167, ptr %168, align 2, !tbaa !11
  %170 = load ptr, ptr %11, align 8, !tbaa !5
  %171 = getelementptr inbounds i16, ptr %170, i32 -1
  store ptr %171, ptr %11, align 8, !tbaa !5
  %172 = load i16, ptr %170, align 2, !tbaa !11
  %173 = load ptr, ptr %12, align 8, !tbaa !5
  %174 = getelementptr inbounds i16, ptr %173, i32 -1
  store ptr %174, ptr %12, align 8, !tbaa !5
  store i16 %172, ptr %173, align 2, !tbaa !11
  br label %234

175:                                              ; preds = %153
  %176 = load ptr, ptr %11, align 8, !tbaa !5
  %177 = load i16, ptr %176, align 2, !tbaa !11
  %178 = sext i16 %177 to i32
  %179 = load ptr, ptr %13, align 8, !tbaa !5
  %180 = load i16, ptr %179, align 2, !tbaa !11
  %181 = sext i16 %180 to i32
  %182 = icmp sgt i32 %178, %181
  %183 = zext i1 %182 to i32
  %184 = icmp sle i32 %183, 0
  %185 = zext i1 %184 to i32
  %186 = sext i32 %185 to i64
  store i64 %186, ptr %15, align 8, !tbaa !9
  %187 = load i64, ptr %15, align 8, !tbaa !9
  %188 = icmp ne i64 %187, 0
  %189 = xor i1 %188, true
  %190 = zext i1 %189 to i32
  %191 = sext i32 %190 to i64
  store i64 %191, ptr %16, align 8, !tbaa !9
  %192 = load ptr, ptr %12, align 8, !tbaa !5
  %193 = getelementptr inbounds i16, ptr %192, i32 -1
  store ptr %193, ptr %12, align 8, !tbaa !5
  %194 = load ptr, ptr %13, align 8, !tbaa !5
  %195 = load i16, ptr %194, align 2, !tbaa !11
  %196 = load ptr, ptr %12, align 8, !tbaa !5
  %197 = load i64, ptr %15, align 8, !tbaa !9
  %198 = getelementptr inbounds i16, ptr %196, i64 %197
  store i16 %195, ptr %198, align 2, !tbaa !11
  %199 = load ptr, ptr %13, align 8, !tbaa !5
  %200 = getelementptr inbounds i16, ptr %199, i64 -1
  store ptr %200, ptr %13, align 8, !tbaa !5
  %201 = load ptr, ptr %11, align 8, !tbaa !5
  %202 = load i16, ptr %201, align 2, !tbaa !11
  %203 = load ptr, ptr %12, align 8, !tbaa !5
  %204 = load i64, ptr %16, align 8, !tbaa !9
  %205 = getelementptr inbounds i16, ptr %203, i64 %204
  store i16 %202, ptr %205, align 2, !tbaa !11
  %206 = load ptr, ptr %11, align 8, !tbaa !5
  %207 = getelementptr inbounds i16, ptr %206, i64 -1
  store ptr %207, ptr %11, align 8, !tbaa !5
  %208 = load ptr, ptr %12, align 8, !tbaa !5
  %209 = getelementptr inbounds i16, ptr %208, i32 -1
  store ptr %209, ptr %12, align 8, !tbaa !5
  %210 = load ptr, ptr %11, align 8, !tbaa !5
  %211 = load i16, ptr %210, align 2, !tbaa !11
  %212 = sext i16 %211 to i32
  %213 = load ptr, ptr %13, align 8, !tbaa !5
  %214 = load i16, ptr %213, align 2, !tbaa !11
  %215 = sext i16 %214 to i32
  %216 = icmp sgt i32 %212, %215
  %217 = zext i1 %216 to i32
  %218 = icmp sgt i32 %217, 0
  br i1 %218, label %219, label %224

219:                                              ; preds = %175
  %220 = load ptr, ptr %11, align 8, !tbaa !5
  %221 = getelementptr inbounds i16, ptr %220, i32 -1
  store ptr %221, ptr %11, align 8, !tbaa !5
  %222 = load i16, ptr %220, align 2, !tbaa !11
  %223 = sext i16 %222 to i32
  br label %229

224:                                              ; preds = %175
  %225 = load ptr, ptr %13, align 8, !tbaa !5
  %226 = getelementptr inbounds i16, ptr %225, i32 -1
  store ptr %226, ptr %13, align 8, !tbaa !5
  %227 = load i16, ptr %225, align 2, !tbaa !11
  %228 = sext i16 %227 to i32
  br label %229

229:                                              ; preds = %224, %219
  %230 = phi i32 [ %223, %219 ], [ %228, %224 ]
  %231 = trunc i32 %230 to i16
  %232 = load ptr, ptr %12, align 8, !tbaa !5
  %233 = getelementptr inbounds i16, ptr %232, i32 -1
  store ptr %233, ptr %12, align 8, !tbaa !5
  store i16 %231, ptr %232, align 2, !tbaa !11
  br label %234

234:                                              ; preds = %229, %164
  br label %235

235:                                              ; preds = %234, %142
  br label %236

236:                                              ; preds = %235
  %237 = load i64, ptr %14, align 8, !tbaa !9
  %238 = add i64 %237, -1
  store i64 %238, ptr %14, align 8, !tbaa !9
  %239 = icmp ne i64 %238, 0
  br i1 %239, label %131, label %240, !llvm.loop !16

240:                                              ; preds = %236
  br label %58, !llvm.loop !17

241:                                              ; preds = %129, %99, %68
  br label %242

242:                                              ; preds = %358, %241
  %243 = load ptr, ptr %13, align 8, !tbaa !5
  %244 = load ptr, ptr %7, align 8, !tbaa !5
  %245 = getelementptr inbounds i16, ptr %244, i64 1
  %246 = icmp ugt ptr %243, %245
  br i1 %246, label %247, label %252

247:                                              ; preds = %242
  %248 = load ptr, ptr %11, align 8, !tbaa !5
  %249 = load ptr, ptr %6, align 8, !tbaa !5
  %250 = getelementptr inbounds i16, ptr %249, i64 1
  %251 = icmp ugt ptr %248, %250
  br label %252

252:                                              ; preds = %247, %242
  %253 = phi i1 [ false, %242 ], [ %251, %247 ]
  br i1 %253, label %254, label %359

254:                                              ; preds = %252
  %255 = load ptr, ptr %11, align 8, !tbaa !5
  %256 = load i16, ptr %255, align 2, !tbaa !11
  %257 = sext i16 %256 to i32
  %258 = load ptr, ptr %13, align 8, !tbaa !5
  %259 = getelementptr inbounds i16, ptr %258, i64 -1
  %260 = load i16, ptr %259, align 2, !tbaa !11
  %261 = sext i16 %260 to i32
  %262 = icmp sgt i32 %257, %261
  %263 = zext i1 %262 to i32
  %264 = icmp sle i32 %263, 0
  br i1 %264, label %265, label %276

265:                                              ; preds = %254
  %266 = load ptr, ptr %13, align 8, !tbaa !5
  %267 = getelementptr inbounds i16, ptr %266, i32 -1
  store ptr %267, ptr %13, align 8, !tbaa !5
  %268 = load i16, ptr %266, align 2, !tbaa !11
  %269 = load ptr, ptr %12, align 8, !tbaa !5
  %270 = getelementptr inbounds i16, ptr %269, i32 -1
  store ptr %270, ptr %12, align 8, !tbaa !5
  store i16 %268, ptr %269, align 2, !tbaa !11
  %271 = load ptr, ptr %13, align 8, !tbaa !5
  %272 = getelementptr inbounds i16, ptr %271, i32 -1
  store ptr %272, ptr %13, align 8, !tbaa !5
  %273 = load i16, ptr %271, align 2, !tbaa !11
  %274 = load ptr, ptr %12, align 8, !tbaa !5
  %275 = getelementptr inbounds i16, ptr %274, i32 -1
  store ptr %275, ptr %12, align 8, !tbaa !5
  store i16 %273, ptr %274, align 2, !tbaa !11
  br label %358

276:                                              ; preds = %254
  %277 = load ptr, ptr %11, align 8, !tbaa !5
  %278 = getelementptr inbounds i16, ptr %277, i64 -1
  %279 = load i16, ptr %278, align 2, !tbaa !11
  %280 = sext i16 %279 to i32
  %281 = load ptr, ptr %13, align 8, !tbaa !5
  %282 = load i16, ptr %281, align 2, !tbaa !11
  %283 = sext i16 %282 to i32
  %284 = icmp sgt i32 %280, %283
  %285 = zext i1 %284 to i32
  %286 = icmp sgt i32 %285, 0
  br i1 %286, label %287, label %298

287:                                              ; preds = %276
  %288 = load ptr, ptr %11, align 8, !tbaa !5
  %289 = getelementptr inbounds i16, ptr %288, i32 -1
  store ptr %289, ptr %11, align 8, !tbaa !5
  %290 = load i16, ptr %288, align 2, !tbaa !11
  %291 = load ptr, ptr %12, align 8, !tbaa !5
  %292 = getelementptr inbounds i16, ptr %291, i32 -1
  store ptr %292, ptr %12, align 8, !tbaa !5
  store i16 %290, ptr %291, align 2, !tbaa !11
  %293 = load ptr, ptr %11, align 8, !tbaa !5
  %294 = getelementptr inbounds i16, ptr %293, i32 -1
  store ptr %294, ptr %11, align 8, !tbaa !5
  %295 = load i16, ptr %293, align 2, !tbaa !11
  %296 = load ptr, ptr %12, align 8, !tbaa !5
  %297 = getelementptr inbounds i16, ptr %296, i32 -1
  store ptr %297, ptr %12, align 8, !tbaa !5
  store i16 %295, ptr %296, align 2, !tbaa !11
  br label %357

298:                                              ; preds = %276
  %299 = load ptr, ptr %11, align 8, !tbaa !5
  %300 = load i16, ptr %299, align 2, !tbaa !11
  %301 = sext i16 %300 to i32
  %302 = load ptr, ptr %13, align 8, !tbaa !5
  %303 = load i16, ptr %302, align 2, !tbaa !11
  %304 = sext i16 %303 to i32
  %305 = icmp sgt i32 %301, %304
  %306 = zext i1 %305 to i32
  %307 = icmp sle i32 %306, 0
  %308 = zext i1 %307 to i32
  %309 = sext i32 %308 to i64
  store i64 %309, ptr %15, align 8, !tbaa !9
  %310 = load i64, ptr %15, align 8, !tbaa !9
  %311 = icmp ne i64 %310, 0
  %312 = xor i1 %311, true
  %313 = zext i1 %312 to i32
  %314 = sext i32 %313 to i64
  store i64 %314, ptr %16, align 8, !tbaa !9
  %315 = load ptr, ptr %12, align 8, !tbaa !5
  %316 = getelementptr inbounds i16, ptr %315, i32 -1
  store ptr %316, ptr %12, align 8, !tbaa !5
  %317 = load ptr, ptr %13, align 8, !tbaa !5
  %318 = load i16, ptr %317, align 2, !tbaa !11
  %319 = load ptr, ptr %12, align 8, !tbaa !5
  %320 = load i64, ptr %15, align 8, !tbaa !9
  %321 = getelementptr inbounds i16, ptr %319, i64 %320
  store i16 %318, ptr %321, align 2, !tbaa !11
  %322 = load ptr, ptr %13, align 8, !tbaa !5
  %323 = getelementptr inbounds i16, ptr %322, i64 -1
  store ptr %323, ptr %13, align 8, !tbaa !5
  %324 = load ptr, ptr %11, align 8, !tbaa !5
  %325 = load i16, ptr %324, align 2, !tbaa !11
  %326 = load ptr, ptr %12, align 8, !tbaa !5
  %327 = load i64, ptr %16, align 8, !tbaa !9
  %328 = getelementptr inbounds i16, ptr %326, i64 %327
  store i16 %325, ptr %328, align 2, !tbaa !11
  %329 = load ptr, ptr %11, align 8, !tbaa !5
  %330 = getelementptr inbounds i16, ptr %329, i64 -1
  store ptr %330, ptr %11, align 8, !tbaa !5
  %331 = load ptr, ptr %12, align 8, !tbaa !5
  %332 = getelementptr inbounds i16, ptr %331, i32 -1
  store ptr %332, ptr %12, align 8, !tbaa !5
  %333 = load ptr, ptr %11, align 8, !tbaa !5
  %334 = load i16, ptr %333, align 2, !tbaa !11
  %335 = sext i16 %334 to i32
  %336 = load ptr, ptr %13, align 8, !tbaa !5
  %337 = load i16, ptr %336, align 2, !tbaa !11
  %338 = sext i16 %337 to i32
  %339 = icmp sgt i32 %335, %338
  %340 = zext i1 %339 to i32
  %341 = icmp sgt i32 %340, 0
  br i1 %341, label %342, label %347

342:                                              ; preds = %298
  %343 = load ptr, ptr %11, align 8, !tbaa !5
  %344 = getelementptr inbounds i16, ptr %343, i32 -1
  store ptr %344, ptr %11, align 8, !tbaa !5
  %345 = load i16, ptr %343, align 2, !tbaa !11
  %346 = sext i16 %345 to i32
  br label %352

347:                                              ; preds = %298
  %348 = load ptr, ptr %13, align 8, !tbaa !5
  %349 = getelementptr inbounds i16, ptr %348, i32 -1
  store ptr %349, ptr %13, align 8, !tbaa !5
  %350 = load i16, ptr %348, align 2, !tbaa !11
  %351 = sext i16 %350 to i32
  br label %352

352:                                              ; preds = %347, %342
  %353 = phi i32 [ %346, %342 ], [ %351, %347 ]
  %354 = trunc i32 %353 to i16
  %355 = load ptr, ptr %12, align 8, !tbaa !5
  %356 = getelementptr inbounds i16, ptr %355, i32 -1
  store ptr %356, ptr %12, align 8, !tbaa !5
  store i16 %354, ptr %355, align 2, !tbaa !11
  br label %357

357:                                              ; preds = %352, %287
  br label %358

358:                                              ; preds = %357, %265
  br label %242, !llvm.loop !18

359:                                              ; preds = %252
  br label %360

360:                                              ; preds = %390, %359
  %361 = load ptr, ptr %13, align 8, !tbaa !5
  %362 = load ptr, ptr %7, align 8, !tbaa !5
  %363 = icmp uge ptr %361, %362
  br i1 %363, label %364, label %368

364:                                              ; preds = %360
  %365 = load ptr, ptr %11, align 8, !tbaa !5
  %366 = load ptr, ptr %6, align 8, !tbaa !5
  %367 = icmp uge ptr %365, %366
  br label %368

368:                                              ; preds = %364, %360
  %369 = phi i1 [ false, %360 ], [ %367, %364 ]
  br i1 %369, label %370, label %395

370:                                              ; preds = %368
  %371 = load ptr, ptr %11, align 8, !tbaa !5
  %372 = load i16, ptr %371, align 2, !tbaa !11
  %373 = sext i16 %372 to i32
  %374 = load ptr, ptr %13, align 8, !tbaa !5
  %375 = load i16, ptr %374, align 2, !tbaa !11
  %376 = sext i16 %375 to i32
  %377 = icmp sgt i32 %373, %376
  %378 = zext i1 %377 to i32
  %379 = icmp sgt i32 %378, 0
  br i1 %379, label %380, label %385

380:                                              ; preds = %370
  %381 = load ptr, ptr %11, align 8, !tbaa !5
  %382 = getelementptr inbounds i16, ptr %381, i32 -1
  store ptr %382, ptr %11, align 8, !tbaa !5
  %383 = load i16, ptr %381, align 2, !tbaa !11
  %384 = sext i16 %383 to i32
  br label %390

385:                                              ; preds = %370
  %386 = load ptr, ptr %13, align 8, !tbaa !5
  %387 = getelementptr inbounds i16, ptr %386, i32 -1
  store ptr %387, ptr %13, align 8, !tbaa !5
  %388 = load i16, ptr %386, align 2, !tbaa !11
  %389 = sext i16 %388 to i32
  br label %390

390:                                              ; preds = %385, %380
  %391 = phi i32 [ %384, %380 ], [ %389, %385 ]
  %392 = trunc i32 %391 to i16
  %393 = load ptr, ptr %12, align 8, !tbaa !5
  %394 = getelementptr inbounds i16, ptr %393, i32 -1
  store ptr %394, ptr %12, align 8, !tbaa !5
  store i16 %392, ptr %393, align 2, !tbaa !11
  br label %360, !llvm.loop !19

395:                                              ; preds = %368
  br label %396

396:                                              ; preds = %400, %395
  %397 = load ptr, ptr %13, align 8, !tbaa !5
  %398 = load ptr, ptr %7, align 8, !tbaa !5
  %399 = icmp uge ptr %397, %398
  br i1 %399, label %400, label %406

400:                                              ; preds = %396
  %401 = load ptr, ptr %13, align 8, !tbaa !5
  %402 = getelementptr inbounds i16, ptr %401, i32 -1
  store ptr %402, ptr %13, align 8, !tbaa !5
  %403 = load i16, ptr %401, align 2, !tbaa !11
  %404 = load ptr, ptr %12, align 8, !tbaa !5
  %405 = getelementptr inbounds i16, ptr %404, i32 -1
  store ptr %405, ptr %12, align 8, !tbaa !5
  store i16 %403, ptr %404, align 2, !tbaa !11
  br label %396, !llvm.loop !20

406:                                              ; preds = %396
  store i32 0, ptr %17, align 4
  br label %407

407:                                              ; preds = %406, %41, %21
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  %408 = load i32, ptr %17, align 4
  switch i32 %408, label %410 [
    i32 0, label %409
    i32 1, label %409
  ]

409:                                              ; preds = %407, %407
  ret void

410:                                              ; preds = %407
  unreachable
}

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0

; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @partial_backward_merge16(ptr noundef %0, ptr noundef %1, i64 noundef %2, i64 noundef %3, ptr nocapture noundef readnone %4) local_unnamed_addr #1 {
  %6 = icmp eq i64 %2, %3
  br i1 %6, label %.loopexit, label %7

7:                                                ; preds = %5
  %.idx = shl nsw i64 %3, 1
  %.ptr = getelementptr inbounds i8, ptr %0, i64 %.idx
  %.add = add nsw i64 %.idx, -2
  %.ptr155 = getelementptr inbounds i8, ptr %0, i64 %.add
  %8 = load i16, ptr %.ptr155, align 2, !tbaa !5
  %9 = load i16, ptr %.ptr, align 2, !tbaa !5
  %10 = icmp sgt i16 %8, %9
  br i1 %10, label %11, label %.loopexit

11:                                               ; preds = %7
  %12 = getelementptr inbounds i16, ptr %0, i64 %2
  %13 = getelementptr inbounds i8, ptr %12, i64 -2
  %14 = sub i64 %2, %3
  %15 = shl i64 %14, 1
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 2 %1, ptr nonnull align 2 %.ptr, i64 %15, i1 false)
  %.add163 = add nsw i64 %15, -2
  %16 = icmp sgt i64 %3, 33
  %17 = icmp sgt i64 %15, 66
  %18 = and i1 %16, %17
  br i1 %18, label %.preheader196.lr.ph, label %.loopexit195

.preheader196.lr.ph:                              ; preds = %11
  %invariant.gep = getelementptr i8, ptr %0, i64 -62
  %invariant.gep270 = getelementptr i8, ptr %1, i64 -2
  %invariant.gep272 = getelementptr i8, ptr %1, i64 -4
  %invariant.gep274 = getelementptr i8, ptr %1, i64 -6
  %invariant.gep276 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep278 = getelementptr i8, ptr %1, i64 -10
  %invariant.gep280 = getelementptr i8, ptr %1, i64 -12
  %invariant.gep282 = getelementptr i8, ptr %1, i64 -14
  %invariant.gep284 = getelementptr i8, ptr %1, i64 -16
  %invariant.gep286 = getelementptr i8, ptr %1, i64 -18
  %invariant.gep288 = getelementptr i8, ptr %1, i64 -20
  %invariant.gep290 = getelementptr i8, ptr %1, i64 -22
  %invariant.gep292 = getelementptr i8, ptr %1, i64 -24
  %invariant.gep294 = getelementptr i8, ptr %1, i64 -26
  %invariant.gep296 = getelementptr i8, ptr %1, i64 -28
  %invariant.gep298 = getelementptr i8, ptr %1, i64 -30
  %invariant.gep300 = getelementptr i8, ptr %1, i64 -32
  %invariant.gep302 = getelementptr i8, ptr %1, i64 -34
  %invariant.gep304 = getelementptr i8, ptr %1, i64 -36
  %invariant.gep306 = getelementptr i8, ptr %1, i64 -38
  %invariant.gep308 = getelementptr i8, ptr %1, i64 -40
  %invariant.gep310 = getelementptr i8, ptr %1, i64 -42
  %invariant.gep312 = getelementptr i8, ptr %1, i64 -44
  %invariant.gep314 = getelementptr i8, ptr %1, i64 -46
  %invariant.gep316 = getelementptr i8, ptr %1, i64 -48
  %invariant.gep318 = getelementptr i8, ptr %1, i64 -50
  %invariant.gep320 = getelementptr i8, ptr %1, i64 -52
  %invariant.gep322 = getelementptr i8, ptr %1, i64 -54
  %invariant.gep324 = getelementptr i8, ptr %1, i64 -56
  %invariant.gep326 = getelementptr i8, ptr %1, i64 -58
  %invariant.gep328 = getelementptr i8, ptr %1, i64 -60
  %invariant.gep330 = getelementptr i8, ptr %1, i64 -62
  %invariant.gep332 = getelementptr i8, ptr %0, i64 -2
  %invariant.gep334 = getelementptr i8, ptr %0, i64 -4
  %invariant.gep336 = getelementptr i8, ptr %0, i64 -6
  %invariant.gep338 = getelementptr i8, ptr %0, i64 -8
  %invariant.gep340 = getelementptr i8, ptr %0, i64 -10
  %invariant.gep342 = getelementptr i8, ptr %0, i64 -12
  %invariant.gep344 = getelementptr i8, ptr %0, i64 -14
  %invariant.gep346 = getelementptr i8, ptr %0, i64 -16
  %invariant.gep348 = getelementptr i8, ptr %0, i64 -18
  %invariant.gep350 = getelementptr i8, ptr %0, i64 -20
  %invariant.gep352 = getelementptr i8, ptr %0, i64 -22
  %invariant.gep354 = getelementptr i8, ptr %0, i64 -24
  %invariant.gep356 = getelementptr i8, ptr %0, i64 -26
  %invariant.gep358 = getelementptr i8, ptr %0, i64 -28
  %invariant.gep360 = getelementptr i8, ptr %0, i64 -30
  %invariant.gep362 = getelementptr i8, ptr %0, i64 -32
  %invariant.gep364 = getelementptr i8, ptr %0, i64 -34
  %invariant.gep366 = getelementptr i8, ptr %0, i64 -36
  %invariant.gep368 = getelementptr i8, ptr %0, i64 -38
  %invariant.gep370 = getelementptr i8, ptr %0, i64 -40
  %invariant.gep372 = getelementptr i8, ptr %0, i64 -42
  %invariant.gep374 = getelementptr i8, ptr %0, i64 -44
  %invariant.gep376 = getelementptr i8, ptr %0, i64 -46
  %invariant.gep378 = getelementptr i8, ptr %0, i64 -48
  %invariant.gep380 = getelementptr i8, ptr %0, i64 -50
  %invariant.gep382 = getelementptr i8, ptr %0, i64 -52
  %invariant.gep384 = getelementptr i8, ptr %0, i64 -54
  %invariant.gep386 = getelementptr i8, ptr %0, i64 -56
  %invariant.gep388 = getelementptr i8, ptr %0, i64 -58
  %invariant.gep390 = getelementptr i8, ptr %0, i64 -60
  %invariant.gep392 = getelementptr i8, ptr %0, i64 -62
  br label %.preheader196

.preheader196:                                    ; preds = %.preheader196.lr.ph, %189
  %.0111.idx214 = phi i64 [ %.add163, %.preheader196.lr.ph ], [ %.5.idx, %189 ]
  %.0114213 = phi ptr [ %13, %.preheader196.lr.ph ], [ %.6120, %189 ]
  %.0126.idx212 = phi i64 [ %.add, %.preheader196.lr.ph ], [ %.5131.idx, %189 ]
  %.0126.ptr.ptr215 = getelementptr inbounds i8, ptr %0, i64 %.0126.idx212
  br label %19

19:                                               ; preds = %.preheader196, %.preheader192.preheader
  %.1115 = phi ptr [ %87, %.preheader192.preheader ], [ %.0114213, %.preheader196 ]
  %.1112.idx = phi i64 [ %.2113.add.31, %.preheader192.preheader ], [ %.0111.idx214, %.preheader196 ]
  %.1112.ptr.ptr = getelementptr inbounds i8, ptr %1, i64 %.1112.idx
  %20 = load i16, ptr %.0126.ptr.ptr215, align 2, !tbaa !5
  %21 = getelementptr inbounds i8, ptr %.1112.ptr.ptr, i64 -62
  %22 = load i16, ptr %21, align 2, !tbaa !5
  %23 = icmp sgt i16 %20, %22
  br i1 %23, label %.preheader194, label %.preheader192.preheader

.preheader192.preheader:                          ; preds = %19
  %24 = load i16, ptr %.1112.ptr.ptr, align 2, !tbaa !5
  %25 = getelementptr inbounds i8, ptr %.1115, i64 -2
  store i16 %24, ptr %.1115, align 2, !tbaa !5
  %gep271 = getelementptr i8, ptr %invariant.gep270, i64 %.1112.idx
  %26 = load i16, ptr %gep271, align 2, !tbaa !5
  %27 = getelementptr inbounds i8, ptr %.1115, i64 -4
  store i16 %26, ptr %25, align 2, !tbaa !5
  %gep273 = getelementptr i8, ptr %invariant.gep272, i64 %.1112.idx
  %28 = load i16, ptr %gep273, align 2, !tbaa !5
  %29 = getelementptr inbounds i8, ptr %.1115, i64 -6
  store i16 %28, ptr %27, align 2, !tbaa !5
  %gep275 = getelementptr i8, ptr %invariant.gep274, i64 %.1112.idx
  %30 = load i16, ptr %gep275, align 2, !tbaa !5
  %31 = getelementptr inbounds i8, ptr %.1115, i64 -8
  store i16 %30, ptr %29, align 2, !tbaa !5
  %gep277 = getelementptr i8, ptr %invariant.gep276, i64 %.1112.idx
  %32 = load i16, ptr %gep277, align 2, !tbaa !5
  %33 = getelementptr inbounds i8, ptr %.1115, i64 -10
  store i16 %32, ptr %31, align 2, !tbaa !5
  %gep279 = getelementptr i8, ptr %invariant.gep278, i64 %.1112.idx
  %34 = load i16, ptr %gep279, align 2, !tbaa !5
  %35 = getelementptr inbounds i8, ptr %.1115, i64 -12
  store i16 %34, ptr %33, align 2, !tbaa !5
  %gep281 = getelementptr i8, ptr %invariant.gep280, i64 %.1112.idx
  %36 = load i16, ptr %gep281, align 2, !tbaa !5
  %37 = getelementptr inbounds i8, ptr %.1115, i64 -14
  store i16 %36, ptr %35, align 2, !tbaa !5
  %gep283 = getelementptr i8, ptr %invariant.gep282, i64 %.1112.idx
  %38 = load i16, ptr %gep283, align 2, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %.1115, i64 -16
  store i16 %38, ptr %37, align 2, !tbaa !5
  %gep285 = getelementptr i8, ptr %invariant.gep284, i64 %.1112.idx
  %40 = load i16, ptr %gep285, align 2, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %.1115, i64 -18
  store i16 %40, ptr %39, align 2, !tbaa !5
  %gep287 = getelementptr i8, ptr %invariant.gep286, i64 %.1112.idx
  %42 = load i16, ptr %gep287, align 2, !tbaa !5
  %43 = getelementptr inbounds i8, ptr %.1115, i64 -20
  store i16 %42, ptr %41, align 2, !tbaa !5
  %gep289 = getelementptr i8, ptr %invariant.gep288, i64 %.1112.idx
  %44 = load i16, ptr %gep289, align 2, !tbaa !5
  %45 = getelementptr inbounds i8, ptr %.1115, i64 -22
  store i16 %44, ptr %43, align 2, !tbaa !5
  %gep291 = getelementptr i8, ptr %invariant.gep290, i64 %.1112.idx
  %46 = load i16, ptr %gep291, align 2, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %.1115, i64 -24
  store i16 %46, ptr %45, align 2, !tbaa !5
  %gep293 = getelementptr i8, ptr %invariant.gep292, i64 %.1112.idx
  %48 = load i16, ptr %gep293, align 2, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %.1115, i64 -26
  store i16 %48, ptr %47, align 2, !tbaa !5
  %gep295 = getelementptr i8, ptr %invariant.gep294, i64 %.1112.idx
  %50 = load i16, ptr %gep295, align 2, !tbaa !5
  %51 = getelementptr inbounds i8, ptr %.1115, i64 -28
  store i16 %50, ptr %49, align 2, !tbaa !5
  %gep297 = getelementptr i8, ptr %invariant.gep296, i64 %.1112.idx
  %52 = load i16, ptr %gep297, align 2, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %.1115, i64 -30
  store i16 %52, ptr %51, align 2, !tbaa !5
  %gep299 = getelementptr i8, ptr %invariant.gep298, i64 %.1112.idx
  %54 = load i16, ptr %gep299, align 2, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %.1115, i64 -32
  store i16 %54, ptr %53, align 2, !tbaa !5
  %gep301 = getelementptr i8, ptr %invariant.gep300, i64 %.1112.idx
  %56 = load i16, ptr %gep301, align 2, !tbaa !5
  %57 = getelementptr inbounds i8, ptr %.1115, i64 -34
  store i16 %56, ptr %55, align 2, !tbaa !5
  %gep303 = getelementptr i8, ptr %invariant.gep302, i64 %.1112.idx
  %58 = load i16, ptr %gep303, align 2, !tbaa !5
  %59 = getelementptr inbounds i8, ptr %.1115, i64 -36
  store i16 %58, ptr %57, align 2, !tbaa !5
  %gep305 = getelementptr i8, ptr %invariant.gep304, i64 %.1112.idx
  %60 = load i16, ptr %gep305, align 2, !tbaa !5
  %61 = getelementptr inbounds i8, ptr %.1115, i64 -38
  store i16 %60, ptr %59, align 2, !tbaa !5
  %gep307 = getelementptr i8, ptr %invariant.gep306, i64 %.1112.idx
  %62 = load i16, ptr %gep307, align 2, !tbaa !5
  %63 = getelementptr inbounds i8, ptr %.1115, i64 -40
  store i16 %62, ptr %61, align 2, !tbaa !5
  %gep309 = getelementptr i8, ptr %invariant.gep308, i64 %.1112.idx
  %64 = load i16, ptr %gep309, align 2, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %.1115, i64 -42
  store i16 %64, ptr %63, align 2, !tbaa !5
  %gep311 = getelementptr i8, ptr %invariant.gep310, i64 %.1112.idx
  %66 = load i16, ptr %gep311, align 2, !tbaa !5
  %67 = getelementptr inbounds i8, ptr %.1115, i64 -44
  store i16 %66, ptr %65, align 2, !tbaa !5
  %gep313 = getelementptr i8, ptr %invariant.gep312, i64 %.1112.idx
  %68 = load i16, ptr %gep313, align 2, !tbaa !5
  %69 = getelementptr inbounds i8, ptr %.1115, i64 -46
  store i16 %68, ptr %67, align 2, !tbaa !5
  %gep315 = getelementptr i8, ptr %invariant.gep314, i64 %.1112.idx
  %70 = load i16, ptr %gep315, align 2, !tbaa !5
  %71 = getelementptr inbounds i8, ptr %.1115, i64 -48
  store i16 %70, ptr %69, align 2, !tbaa !5
  %gep317 = getelementptr i8, ptr %invariant.gep316, i64 %.1112.idx
  %72 = load i16, ptr %gep317, align 2, !tbaa !5
  %73 = getelementptr inbounds i8, ptr %.1115, i64 -50
  store i16 %72, ptr %71, align 2, !tbaa !5
  %gep319 = getelementptr i8, ptr %invariant.gep318, i64 %.1112.idx
  %74 = load i16, ptr %gep319, align 2, !tbaa !5
  %75 = getelementptr inbounds i8, ptr %.1115, i64 -52
  store i16 %74, ptr %73, align 2, !tbaa !5
  %gep321 = getelementptr i8, ptr %invariant.gep320, i64 %.1112.idx
  %76 = load i16, ptr %gep321, align 2, !tbaa !5
  %77 = getelementptr inbounds i8, ptr %.1115, i64 -54
  store i16 %76, ptr %75, align 2, !tbaa !5
  %gep323 = getelementptr i8, ptr %invariant.gep322, i64 %.1112.idx
  %78 = load i16, ptr %gep323, align 2, !tbaa !5
  %79 = getelementptr inbounds i8, ptr %.1115, i64 -56
  store i16 %78, ptr %77, align 2, !tbaa !5
  %gep325 = getelementptr i8, ptr %invariant.gep324, i64 %.1112.idx
  %80 = load i16, ptr %gep325, align 2, !tbaa !5
  %81 = getelementptr inbounds i8, ptr %.1115, i64 -58
  store i16 %80, ptr %79, align 2, !tbaa !5
  %gep327 = getelementptr i8, ptr %invariant.gep326, i64 %.1112.idx
  %82 = load i16, ptr %gep327, align 2, !tbaa !5
  %83 = getelementptr inbounds i8, ptr %.1115, i64 -60
  store i16 %82, ptr %81, align 2, !tbaa !5
  %gep329 = getelementptr i8, ptr %invariant.gep328, i64 %.1112.idx
  %84 = load i16, ptr %gep329, align 2, !tbaa !5
  %85 = getelementptr inbounds i8, ptr %.1115, i64 -62
  store i16 %84, ptr %83, align 2, !tbaa !5
  %gep331 = getelementptr i8, ptr %invariant.gep330, i64 %.1112.idx
  %.2113.add.31 = add nsw i64 %.1112.idx, -64
  %86 = load i16, ptr %gep331, align 2, !tbaa !5
  %87 = getelementptr inbounds i8, ptr %.1115, i64 -64
  store i16 %86, ptr %85, align 2, !tbaa !5
  %88 = icmp sgt i64 %.1112.idx, 128
  br i1 %88, label %19, label %.loopexit195

.preheader194:                                    ; preds = %19, %.preheader191.preheader
  %.1127.idx = phi i64 [ %.2128.add.31, %.preheader191.preheader ], [ %.0126.idx212, %19 ]
  %.3117 = phi ptr [ %155, %.preheader191.preheader ], [ %.1115, %19 ]
  %gep = getelementptr i8, ptr %invariant.gep, i64 %.1127.idx
  %89 = load i16, ptr %gep, align 2, !tbaa !5
  %90 = load i16, ptr %.1112.ptr.ptr, align 2, !tbaa !5
  %91 = icmp sgt i16 %89, %90
  br i1 %91, label %.preheader191.preheader, label %.preheader193

.preheader191.preheader:                          ; preds = %.preheader194
  %.2128.ptr = getelementptr inbounds i8, ptr %0, i64 %.1127.idx
  %92 = load i16, ptr %.2128.ptr, align 2, !tbaa !5
  %93 = getelementptr inbounds i8, ptr %.3117, i64 -2
  store i16 %92, ptr %.3117, align 2, !tbaa !5
  %gep333 = getelementptr i8, ptr %invariant.gep332, i64 %.1127.idx
  %94 = load i16, ptr %gep333, align 2, !tbaa !5
  %95 = getelementptr inbounds i8, ptr %.3117, i64 -4
  store i16 %94, ptr %93, align 2, !tbaa !5
  %gep335 = getelementptr i8, ptr %invariant.gep334, i64 %.1127.idx
  %96 = load i16, ptr %gep335, align 2, !tbaa !5
  %97 = getelementptr inbounds i8, ptr %.3117, i64 -6
  store i16 %96, ptr %95, align 2, !tbaa !5
  %gep337 = getelementptr i8, ptr %invariant.gep336, i64 %.1127.idx
  %98 = load i16, ptr %gep337, align 2, !tbaa !5
  %99 = getelementptr inbounds i8, ptr %.3117, i64 -8
  store i16 %98, ptr %97, align 2, !tbaa !5
  %gep339 = getelementptr i8, ptr %invariant.gep338, i64 %.1127.idx
  %100 = load i16, ptr %gep339, align 2, !tbaa !5
  %101 = getelementptr inbounds i8, ptr %.3117, i64 -10
  store i16 %100, ptr %99, align 2, !tbaa !5
  %gep341 = getelementptr i8, ptr %invariant.gep340, i64 %.1127.idx
  %102 = load i16, ptr %gep341, align 2, !tbaa !5
  %103 = getelementptr inbounds i8, ptr %.3117, i64 -12
  store i16 %102, ptr %101, align 2, !tbaa !5
  %gep343 = getelementptr i8, ptr %invariant.gep342, i64 %.1127.idx
  %104 = load i16, ptr %gep343, align 2, !tbaa !5
  %105 = getelementptr inbounds i8, ptr %.3117, i64 -14
  store i16 %104, ptr %103, align 2, !tbaa !5
  %gep345 = getelementptr i8, ptr %invariant.gep344, i64 %.1127.idx
  %106 = load i16, ptr %gep345, align 2, !tbaa !5
  %107 = getelementptr inbounds i8, ptr %.3117, i64 -16
  store i16 %106, ptr %105, align 2, !tbaa !5
  %gep347 = getelementptr i8, ptr %invariant.gep346, i64 %.1127.idx
  %108 = load i16, ptr %gep347, align 2, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %.3117, i64 -18
  store i16 %108, ptr %107, align 2, !tbaa !5
  %gep349 = getelementptr i8, ptr %invariant.gep348, i64 %.1127.idx
  %110 = load i16, ptr %gep349, align 2, !tbaa !5
  %111 = getelementptr inbounds i8, ptr %.3117, i64 -20
  store i16 %110, ptr %109, align 2, !tbaa !5
  %gep351 = getelementptr i8, ptr %invariant.gep350, i64 %.1127.idx
  %112 = load i16, ptr %gep351, align 2, !tbaa !5
  %113 = getelementptr inbounds i8, ptr %.3117, i64 -22
  store i16 %112, ptr %111, align 2, !tbaa !5
  %gep353 = getelementptr i8, ptr %invariant.gep352, i64 %.1127.idx
  %114 = load i16, ptr %gep353, align 2, !tbaa !5
  %115 = getelementptr inbounds i8, ptr %.3117, i64 -24
  store i16 %114, ptr %113, align 2, !tbaa !5
  %gep355 = getelementptr i8, ptr %invariant.gep354, i64 %.1127.idx
  %116 = load i16, ptr %gep355, align 2, !tbaa !5
  %117 = getelementptr inbounds i8, ptr %.3117, i64 -26
  store i16 %116, ptr %115, align 2, !tbaa !5
  %gep357 = getelementptr i8, ptr %invariant.gep356, i64 %.1127.idx
  %118 = load i16, ptr %gep357, align 2, !tbaa !5
  %119 = getelementptr inbounds i8, ptr %.3117, i64 -28
  store i16 %118, ptr %117, align 2, !tbaa !5
  %gep359 = getelementptr i8, ptr %invariant.gep358, i64 %.1127.idx
  %120 = load i16, ptr %gep359, align 2, !tbaa !5
  %121 = getelementptr inbounds i8, ptr %.3117, i64 -30
  store i16 %120, ptr %119, align 2, !tbaa !5
  %gep361 = getelementptr i8, ptr %invariant.gep360, i64 %.1127.idx
  %122 = load i16, ptr %gep361, align 2, !tbaa !5
  %123 = getelementptr inbounds i8, ptr %.3117, i64 -32
  store i16 %122, ptr %121, align 2, !tbaa !5
  %gep363 = getelementptr i8, ptr %invariant.gep362, i64 %.1127.idx
  %124 = load i16, ptr %gep363, align 2, !tbaa !5
  %125 = getelementptr inbounds i8, ptr %.3117, i64 -34
  store i16 %124, ptr %123, align 2, !tbaa !5
  %gep365 = getelementptr i8, ptr %invariant.gep364, i64 %.1127.idx
  %126 = load i16, ptr %gep365, align 2, !tbaa !5
  %127 = getelementptr inbounds i8, ptr %.3117, i64 -36
  store i16 %126, ptr %125, align 2, !tbaa !5
  %gep367 = getelementptr i8, ptr %invariant.gep366, i64 %.1127.idx
  %128 = load i16, ptr %gep367, align 2, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %.3117, i64 -38
  store i16 %128, ptr %127, align 2, !tbaa !5
  %gep369 = getelementptr i8, ptr %invariant.gep368, i64 %.1127.idx
  %130 = load i16, ptr %gep369, align 2, !tbaa !5
  %131 = getelementptr inbounds i8, ptr %.3117, i64 -40
  store i16 %130, ptr %129, align 2, !tbaa !5
  %gep371 = getelementptr i8, ptr %invariant.gep370, i64 %.1127.idx
  %132 = load i16, ptr %gep371, align 2, !tbaa !5
  %133 = getelementptr inbounds i8, ptr %.3117, i64 -42
  store i16 %132, ptr %131, align 2, !tbaa !5
  %gep373 = getelementptr i8, ptr %invariant.gep372, i64 %.1127.idx
  %134 = load i16, ptr %gep373, align 2, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %.3117, i64 -44
  store i16 %134, ptr %133, align 2, !tbaa !5
  %gep375 = getelementptr i8, ptr %invariant.gep374, i64 %.1127.idx
  %136 = load i16, ptr %gep375, align 2, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %.3117, i64 -46
  store i16 %136, ptr %135, align 2, !tbaa !5
  %gep377 = getelementptr i8, ptr %invariant.gep376, i64 %.1127.idx
  %138 = load i16, ptr %gep377, align 2, !tbaa !5
  %139 = getelementptr inbounds i8, ptr %.3117, i64 -48
  store i16 %138, ptr %137, align 2, !tbaa !5
  %gep379 = getelementptr i8, ptr %invariant.gep378, i64 %.1127.idx
  %140 = load i16, ptr %gep379, align 2, !tbaa !5
  %141 = getelementptr inbounds i8, ptr %.3117, i64 -50
  store i16 %140, ptr %139, align 2, !tbaa !5
  %gep381 = getelementptr i8, ptr %invariant.gep380, i64 %.1127.idx
  %142 = load i16, ptr %gep381, align 2, !tbaa !5
  %143 = getelementptr inbounds i8, ptr %.3117, i64 -52
  store i16 %142, ptr %141, align 2, !tbaa !5
  %gep383 = getelementptr i8, ptr %invariant.gep382, i64 %.1127.idx
  %144 = load i16, ptr %gep383, align 2, !tbaa !5
  %145 = getelementptr inbounds i8, ptr %.3117, i64 -54
  store i16 %144, ptr %143, align 2, !tbaa !5
  %gep385 = getelementptr i8, ptr %invariant.gep384, i64 %.1127.idx
  %146 = load i16, ptr %gep385, align 2, !tbaa !5
  %147 = getelementptr inbounds i8, ptr %.3117, i64 -56
  store i16 %146, ptr %145, align 2, !tbaa !5
  %gep387 = getelementptr i8, ptr %invariant.gep386, i64 %.1127.idx
  %148 = load i16, ptr %gep387, align 2, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %.3117, i64 -58
  store i16 %148, ptr %147, align 2, !tbaa !5
  %gep389 = getelementptr i8, ptr %invariant.gep388, i64 %.1127.idx
  %150 = load i16, ptr %gep389, align 2, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %.3117, i64 -60
  store i16 %150, ptr %149, align 2, !tbaa !5
  %gep391 = getelementptr i8, ptr %invariant.gep390, i64 %.1127.idx
  %152 = load i16, ptr %gep391, align 2, !tbaa !5
  %153 = getelementptr inbounds i8, ptr %.3117, i64 -62
  store i16 %152, ptr %151, align 2, !tbaa !5
  %gep393 = getelementptr i8, ptr %invariant.gep392, i64 %.1127.idx
  %.2128.add.31 = add nsw i64 %.1127.idx, -64
  %154 = load i16, ptr %gep393, align 2, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %.3117, i64 -64
  store i16 %154, ptr %153, align 2, !tbaa !5
  %156 = icmp sgt i64 %.1127.idx, 128
  br i1 %156, label %.preheader194, label %.loopexit195

.preheader193:                                    ; preds = %.preheader194, %187
  %.3129.idx = phi i64 [ %.5131.idx, %187 ], [ %.1127.idx, %.preheader194 ]
  %.5119 = phi ptr [ %.6120, %187 ], [ %.3117, %.preheader194 ]
  %.3.idx = phi i64 [ %.5.idx, %187 ], [ %.1112.idx, %.preheader194 ]
  %.2 = phi i64 [ %188, %187 ], [ 16, %.preheader194 ]
  %.3.ptr = getelementptr inbounds i8, ptr %1, i64 %.3.idx
  %.3129.ptr = getelementptr inbounds i8, ptr %0, i64 %.3129.idx
  %157 = load i16, ptr %.3129.ptr, align 2, !tbaa !5
  %.3.add = add nsw i64 %.3.idx, -2
  %.ptr169 = getelementptr inbounds i8, ptr %1, i64 %.3.add
  %158 = load i16, ptr %.ptr169, align 2, !tbaa !5
  %159 = icmp sgt i16 %157, %158
  br i1 %159, label %165, label %160

160:                                              ; preds = %.preheader193
  %161 = load i16, ptr %.3.ptr, align 2, !tbaa !5
  %162 = getelementptr inbounds i8, ptr %.5119, i64 -2
  store i16 %161, ptr %.5119, align 2, !tbaa !5
  %.add164 = add nsw i64 %.3.idx, -4
  %163 = load i16, ptr %.ptr169, align 2, !tbaa !5
  %164 = getelementptr inbounds i8, ptr %.5119, i64 -4
  store i16 %163, ptr %162, align 2, !tbaa !5
  br label %187

165:                                              ; preds = %.preheader193
  %.3129.add = add nsw i64 %.3129.idx, -2
  %.ptr156 = getelementptr inbounds i8, ptr %0, i64 %.3129.add
  %166 = load i16, ptr %.ptr156, align 2, !tbaa !5
  %167 = load i16, ptr %.3.ptr, align 2, !tbaa !5
  %168 = icmp sgt i16 %166, %167
  br i1 %168, label %169, label %173

169:                                              ; preds = %165
  %170 = getelementptr inbounds i8, ptr %.5119, i64 -2
  store i16 %157, ptr %.5119, align 2, !tbaa !5
  %.add153 = add nsw i64 %.3129.idx, -4
  %171 = load i16, ptr %.ptr156, align 2, !tbaa !5
  %172 = getelementptr inbounds i8, ptr %.5119, i64 -4
  store i16 %171, ptr %170, align 2, !tbaa !5
  br label %187

173:                                              ; preds = %165
  %174 = icmp sle i16 %157, %167
  %175 = zext i1 %174 to i64
  %176 = xor i1 %174, true
  %177 = zext i1 %176 to i64
  %178 = getelementptr inbounds i8, ptr %.5119, i64 -2
  %179 = getelementptr inbounds i16, ptr %178, i64 %175
  store i16 %167, ptr %179, align 2, !tbaa !5
  %180 = load i16, ptr %.3129.ptr, align 2, !tbaa !5
  %181 = getelementptr inbounds i16, ptr %178, i64 %177
  store i16 %180, ptr %181, align 2, !tbaa !5
  %182 = getelementptr inbounds i8, ptr %.5119, i64 -4
  %183 = load i16, ptr %.ptr156, align 2, !tbaa !5
  %184 = load i16, ptr %.ptr169, align 2, !tbaa !5
  %185 = icmp sgt i16 %183, %184
  %.add154 = add nsw i64 %.3129.idx, -4
  %.add165 = add nsw i64 %.3.idx, -4
  %.4130.idx = select i1 %185, i64 %.add154, i64 %.3129.add
  %.4.idx = select i1 %185, i64 %.3.add, i64 %.add165
  %.in = tail call i16 @llvm.smax.i16(i16 %183, i16 %184)
  %186 = getelementptr inbounds i8, ptr %.5119, i64 -6
  store i16 %.in, ptr %182, align 2, !tbaa !5
  br label %187

187:                                              ; preds = %160, %173, %169
  %.5131.idx = phi i64 [ %.3129.idx, %160 ], [ %.add153, %169 ], [ %.4130.idx, %173 ]
  %.6120 = phi ptr [ %164, %160 ], [ %172, %169 ], [ %186, %173 ]
  %.5.idx = phi i64 [ %.add164, %160 ], [ %.3.idx, %169 ], [ %.4.idx, %173 ]
  %188 = add nsw i64 %.2, -1
  %.not = icmp eq i64 %188, 0
  br i1 %.not, label %189, label %.preheader193, !llvm.loop !9

189:                                              ; preds = %187
  %190 = icmp sgt i64 %.5131.idx, 64
  %191 = icmp sgt i64 %.5.idx, 64
  %192 = select i1 %190, i1 %191, i1 false
  br i1 %192, label %.preheader196, label %.loopexit195, !llvm.loop !11

.loopexit195:                                     ; preds = %189, %.preheader192.preheader, %.preheader191.preheader, %11
  %.6132.idx = phi i64 [ %.add, %11 ], [ %.2128.add.31, %.preheader191.preheader ], [ %.0126.idx212, %.preheader192.preheader ], [ %.5131.idx, %189 ]
  %.7121 = phi ptr [ %13, %11 ], [ %155, %.preheader191.preheader ], [ %87, %.preheader192.preheader ], [ %.6120, %189 ]
  %.6.idx = phi i64 [ %.add163, %11 ], [ %.1112.idx, %.preheader191.preheader ], [ %.2113.add.31, %.preheader192.preheader ], [ %.5.idx, %189 ]
  %.7133.ptr218 = getelementptr inbounds i8, ptr %0, i64 %.6132.idx
  %.7.ptr219 = getelementptr inbounds i8, ptr %1, i64 %.6.idx
  %193 = icmp sgt i64 %.6.idx, 2
  %194 = icmp sgt i64 %.6132.idx, 2
  %195 = select i1 %193, i1 %194, i1 false
  br i1 %195, label %.lr.ph, label %.preheader190

.preheader190:                                    ; preds = %229, %.loopexit195
  %.8122.lcssa = phi ptr [ %.7121, %.loopexit195 ], [ %.9123, %229 ]
  %.7133.ptr.lcssa = phi ptr [ %.7133.ptr218, %.loopexit195 ], [ %.7133.ptr, %229 ]
  %.7.ptr.lcssa = phi ptr [ %.7.ptr219, %.loopexit195 ], [ %.7.ptr, %229 ]
  %196 = icmp uge ptr %.7.ptr.lcssa, %1
  %197 = icmp uge ptr %.7133.ptr.lcssa, %0
  %198 = select i1 %196, i1 %197, i1 false
  br i1 %198, label %.lr.ph231, label %.preheader

.lr.ph:                                           ; preds = %.loopexit195, %229
  %.7.ptr224 = phi ptr [ %.7.ptr, %229 ], [ %.7.ptr219, %.loopexit195 ]
  %.7133.ptr223 = phi ptr [ %.7133.ptr, %229 ], [ %.7133.ptr218, %.loopexit195 ]
  %.7.idx222 = phi i64 [ %.9.idx, %229 ], [ %.6.idx, %.loopexit195 ]
  %.8122221 = phi ptr [ %.9123, %229 ], [ %.7121, %.loopexit195 ]
  %.7133.idx220 = phi i64 [ %.9135.idx, %229 ], [ %.6132.idx, %.loopexit195 ]
  %199 = load i16, ptr %.7133.ptr223, align 2, !tbaa !5
  %.7.add = add nsw i64 %.7.idx222, -2
  %.ptr178 = getelementptr inbounds i8, ptr %1, i64 %.7.add
  %200 = load i16, ptr %.ptr178, align 2, !tbaa !5
  %201 = icmp sgt i16 %199, %200
  br i1 %201, label %207, label %202

202:                                              ; preds = %.lr.ph
  %203 = load i16, ptr %.7.ptr224, align 2, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %.8122221, i64 -2
  store i16 %203, ptr %.8122221, align 2, !tbaa !5
  %.add176 = add nsw i64 %.7.idx222, -4
  %205 = load i16, ptr %.ptr178, align 2, !tbaa !5
  %206 = getelementptr inbounds i8, ptr %.8122221, i64 -4
  store i16 %205, ptr %204, align 2, !tbaa !5
  br label %229

207:                                              ; preds = %.lr.ph
  %.7133.add = add nsw i64 %.7133.idx220, -2
  %.ptr183 = getelementptr inbounds i8, ptr %0, i64 %.7133.add
  %208 = load i16, ptr %.ptr183, align 2, !tbaa !5
  %209 = load i16, ptr %.7.ptr224, align 2, !tbaa !5
  %210 = icmp sgt i16 %208, %209
  br i1 %210, label %211, label %215

211:                                              ; preds = %207
  %212 = getelementptr inbounds i8, ptr %.8122221, i64 -2
  store i16 %199, ptr %.8122221, align 2, !tbaa !5
  %.add181 = add nsw i64 %.7133.idx220, -4
  %213 = load i16, ptr %.ptr183, align 2, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %.8122221, i64 -4
  store i16 %213, ptr %212, align 2, !tbaa !5
  br label %229

215:                                              ; preds = %207
  %216 = icmp sle i16 %199, %209
  %217 = zext i1 %216 to i64
  %218 = xor i1 %216, true
  %219 = zext i1 %218 to i64
  %220 = getelementptr inbounds i8, ptr %.8122221, i64 -2
  %221 = getelementptr inbounds i16, ptr %220, i64 %217
  store i16 %209, ptr %221, align 2, !tbaa !5
  %222 = load i16, ptr %.7133.ptr223, align 2, !tbaa !5
  %223 = getelementptr inbounds i16, ptr %220, i64 %219
  store i16 %222, ptr %223, align 2, !tbaa !5
  %224 = getelementptr inbounds i8, ptr %.8122221, i64 -4
  %225 = load i16, ptr %.ptr183, align 2, !tbaa !5
  %226 = load i16, ptr %.ptr178, align 2, !tbaa !5
  %227 = icmp sgt i16 %225, %226
  %.add182 = add nsw i64 %.7133.idx220, -4
  %.add177 = add nsw i64 %.7.idx222, -4
  %.8134.idx = select i1 %227, i64 %.add182, i64 %.7133.add
  %.8.idx = select i1 %227, i64 %.7.add, i64 %.add177
  %.in189 = tail call i16 @llvm.smax.i16(i16 %225, i16 %226)
  %228 = getelementptr inbounds i8, ptr %.8122221, i64 -6
  store i16 %.in189, ptr %224, align 2, !tbaa !5
  br label %229

229:                                              ; preds = %211, %215, %202
  %.9135.idx = phi i64 [ %.7133.idx220, %202 ], [ %.add181, %211 ], [ %.8134.idx, %215 ]
  %.9123 = phi ptr [ %206, %202 ], [ %214, %211 ], [ %228, %215 ]
  %.9.idx = phi i64 [ %.add176, %202 ], [ %.7.idx222, %211 ], [ %.8.idx, %215 ]
  %.7133.ptr = getelementptr inbounds i8, ptr %0, i64 %.9135.idx
  %.7.ptr = getelementptr inbounds i8, ptr %1, i64 %.9.idx
  %230 = icmp sgt i64 %.9.idx, 2
  %231 = icmp sgt i64 %.9135.idx, 2
  %232 = select i1 %230, i1 %231, i1 false
  br i1 %232, label %.lr.ph, label %.preheader190, !llvm.loop !12

.preheader:                                       ; preds = %.lr.ph231, %.preheader190
  %.10124.lcssa = phi ptr [ %.8122.lcssa, %.preheader190 ], [ %236, %.lr.ph231 ]
  %.10.lcssa = phi ptr [ %.7.ptr.lcssa, %.preheader190 ], [ %.11, %.lr.ph231 ]
  %.not186234 = icmp ult ptr %.10.lcssa, %1
  br i1 %.not186234, label %.loopexit, label %.lr.ph237

.lr.ph231:                                        ; preds = %.preheader190, %.lr.ph231
  %.10230 = phi ptr [ %.11, %.lr.ph231 ], [ %.7.ptr.lcssa, %.preheader190 ]
  %.10124229 = phi ptr [ %236, %.lr.ph231 ], [ %.8122.lcssa, %.preheader190 ]
  %.10136228 = phi ptr [ %.11137, %.lr.ph231 ], [ %.7133.ptr.lcssa, %.preheader190 ]
  %233 = load i16, ptr %.10136228, align 2, !tbaa !5
  %234 = load i16, ptr %.10230, align 2, !tbaa !5
  %235 = icmp sgt i16 %233, %234
  %.11137.idx = select i1 %235, i64 -2, i64 0
  %.11137 = getelementptr inbounds i8, ptr %.10136228, i64 %.11137.idx
  %.11.idx = select i1 %235, i64 0, i64 -2
  %.11 = getelementptr inbounds i8, ptr %.10230, i64 %.11.idx
  %.in187 = tail call i16 @llvm.smax.i16(i16 %233, i16 %234)
  %236 = getelementptr inbounds i8, ptr %.10124229, i64 -2
  store i16 %.in187, ptr %.10124229, align 2, !tbaa !5
  %237 = icmp uge ptr %.11, %1
  %238 = icmp uge ptr %.11137, %0
  %239 = select i1 %237, i1 %238, i1 false
  br i1 %239, label %.lr.ph231, label %.preheader, !llvm.loop !13

.lr.ph237:                                        ; preds = %.preheader, %.lr.ph237
  %.12236 = phi ptr [ %240, %.lr.ph237 ], [ %.10.lcssa, %.preheader ]
  %.11125235 = phi ptr [ %242, %.lr.ph237 ], [ %.10124.lcssa, %.preheader ]
  %240 = getelementptr inbounds i8, ptr %.12236, i64 -2
  %241 = load i16, ptr %.12236, align 2, !tbaa !5
  %242 = getelementptr inbounds i8, ptr %.11125235, i64 -2
  store i16 %241, ptr %.11125235, align 2, !tbaa !5
  %.not186 = icmp ult ptr %240, %1
  br i1 %.not186, label %.loopexit, label %.lr.ph237, !llvm.loop !14

.loopexit:                                        ; preds = %.lr.ph237, %.preheader, %7, %5
  ret void
}

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

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass