; LLVM IR from Leet-Us-Code/DSA-A-Z-Practice :: Sid's Levels/Level - 3/Strings (Minimum Window Substring)

; 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"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

; Function Attrs: mustprogress uwtable
define dso_local void @_Z13findSubStringNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef %1) #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca [256 x i32], align 16
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca [256 x i32], align 16
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  store i32 0, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  store i32 0, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  %21 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #5
  %22 = trunc i64 %21 to i32
  store i32 %22, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %1)
  call void @llvm.lifetime.start.p0(i64 1024, ptr %9) #5
  call void @llvm.memset.p0.i64(ptr align 16 %9, i8 0, i64 1024, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %23

23:                                               ; preds = %38, %2
  %24 = load i32, ptr %10, align 4, !tbaa !9
  %25 = load i32, ptr %7, align 4, !tbaa !9
  %26 = icmp slt i32 %24, %25
  br i1 %26, label %28, label %27

27:                                               ; preds = %23
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  br label %45

28:                                               ; preds = %23
  %29 = load i32, ptr %10, align 4, !tbaa !9
  %30 = sext i32 %29 to i64
  %31 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %30)
          to label %32 unwind label %41

32:                                               ; preds = %28
  %33 = load i8, ptr %31, align 1, !tbaa !11
  %34 = sext i8 %33 to i64
  %35 = getelementptr inbounds [256 x i32], ptr %9, i64 0, i64 %34
  %36 = load i32, ptr %35, align 4, !tbaa !9
  %37 = add nsw i32 %36, 1
  store i32 %37, ptr %35, align 4, !tbaa !9
  br label %38

38:                                               ; preds = %32
  %39 = load i32, ptr %10, align 4, !tbaa !9
  %40 = add nsw i32 %39, 1
  store i32 %40, ptr %10, align 4, !tbaa !9
  br label %23, !llvm.loop !12

41:                                               ; preds = %28
  %42 = landingpad { ptr, i32 }
          cleanup
  %43 = extractvalue { ptr, i32 } %42, 0
  store ptr %43, ptr %11, align 8
  %44 = extractvalue { ptr, i32 } %42, 1
  store i32 %44, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  br label %158

45:                                               ; preds = %27
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %46

46:                                               ; preds = %60, %45
  %47 = load i32, ptr %13, align 4, !tbaa !9
  %48 = icmp slt i32 %47, 256
  br i1 %48, label %50, label %49

49:                                               ; preds = %46
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %63

50:                                               ; preds = %46
  %51 = load i32, ptr %13, align 4, !tbaa !9
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds [256 x i32], ptr %9, i64 0, i64 %52
  %54 = load i32, ptr %53, align 4, !tbaa !9
  %55 = icmp ne i32 %54, 0
  br i1 %55, label %56, label %59

56:                                               ; preds = %50
  %57 = load i32, ptr %6, align 4, !tbaa !9
  %58 = add nsw i32 %57, 1
  store i32 %58, ptr %6, align 4, !tbaa !9
  br label %59

59:                                               ; preds = %56, %50
  br label %60

60:                                               ; preds = %59
  %61 = load i32, ptr %13, align 4, !tbaa !9
  %62 = add nsw i32 %61, 1
  store i32 %62, ptr %13, align 4, !tbaa !9
  br label %46, !llvm.loop !14

63:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 2147483647, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1024, ptr %17) #5
  call void @llvm.memset.p0.i64(ptr align 16 %17, i8 0, i64 1024, i1 false)
  br label %64

64:                                               ; preds = %149, %63
  %65 = load i32, ptr %15, align 4, !tbaa !9
  %66 = load i32, ptr %7, align 4, !tbaa !9
  %67 = icmp slt i32 %65, %66
  br i1 %67, label %68, label %72

68:                                               ; preds = %64
  %69 = load i32, ptr %16, align 4, !tbaa !9
  %70 = load i32, ptr %7, align 4, !tbaa !9
  %71 = icmp slt i32 %69, %70
  br label %72

72:                                               ; preds = %68, %64
  %73 = phi i1 [ false, %64 ], [ %71, %68 ]
  br i1 %73, label %74, label %151

74:                                               ; preds = %72
  %75 = load i32, ptr %15, align 4, !tbaa !9
  %76 = sext i32 %75 to i64
  %77 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %76)
          to label %78 unwind label %88

78:                                               ; preds = %74
  %79 = load i8, ptr %77, align 1, !tbaa !11
  %80 = sext i8 %79 to i64
  %81 = getelementptr inbounds [256 x i32], ptr %17, i64 0, i64 %80
  %82 = load i32, ptr %81, align 4, !tbaa !9
  %83 = add nsw i32 %82, 1
  store i32 %83, ptr %81, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %84

84:                                               ; preds = %102, %78
  %85 = load i32, ptr %19, align 4, !tbaa !9
  %86 = icmp slt i32 %85, 256
  br i1 %86, label %92, label %87

87:                                               ; preds = %84
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %105

88:                                               ; preds = %151, %74
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %11, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %12, align 4
  br label %157

92:                                               ; preds = %84
  %93 = load i32, ptr %19, align 4, !tbaa !9
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [256 x i32], ptr %17, i64 0, i64 %94
  %96 = load i32, ptr %95, align 4, !tbaa !9
  %97 = icmp ne i32 %96, 0
  br i1 %97, label %98, label %101

98:                                               ; preds = %92
  %99 = load i32, ptr %18, align 4, !tbaa !9
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %18, align 4, !tbaa !9
  br label %101

101:                                              ; preds = %98, %92
  br label %102

102:                                              ; preds = %101
  %103 = load i32, ptr %19, align 4, !tbaa !9
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %19, align 4, !tbaa !9
  br label %84, !llvm.loop !15

105:                                              ; preds = %87
  %106 = load i32, ptr %18, align 4, !tbaa !9
  %107 = load i32, ptr %6, align 4, !tbaa !9
  %108 = icmp slt i32 %106, %107
  br i1 %108, label %109, label %112

109:                                              ; preds = %105
  %110 = load i32, ptr %15, align 4, !tbaa !9
  %111 = add nsw i32 %110, 1
  store i32 %111, ptr %15, align 4, !tbaa !9
  br label %149

112:                                              ; preds = %105
  %113 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %113, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %114 = load i32, ptr %15, align 4, !tbaa !9
  %115 = load i32, ptr %16, align 4, !tbaa !9
  %116 = sub nsw i32 %114, %115
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %20, align 4, !tbaa !9
  %118 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %119 unwind label %141

119:                                              ; preds = %112
  %120 = load i32, ptr %118, align 4, !tbaa !9
  store i32 %120, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  %121 = load i32, ptr %16, align 4, !tbaa !9
  %122 = sext i32 %121 to i64
  %123 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %122)
          to label %124 unwind label %145

124:                                              ; preds = %119
  %125 = load i8, ptr %123, align 1, !tbaa !11
  %126 = sext i8 %125 to i64
  %127 = getelementptr inbounds [256 x i32], ptr %17, i64 0, i64 %126
  %128 = load i32, ptr %127, align 4, !tbaa !9
  %129 = add nsw i32 %128, -1
  store i32 %129, ptr %127, align 4, !tbaa !9
  %130 = load i32, ptr %16, align 4, !tbaa !9
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %16, align 4, !tbaa !9
  %132 = load i32, ptr %15, align 4, !tbaa !9
  %133 = sext i32 %132 to i64
  %134 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %133)
          to label %135 unwind label %145

