; LLVM IR from attractivechaos/klib :: ksw (ksw_u8)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.kswr_t = type { i32, i32, i32, i32, i32, i32, i32 }
%struct._kswq_t = type { i32, i32, i8, i8, i8, i8, ptr, ptr, ptr, ptr, ptr }

@g_defr = external dso_local constant %struct.kswr_t, align 4

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

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

; Function Attrs: nounwind uwtable
define dso_local void @ksw_u8(ptr dead_on_unwind noalias writable sret(%struct.kswr_t) align 4 %0, ptr noundef %1, i32 noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6) #1 {
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca <2 x i64>, align 16
  %24 = alloca <2 x i64>, align 16
  %25 = alloca <2 x i64>, align 16
  %26 = alloca <2 x i64>, align 16
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca <2 x i64>, align 16
  %36 = alloca <2 x i64>, align 16
  %37 = alloca <2 x i64>, align 16
  %38 = alloca <2 x i64>, align 16
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca ptr, align 8
  %46 = alloca i32, align 4
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i32 %2, ptr %9, align 4, !tbaa !9
  store ptr %3, ptr %10, align 8, !tbaa !5
  store i32 %4, ptr %11, align 4, !tbaa !9
  store i32 %5, ptr %12, align 4, !tbaa !9
  store i32 %6, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 -1, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %0, ptr align 4 @g_defr, i64 28, i1 false), !tbaa.struct !11
  %47 = load i32, ptr %13, align 4, !tbaa !9
  %48 = and i32 %47, 262144
  %49 = icmp ne i32 %48, 0
  br i1 %49, label %50, label %53

50:                                               ; preds = %7
  %51 = load i32, ptr %13, align 4, !tbaa !9
  %52 = and i32 %51, 65535
  br label %54

53:                                               ; preds = %7
  br label %54

54:                                               ; preds = %53, %50
  %55 = phi i32 [ %52, %50 ], [ 65536, %53 ]
  store i32 %55, ptr %20, align 4, !tbaa !9
  %56 = load i32, ptr %13, align 4, !tbaa !9
  %57 = and i32 %56, 131072
  %58 = icmp ne i32 %57, 0
  br i1 %58, label %59, label %62

59:                                               ; preds = %54
  %60 = load i32, ptr %13, align 4, !tbaa !9
  %61 = and i32 %60, 65535
  br label %63

62:                                               ; preds = %54
  br label %63

63:                                               ; preds = %62, %59
  %64 = phi i32 [ %61, %59 ], [ 65536, %62 ]
  store i32 %64, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  store ptr null, ptr %22, align 8, !tbaa !5
  %65 = call <2 x i64> @_mm_set1_epi32(i32 noundef 0)
  store <2 x i64> %65, ptr %23, align 16, !tbaa !12
  %66 = load i32, ptr %11, align 4, !tbaa !9
  %67 = load i32, ptr %12, align 4, !tbaa !9
  %68 = add nsw i32 %66, %67
  %69 = trunc i32 %68 to i8
  %70 = call <2 x i64> @_mm_set1_epi8(i8 noundef signext %69)
  store <2 x i64> %70, ptr %24, align 16, !tbaa !12
  %71 = load i32, ptr %12, align 4, !tbaa !9
  %72 = trunc i32 %71 to i8
  %73 = call <2 x i64> @_mm_set1_epi8(i8 noundef signext %72)
  store <2 x i64> %73, ptr %25, align 16, !tbaa !12
  %74 = load ptr, ptr %8, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct._kswq_t, ptr %74, i32 0, i32 2
  %76 = load i8, ptr %75, align 8, !tbaa !13
  %77 = call <2 x i64> @_mm_set1_epi8(i8 noundef signext %76)
  store <2 x i64> %77, ptr %26, align 16, !tbaa !12
  %78 = load ptr, ptr %8, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct._kswq_t, ptr %78, i32 0, i32 7
  %80 = load ptr, ptr %79, align 8, !tbaa !15
  store ptr %80, ptr %27, align 8, !tbaa !5
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct._kswq_t, ptr %81, i32 0, i32 8
  %83 = load ptr, ptr %82, align 8, !tbaa !16
  store ptr %83, ptr %28, align 8, !tbaa !5
  %84 = load ptr, ptr %8, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct._kswq_t, ptr %84, i32 0, i32 9
  %86 = load ptr, ptr %85, align 8, !tbaa !17
  store ptr %86, ptr %29, align 8, !tbaa !5
  %87 = load ptr, ptr %8, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct._kswq_t, ptr %87, i32 0, i32 10
  %89 = load ptr, ptr %88, align 8, !tbaa !18
  store ptr %89, ptr %30, align 8, !tbaa !5
  %90 = load ptr, ptr %8, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct._kswq_t, ptr %90, i32 0, i32 1
  %92 = load i32, ptr %91, align 4, !tbaa !19
  store i32 %92, ptr %14, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %93

93:                                               ; preds = %113, %63
  %94 = load i32, ptr %15, align 4, !tbaa !9
  %95 = load i32, ptr %14, align 4, !tbaa !9
  %96 = icmp slt i32 %94, %95
  br i1 %96, label %97, label %116

97:                                               ; preds = %93
  %98 = load ptr, ptr %29, align 8, !tbaa !5
  %99 = load i32, ptr %15, align 4, !tbaa !9
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds <2 x i64>, ptr %98, i64 %100
  %102 = load <2 x i64>, ptr %23, align 16, !tbaa !12
  call void @_mm_store_si128(ptr noundef %101, <2 x i64> noundef %102)
  %103 = load ptr, ptr %27, align 8, !tbaa !5
  %104 = load i32, ptr %15, align 4, !tbaa !9
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds <2 x i64>, ptr %103, i64 %105
  %107 = load <2 x i64>, ptr %23, align 16, !tbaa !12
  call void @_mm_store_si128(ptr noundef %106, <2 x i64> noundef %107)
  %108 = load ptr, ptr %30, align 8, !tbaa !5
  %109 = load i32, ptr %15, align 4, !tbaa !9
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds <2 x i64>, ptr %108, i64 %110
  %112 = load <2 x i64>, ptr %23, align 16, !tbaa !12
  call void @_mm_store_si128(ptr noundef %111, <2 x i64> noundef %112)
  br label %113

113:                                              ; preds = %97
  %114 = load i32, ptr %15, align 4, !tbaa !9
  %115 = add nsw i32 %114, 1
  store i32 %115, ptr %15, align 4, !tbaa !9
  br label %93, !llvm.loop !20

116:                                              ; preds = %93
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %117

117:                                              ; preds = %430, %116
  %118 = load i32, ptr %15, align 4, !tbaa !9
  %119 = load i32, ptr %9, align 4, !tbaa !9
  %120 = icmp slt i32 %118, %119
  br i1 %120, label %121, label %433

121:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #7
  %122 = load <2 x i64>, ptr %23, align 16, !tbaa !12
  store <2 x i64> %122, ptr %37, align 16, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #7
  %123 = load <2 x i64>, ptr %23, align 16, !tbaa !12
  store <2 x i64> %123, ptr %38, align 16, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %124 = load ptr, ptr %8, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct._kswq_t, ptr %124, i32 0, i32 6
  %126 = load ptr, ptr %125, align 8, !tbaa !22
  %127 = load ptr, ptr %10, align 8, !tbaa !5
  %128 = load i32, ptr %15, align 4, !tbaa !9
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i8, ptr %127, i64 %129
  %131 = load i8, ptr %130, align 1, !tbaa !12
  %132 = zext i8 %131 to i32
  %133 = load i32, ptr %14, align 4, !tbaa !9
  %134 = mul nsw i32 %132, %133
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds <2 x i64>, ptr %126, i64 %135
  store ptr %136, ptr %39, align 8, !tbaa !5
  %137 = load ptr, ptr %27, align 8, !tbaa !5
  %138 = load i32, ptr %14, align 4, !tbaa !9
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds <2 x i64>, ptr %137, i64 %139
  %141 = getelementptr inbounds <2 x i64>, ptr %140, i64 -1
  %142 = call <2 x i64> @_mm_load_si128(ptr noundef %141)
  store <2 x i64> %142, ptr %36, align 16, !tbaa !12
  %143 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %144 = bitcast <2 x i64> %143 to <16 x i8>
  %145 = shufflevector <16 x i8> zeroinitializer, <16 x i8> %144, <16 x i32> <i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>
  %146 = bitcast <16 x i8> %145 to <2 x i64>
  store <2 x i64> %146, ptr %36, align 16, !tbaa !12
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %210, %121
  %148 = load i32, ptr %31, align 4, !tbaa !9
  %149 = load i32, ptr %14, align 4, !tbaa !9
  %150 = icmp slt i32 %148, %149
  %151 = zext i1 %150 to i32
  %152 = sext i32 %151 to i64
  %153 = call i64 @llvm.expect.i64(i64 %152, i64 1)
  %154 = icmp ne i64 %153, 0
  br i1 %154, label %155, label %213

