; LLVM IR from Tunghohin/Competitive_Coding :: Daimayuan (251)

; 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::basic_istream" = type { ptr, i64, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }

@dp = external dso_local global [256 x i32], align 16
@tmp = external dso_local global [256 x i32], align 16
@enable = external dso_local global [256 x i8], align 16
@val = external dso_local global [100010 x i32], align 16
@_ZSt3cin = external global %"class.std::basic_istream", align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %13 = call noundef zeroext i1 @_ZNSt8ios_base15sync_with_stdioEb(i1 noundef zeroext false)
  %14 = load ptr, ptr @_ZSt3cin, align 8, !tbaa !5
  %15 = getelementptr i8, ptr %14, i64 -24
  %16 = load i64, ptr %15, align 8
  %17 = getelementptr inbounds i8, ptr @_ZSt3cin, i64 %16
  %18 = call noundef ptr @_ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo(ptr noundef nonnull align 8 dereferenceable(264) %17, ptr noundef null)
  %19 = load ptr, ptr @_ZSt4cout, align 8, !tbaa !5
  %20 = getelementptr i8, ptr %19, i64 -24
  %21 = load i64, ptr %20, align 8
  %22 = getelementptr inbounds i8, ptr @_ZSt4cout, i64 %21
  %23 = call noundef ptr @_ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo(ptr noundef nonnull align 8 dereferenceable(264) %22, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #7
  %24 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) @_ZSt3cin, ptr noundef nonnull align 4 dereferenceable(4) %2)
  %25 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %24, ptr noundef nonnull align 4 dereferenceable(4) %3)
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #7
  store i32 1, ptr %4, align 4, !tbaa !8
  br label %26

26:                                               ; preds = %36, %0
  %27 = load i32, ptr %4, align 4, !tbaa !8
  %28 = load i32, ptr %2, align 4, !tbaa !8
  %29 = icmp sle i32 %27, %28
  br i1 %29, label %31, label %30

30:                                               ; preds = %26
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #7
  br label %39

31:                                               ; preds = %26
  %32 = load i32, ptr %4, align 4, !tbaa !8
  %33 = sext i32 %32 to i64
  %34 = getelementptr inbounds [100010 x i32], ptr @val, i64 0, i64 %33
  %35 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) @_ZSt3cin, ptr noundef nonnull align 4 dereferenceable(4) %34)
  br label %36

36:                                               ; preds = %31
  %37 = load i32, ptr %4, align 4, !tbaa !8
  %38 = add nsw i32 %37, 1
  store i32 %38, ptr %4, align 4, !tbaa !8
  br label %26, !llvm.loop !11

39:                                               ; preds = %30
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  store i32 0, ptr %5, align 4, !tbaa !8
  br label %40

40:                                               ; preds = %57, %39
  %41 = load i32, ptr %5, align 4, !tbaa !8
  %42 = load i32, ptr %3, align 4, !tbaa !8
  %43 = shl i32 1, %42
  %44 = icmp slt i32 %41, %43
  br i1 %44, label %46, label %45

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

46:                                               ; preds = %40
  %47 = load i32, ptr %5, align 4, !tbaa !8
  %48 = call i32 @llvm.ctpop.i32(i32 %47)
  %49 = load i32, ptr %3, align 4, !tbaa !8
  %50 = sdiv i32 %49, 2
  %51 = icmp sle i32 %48, %50
  br i1 %51, label %52, label %56

52:                                               ; preds = %46
  %53 = load i32, ptr %5, align 4, !tbaa !8
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %54
  store i8 1, ptr %55, align 1, !tbaa !13
  br label %56

56:                                               ; preds = %52, %46
  br label %57

57:                                               ; preds = %56
  %58 = load i32, ptr %5, align 4, !tbaa !8
  %59 = add nsw i32 %58, 1
  store i32 %59, ptr %5, align 4, !tbaa !8
  br label %40, !llvm.loop !15

60:                                               ; preds = %45
  call void @llvm.memset.p0.i64(ptr align 16 @dp, i8 -63, i64 1024, i1 false)
  store i32 0, ptr @dp, align 16, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  store i32 1, ptr %6, align 4, !tbaa !8
  br label %61

61:                                               ; preds = %155, %60
  %62 = load i32, ptr %6, align 4, !tbaa !8
  %63 = load i32, ptr %2, align 4, !tbaa !8
  %64 = icmp sle i32 %62, %63
  br i1 %64, label %66, label %65