135:                                              ; preds = %124
  %136 = load i8, ptr %134, align 1, !tbaa !11
  %137 = sext i8 %136 to i64
  %138 = getelementptr inbounds [256 x i32], ptr %17, i64 0, i64 %137
  %139 = load i32, ptr %138, align 4, !tbaa !9
  %140 = add nsw i32 %139, -1
  store i32 %140, ptr %138, align 4, !tbaa !9
  br label %149

141:                                              ; preds = %112
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %11, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %150

145:                                              ; preds = %124, %119
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %11, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %12, align 4
  br label %150

149:                                              ; preds = %135, %109
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %64, !llvm.loop !16

150:                                              ; preds = %145, %141
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %157

151:                                              ; preds = %72
  %152 = load i32, ptr %5, align 4, !tbaa !9
  %153 = sext i32 %152 to i64
  %154 = load i32, ptr %14, align 4, !tbaa !9
  %155 = sext i32 %154 to i64
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %153, i64 noundef %155)
          to label %156 unwind label %88

156:                                              ; preds = %151
  call void @llvm.lifetime.end.p0(i64 1024, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 1024, ptr %9) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  ret void

157:                                              ; preds = %150, %88
  call void @llvm.lifetime.end.p0(i64 1024, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  br label %158

158:                                              ; preds = %157, %41
  call void @llvm.lifetime.end.p0(i64 1024, ptr %9) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  br label %159

159:                                              ; preds = %158
  %160 = load ptr, ptr %11, align 8
  %161 = load i32, ptr %12, align 4
  %162 = insertvalue { ptr, i32 } poison, ptr %160, 0
  %163 = insertvalue { ptr, i32 } %162, i32 %161, 1
  resume { ptr, i32 } %163
}

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) #2 align 2

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #4

; Function Attrs: mustprogress uwtable
declare void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), i64 noundef, i64 noundef) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

attributes #0 = { mustprogress 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 = { mustprogress 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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { inlinehint mustprogress 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 = { 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}


; 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"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

; Function Attrs: mustprogress uwtable
define dso_local void @_Z13findSubStringNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull %1) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::__cxx11::basic_string", align 8
  %4 = alloca [256 x i32], align 16
  %5 = alloca i32, align 4
  %6 = alloca [256 x i32], align 16
  %7 = alloca i32, align 4
  %8 = tail call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  %9 = trunc i64 %8 to i32
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %1)
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %4) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1024) %4, i8 0, i64 1024, i1 false)
  %10 = icmp sgt i32 %9, 0
  br i1 %10, label %.lr.ph.preheader, label %vector.body.preheader

.lr.ph.preheader:                                 ; preds = %2
  %wide.trip.count = and i64 %8, 2147483647
  br label %.lr.ph

.lr.ph50.preheader:                               ; preds = %vector.body.preheader
  %11 = getelementptr inbounds i8, ptr %6, i64 16
  %12 = getelementptr inbounds i8, ptr %6, i64 32
  %13 = getelementptr inbounds i8, ptr %6, i64 48
  %14 = getelementptr inbounds i8, ptr %6, i64 64
  %15 = getelementptr inbounds i8, ptr %6, i64 80
  %16 = getelementptr inbounds i8, ptr %6, i64 96
  %17 = getelementptr inbounds i8, ptr %6, i64 112
  %18 = getelementptr inbounds i8, ptr %6, i64 128
  %19 = getelementptr inbounds i8, ptr %6, i64 144
  %20 = getelementptr inbounds i8, ptr %6, i64 160
  %21 = getelementptr inbounds i8, ptr %6, i64 176
  %22 = getelementptr inbounds i8, ptr %6, i64 192
  %23 = getelementptr inbounds i8, ptr %6, i64 208
  %24 = getelementptr inbounds i8, ptr %6, i64 224
  %25 = getelementptr inbounds i8, ptr %6, i64 240
  %26 = getelementptr inbounds i8, ptr %6, i64 256
  %27 = getelementptr inbounds i8, ptr %6, i64 272
  %28 = getelementptr inbounds i8, ptr %6, i64 288
  %29 = getelementptr inbounds i8, ptr %6, i64 304
  %30 = getelementptr inbounds i8, ptr %6, i64 320
  %31 = getelementptr inbounds i8, ptr %6, i64 336
  %32 = getelementptr inbounds i8, ptr %6, i64 352
  %33 = getelementptr inbounds i8, ptr %6, i64 368
  %34 = getelementptr inbounds i8, ptr %6, i64 384
  %35 = getelementptr inbounds i8, ptr %6, i64 400
  %36 = getelementptr inbounds i8, ptr %6, i64 416
  %37 = getelementptr inbounds i8, ptr %6, i64 432
  %38 = getelementptr inbounds i8, ptr %6, i64 448
  %39 = getelementptr inbounds i8, ptr %6, i64 464
  %40 = getelementptr inbounds i8, ptr %6, i64 480
  %41 = getelementptr inbounds i8, ptr %6, i64 496
  %42 = getelementptr inbounds i8, ptr %6, i64 512
  %43 = getelementptr inbounds i8, ptr %6, i64 528
  %44 = getelementptr inbounds i8, ptr %6, i64 544
  %45 = getelementptr inbounds i8, ptr %6, i64 560
  %46 = getelementptr inbounds i8, ptr %6, i64 576
  %47 = getelementptr inbounds i8, ptr %6, i64 592
  %48 = getelementptr inbounds i8, ptr %6, i64 608
  %49 = getelementptr inbounds i8, ptr %6, i64 624
  %50 = getelementptr inbounds i8, ptr %6, i64 640
  %51 = getelementptr inbounds i8, ptr %6, i64 656
  %52 = getelementptr inbounds i8, ptr %6, i64 672
  %53 = getelementptr inbounds i8, ptr %6, i64 688
  %54 = getelementptr inbounds i8, ptr %6, i64 704
  %55 = getelementptr inbounds i8, ptr %6, i64 720
  %56 = getelementptr inbounds i8, ptr %6, i64 736
  %57 = getelementptr inbounds i8, ptr %6, i64 752
  %58 = getelementptr inbounds i8, ptr %6, i64 768
  %59 = getelementptr inbounds i8, ptr %6, i64 784
  %60 = getelementptr inbounds i8, ptr %6, i64 800
  %61 = getelementptr inbounds i8, ptr %6, i64 816
  %62 = getelementptr inbounds i8, ptr %6, i64 832
  %63 = getelementptr inbounds i8, ptr %6, i64 848
  %64 = getelementptr inbounds i8, ptr %6, i64 864
  %65 = getelementptr inbounds i8, ptr %6, i64 880
  %66 = getelementptr inbounds i8, ptr %6, i64 896
  %67 = getelementptr inbounds i8, ptr %6, i64 912
  %68 = getelementptr inbounds i8, ptr %6, i64 928
  %69 = getelementptr inbounds i8, ptr %6, i64 944
  %70 = getelementptr inbounds i8, ptr %6, i64 960
  %71 = getelementptr inbounds i8, ptr %6, i64 976
  %72 = getelementptr inbounds i8, ptr %6, i64 992
  %73 = getelementptr inbounds i8, ptr %6, i64 1008
  br label %.lr.ph50

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %74 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %indvars.iv)
  %75 = load i8, ptr %74, align 1, !tbaa !5
  %76 = sext i8 %75 to i64
  %77 = getelementptr inbounds [256 x i32], ptr %4, i64 0, i64 %76
  %78 = load i32, ptr %77, align 4, !tbaa !8
  %79 = add nsw i32 %78, 1
  store i32 %79, ptr %77, align 4, !tbaa !8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %vector.body.preheader, label %.lr.ph, !llvm.loop !10