155:                                              ; preds = %147
  %156 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %157 = load ptr, ptr %39, align 8, !tbaa !5
  %158 = load i32, ptr %31, align 4, !tbaa !9
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds <2 x i64>, ptr %157, i64 %159
  %161 = call <2 x i64> @_mm_load_si128(ptr noundef %160)
  %162 = call <2 x i64> @_mm_adds_epu8(<2 x i64> noundef %156, <2 x i64> noundef %161)
  store <2 x i64> %162, ptr %36, align 16, !tbaa !12
  %163 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %164 = load <2 x i64>, ptr %26, align 16, !tbaa !12
  %165 = call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %163, <2 x i64> noundef %164)
  store <2 x i64> %165, ptr %36, align 16, !tbaa !12
  %166 = load ptr, ptr %29, align 8, !tbaa !5
  %167 = load i32, ptr %31, align 4, !tbaa !9
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds <2 x i64>, ptr %166, i64 %168
  %170 = call <2 x i64> @_mm_load_si128(ptr noundef %169)
  store <2 x i64> %170, ptr %35, align 16, !tbaa !12
  %171 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %172 = load <2 x i64>, ptr %35, align 16, !tbaa !12
  %173 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %171, <2 x i64> noundef %172)
  store <2 x i64> %173, ptr %36, align 16, !tbaa !12
  %174 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %175 = load <2 x i64>, ptr %37, align 16, !tbaa !12
  %176 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %174, <2 x i64> noundef %175)
  store <2 x i64> %176, ptr %36, align 16, !tbaa !12
  %177 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %178 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %179 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %177, <2 x i64> noundef %178)
  store <2 x i64> %179, ptr %38, align 16, !tbaa !12
  %180 = load ptr, ptr %28, align 8, !tbaa !5
  %181 = load i32, ptr %31, align 4, !tbaa !9
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds <2 x i64>, ptr %180, i64 %182
  %184 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  call void @_mm_store_si128(ptr noundef %183, <2 x i64> noundef %184)
  %185 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %186 = load <2 x i64>, ptr %24, align 16, !tbaa !12
  %187 = call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %185, <2 x i64> noundef %186)
  store <2 x i64> %187, ptr %36, align 16, !tbaa !12
  %188 = load <2 x i64>, ptr %35, align 16, !tbaa !12
  %189 = load <2 x i64>, ptr %25, align 16, !tbaa !12
  %190 = call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %188, <2 x i64> noundef %189)
  store <2 x i64> %190, ptr %35, align 16, !tbaa !12
  %191 = load <2 x i64>, ptr %35, align 16, !tbaa !12
  %192 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %193 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %191, <2 x i64> noundef %192)
  store <2 x i64> %193, ptr %35, align 16, !tbaa !12
  %194 = load ptr, ptr %29, align 8, !tbaa !5
  %195 = load i32, ptr %31, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds <2 x i64>, ptr %194, i64 %196
  %198 = load <2 x i64>, ptr %35, align 16, !tbaa !12
  call void @_mm_store_si128(ptr noundef %197, <2 x i64> noundef %198)
  %199 = load <2 x i64>, ptr %37, align 16, !tbaa !12
  %200 = load <2 x i64>, ptr %25, align 16, !tbaa !12
  %201 = call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %199, <2 x i64> noundef %200)
  store <2 x i64> %201, ptr %37, align 16, !tbaa !12
  %202 = load <2 x i64>, ptr %37, align 16, !tbaa !12
  %203 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %204 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %202, <2 x i64> noundef %203)
  store <2 x i64> %204, ptr %37, align 16, !tbaa !12
  %205 = load ptr, ptr %27, align 8, !tbaa !5
  %206 = load i32, ptr %31, align 4, !tbaa !9
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds <2 x i64>, ptr %205, i64 %207
  %209 = call <2 x i64> @_mm_load_si128(ptr noundef %208)
  store <2 x i64> %209, ptr %36, align 16, !tbaa !12
  br label %210

210:                                              ; preds = %155
  %211 = load i32, ptr %31, align 4, !tbaa !9
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %31, align 4, !tbaa !9
  br label %147, !llvm.loop !23

213:                                              ; preds = %147
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %214

214:                                              ; preds = %272, %213
  %215 = load i32, ptr %32, align 4, !tbaa !9
  %216 = icmp slt i32 %215, 16
  %217 = zext i1 %216 to i32
  %218 = sext i32 %217 to i64
  %219 = call i64 @llvm.expect.i64(i64 %218, i64 1)
  %220 = icmp ne i64 %219, 0
  br i1 %220, label %221, label %275

221:                                              ; preds = %214
  %222 = load <2 x i64>, ptr %37, align 16, !tbaa !12
  %223 = bitcast <2 x i64> %222 to <16 x i8>
  %224 = shufflevector <16 x i8> zeroinitializer, <16 x i8> %223, <16 x i32> <i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>
  %225 = bitcast <16 x i8> %224 to <2 x i64>
  store <2 x i64> %225, ptr %37, align 16, !tbaa !12
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %226

226:                                              ; preds = %268, %221
  %227 = load i32, ptr %31, align 4, !tbaa !9
  %228 = load i32, ptr %14, align 4, !tbaa !9
  %229 = icmp slt i32 %227, %228
  %230 = zext i1 %229 to i32
  %231 = sext i32 %230 to i64
  %232 = call i64 @llvm.expect.i64(i64 %231, i64 1)
  %233 = icmp ne i64 %232, 0
  br i1 %233, label %234, label %271

234:                                              ; preds = %226
  %235 = load ptr, ptr %28, align 8, !tbaa !5
  %236 = load i32, ptr %31, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds <2 x i64>, ptr %235, i64 %237
  %239 = call <2 x i64> @_mm_load_si128(ptr noundef %238)
  store <2 x i64> %239, ptr %36, align 16, !tbaa !12
  %240 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %241 = load <2 x i64>, ptr %37, align 16, !tbaa !12
  %242 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %240, <2 x i64> noundef %241)
  store <2 x i64> %242, ptr %36, align 16, !tbaa !12
  %243 = load ptr, ptr %28, align 8, !tbaa !5
  %244 = load i32, ptr %31, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds <2 x i64>, ptr %243, i64 %245
  %247 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  call void @_mm_store_si128(ptr noundef %246, <2 x i64> noundef %247)
  %248 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %249 = load <2 x i64>, ptr %24, align 16, !tbaa !12
  %250 = call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %248, <2 x i64> noundef %249)
  store <2 x i64> %250, ptr %36, align 16, !tbaa !12
  %251 = load <2 x i64>, ptr %37, align 16, !tbaa !12
  %252 = load <2 x i64>, ptr %25, align 16, !tbaa !12
  %253 = call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %251, <2 x i64> noundef %252)
  store <2 x i64> %253, ptr %37, align 16, !tbaa !12
  %254 = load <2 x i64>, ptr %37, align 16, !tbaa !12
  %255 = load <2 x i64>, ptr %36, align 16, !tbaa !12
  %256 = call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %254, <2 x i64> noundef %255)
  %257 = load <2 x i64>, ptr %23, align 16, !tbaa !12
  %258 = call <2 x i64> @_mm_cmpeq_epi8(<2 x i64> noundef %256, <2 x i64> noundef %257)
  %259 = call i32 @_mm_movemask_epi8(<2 x i64> noundef %258)
  store i32 %259, ptr %33, align 4, !tbaa !9
  %260 = load i32, ptr %33, align 4, !tbaa !9
  %261 = icmp eq i32 %260, 65535
  %262 = zext i1 %261 to i32
  %263 = sext i32 %262 to i64
  %264 = call i64 @llvm.expect.i64(i64 %263, i64 0)
  %265 = icmp ne i64 %264, 0
  br i1 %265, label %266, label %267

266:                                              ; preds = %234
  br label %276

267:                                              ; preds = %234
  br label %268

268:                                              ; preds = %267
  %269 = load i32, ptr %31, align 4, !tbaa !9
  %270 = add nsw i32 %269, 1
  store i32 %270, ptr %31, align 4, !tbaa !9
  br label %226, !llvm.loop !24

271:                                              ; preds = %226
  br label %272