65:                                               ; preds = %61
  store i32 8, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  br label %158

66:                                               ; preds = %61
  call void @llvm.memset.p0.i64(ptr align 16 @tmp, i8 -63, i64 1024, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  store i32 0, ptr %8, align 4, !tbaa !8
  br label %67

67:                                               ; preds = %133, %66
  %68 = load i32, ptr %8, align 4, !tbaa !8
  %69 = load i32, ptr %3, align 4, !tbaa !8
  %70 = shl i32 1, %69
  %71 = icmp slt i32 %68, %70
  br i1 %71, label %73, label %72

72:                                               ; preds = %67
  store i32 11, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  br label %136

73:                                               ; preds = %67
  %74 = load i32, ptr %8, align 4, !tbaa !8
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds [256 x i32], ptr @dp, i64 0, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !8
  %78 = icmp sge i32 %77, 0
  br i1 %78, label %79, label %132

79:                                               ; preds = %73
  %80 = load i32, ptr %8, align 4, !tbaa !8
  %81 = ashr i32 %80, 1
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds [256 x i32], ptr @tmp, i64 0, i64 %82
  %84 = load i32, ptr %8, align 4, !tbaa !8
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds [256 x i32], ptr @dp, i64 0, i64 %85
  %87 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %83, ptr noundef nonnull align 4 dereferenceable(4) %86)
  %88 = load i32, ptr %87, align 4, !tbaa !8
  %89 = load i32, ptr %8, align 4, !tbaa !8
  %90 = ashr i32 %89, 1
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds [256 x i32], ptr @tmp, i64 0, i64 %91
  store i32 %88, ptr %92, align 4, !tbaa !8
  %93 = load i32, ptr %8, align 4, !tbaa !8
  %94 = ashr i32 %93, 1
  %95 = load i32, ptr %3, align 4, !tbaa !8
  %96 = sub nsw i32 %95, 1
  %97 = shl i32 1, %96
  %98 = add nsw i32 %94, %97
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %99
  %101 = load i8, ptr %100, align 1, !tbaa !13, !range !16, !noundef !17
  %102 = trunc i8 %101 to i1
  br i1 %102, label %103, label %131

103:                                              ; preds = %79
  %104 = load i32, ptr %8, align 4, !tbaa !8
  %105 = ashr i32 %104, 1
  %106 = load i32, ptr %3, align 4, !tbaa !8
  %107 = sub nsw i32 %106, 1
  %108 = shl i32 1, %107
  %109 = add nsw i32 %105, %108
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds [256 x i32], ptr @tmp, i64 0, i64 %110
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  %112 = load i32, ptr %8, align 4, !tbaa !8
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds [256 x i32], ptr @dp, i64 0, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !8
  %116 = load i32, ptr %6, align 4, !tbaa !8
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds [100010 x i32], ptr @val, i64 0, i64 %117
  %119 = load i32, ptr %118, align 4, !tbaa !8
  %120 = add nsw i32 %115, %119
  store i32 %120, ptr %9, align 4, !tbaa !8
  %121 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %111, ptr noundef nonnull align 4 dereferenceable(4) %9)
  %122 = load i32, ptr %121, align 4, !tbaa !8
  %123 = load i32, ptr %8, align 4, !tbaa !8
  %124 = ashr i32 %123, 1
  %125 = load i32, ptr %3, align 4, !tbaa !8
  %126 = sub nsw i32 %125, 1
  %127 = shl i32 1, %126
  %128 = add nsw i32 %124, %127
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds [256 x i32], ptr @tmp, i64 0, i64 %129
  store i32 %122, ptr %130, align 4, !tbaa !8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  br label %131

131:                                              ; preds = %103, %79
  br label %132

132:                                              ; preds = %131, %73
  br label %133

133:                                              ; preds = %132
  %134 = load i32, ptr %8, align 4, !tbaa !8
  %135 = add nsw i32 %134, 1
  store i32 %135, ptr %8, align 4, !tbaa !8
  br label %67, !llvm.loop !18

136:                                              ; preds = %72
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !8
  br label %137

137:                                              ; preds = %151, %136
  %138 = load i32, ptr %10, align 4, !tbaa !8
  %139 = load i32, ptr %3, align 4, !tbaa !8
  %140 = shl i32 1, %139
  %141 = icmp slt i32 %138, %140
  br i1 %141, label %143, label %142

