; LLVM IR from lzfse/lzfse :: src (lzvn_encode_base)

; 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.lzvn_match_info = type { i64, i64, i64, i64, i64 }
%struct.lzvn_encode_entry_type = type { [4 x i32], [4 x i32] }
%struct.lzvn_encoder_state = type { ptr, i64, i64, i64, i64, i64, ptr, ptr, ptr, %struct.lzvn_match_info, i64, ptr }

; Function Attrs: nounwind uwtable
define dso_local void @lzvn_encode(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca %struct.lzvn_match_info, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca %struct.lzvn_encode_entry_type, align 4
  %7 = alloca %struct.lzvn_encode_entry_type, align 4
  %8 = alloca %struct.lzvn_match_info, align 8
  %9 = alloca [4 x i32], align 16
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca %struct.lzvn_match_info, align 8
  %14 = alloca %struct.lzvn_match_info, align 8
  %15 = alloca %struct.lzvn_match_info, align 8
  %16 = alloca %struct.lzvn_match_info, align 8
  %17 = alloca %struct.lzvn_match_info, align 8
  %18 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %3) #6
  call void @llvm.memset.p0.i64(ptr align 8 %3, i8 0, i64 40, i1 false)
  br label %19

19:                                               ; preds = %494, %1
  %20 = load ptr, ptr %2, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %20, i32 0, i32 3
  %22 = load i64, ptr %21, align 8, !tbaa !9
  %23 = load ptr, ptr %2, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %23, i32 0, i32 4
  %25 = load i64, ptr %24, align 8, !tbaa !13
  %26 = icmp slt i64 %22, %25
  br i1 %26, label %27, label %499

27:                                               ; preds = %19
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  %28 = load ptr, ptr %2, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %28, i32 0, i32 0
  %30 = load ptr, ptr %29, align 8, !tbaa !14
  %31 = load ptr, ptr %2, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %31, i32 0, i32 3
  %33 = load i64, ptr %32, align 8, !tbaa !9
  %34 = getelementptr inbounds i8, ptr %30, i64 %33
  %35 = call i32 @load4(ptr noundef %34)
  store i32 %35, ptr %4, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  %36 = load i32, ptr %4, align 4, !tbaa !15
  %37 = call i32 @hash3i(i32 noundef %36)
  store i32 %37, ptr %5, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %6) #6
  %38 = load ptr, ptr %2, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %38, i32 0, i32 11
  %40 = load ptr, ptr %39, align 8, !tbaa !17
  %41 = load i32, ptr %5, align 4, !tbaa !15
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %40, i64 %42
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %6, ptr align 4 %43, i64 32, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.start.p0(i64 32, ptr %7) #6
  %44 = load ptr, ptr %2, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %44, i32 0, i32 3
  %46 = load i64, ptr %45, align 8, !tbaa !9
  %47 = call i32 @offset_to_s32(i64 noundef %46)
  %48 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %7, i32 0, i32 0
  %49 = getelementptr inbounds [4 x i32], ptr %48, i64 0, i64 0
  store i32 %47, ptr %49, align 4, !tbaa !15
  %50 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 0
  %51 = getelementptr inbounds [4 x i32], ptr %50, i64 0, i64 0
  %52 = load i32, ptr %51, align 4, !tbaa !15
  %53 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %7, i32 0, i32 0
  %54 = getelementptr inbounds [4 x i32], ptr %53, i64 0, i64 1
  store i32 %52, ptr %54, align 4, !tbaa !15
  %55 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 0
  %56 = getelementptr inbounds [4 x i32], ptr %55, i64 0, i64 1
  %57 = load i32, ptr %56, align 4, !tbaa !15
  %58 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %7, i32 0, i32 0
  %59 = getelementptr inbounds [4 x i32], ptr %58, i64 0, i64 2
  store i32 %57, ptr %59, align 4, !tbaa !15
  %60 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 0
  %61 = getelementptr inbounds [4 x i32], ptr %60, i64 0, i64 2
  %62 = load i32, ptr %61, align 4, !tbaa !15
  %63 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %7, i32 0, i32 0
  %64 = getelementptr inbounds [4 x i32], ptr %63, i64 0, i64 3
  store i32 %62, ptr %64, align 4, !tbaa !15
  %65 = load i32, ptr %4, align 4, !tbaa !15
  %66 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %7, i32 0, i32 1
  %67 = getelementptr inbounds [4 x i32], ptr %66, i64 0, i64 0
  store i32 %65, ptr %67, align 4, !tbaa !15
  %68 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 1
  %69 = getelementptr inbounds [4 x i32], ptr %68, i64 0, i64 0
  %70 = load i32, ptr %69, align 4, !tbaa !15
  %71 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %7, i32 0, i32 1
  %72 = getelementptr inbounds [4 x i32], ptr %71, i64 0, i64 1
  store i32 %70, ptr %72, align 4, !tbaa !15
  %73 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 1
  %74 = getelementptr inbounds [4 x i32], ptr %73, i64 0, i64 1
  %75 = load i32, ptr %74, align 4, !tbaa !15
  %76 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %7, i32 0, i32 1
  %77 = getelementptr inbounds [4 x i32], ptr %76, i64 0, i64 2
  store i32 %75, ptr %77, align 4, !tbaa !15
  %78 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 1
  %79 = getelementptr inbounds [4 x i32], ptr %78, i64 0, i64 2
  %80 = load i32, ptr %79, align 4, !tbaa !15
  %81 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %7, i32 0, i32 1
  %82 = getelementptr inbounds [4 x i32], ptr %81, i64 0, i64 3
  store i32 %80, ptr %82, align 4, !tbaa !15
  %83 = load ptr, ptr %2, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %83, i32 0, i32 3
  %85 = load i64, ptr %84, align 8, !tbaa !9
  %86 = load ptr, ptr %2, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %86, i32 0, i32 5
  %88 = load i64, ptr %87, align 8, !tbaa !20
  %89 = icmp slt i64 %85, %88
  br i1 %89, label %90, label %91

90:                                               ; preds = %27
  br label %484

91:                                               ; preds = %27
  call void @llvm.memset.p0.i64(ptr align 8 %8, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !15
  br label %92

92:                                               ; preds = %107, %91
  %93 = load i32, ptr %10, align 4, !tbaa !15
  %94 = icmp slt i32 %93, 4
  br i1 %94, label %96, label %95

95:                                               ; preds = %92
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %110

96:                                               ; preds = %92
  %97 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 1
  %98 = load i32, ptr %10, align 4, !tbaa !15
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds [4 x i32], ptr %97, i64 0, i64 %99
  %101 = load i32, ptr %100, align 4, !tbaa !15
  %102 = load i32, ptr %4, align 4, !tbaa !15
  %103 = xor i32 %101, %102
  %104 = load i32, ptr %10, align 4, !tbaa !15
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 %105
  store i32 %103, ptr %106, align 4, !tbaa !15
  br label %107

107:                                              ; preds = %96
  %108 = load i32, ptr %10, align 4, !tbaa !15
  %109 = add nsw i32 %108, 1
  store i32 %109, ptr %10, align 4, !tbaa !15
  br label %92, !llvm.loop !21

110:                                              ; preds = %95
  %111 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 0
  %112 = getelementptr inbounds [4 x i32], ptr %111, i64 0, i64 0
  %113 = load i32, ptr %112, align 4, !tbaa !15
  %114 = call i64 @offset_from_s32(i32 noundef %113)
  store i64 %114, ptr %11, align 8, !tbaa !23
  %115 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 0
  %116 = load i32, ptr %115, align 16, !tbaa !15
  %117 = call i64 @trailing_zero_bytes(i32 noundef %116)
  store i64 %117, ptr %12, align 8, !tbaa !23
  br label %118

118:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 40, ptr %13) #6
  %119 = load ptr, ptr %2, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %119, i32 0, i32 0
  %121 = load ptr, ptr %120, align 8, !tbaa !14
  %122 = load ptr, ptr %2, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %122, i32 0, i32 1
  %124 = load i64, ptr %123, align 8, !tbaa !24
  %125 = load ptr, ptr %2, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %125, i32 0, i32 2
  %127 = load i64, ptr %126, align 8, !tbaa !25
  %128 = load ptr, ptr %2, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %128, i32 0, i32 5
  %130 = load i64, ptr %129, align 8, !tbaa !20
  %131 = load i64, ptr %11, align 8, !tbaa !23
  %132 = load ptr, ptr %2, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %132, i32 0, i32 3
  %134 = load i64, ptr %133, align 8, !tbaa !9
  %135 = load i64, ptr %12, align 8, !tbaa !23
  %136 = call i32 @lzvn_find_matchN(ptr noundef %121, i64 noundef %124, i64 noundef %127, i64 noundef %130, i64 noundef %131, i64 noundef %134, i64 noundef %135, ptr noundef %13)
  %137 = icmp ne i32 %136, 0
  br i1 %137, label %138, label %162