272:                                              ; preds = %271
  %273 = load i32, ptr %32, align 4, !tbaa !9
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %32, align 4, !tbaa !9
  br label %214, !llvm.loop !25

275:                                              ; preds = %214
  br label %276

276:                                              ; preds = %275, %266
  br label %277

277:                                              ; preds = %276
  %278 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %279 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %280 = bitcast <2 x i64> %279 to <16 x i8>
  %281 = shufflevector <16 x i8> %280, <16 x i8> zeroinitializer, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>
  %282 = bitcast <16 x i8> %281 to <2 x i64>
  %283 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %278, <2 x i64> noundef %282)
  store <2 x i64> %283, ptr %38, align 16, !tbaa !12
  %284 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %285 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %286 = bitcast <2 x i64> %285 to <16 x i8>
  %287 = shufflevector <16 x i8> %286, <16 x i8> zeroinitializer, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19>
  %288 = bitcast <16 x i8> %287 to <2 x i64>
  %289 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %284, <2 x i64> noundef %288)
  store <2 x i64> %289, ptr %38, align 16, !tbaa !12
  %290 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %291 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %292 = bitcast <2 x i64> %291 to <16 x i8>
  %293 = shufflevector <16 x i8> %292, <16 x i8> zeroinitializer, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
  %294 = bitcast <16 x i8> %293 to <2 x i64>
  %295 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %290, <2 x i64> noundef %294)
  store <2 x i64> %295, ptr %38, align 16, !tbaa !12
  %296 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %297 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %298 = bitcast <2 x i64> %297 to <16 x i8>
  %299 = shufflevector <16 x i8> %298, <16 x i8> zeroinitializer, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>
  %300 = bitcast <16 x i8> %299 to <2 x i64>
  %301 = call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %296, <2 x i64> noundef %300)
  store <2 x i64> %301, ptr %38, align 16, !tbaa !12
  %302 = load <2 x i64>, ptr %38, align 16, !tbaa !12
  %303 = bitcast <2 x i64> %302 to <8 x i16>
  %304 = extractelement <8 x i16> %303, i64 0
  %305 = zext i16 %304 to i32
  %306 = and i32 %305, 255
  store i32 %306, ptr %34, align 4, !tbaa !9
  br label %307

307:                                              ; preds = %277
  br label %308

308:                                              ; preds = %307
  %309 = load i32, ptr %34, align 4, !tbaa !9
  %310 = load i32, ptr %20, align 4, !tbaa !9
  %311 = icmp sge i32 %309, %310
  br i1 %311, label %312, label %381

312:                                              ; preds = %308
  %313 = load i32, ptr %17, align 4, !tbaa !9
  %314 = icmp eq i32 %313, 0
  br i1 %314, label %326, label %315

315:                                              ; preds = %312
  %316 = load ptr, ptr %22, align 8, !tbaa !5
  %317 = load i32, ptr %17, align 4, !tbaa !9
  %318 = sub nsw i32 %317, 1
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds i64, ptr %316, i64 %319
  %321 = load i64, ptr %320, align 8, !tbaa !26
  %322 = trunc i64 %321 to i32
  %323 = add nsw i32 %322, 1
  %324 = load i32, ptr %15, align 4, !tbaa !9
  %325 = icmp ne i32 %323, %324
  br i1 %325, label %326, label %356

326:                                              ; preds = %315, %312
  %327 = load i32, ptr %17, align 4, !tbaa !9
  %328 = load i32, ptr %16, align 4, !tbaa !9
  %329 = icmp eq i32 %327, %328
  br i1 %329, label %330, label %344

330:                                              ; preds = %326
  %331 = load i32, ptr %16, align 4, !tbaa !9
  %332 = icmp ne i32 %331, 0
  br i1 %332, label %333, label %336

333:                                              ; preds = %330
  %334 = load i32, ptr %16, align 4, !tbaa !9
  %335 = shl i32 %334, 1
  br label %337

336:                                              ; preds = %330
  br label %337

337:                                              ; preds = %336, %333
  %338 = phi i32 [ %335, %333 ], [ 8, %336 ]
  store i32 %338, ptr %16, align 4, !tbaa !9
  %339 = load ptr, ptr %22, align 8, !tbaa !5
  %340 = load i32, ptr %16, align 4, !tbaa !9
  %341 = mul nsw i32 8, %340
  %342 = sext i32 %341 to i64
  %343 = call ptr @realloc(ptr noundef %339, i64 noundef %342) #8
  store ptr %343, ptr %22, align 8, !tbaa !5
  br label %344

344:                                              ; preds = %337, %326
  %345 = load i32, ptr %34, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = shl i64 %346, 32
  %348 = load i32, ptr %15, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = or i64 %347, %349
  %351 = load ptr, ptr %22, align 8, !tbaa !5
  %352 = load i32, ptr %17, align 4, !tbaa !9
  %353 = add nsw i32 %352, 1
  store i32 %353, ptr %17, align 4, !tbaa !9
  %354 = sext i32 %352 to i64
  %355 = getelementptr inbounds i64, ptr %351, i64 %354
  store i64 %350, ptr %355, align 8, !tbaa !26
  br label %380

356:                                              ; preds = %315
  %357 = load ptr, ptr %22, align 8, !tbaa !5
  %358 = load i32, ptr %17, align 4, !tbaa !9
  %359 = sub nsw i32 %358, 1
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds i64, ptr %357, i64 %360
  %362 = load i64, ptr %361, align 8, !tbaa !26
  %363 = lshr i64 %362, 32
  %364 = trunc i64 %363 to i32
  %365 = load i32, ptr %34, align 4, !tbaa !9
  %366 = icmp slt i32 %364, %365
  br i1 %366, label %367, label %379

367:                                              ; preds = %356
  %368 = load i32, ptr %34, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = shl i64 %369, 32
  %371 = load i32, ptr %15, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = or i64 %370, %372
  %374 = load ptr, ptr %22, align 8, !tbaa !5
  %375 = load i32, ptr %17, align 4, !tbaa !9
  %376 = sub nsw i32 %375, 1
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds i64, ptr %374, i64 %377
  store i64 %373, ptr %378, align 8, !tbaa !26
  br label %379

379:                                              ; preds = %367, %356
  br label %380

380:                                              ; preds = %379, %344
  br label %381

381:                                              ; preds = %380, %308
  %382 = load i32, ptr %34, align 4, !tbaa !9
  %383 = load i32, ptr %19, align 4, !tbaa !9
  %384 = icmp sgt i32 %382, %383
  br i1 %384, label %385, label %423

385:                                              ; preds = %381
  %386 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %386, ptr %19, align 4, !tbaa !9
  %387 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %387, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %388

388:                                              ; preds = %406, %385
  %389 = load i32, ptr %31, align 4, !tbaa !9
  %390 = load i32, ptr %14, align 4, !tbaa !9
  %391 = icmp slt i32 %389, %390
  %392 = zext i1 %391 to i32
  %393 = sext i32 %392 to i64
  %394 = call i64 @llvm.expect.i64(i64 %393, i64 1)
  %395 = icmp ne i64 %394, 0
  br i1 %395, label %396, label %409

396:                                              ; preds = %388
  %397 = load ptr, ptr %30, align 8, !tbaa !5
  %398 = load i32, ptr %31, align 4, !tbaa !9
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds <2 x i64>, ptr %397, i64 %399
  %401 = load ptr, ptr %28, align 8, !tbaa !5
  %402 = load i32, ptr %31, align 4, !tbaa !9
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds <2 x i64>, ptr %401, i64 %403
  %405 = call <2 x i64> @_mm_load_si128(ptr noundef %404)
  call void @_mm_store_si128(ptr noundef %400, <2 x i64> noundef %405)
  br label %406

406:                                              ; preds = %396
  %407 = load i32, ptr %31, align 4, !tbaa !9
  %408 = add nsw i32 %407, 1
  store i32 %408, ptr %31, align 4, !tbaa !9
  br label %388, !llvm.loop !28

409:                                              ; preds = %388
  %410 = load i32, ptr %19, align 4, !tbaa !9
  %411 = load ptr, ptr %8, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct._kswq_t, ptr %411, i32 0, i32 2
  %413 = load i8, ptr %412, align 8, !tbaa !13
  %414 = zext i8 %413 to i32
  %415 = add nsw i32 %410, %414
  %416 = icmp sge i32 %415, 255
  br i1 %416, label %421, label %417

417:                                              ; preds = %409
  %418 = load i32, ptr %19, align 4, !tbaa !9
  %419 = load i32, ptr %21, align 4, !tbaa !9
  %420 = icmp sge i32 %418, %419
  br i1 %420, label %421, label %422