142:                                              ; preds = %137
  store i32 14, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  br label %154

143:                                              ; preds = %137
  %144 = load i32, ptr %10, align 4, !tbaa !8
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds [256 x i32], ptr @tmp, i64 0, i64 %145
  %147 = load i32, ptr %146, align 4, !tbaa !8
  %148 = load i32, ptr %10, align 4, !tbaa !8
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds [256 x i32], ptr @dp, i64 0, i64 %149
  store i32 %147, ptr %150, align 4, !tbaa !8
  br label %151

151:                                              ; preds = %143
  %152 = load i32, ptr %10, align 4, !tbaa !8
  %153 = add nsw i32 %152, 1
  store i32 %153, ptr %10, align 4, !tbaa !8
  br label %137, !llvm.loop !19

154:                                              ; preds = %142
  br label %155

155:                                              ; preds = %154
  %156 = load i32, ptr %6, align 4, !tbaa !8
  %157 = add nsw i32 %156, 1
  store i32 %157, ptr %6, align 4, !tbaa !8
  br label %61, !llvm.loop !20

158:                                              ; preds = %65
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  store i32 -1061109567, ptr %11, align 4, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  store i32 0, ptr %12, align 4, !tbaa !8
  br label %159

159:                                              ; preds = %171, %158
  %160 = load i32, ptr %12, align 4, !tbaa !8
  %161 = load i32, ptr %3, align 4, !tbaa !8
  %162 = shl i32 1, %161
  %163 = icmp slt i32 %160, %162
  br i1 %163, label %165, label %164

164:                                              ; preds = %159
  store i32 17, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %174

165:                                              ; preds = %159
  %166 = load i32, ptr %12, align 4, !tbaa !8
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds [256 x i32], ptr @dp, i64 0, i64 %167
  %169 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %168)
  %170 = load i32, ptr %169, align 4, !tbaa !8
  store i32 %170, ptr %11, align 4, !tbaa !8
  br label %171

171:                                              ; preds = %165
  %172 = load i32, ptr %12, align 4, !tbaa !8
  %173 = add nsw i32 %172, 1
  store i32 %173, ptr %12, align 4, !tbaa !8
  br label %159, !llvm.loop !21

174:                                              ; preds = %164
  %175 = load i32, ptr %11, align 4, !tbaa !8
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %175)
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #7
  %177 = load i32, ptr %1, align 4
  ret i32 %177
}

declare noundef zeroext i1 @_ZNSt8ios_base15sync_with_stdioEb(i1 noundef zeroext) #1

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo(ptr noundef nonnull align 8 dereferenceable(264), ptr noundef) #2 align 2

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

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #1

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

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

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #1

attributes #0 = { mustprogress norecurse 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 = { "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 = { 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 nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { 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 #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !10, i64 0}
!15 = distinct !{!15, !12}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}


; 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::basic_istream" = type { ptr, i64, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }

@dp = external dso_local global [256 x i32], align 16
@tmp = external dso_local global [256 x i32], align 16
@enable = external dso_local local_unnamed_addr global [256 x i8], align 16
@val = external dso_local global [100010 x i32], align 16
@_ZSt3cin = external global %"class.std::basic_istream", align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = tail call noundef zeroext i1 @_ZNSt8ios_base15sync_with_stdioEb(i1 noundef zeroext false)
  %6 = load ptr, ptr @_ZSt3cin, align 8, !tbaa !5
  %7 = getelementptr i8, ptr %6, i64 -24
  %8 = load i64, ptr %7, align 8
  %9 = getelementptr inbounds i8, ptr @_ZSt3cin, i64 %8
  %10 = tail call noundef ptr @_ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo(ptr noundef nonnull align 8 dereferenceable(264) %9, ptr noundef null)
  %11 = load ptr, ptr @_ZSt4cout, align 8, !tbaa !5
  %12 = getelementptr i8, ptr %11, i64 -24
  %13 = load i64, ptr %12, align 8
  %14 = getelementptr inbounds i8, ptr @_ZSt4cout, i64 %13
  %15 = tail call noundef ptr @_ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo(ptr noundef nonnull align 8 dereferenceable(264) %14, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %1) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2) #9
  %16 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) @_ZSt3cin, ptr noundef nonnull align 4 dereferenceable(4) %1)
  %17 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(4) %2)
  %18 = load i32, ptr %1, align 4, !tbaa !8
  %.not36 = icmp slt i32 %18, 1
  br i1 %.not36, label %.preheader35, label %.lr.ph

