; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/ShellPkg/Library (FileBufferReplaceAll)

; 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.EFI_EDITOR_FILE_BUFFER = type { ptr, i32, ptr, ptr, i64, %struct.EFI_EDITOR_POSITION, %struct.EFI_EDITOR_POSITION, %struct.EFI_EDITOR_POSITION, %struct.EFI_EDITOR_POSITION, i8, i8, i8, ptr }
%struct.EFI_EDITOR_POSITION = type { i64, i64 }
%struct._EFI_EDITOR_LINE = type { i64, ptr, i64, i64, i32, %struct._LIST_ENTRY }
%struct._LIST_ENTRY = type { ptr, ptr }

@FileBuffer = external dso_local global %struct.EFI_EDITOR_FILE_BUFFER, align 8
@FileBufferNeedRefresh = external dso_local global i8, align 1
@.str.1 = external hidden unnamed_addr constant [163 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [24 x i8], align 1

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

declare zeroext i8 @DebugAssertEnabled() #1

declare void @DebugAssert(ptr noundef, i64 noundef, ptr noundef) #1

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @FileBufferRefresh() #2

declare ptr @ReallocatePool(i64 noundef, i64 noundef, ptr noundef) #1

declare ptr @StrStr(ptr noundef, ptr noundef) #1

declare i64 @StrLen(ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local i64 @FileBufferReplaceAll(ptr noundef %0, ptr noundef %1, i64 noundef %2) #2 {
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i64 %2, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  %21 = load ptr, ptr %5, align 8, !tbaa !5
  %22 = call i64 @StrLen(ptr noundef %21)
  store i64 %22, ptr %12, align 8, !tbaa !9
  %23 = load ptr, ptr %6, align 8, !tbaa !5
  %24 = call i64 @StrLen(ptr noundef %23)
  store i64 %24, ptr %11, align 8, !tbaa !9
  %25 = load i64, ptr getelementptr inbounds (%struct.EFI_EDITOR_POSITION, ptr getelementptr inbounds (%struct.EFI_EDITOR_FILE_BUFFER, ptr @FileBuffer, i32 0, i32 6), i32 0, i32 1), align 8, !tbaa !11
  %26 = load i64, ptr %7, align 8, !tbaa !9
  %27 = add i64 %25, %26
  %28 = sub i64 %27, 1
  store i64 %28, ptr %10, align 8, !tbaa !9
  %29 = load i64, ptr %10, align 8, !tbaa !9
  %30 = load ptr, ptr getelementptr inbounds (%struct.EFI_EDITOR_FILE_BUFFER, ptr @FileBuffer, i32 0, i32 12), align 8, !tbaa !15
  %31 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %30, i32 0, i32 2
  %32 = load i64, ptr %31, align 8, !tbaa !16
  %33 = icmp ugt i64 %29, %32
  br i1 %33, label %34, label %38

34:                                               ; preds = %3
  %35 = load ptr, ptr getelementptr inbounds (%struct.EFI_EDITOR_FILE_BUFFER, ptr @FileBuffer, i32 0, i32 12), align 8, !tbaa !15
  %36 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %35, i32 0, i32 2
  %37 = load i64, ptr %36, align 8, !tbaa !16
  store i64 %37, ptr %10, align 8, !tbaa !9
  br label %38

38:                                               ; preds = %34, %3
  %39 = load ptr, ptr getelementptr inbounds (%struct.EFI_EDITOR_FILE_BUFFER, ptr @FileBuffer, i32 0, i32 12), align 8, !tbaa !15
  %40 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %39, i32 0, i32 5
  store ptr %40, ptr %18, align 8, !tbaa !5
  br label %41

41:                                               ; preds = %246, %38
  %42 = load ptr, ptr %18, align 8, !tbaa !5
  %43 = load ptr, ptr getelementptr inbounds (%struct.EFI_EDITOR_FILE_BUFFER, ptr @FileBuffer, i32 0, i32 2), align 8, !tbaa !19
  %44 = icmp ne ptr %42, %43
  br i1 %44, label %45, label %247

45:                                               ; preds = %41
  %46 = call zeroext i8 @DebugAssertEnabled()
  %47 = zext i8 %46 to i32
  %48 = icmp ne i32 %47, 0
  br i1 %48, label %49, label %59

49:                                               ; preds = %45
  %50 = load ptr, ptr %18, align 8, !tbaa !5
  %51 = ptrtoint ptr %50 to i64
  %52 = sub i64 %51, ptrtoint (ptr getelementptr inbounds (%struct._EFI_EDITOR_LINE, ptr null, i32 0, i32 5) to i64)
  %53 = inttoptr i64 %52 to ptr
  %54 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %53, i32 0, i32 0
  %55 = load i64, ptr %54, align 8, !tbaa !20
  %56 = icmp ne i64 %55, 1819043173
  br i1 %56, label %57, label %59

57:                                               ; preds = %49
  call void @DebugAssert(ptr noundef @.str.1, i64 noundef 3278, ptr noundef @.str.2)
  %58 = load ptr, ptr %18, align 8, !tbaa !5
  br label %64

59:                                               ; preds = %49, %45
  %60 = load ptr, ptr %18, align 8, !tbaa !5
  %61 = ptrtoint ptr %60 to i64
  %62 = sub i64 %61, ptrtoint (ptr getelementptr inbounds (%struct._EFI_EDITOR_LINE, ptr null, i32 0, i32 5) to i64)
  %63 = inttoptr i64 %62 to ptr
  br label %64

64:                                               ; preds = %59, %57
  %65 = phi ptr [ %58, %57 ], [ %63, %59 ]
  store ptr %65, ptr %17, align 8, !tbaa !5
  %66 = load ptr, ptr %17, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %66, i32 0, i32 1
  %68 = load ptr, ptr %67, align 8, !tbaa !21
  %69 = load i64, ptr %10, align 8, !tbaa !9
  %70 = getelementptr inbounds i16, ptr %68, i64 %69
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = call ptr @StrStr(ptr noundef %70, ptr noundef %71)
  store ptr %72, ptr %19, align 8, !tbaa !5
  %73 = load ptr, ptr %19, align 8, !tbaa !5
  %74 = icmp ne ptr %73, null
  br i1 %74, label %75, label %242

75:                                               ; preds = %64
  %76 = load ptr, ptr %19, align 8, !tbaa !5
  %77 = load ptr, ptr %17, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %77, i32 0, i32 1
  %79 = load ptr, ptr %78, align 8, !tbaa !21
  %80 = ptrtoint ptr %76 to i64
  %81 = ptrtoint ptr %79 to i64
  %82 = sub i64 %80, %81
  %83 = sdiv exact i64 %82, 2
  store i64 %83, ptr %9, align 8, !tbaa !9
  %84 = load i64, ptr %11, align 8, !tbaa !9
  %85 = load i64, ptr %12, align 8, !tbaa !9
  %86 = icmp ugt i64 %84, %85
  br i1 %86, label %87, label %158

87:                                               ; preds = %75
  %88 = load ptr, ptr %17, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %88, i32 0, i32 2
  %90 = load i64, ptr %89, align 8, !tbaa !16
  %91 = add i64 %90, 1
  store i64 %91, ptr %15, align 8, !tbaa !9
  %92 = load i64, ptr %15, align 8, !tbaa !9
  %93 = load i64, ptr %11, align 8, !tbaa !9
  %94 = load i64, ptr %12, align 8, !tbaa !9
  %95 = sub i64 %93, %94
  %96 = add i64 %92, %95
  store i64 %96, ptr %14, align 8, !tbaa !9
  %97 = load ptr, ptr %17, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %97, i32 0, i32 3
  %99 = load i64, ptr %98, align 8, !tbaa !22
  %100 = add i64 %99, 1
  %101 = load i64, ptr %14, align 8, !tbaa !9
  %102 = icmp ule i64 %100, %101
  br i1 %102, label %103, label %118

103:                                              ; preds = %87
  %104 = load i64, ptr %15, align 8, !tbaa !9
  %105 = mul i64 2, %104
  %106 = load i64, ptr %14, align 8, !tbaa !9
  %107 = mul i64 2, %106
  %108 = load ptr, ptr %17, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %108, i32 0, i32 1
  %110 = load ptr, ptr %109, align 8, !tbaa !21
  %111 = call ptr @ReallocatePool(i64 noundef %105, i64 noundef %107, ptr noundef %110)
  %112 = load ptr, ptr %17, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %112, i32 0, i32 1
  store ptr %111, ptr %113, align 8, !tbaa !21
  %114 = load i64, ptr %14, align 8, !tbaa !9
  %115 = sub i64 %114, 1
  %116 = load ptr, ptr %17, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %116, i32 0, i32 3
  store i64 %115, ptr %117, align 8, !tbaa !22
  br label %118

118:                                              ; preds = %103, %87
  %119 = load ptr, ptr %17, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %119, i32 0, i32 1
  %121 = load ptr, ptr %120, align 8, !tbaa !21
  %122 = icmp eq ptr %121, null
  br i1 %122, label %123, label %124

123:                                              ; preds = %118
  store i64 -9223372036854775799, ptr %4, align 8
  store i32 1, ptr %20, align 4
  br label %249

124:                                              ; preds = %118
  %125 = load ptr, ptr %17, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %125, i32 0, i32 1
  %127 = load ptr, ptr %126, align 8, !tbaa !21
  %128 = load i64, ptr %14, align 8, !tbaa !9
  %129 = sub i64 %128, 1
  %130 = getelementptr inbounds i16, ptr %127, i64 %129
  store ptr %130, ptr %8, align 8, !tbaa !5
  %131 = load i64, ptr %11, align 8, !tbaa !9
  %132 = load i64, ptr %12, align 8, !tbaa !9
  %133 = sub i64 %131, %132
  store i64 %133, ptr %16, align 8, !tbaa !9
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %134

134:                                              ; preds = %154, %124
  %135 = load i64, ptr %13, align 8, !tbaa !9
  %136 = load ptr, ptr %17, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %136, i32 0, i32 2
  %138 = load i64, ptr %137, align 8, !tbaa !16
  %139 = load i64, ptr %9, align 8, !tbaa !9
  %140 = sub i64 %138, %139
  %141 = load i64, ptr %12, align 8, !tbaa !9
  %142 = sub i64 %140, %141
  %143 = add i64 %142, 1
  %144 = icmp ult i64 %135, %143
  br i1 %144, label %145, label %157

145:                                              ; preds = %134
  %146 = load ptr, ptr %8, align 8, !tbaa !5
  %147 = load i64, ptr %16, align 8, !tbaa !9
  %148 = sub i64 0, %147
  %149 = getelementptr inbounds i16, ptr %146, i64 %148
  %150 = load i16, ptr %149, align 2, !tbaa !23
  %151 = load ptr, ptr %8, align 8, !tbaa !5
  store i16 %150, ptr %151, align 2, !tbaa !23
  %152 = load ptr, ptr %8, align 8, !tbaa !5
  %153 = getelementptr inbounds i16, ptr %152, i32 -1
  store ptr %153, ptr %8, align 8, !tbaa !5
  br label %154

154:                                              ; preds = %145
  %155 = load i64, ptr %13, align 8, !tbaa !9
  %156 = add i64 %155, 1
  store i64 %156, ptr %13, align 8, !tbaa !9
  br label %134, !llvm.loop !25

157:                                              ; preds = %134
  br label %210

158:                                              ; preds = %75
  %159 = load i64, ptr %11, align 8, !tbaa !9
  %160 = load i64, ptr %12, align 8, !tbaa !9
  %161 = icmp ult i64 %159, %160
  br i1 %161, label %162, label %196

162:                                              ; preds = %158
  %163 = load ptr, ptr %17, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %163, i32 0, i32 1
  %165 = load ptr, ptr %164, align 8, !tbaa !21
  %166 = load i64, ptr %9, align 8, !tbaa !9
  %167 = getelementptr inbounds i16, ptr %165, i64 %166
  %168 = load i64, ptr %11, align 8, !tbaa !9
  %169 = getelementptr inbounds i16, ptr %167, i64 %168
  store ptr %169, ptr %8, align 8, !tbaa !5
  %170 = load i64, ptr %12, align 8, !tbaa !9
  %171 = load i64, ptr %11, align 8, !tbaa !9
  %172 = sub i64 %170, %171
  store i64 %172, ptr %16, align 8, !tbaa !9
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %173

173:                                              ; preds = %192, %162
  %174 = load i64, ptr %13, align 8, !tbaa !9
  %175 = load ptr, ptr %17, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %175, i32 0, i32 2
  %177 = load i64, ptr %176, align 8, !tbaa !16
  %178 = load i64, ptr %9, align 8, !tbaa !9
  %179 = sub i64 %177, %178
  %180 = load i64, ptr %11, align 8, !tbaa !9
  %181 = sub i64 %179, %180
  %182 = add i64 %181, 1
  %183 = icmp ult i64 %174, %182
  br i1 %183, label %184, label %195

184:                                              ; preds = %173
  %185 = load ptr, ptr %8, align 8, !tbaa !5
  %186 = load i64, ptr %16, align 8, !tbaa !9
  %187 = getelementptr inbounds i16, ptr %185, i64 %186
  %188 = load i16, ptr %187, align 2, !tbaa !23
  %189 = load ptr, ptr %8, align 8, !tbaa !5
  store i16 %188, ptr %189, align 2, !tbaa !23
  %190 = load ptr, ptr %8, align 8, !tbaa !5
  %191 = getelementptr inbounds i16, ptr %190, i32 1
  store ptr %191, ptr %8, align 8, !tbaa !5
  br label %192

192:                                              ; preds = %184
  %193 = load i64, ptr %13, align 8, !tbaa !9
  %194 = add i64 %193, 1
  store i64 %194, ptr %13, align 8, !tbaa !9
  br label %173, !llvm.loop !27

195:                                              ; preds = %173
  br label %209

196:                                              ; preds = %158
  br label %197

197:                                              ; preds = %196
  %198 = call zeroext i8 @DebugAssertEnabled()
  %199 = icmp ne i8 %198, 0
  br i1 %199, label %200, label %206

200:                                              ; preds = %197
  %201 = load i64, ptr %11, align 8, !tbaa !9
  %202 = load i64, ptr %12, align 8, !tbaa !9
  %203 = icmp eq i64 %201, %202
  br i1 %203, label %205, label %204

204:                                              ; preds = %200
  call void @DebugAssert(ptr noundef @.str.1, i64 noundef 3330, ptr noundef @.str.27)
  br label %205

205:                                              ; preds = %204, %200
  br label %206

206:                                              ; preds = %205, %197
  br label %207

207:                                              ; preds = %206
  br label %208

208:                                              ; preds = %207
  br label %209

209:                                              ; preds = %208, %195
  br label %210

210:                                              ; preds = %209, %157
  %211 = load ptr, ptr %17, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %211, i32 0, i32 1
  %213 = load ptr, ptr %212, align 8, !tbaa !21
  %214 = load i64, ptr %9, align 8, !tbaa !9
  %215 = getelementptr inbounds i16, ptr %213, i64 %214
  store ptr %215, ptr %8, align 8, !tbaa !5
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %216

216:                                              ; preds = %228, %210
  %217 = load i64, ptr %13, align 8, !tbaa !9
  %218 = load i64, ptr %11, align 8, !tbaa !9
  %219 = icmp ult i64 %217, %218
  br i1 %219, label %220, label %231

220:                                              ; preds = %216
  %221 = load ptr, ptr %6, align 8, !tbaa !5
  %222 = load i64, ptr %13, align 8, !tbaa !9
  %223 = getelementptr inbounds i16, ptr %221, i64 %222
  %224 = load i16, ptr %223, align 2, !tbaa !23
  %225 = load ptr, ptr %8, align 8, !tbaa !5
  %226 = load i64, ptr %13, align 8, !tbaa !9
  %227 = getelementptr inbounds i16, ptr %225, i64 %226
  store i16 %224, ptr %227, align 2, !tbaa !23
  br label %228

228:                                              ; preds = %220
  %229 = load i64, ptr %13, align 8, !tbaa !9
  %230 = add i64 %229, 1
  store i64 %230, ptr %13, align 8, !tbaa !9
  br label %216, !llvm.loop !28

231:                                              ; preds = %216
  %232 = load i64, ptr %11, align 8, !tbaa !9
  %233 = load i64, ptr %12, align 8, !tbaa !9
  %234 = sub i64 %232, %233
  %235 = load ptr, ptr %17, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct._EFI_EDITOR_LINE, ptr %235, i32 0, i32 2
  %237 = load i64, ptr %236, align 8, !tbaa !16
  %238 = add i64 %237, %234
  store i64 %238, ptr %236, align 8, !tbaa !16
  %239 = load i64, ptr %11, align 8, !tbaa !9
  %240 = load i64, ptr %10, align 8, !tbaa !9
  %241 = add i64 %240, %239
  store i64 %241, ptr %10, align 8, !tbaa !9
  br label %246

242:                                              ; preds = %64
  store i64 0, ptr %10, align 8, !tbaa !9
  %243 = load ptr, ptr %18, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct._LIST_ENTRY, ptr %243, i32 0, i32 0
  %245 = load ptr, ptr %244, align 8, !tbaa !29
  store ptr %245, ptr %18, align 8, !tbaa !5
  br label %246

246:                                              ; preds = %242, %231
  br label %41, !llvm.loop !30

247:                                              ; preds = %41
  store i8 1, ptr getelementptr inbounds (%struct.EFI_EDITOR_FILE_BUFFER, ptr @FileBuffer, i32 0, i32 9), align 8, !tbaa !31
  store i8 1, ptr @FileBufferNeedRefresh, align 1, !tbaa !32
  %248 = call i64 @FileBufferRefresh()
  store i64 0, ptr %4, align 8
  store i32 1, ptr %20, align 4
  br label %249

249:                                              ; preds = %247, %123
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  %250 = load i64, ptr %4, align 8
  ret i64 %250
}

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

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

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


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

%struct.EFI_EDITOR_FILE_BUFFER = type { ptr, i32, ptr, ptr, i64, %struct.EFI_EDITOR_POSITION, %struct.EFI_EDITOR_POSITION, %struct.EFI_EDITOR_POSITION, %struct.EFI_EDITOR_POSITION, i8, i8, i8, ptr }
%struct.EFI_EDITOR_POSITION = type { i64, i64 }

@FileBuffer = external dso_local local_unnamed_addr global %struct.EFI_EDITOR_FILE_BUFFER, align 8
@FileBufferNeedRefresh = external dso_local local_unnamed_addr global i8, align 1
@.str.1 = external hidden unnamed_addr constant [163 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1

declare zeroext i8 @DebugAssertEnabled() local_unnamed_addr #0

declare void @DebugAssert(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i64 @FileBufferRefresh() local_unnamed_addr #1

declare ptr @ReallocatePool(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

declare ptr @StrStr(ptr noundef, ptr noundef) local_unnamed_addr #0

declare i64 @StrLen(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local range(i64 -9223372036854775799, 1) i64 @FileBufferReplaceAll(ptr noundef %0, ptr noundef %1, i64 noundef %2) local_unnamed_addr #1 {
  %4 = ptrtoint ptr %1 to i64
  %5 = tail call i64 @StrLen(ptr noundef %0) #3
  %.fr179 = freeze i64 %5
  %6 = tail call i64 @StrLen(ptr noundef %1) #3
  %.fr143 = freeze i64 %6
  %7 = load i64, ptr getelementptr inbounds (i8, ptr @FileBuffer, i64 64), align 8, !tbaa !5
  %8 = add i64 %2, -1
  %9 = add i64 %8, %7
  %10 = load ptr, ptr getelementptr inbounds (i8, ptr @FileBuffer, i64 112), align 8, !tbaa !13
  %11 = getelementptr inbounds i8, ptr %10, i64 16
  %12 = load i64, ptr %11, align 8, !tbaa !14
  %spec.select = tail call i64 @llvm.umin.i64(i64 %9, i64 %12)
  %13 = getelementptr inbounds i8, ptr %10, i64 40
  %14 = load ptr, ptr getelementptr inbounds (i8, ptr @FileBuffer, i64 16), align 8, !tbaa !17
  %.not111 = icmp eq ptr %13, %14
  br i1 %.not111, label %._crit_edge117, label %.lr.ph116

.lr.ph116:                                        ; preds = %3
  %15 = icmp ugt i64 %.fr143, %.fr179
  %16 = sub i64 %.fr179, %.fr143
  %17 = sub i64 %.fr143, %.fr179
  %18 = sub i64 0, %17
  %.not144 = icmp eq i64 %.fr143, 0
  br i1 %15, label %.lr.ph116.split.us.preheader, label %.lr.ph116.split

.lr.ph116.split.us.preheader:                     ; preds = %.lr.ph116
  %19 = sub i64 %.fr179, %.fr143
  %20 = and i64 %19, 9223372036854775792
  %diff.check238 = icmp eq i64 %20, 0
  %min.iters.check223 = icmp ult i64 %.fr143, 16
  %n.vec226 = and i64 %.fr143, -16
  %cmp.n233 = icmp eq i64 %.fr143, %n.vec226
  %xtraiter274 = and i64 %.fr143, 3
  %lcmp.mod275.not = icmp eq i64 %xtraiter274, 0
  br label %.lr.ph116.split.us

.lr.ph116.split.us:                               ; preds = %.lr.ph116.split.us.preheader, %98
  %.075113.us = phi ptr [ %.1.us, %98 ], [ %13, %.lr.ph116.split.us.preheader ]
  %.179112.us = phi i64 [ %.2.us, %98 ], [ %spec.select, %.lr.ph116.split.us.preheader ]
  %21 = tail call zeroext i8 @DebugAssertEnabled() #3
  %.not93.us = icmp eq i8 %21, 0
  %.pre = ptrtoint ptr %.075113.us to i64
  %.pre157 = add i64 %.pre, -40
  %.pre159 = inttoptr i64 %.pre157 to ptr
  br i1 %.not93.us, label %.lr.ph116.split.us._crit_edge, label %22

22:                                               ; preds = %.lr.ph116.split.us
  %23 = load i64, ptr %.pre159, align 8, !tbaa !18
  %.not94.us = icmp eq i64 %23, 1819043173
  br i1 %.not94.us, label %.lr.ph116.split.us._crit_edge, label %24

24:                                               ; preds = %22
  tail call void @DebugAssert(ptr noundef nonnull @.str.1, i64 noundef 3278, ptr noundef nonnull @.str.2) #3
  br label %.lr.ph116.split.us._crit_edge

.lr.ph116.split.us._crit_edge:                    ; preds = %.lr.ph116.split.us, %22, %24
  %25 = phi ptr [ %.075113.us, %24 ], [ %.pre159, %22 ], [ %.pre159, %.lr.ph116.split.us ]
  %26 = getelementptr inbounds i8, ptr %25, i64 8
  %27 = load ptr, ptr %26, align 8, !tbaa !19
  %28 = getelementptr inbounds i16, ptr %27, i64 %.179112.us
  %29 = tail call ptr @StrStr(ptr noundef %28, ptr noundef %0) #3
  %.not95.us = icmp eq ptr %29, null
  br i1 %.not95.us, label %96, label %30

30:                                               ; preds = %.lr.ph116.split.us._crit_edge
  %31 = load ptr, ptr %26, align 8, !tbaa !19
  %32 = ptrtoint ptr %29 to i64
  %33 = ptrtoint ptr %31 to i64
  %34 = sub i64 %32, %33
  %35 = ashr exact i64 %34, 1
  %36 = getelementptr inbounds i8, ptr %25, i64 16
  %37 = load i64, ptr %36, align 8, !tbaa !14
  %38 = add i64 %37, 1
  %39 = add i64 %38, %17
  %40 = getelementptr inbounds i8, ptr %25, i64 24
  %41 = load i64, ptr %40, align 8, !tbaa !20
  %42 = add i64 %41, 1
  %.not97.us = icmp ugt i64 %42, %39
  br i1 %.not97.us, label %thread-pre-split.us, label %43

43:                                               ; preds = %30
  %44 = shl i64 %38, 1
  %45 = shl i64 %39, 1
  %46 = tail call ptr @ReallocatePool(i64 noundef %44, i64 noundef %45, ptr noundef %31) #3
  store ptr %46, ptr %26, align 8, !tbaa !19
  %47 = add i64 %37, %17
  store i64 %47, ptr %40, align 8, !tbaa !20
  br label %thread-pre-split.us

thread-pre-split.us:                              ; preds = %30, %43
  %48 = phi ptr [ %46, %43 ], [ %31, %30 ]
  %49 = ptrtoint ptr %48 to i64
  %50 = icmp eq ptr %48, null
  br i1 %50, label %.loopexit103, label %51

51:                                               ; preds = %thread-pre-split.us
  %52 = load i64, ptr %36, align 8, !tbaa !14
  %53 = add i64 %.fr179, %35
  %reass.sub146 = sub i64 %52, %53
  %.not147 = icmp eq i64 %reass.sub146, -1
  br i1 %.not147, label %.loopexit.us, label %.lr.ph108.us.preheader

.lr.ph108.us.preheader:                           ; preds = %51
  %54 = getelementptr i16, ptr %48, i64 %37
  %55 = getelementptr i16, ptr %54, i64 %17
  %56 = add i64 %52, 1
  %57 = add i64 %.fr179, %35
  %58 = sub i64 %56, %57
  %min.iters.check241 = icmp ult i64 %58, 40
  br i1 %min.iters.check241, label %.lr.ph108.us.preheader265, label %vector.scevcheck

.lr.ph108.us.preheader265:                        ; preds = %middle.block239, %vector.scevcheck, %.lr.ph108.us.preheader
  %.076107.us.ph = phi ptr [ %55, %vector.scevcheck ], [ %55, %.lr.ph108.us.preheader ], [ %ind.end245, %middle.block239 ]
  %.080106.us.ph = phi i64 [ 0, %vector.scevcheck ], [ 0, %.lr.ph108.us.preheader ], [ %n.vec244, %middle.block239 ]
  br label %.lr.ph108.us

vector.scevcheck:                                 ; preds = %.lr.ph108.us.preheader
  %59 = add i64 %.fr179, %35
  %60 = sub i64 %52, %59
  %mul.result.neg = mul i64 %60, -2
  %61 = getelementptr i8, ptr %55, i64 %mul.result.neg
  %62 = icmp ugt ptr %61, %55
  %mul.result235.neg = mul i64 %60, -2
  %mul.overflow236 = icmp slt i64 %60, 0
  %63 = getelementptr i8, ptr %54, i64 %mul.result235.neg
  %64 = icmp ugt ptr %63, %54
  %65 = or i1 %64, %mul.overflow236
  %66 = or i1 %62, %65
  %or.cond = or i1 %66, %diff.check238
  br i1 %or.cond, label %.lr.ph108.us.preheader265, label %vector.ph242

vector.ph242:                                     ; preds = %vector.scevcheck
  %n.vec244 = and i64 %58, -16
  %67 = mul i64 %n.vec244, -2
  %ind.end245 = getelementptr i8, ptr %55, i64 %67
  br label %vector.body248

vector.body248:                                   ; preds = %vector.body248, %vector.ph242
  %index249 = phi i64 [ 0, %vector.ph242 ], [ %index.next258, %vector.body248 ]
  %offset.idx250 = mul i64 %index249, -2
  %next.gep251 = getelementptr i8, ptr %55, i64 %offset.idx250
  %68 = getelementptr inbounds i16, ptr %next.gep251, i64 %18
  %69 = getelementptr inbounds i8, ptr %68, i64 -14
  %70 = getelementptr inbounds i8, ptr %68, i64 -30
  %wide.load253 = load <8 x i16>, ptr %69, align 2, !tbaa !21
  %wide.load254 = load <8 x i16>, ptr %70, align 2, !tbaa !21
  %71 = getelementptr i8, ptr %next.gep251, i64 -14
  %72 = getelementptr i8, ptr %next.gep251, i64 -30
  store <8 x i16> %wide.load253, ptr %71, align 2, !tbaa !21
  store <8 x i16> %wide.load254, ptr %72, align 2, !tbaa !21
  %index.next258 = add nuw i64 %index249, 16
  %73 = icmp eq i64 %index.next258, %n.vec244
  br i1 %73, label %middle.block239, label %vector.body248, !llvm.loop !23

middle.block239:                                  ; preds = %vector.body248
  %cmp.n259 = icmp eq i64 %58, %n.vec244
  br i1 %cmp.n259, label %.loopexit.us, label %.lr.ph108.us.preheader265

._crit_edge.us:                                   ; preds = %.lr.ph110.us.prol.loopexit, %.lr.ph110.us, %middle.block221, %.loopexit.us
  %74 = add i64 %17, %52
  store i64 %74, ptr %36, align 8, !tbaa !14
  %75 = add i64 %.179112.us, %.fr143
  br label %98

.lr.ph110.us:                                     ; preds = %.lr.ph110.us.prol.loopexit, %.lr.ph110.us
  %.282109.us = phi i64 [ %91, %.lr.ph110.us ], [ %.282109.us.unr, %.lr.ph110.us.prol.loopexit ]
  %76 = getelementptr inbounds i16, ptr %1, i64 %.282109.us
  %77 = load i16, ptr %76, align 2, !tbaa !21
  %78 = getelementptr inbounds i16, ptr %100, i64 %.282109.us
  store i16 %77, ptr %78, align 2, !tbaa !21
  %79 = add nuw i64 %.282109.us, 1
  %80 = getelementptr inbounds i16, ptr %1, i64 %79
  %81 = load i16, ptr %80, align 2, !tbaa !21
  %82 = getelementptr inbounds i16, ptr %100, i64 %79
  store i16 %81, ptr %82, align 2, !tbaa !21
  %83 = add nuw i64 %.282109.us, 2
  %84 = getelementptr inbounds i16, ptr %1, i64 %83
  %85 = load i16, ptr %84, align 2, !tbaa !21
  %86 = getelementptr inbounds i16, ptr %100, i64 %83
  store i16 %85, ptr %86, align 2, !tbaa !21
  %87 = add nuw i64 %.282109.us, 3
  %88 = getelementptr inbounds i16, ptr %1, i64 %87
  %89 = load i16, ptr %88, align 2, !tbaa !21
  %90 = getelementptr inbounds i16, ptr %100, i64 %87
  store i16 %89, ptr %90, align 2, !tbaa !21
  %91 = add nuw i64 %.282109.us, 4
  %exitcond156.not.3 = icmp eq i64 %91, %.fr143
  br i1 %exitcond156.not.3, label %._crit_edge.us, label %.lr.ph110.us, !llvm.loop !27

.lr.ph108.us:                                     ; preds = %.lr.ph108.us.preheader265, %.lr.ph108.us
  %.076107.us = phi ptr [ %94, %.lr.ph108.us ], [ %.076107.us.ph, %.lr.ph108.us.preheader265 ]
  %.080106.us = phi i64 [ %95, %.lr.ph108.us ], [ %.080106.us.ph, %.lr.ph108.us.preheader265 ]
  %92 = getelementptr inbounds i16, ptr %.076107.us, i64 %18
  %93 = load i16, ptr %92, align 2, !tbaa !21
  store i16 %93, ptr %.076107.us, align 2, !tbaa !21
  %94 = getelementptr inbounds i8, ptr %.076107.us, i64 -2
  %95 = add nuw i64 %.080106.us, 1
  %exitcond155.not = icmp eq i64 %.080106.us, %reass.sub146
  br i1 %exitcond155.not, label %.loopexit.us, label %.lr.ph108.us, !llvm.loop !28

96:                                               ; preds = %.lr.ph116.split.us._crit_edge
  %97 = load ptr, ptr %.075113.us, align 8, !tbaa !29
  br label %98

98:                                               ; preds = %96, %._crit_edge.us
  %.2.us = phi i64 [ %75, %._crit_edge.us ], [ 0, %96 ]
  %.1.us = phi ptr [ %.075113.us, %._crit_edge.us ], [ %97, %96 ]
  %99 = load ptr, ptr getelementptr inbounds (i8, ptr @FileBuffer, i64 16), align 8, !tbaa !17
  %.not.us = icmp eq ptr %.1.us, %99
  br i1 %.not.us, label %._crit_edge117, label %.lr.ph116.split.us, !llvm.loop !30

.loopexit.us:                                     ; preds = %.lr.ph108.us, %middle.block239, %51
  %100 = getelementptr i8, ptr %48, i64 %34
  br i1 %.not144, label %._crit_edge.us, label %.lr.ph110.us.preheader

.lr.ph110.us.preheader:                           ; preds = %.loopexit.us
  br i1 %min.iters.check223, label %.lr.ph110.us.preheader264, label %vector.memcheck219

.lr.ph110.us.preheader264:                        ; preds = %middle.block221, %vector.memcheck219, %.lr.ph110.us.preheader
  %.282109.us.ph = phi i64 [ 0, %vector.memcheck219 ], [ 0, %.lr.ph110.us.preheader ], [ %n.vec226, %middle.block221 ]
  br i1 %lcmp.mod275.not, label %.lr.ph110.us.prol.loopexit, label %.lr.ph110.us.prol

.lr.ph110.us.prol:                                ; preds = %.lr.ph110.us.preheader264, %.lr.ph110.us.prol
  %.282109.us.prol = phi i64 [ %104, %.lr.ph110.us.prol ], [ %.282109.us.ph, %.lr.ph110.us.preheader264 ]
  %prol.iter276 = phi i64 [ %prol.iter276.next, %.lr.ph110.us.prol ], [ 0, %.lr.ph110.us.preheader264 ]
  %101 = getelementptr inbounds i16, ptr %1, i64 %.282109.us.prol
  %102 = load i16, ptr %101, align 2, !tbaa !21
  %103 = getelementptr inbounds i16, ptr %100, i64 %.282109.us.prol
  store i16 %102, ptr %103, align 2, !tbaa !21
  %104 = add nuw i64 %.282109.us.prol, 1
  %prol.iter276.next = add i64 %prol.iter276, 1
  %prol.iter276.cmp.not = icmp eq i64 %prol.iter276.next, %xtraiter274
  br i1 %prol.iter276.cmp.not, label %.lr.ph110.us.prol.loopexit, label %.lr.ph110.us.prol, !llvm.loop !31

.lr.ph110.us.prol.loopexit:                       ; preds = %.lr.ph110.us.prol, %.lr.ph110.us.preheader264
  %.282109.us.unr = phi i64 [ %.282109.us.ph, %.lr.ph110.us.preheader264 ], [ %104, %.lr.ph110.us.prol ]
  %105 = sub i64 %.282109.us.ph, %.fr143
  %106 = icmp ugt i64 %105, -4
  br i1 %106, label %._crit_edge.us, label %.lr.ph110.us

vector.memcheck219:                               ; preds = %.lr.ph110.us.preheader
  %107 = add i64 %32, %49
  %108 = add i64 %4, %33
  %109 = sub i64 %107, %108
  %diff.check220 = icmp ult i64 %109, 32
  br i1 %diff.check220, label %.lr.ph110.us.preheader264, label %vector.body228

vector.body228:                                   ; preds = %vector.memcheck219, %vector.body228
  %index229 = phi i64 [ %index.next232, %vector.body228 ], [ 0, %vector.memcheck219 ]
  %110 = getelementptr inbounds i16, ptr %1, i64 %index229
  %111 = getelementptr inbounds i8, ptr %110, i64 16
  %wide.load230 = load <8 x i16>, ptr %110, align 2, !tbaa !21
  %wide.load231 = load <8 x i16>, ptr %111, align 2, !tbaa !21
  %112 = getelementptr inbounds i16, ptr %100, i64 %index229
  %113 = getelementptr inbounds i8, ptr %112, i64 16
  store <8 x i16> %wide.load230, ptr %112, align 2, !tbaa !21
  store <8 x i16> %wide.load231, ptr %113, align 2, !tbaa !21
  %index.next232 = add nuw i64 %index229, 16
  %114 = icmp eq i64 %index.next232, %n.vec226
  br i1 %114, label %middle.block221, label %vector.body228, !llvm.loop !33

middle.block221:                                  ; preds = %vector.body228
  br i1 %cmp.n233, label %._crit_edge.us, label %.lr.ph110.us.preheader264

.lr.ph116.split:                                  ; preds = %.lr.ph116
  %115 = icmp ult i64 %.fr143, %.fr179
  br i1 %115, label %.lr.ph116.split.split.us.preheader, label %.lr.ph116.split.split

.lr.ph116.split.split.us.preheader:               ; preds = %.lr.ph116.split
  %116 = sub i64 %.fr143, %.fr179
  %117 = and i64 %116, 9223372036854775792
  %diff.check203 = icmp eq i64 %117, 0
  %min.iters.check191 = icmp ult i64 %.fr143, 16
  %n.vec194 = and i64 %.fr143, -16
  %cmp.n201 = icmp eq i64 %.fr143, %n.vec194
  %xtraiter271 = and i64 %.fr143, 3
  %lcmp.mod272.not = icmp eq i64 %xtraiter271, 0
  br label %.lr.ph116.split.split.us

.lr.ph116.split.split.us:                         ; preds = %.lr.ph116.split.split.us.preheader, %170
  %.075113.us118 = phi ptr [ %.1.us126, %170 ], [ %13, %.lr.ph116.split.split.us.preheader ]
  %.179112.us119 = phi i64 [ %.2.us125, %170 ], [ %spec.select, %.lr.ph116.split.split.us.preheader ]
  %118 = tail call zeroext i8 @DebugAssertEnabled() #3
  %.not93.us120 = icmp eq i8 %118, 0
  %.pre161 = ptrtoint ptr %.075113.us118 to i64
  %.pre163 = add i64 %.pre161, -40
  %.pre165 = inttoptr i64 %.pre163 to ptr
  br i1 %.not93.us120, label %.lr.ph116.split.split.us._crit_edge, label %119

119:                                              ; preds = %.lr.ph116.split.split.us
  %120 = load i64, ptr %.pre165, align 8, !tbaa !18
  %.not94.us121 = icmp eq i64 %120, 1819043173
  br i1 %.not94.us121, label %.lr.ph116.split.split.us._crit_edge, label %121

121:                                              ; preds = %119
  tail call void @DebugAssert(ptr noundef nonnull @.str.1, i64 noundef 3278, ptr noundef nonnull @.str.2) #3
  br label %.lr.ph116.split.split.us._crit_edge

.lr.ph116.split.split.us._crit_edge:              ; preds = %.lr.ph116.split.split.us, %119, %121
  %122 = phi ptr [ %.075113.us118, %121 ], [ %.pre165, %119 ], [ %.pre165, %.lr.ph116.split.split.us ]
  %123 = getelementptr inbounds i8, ptr %122, i64 8
  %124 = load ptr, ptr %123, align 8, !tbaa !19
  %125 = getelementptr inbounds i16, ptr %124, i64 %.179112.us119
  %126 = tail call ptr @StrStr(ptr noundef %125, ptr noundef %0) #3
  %.not95.us122 = icmp eq ptr %126, null
  br i1 %.not95.us122, label %168, label %127

127:                                              ; preds = %.lr.ph116.split.split.us._crit_edge
  %128 = load ptr, ptr %123, align 8, !tbaa !19
  %129 = ptrtoint ptr %126 to i64
  %130 = ptrtoint ptr %128 to i64
  %131 = sub i64 %129, %130
  %132 = ashr exact i64 %131, 1
  %133 = getelementptr i8, ptr %128, i64 %131
  %134 = getelementptr inbounds i8, ptr %122, i64 16
  %135 = load i64, ptr %134, align 8, !tbaa !14
  %136 = add i64 %.fr143, %132
  %reass.sub = sub i64 %135, %136
  %.not145 = icmp eq i64 %reass.sub, -1
  br i1 %.not145, label %.loopexit102.us, label %.lr.ph.us.preheader

.lr.ph.us.preheader:                              ; preds = %127
  %137 = getelementptr i16, ptr %133, i64 %.fr143
  %138 = add i64 %135, 1
  %139 = add i64 %.fr143, %132
  %140 = sub i64 %138, %139
  %min.iters.check206 = icmp ult i64 %140, 16
  %or.cond262 = or i1 %min.iters.check206, %diff.check203
  br i1 %or.cond262, label %.lr.ph.us.preheader267, label %vector.ph207

vector.ph207:                                     ; preds = %.lr.ph.us.preheader
  %n.vec209 = and i64 %140, -16
  %141 = shl i64 %n.vec209, 1
  %ind.end = getelementptr i8, ptr %137, i64 %141
  br label %vector.body212

vector.body212:                                   ; preds = %vector.body212, %vector.ph207
  %index213 = phi i64 [ 0, %vector.ph207 ], [ %index.next217, %vector.body212 ]
  %offset.idx = shl i64 %index213, 1
  %next.gep = getelementptr i8, ptr %137, i64 %offset.idx
  %142 = getelementptr inbounds i16, ptr %next.gep, i64 %16
  %143 = getelementptr inbounds i8, ptr %142, i64 16
  %wide.load215 = load <8 x i16>, ptr %142, align 2, !tbaa !21
  %wide.load216 = load <8 x i16>, ptr %143, align 2, !tbaa !21
  %144 = getelementptr i8, ptr %next.gep, i64 16
  store <8 x i16> %wide.load215, ptr %next.gep, align 2, !tbaa !21
  store <8 x i16> %wide.load216, ptr %144, align 2, !tbaa !21
  %index.next217 = add nuw i64 %index213, 16
  %145 = icmp eq i64 %index.next217, %n.vec209
  br i1 %145, label %middle.block204, label %vector.body212, !llvm.loop !34

middle.block204:                                  ; preds = %vector.body212
  %cmp.n218 = icmp eq i64 %140, %n.vec209
  br i1 %cmp.n218, label %.loopexit102.us, label %.lr.ph.us.preheader267

.lr.ph.us.preheader267:                           ; preds = %middle.block204, %.lr.ph.us.preheader
  %.177105.us.ph = phi ptr [ %137, %.lr.ph.us.preheader ], [ %ind.end, %middle.block204 ]
  %.181104.us.ph = phi i64 [ 0, %.lr.ph.us.preheader ], [ %n.vec209, %middle.block204 ]
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader267, %.lr.ph.us
  %.177105.us = phi ptr [ %148, %.lr.ph.us ], [ %.177105.us.ph, %.lr.ph.us.preheader267 ]
  %.181104.us = phi i64 [ %149, %.lr.ph.us ], [ %.181104.us.ph, %.lr.ph.us.preheader267 ]
  %146 = getelementptr inbounds i16, ptr %.177105.us, i64 %16
  %147 = load i16, ptr %146, align 2, !tbaa !21
  store i16 %147, ptr %.177105.us, align 2, !tbaa !21
  %148 = getelementptr inbounds i8, ptr %.177105.us, i64 2
  %149 = add nuw i64 %.181104.us, 1
  %exitcond152.not = icmp eq i64 %.181104.us, %reass.sub
  br i1 %exitcond152.not, label %.loopexit102.us, label %.lr.ph.us, !llvm.loop !35

._crit_edge.us129:                                ; preds = %.lr.ph110.us128.prol.loopexit, %.lr.ph110.us128, %middle.block189, %.loopexit102.us
  %150 = add i64 %17, %135
  store i64 %150, ptr %134, align 8, !tbaa !14
  %151 = add i64 %.179112.us119, %.fr143
  br label %170

.lr.ph110.us128:                                  ; preds = %.lr.ph110.us128.prol.loopexit, %.lr.ph110.us128
  %.282109.us124 = phi i64 [ %167, %.lr.ph110.us128 ], [ %.282109.us124.unr, %.lr.ph110.us128.prol.loopexit ]
  %152 = getelementptr inbounds i16, ptr %1, i64 %.282109.us124
  %153 = load i16, ptr %152, align 2, !tbaa !21
  %154 = getelementptr inbounds i16, ptr %133, i64 %.282109.us124
  store i16 %153, ptr %154, align 2, !tbaa !21
  %155 = add nuw i64 %.282109.us124, 1
  %156 = getelementptr inbounds i16, ptr %1, i64 %155
  %157 = load i16, ptr %156, align 2, !tbaa !21
  %158 = getelementptr inbounds i16, ptr %133, i64 %155
  store i16 %157, ptr %158, align 2, !tbaa !21
  %159 = add nuw i64 %.282109.us124, 2
  %160 = getelementptr inbounds i16, ptr %1, i64 %159
  %161 = load i16, ptr %160, align 2, !tbaa !21
  %162 = getelementptr inbounds i16, ptr %133, i64 %159
  store i16 %161, ptr %162, align 2, !tbaa !21
  %163 = add nuw i64 %.282109.us124, 3
  %164 = getelementptr inbounds i16, ptr %1, i64 %163
  %165 = load i16, ptr %164, align 2, !tbaa !21
  %166 = getelementptr inbounds i16, ptr %133, i64 %163
  store i16 %165, ptr %166, align 2, !tbaa !21
  %167 = add nuw i64 %.282109.us124, 4
  %exitcond153.not.3 = icmp eq i64 %167, %.fr143
  br i1 %exitcond153.not.3, label %._crit_edge.us129, label %.lr.ph110.us128, !llvm.loop !36

168:                                              ; preds = %.lr.ph116.split.split.us._crit_edge
  %169 = load ptr, ptr %.075113.us118, align 8, !tbaa !29
  br label %170

170:                                              ; preds = %168, %._crit_edge.us129
  %.2.us125 = phi i64 [ %151, %._crit_edge.us129 ], [ 0, %168 ]
  %.1.us126 = phi ptr [ %.075113.us118, %._crit_edge.us129 ], [ %169, %168 ]
  %171 = load ptr, ptr getelementptr inbounds (i8, ptr @FileBuffer, i64 16), align 8, !tbaa !17
  %.not.us127 = icmp eq ptr %.1.us126, %171
  br i1 %.not.us127, label %._crit_edge117, label %.lr.ph116.split.split.us, !llvm.loop !30

.loopexit102.us:                                  ; preds = %.lr.ph.us, %middle.block204, %127
  br i1 %.not144, label %._crit_edge.us129, label %.lr.ph110.us128.preheader

.lr.ph110.us128.preheader:                        ; preds = %.loopexit102.us
  %172 = sub i64 %129, %4
  %diff.check188 = icmp ult i64 %172, 32
  %or.cond263 = or i1 %min.iters.check191, %diff.check188
  br i1 %or.cond263, label %.lr.ph110.us128.preheader266, label %vector.body196

.lr.ph110.us128.preheader266:                     ; preds = %middle.block189, %.lr.ph110.us128.preheader
  %.282109.us124.ph = phi i64 [ 0, %.lr.ph110.us128.preheader ], [ %n.vec194, %middle.block189 ]
  br i1 %lcmp.mod272.not, label %.lr.ph110.us128.prol.loopexit, label %.lr.ph110.us128.prol

.lr.ph110.us128.prol:                             ; preds = %.lr.ph110.us128.preheader266, %.lr.ph110.us128.prol
  %.282109.us124.prol = phi i64 [ %176, %.lr.ph110.us128.prol ], [ %.282109.us124.ph, %.lr.ph110.us128.preheader266 ]
  %prol.iter273 = phi i64 [ %prol.iter273.next, %.lr.ph110.us128.prol ], [ 0, %.lr.ph110.us128.preheader266 ]
  %173 = getelementptr inbounds i16, ptr %1, i64 %.282109.us124.prol
  %174 = load i16, ptr %173, align 2, !tbaa !21
  %175 = getelementptr inbounds i16, ptr %133, i64 %.282109.us124.prol
  store i16 %174, ptr %175, align 2, !tbaa !21
  %176 = add nuw i64 %.282109.us124.prol, 1
  %prol.iter273.next = add i64 %prol.iter273, 1
  %prol.iter273.cmp.not = icmp eq i64 %prol.iter273.next, %xtraiter271
  br i1 %prol.iter273.cmp.not, label %.lr.ph110.us128.prol.loopexit, label %.lr.ph110.us128.prol, !llvm.loop !37

.lr.ph110.us128.prol.loopexit:                    ; preds = %.lr.ph110.us128.prol, %.lr.ph110.us128.preheader266
  %.282109.us124.unr = phi i64 [ %.282109.us124.ph, %.lr.ph110.us128.preheader266 ], [ %176, %.lr.ph110.us128.prol ]
  %177 = sub i64 %.282109.us124.ph, %.fr143
  %178 = icmp ugt i64 %177, -4
  br i1 %178, label %._crit_edge.us129, label %.lr.ph110.us128

vector.body196:                                   ; preds = %.lr.ph110.us128.preheader, %vector.body196
  %index197 = phi i64 [ %index.next200, %vector.body196 ], [ 0, %.lr.ph110.us128.preheader ]
  %179 = getelementptr inbounds i16, ptr %1, i64 %index197
  %180 = getelementptr inbounds i8, ptr %179, i64 16
  %wide.load198 = load <8 x i16>, ptr %179, align 2, !tbaa !21
  %wide.load199 = load <8 x i16>, ptr %180, align 2, !tbaa !21
  %181 = getelementptr inbounds i16, ptr %133, i64 %index197
  %182 = getelementptr inbounds i8, ptr %181, i64 16
  store <8 x i16> %wide.load198, ptr %181, align 2, !tbaa !21
  store <8 x i16> %wide.load199, ptr %182, align 2, !tbaa !21
  %index.next200 = add nuw i64 %index197, 16
  %183 = icmp eq i64 %index.next200, %n.vec194
  br i1 %183, label %middle.block189, label %vector.body196, !llvm.loop !38

middle.block189:                                  ; preds = %vector.body196
  br i1 %cmp.n201, label %._crit_edge.us129, label %.lr.ph110.us128.preheader266

.lr.ph116.split.split:                            ; preds = %.lr.ph116.split
  br i1 %.not144, label %.lr.ph116.split.split.split, label %.lr.ph116.split.split.split.us.preheader

.lr.ph116.split.split.split.us.preheader:         ; preds = %.lr.ph116.split.split
  %min.iters.check = icmp ult i64 %.fr143, 16
  %n.vec = and i64 %.fr143, -16
  %cmp.n = icmp eq i64 %.fr143, %n.vec
  %xtraiter = and i64 %.fr143, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.lr.ph116.split.split.split.us

.lr.ph116.split.split.split.us:                   ; preds = %.lr.ph116.split.split.split.us.preheader, %233
  %.075113.us131 = phi ptr [ %.1.us138, %233 ], [ %13, %.lr.ph116.split.split.split.us.preheader ]
  %.179112.us132 = phi i64 [ %.2.us137, %233 ], [ %spec.select, %.lr.ph116.split.split.split.us.preheader ]
  %184 = tail call zeroext i8 @DebugAssertEnabled() #3
  %.not93.us133 = icmp eq i8 %184, 0
  %.pre173 = ptrtoint ptr %.075113.us131 to i64
  %.pre175 = add i64 %.pre173, -40
  %.pre177 = inttoptr i64 %.pre175 to ptr
  br i1 %.not93.us133, label %.lr.ph116.split.split.split.us._crit_edge, label %185

185:                                              ; preds = %.lr.ph116.split.split.split.us
  %186 = load i64, ptr %.pre177, align 8, !tbaa !18
  %.not94.us134 = icmp eq i64 %186, 1819043173
  br i1 %.not94.us134, label %.lr.ph116.split.split.split.us._crit_edge, label %187

187:                                              ; preds = %185
  tail call void @DebugAssert(ptr noundef nonnull @.str.1, i64 noundef 3278, ptr noundef nonnull @.str.2) #3
  br label %.lr.ph116.split.split.split.us._crit_edge

.lr.ph116.split.split.split.us._crit_edge:        ; preds = %.lr.ph116.split.split.split.us, %185, %187
  %188 = phi ptr [ %.075113.us131, %187 ], [ %.pre177, %185 ], [ %.pre177, %.lr.ph116.split.split.split.us ]
  %189 = getelementptr inbounds i8, ptr %188, i64 8
  %190 = load ptr, ptr %189, align 8, !tbaa !19
  %191 = getelementptr inbounds i16, ptr %190, i64 %.179112.us132
  %192 = tail call ptr @StrStr(ptr noundef %191, ptr noundef %0) #3
  %.not95.us135 = icmp eq ptr %192, null
  br i1 %.not95.us135, label %231, label %.lr.ph110.us140

.lr.ph110.us140:                                  ; preds = %.lr.ph116.split.split.split.us._crit_edge
  %193 = load ptr, ptr %189, align 8, !tbaa !19
  %194 = ptrtoint ptr %192 to i64
  %195 = ptrtoint ptr %193 to i64
  %196 = sub i64 %194, %195
  %197 = tail call zeroext i8 @DebugAssertEnabled() #3
  %198 = load ptr, ptr %189, align 8, !tbaa !19
  %199 = getelementptr inbounds i8, ptr %198, i64 %196
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph110.us140
  %200 = ptrtoint ptr %198 to i64
  %201 = add i64 %194, %200
  %202 = add i64 %4, %195
  %203 = sub i64 %201, %202
  %diff.check = icmp ult i64 %203, 32
  br i1 %diff.check, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %vector.memcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.memcheck ]
  %204 = getelementptr inbounds i16, ptr %1, i64 %index
  %205 = getelementptr inbounds i8, ptr %204, i64 16
  %wide.load = load <8 x i16>, ptr %204, align 2, !tbaa !21
  %wide.load186 = load <8 x i16>, ptr %205, align 2, !tbaa !21
  %206 = getelementptr inbounds i16, ptr %199, i64 %index
  %207 = getelementptr inbounds i8, ptr %206, i64 16
  store <8 x i16> %wide.load, ptr %206, align 2, !tbaa !21
  store <8 x i16> %wide.load186, ptr %207, align 2, !tbaa !21
  %index.next = add nuw i64 %index, 16
  %208 = icmp eq i64 %index.next, %n.vec
  br i1 %208, label %middle.block, label %vector.body, !llvm.loop !39

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge.us141, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph110.us140
  %.282109.us136.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph110.us140 ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %.282109.us136.prol = phi i64 [ %212, %scalar.ph.prol ], [ %.282109.us136.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %209 = getelementptr inbounds i16, ptr %1, i64 %.282109.us136.prol
  %210 = load i16, ptr %209, align 2, !tbaa !21
  %211 = getelementptr inbounds i16, ptr %199, i64 %.282109.us136.prol
  store i16 %210, ptr %211, align 2, !tbaa !21
  %212 = add nuw i64 %.282109.us136.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !40

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.282109.us136.unr = phi i64 [ %.282109.us136.ph, %scalar.ph.preheader ], [ %212, %scalar.ph.prol ]
  %213 = sub i64 %.282109.us136.ph, %.fr143
  %214 = icmp ugt i64 %213, -4
  br i1 %214, label %._crit_edge.us141, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.282109.us136 = phi i64 [ %230, %scalar.ph ], [ %.282109.us136.unr, %scalar.ph.prol.loopexit ]
  %215 = getelementptr inbounds i16, ptr %1, i64 %.282109.us136
  %216 = load i16, ptr %215, align 2, !tbaa !21
  %217 = getelementptr inbounds i16, ptr %199, i64 %.282109.us136
  store i16 %216, ptr %217, align 2, !tbaa !21
  %218 = add nuw i64 %.282109.us136, 1
  %219 = getelementptr inbounds i16, ptr %1, i64 %218
  %220 = load i16, ptr %219, align 2, !tbaa !21
  %221 = getelementptr inbounds i16, ptr %199, i64 %218
  store i16 %220, ptr %221, align 2, !tbaa !21
  %222 = add nuw i64 %.282109.us136, 2
  %223 = getelementptr inbounds i16, ptr %1, i64 %222
  %224 = load i16, ptr %223, align 2, !tbaa !21
  %225 = getelementptr inbounds i16, ptr %199, i64 %222
  store i16 %224, ptr %225, align 2, !tbaa !21
  %226 = add nuw i64 %.282109.us136, 3
  %227 = getelementptr inbounds i16, ptr %1, i64 %226
  %228 = load i16, ptr %227, align 2, !tbaa !21
  %229 = getelementptr inbounds i16, ptr %199, i64 %226
  store i16 %228, ptr %229, align 2, !tbaa !21
  %230 = add nuw i64 %.282109.us136, 4
  %exitcond.not.3 = icmp eq i64 %230, %.fr143
  br i1 %exitcond.not.3, label %._crit_edge.us141, label %scalar.ph, !llvm.loop !41

231:                                              ; preds = %.lr.ph116.split.split.split.us._crit_edge
  %232 = load ptr, ptr %.075113.us131, align 8, !tbaa !29
  br label %233

233:                                              ; preds = %231, %._crit_edge.us141
  %.2.us137 = phi i64 [ %238, %._crit_edge.us141 ], [ 0, %231 ]
  %.1.us138 = phi ptr [ %.075113.us131, %._crit_edge.us141 ], [ %232, %231 ]
  %234 = load ptr, ptr getelementptr inbounds (i8, ptr @FileBuffer, i64 16), align 8, !tbaa !17
  %.not.us139 = icmp eq ptr %.1.us138, %234
  br i1 %.not.us139, label %._crit_edge117, label %.lr.ph116.split.split.split.us, !llvm.loop !30

._crit_edge.us141:                                ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %235 = getelementptr inbounds i8, ptr %188, i64 16
  %236 = load i64, ptr %235, align 8, !tbaa !14
  %237 = add i64 %17, %236
  store i64 %237, ptr %235, align 8, !tbaa !14
  %238 = add i64 %.179112.us132, %.fr143
  br label %233

.lr.ph116.split.split.split:                      ; preds = %.lr.ph116.split.split, %255
  %.075113 = phi ptr [ %.1, %255 ], [ %13, %.lr.ph116.split.split ]
  %.179112 = phi i64 [ %.2, %255 ], [ %spec.select, %.lr.ph116.split.split ]
  %239 = tail call zeroext i8 @DebugAssertEnabled() #3
  %.not93 = icmp eq i8 %239, 0
  %.pre167 = ptrtoint ptr %.075113 to i64
  %.pre169 = add i64 %.pre167, -40
  %.pre171 = inttoptr i64 %.pre169 to ptr
  br i1 %.not93, label %.lr.ph116.split.split.split._crit_edge, label %240

240:                                              ; preds = %.lr.ph116.split.split.split
  %241 = load i64, ptr %.pre171, align 8, !tbaa !18
  %.not94 = icmp eq i64 %241, 1819043173
  br i1 %.not94, label %.lr.ph116.split.split.split._crit_edge, label %242

242:                                              ; preds = %240
  tail call void @DebugAssert(ptr noundef nonnull @.str.1, i64 noundef 3278, ptr noundef nonnull @.str.2) #3
  br label %.lr.ph116.split.split.split._crit_edge

.lr.ph116.split.split.split._crit_edge:           ; preds = %.lr.ph116.split.split.split, %240, %242
  %243 = phi ptr [ %.075113, %242 ], [ %.pre171, %240 ], [ %.pre171, %.lr.ph116.split.split.split ]
  %244 = getelementptr inbounds i8, ptr %243, i64 8
  %245 = load ptr, ptr %244, align 8, !tbaa !19
  %246 = getelementptr inbounds i16, ptr %245, i64 %.179112
  %247 = tail call ptr @StrStr(ptr noundef %246, ptr noundef %0) #3
  %.not95 = icmp eq ptr %247, null
  br i1 %.not95, label %253, label %248

248:                                              ; preds = %.lr.ph116.split.split.split._crit_edge
  %249 = tail call zeroext i8 @DebugAssertEnabled() #3
  %250 = getelementptr inbounds i8, ptr %243, i64 16
  %251 = load i64, ptr %250, align 8, !tbaa !14
  %252 = add i64 %17, %251
  store i64 %252, ptr %250, align 8, !tbaa !14
  br label %255

253:                                              ; preds = %.lr.ph116.split.split.split._crit_edge
  %254 = load ptr, ptr %.075113, align 8, !tbaa !29
  br label %255

255:                                              ; preds = %253, %248
  %.2 = phi i64 [ %.179112, %248 ], [ 0, %253 ]
  %.1 = phi ptr [ %.075113, %248 ], [ %254, %253 ]
  %256 = load ptr, ptr getelementptr inbounds (i8, ptr @FileBuffer, i64 16), align 8, !tbaa !17
  %.not = icmp eq ptr %.1, %256
  br i1 %.not, label %._crit_edge117, label %.lr.ph116.split.split.split, !llvm.loop !30

._crit_edge117:                                   ; preds = %233, %255, %170, %98, %3
  store i8 1, ptr getelementptr inbounds (i8, ptr @FileBuffer, i64 104), align 8, !tbaa !42
  store i8 1, ptr @FileBufferNeedRefresh, align 1, !tbaa !43
  %257 = tail call i64 @FileBufferRefresh()
  br label %.loopexit103

.loopexit103:                                     ; preds = %thread-pre-split.us, %._crit_edge117
  %.0 = phi i64 [ 0, %._crit_edge117 ], [ -9223372036854775799, %thread-pre-split.us ]
  ret i64 %.0
}

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 64}
!6 = !{!"", !7, i64 0, !10, i64 8, !7, i64 16, !7, i64 24, !11, i64 32, !12, i64 40, !12, i64 56, !12, i64 72, !12, i64 88, !8, i64 104, !8, i64 105, !8, i64 106, !7, i64 112}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"long long", !8, i64 0}
!12 = !{!"", !11, i64 0, !11, i64 8}
!13 = !{!6, !7, i64 112}
!14 = !{!15, !11, i64 16}
!15 = !{!"_EFI_EDITOR_LINE", !11, i64 0, !7, i64 8, !11, i64 16, !11, i64 24, !10, i64 32, !16, i64 40}
!16 = !{!"_LIST_ENTRY", !7, i64 0, !7, i64 8}
!17 = !{!6, !7, i64 16}
!18 = !{!15, !11, i64 0}
!19 = !{!15, !7, i64 8}
!20 = !{!15, !11, i64 24}
!21 = !{!22, !22, i64 0}
!22 = !{!"short", !8, i64 0}
!23 = distinct !{!23, !24, !25, !26}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!"llvm.loop.isvectorized", i32 1}
!26 = !{!"llvm.loop.unroll.runtime.disable"}
!27 = distinct !{!27, !24, !25}
!28 = distinct !{!28, !24, !25}
!29 = !{!16, !7, i64 0}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.unroll.disable"}
!33 = distinct !{!33, !24, !25, !26}
!34 = distinct !{!34, !24, !25, !26}
!35 = distinct !{!35, !24, !25}
!36 = distinct !{!36, !24, !25}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !24, !25, !26}
!39 = distinct !{!39, !24, !25, !26}
!40 = distinct !{!40, !32}
!41 = distinct !{!41, !24, !25}
!42 = !{!6, !8, i64 104}
!43 = !{!8, !8, i64 0}


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