421:                                              ; preds = %417, %409
  store i32 5, ptr %40, align 4
  br label %427

422:                                              ; preds = %417
  br label %423

423:                                              ; preds = %422, %381
  %424 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %424, ptr %39, align 8, !tbaa !5
  %425 = load ptr, ptr %27, align 8, !tbaa !5
  store ptr %425, ptr %28, align 8, !tbaa !5
  %426 = load ptr, ptr %39, align 8, !tbaa !5
  store ptr %426, ptr %27, align 8, !tbaa !5
  store i32 0, ptr %40, align 4
  br label %427

427:                                              ; preds = %423, %421
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  %428 = load i32, ptr %40, align 4
  switch i32 %428, label %555 [
    i32 0, label %429
    i32 5, label %433
  ]

429:                                              ; preds = %427
  br label %430

430:                                              ; preds = %429
  %431 = load i32, ptr %15, align 4, !tbaa !9
  %432 = add nsw i32 %431, 1
  store i32 %432, ptr %15, align 4, !tbaa !9
  br label %117, !llvm.loop !29

433:                                              ; preds = %427, %117
  %434 = load i32, ptr %19, align 4, !tbaa !9
  %435 = load ptr, ptr %8, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct._kswq_t, ptr %435, i32 0, i32 2
  %437 = load i8, ptr %436, align 8, !tbaa !13
  %438 = zext i8 %437 to i32
  %439 = add nsw i32 %434, %438
  %440 = icmp slt i32 %439, 255
  br i1 %440, label %441, label %443

441:                                              ; preds = %433
  %442 = load i32, ptr %19, align 4, !tbaa !9
  br label %444

443:                                              ; preds = %433
  br label %444

444:                                              ; preds = %443, %441
  %445 = phi i32 [ %442, %441 ], [ 255, %443 ]
  %446 = getelementptr inbounds %struct.kswr_t, ptr %0, i32 0, i32 0
  store i32 %445, ptr %446, align 4, !tbaa !30
  %447 = load i32, ptr %18, align 4, !tbaa !9
  %448 = getelementptr inbounds %struct.kswr_t, ptr %0, i32 0, i32 1
  store i32 %447, ptr %448, align 4, !tbaa !32
  %449 = getelementptr inbounds %struct.kswr_t, ptr %0, i32 0, i32 0
  %450 = load i32, ptr %449, align 4, !tbaa !30
  %451 = icmp ne i32 %450, 255
  br i1 %451, label %452, label %553

452:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  store i32 -1, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  %453 = load i32, ptr %14, align 4, !tbaa !9
  %454 = mul nsw i32 %453, 16
  store i32 %454, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  %455 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %455, ptr %45, align 8, !tbaa !5
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %456

456:                                              ; preds = %479, %452
  %457 = load i32, ptr %15, align 4, !tbaa !9
  %458 = load i32, ptr %44, align 4, !tbaa !9
  %459 = icmp slt i32 %457, %458
  br i1 %459, label %460, label %484

460:                                              ; preds = %456
  %461 = load ptr, ptr %45, align 8, !tbaa !5
  %462 = load i8, ptr %461, align 1, !tbaa !12
  %463 = zext i8 %462 to i32
  %464 = load i32, ptr %41, align 4, !tbaa !9
  %465 = icmp sgt i32 %463, %464
  br i1 %465, label %466, label %478

466:                                              ; preds = %460
  %467 = load ptr, ptr %45, align 8, !tbaa !5
  %468 = load i8, ptr %467, align 1, !tbaa !12
  %469 = zext i8 %468 to i32
  store i32 %469, ptr %41, align 4, !tbaa !9
  %470 = load i32, ptr %15, align 4, !tbaa !9
  %471 = sdiv i32 %470, 16
  %472 = load i32, ptr %15, align 4, !tbaa !9
  %473 = srem i32 %472, 16
  %474 = load i32, ptr %14, align 4, !tbaa !9
  %475 = mul nsw i32 %473, %474
  %476 = add nsw i32 %471, %475
  %477 = getelementptr inbounds %struct.kswr_t, ptr %0, i32 0, i32 2
  store i32 %476, ptr %477, align 4, !tbaa !33
  br label %478

478:                                              ; preds = %466, %460
  br label %479

479:                                              ; preds = %478
  %480 = load i32, ptr %15, align 4, !tbaa !9
  %481 = add nsw i32 %480, 1
  store i32 %481, ptr %15, align 4, !tbaa !9
  %482 = load ptr, ptr %45, align 8, !tbaa !5
  %483 = getelementptr inbounds i8, ptr %482, i32 1
  store ptr %483, ptr %45, align 8, !tbaa !5
  br label %456, !llvm.loop !34

484:                                              ; preds = %456
  %485 = load ptr, ptr %22, align 8, !tbaa !5
  %486 = icmp ne ptr %485, null
  br i1 %486, label %487, label %552

487:                                              ; preds = %484
  %488 = getelementptr inbounds %struct.kswr_t, ptr %0, i32 0, i32 0
  %489 = load i32, ptr %488, align 4, !tbaa !30
  %490 = load ptr, ptr %8, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct._kswq_t, ptr %490, i32 0, i32 4
  %492 = load i8, ptr %491, align 2, !tbaa !35
  %493 = zext i8 %492 to i32
  %494 = add nsw i32 %489, %493
  %495 = sub nsw i32 %494, 1
  %496 = load ptr, ptr %8, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct._kswq_t, ptr %496, i32 0, i32 4
  %498 = load i8, ptr %497, align 2, !tbaa !35
  %499 = zext i8 %498 to i32
  %500 = sdiv i32 %495, %499
  store i32 %500, ptr %15, align 4, !tbaa !9
  %501 = load i32, ptr %18, align 4, !tbaa !9
  %502 = load i32, ptr %15, align 4, !tbaa !9
  %503 = sub nsw i32 %501, %502
  store i32 %503, ptr %42, align 4, !tbaa !9
  %504 = load i32, ptr %18, align 4, !tbaa !9
  %505 = load i32, ptr %15, align 4, !tbaa !9
  %506 = add nsw i32 %504, %505
  store i32 %506, ptr %43, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %507

507:                                              ; preds = %548, %487
  %508 = load i32, ptr %15, align 4, !tbaa !9
  %509 = load i32, ptr %17, align 4, !tbaa !9
  %510 = icmp slt i32 %508, %509
  br i1 %510, label %511, label %551

511:                                              ; preds = %507
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  %512 = load ptr, ptr %22, align 8, !tbaa !5
  %513 = load i32, ptr %15, align 4, !tbaa !9
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds i64, ptr %512, i64 %514
  %516 = load i64, ptr %515, align 8, !tbaa !26
  %517 = trunc i64 %516 to i32
  store i32 %517, ptr %46, align 4, !tbaa !9
  %518 = load i32, ptr %46, align 4, !tbaa !9
  %519 = load i32, ptr %42, align 4, !tbaa !9
  %520 = icmp slt i32 %518, %519
  br i1 %520, label %525, label %521

521:                                              ; preds = %511
  %522 = load i32, ptr %46, align 4, !tbaa !9
  %523 = load i32, ptr %43, align 4, !tbaa !9
  %524 = icmp sgt i32 %522, %523
  br i1 %524, label %525, label %547

525:                                              ; preds = %521, %511
  %526 = load ptr, ptr %22, align 8, !tbaa !5
  %527 = load i32, ptr %15, align 4, !tbaa !9
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds i64, ptr %526, i64 %528
  %530 = load i64, ptr %529, align 8, !tbaa !26
  %531 = lshr i64 %530, 32
  %532 = trunc i64 %531 to i32
  %533 = getelementptr inbounds %struct.kswr_t, ptr %0, i32 0, i32 3
  %534 = load i32, ptr %533, align 4, !tbaa !36
  %535 = icmp sgt i32 %532, %534
  br i1 %535, label %536, label %547

536:                                              ; preds = %525
  %537 = load ptr, ptr %22, align 8, !tbaa !5
  %538 = load i32, ptr %15, align 4, !tbaa !9
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds i64, ptr %537, i64 %539
  %541 = load i64, ptr %540, align 8, !tbaa !26
  %542 = lshr i64 %541, 32
  %543 = trunc i64 %542 to i32
  %544 = getelementptr inbounds %struct.kswr_t, ptr %0, i32 0, i32 3
  store i32 %543, ptr %544, align 4, !tbaa !36
  %545 = load i32, ptr %46, align 4, !tbaa !9
  %546 = getelementptr inbounds %struct.kswr_t, ptr %0, i32 0, i32 4
  store i32 %545, ptr %546, align 4, !tbaa !37
  br label %547