.preheader35.loopexit:                            ; preds = %.lr.ph
  %19 = icmp slt i32 %84, 1
  br label %.preheader35

.preheader35:                                     ; preds = %.preheader35.loopexit, %0
  %.not3346 = phi i1 [ %19, %.preheader35.loopexit ], [ true, %0 ]
  %20 = load i32, ptr %2, align 4, !tbaa !8
  %.not = icmp eq i32 %20, 31
  br i1 %.not, label %._crit_edge, label %iter.check

iter.check:                                       ; preds = %.preheader35
  %21 = shl nuw nsw i32 1, %20
  %22 = sdiv i32 %20, 2
  %wide.trip.count = zext nneg i32 %21 to i64
  %min.iters.check = icmp ult i32 %20, 3
  br i1 %min.iters.check, label %vec.epilog.scalar.ph, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check84 = icmp eq i32 %20, 3
  br i1 %min.iters.check84, label %vec.epilog.vector.body, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %wide.trip.count, 2147483632
  %broadcast.splatinsert = insertelement <16 x i32> poison, i32 %22, i64 0
  %broadcast.splat = shufflevector <16 x i32> %broadcast.splatinsert, <16 x i32> poison, <16 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %pred.store.continue114, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %pred.store.continue114 ]
  %vec.ind = phi <16 x i32> [ <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>, %vector.ph ], [ %vec.ind.next, %pred.store.continue114 ]
  %23 = call range(i32 0, 33) <16 x i32> @llvm.ctpop.v16i32(<16 x i32> %vec.ind)
  %24 = icmp sle <16 x i32> %23, %broadcast.splat
  %25 = extractelement <16 x i1> %24, i64 0
  br i1 %25, label %pred.store.if, label %pred.store.continue

pred.store.if:                                    ; preds = %vector.body
  %26 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %index
  store i8 1, ptr %26, align 16, !tbaa !11
  br label %pred.store.continue

pred.store.continue:                              ; preds = %pred.store.if, %vector.body
  %27 = extractelement <16 x i1> %24, i64 1
  br i1 %27, label %pred.store.if85, label %pred.store.continue86

pred.store.if85:                                  ; preds = %pred.store.continue
  %28 = or disjoint i64 %index, 1
  %29 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %28
  store i8 1, ptr %29, align 1, !tbaa !11
  br label %pred.store.continue86

pred.store.continue86:                            ; preds = %pred.store.if85, %pred.store.continue
  %30 = extractelement <16 x i1> %24, i64 2
  br i1 %30, label %pred.store.if87, label %pred.store.continue88

pred.store.if87:                                  ; preds = %pred.store.continue86
  %31 = or disjoint i64 %index, 2
  %32 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %31
  store i8 1, ptr %32, align 2, !tbaa !11
  br label %pred.store.continue88

pred.store.continue88:                            ; preds = %pred.store.if87, %pred.store.continue86
  %33 = extractelement <16 x i1> %24, i64 3
  br i1 %33, label %pred.store.if89, label %pred.store.continue90

pred.store.if89:                                  ; preds = %pred.store.continue88
  %34 = or disjoint i64 %index, 3
  %35 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %34
  store i8 1, ptr %35, align 1, !tbaa !11
  br label %pred.store.continue90

pred.store.continue90:                            ; preds = %pred.store.if89, %pred.store.continue88
  %36 = extractelement <16 x i1> %24, i64 4
  br i1 %36, label %pred.store.if91, label %pred.store.continue92

pred.store.if91:                                  ; preds = %pred.store.continue90
  %37 = or disjoint i64 %index, 4
  %38 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %37
  store i8 1, ptr %38, align 4, !tbaa !11
  br label %pred.store.continue92

pred.store.continue92:                            ; preds = %pred.store.if91, %pred.store.continue90
  %39 = extractelement <16 x i1> %24, i64 5
  br i1 %39, label %pred.store.if93, label %pred.store.continue94

pred.store.if93:                                  ; preds = %pred.store.continue92
  %40 = or disjoint i64 %index, 5
  %41 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %40
  store i8 1, ptr %41, align 1, !tbaa !11
  br label %pred.store.continue94