vector.body.preheader:                            ; preds = %.lr.ph, %2
  %80 = getelementptr inbounds i8, ptr %4, i64 16
  %wide.load = load <4 x i32>, ptr %4, align 16, !tbaa !8
  %wide.load61 = load <4 x i32>, ptr %80, align 16, !tbaa !8
  %81 = icmp ne <4 x i32> %wide.load, zeroinitializer
  %82 = icmp ne <4 x i32> %wide.load61, zeroinitializer
  %83 = zext <4 x i1> %81 to <4 x i32>
  %84 = zext <4 x i1> %82 to <4 x i32>
  %85 = getelementptr inbounds i8, ptr %4, i64 32
  %86 = getelementptr inbounds i8, ptr %4, i64 48
  %wide.load.1 = load <4 x i32>, ptr %85, align 16, !tbaa !8
  %wide.load61.1 = load <4 x i32>, ptr %86, align 16, !tbaa !8
  %87 = icmp ne <4 x i32> %wide.load.1, zeroinitializer
  %88 = icmp ne <4 x i32> %wide.load61.1, zeroinitializer
  %89 = zext <4 x i1> %87 to <4 x i32>
  %90 = zext <4 x i1> %88 to <4 x i32>
  %91 = add nuw nsw <4 x i32> %83, %89
  %92 = add nuw nsw <4 x i32> %84, %90
  %93 = getelementptr inbounds i8, ptr %4, i64 64
  %94 = getelementptr inbounds i8, ptr %4, i64 80
  %wide.load.2 = load <4 x i32>, ptr %93, align 16, !tbaa !8
  %wide.load61.2 = load <4 x i32>, ptr %94, align 16, !tbaa !8
  %95 = icmp ne <4 x i32> %wide.load.2, zeroinitializer
  %96 = icmp ne <4 x i32> %wide.load61.2, zeroinitializer
  %97 = zext <4 x i1> %95 to <4 x i32>
  %98 = zext <4 x i1> %96 to <4 x i32>
  %99 = add nuw nsw <4 x i32> %91, %97
  %100 = add nuw nsw <4 x i32> %92, %98
  %101 = getelementptr inbounds i8, ptr %4, i64 96
  %102 = getelementptr inbounds i8, ptr %4, i64 112
  %wide.load.3 = load <4 x i32>, ptr %101, align 16, !tbaa !8
  %wide.load61.3 = load <4 x i32>, ptr %102, align 16, !tbaa !8
  %103 = icmp ne <4 x i32> %wide.load.3, zeroinitializer
  %104 = icmp ne <4 x i32> %wide.load61.3, zeroinitializer
  %105 = zext <4 x i1> %103 to <4 x i32>
  %106 = zext <4 x i1> %104 to <4 x i32>
  %107 = add nuw nsw <4 x i32> %99, %105
  %108 = add nuw nsw <4 x i32> %100, %106
  %109 = getelementptr inbounds i8, ptr %4, i64 128
  %110 = getelementptr inbounds i8, ptr %4, i64 144
  %wide.load.4 = load <4 x i32>, ptr %109, align 16, !tbaa !8
  %wide.load61.4 = load <4 x i32>, ptr %110, align 16, !tbaa !8
  %111 = icmp ne <4 x i32> %wide.load.4, zeroinitializer
  %112 = icmp ne <4 x i32> %wide.load61.4, zeroinitializer
  %113 = zext <4 x i1> %111 to <4 x i32>
  %114 = zext <4 x i1> %112 to <4 x i32>
  %115 = add nuw nsw <4 x i32> %107, %113
  %116 = add nuw nsw <4 x i32> %108, %114
  %117 = getelementptr inbounds i8, ptr %4, i64 160
  %118 = getelementptr inbounds i8, ptr %4, i64 176
  %wide.load.5 = load <4 x i32>, ptr %117, align 16, !tbaa !8
  %wide.load61.5 = load <4 x i32>, ptr %118, align 16, !tbaa !8
  %119 = icmp ne <4 x i32> %wide.load.5, zeroinitializer
  %120 = icmp ne <4 x i32> %wide.load61.5, zeroinitializer
  %121 = zext <4 x i1> %119 to <4 x i32>
  %122 = zext <4 x i1> %120 to <4 x i32>
  %123 = add nuw nsw <4 x i32> %115, %121
  %124 = add nuw nsw <4 x i32> %116, %122
  %125 = getelementptr inbounds i8, ptr %4, i64 192
  %126 = getelementptr inbounds i8, ptr %4, i64 208
  %wide.load.6 = load <4 x i32>, ptr %125, align 16, !tbaa !8
  %wide.load61.6 = load <4 x i32>, ptr %126, align 16, !tbaa !8
  %127 = icmp ne <4 x i32> %wide.load.6, zeroinitializer
  %128 = icmp ne <4 x i32> %wide.load61.6, zeroinitializer
  %129 = zext <4 x i1> %127 to <4 x i32>
  %130 = zext <4 x i1> %128 to <4 x i32>
  %131 = add nuw nsw <4 x i32> %123, %129
  %132 = add nuw nsw <4 x i32> %124, %130
  %133 = getelementptr inbounds i8, ptr %4, i64 224
  %134 = getelementptr inbounds i8, ptr %4, i64 240
  %wide.load.7 = load <4 x i32>, ptr %133, align 16, !tbaa !8
  %wide.load61.7 = load <4 x i32>, ptr %134, align 16, !tbaa !8
  %135 = icmp ne <4 x i32> %wide.load.7, zeroinitializer
  %136 = icmp ne <4 x i32> %wide.load61.7, zeroinitializer
  %137 = zext <4 x i1> %135 to <4 x i32>
  %138 = zext <4 x i1> %136 to <4 x i32>
  %139 = add <4 x i32> %131, %137
  %140 = add <4 x i32> %132, %138
  %141 = getelementptr inbounds i8, ptr %4, i64 256
  %142 = getelementptr inbounds i8, ptr %4, i64 272
  %wide.load.8 = load <4 x i32>, ptr %141, align 16, !tbaa !8
  %wide.load61.8 = load <4 x i32>, ptr %142, align 16, !tbaa !8
  %143 = icmp ne <4 x i32> %wide.load.8, zeroinitializer
  %144 = icmp ne <4 x i32> %wide.load61.8, zeroinitializer
  %145 = zext <4 x i1> %143 to <4 x i32>
  %146 = zext <4 x i1> %144 to <4 x i32>
  %147 = add <4 x i32> %139, %145
  %148 = add <4 x i32> %140, %146
  %149 = getelementptr inbounds i8, ptr %4, i64 288
  %150 = getelementptr inbounds i8, ptr %4, i64 304
  %wide.load.9 = load <4 x i32>, ptr %149, align 16, !tbaa !8
  %wide.load61.9 = load <4 x i32>, ptr %150, align 16, !tbaa !8
  %151 = icmp ne <4 x i32> %wide.load.9, zeroinitializer
  %152 = icmp ne <4 x i32> %wide.load61.9, zeroinitializer
  %153 = zext <4 x i1> %151 to <4 x i32>
  %154 = zext <4 x i1> %152 to <4 x i32>
  %155 = add <4 x i32> %147, %153
  %156 = add <4 x i32> %148, %154
  %157 = getelementptr inbounds i8, ptr %4, i64 320
  %158 = getelementptr inbounds i8, ptr %4, i64 336
  %wide.load.10 = load <4 x i32>, ptr %157, align 16, !tbaa !8
  %wide.load61.10 = load <4 x i32>, ptr %158, align 16, !tbaa !8
  %159 = icmp ne <4 x i32> %wide.load.10, zeroinitializer
  %160 = icmp ne <4 x i32> %wide.load61.10, zeroinitializer
  %161 = zext <4 x i1> %159 to <4 x i32>
  %162 = zext <4 x i1> %160 to <4 x i32>
  %163 = add <4 x i32> %155, %161
  %164 = add <4 x i32> %156, %162
  %165 = getelementptr inbounds i8, ptr %4, i64 352
  %166 = getelementptr inbounds i8, ptr %4, i64 368
  %wide.load.11 = load <4 x i32>, ptr %165, align 16, !tbaa !8
  %wide.load61.11 = load <4 x i32>, ptr %166, align 16, !tbaa !8
  %167 = icmp ne <4 x i32> %wide.load.11, zeroinitializer
  %168 = icmp ne <4 x i32> %wide.load61.11, zeroinitializer
  %169 = zext <4 x i1> %167 to <4 x i32>
  %170 = zext <4 x i1> %168 to <4 x i32>
  %171 = add <4 x i32> %163, %169
  %172 = add <4 x i32> %164, %170
  %173 = getelementptr inbounds i8, ptr %4, i64 384
  %174 = getelementptr inbounds i8, ptr %4, i64 400
  %wide.load.12 = load <4 x i32>, ptr %173, align 16, !tbaa !8
  %wide.load61.12 = load <4 x i32>, ptr %174, align 16, !tbaa !8
  %175 = icmp ne <4 x i32> %wide.load.12, zeroinitializer
  %176 = icmp ne <4 x i32> %wide.load61.12, zeroinitializer
  %177 = zext <4 x i1> %175 to <4 x i32>
  %178 = zext <4 x i1> %176 to <4 x i32>
  %179 = add <4 x i32> %171, %177
  %180 = add <4 x i32> %172, %178
  %181 = getelementptr inbounds i8, ptr %4, i64 416
  %182 = getelementptr inbounds i8, ptr %4, i64 432
  %wide.load.13 = load <4 x i32>, ptr %181, align 16, !tbaa !8
  %wide.load61.13 = load <4 x i32>, ptr %182, align 16, !tbaa !8
  %183 = icmp ne <4 x i32> %wide.load.13, zeroinitializer
  %184 = icmp ne <4 x i32> %wide.load61.13, zeroinitializer
  %185 = zext <4 x i1> %183 to <4 x i32>
  %186 = zext <4 x i1> %184 to <4 x i32>
  %187 = add <4 x i32> %179, %185
  %188 = add <4 x i32> %180, %186
  %189 = getelementptr inbounds i8, ptr %4, i64 448
  %190 = getelementptr inbounds i8, ptr %4, i64 464
  %wide.load.14 = load <4 x i32>, ptr %189, align 16, !tbaa !8
  %wide.load61.14 = load <4 x i32>, ptr %190, align 16, !tbaa !8
  %191 = icmp ne <4 x i32> %wide.load.14, zeroinitializer
  %192 = icmp ne <4 x i32> %wide.load61.14, zeroinitializer
  %193 = zext <4 x i1> %191 to <4 x i32>
  %194 = zext <4 x i1> %192 to <4 x i32>
  %195 = add <4 x i32> %187, %193
  %196 = add <4 x i32> %188, %194
  %197 = getelementptr inbounds i8, ptr %4, i64 480
  %198 = getelementptr inbounds i8, ptr %4, i64 496
  %wide.load.15 = load <4 x i32>, ptr %197, align 16, !tbaa !8
  %wide.load61.15 = load <4 x i32>, ptr %198, align 16, !tbaa !8
  %199 = icmp ne <4 x i32> %wide.load.15, zeroinitializer
  %200 = icmp ne <4 x i32> %wide.load61.15, zeroinitializer
  %201 = zext <4 x i1> %199 to <4 x i32>
  %202 = zext <4 x i1> %200 to <4 x i32>
  %203 = add <4 x i32> %195, %201
  %204 = add <4 x i32> %196, %202
  %205 = getelementptr inbounds i8, ptr %4, i64 512
  %206 = getelementptr inbounds i8, ptr %4, i64 528
  %wide.load.16 = load <4 x i32>, ptr %205, align 16, !tbaa !8
  %wide.load61.16 = load <4 x i32>, ptr %206, align 16, !tbaa !8
  %207 = icmp ne <4 x i32> %wide.load.16, zeroinitializer
  %208 = icmp ne <4 x i32> %wide.load61.16, zeroinitializer
  %209 = zext <4 x i1> %207 to <4 x i32>
  %210 = zext <4 x i1> %208 to <4 x i32>
  %211 = add <4 x i32> %203, %209
  %212 = add <4 x i32> %204, %210
  %213 = getelementptr inbounds i8, ptr %4, i64 544
  %214 = getelementptr inbounds i8, ptr %4, i64 560
  %wide.load.17 = load <4 x i32>, ptr %213, align 16, !tbaa !8
  %wide.load61.17 = load <4 x i32>, ptr %214, align 16, !tbaa !8
  %215 = icmp ne <4 x i32> %wide.load.17, zeroinitializer
  %216 = icmp ne <4 x i32> %wide.load61.17, zeroinitializer
  %217 = zext <4 x i1> %215 to <4 x i32>
  %218 = zext <4 x i1> %216 to <4 x i32>
  %219 = add <4 x i32> %211, %217
  %220 = add <4 x i32> %212, %218
  %221 = getelementptr inbounds i8, ptr %4, i64 576
  %222 = getelementptr inbounds i8, ptr %4, i64 592
  %wide.load.18 = load <4 x i32>, ptr %221, align 16, !tbaa !8
  %wide.load61.18 = load <4 x i32>, ptr %222, align 16, !tbaa !8
  %223 = icmp ne <4 x i32> %wide.load.18, zeroinitializer
  %224 = icmp ne <4 x i32> %wide.load61.18, zeroinitializer
  %225 = zext <4 x i1> %223 to <4 x i32>
  %226 = zext <4 x i1> %224 to <4 x i32>
  %227 = add <4 x i32> %219, %225
  %228 = add <4 x i32> %220, %226
  %229 = getelementptr inbounds i8, ptr %4, i64 608
  %230 = getelementptr inbounds i8, ptr %4, i64 624
  %wide.load.19 = load <4 x i32>, ptr %229, align 16, !tbaa !8
  %wide.load61.19 = load <4 x i32>, ptr %230, align 16, !tbaa !8
  %231 = icmp ne <4 x i32> %wide.load.19, zeroinitializer
  %232 = icmp ne <4 x i32> %wide.load61.19, zeroinitializer
  %233 = zext <4 x i1> %231 to <4 x i32>
  %234 = zext <4 x i1> %232 to <4 x i32>
  %235 = add <4 x i32> %227, %233
  %236 = add <4 x i32> %228, %234
  %237 = getelementptr inbounds i8, ptr %4, i64 640
  %238 = getelementptr inbounds i8, ptr %4, i64 656
  %wide.load.20 = load <4 x i32>, ptr %237, align 16, !tbaa !8
  %wide.load61.20 = load <4 x i32>, ptr %238, align 16, !tbaa !8
  %239 = icmp ne <4 x i32> %wide.load.20, zeroinitializer
  %240 = icmp ne <4 x i32> %wide.load61.20, zeroinitializer
  %241 = zext <4 x i1> %239 to <4 x i32>
  %242 = zext <4 x i1> %240 to <4 x i32>
  %243 = add <4 x i32> %235, %241
  %244 = add <4 x i32> %236, %242
  %245 = getelementptr inbounds i8, ptr %4, i64 672
  %246 = getelementptr inbounds i8, ptr %4, i64 688
  %wide.load.21 = load <4 x i32>, ptr %245, align 16, !tbaa !8
  %wide.load61.21 = load <4 x i32>, ptr %246, align 16, !tbaa !8
  %247 = icmp ne <4 x i32> %wide.load.21, zeroinitializer
  %248 = icmp ne <4 x i32> %wide.load61.21, zeroinitializer
  %249 = zext <4 x i1> %247 to <4 x i32>
  %250 = zext <4 x i1> %248 to <4 x i32>
  %251 = add <4 x i32> %243, %249
  %252 = add <4 x i32> %244, %250
  %253 = getelementptr inbounds i8, ptr %4, i64 704
  %254 = getelementptr inbounds i8, ptr %4, i64 720
  %wide.load.22 = load <4 x i32>, ptr %253, align 16, !tbaa !8
  %wide.load61.22 = load <4 x i32>, ptr %254, align 16, !tbaa !8
  %255 = icmp ne <4 x i32> %wide.load.22, zeroinitializer
  %256 = icmp ne <4 x i32> %wide.load61.22, zeroinitializer
  %257 = zext <4 x i1> %255 to <4 x i32>
  %258 = zext <4 x i1> %256 to <4 x i32>
  %259 = add <4 x i32> %251, %257
  %260 = add <4 x i32> %252, %258
  %261 = getelementptr inbounds i8, ptr %4, i64 736
  %262 = getelementptr inbounds i8, ptr %4, i64 752
  %wide.load.23 = load <4 x i32>, ptr %261, align 16, !tbaa !8
  %wide.load61.23 = load <4 x i32>, ptr %262, align 16, !tbaa !8
  %263 = icmp ne <4 x i32> %wide.load.23, zeroinitializer
  %264 = icmp ne <4 x i32> %wide.load61.23, zeroinitializer
  %265 = zext <4 x i1> %263 to <4 x i32>
  %266 = zext <4 x i1> %264 to <4 x i32>
  %267 = add <4 x i32> %259, %265
  %268 = add <4 x i32> %260, %266
  %269 = getelementptr inbounds i8, ptr %4, i64 768
  %270 = getelementptr inbounds i8, ptr %4, i64 784
  %wide.load.24 = load <4 x i32>, ptr %269, align 16, !tbaa !8
  %wide.load61.24 = load <4 x i32>, ptr %270, align 16, !tbaa !8
  %271 = icmp ne <4 x i32> %wide.load.24, zeroinitializer
  %272 = icmp ne <4 x i32> %wide.load61.24, zeroinitializer
  %273 = zext <4 x i1> %271 to <4 x i32>
  %274 = zext <4 x i1> %272 to <4 x i32>
  %275 = add <4 x i32> %267, %273
  %276 = add <4 x i32> %268, %274
  %277 = getelementptr inbounds i8, ptr %4, i64 800
  %278 = getelementptr inbounds i8, ptr %4, i64 816
  %wide.load.25 = load <4 x i32>, ptr %277, align 16, !tbaa !8
  %wide.load61.25 = load <4 x i32>, ptr %278, align 16, !tbaa !8
  %279 = icmp ne <4 x i32> %wide.load.25, zeroinitializer
  %280 = icmp ne <4 x i32> %wide.load61.25, zeroinitializer
  %281 = zext <4 x i1> %279 to <4 x i32>
  %282 = zext <4 x i1> %280 to <4 x i32>
  %283 = add <4 x i32> %275, %281
  %284 = add <4 x i32> %276, %282
  %285 = getelementptr inbounds i8, ptr %4, i64 832
  %286 = getelementptr inbounds i8, ptr %4, i64 848
  %wide.load.26 = load <4 x i32>, ptr %285, align 16, !tbaa !8
  %wide.load61.26 = load <4 x i32>, ptr %286, align 16, !tbaa !8
  %287 = icmp ne <4 x i32> %wide.load.26, zeroinitializer
  %288 = icmp ne <4 x i32> %wide.load61.26, zeroinitializer
  %289 = zext <4 x i1> %287 to <4 x i32>
  %290 = zext <4 x i1> %288 to <4 x i32>
  %291 = add <4 x i32> %283, %289
  %292 = add <4 x i32> %284, %290
  %293 = getelementptr inbounds i8, ptr %4, i64 864
  %294 = getelementptr inbounds i8, ptr %4, i64 880
  %wide.load.27 = load <4 x i32>, ptr %293, align 16, !tbaa !8
  %wide.load61.27 = load <4 x i32>, ptr %294, align 16, !tbaa !8
  %295 = icmp ne <4 x i32> %wide.load.27, zeroinitializer
  %296 = icmp ne <4 x i32> %wide.load61.27, zeroinitializer
  %297 = zext <4 x i1> %295 to <4 x i32>
  %298 = zext <4 x i1> %296 to <4 x i32>
  %299 = add <4 x i32> %291, %297
  %300 = add <4 x i32> %292, %298
  %301 = getelementptr inbounds i8, ptr %4, i64 896
  %302 = getelementptr inbounds i8, ptr %4, i64 912
  %wide.load.28 = load <4 x i32>, ptr %301, align 16, !tbaa !8
  %wide.load61.28 = load <4 x i32>, ptr %302, align 16, !tbaa !8
  %303 = icmp ne <4 x i32> %wide.load.28, zeroinitializer
  %304 = icmp ne <4 x i32> %wide.load61.28, zeroinitializer
  %305 = zext <4 x i1> %303 to <4 x i32>
  %306 = zext <4 x i1> %304 to <4 x i32>
  %307 = add <4 x i32> %299, %305
  %308 = add <4 x i32> %300, %306
  %309 = getelementptr inbounds i8, ptr %4, i64 928
  %310 = getelementptr inbounds i8, ptr %4, i64 944
  %wide.load.29 = load <4 x i32>, ptr %309, align 16, !tbaa !8
  %wide.load61.29 = load <4 x i32>, ptr %310, align 16, !tbaa !8
  %311 = icmp ne <4 x i32> %wide.load.29, zeroinitializer
  %312 = icmp ne <4 x i32> %wide.load61.29, zeroinitializer
  %313 = zext <4 x i1> %311 to <4 x i32>
  %314 = zext <4 x i1> %312 to <4 x i32>
  %315 = add <4 x i32> %307, %313
  %316 = add <4 x i32> %308, %314
  %317 = getelementptr inbounds i8, ptr %4, i64 960
  %318 = getelementptr inbounds i8, ptr %4, i64 976
  %wide.load.30 = load <4 x i32>, ptr %317, align 16, !tbaa !8
  %wide.load61.30 = load <4 x i32>, ptr %318, align 16, !tbaa !8
  %319 = icmp ne <4 x i32> %wide.load.30, zeroinitializer
  %320 = icmp ne <4 x i32> %wide.load61.30, zeroinitializer
  %321 = zext <4 x i1> %319 to <4 x i32>
  %322 = zext <4 x i1> %320 to <4 x i32>
  %323 = add <4 x i32> %315, %321
  %324 = add <4 x i32> %316, %322
  %325 = getelementptr inbounds i8, ptr %4, i64 992
  %326 = getelementptr inbounds i8, ptr %4, i64 1008
  %wide.load.31 = load <4 x i32>, ptr %325, align 16, !tbaa !8
  %wide.load61.31 = load <4 x i32>, ptr %326, align 16, !tbaa !8
  %327 = icmp ne <4 x i32> %wide.load.31, zeroinitializer
  %328 = icmp ne <4 x i32> %wide.load61.31, zeroinitializer
  %329 = zext <4 x i1> %327 to <4 x i32>
  %330 = zext <4 x i1> %328 to <4 x i32>
  %331 = add <4 x i32> %323, %329
  %332 = add <4 x i32> %324, %330
  %bin.rdx = add <4 x i32> %332, %331
  %333 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  store i32 2147483647, ptr %5, align 4, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %6) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1024) %6, i8 0, i64 1024, i1 false)
  br i1 %10, label %.lr.ph50.preheader, label %._crit_edge