547:                                              ; preds = %536, %525, %521
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  br label %548

548:                                              ; preds = %547
  %549 = load i32, ptr %15, align 4, !tbaa !9
  %550 = add nsw i32 %549, 1
  store i32 %550, ptr %15, align 4, !tbaa !9
  br label %507, !llvm.loop !38

551:                                              ; preds = %507
  br label %552

552:                                              ; preds = %551, %484
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  br label %553

553:                                              ; preds = %552, %444
  %554 = load ptr, ptr %22, align 8, !tbaa !5
  call void @free(ptr noundef %554) #7
  store i32 1, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  ret void

555:                                              ; preds = %427
  unreachable
}

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_set1_epi32(i32 noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_set1_epi8(i8 noundef signext) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @_mm_store_si128(ptr noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_load_si128(ptr noundef) #3

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i64 @llvm.expect.i64(i64, i64) #4

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_adds_epu8(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_subs_epu8(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_max_epu8(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @_mm_movemask_epi8(<2 x i64> noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_cmpeq_epi8(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: nounwind allocsize(1)
declare ptr @realloc(ptr noundef, i64 noundef) #5

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9, i64 24, i64 4, !9}
!12 = !{!7, !7, i64 0}
!13 = !{!14, !7, i64 8}
!14 = !{!"_kswq_t", !10, i64 0, !10, i64 4, !7, i64 8, !7, i64 9, !7, i64 10, !7, i64 11, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!15 = !{!14, !6, i64 24}
!16 = !{!14, !6, i64 32}
!17 = !{!14, !6, i64 40}
!18 = !{!14, !6, i64 48}
!19 = !{!14, !10, i64 4}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!14, !6, i64 16}
!23 = distinct !{!23, !21}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !21}
!26 = !{!27, !27, i64 0}
!27 = !{!"long", !7, i64 0}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !21}
!30 = !{!31, !10, i64 0}
!31 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24}
!32 = !{!31, !10, i64 4}
!33 = !{!31, !10, i64 8}
!34 = distinct !{!34, !21}
!35 = !{!14, !7, i64 10}
!36 = !{!31, !10, i64 12}
!37 = !{!31, !10, i64 16}
!38 = distinct !{!38, !21}


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

%struct.kswr_t = type { i32, i32, i32, i32, i32, i32, i32 }

@g_defr = external dso_local local_unnamed_addr constant %struct.kswr_t, align 4

; Function Attrs: nounwind uwtable
define dso_local void @ksw_u8(ptr dead_on_unwind noalias nocapture writable sret(%struct.kswr_t) align 4 %0, ptr nocapture noundef readonly %1, i32 noundef %2, ptr nocapture noundef readonly %3, i32 noundef %4, i32 noundef %5, i32 noundef %6) local_unnamed_addr #0 {
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(28) %0, ptr noundef nonnull align 4 dereferenceable(28) @g_defr, i64 28, i1 false), !tbaa.struct !5
  %8 = and i32 %6, 262144
  %.not = icmp eq i32 %8, 0
  %9 = and i32 %6, 65535
  %10 = and i32 %6, 131072
  %.not221 = icmp eq i32 %10, 0
  %11 = tail call <2 x i64> @_mm_set1_epi32(i32 noundef 0)
  %12 = add nsw i32 %5, %4
  %13 = trunc i32 %12 to i8
  %14 = tail call <2 x i64> @_mm_set1_epi8(i8 noundef signext %13)
  %15 = trunc i32 %5 to i8
  %16 = tail call <2 x i64> @_mm_set1_epi8(i8 noundef signext %15)
  %17 = getelementptr inbounds i8, ptr %1, i64 8
  %18 = load i8, ptr %17, align 8, !tbaa !10
  %19 = tail call <2 x i64> @_mm_set1_epi8(i8 noundef signext %18)
  %20 = getelementptr inbounds i8, ptr %1, i64 24
  %21 = load ptr, ptr %20, align 8, !tbaa !13
  %22 = getelementptr inbounds i8, ptr %1, i64 32
  %23 = load ptr, ptr %22, align 8, !tbaa !14
  %24 = getelementptr inbounds i8, ptr %1, i64 40
  %25 = load ptr, ptr %24, align 8, !tbaa !15
  %26 = getelementptr inbounds i8, ptr %1, i64 48
  %27 = load ptr, ptr %26, align 8, !tbaa !16
  %28 = getelementptr inbounds i8, ptr %1, i64 4
  %29 = load i32, ptr %28, align 4, !tbaa !17
  %30 = icmp sgt i32 %29, 0
  br i1 %30, label %.lr.ph.preheader, label %.preheader244

.lr.ph.preheader:                                 ; preds = %7
  %wide.trip.count = zext nneg i32 %29 to i64
  br label %.lr.ph

.preheader244:                                    ; preds = %.lr.ph, %7
  %31 = icmp sgt i32 %2, 0
  br i1 %31, label %.lr.ph270, label %._crit_edge271

.lr.ph270:                                        ; preds = %.preheader244
  %32 = getelementptr inbounds i8, ptr %1, i64 16
  %33 = sext i32 %29 to i64
  %wide.trip.count323 = zext nneg i32 %2 to i64
  %wide.trip.count307 = zext nneg i32 %29 to i64
  %wide.trip.count312 = zext nneg i32 %29 to i64
  %wide.trip.count318 = zext nneg i32 %29 to i64
  br label %37

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %34 = getelementptr inbounds <2 x i64>, ptr %25, i64 %indvars.iv
  tail call void @_mm_store_si128(ptr noundef %34, <2 x i64> noundef %11)
  %35 = getelementptr inbounds <2 x i64>, ptr %21, i64 %indvars.iv
  tail call void @_mm_store_si128(ptr noundef %35, <2 x i64> noundef %11)
  %36 = getelementptr inbounds <2 x i64>, ptr %27, i64 %indvars.iv
  tail call void @_mm_store_si128(ptr noundef %36, <2 x i64> noundef %11)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader244, label %.lr.ph, !llvm.loop !18

37:                                               ; preds = %.lr.ph270, %143
  %indvars.iv320 = phi i64 [ 0, %.lr.ph270 ], [ %indvars.iv.next321, %143 ]
  %.0181268 = phi i32 [ 0, %.lr.ph270 ], [ %.2183, %143 ]
  %.0184267 = phi i32 [ 0, %.lr.ph270 ], [ %.1185, %143 ]
  %.0187266 = phi i32 [ -1, %.lr.ph270 ], [ %.2189.ph, %143 ]
  %.0199265 = phi i32 [ 0, %.lr.ph270 ], [ %.2201.ph, %143 ]
  %.0203264 = phi ptr [ null, %.lr.ph270 ], [ %.2205, %143 ]
  %.0207263 = phi ptr [ %21, %.lr.ph270 ], [ %.0213261, %143 ]
  %.0213261 = phi ptr [ %23, %.lr.ph270 ], [ %.0207263, %143 ]
  %38 = load ptr, ptr %32, align 8, !tbaa !20
  %39 = getelementptr inbounds i8, ptr %3, i64 %indvars.iv320
  %40 = load i8, ptr %39, align 1, !tbaa !21
  %41 = zext i8 %40 to i32
  %42 = mul nsw i32 %29, %41
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds <2 x i64>, ptr %38, i64 %43
  %45 = getelementptr inbounds <2 x i64>, ptr %.0207263, i64 %33
  %46 = getelementptr inbounds i8, ptr %45, i64 -16
  %47 = tail call <2 x i64> @_mm_load_si128(ptr noundef nonnull %46)
  br i1 %30, label %.lr.ph251.preheader, label %.loopexit241.split.us, !prof !22

.lr.ph251.preheader:                              ; preds = %37
  %48 = bitcast <2 x i64> %47 to <16 x i8>
  %49 = shufflevector <16 x i8> <i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 0>, <16 x i8> %48, <16 x i32> <i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>
  %50 = bitcast <16 x i8> %49 to <2 x i64>
  br label %.lr.ph251

.preheader242:                                    ; preds = %.lr.ph251
  br i1 %30, label %.lr.ph255.us, label %.loopexit241.split.us, !prof !23

.lr.ph255.us:                                     ; preds = %.preheader242, %._crit_edge.us
  %.1196258.us = phi <2 x i64> [ %60, %._crit_edge.us ], [ %80, %.preheader242 ]
  %.0209257.us = phi i32 [ %65, %._crit_edge.us ], [ 0, %.preheader242 ]
  %51 = bitcast <2 x i64> %.1196258.us to <16 x i8>
  %52 = shufflevector <16 x i8> <i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 0>, <16 x i8> %51, <16 x i32> <i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>
  %53 = bitcast <16 x i8> %52 to <2 x i64>
  br label %55

54:                                               ; preds = %55
  %indvars.iv.next310 = add nuw nsw i64 %indvars.iv309, 1
  %exitcond313.not = icmp eq i64 %indvars.iv.next310, %wide.trip.count312
  br i1 %exitcond313.not, label %._crit_edge.us, label %55, !prof !24, !llvm.loop !25

55:                                               ; preds = %.lr.ph255.us, %54
  %indvars.iv309 = phi i64 [ 0, %.lr.ph255.us ], [ %indvars.iv.next310, %54 ]
  %.2197254.us = phi <2 x i64> [ %53, %.lr.ph255.us ], [ %60, %54 ]
  %56 = getelementptr inbounds <2 x i64>, ptr %.0213261, i64 %indvars.iv309
  %57 = tail call <2 x i64> @_mm_load_si128(ptr noundef %56)
  %58 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %57, <2 x i64> noundef %.2197254.us)
  tail call void @_mm_store_si128(ptr noundef %56, <2 x i64> noundef %58)
  %59 = tail call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %58, <2 x i64> noundef %14)
  %60 = tail call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %.2197254.us, <2 x i64> noundef %16)
  %61 = tail call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %60, <2 x i64> noundef %59)
  %62 = tail call <2 x i64> @_mm_cmpeq_epi8(<2 x i64> noundef %61, <2 x i64> noundef %11)
  %63 = tail call i32 @_mm_movemask_epi8(<2 x i64> noundef %62)
  %64 = icmp eq i32 %63, 65535
  br i1 %64, label %.loopexit241.split.us, label %54, !prof !26