pred.store.continue94:                            ; preds = %pred.store.if93, %pred.store.continue92
  %42 = extractelement <16 x i1> %24, i64 6
  br i1 %42, label %pred.store.if95, label %pred.store.continue96

pred.store.if95:                                  ; preds = %pred.store.continue94
  %43 = or disjoint i64 %index, 6
  %44 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %43
  store i8 1, ptr %44, align 2, !tbaa !11
  br label %pred.store.continue96

pred.store.continue96:                            ; preds = %pred.store.if95, %pred.store.continue94
  %45 = extractelement <16 x i1> %24, i64 7
  br i1 %45, label %pred.store.if97, label %pred.store.continue98

pred.store.if97:                                  ; preds = %pred.store.continue96
  %46 = or disjoint i64 %index, 7
  %47 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %46
  store i8 1, ptr %47, align 1, !tbaa !11
  br label %pred.store.continue98

pred.store.continue98:                            ; preds = %pred.store.if97, %pred.store.continue96
  %48 = extractelement <16 x i1> %24, i64 8
  br i1 %48, label %pred.store.if99, label %pred.store.continue100

pred.store.if99:                                  ; preds = %pred.store.continue98
  %49 = or disjoint i64 %index, 8
  %50 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %49
  store i8 1, ptr %50, align 8, !tbaa !11
  br label %pred.store.continue100

pred.store.continue100:                           ; preds = %pred.store.if99, %pred.store.continue98
  %51 = extractelement <16 x i1> %24, i64 9
  br i1 %51, label %pred.store.if101, label %pred.store.continue102

pred.store.if101:                                 ; preds = %pred.store.continue100
  %52 = or disjoint i64 %index, 9
  %53 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %52
  store i8 1, ptr %53, align 1, !tbaa !11
  br label %pred.store.continue102

pred.store.continue102:                           ; preds = %pred.store.if101, %pred.store.continue100
  %54 = extractelement <16 x i1> %24, i64 10
  br i1 %54, label %pred.store.if103, label %pred.store.continue104

pred.store.if103:                                 ; preds = %pred.store.continue102
  %55 = or disjoint i64 %index, 10
  %56 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %55
  store i8 1, ptr %56, align 2, !tbaa !11
  br label %pred.store.continue104

pred.store.continue104:                           ; preds = %pred.store.if103, %pred.store.continue102
  %57 = extractelement <16 x i1> %24, i64 11
  br i1 %57, label %pred.store.if105, label %pred.store.continue106

pred.store.if105:                                 ; preds = %pred.store.continue104
  %58 = or disjoint i64 %index, 11
  %59 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %58
  store i8 1, ptr %59, align 1, !tbaa !11
  br label %pred.store.continue106

pred.store.continue106:                           ; preds = %pred.store.if105, %pred.store.continue104
  %60 = extractelement <16 x i1> %24, i64 12
  br i1 %60, label %pred.store.if107, label %pred.store.continue108

pred.store.if107:                                 ; preds = %pred.store.continue106
  %61 = or disjoint i64 %index, 12
  %62 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %61
  store i8 1, ptr %62, align 4, !tbaa !11
  br label %pred.store.continue108

pred.store.continue108:                           ; preds = %pred.store.if107, %pred.store.continue106
  %63 = extractelement <16 x i1> %24, i64 13
  br i1 %63, label %pred.store.if109, label %pred.store.continue110

pred.store.if109:                                 ; preds = %pred.store.continue108
  %64 = or disjoint i64 %index, 13
  %65 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %64
  store i8 1, ptr %65, align 1, !tbaa !11
  br label %pred.store.continue110

pred.store.continue110:                           ; preds = %pred.store.if109, %pred.store.continue108
  %66 = extractelement <16 x i1> %24, i64 14
  br i1 %66, label %pred.store.if111, label %pred.store.continue112

pred.store.if111:                                 ; preds = %pred.store.continue110
  %67 = or disjoint i64 %index, 14
  %68 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %67
  store i8 1, ptr %68, align 2, !tbaa !11
  br label %pred.store.continue112

pred.store.continue112:                           ; preds = %pred.store.if111, %pred.store.continue110
  %69 = extractelement <16 x i1> %24, i64 15
  br i1 %69, label %pred.store.if113, label %pred.store.continue114

pred.store.if113:                                 ; preds = %pred.store.continue112
  %70 = or disjoint i64 %index, 15
  %71 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %70
  store i8 1, ptr %71, align 1, !tbaa !11
  br label %pred.store.continue114