138:                                              ; preds = %118
  br label %139

139:                                              ; preds = %138
  %140 = getelementptr inbounds %struct.lzvn_match_info, ptr %13, i32 0, i32 4
  %141 = load i64, ptr %140, align 8, !tbaa !26
  %142 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %143 = load i64, ptr %142, align 8, !tbaa !26
  %144 = icmp sgt i64 %141, %143
  br i1 %144, label %158, label %145

145:                                              ; preds = %139
  %146 = getelementptr inbounds %struct.lzvn_match_info, ptr %13, i32 0, i32 4
  %147 = load i64, ptr %146, align 8, !tbaa !26
  %148 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %149 = load i64, ptr %148, align 8, !tbaa !26
  %150 = icmp eq i64 %147, %149
  br i1 %150, label %151, label %159

151:                                              ; preds = %145
  %152 = getelementptr inbounds %struct.lzvn_match_info, ptr %13, i32 0, i32 1
  %153 = load i64, ptr %152, align 8, !tbaa !27
  %154 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 1
  %155 = load i64, ptr %154, align 8, !tbaa !27
  %156 = add nsw i64 %155, 1
  %157 = icmp sgt i64 %153, %156
  br i1 %157, label %158, label %159

158:                                              ; preds = %151, %139
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %13, i64 40, i1 false), !tbaa.struct !28
  br label %159

159:                                              ; preds = %158, %151, %145
  br label %160

160:                                              ; preds = %159
  br label %161

161:                                              ; preds = %160
  br label %162

162:                                              ; preds = %161, %118
  call void @llvm.lifetime.end.p0(i64 40, ptr %13) #6
  br label %163

163:                                              ; preds = %162
  br label %164

164:                                              ; preds = %163
  %165 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 0
  %166 = getelementptr inbounds [4 x i32], ptr %165, i64 0, i64 1
  %167 = load i32, ptr %166, align 4, !tbaa !15
  %168 = call i64 @offset_from_s32(i32 noundef %167)
  store i64 %168, ptr %11, align 8, !tbaa !23
  %169 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 1
  %170 = load i32, ptr %169, align 4, !tbaa !15
  %171 = call i64 @trailing_zero_bytes(i32 noundef %170)
  store i64 %171, ptr %12, align 8, !tbaa !23
  br label %172

172:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 40, ptr %14) #6
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %173, i32 0, i32 0
  %175 = load ptr, ptr %174, align 8, !tbaa !14
  %176 = load ptr, ptr %2, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %176, i32 0, i32 1
  %178 = load i64, ptr %177, align 8, !tbaa !24
  %179 = load ptr, ptr %2, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %179, i32 0, i32 2
  %181 = load i64, ptr %180, align 8, !tbaa !25
  %182 = load ptr, ptr %2, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %182, i32 0, i32 5
  %184 = load i64, ptr %183, align 8, !tbaa !20
  %185 = load i64, ptr %11, align 8, !tbaa !23
  %186 = load ptr, ptr %2, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %186, i32 0, i32 3
  %188 = load i64, ptr %187, align 8, !tbaa !9
  %189 = load i64, ptr %12, align 8, !tbaa !23
  %190 = call i32 @lzvn_find_matchN(ptr noundef %175, i64 noundef %178, i64 noundef %181, i64 noundef %184, i64 noundef %185, i64 noundef %188, i64 noundef %189, ptr noundef %14)
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %216

192:                                              ; preds = %172
  br label %193

193:                                              ; preds = %192
  %194 = getelementptr inbounds %struct.lzvn_match_info, ptr %14, i32 0, i32 4
  %195 = load i64, ptr %194, align 8, !tbaa !26
  %196 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %197 = load i64, ptr %196, align 8, !tbaa !26
  %198 = icmp sgt i64 %195, %197
  br i1 %198, label %212, label %199

199:                                              ; preds = %193
  %200 = getelementptr inbounds %struct.lzvn_match_info, ptr %14, i32 0, i32 4
  %201 = load i64, ptr %200, align 8, !tbaa !26
  %202 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %203 = load i64, ptr %202, align 8, !tbaa !26
  %204 = icmp eq i64 %201, %203
  br i1 %204, label %205, label %213

205:                                              ; preds = %199
  %206 = getelementptr inbounds %struct.lzvn_match_info, ptr %14, i32 0, i32 1
  %207 = load i64, ptr %206, align 8, !tbaa !27
  %208 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 1
  %209 = load i64, ptr %208, align 8, !tbaa !27
  %210 = add nsw i64 %209, 1
  %211 = icmp sgt i64 %207, %210
  br i1 %211, label %212, label %213

212:                                              ; preds = %205, %193
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %14, i64 40, i1 false), !tbaa.struct !28
  br label %213

213:                                              ; preds = %212, %205, %199
  br label %214

214:                                              ; preds = %213
  br label %215

215:                                              ; preds = %214
  br label %216

216:                                              ; preds = %215, %172
  call void @llvm.lifetime.end.p0(i64 40, ptr %14) #6
  br label %217

217:                                              ; preds = %216
  br label %218

218:                                              ; preds = %217
  %219 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 0
  %220 = getelementptr inbounds [4 x i32], ptr %219, i64 0, i64 2
  %221 = load i32, ptr %220, align 4, !tbaa !15
  %222 = call i64 @offset_from_s32(i32 noundef %221)
  store i64 %222, ptr %11, align 8, !tbaa !23
  %223 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 2
  %224 = load i32, ptr %223, align 8, !tbaa !15
  %225 = call i64 @trailing_zero_bytes(i32 noundef %224)
  store i64 %225, ptr %12, align 8, !tbaa !23
  br label %226

226:                                              ; preds = %218
  call void @llvm.lifetime.start.p0(i64 40, ptr %15) #6
  %227 = load ptr, ptr %2, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %227, i32 0, i32 0
  %229 = load ptr, ptr %228, align 8, !tbaa !14
  %230 = load ptr, ptr %2, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %230, i32 0, i32 1
  %232 = load i64, ptr %231, align 8, !tbaa !24
  %233 = load ptr, ptr %2, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %233, i32 0, i32 2
  %235 = load i64, ptr %234, align 8, !tbaa !25
  %236 = load ptr, ptr %2, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %236, i32 0, i32 5
  %238 = load i64, ptr %237, align 8, !tbaa !20
  %239 = load i64, ptr %11, align 8, !tbaa !23
  %240 = load ptr, ptr %2, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %240, i32 0, i32 3
  %242 = load i64, ptr %241, align 8, !tbaa !9
  %243 = load i64, ptr %12, align 8, !tbaa !23
  %244 = call i32 @lzvn_find_matchN(ptr noundef %229, i64 noundef %232, i64 noundef %235, i64 noundef %238, i64 noundef %239, i64 noundef %242, i64 noundef %243, ptr noundef %15)
  %245 = icmp ne i32 %244, 0
  br i1 %245, label %246, label %270