._crit_edge.us:                                   ; preds = %54
  %65 = add nuw nsw i32 %.0209257.us, 1
  %exitcond314.not = icmp eq i32 %65, 16
  br i1 %exitcond314.not, label %.loopexit241.split.us, label %.lr.ph255.us, !prof !27, !llvm.loop !28

.lr.ph251:                                        ; preds = %.lr.ph251.preheader, %.lr.ph251
  %indvars.iv304 = phi i64 [ 0, %.lr.ph251.preheader ], [ %indvars.iv.next305, %.lr.ph251 ]
  %.0194250 = phi <2 x i64> [ %11, %.lr.ph251.preheader ], [ %74, %.lr.ph251 ]
  %.0195249 = phi <2 x i64> [ %11, %.lr.ph251.preheader ], [ %80, %.lr.ph251 ]
  %.0198248 = phi <2 x i64> [ %50, %.lr.ph251.preheader ], [ %82, %.lr.ph251 ]
  %66 = getelementptr inbounds <2 x i64>, ptr %44, i64 %indvars.iv304
  %67 = tail call <2 x i64> @_mm_load_si128(ptr noundef %66)
  %68 = tail call <2 x i64> @_mm_adds_epu8(<2 x i64> noundef %.0198248, <2 x i64> noundef %67)
  %69 = tail call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %68, <2 x i64> noundef %19)
  %70 = getelementptr inbounds <2 x i64>, ptr %25, i64 %indvars.iv304
  %71 = tail call <2 x i64> @_mm_load_si128(ptr noundef %70)
  %72 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %69, <2 x i64> noundef %71)
  %73 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %72, <2 x i64> noundef %.0195249)
  %74 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %.0194250, <2 x i64> noundef %73)
  %75 = getelementptr inbounds <2 x i64>, ptr %.0213261, i64 %indvars.iv304
  tail call void @_mm_store_si128(ptr noundef %75, <2 x i64> noundef %73)
  %76 = tail call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %73, <2 x i64> noundef %14)
  %77 = tail call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %71, <2 x i64> noundef %16)
  %78 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %77, <2 x i64> noundef %76)
  tail call void @_mm_store_si128(ptr noundef %70, <2 x i64> noundef %78)
  %79 = tail call <2 x i64> @_mm_subs_epu8(<2 x i64> noundef %.0195249, <2 x i64> noundef %16)
  %80 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %79, <2 x i64> noundef %76)
  %81 = getelementptr inbounds <2 x i64>, ptr %.0207263, i64 %indvars.iv304
  %82 = tail call <2 x i64> @_mm_load_si128(ptr noundef %81)
  %indvars.iv.next305 = add nuw nsw i64 %indvars.iv304, 1
  %exitcond308.not = icmp eq i64 %indvars.iv.next305, %wide.trip.count307
  br i1 %exitcond308.not, label %.preheader242, label %.lr.ph251, !prof !24, !llvm.loop !29

.loopexit241.split.us:                            ; preds = %._crit_edge.us, %55, %37, %.preheader242
  %.0194.lcssa333 = phi <2 x i64> [ %74, %.preheader242 ], [ %11, %37 ], [ %74, %55 ], [ %74, %._crit_edge.us ]
  %83 = shufflevector <2 x i64> %.0194.lcssa333, <2 x i64> <i64 0, i64 poison>, <2 x i32> <i32 1, i32 2>
  %84 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %.0194.lcssa333, <2 x i64> noundef %83)
  %85 = bitcast <2 x i64> %84 to <16 x i8>
  %86 = shufflevector <16 x i8> %85, <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19>
  %87 = bitcast <16 x i8> %86 to <2 x i64>
  %88 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %84, <2 x i64> noundef %87)
  %89 = bitcast <2 x i64> %88 to <16 x i8>
  %90 = shufflevector <16 x i8> %89, <16 x i8> <i8 0, i8 0, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
  %91 = bitcast <16 x i8> %90 to <2 x i64>
  %92 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %88, <2 x i64> noundef %91)
  %93 = bitcast <2 x i64> %92 to <16 x i8>
  %94 = shufflevector <16 x i8> %93, <16 x i8> <i8 0, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>
  %95 = bitcast <16 x i8> %94 to <2 x i64>
  %96 = tail call <2 x i64> @_mm_max_epu8(<2 x i64> noundef %92, <2 x i64> noundef %95)
  %97 = bitcast <2 x i64> %96 to <8 x i16>
  %98 = extractelement <8 x i16> %97, i64 0
  %99 = and i16 %98, 255
  %100 = zext nneg i16 %99 to i32
  %.not222223 = icmp ugt i32 %9, %100
  %.not222 = select i1 %.not, i1 true, i1 %.not222223
  br i1 %.not222, label %133, label %101

101:                                              ; preds = %.loopexit241.split.us
  %102 = icmp eq i32 %.0184267, 0
  br i1 %102, label %110, label %103

103:                                              ; preds = %101
  %104 = add nsw i32 %.0184267, -1
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds i64, ptr %.0203264, i64 %105
  %107 = load i64, ptr %106, align 8, !tbaa !30
  %108 = add i64 %107, 1
  %109 = and i64 %108, 4294967295
  %.not224 = icmp eq i64 %109, %indvars.iv320
  br i1 %.not224, label %125, label %110

110:                                              ; preds = %103, %101
  %111 = icmp eq i32 %.0184267, %.0181268
  br i1 %111, label %112, label %118

112:                                              ; preds = %110
  %.not225 = icmp eq i32 %.0181268, 0
  %113 = shl i32 %.0181268, 1
  %114 = select i1 %.not225, i32 8, i32 %113
  %115 = shl nsw i32 %114, 3
  %116 = sext i32 %115 to i64
  %117 = tail call ptr @realloc(ptr noundef %.0203264, i64 noundef %116) #6
  br label %118

118:                                              ; preds = %112, %110
  %.1204 = phi ptr [ %117, %112 ], [ %.0203264, %110 ]
  %.1182 = phi i32 [ %114, %112 ], [ %.0181268, %110 ]
  %119 = zext nneg i16 %99 to i64
  %120 = shl nuw nsw i64 %119, 32
  %121 = or disjoint i64 %120, %indvars.iv320
  %122 = add nsw i32 %.0184267, 1
  %123 = sext i32 %.0184267 to i64
  %124 = getelementptr inbounds i64, ptr %.1204, i64 %123
  store i64 %121, ptr %124, align 8, !tbaa !30
  br label %133

125:                                              ; preds = %103
  %126 = lshr i64 %107, 32
  %127 = trunc nuw i64 %126 to i32
  %128 = icmp slt i32 %127, %100
  br i1 %128, label %129, label %133

129:                                              ; preds = %125
  %130 = zext nneg i16 %99 to i64
  %131 = shl nuw nsw i64 %130, 32
  %132 = or disjoint i64 %131, %indvars.iv320
  store i64 %132, ptr %106, align 8, !tbaa !30
  br label %133