pred.store.continue114:                           ; preds = %pred.store.if113, %pred.store.continue112
  %index.next = add nuw i64 %index, 16
  %vec.ind.next = add <16 x i32> %vec.ind, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
  %72 = icmp eq i64 %index.next, %n.vec
  br i1 %72, label %._crit_edge, label %vector.body, !llvm.loop !13

vec.epilog.vector.body:                           ; preds = %vector.main.loop.iter.check
  %broadcast.splatinsert121 = insertelement <8 x i32> poison, i32 %22, i64 0
  %broadcast.splat122 = shufflevector <8 x i32> %broadcast.splatinsert121, <8 x i32> poison, <8 x i32> zeroinitializer
  %73 = icmp sgt <8 x i32> %broadcast.splat122, <i32 -1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 1, i32 2>
  %74 = extractelement <8 x i1> %73, i64 0
  br i1 %74, label %pred.store.if123, label %pred.store.continue124

pred.store.if123:                                 ; preds = %vec.epilog.vector.body
  store i8 1, ptr @enable, align 16, !tbaa !11
  br label %pred.store.continue124

pred.store.continue124:                           ; preds = %pred.store.if123, %vec.epilog.vector.body
  %75 = extractelement <8 x i1> %73, i64 1
  br i1 %75, label %pred.store.if125, label %pred.store.continue126

pred.store.if125:                                 ; preds = %pred.store.continue124
  store i8 1, ptr getelementptr inbounds (i8, ptr @enable, i64 1), align 1, !tbaa !11
  br label %pred.store.continue126

pred.store.continue126:                           ; preds = %pred.store.if125, %pred.store.continue124
  %76 = extractelement <8 x i1> %73, i64 2
  br i1 %76, label %pred.store.if127, label %pred.store.continue128

pred.store.if127:                                 ; preds = %pred.store.continue126
  store i8 1, ptr getelementptr inbounds (i8, ptr @enable, i64 2), align 2, !tbaa !11
  br label %pred.store.continue128

pred.store.continue128:                           ; preds = %pred.store.if127, %pred.store.continue126
  %77 = extractelement <8 x i1> %73, i64 3
  br i1 %77, label %pred.store.if129, label %pred.store.continue130

pred.store.if129:                                 ; preds = %pred.store.continue128
  store i8 1, ptr getelementptr inbounds (i8, ptr @enable, i64 3), align 1, !tbaa !11
  br label %pred.store.continue130

pred.store.continue130:                           ; preds = %pred.store.if129, %pred.store.continue128
  %78 = extractelement <8 x i1> %73, i64 4
  br i1 %78, label %pred.store.if131, label %pred.store.continue132

pred.store.if131:                                 ; preds = %pred.store.continue130
  store i8 1, ptr getelementptr inbounds (i8, ptr @enable, i64 4), align 4, !tbaa !11
  br label %pred.store.continue132

pred.store.continue132:                           ; preds = %pred.store.if131, %pred.store.continue130
  %79 = extractelement <8 x i1> %73, i64 5
  br i1 %79, label %pred.store.if133, label %pred.store.continue134

pred.store.if133:                                 ; preds = %pred.store.continue132
  store i8 1, ptr getelementptr inbounds (i8, ptr @enable, i64 5), align 1, !tbaa !11
  br label %pred.store.continue134

pred.store.continue134:                           ; preds = %pred.store.if133, %pred.store.continue132
  %80 = extractelement <8 x i1> %73, i64 6
  br i1 %80, label %pred.store.if135, label %pred.store.continue136

pred.store.if135:                                 ; preds = %pred.store.continue134
  store i8 1, ptr getelementptr inbounds (i8, ptr @enable, i64 6), align 2, !tbaa !11
  br label %pred.store.continue136

pred.store.continue136:                           ; preds = %pred.store.if135, %pred.store.continue134
  %81 = extractelement <8 x i1> %73, i64 7
  br i1 %81, label %pred.store.if137, label %._crit_edge

pred.store.if137:                                 ; preds = %pred.store.continue136
  store i8 1, ptr getelementptr inbounds (i8, ptr @enable, i64 7), align 1, !tbaa !11
  br label %._crit_edge