246:                                              ; preds = %226
  br label %247

247:                                              ; preds = %246
  %248 = getelementptr inbounds %struct.lzvn_match_info, ptr %15, i32 0, i32 4
  %249 = load i64, ptr %248, align 8, !tbaa !26
  %250 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %251 = load i64, ptr %250, align 8, !tbaa !26
  %252 = icmp sgt i64 %249, %251
  br i1 %252, label %266, label %253

253:                                              ; preds = %247
  %254 = getelementptr inbounds %struct.lzvn_match_info, ptr %15, i32 0, i32 4
  %255 = load i64, ptr %254, align 8, !tbaa !26
  %256 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %257 = load i64, ptr %256, align 8, !tbaa !26
  %258 = icmp eq i64 %255, %257
  br i1 %258, label %259, label %267

259:                                              ; preds = %253
  %260 = getelementptr inbounds %struct.lzvn_match_info, ptr %15, i32 0, i32 1
  %261 = load i64, ptr %260, align 8, !tbaa !27
  %262 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 1
  %263 = load i64, ptr %262, align 8, !tbaa !27
  %264 = add nsw i64 %263, 1
  %265 = icmp sgt i64 %261, %264
  br i1 %265, label %266, label %267

266:                                              ; preds = %259, %247
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %15, i64 40, i1 false), !tbaa.struct !28
  br label %267

267:                                              ; preds = %266, %259, %253
  br label %268

268:                                              ; preds = %267
  br label %269

269:                                              ; preds = %268
  br label %270

270:                                              ; preds = %269, %226
  call void @llvm.lifetime.end.p0(i64 40, ptr %15) #6
  br label %271

271:                                              ; preds = %270
  br label %272

272:                                              ; preds = %271
  %273 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %6, i32 0, i32 0
  %274 = getelementptr inbounds [4 x i32], ptr %273, i64 0, i64 3
  %275 = load i32, ptr %274, align 4, !tbaa !15
  %276 = call i64 @offset_from_s32(i32 noundef %275)
  store i64 %276, ptr %11, align 8, !tbaa !23
  %277 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 3
  %278 = load i32, ptr %277, align 4, !tbaa !15
  %279 = call i64 @trailing_zero_bytes(i32 noundef %278)
  store i64 %279, ptr %12, align 8, !tbaa !23
  br label %280

280:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 40, ptr %16) #6
  %281 = load ptr, ptr %2, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %281, i32 0, i32 0
  %283 = load ptr, ptr %282, align 8, !tbaa !14
  %284 = load ptr, ptr %2, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %284, i32 0, i32 1
  %286 = load i64, ptr %285, align 8, !tbaa !24
  %287 = load ptr, ptr %2, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %287, i32 0, i32 2
  %289 = load i64, ptr %288, align 8, !tbaa !25
  %290 = load ptr, ptr %2, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %290, i32 0, i32 5
  %292 = load i64, ptr %291, align 8, !tbaa !20
  %293 = load i64, ptr %11, align 8, !tbaa !23
  %294 = load ptr, ptr %2, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %294, i32 0, i32 3
  %296 = load i64, ptr %295, align 8, !tbaa !9
  %297 = load i64, ptr %12, align 8, !tbaa !23
  %298 = call i32 @lzvn_find_matchN(ptr noundef %283, i64 noundef %286, i64 noundef %289, i64 noundef %292, i64 noundef %293, i64 noundef %296, i64 noundef %297, ptr noundef %16)
  %299 = icmp ne i32 %298, 0
  br i1 %299, label %300, label %324

300:                                              ; preds = %280
  br label %301

301:                                              ; preds = %300
  %302 = getelementptr inbounds %struct.lzvn_match_info, ptr %16, i32 0, i32 4
  %303 = load i64, ptr %302, align 8, !tbaa !26
  %304 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %305 = load i64, ptr %304, align 8, !tbaa !26
  %306 = icmp sgt i64 %303, %305
  br i1 %306, label %320, label %307

307:                                              ; preds = %301
  %308 = getelementptr inbounds %struct.lzvn_match_info, ptr %16, i32 0, i32 4
  %309 = load i64, ptr %308, align 8, !tbaa !26
  %310 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %311 = load i64, ptr %310, align 8, !tbaa !26
  %312 = icmp eq i64 %309, %311
  br i1 %312, label %313, label %321

313:                                              ; preds = %307
  %314 = getelementptr inbounds %struct.lzvn_match_info, ptr %16, i32 0, i32 1
  %315 = load i64, ptr %314, align 8, !tbaa !27
  %316 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 1
  %317 = load i64, ptr %316, align 8, !tbaa !27
  %318 = add nsw i64 %317, 1
  %319 = icmp sgt i64 %315, %318
  br i1 %319, label %320, label %321

320:                                              ; preds = %313, %301
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %16, i64 40, i1 false), !tbaa.struct !28
  br label %321

321:                                              ; preds = %320, %313, %307
  br label %322

322:                                              ; preds = %321
  br label %323

323:                                              ; preds = %322
  br label %324

324:                                              ; preds = %323, %280
  call void @llvm.lifetime.end.p0(i64 40, ptr %16) #6
  br label %325

325:                                              ; preds = %324
  br label %326

326:                                              ; preds = %325
  %327 = load ptr, ptr %2, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %327, i32 0, i32 10
  %329 = load i64, ptr %328, align 8, !tbaa !29
  %330 = icmp ne i64 %329, 0
  br i1 %330, label %331, label %385

331:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 40, ptr %17) #6
  %332 = load ptr, ptr %2, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %332, i32 0, i32 0
  %334 = load ptr, ptr %333, align 8, !tbaa !14
  %335 = load ptr, ptr %2, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %335, i32 0, i32 1
  %337 = load i64, ptr %336, align 8, !tbaa !24
  %338 = load ptr, ptr %2, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %338, i32 0, i32 2
  %340 = load i64, ptr %339, align 8, !tbaa !25
  %341 = load ptr, ptr %2, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %341, i32 0, i32 5
  %343 = load i64, ptr %342, align 8, !tbaa !20
  %344 = load ptr, ptr %2, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %344, i32 0, i32 3
  %346 = load i64, ptr %345, align 8, !tbaa !9
  %347 = load ptr, ptr %2, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %347, i32 0, i32 10
  %349 = load i64, ptr %348, align 8, !tbaa !29
  %350 = sub nsw i64 %346, %349
  %351 = load ptr, ptr %2, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %351, i32 0, i32 3
  %353 = load i64, ptr %352, align 8, !tbaa !9
  %354 = call i32 @lzvn_find_match(ptr noundef %334, i64 noundef %337, i64 noundef %340, i64 noundef %343, i64 noundef %350, i64 noundef %353, ptr noundef %17)
  %355 = icmp ne i32 %354, 0
  br i1 %355, label %356, label %384

356:                                              ; preds = %331
  %357 = getelementptr inbounds %struct.lzvn_match_info, ptr %17, i32 0, i32 2
  %358 = load i64, ptr %357, align 8, !tbaa !30
  %359 = sub nsw i64 %358, 1
  %360 = getelementptr inbounds %struct.lzvn_match_info, ptr %17, i32 0, i32 4
  store i64 %359, ptr %360, align 8, !tbaa !26
  br label %361

361:                                              ; preds = %356
  %362 = getelementptr inbounds %struct.lzvn_match_info, ptr %17, i32 0, i32 4
  %363 = load i64, ptr %362, align 8, !tbaa !26
  %364 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %365 = load i64, ptr %364, align 8, !tbaa !26
  %366 = icmp sgt i64 %363, %365
  br i1 %366, label %380, label %367