.lr.ph50:                                         ; preds = %.lr.ph50.preheader, %556
  %.02949 = phi i32 [ %.130, %556 ], [ 0, %.lr.ph50.preheader ]
  %.03148 = phi i32 [ %.132, %556 ], [ 0, %.lr.ph50.preheader ]
  %.03447 = phi i32 [ %.135, %556 ], [ 0, %.lr.ph50.preheader ]
  %334 = sext i32 %.03148 to i64
  %335 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %334)
  %336 = load i8, ptr %335, align 1, !tbaa !5
  %337 = sext i8 %336 to i64
  %338 = getelementptr inbounds [256 x i32], ptr %6, i64 0, i64 %337
  %339 = load i32, ptr %338, align 4, !tbaa !8
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %338, align 4, !tbaa !8
  %wide.load70 = load <4 x i32>, ptr %6, align 16, !tbaa !8
  %wide.load71 = load <4 x i32>, ptr %11, align 16, !tbaa !8
  %341 = icmp ne <4 x i32> %wide.load70, zeroinitializer
  %342 = icmp ne <4 x i32> %wide.load71, zeroinitializer
  %343 = zext <4 x i1> %341 to <4 x i32>
  %344 = zext <4 x i1> %342 to <4 x i32>
  %wide.load70.1 = load <4 x i32>, ptr %12, align 16, !tbaa !8
  %wide.load71.1 = load <4 x i32>, ptr %13, align 16, !tbaa !8
  %345 = icmp ne <4 x i32> %wide.load70.1, zeroinitializer
  %346 = icmp ne <4 x i32> %wide.load71.1, zeroinitializer
  %347 = zext <4 x i1> %345 to <4 x i32>
  %348 = zext <4 x i1> %346 to <4 x i32>
  %349 = add nuw nsw <4 x i32> %343, %347
  %350 = add nuw nsw <4 x i32> %344, %348
  %wide.load70.2 = load <4 x i32>, ptr %14, align 16, !tbaa !8
  %wide.load71.2 = load <4 x i32>, ptr %15, align 16, !tbaa !8
  %351 = icmp ne <4 x i32> %wide.load70.2, zeroinitializer
  %352 = icmp ne <4 x i32> %wide.load71.2, zeroinitializer
  %353 = zext <4 x i1> %351 to <4 x i32>
  %354 = zext <4 x i1> %352 to <4 x i32>
  %355 = add nuw nsw <4 x i32> %349, %353
  %356 = add nuw nsw <4 x i32> %350, %354
  %wide.load70.3 = load <4 x i32>, ptr %16, align 16, !tbaa !8
  %wide.load71.3 = load <4 x i32>, ptr %17, align 16, !tbaa !8
  %357 = icmp ne <4 x i32> %wide.load70.3, zeroinitializer
  %358 = icmp ne <4 x i32> %wide.load71.3, zeroinitializer
  %359 = zext <4 x i1> %357 to <4 x i32>
  %360 = zext <4 x i1> %358 to <4 x i32>
  %361 = add nuw nsw <4 x i32> %355, %359
  %362 = add nuw nsw <4 x i32> %356, %360
  %wide.load70.4 = load <4 x i32>, ptr %18, align 16, !tbaa !8
  %wide.load71.4 = load <4 x i32>, ptr %19, align 16, !tbaa !8
  %363 = icmp ne <4 x i32> %wide.load70.4, zeroinitializer
  %364 = icmp ne <4 x i32> %wide.load71.4, zeroinitializer
  %365 = zext <4 x i1> %363 to <4 x i32>
  %366 = zext <4 x i1> %364 to <4 x i32>
  %367 = add nuw nsw <4 x i32> %361, %365
  %368 = add nuw nsw <4 x i32> %362, %366
  %wide.load70.5 = load <4 x i32>, ptr %20, align 16, !tbaa !8
  %wide.load71.5 = load <4 x i32>, ptr %21, align 16, !tbaa !8
  %369 = icmp ne <4 x i32> %wide.load70.5, zeroinitializer
  %370 = icmp ne <4 x i32> %wide.load71.5, zeroinitializer
  %371 = zext <4 x i1> %369 to <4 x i32>
  %372 = zext <4 x i1> %370 to <4 x i32>
  %373 = add nuw nsw <4 x i32> %367, %371
  %374 = add nuw nsw <4 x i32> %368, %372
  %wide.load70.6 = load <4 x i32>, ptr %22, align 16, !tbaa !8
  %wide.load71.6 = load <4 x i32>, ptr %23, align 16, !tbaa !8
  %375 = icmp ne <4 x i32> %wide.load70.6, zeroinitializer
  %376 = icmp ne <4 x i32> %wide.load71.6, zeroinitializer
  %377 = zext <4 x i1> %375 to <4 x i32>
  %378 = zext <4 x i1> %376 to <4 x i32>
  %379 = add nuw nsw <4 x i32> %373, %377
  %380 = add nuw nsw <4 x i32> %374, %378
  %wide.load70.7 = load <4 x i32>, ptr %24, align 16, !tbaa !8
  %wide.load71.7 = load <4 x i32>, ptr %25, align 16, !tbaa !8
  %381 = icmp ne <4 x i32> %wide.load70.7, zeroinitializer
  %382 = icmp ne <4 x i32> %wide.load71.7, zeroinitializer
  %383 = zext <4 x i1> %381 to <4 x i32>
  %384 = zext <4 x i1> %382 to <4 x i32>
  %385 = add <4 x i32> %379, %383
  %386 = add <4 x i32> %380, %384
  %wide.load70.8 = load <4 x i32>, ptr %26, align 16, !tbaa !8
  %wide.load71.8 = load <4 x i32>, ptr %27, align 16, !tbaa !8
  %387 = icmp ne <4 x i32> %wide.load70.8, zeroinitializer
  %388 = icmp ne <4 x i32> %wide.load71.8, zeroinitializer
  %389 = zext <4 x i1> %387 to <4 x i32>
  %390 = zext <4 x i1> %388 to <4 x i32>
  %391 = add <4 x i32> %385, %389
  %392 = add <4 x i32> %386, %390
  %wide.load70.9 = load <4 x i32>, ptr %28, align 16, !tbaa !8
  %wide.load71.9 = load <4 x i32>, ptr %29, align 16, !tbaa !8
  %393 = icmp ne <4 x i32> %wide.load70.9, zeroinitializer
  %394 = icmp ne <4 x i32> %wide.load71.9, zeroinitializer
  %395 = zext <4 x i1> %393 to <4 x i32>
  %396 = zext <4 x i1> %394 to <4 x i32>
  %397 = add <4 x i32> %391, %395
  %398 = add <4 x i32> %392, %396
  %wide.load70.10 = load <4 x i32>, ptr %30, align 16, !tbaa !8
  %wide.load71.10 = load <4 x i32>, ptr %31, align 16, !tbaa !8
  %399 = icmp ne <4 x i32> %wide.load70.10, zeroinitializer
  %400 = icmp ne <4 x i32> %wide.load71.10, zeroinitializer
  %401 = zext <4 x i1> %399 to <4 x i32>
  %402 = zext <4 x i1> %400 to <4 x i32>
  %403 = add <4 x i32> %397, %401
  %404 = add <4 x i32> %398, %402
  %wide.load70.11 = load <4 x i32>, ptr %32, align 16, !tbaa !8
  %wide.load71.11 = load <4 x i32>, ptr %33, align 16, !tbaa !8
  %405 = icmp ne <4 x i32> %wide.load70.11, zeroinitializer
  %406 = icmp ne <4 x i32> %wide.load71.11, zeroinitializer
  %407 = zext <4 x i1> %405 to <4 x i32>
  %408 = zext <4 x i1> %406 to <4 x i32>
  %409 = add <4 x i32> %403, %407
  %410 = add <4 x i32> %404, %408
  %wide.load70.12 = load <4 x i32>, ptr %34, align 16, !tbaa !8
  %wide.load71.12 = load <4 x i32>, ptr %35, align 16, !tbaa !8
  %411 = icmp ne <4 x i32> %wide.load70.12, zeroinitializer
  %412 = icmp ne <4 x i32> %wide.load71.12, zeroinitializer
  %413 = zext <4 x i1> %411 to <4 x i32>
  %414 = zext <4 x i1> %412 to <4 x i32>
  %415 = add <4 x i32> %409, %413
  %416 = add <4 x i32> %410, %414
  %wide.load70.13 = load <4 x i32>, ptr %36, align 16, !tbaa !8
  %wide.load71.13 = load <4 x i32>, ptr %37, align 16, !tbaa !8
  %417 = icmp ne <4 x i32> %wide.load70.13, zeroinitializer
  %418 = icmp ne <4 x i32> %wide.load71.13, zeroinitializer
  %419 = zext <4 x i1> %417 to <4 x i32>
  %420 = zext <4 x i1> %418 to <4 x i32>
  %421 = add <4 x i32> %415, %419
  %422 = add <4 x i32> %416, %420
  %wide.load70.14 = load <4 x i32>, ptr %38, align 16, !tbaa !8
  %wide.load71.14 = load <4 x i32>, ptr %39, align 16, !tbaa !8
  %423 = icmp ne <4 x i32> %wide.load70.14, zeroinitializer
  %424 = icmp ne <4 x i32> %wide.load71.14, zeroinitializer
  %425 = zext <4 x i1> %423 to <4 x i32>
  %426 = zext <4 x i1> %424 to <4 x i32>
  %427 = add <4 x i32> %421, %425
  %428 = add <4 x i32> %422, %426
  %wide.load70.15 = load <4 x i32>, ptr %40, align 16, !tbaa !8
  %wide.load71.15 = load <4 x i32>, ptr %41, align 16, !tbaa !8
  %429 = icmp ne <4 x i32> %wide.load70.15, zeroinitializer
  %430 = icmp ne <4 x i32> %wide.load71.15, zeroinitializer
  %431 = zext <4 x i1> %429 to <4 x i32>
  %432 = zext <4 x i1> %430 to <4 x i32>
  %433 = add <4 x i32> %427, %431
  %434 = add <4 x i32> %428, %432
  %wide.load70.16 = load <4 x i32>, ptr %42, align 16, !tbaa !8
  %wide.load71.16 = load <4 x i32>, ptr %43, align 16, !tbaa !8
  %435 = icmp ne <4 x i32> %wide.load70.16, zeroinitializer
  %436 = icmp ne <4 x i32> %wide.load71.16, zeroinitializer
  %437 = zext <4 x i1> %435 to <4 x i32>
  %438 = zext <4 x i1> %436 to <4 x i32>
  %439 = add <4 x i32> %433, %437
  %440 = add <4 x i32> %434, %438
  %wide.load70.17 = load <4 x i32>, ptr %44, align 16, !tbaa !8
  %wide.load71.17 = load <4 x i32>, ptr %45, align 16, !tbaa !8
  %441 = icmp ne <4 x i32> %wide.load70.17, zeroinitializer
  %442 = icmp ne <4 x i32> %wide.load71.17, zeroinitializer
  %443 = zext <4 x i1> %441 to <4 x i32>
  %444 = zext <4 x i1> %442 to <4 x i32>
  %445 = add <4 x i32> %439, %443
  %446 = add <4 x i32> %440, %444
  %wide.load70.18 = load <4 x i32>, ptr %46, align 16, !tbaa !8
  %wide.load71.18 = load <4 x i32>, ptr %47, align 16, !tbaa !8
  %447 = icmp ne <4 x i32> %wide.load70.18, zeroinitializer
  %448 = icmp ne <4 x i32> %wide.load71.18, zeroinitializer
  %449 = zext <4 x i1> %447 to <4 x i32>
  %450 = zext <4 x i1> %448 to <4 x i32>
  %451 = add <4 x i32> %445, %449
  %452 = add <4 x i32> %446, %450
  %wide.load70.19 = load <4 x i32>, ptr %48, align 16, !tbaa !8
  %wide.load71.19 = load <4 x i32>, ptr %49, align 16, !tbaa !8
  %453 = icmp ne <4 x i32> %wide.load70.19, zeroinitializer
  %454 = icmp ne <4 x i32> %wide.load71.19, zeroinitializer
  %455 = zext <4 x i1> %453 to <4 x i32>
  %456 = zext <4 x i1> %454 to <4 x i32>
  %457 = add <4 x i32> %451, %455
  %458 = add <4 x i32> %452, %456
  %wide.load70.20 = load <4 x i32>, ptr %50, align 16, !tbaa !8
  %wide.load71.20 = load <4 x i32>, ptr %51, align 16, !tbaa !8
  %459 = icmp ne <4 x i32> %wide.load70.20, zeroinitializer
  %460 = icmp ne <4 x i32> %wide.load71.20, zeroinitializer
  %461 = zext <4 x i1> %459 to <4 x i32>
  %462 = zext <4 x i1> %460 to <4 x i32>
  %463 = add <4 x i32> %457, %461
  %464 = add <4 x i32> %458, %462
  %wide.load70.21 = load <4 x i32>, ptr %52, align 16, !tbaa !8
  %wide.load71.21 = load <4 x i32>, ptr %53, align 16, !tbaa !8
  %465 = icmp ne <4 x i32> %wide.load70.21, zeroinitializer
  %466 = icmp ne <4 x i32> %wide.load71.21, zeroinitializer
  %467 = zext <4 x i1> %465 to <4 x i32>
  %468 = zext <4 x i1> %466 to <4 x i32>
  %469 = add <4 x i32> %463, %467
  %470 = add <4 x i32> %464, %468
  %wide.load70.22 = load <4 x i32>, ptr %54, align 16, !tbaa !8
  %wide.load71.22 = load <4 x i32>, ptr %55, align 16, !tbaa !8
  %471 = icmp ne <4 x i32> %wide.load70.22, zeroinitializer
  %472 = icmp ne <4 x i32> %wide.load71.22, zeroinitializer
  %473 = zext <4 x i1> %471 to <4 x i32>
  %474 = zext <4 x i1> %472 to <4 x i32>
  %475 = add <4 x i32> %469, %473
  %476 = add <4 x i32> %470, %474
  %wide.load70.23 = load <4 x i32>, ptr %56, align 16, !tbaa !8
  %wide.load71.23 = load <4 x i32>, ptr %57, align 16, !tbaa !8
  %477 = icmp ne <4 x i32> %wide.load70.23, zeroinitializer
  %478 = icmp ne <4 x i32> %wide.load71.23, zeroinitializer
  %479 = zext <4 x i1> %477 to <4 x i32>
  %480 = zext <4 x i1> %478 to <4 x i32>
  %481 = add <4 x i32> %475, %479
  %482 = add <4 x i32> %476, %480
  %wide.load70.24 = load <4 x i32>, ptr %58, align 16, !tbaa !8
  %wide.load71.24 = load <4 x i32>, ptr %59, align 16, !tbaa !8
  %483 = icmp ne <4 x i32> %wide.load70.24, zeroinitializer
  %484 = icmp ne <4 x i32> %wide.load71.24, zeroinitializer
  %485 = zext <4 x i1> %483 to <4 x i32>
  %486 = zext <4 x i1> %484 to <4 x i32>
  %487 = add <4 x i32> %481, %485
  %488 = add <4 x i32> %482, %486
  %wide.load70.25 = load <4 x i32>, ptr %60, align 16, !tbaa !8
  %wide.load71.25 = load <4 x i32>, ptr %61, align 16, !tbaa !8
  %489 = icmp ne <4 x i32> %wide.load70.25, zeroinitializer
  %490 = icmp ne <4 x i32> %wide.load71.25, zeroinitializer
  %491 = zext <4 x i1> %489 to <4 x i32>
  %492 = zext <4 x i1> %490 to <4 x i32>
  %493 = add <4 x i32> %487, %491
  %494 = add <4 x i32> %488, %492
  %wide.load70.26 = load <4 x i32>, ptr %62, align 16, !tbaa !8
  %wide.load71.26 = load <4 x i32>, ptr %63, align 16, !tbaa !8
  %495 = icmp ne <4 x i32> %wide.load70.26, zeroinitializer
  %496 = icmp ne <4 x i32> %wide.load71.26, zeroinitializer
  %497 = zext <4 x i1> %495 to <4 x i32>
  %498 = zext <4 x i1> %496 to <4 x i32>
  %499 = add <4 x i32> %493, %497
  %500 = add <4 x i32> %494, %498
  %wide.load70.27 = load <4 x i32>, ptr %64, align 16, !tbaa !8
  %wide.load71.27 = load <4 x i32>, ptr %65, align 16, !tbaa !8
  %501 = icmp ne <4 x i32> %wide.load70.27, zeroinitializer
  %502 = icmp ne <4 x i32> %wide.load71.27, zeroinitializer
  %503 = zext <4 x i1> %501 to <4 x i32>
  %504 = zext <4 x i1> %502 to <4 x i32>
  %505 = add <4 x i32> %499, %503
  %506 = add <4 x i32> %500, %504
  %wide.load70.28 = load <4 x i32>, ptr %66, align 16, !tbaa !8
  %wide.load71.28 = load <4 x i32>, ptr %67, align 16, !tbaa !8
  %507 = icmp ne <4 x i32> %wide.load70.28, zeroinitializer
  %508 = icmp ne <4 x i32> %wide.load71.28, zeroinitializer
  %509 = zext <4 x i1> %507 to <4 x i32>
  %510 = zext <4 x i1> %508 to <4 x i32>
  %511 = add <4 x i32> %505, %509
  %512 = add <4 x i32> %506, %510
  %wide.load70.29 = load <4 x i32>, ptr %68, align 16, !tbaa !8
  %wide.load71.29 = load <4 x i32>, ptr %69, align 16, !tbaa !8
  %513 = icmp ne <4 x i32> %wide.load70.29, zeroinitializer
  %514 = icmp ne <4 x i32> %wide.load71.29, zeroinitializer
  %515 = zext <4 x i1> %513 to <4 x i32>
  %516 = zext <4 x i1> %514 to <4 x i32>
  %517 = add <4 x i32> %511, %515
  %518 = add <4 x i32> %512, %516
  %wide.load70.30 = load <4 x i32>, ptr %70, align 16, !tbaa !8
  %wide.load71.30 = load <4 x i32>, ptr %71, align 16, !tbaa !8
  %519 = icmp ne <4 x i32> %wide.load70.30, zeroinitializer
  %520 = icmp ne <4 x i32> %wide.load71.30, zeroinitializer
  %521 = zext <4 x i1> %519 to <4 x i32>
  %522 = zext <4 x i1> %520 to <4 x i32>
  %523 = add <4 x i32> %517, %521
  %524 = add <4 x i32> %518, %522
  %wide.load70.31 = load <4 x i32>, ptr %72, align 16, !tbaa !8
  %wide.load71.31 = load <4 x i32>, ptr %73, align 16, !tbaa !8
  %525 = icmp ne <4 x i32> %wide.load70.31, zeroinitializer
  %526 = icmp ne <4 x i32> %wide.load71.31, zeroinitializer
  %527 = zext <4 x i1> %525 to <4 x i32>
  %528 = zext <4 x i1> %526 to <4 x i32>
  %529 = add <4 x i32> %523, %527
  %530 = add <4 x i32> %524, %528
  %bin.rdx73 = add <4 x i32> %530, %529
  %531 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx73)
  %532 = icmp ult i32 %531, %333
  br i1 %532, label %535, label %537

533:                                              ; preds = %._crit_edge
  %534 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %4) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #6
  resume { ptr, i32 } %534

535:                                              ; preds = %.lr.ph50
  %536 = add nsw i32 %.03148, 1
  br label %556

537:                                              ; preds = %.lr.ph50
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  %538 = add i32 %.03148, 1
  %539 = sub i32 %538, %.02949
  store i32 %539, ptr %7, align 4, !tbaa !8
  %540 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %541 = load i32, ptr %540, align 4, !tbaa !8
  store i32 %541, ptr %5, align 4, !tbaa !8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  %542 = sext i32 %.02949 to i64
  %543 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %542)
  %544 = load i8, ptr %543, align 1, !tbaa !5
  %545 = sext i8 %544 to i64
  %546 = getelementptr inbounds [256 x i32], ptr %6, i64 0, i64 %545
  %547 = load i32, ptr %546, align 4, !tbaa !8
  %548 = add nsw i32 %547, -1
  store i32 %548, ptr %546, align 4, !tbaa !8
  %549 = add nsw i32 %.02949, 1
  %550 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %334)
  %551 = load i8, ptr %550, align 1, !tbaa !5
  %552 = sext i8 %551 to i64
  %553 = getelementptr inbounds [256 x i32], ptr %6, i64 0, i64 %552
  %554 = load i32, ptr %553, align 4, !tbaa !8
  %555 = add nsw i32 %554, -1
  store i32 %555, ptr %553, align 4, !tbaa !8
  br label %556