133:                                              ; preds = %118, %129, %125, %.loopexit241.split.us
  %.2205 = phi ptr [ %.1204, %118 ], [ %.0203264, %129 ], [ %.0203264, %125 ], [ %.0203264, %.loopexit241.split.us ]
  %.1185 = phi i32 [ %122, %118 ], [ %.0184267, %129 ], [ %.0184267, %125 ], [ %.0184267, %.loopexit241.split.us ]
  %.2183 = phi i32 [ %.1182, %118 ], [ %.0181268, %129 ], [ %.0181268, %125 ], [ %.0181268, %.loopexit241.split.us ]
  %134 = icmp ult i32 %.0199265, %100
  br i1 %134, label %.preheader, label %143

.preheader:                                       ; preds = %133
  br i1 %30, label %.lr.ph260, label %._crit_edge, !prof !22

.lr.ph260:                                        ; preds = %.preheader, %.lr.ph260
  %indvars.iv315 = phi i64 [ %indvars.iv.next316, %.lr.ph260 ], [ 0, %.preheader ]
  %135 = getelementptr inbounds <2 x i64>, ptr %27, i64 %indvars.iv315
  %136 = getelementptr inbounds <2 x i64>, ptr %.0213261, i64 %indvars.iv315
  %137 = tail call <2 x i64> @_mm_load_si128(ptr noundef %136)
  tail call void @_mm_store_si128(ptr noundef %135, <2 x i64> noundef %137)
  %indvars.iv.next316 = add nuw nsw i64 %indvars.iv315, 1
  %exitcond319.not = icmp eq i64 %indvars.iv.next316, %wide.trip.count318
  br i1 %exitcond319.not, label %._crit_edge, label %.lr.ph260, !prof !24, !llvm.loop !32

._crit_edge:                                      ; preds = %.lr.ph260, %.preheader
  %138 = load i8, ptr %17, align 8, !tbaa !10
  %139 = zext i8 %138 to i32
  %140 = add nuw nsw i32 %139, %100
  %141 = icmp ult i32 %140, 255
  %.not226 = select i1 %.not221, i1 true, i1 %.not222223
  %or.cond = and i1 %.not226, %141
  %142 = trunc nuw nsw i64 %indvars.iv320 to i32
  br i1 %or.cond, label %143, label %._crit_edge271

143:                                              ; preds = %._crit_edge, %133
  %.2201.ph = phi i32 [ %.0199265, %133 ], [ %100, %._crit_edge ]
  %.2189.ph = phi i32 [ %.0187266, %133 ], [ %142, %._crit_edge ]
  %indvars.iv.next321 = add nuw nsw i64 %indvars.iv320, 1
  %exitcond324.not = icmp eq i64 %indvars.iv.next321, %wide.trip.count323
  br i1 %exitcond324.not, label %._crit_edge271, label %37, !llvm.loop !33

._crit_edge271:                                   ; preds = %143, %._crit_edge, %.preheader244
  %.3206 = phi ptr [ null, %.preheader244 ], [ %.2205, %._crit_edge ], [ %.2205, %143 ]
  %.3202 = phi i32 [ 0, %.preheader244 ], [ %.2201.ph, %143 ], [ %100, %._crit_edge ]
  %.3190 = phi i32 [ -1, %.preheader244 ], [ %.2189.ph, %143 ], [ %142, %._crit_edge ]
  %.2186 = phi i32 [ 0, %.preheader244 ], [ %.1185, %._crit_edge ], [ %.1185, %143 ]
  %144 = load i8, ptr %17, align 8, !tbaa !10
  %145 = zext i8 %144 to i32
  %146 = add nuw nsw i32 %.3202, %145
  %147 = icmp slt i32 %146, 255
  %148 = select i1 %147, i32 %.3202, i32 255
  store i32 %148, ptr %0, align 4, !tbaa !34
  %149 = getelementptr inbounds i8, ptr %0, i64 4
  store i32 %.3190, ptr %149, align 4, !tbaa !36
  %.not228 = icmp eq i32 %148, 255
  br i1 %.not228, label %.loopexit, label %150

150:                                              ; preds = %._crit_edge271
  br i1 %30, label %.lr.ph285, label %184

.lr.ph285:                                        ; preds = %150
  %151 = shl i32 %29, 4
  %152 = getelementptr inbounds i8, ptr %0, i64 8
  %.promoted = load i32, ptr %152, align 4, !tbaa !37
  %smax = tail call i32 @llvm.smax.i32(i32 %151, i32 1)
  %xtraiter = and i32 %smax, 1
  %153 = icmp eq i32 %smax, 1
  br i1 %153, label %._crit_edge286.unr-lcssa, label %.lr.ph285.new

.lr.ph285.new:                                    ; preds = %.lr.ph285
  %unroll_iter = and i32 %smax, 2147483632
  br label %154

154:                                              ; preds = %154, %.lr.ph285.new
  %155 = phi i32 [ %.promoted, %.lr.ph285.new ], [ %173, %154 ]
  %.2283 = phi i32 [ 0, %.lr.ph285.new ], [ %174, %154 ]
  %.0180282 = phi ptr [ %27, %.lr.ph285.new ], [ %175, %154 ]
  %.0191281 = phi i32 [ -1, %.lr.ph285.new ], [ %.1192.1, %154 ]
  %niter = phi i32 [ 0, %.lr.ph285.new ], [ %niter.next.1, %154 ]
  %156 = load i8, ptr %.0180282, align 1, !tbaa !21
  %157 = zext i8 %156 to i32
  %158 = icmp slt i32 %.0191281, %157
  %159 = lshr i32 %.2283, 4
  %160 = and i32 %.2283, 14
  %161 = mul nuw nsw i32 %160, %29
  %162 = add nuw nsw i32 %161, %159
  %163 = select i1 %158, i32 %162, i32 %155
  %.1192 = tail call i32 @llvm.smax.i32(i32 %.0191281, i32 %157)
  %164 = getelementptr inbounds i8, ptr %.0180282, i64 1
  %165 = load i8, ptr %164, align 1, !tbaa !21
  %166 = zext i8 %165 to i32
  %167 = icmp ult i32 %.1192, %166
  %168 = lshr i32 %.2283, 4
  %169 = and i32 %.2283, 14
  %170 = or disjoint i32 %169, 1
  %171 = mul nuw nsw i32 %170, %29
  %172 = add nuw nsw i32 %171, %168
  %173 = select i1 %167, i32 %172, i32 %163
  %.1192.1 = tail call i32 @llvm.smax.i32(i32 %.1192, i32 %166)
  %174 = add nuw nsw i32 %.2283, 2
  %175 = getelementptr inbounds i8, ptr %.0180282, i64 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge286.unr-lcssa, label %154, !llvm.loop !38

._crit_edge286.unr-lcssa:                         ; preds = %154, %.lr.ph285
  %.lcssa350.ph = phi i32 [ poison, %.lr.ph285 ], [ %173, %154 ]
  %.unr = phi i32 [ %.promoted, %.lr.ph285 ], [ %173, %154 ]
  %.2283.unr = phi i32 [ 0, %.lr.ph285 ], [ %174, %154 ]
  %.0180282.unr = phi ptr [ %27, %.lr.ph285 ], [ %175, %154 ]
  %.0191281.unr = phi i32 [ -1, %.lr.ph285 ], [ %.1192.1, %154 ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge286, label %._crit_edge286.epilog-lcssa

._crit_edge286.epilog-lcssa:                      ; preds = %._crit_edge286.unr-lcssa
  %176 = load i8, ptr %.0180282.unr, align 1, !tbaa !21
  %177 = zext i8 %176 to i32
  %178 = icmp slt i32 %.0191281.unr, %177
  %179 = lshr i32 %.2283.unr, 4
  %180 = and i32 %.2283.unr, 15
  %181 = mul nuw nsw i32 %180, %29
  %182 = add nuw nsw i32 %181, %179
  %183 = select i1 %178, i32 %182, i32 %.unr
  br label %._crit_edge286

._crit_edge286:                                   ; preds = %._crit_edge286.unr-lcssa, %._crit_edge286.epilog-lcssa
  %.lcssa350 = phi i32 [ %.lcssa350.ph, %._crit_edge286.unr-lcssa ], [ %183, %._crit_edge286.epilog-lcssa ]
  store i32 %.lcssa350, ptr %152, align 4, !tbaa !37
  br label %184

184:                                              ; preds = %._crit_edge286, %150
  %.not229 = icmp eq ptr %.3206, null
  br i1 %.not229, label %.loopexit, label %185

185:                                              ; preds = %184
  %186 = getelementptr inbounds i8, ptr %1, i64 10
  %187 = load i8, ptr %186, align 2, !tbaa !39
  %188 = zext i8 %187 to i32
  %189 = add nsw i32 %148, -1
  %190 = add nsw i32 %189, %188
  %191 = sdiv i32 %190, %188
  %192 = sub nsw i32 %.3190, %191
  %193 = add nsw i32 %191, %.3190
  %194 = icmp sgt i32 %.2186, 0
  br i1 %194, label %.lr.ph289, label %.loopexit

.lr.ph289:                                        ; preds = %185
  %195 = getelementptr inbounds i8, ptr %0, i64 12
  %196 = getelementptr inbounds i8, ptr %0, i64 16
  %.promoted290 = load i32, ptr %195, align 4, !tbaa !40
  %.promoted292 = load i32, ptr %196, align 4, !tbaa !41
  %wide.trip.count329 = zext nneg i32 %.2186 to i64
  %xtraiter358 = and i64 %wide.trip.count329, 1
  %197 = icmp eq i32 %.2186, 1
  br i1 %197, label %..loopexit_crit_edge.unr-lcssa, label %.lr.ph289.new

.lr.ph289.new:                                    ; preds = %.lr.ph289
  %unroll_iter364 = and i64 %wide.trip.count329, 2147483646
  br label %198

198:                                              ; preds = %198, %.lr.ph289.new
  %indvars.iv326 = phi i64 [ 0, %.lr.ph289.new ], [ %indvars.iv.next327.1, %198 ]
  %199 = phi i32 [ %.promoted292, %.lr.ph289.new ], [ %221, %198 ]
  %200 = phi i32 [ %.promoted290, %.lr.ph289.new ], [ %222, %198 ]
  %niter365 = phi i64 [ 0, %.lr.ph289.new ], [ %niter365.next.1, %198 ]
  %201 = getelementptr inbounds i64, ptr %.3206, i64 %indvars.iv326
  %202 = load i64, ptr %201, align 8, !tbaa !30
  %203 = trunc i64 %202 to i32
  %204 = icmp sgt i32 %192, %203
  %205 = icmp slt i32 %193, %203
  %or.cond230 = select i1 %204, i1 true, i1 %205
  %206 = lshr i64 %202, 32
  %207 = trunc nuw i64 %206 to i32
  %208 = icmp slt i32 %200, %207
  %spec.select294 = tail call i32 @llvm.smax.i32(i32 %200, i32 %207)
  %209 = select i1 %or.cond230, i1 %208, i1 false
  %210 = select i1 %209, i32 %203, i32 %199
  %211 = select i1 %or.cond230, i32 %spec.select294, i32 %200
  %indvars.iv.next327 = or disjoint i64 %indvars.iv326, 1
  %212 = getelementptr inbounds i64, ptr %.3206, i64 %indvars.iv.next327
  %213 = load i64, ptr %212, align 8, !tbaa !30
  %214 = trunc i64 %213 to i32
  %215 = icmp sgt i32 %192, %214
  %216 = icmp slt i32 %193, %214
  %or.cond230.1 = select i1 %215, i1 true, i1 %216
  %217 = lshr i64 %213, 32
  %218 = trunc nuw i64 %217 to i32
  %219 = icmp slt i32 %211, %218
  %spec.select294.1 = tail call i32 @llvm.smax.i32(i32 %211, i32 %218)
  %220 = select i1 %or.cond230.1, i1 %219, i1 false
  %221 = select i1 %220, i32 %214, i32 %210
  %222 = select i1 %or.cond230.1, i32 %spec.select294.1, i32 %211
  %indvars.iv.next327.1 = add nuw nsw i64 %indvars.iv326, 2
  %niter365.next.1 = add i64 %niter365, 2
  %niter365.ncmp.1 = icmp eq i64 %niter365.next.1, %unroll_iter364
  br i1 %niter365.ncmp.1, label %..loopexit_crit_edge.unr-lcssa, label %198, !llvm.loop !42

..loopexit_crit_edge.unr-lcssa:                   ; preds = %198, %.lr.ph289
  %.lcssa349.ph = phi i32 [ poison, %.lr.ph289 ], [ %221, %198 ]
  %.lcssa.ph = phi i32 [ poison, %.lr.ph289 ], [ %222, %198 ]
  %indvars.iv326.unr = phi i64 [ 0, %.lr.ph289 ], [ %indvars.iv.next327.1, %198 ]
  %.unr359 = phi i32 [ %.promoted292, %.lr.ph289 ], [ %221, %198 ]
  %.unr360 = phi i32 [ %.promoted290, %.lr.ph289 ], [ %222, %198 ]
  %lcmp.mod361.not = icmp eq i64 %xtraiter358, 0
  br i1 %lcmp.mod361.not, label %..loopexit_crit_edge, label %..loopexit_crit_edge.epilog-lcssa

..loopexit_crit_edge.epilog-lcssa:                ; preds = %..loopexit_crit_edge.unr-lcssa
  %223 = getelementptr inbounds i64, ptr %.3206, i64 %indvars.iv326.unr
  %224 = load i64, ptr %223, align 8, !tbaa !30
  %225 = trunc i64 %224 to i32
  %226 = icmp sgt i32 %192, %225
  %227 = icmp slt i32 %193, %225
  %or.cond230.epil = select i1 %226, i1 true, i1 %227
  %228 = lshr i64 %224, 32
  %229 = trunc nuw i64 %228 to i32
  %230 = icmp slt i32 %.unr360, %229
  %spec.select294.epil = tail call i32 @llvm.smax.i32(i32 %.unr360, i32 %229)
  %231 = select i1 %or.cond230.epil, i1 %230, i1 false
  %232 = select i1 %231, i32 %225, i32 %.unr359
  %233 = select i1 %or.cond230.epil, i32 %spec.select294.epil, i32 %.unr360
  br label %..loopexit_crit_edge

..loopexit_crit_edge:                             ; preds = %..loopexit_crit_edge.unr-lcssa, %..loopexit_crit_edge.epilog-lcssa
  %.lcssa349 = phi i32 [ %.lcssa349.ph, %..loopexit_crit_edge.unr-lcssa ], [ %232, %..loopexit_crit_edge.epilog-lcssa ]
  %.lcssa = phi i32 [ %.lcssa.ph, %..loopexit_crit_edge.unr-lcssa ], [ %233, %..loopexit_crit_edge.epilog-lcssa ]
  store i32 %.lcssa, ptr %195, align 4, !tbaa !40
  store i32 %.lcssa349, ptr %196, align 4, !tbaa !41
  br label %.loopexit

.loopexit:                                        ; preds = %185, %..loopexit_crit_edge, %184, %._crit_edge271
  tail call void @free(ptr noundef %.3206) #7
  ret void
}

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_set1_epi32(i32 noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_set1_epi8(i8 noundef signext) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @_mm_store_si128(ptr noundef, <2 x i64> noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_load_si128(ptr noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_adds_epu8(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_subs_epu8(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_max_epu8(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @_mm_movemask_epi8(<2 x i64> noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden <2 x i64> @_mm_cmpeq_epi8(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias noundef ptr @realloc(ptr allocptr nocapture noundef, i64 noundef) local_unnamed_addr #3

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{i64 0, i64 4, !6, i64 4, i64 4, !6, i64 8, i64 4, !6, i64 12, i64 4, !6, i64 16, i64 4, !6, i64 20, i64 4, !6, i64 24, i64 4, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !8, i64 8}
!11 = !{!"_kswq_t", !7, i64 0, !7, i64 4, !8, i64 8, !8, i64 9, !8, i64 10, !8, i64 11, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!11, !12, i64 24}
!14 = !{!11, !12, i64 32}
!15 = !{!11, !12, i64 40}
!16 = !{!11, !12, i64 48}
!17 = !{!11, !7, i64 4}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!11, !12, i64 16}
!21 = !{!8, !8, i64 0}
!22 = !{!"branch_weights", i32 127, i32 1}
!23 = !{!"branch_weights", i32 -2147483648, i32 0}
!24 = !{!"branch_weights", i32 127, i32 255873}
!25 = distinct !{!25, !19}
!26 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!27 = !{!"branch_weights", i32 1, i32 1999}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19}
!30 = !{!31, !31, i64 0}
!31 = !{!"long", !8, i64 0}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = !{!35, !7, i64 0}
!35 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24}
!36 = !{!35, !7, i64 4}
!37 = !{!35, !7, i64 8}
!38 = distinct !{!38, !19}
!39 = !{!11, !8, i64 10}
!40 = !{!35, !7, i64 12}
!41 = !{!35, !7, i64 16}
!42 = distinct !{!42, !19}


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