367:                                              ; preds = %361
  %368 = getelementptr inbounds %struct.lzvn_match_info, ptr %17, i32 0, i32 4
  %369 = load i64, ptr %368, align 8, !tbaa !26
  %370 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %371 = load i64, ptr %370, align 8, !tbaa !26
  %372 = icmp eq i64 %369, %371
  br i1 %372, label %373, label %381

373:                                              ; preds = %367
  %374 = getelementptr inbounds %struct.lzvn_match_info, ptr %17, i32 0, i32 1
  %375 = load i64, ptr %374, align 8, !tbaa !27
  %376 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 1
  %377 = load i64, ptr %376, align 8, !tbaa !27
  %378 = add nsw i64 %377, 1
  %379 = icmp sgt i64 %375, %378
  br i1 %379, label %380, label %381

380:                                              ; preds = %373, %361
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %17, i64 40, i1 false), !tbaa.struct !28
  br label %381

381:                                              ; preds = %380, %373, %367
  br label %382

382:                                              ; preds = %381
  br label %383

383:                                              ; preds = %382
  br label %384

384:                                              ; preds = %383, %331
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #6
  br label %385

385:                                              ; preds = %384, %326
  %386 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 2
  %387 = load i64, ptr %386, align 8, !tbaa !30
  %388 = icmp eq i64 %387, 0
  br i1 %388, label %389, label %428

389:                                              ; preds = %385
  %390 = load ptr, ptr %2, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %390, i32 0, i32 3
  %392 = load i64, ptr %391, align 8, !tbaa !9
  %393 = load ptr, ptr %2, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %393, i32 0, i32 5
  %395 = load i64, ptr %394, align 8, !tbaa !20
  %396 = sub nsw i64 %392, %395
  %397 = icmp sge i64 %396, 400
  br i1 %397, label %398, label %427

398:                                              ; preds = %389
  %399 = load ptr, ptr %2, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %399, i32 0, i32 9
  %401 = getelementptr inbounds %struct.lzvn_match_info, ptr %400, i32 0, i32 2
  %402 = load i64, ptr %401, align 8, !tbaa !31
  %403 = icmp ne i64 %402, 0
  br i1 %403, label %404, label %417

404:                                              ; preds = %398
  br label %405

405:                                              ; preds = %404
  %406 = load ptr, ptr %2, align 8, !tbaa !5
  %407 = load ptr, ptr %2, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %407, i32 0, i32 9
  %409 = call i64 @lzvn_emit_match(ptr noundef %406, ptr noundef byval(%struct.lzvn_match_info) align 8 %408)
  %410 = icmp eq i64 %409, 0
  br i1 %410, label %411, label %412

411:                                              ; preds = %405
  store i32 1, ptr %18, align 4
  br label %491

412:                                              ; preds = %405
  br label %413

413:                                              ; preds = %412
  br label %414

414:                                              ; preds = %413
  %415 = load ptr, ptr %2, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %415, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %416, ptr align 8 %3, i64 40, i1 false), !tbaa.struct !28
  br label %426

417:                                              ; preds = %398
  br label %418

418:                                              ; preds = %417
  %419 = load ptr, ptr %2, align 8, !tbaa !5
  %420 = call i64 @lzvn_emit_literal(ptr noundef %419, i64 noundef 271)
  %421 = icmp eq i64 %420, 0
  br i1 %421, label %422, label %423

422:                                              ; preds = %418
  store i32 1, ptr %18, align 4
  br label %491

423:                                              ; preds = %418
  br label %424

424:                                              ; preds = %423
  br label %425

425:                                              ; preds = %424
  br label %426

426:                                              ; preds = %425, %414
  br label %427

427:                                              ; preds = %426, %389
  br label %484

428:                                              ; preds = %385
  %429 = load ptr, ptr %2, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %429, i32 0, i32 9
  %431 = getelementptr inbounds %struct.lzvn_match_info, ptr %430, i32 0, i32 2
  %432 = load i64, ptr %431, align 8, !tbaa !31
  %433 = icmp eq i64 %432, 0
  br i1 %433, label %434, label %437

434:                                              ; preds = %428
  %435 = load ptr, ptr %2, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %435, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %436, ptr align 8 %8, i64 40, i1 false), !tbaa.struct !28
  br label %483

437:                                              ; preds = %428
  %438 = load ptr, ptr %2, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %438, i32 0, i32 9
  %440 = getelementptr inbounds %struct.lzvn_match_info, ptr %439, i32 0, i32 1
  %441 = load i64, ptr %440, align 8, !tbaa !32
  %442 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 0
  %443 = load i64, ptr %442, align 8, !tbaa !33
  %444 = icmp sle i64 %441, %443
  br i1 %444, label %445, label %458

445:                                              ; preds = %437
  br label %446

446:                                              ; preds = %445
  %447 = load ptr, ptr %2, align 8, !tbaa !5
  %448 = load ptr, ptr %2, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %448, i32 0, i32 9
  %450 = call i64 @lzvn_emit_match(ptr noundef %447, ptr noundef byval(%struct.lzvn_match_info) align 8 %449)
  %451 = icmp eq i64 %450, 0
  br i1 %451, label %452, label %453

452:                                              ; preds = %446
  store i32 1, ptr %18, align 4
  br label %491

453:                                              ; preds = %446
  br label %454

454:                                              ; preds = %453
  br label %455

455:                                              ; preds = %454
  %456 = load ptr, ptr %2, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %456, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %457, ptr align 8 %8, i64 40, i1 false), !tbaa.struct !28
  br label %482

458:                                              ; preds = %437
  %459 = getelementptr inbounds %struct.lzvn_match_info, ptr %8, i32 0, i32 4
  %460 = load i64, ptr %459, align 8, !tbaa !26
  %461 = load ptr, ptr %2, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %461, i32 0, i32 9
  %463 = getelementptr inbounds %struct.lzvn_match_info, ptr %462, i32 0, i32 4
  %464 = load i64, ptr %463, align 8, !tbaa !34
  %465 = icmp sgt i64 %460, %464
  br i1 %465, label %466, label %469

466:                                              ; preds = %458
  %467 = load ptr, ptr %2, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %467, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %468, ptr align 8 %8, i64 40, i1 false), !tbaa.struct !28
  br label %469

469:                                              ; preds = %466, %458
  br label %470

470:                                              ; preds = %469
  %471 = load ptr, ptr %2, align 8, !tbaa !5
  %472 = load ptr, ptr %2, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %472, i32 0, i32 9
  %474 = call i64 @lzvn_emit_match(ptr noundef %471, ptr noundef byval(%struct.lzvn_match_info) align 8 %473)
  %475 = icmp eq i64 %474, 0
  br i1 %475, label %476, label %477

476:                                              ; preds = %470
  store i32 1, ptr %18, align 4
  br label %491

477:                                              ; preds = %470
  br label %478

478:                                              ; preds = %477
  br label %479

479:                                              ; preds = %478
  %480 = load ptr, ptr %2, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %480, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %481, ptr align 8 %3, i64 40, i1 false), !tbaa.struct !28
  br label %482

482:                                              ; preds = %479, %455
  br label %483

483:                                              ; preds = %482, %434
  br label %484

484:                                              ; preds = %483, %427, %90
  %485 = load ptr, ptr %2, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %485, i32 0, i32 11
  %487 = load ptr, ptr %486, align 8, !tbaa !17
  %488 = load i32, ptr %5, align 4, !tbaa !15
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %487, i64 %489
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %490, ptr align 4 %7, i64 32, i1 false), !tbaa.struct !18
  store i32 0, ptr %18, align 4
  br label %491