556:                                              ; preds = %537, %535
  %.135 = phi i32 [ %.03447, %535 ], [ %.02949, %537 ]
  %.132 = phi i32 [ %536, %535 ], [ %.03148, %537 ]
  %.130 = phi i32 [ %.02949, %535 ], [ %549, %537 ]
  %557 = icmp slt i32 %.132, %9
  %558 = icmp slt i32 %.130, %9
  %559 = select i1 %557, i1 %558, i1 false
  br i1 %559, label %.lr.ph50, label %._crit_edge.loopexit, !llvm.loop !12

._crit_edge.loopexit:                             ; preds = %556
  %.pre = load i32, ptr %5, align 4, !tbaa !8
  %560 = sext i32 %.135 to i64
  %561 = sext i32 %.pre to i64
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %vector.body.preheader
  %562 = phi i64 [ 2147483647, %vector.body.preheader ], [ %561, %._crit_edge.loopexit ]
  %.034.lcssa = phi i64 [ 0, %vector.body.preheader ], [ %560, %._crit_edge.loopexit ]
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %1, i64 noundef %.034.lcssa, i64 noundef %562)
          to label %563 unwind label %533

563:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %4) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #6
  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 nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) local_unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

; 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 mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), i64 noundef, i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #5

attributes #0 = { mustprogress 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 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { inlinehint mustprogress 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 nosync nounwind speculatable willreturn memory(none) }
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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"int", !6, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11}


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