.lr.ph:                                           ; preds = %0, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 1, %0 ]
  %82 = getelementptr inbounds [100010 x i32], ptr @val, i64 0, i64 %indvars.iv
  %83 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) @_ZSt3cin, ptr noundef nonnull align 4 dereferenceable(4) %82)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %84 = load i32, ptr %1, align 4, !tbaa !8
  %85 = sext i32 %84 to i64
  %.not.not = icmp slt i64 %indvars.iv, %85
  br i1 %.not.not, label %.lr.ph, label %.preheader35.loopexit, !llvm.loop !17

._crit_edge:                                      ; preds = %pred.store.continue114, %90, %pred.store.continue136, %pred.store.if137, %.preheader35
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1024) @dp, i8 -63, i64 1024, i1 false)
  store i32 0, ptr @dp, align 16, !tbaa !8
  br i1 %.not3346, label %._crit_edge50, label %.lr.ph49

vec.epilog.scalar.ph:                             ; preds = %iter.check, %90
  %indvars.iv59 = phi i64 [ %indvars.iv.next60, %90 ], [ 0, %iter.check ]
  %86 = trunc nuw nsw i64 %indvars.iv59 to i32
  %87 = call range(i32 0, 32) i32 @llvm.ctpop.i32(i32 %86)
  %.not34 = icmp sgt i32 %87, %22
  br i1 %.not34, label %90, label %88

88:                                               ; preds = %vec.epilog.scalar.ph
  %89 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %indvars.iv59
  store i8 1, ptr %89, align 1, !tbaa !11
  br label %90

90:                                               ; preds = %vec.epilog.scalar.ph, %88
  %indvars.iv.next60 = add nuw nsw i64 %indvars.iv59, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next60, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %vec.epilog.scalar.ph, !llvm.loop !18

._crit_edge50:                                    ; preds = %._crit_edge45, %._crit_edge
  %91 = phi i32 [ %20, %._crit_edge ], [ %136, %._crit_edge45 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #9
  store i32 -1061109567, ptr %4, align 4, !tbaa !8
  %.not56 = icmp eq i32 %91, 31
  br i1 %.not56, label %._crit_edge54, label %.lr.ph53

.lr.ph49:                                         ; preds = %._crit_edge, %._crit_edge45
  %92 = phi i32 [ %136, %._crit_edge45 ], [ %20, %._crit_edge ]
  %93 = phi i32 [ %135, %._crit_edge45 ], [ %20, %._crit_edge ]
  %indvars.iv68 = phi i64 [ %indvars.iv.next69, %._crit_edge45 ], [ 1, %._crit_edge ]
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1024) @tmp, i8 -63, i64 1024, i1 false)
  %.not55 = icmp eq i32 %93, 31
  br i1 %.not55, label %._crit_edge45, label %.lr.ph42

.lr.ph42:                                         ; preds = %.lr.ph49
  %94 = getelementptr inbounds [100010 x i32], ptr @val, i64 0, i64 %indvars.iv68
  br label %97

.preheader:                                       ; preds = %130
  %.not79 = icmp eq i32 %131, 31
  br i1 %.not79, label %._crit_edge45, label %.lr.ph44.preheader

.lr.ph44.preheader:                               ; preds = %.preheader
  %95 = zext nneg i32 %132 to i64
  %96 = shl nuw nsw i64 %95, 2
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(1) @dp, ptr noundef nonnull align 16 dereferenceable(1) @tmp, i64 %96, i1 false), !tbaa !8
  br label %._crit_edge45

97:                                               ; preds = %.lr.ph42, %130
  %98 = phi i32 [ %92, %.lr.ph42 ], [ %131, %130 ]
  %indvars.iv62 = phi i64 [ 0, %.lr.ph42 ], [ %indvars.iv.next63, %130 ]
  %99 = getelementptr inbounds [256 x i32], ptr @dp, i64 0, i64 %indvars.iv62
  %100 = load i32, ptr %99, align 4, !tbaa !8
  %101 = icmp sgt i32 %100, -1
  br i1 %101, label %102, label %130

102:                                              ; preds = %97
  %103 = trunc nuw nsw i64 %indvars.iv62 to i32
  %104 = lshr i32 %103, 1
  %105 = zext nneg i32 %104 to i64
  %106 = getelementptr inbounds [256 x i32], ptr @tmp, i64 0, i64 %105
  %107 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %106, ptr noundef nonnull align 4 dereferenceable(4) %99)
  %108 = load i32, ptr %107, align 4, !tbaa !8
  store i32 %108, ptr %106, align 4, !tbaa !8
  %109 = load i32, ptr %2, align 4, !tbaa !8
  %110 = add nsw i32 %109, -1
  %111 = shl nuw i32 1, %110
  %112 = add nuw nsw i32 %111, %104
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds [256 x i8], ptr @enable, i64 0, i64 %113
  %115 = load i8, ptr %114, align 1, !tbaa !11, !range !19, !noundef !20
  %116 = trunc nuw i8 %115 to i1
  br i1 %116, label %117, label %130

117:                                              ; preds = %102
  %118 = getelementptr inbounds [256 x i32], ptr @tmp, i64 0, i64 %113
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #9
  %119 = load i32, ptr %99, align 4, !tbaa !8
  %120 = load i32, ptr %94, align 4, !tbaa !8
  %121 = add nsw i32 %120, %119
  store i32 %121, ptr %3, align 4, !tbaa !8
  %122 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %118, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %123 = load i32, ptr %122, align 4, !tbaa !8
  %124 = load i32, ptr %2, align 4, !tbaa !8
  %125 = add nsw i32 %124, -1
  %126 = shl nuw i32 1, %125
  %127 = add nuw nsw i32 %126, %104
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds [256 x i32], ptr @tmp, i64 0, i64 %128
  store i32 %123, ptr %129, align 4, !tbaa !8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #9
  br label %130

130:                                              ; preds = %97, %117, %102
  %131 = phi i32 [ %98, %97 ], [ %124, %117 ], [ %109, %102 ]
  %indvars.iv.next63 = add nuw nsw i64 %indvars.iv62, 1
  %132 = shl nuw i32 1, %131
  %133 = sext i32 %132 to i64
  %134 = icmp slt i64 %indvars.iv.next63, %133
  br i1 %134, label %97, label %.preheader, !llvm.loop !21

._crit_edge45:                                    ; preds = %.lr.ph49, %.lr.ph44.preheader, %.preheader
  %135 = phi i32 [ %131, %.lr.ph44.preheader ], [ %131, %.preheader ], [ 31, %.lr.ph49 ]
  %136 = phi i32 [ %131, %.lr.ph44.preheader ], [ %131, %.preheader ], [ %92, %.lr.ph49 ]
  %indvars.iv.next69 = add nuw nsw i64 %indvars.iv68, 1
  %137 = load i32, ptr %1, align 4, !tbaa !8
  %138 = sext i32 %137 to i64
  %.not33.not = icmp slt i64 %indvars.iv68, %138
  br i1 %.not33.not, label %.lr.ph49, label %._crit_edge50, !llvm.loop !22

._crit_edge54:                                    ; preds = %.lr.ph53, %._crit_edge50
  %139 = phi i32 [ -1061109567, %._crit_edge50 ], [ %143, %.lr.ph53 ]
  %140 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %139)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %1) #9
  ret i32 0

.lr.ph53:                                         ; preds = %._crit_edge50, %.lr.ph53
  %indvars.iv71 = phi i64 [ %indvars.iv.next72, %.lr.ph53 ], [ 0, %._crit_edge50 ]
  %141 = getelementptr inbounds [256 x i32], ptr @dp, i64 0, i64 %indvars.iv71
  %142 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 4 dereferenceable(4) %141)
  %143 = load i32, ptr %142, align 4, !tbaa !8
  store i32 %143, ptr %4, align 4, !tbaa !8
  %indvars.iv.next72 = add nuw nsw i64 %indvars.iv71, 1
  %144 = load i32, ptr %2, align 4, !tbaa !8
  %145 = shl nuw i32 1, %144
  %146 = sext i32 %145 to i64
  %147 = icmp slt i64 %indvars.iv.next72, %146
  br i1 %147, label %.lr.ph53, label %._crit_edge54, !llvm.loop !23
}

declare noundef zeroext i1 @_ZNSt8ios_base15sync_with_stdioEb(i1 noundef zeroext) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo(ptr noundef nonnull align 8 dereferenceable(264), ptr noundef) local_unnamed_addr #2 align 2

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

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.ctpop.i32(i32) #4

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #1

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <16 x i32> @llvm.ctpop.v16i32(<16 x i32>) #8

attributes #0 = { mustprogress norecurse 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 = { "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 = { 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 nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { 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 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !10, i64 0}
!13 = distinct !{!13, !14, !15, !16}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{!"llvm.loop.unroll.runtime.disable"}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14, !16, !15}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}


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