491:                                              ; preds = %484, %476, %452, %422, %411
  call void @llvm.lifetime.end.p0(i64 32, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  %492 = load i32, ptr %18, align 4
  switch i32 %492, label %500 [
    i32 0, label %493
  ]

493:                                              ; preds = %491
  br label %494

494:                                              ; preds = %493
  %495 = load ptr, ptr %2, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.lzvn_encoder_state, ptr %495, i32 0, i32 3
  %497 = load i64, ptr %496, align 8, !tbaa !9
  %498 = add nsw i64 %497, 1
  store i64 %498, ptr %496, align 8, !tbaa !9
  br label %19, !llvm.loop !35

499:                                              ; preds = %19
  store i32 0, ptr %18, align 4
  br label %500

500:                                              ; preds = %499, %491
  call void @llvm.lifetime.end.p0(i64 40, ptr %3) #6
  %501 = load i32, ptr %18, align 4
  switch i32 %501, label %503 [
    i32 0, label %502
    i32 1, label %502
  ]

502:                                              ; preds = %500, %500
  ret void

503:                                              ; preds = %500
  unreachable
}

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

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @load4(ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @hash3i(i32 noundef) #4

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @offset_to_s32(i64 noundef) #4

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @offset_from_s32(i32 noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @trailing_zero_bytes(i32 noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @lzvn_find_matchN(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @lzvn_find_match(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @lzvn_emit_match(ptr noundef, ptr noundef byval(%struct.lzvn_match_info) align 8) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @lzvn_emit_literal(ptr noundef, i64 noundef) #4

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { alwaysinline 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 #4 = { inlinehint 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 #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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, !11, i64 24}
!10 = !{!"", !6, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !12, i64 72, !11, i64 112, !6, i64 120}
!11 = !{!"long", !7, i64 0}
!12 = !{!"", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32}
!13 = !{!10, !11, i64 32}
!14 = !{!10, !6, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!10, !6, i64 120}
!18 = !{i64 0, i64 16, !19, i64 16, i64 16, !19}
!19 = !{!7, !7, i64 0}
!20 = !{!10, !11, i64 40}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!11, !11, i64 0}
!24 = !{!10, !11, i64 8}
!25 = !{!10, !11, i64 16}
!26 = !{!12, !11, i64 32}
!27 = !{!12, !11, i64 8}
!28 = !{i64 0, i64 8, !23, i64 8, i64 8, !23, i64 16, i64 8, !23, i64 24, i64 8, !23, i64 32, i64 8, !23}
!29 = !{!10, !11, i64 112}
!30 = !{!12, !11, i64 16}
!31 = !{!10, !11, i64 88}
!32 = !{!10, !11, i64 80}
!33 = !{!12, !11, i64 0}
!34 = !{!10, !11, i64 104}
!35 = distinct !{!35, !22}


; 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.lzvn_match_info = type { i64, i64, i64, i64, i64 }
%struct.lzvn_encode_entry_type = type { [4 x i32], [4 x i32] }

; Function Attrs: nounwind uwtable
define dso_local void @lzvn_encode(ptr noundef %0) local_unnamed_addr #0 {
  %2 = alloca %struct.lzvn_match_info, align 8
  %3 = alloca %struct.lzvn_match_info, align 8
  %4 = alloca %struct.lzvn_match_info, align 8
  %5 = alloca %struct.lzvn_match_info, align 8
  %6 = alloca %struct.lzvn_match_info, align 8
  %7 = alloca %struct.lzvn_match_info, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %2)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %2, i8 0, i64 40, i1 false)
  %8 = getelementptr inbounds i8, ptr %0, i64 24
  %9 = getelementptr inbounds i8, ptr %0, i64 32
  %10 = load i64, ptr %8, align 8, !tbaa !5
  %11 = load i64, ptr %9, align 8, !tbaa !12
  %12 = icmp slt i64 %10, %11
  br i1 %12, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %1
  %13 = getelementptr inbounds i8, ptr %0, i64 120
  %14 = getelementptr inbounds i8, ptr %0, i64 40
  %15 = getelementptr inbounds i8, ptr %0, i64 8
  %16 = getelementptr inbounds i8, ptr %0, i64 16
  %17 = getelementptr inbounds i8, ptr %3, i64 32
  %18 = getelementptr inbounds i8, ptr %3, i64 8
  %.sroa.15.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 16
  %19 = getelementptr inbounds i8, ptr %4, i64 32
  %20 = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.15.0..sroa_idx38 = getelementptr inbounds i8, ptr %4, i64 16
  %21 = getelementptr inbounds i8, ptr %5, i64 32
  %22 = getelementptr inbounds i8, ptr %5, i64 8
  %.sroa.15.0..sroa_idx40 = getelementptr inbounds i8, ptr %5, i64 16
  %23 = getelementptr inbounds i8, ptr %6, i64 32
  %24 = getelementptr inbounds i8, ptr %6, i64 8
  %.sroa.15.0..sroa_idx42 = getelementptr inbounds i8, ptr %6, i64 16
  %25 = getelementptr inbounds i8, ptr %0, i64 112
  %26 = getelementptr inbounds i8, ptr %7, i64 16
  %27 = getelementptr inbounds i8, ptr %7, i64 8
  %.sroa.16.0..sroa_idx58 = getelementptr inbounds i8, ptr %7, i64 24
  %28 = getelementptr inbounds i8, ptr %0, i64 72
  %29 = getelementptr inbounds i8, ptr %0, i64 88
  %30 = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.16.0..sroa_idx62 = getelementptr inbounds i8, ptr %0, i64 96
  %.sroa.1666.0..sroa_idx77 = getelementptr inbounds i8, ptr %0, i64 104
  br label %31

31:                                               ; preds = %.lr.ph, %.critedge
  %32 = phi i64 [ %10, %.lr.ph ], [ %190, %.critedge ]
  %33 = load ptr, ptr %0, align 8, !tbaa !13
  %34 = getelementptr inbounds i8, ptr %33, i64 %32
  %35 = call i32 @load4(ptr noundef %34)
  %36 = call i32 @hash3i(i32 noundef %35)
  %37 = load ptr, ptr %13, align 8, !tbaa !14
  %38 = sext i32 %36 to i64
  %39 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %37, i64 %38
  %.sroa.0186.0.copyload = load i32, ptr %39, align 4
  %.sroa.5.0..sroa_idx187 = getelementptr inbounds i8, ptr %39, i64 4
  %.sroa.5.0.copyload = load i32, ptr %.sroa.5.0..sroa_idx187, align 4
  %.sroa.6188.0..sroa_idx = getelementptr inbounds i8, ptr %39, i64 8
  %.sroa.6188.0.copyload = load i32, ptr %.sroa.6188.0..sroa_idx, align 4
  %.sroa.7.0..sroa_idx189 = getelementptr inbounds i8, ptr %39, i64 12
  %.sroa.7.0.copyload = load i32, ptr %.sroa.7.0..sroa_idx189, align 4, !tbaa !15
  %.sroa.8.0..sroa_idx190 = getelementptr inbounds i8, ptr %39, i64 16
  %.sroa.8.0.copyload = load i32, ptr %.sroa.8.0..sroa_idx190, align 4
  %.sroa.10.0..sroa_idx192 = getelementptr inbounds i8, ptr %39, i64 20
  %.sroa.10.0.copyload193 = load i32, ptr %.sroa.10.0..sroa_idx192, align 4
  %.sroa.12.0..sroa_idx = getelementptr inbounds i8, ptr %39, i64 24
  %.sroa.12.0.copyload = load i32, ptr %.sroa.12.0..sroa_idx, align 4
  %.sroa.14.0..sroa_idx = getelementptr inbounds i8, ptr %39, i64 28
  %.sroa.14.0.copyload = load i32, ptr %.sroa.14.0..sroa_idx, align 4, !tbaa !15
  %40 = load i64, ptr %8, align 8, !tbaa !5
  %41 = call i32 @offset_to_s32(i64 noundef %40)
  %42 = load i64, ptr %8, align 8, !tbaa !5
  %43 = load i64, ptr %14, align 8, !tbaa !16
  %44 = icmp slt i64 %42, %43
  br i1 %44, label %.critedge, label %.preheader.preheader

.preheader.preheader:                             ; preds = %31
  %45 = xor i32 %.sroa.8.0.copyload, %35
  %46 = xor i32 %.sroa.10.0.copyload193, %35
  %47 = xor i32 %.sroa.12.0.copyload, %35
  %48 = xor i32 %.sroa.14.0.copyload, %35
  %49 = call i64 @offset_from_s32(i32 noundef %.sroa.0186.0.copyload)
  %50 = call i64 @trailing_zero_bytes(i32 noundef %45)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %3) #6
  %51 = load ptr, ptr %0, align 8, !tbaa !13
  %52 = load i64, ptr %15, align 8, !tbaa !17
  %53 = load i64, ptr %16, align 8, !tbaa !18
  %54 = load i64, ptr %14, align 8, !tbaa !16
  %55 = load i64, ptr %8, align 8, !tbaa !5
  %56 = call i32 @lzvn_find_matchN(ptr noundef %51, i64 noundef %52, i64 noundef %53, i64 noundef %54, i64 noundef %49, i64 noundef %55, i64 noundef %50, ptr noundef nonnull %3)
  %.not = icmp eq i32 %56, 0
  br i1 %.not, label %65, label %57

57:                                               ; preds = %.preheader.preheader
  %58 = load i64, ptr %17, align 8, !tbaa !19
  %59 = icmp sgt i64 %58, 0
  %.sroa.10.0.copyload.pre = load i64, ptr %18, align 8
  br i1 %59, label %63, label %60

60:                                               ; preds = %57
  %61 = icmp eq i64 %58, 0
  %62 = icmp sgt i64 %.sroa.10.0.copyload.pre, 1
  %or.cond = select i1 %61, i1 %62, i1 false
  br i1 %or.cond, label %63, label %65

63:                                               ; preds = %60, %57
  %.sroa.0.0.copyload = load i64, ptr %3, align 8, !tbaa !19
  %64 = load <2 x i64>, ptr %.sroa.15.0..sroa_idx, align 8, !tbaa !19
  br label %65

65:                                               ; preds = %60, %63, %.preheader.preheader
  %.sroa.0.1 = phi i64 [ %.sroa.0.0.copyload, %63 ], [ 0, %60 ], [ 0, %.preheader.preheader ]
  %.sroa.10.1 = phi i64 [ %.sroa.10.0.copyload.pre, %63 ], [ 0, %60 ], [ 0, %.preheader.preheader ]
  %.sroa.1666.1 = phi i64 [ %58, %63 ], [ 0, %60 ], [ 0, %.preheader.preheader ]
  %66 = phi <2 x i64> [ %64, %63 ], [ zeroinitializer, %60 ], [ zeroinitializer, %.preheader.preheader ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #6
  %67 = call i64 @offset_from_s32(i32 noundef %.sroa.5.0.copyload)
  %68 = call i64 @trailing_zero_bytes(i32 noundef %46)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #6
  %69 = load ptr, ptr %0, align 8, !tbaa !13
  %70 = load i64, ptr %15, align 8, !tbaa !17
  %71 = load i64, ptr %16, align 8, !tbaa !18
  %72 = load i64, ptr %14, align 8, !tbaa !16
  %73 = load i64, ptr %8, align 8, !tbaa !5
  %74 = call i32 @lzvn_find_matchN(ptr noundef %69, i64 noundef %70, i64 noundef %71, i64 noundef %72, i64 noundef %67, i64 noundef %73, i64 noundef %68, ptr noundef nonnull %4)
  %.not175 = icmp eq i32 %74, 0
  br i1 %.not175, label %86, label %75

75:                                               ; preds = %65
  %76 = load i64, ptr %19, align 8, !tbaa !19
  %77 = icmp sgt i64 %76, %.sroa.1666.1
  br i1 %77, label %._crit_edge, label %78

._crit_edge:                                      ; preds = %75
  %.sroa.10.0.copyload21.pre = load i64, ptr %20, align 8, !tbaa !19
  br label %84

78:                                               ; preds = %75
  %79 = icmp eq i64 %76, %.sroa.1666.1
  br i1 %79, label %80, label %86

80:                                               ; preds = %78
  %81 = load i64, ptr %20, align 8, !tbaa !19
  %82 = add nsw i64 %.sroa.10.1, 1
  %83 = icmp sgt i64 %81, %82
  br i1 %83, label %84, label %86

84:                                               ; preds = %._crit_edge, %80
  %.sroa.10.0.copyload21 = phi i64 [ %.sroa.10.0.copyload21.pre, %._crit_edge ], [ %81, %80 ]
  %.sroa.0.0.copyload13 = load i64, ptr %4, align 8, !tbaa !19
  %85 = load <2 x i64>, ptr %.sroa.15.0..sroa_idx38, align 8, !tbaa !19
  br label %86

86:                                               ; preds = %78, %80, %84, %65
  %.sroa.0.2 = phi i64 [ %.sroa.0.0.copyload13, %84 ], [ %.sroa.0.1, %80 ], [ %.sroa.0.1, %78 ], [ %.sroa.0.1, %65 ]
  %.sroa.10.2 = phi i64 [ %.sroa.10.0.copyload21, %84 ], [ %.sroa.10.1, %80 ], [ %.sroa.10.1, %78 ], [ %.sroa.10.1, %65 ]
  %.sroa.1666.2 = phi i64 [ %76, %84 ], [ %.sroa.1666.1, %80 ], [ %.sroa.1666.1, %78 ], [ %.sroa.1666.1, %65 ]
  %87 = phi <2 x i64> [ %85, %84 ], [ %66, %80 ], [ %66, %78 ], [ %66, %65 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #6
  %88 = call i64 @offset_from_s32(i32 noundef %.sroa.6188.0.copyload)
  %89 = call i64 @trailing_zero_bytes(i32 noundef %47)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %5) #6
  %90 = load ptr, ptr %0, align 8, !tbaa !13
  %91 = load i64, ptr %15, align 8, !tbaa !17
  %92 = load i64, ptr %16, align 8, !tbaa !18
  %93 = load i64, ptr %14, align 8, !tbaa !16
  %94 = load i64, ptr %8, align 8, !tbaa !5
  %95 = call i32 @lzvn_find_matchN(ptr noundef %90, i64 noundef %91, i64 noundef %92, i64 noundef %93, i64 noundef %88, i64 noundef %94, i64 noundef %89, ptr noundef nonnull %5)
  %.not176 = icmp eq i32 %95, 0
  br i1 %.not176, label %107, label %96

96:                                               ; preds = %86
  %97 = load i64, ptr %21, align 8, !tbaa !19
  %98 = icmp sgt i64 %97, %.sroa.1666.2
  br i1 %98, label %._crit_edge197, label %99

._crit_edge197:                                   ; preds = %96
  %.sroa.10.0.copyload23.pre = load i64, ptr %22, align 8, !tbaa !19
  br label %105

99:                                               ; preds = %96
  %100 = icmp eq i64 %97, %.sroa.1666.2
  br i1 %100, label %101, label %107

101:                                              ; preds = %99
  %102 = load i64, ptr %22, align 8, !tbaa !19
  %103 = add nsw i64 %.sroa.10.2, 1
  %104 = icmp sgt i64 %102, %103
  br i1 %104, label %105, label %107

105:                                              ; preds = %._crit_edge197, %101
  %.sroa.10.0.copyload23 = phi i64 [ %.sroa.10.0.copyload23.pre, %._crit_edge197 ], [ %102, %101 ]
  %.sroa.0.0.copyload14 = load i64, ptr %5, align 8, !tbaa !19
  %106 = load <2 x i64>, ptr %.sroa.15.0..sroa_idx40, align 8, !tbaa !19
  br label %107

107:                                              ; preds = %99, %101, %105, %86
  %.sroa.0.3 = phi i64 [ %.sroa.0.0.copyload14, %105 ], [ %.sroa.0.2, %101 ], [ %.sroa.0.2, %99 ], [ %.sroa.0.2, %86 ]
  %.sroa.10.3 = phi i64 [ %.sroa.10.0.copyload23, %105 ], [ %.sroa.10.2, %101 ], [ %.sroa.10.2, %99 ], [ %.sroa.10.2, %86 ]
  %.sroa.1666.3 = phi i64 [ %97, %105 ], [ %.sroa.1666.2, %101 ], [ %.sroa.1666.2, %99 ], [ %.sroa.1666.2, %86 ]
  %108 = phi <2 x i64> [ %106, %105 ], [ %87, %101 ], [ %87, %99 ], [ %87, %86 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #6
  %109 = call i64 @offset_from_s32(i32 noundef %.sroa.7.0.copyload)
  %110 = call i64 @trailing_zero_bytes(i32 noundef %48)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %6) #6
  %111 = load ptr, ptr %0, align 8, !tbaa !13
  %112 = load i64, ptr %15, align 8, !tbaa !17
  %113 = load i64, ptr %16, align 8, !tbaa !18
  %114 = load i64, ptr %14, align 8, !tbaa !16
  %115 = load i64, ptr %8, align 8, !tbaa !5
  %116 = call i32 @lzvn_find_matchN(ptr noundef %111, i64 noundef %112, i64 noundef %113, i64 noundef %114, i64 noundef %109, i64 noundef %115, i64 noundef %110, ptr noundef nonnull %6)
  %.not177 = icmp eq i32 %116, 0
  br i1 %.not177, label %128, label %117

117:                                              ; preds = %107
  %118 = load i64, ptr %23, align 8, !tbaa !19
  %119 = icmp sgt i64 %118, %.sroa.1666.3
  br i1 %119, label %._crit_edge199, label %120

._crit_edge199:                                   ; preds = %117
  %.sroa.10.0.copyload25.pre = load i64, ptr %24, align 8, !tbaa !19
  br label %126

120:                                              ; preds = %117
  %121 = icmp eq i64 %118, %.sroa.1666.3
  br i1 %121, label %122, label %128

122:                                              ; preds = %120
  %123 = load i64, ptr %24, align 8, !tbaa !19
  %124 = add nsw i64 %.sroa.10.3, 1
  %125 = icmp sgt i64 %123, %124
  br i1 %125, label %126, label %128

126:                                              ; preds = %._crit_edge199, %122
  %.sroa.10.0.copyload25 = phi i64 [ %.sroa.10.0.copyload25.pre, %._crit_edge199 ], [ %123, %122 ]
  %.sroa.0.0.copyload15 = load i64, ptr %6, align 8, !tbaa !19
  %127 = load <2 x i64>, ptr %.sroa.15.0..sroa_idx42, align 8, !tbaa !19
  br label %128

128:                                              ; preds = %120, %122, %126, %107
  %.sroa.0.4 = phi i64 [ %.sroa.0.0.copyload15, %126 ], [ %.sroa.0.3, %122 ], [ %.sroa.0.3, %120 ], [ %.sroa.0.3, %107 ]
  %.sroa.10.4 = phi i64 [ %.sroa.10.0.copyload25, %126 ], [ %.sroa.10.3, %122 ], [ %.sroa.10.3, %120 ], [ %.sroa.10.3, %107 ]
  %.sroa.1666.4 = phi i64 [ %118, %126 ], [ %.sroa.1666.3, %122 ], [ %.sroa.1666.3, %120 ], [ %.sroa.1666.3, %107 ]
  %129 = phi <2 x i64> [ %127, %126 ], [ %108, %122 ], [ %108, %120 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #6
  %130 = load i64, ptr %25, align 8, !tbaa !20
  %.not178 = icmp eq i64 %130, 0
  %131 = extractelement <2 x i64> %129, i64 0
  %132 = extractelement <2 x i64> %129, i64 1
  br i1 %.not178, label %153, label %133

133:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #6
  %134 = load ptr, ptr %0, align 8, !tbaa !13
  %135 = load i64, ptr %15, align 8, !tbaa !17
  %136 = load i64, ptr %16, align 8, !tbaa !18
  %137 = load i64, ptr %14, align 8, !tbaa !16
  %138 = load i64, ptr %8, align 8, !tbaa !5
  %139 = sub nsw i64 %138, %130
  %140 = call i32 @lzvn_find_match(ptr noundef %134, i64 noundef %135, i64 noundef %136, i64 noundef %137, i64 noundef %139, i64 noundef %138, ptr noundef nonnull %7)
  %.not179 = icmp eq i32 %140, 0
  br i1 %.not179, label %152, label %141

141:                                              ; preds = %133
  %142 = load i64, ptr %26, align 8, !tbaa !19
  %143 = add nsw i64 %142, -1
  %144 = icmp sgt i64 %143, %.sroa.1666.4
  br i1 %144, label %._crit_edge201, label %145

._crit_edge201:                                   ; preds = %141
  %.sroa.10.0.copyload27.pre = load i64, ptr %27, align 8, !tbaa !19
  br label %151

145:                                              ; preds = %141
  %146 = icmp eq i64 %143, %.sroa.1666.4
  br i1 %146, label %147, label %152

147:                                              ; preds = %145
  %148 = load i64, ptr %27, align 8, !tbaa !19
  %149 = add nsw i64 %.sroa.10.4, 1
  %150 = icmp sgt i64 %148, %149
  br i1 %150, label %151, label %152

151:                                              ; preds = %._crit_edge201, %147
  %.sroa.10.0.copyload27 = phi i64 [ %.sroa.10.0.copyload27.pre, %._crit_edge201 ], [ %148, %147 ]
  %.sroa.0.0.copyload16 = load i64, ptr %7, align 8, !tbaa !19
  %.sroa.16.0.copyload59 = load i64, ptr %.sroa.16.0..sroa_idx58, align 8, !tbaa !19
  br label %152

152:                                              ; preds = %145, %147, %151, %133
  %.sroa.0.5 = phi i64 [ %.sroa.0.0.copyload16, %151 ], [ %.sroa.0.4, %147 ], [ %.sroa.0.4, %145 ], [ %.sroa.0.4, %133 ]
  %.sroa.10.5 = phi i64 [ %.sroa.10.0.copyload27, %151 ], [ %.sroa.10.4, %147 ], [ %.sroa.10.4, %145 ], [ %.sroa.10.4, %133 ]
  %.sroa.15.5 = phi i64 [ %142, %151 ], [ %131, %147 ], [ %131, %145 ], [ %131, %133 ]
  %.sroa.16.5 = phi i64 [ %.sroa.16.0.copyload59, %151 ], [ %132, %147 ], [ %132, %145 ], [ %132, %133 ]
  %.sroa.1666.5 = phi i64 [ %143, %151 ], [ %.sroa.1666.4, %147 ], [ %.sroa.1666.4, %145 ], [ %.sroa.1666.4, %133 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #6
  br label %153

153:                                              ; preds = %152, %128
  %.sroa.0.6 = phi i64 [ %.sroa.0.5, %152 ], [ %.sroa.0.4, %128 ]
  %.sroa.10.6 = phi i64 [ %.sroa.10.5, %152 ], [ %.sroa.10.4, %128 ]
  %.sroa.15.6 = phi i64 [ %.sroa.15.5, %152 ], [ %131, %128 ]
  %.sroa.16.6 = phi i64 [ %.sroa.16.5, %152 ], [ %132, %128 ]
  %.sroa.1666.6 = phi i64 [ %.sroa.1666.5, %152 ], [ %.sroa.1666.4, %128 ]
  %154 = icmp eq i64 %.sroa.15.6, 0
  br i1 %154, label %155, label %169

155:                                              ; preds = %153
  %156 = load i64, ptr %8, align 8, !tbaa !5
  %157 = load i64, ptr %14, align 8, !tbaa !16
  %158 = sub nsw i64 %156, %157
  %159 = icmp sgt i64 %158, 399
  br i1 %159, label %160, label %.critedge

160:                                              ; preds = %155
  %161 = load i64, ptr %29, align 8, !tbaa !21
  %.not181 = icmp eq i64 %161, 0
  br i1 %.not181, label %166, label %162

162:                                              ; preds = %160
  %163 = call i64 @lzvn_emit_match(ptr noundef nonnull %0, ptr noundef nonnull byval(%struct.lzvn_match_info) align 8 %28)
  %164 = icmp eq i64 %163, 0
  br i1 %164, label %.loopexit, label %165

165:                                              ; preds = %162
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %28, ptr noundef nonnull align 8 dereferenceable(40) %2, i64 40, i1 false), !tbaa.struct !22
  br label %.critedge

166:                                              ; preds = %160
  %167 = call i64 @lzvn_emit_literal(ptr noundef nonnull %0, i64 noundef 271)
  %168 = icmp eq i64 %167, 0
  br i1 %168, label %.loopexit, label %.critedge

169:                                              ; preds = %153
  %170 = load i64, ptr %29, align 8, !tbaa !21
  %171 = icmp eq i64 %170, 0
  br i1 %171, label %172, label %173

172:                                              ; preds = %169
  store i64 %.sroa.0.6, ptr %28, align 8, !tbaa !19
  store i64 %.sroa.10.6, ptr %30, align 8, !tbaa !19
  store i64 %.sroa.15.6, ptr %29, align 8, !tbaa !19
  store i64 %.sroa.16.6, ptr %.sroa.16.0..sroa_idx62, align 8, !tbaa !19
  store i64 %.sroa.1666.6, ptr %.sroa.1666.0..sroa_idx77, align 8, !tbaa !19
  br label %.critedge

173:                                              ; preds = %169
  %174 = load i64, ptr %30, align 8, !tbaa !23
  %.not180 = icmp sgt i64 %174, %.sroa.0.6
  br i1 %.not180, label %179, label %175

175:                                              ; preds = %173
  %176 = call i64 @lzvn_emit_match(ptr noundef nonnull %0, ptr noundef nonnull byval(%struct.lzvn_match_info) align 8 %28)
  %177 = icmp eq i64 %176, 0
  br i1 %177, label %.loopexit, label %178

178:                                              ; preds = %175
  store i64 %.sroa.0.6, ptr %28, align 8, !tbaa !19
  store i64 %.sroa.10.6, ptr %30, align 8, !tbaa !19
  store i64 %.sroa.15.6, ptr %29, align 8, !tbaa !19
  store i64 %.sroa.16.6, ptr %.sroa.16.0..sroa_idx62, align 8, !tbaa !19
  store i64 %.sroa.1666.6, ptr %.sroa.1666.0..sroa_idx77, align 8, !tbaa !19
  br label %.critedge

179:                                              ; preds = %173
  %180 = load i64, ptr %.sroa.1666.0..sroa_idx77, align 8, !tbaa !24
  %181 = icmp sgt i64 %.sroa.1666.6, %180
  br i1 %181, label %182, label %183

182:                                              ; preds = %179
  store i64 %.sroa.0.6, ptr %28, align 8, !tbaa !19
  store i64 %.sroa.10.6, ptr %30, align 8, !tbaa !19
  store i64 %.sroa.15.6, ptr %29, align 8, !tbaa !19
  store i64 %.sroa.16.6, ptr %.sroa.16.0..sroa_idx62, align 8, !tbaa !19
  store i64 %.sroa.1666.6, ptr %.sroa.1666.0..sroa_idx77, align 8, !tbaa !19
  br label %183

183:                                              ; preds = %179, %182
  %184 = call i64 @lzvn_emit_match(ptr noundef nonnull %0, ptr noundef nonnull byval(%struct.lzvn_match_info) align 8 %28)
  %185 = icmp eq i64 %184, 0
  br i1 %185, label %.loopexit, label %186

186:                                              ; preds = %183
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %28, ptr noundef nonnull align 8 dereferenceable(40) %2, i64 40, i1 false), !tbaa.struct !22
  br label %.critedge

.critedge:                                        ; preds = %172, %186, %178, %155, %166, %165, %31
  %187 = load ptr, ptr %13, align 8, !tbaa !14
  %188 = getelementptr inbounds %struct.lzvn_encode_entry_type, ptr %187, i64 %38
  store i32 %41, ptr %188, align 4
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 4
  store i32 %.sroa.0186.0.copyload, ptr %.sroa.4.0..sroa_idx, align 4
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 8
  store i32 %.sroa.5.0.copyload, ptr %.sroa.5.0..sroa_idx, align 4
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 12
  store i32 %.sroa.6188.0.copyload, ptr %.sroa.6.0..sroa_idx, align 4, !tbaa !15
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 16
  store i32 %35, ptr %.sroa.7.0..sroa_idx, align 4
  %.sroa.8.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 20
  store i32 %.sroa.8.0.copyload, ptr %.sroa.8.0..sroa_idx, align 4
  %.sroa.9.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 24
  store i32 %.sroa.10.0.copyload193, ptr %.sroa.9.0..sroa_idx, align 4
  %.sroa.10107.0..sroa_idx = getelementptr inbounds i8, ptr %188, i64 28
  store i32 %.sroa.12.0.copyload, ptr %.sroa.10107.0..sroa_idx, align 4, !tbaa !15
  %189 = load i64, ptr %8, align 8, !tbaa !5
  %190 = add nsw i64 %189, 1
  store i64 %190, ptr %8, align 8, !tbaa !5
  %191 = load i64, ptr %9, align 8, !tbaa !12
  %192 = icmp slt i64 %190, %191
  br i1 %192, label %31, label %.loopexit, !llvm.loop !25

.loopexit:                                        ; preds = %.critedge, %162, %166, %175, %183, %1
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %2)
  ret void
}

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

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @load4(ptr noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @hash3i(i32 noundef) local_unnamed_addr #4

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @offset_to_s32(i64 noundef) local_unnamed_addr #4

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @offset_from_s32(i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @trailing_zero_bytes(i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @lzvn_find_matchN(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @lzvn_find_match(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @lzvn_emit_match(ptr noundef, ptr noundef byval(%struct.lzvn_match_info) align 8) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @lzvn_emit_literal(ptr noundef, i64 noundef) local_unnamed_addr #4

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { alwaysinline 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 #4 = { inlinehint 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 #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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, !10, i64 24}
!6 = !{!"", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !11, i64 72, !10, i64 112, !7, i64 120}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!12 = !{!6, !10, i64 32}
!13 = !{!6, !7, i64 0}
!14 = !{!6, !7, i64 120}
!15 = !{!8, !8, i64 0}
!16 = !{!6, !10, i64 40}
!17 = !{!6, !10, i64 8}
!18 = !{!6, !10, i64 16}
!19 = !{!10, !10, i64 0}
!20 = !{!6, !10, i64 112}
!21 = !{!6, !10, i64 88}
!22 = !{i64 0, i64 8, !19, i64 8, i64 8, !19, i64 16, i64 8, !19, i64 24, i64 8, !19, i64 32, i64 8, !19}
!23 = !{!6, !10, i64 80}
!24 = !{!6, !10, i64 104}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass