; LLVM IR from albertobsd/keyhunt :: keyhunt_legacy.ll (Z24thread_process_bsgs_bothPv)

; 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::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Point = type { %class.Int, %class.Int, %class.Int }
%class.Int = type { [1 x %struct.__mpz_struct] }
%struct.__mpz_struct = type { i32, i32, ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.tothread = type { i32, ptr, ptr }
%class.Secp256K1 = type { %class.Point, %class.Int, %class.Int, [8192 x %class.Point] }
%struct.bloom = type { i64, i64, i64, i8, x86_fp80, i8, i8, i8, double, ptr }

@GSn = external dso_local global %"class.std::vector", align 8
@_2GSn = external dso_local global %class.Point, align 8
@THREADOUTPUT = external dso_local global i32, align 4
@write_keys = external dso_local global %union.pthread_mutex_t, align 8
@bsgs_thread = external dso_local global %union.pthread_mutex_t, align 8
@steps = external dso_local global ptr, align 8
@ends = external dso_local global ptr, align 8
@FLAGQUIET = external dso_local global i32, align 4
@FLAGMATRIX = external dso_local global i32, align 4
@bsgs_found = external dso_local global ptr, align 8
@OriginalPointsBSGS = external dso_local global %"class.std::vector", align 8
@OriginalPointsBSGScompressed = external dso_local global ptr, align 8
@bloom_bP = external dso_local global ptr, align 8
@bsgs_aux = external dso_local global i64, align 8
@bsgs_point_number = external dso_local global i32, align 4
@BSGS_CURRENT = external dso_local global %class.Int, align 8
@BSGS_N_double = external dso_local global %class.Int, align 8
@BSGS_M = external dso_local global %class.Int, align 8
@BSGS_M_double = external dso_local global %class.Int, align 8
@n_range_end = external dso_local global %class.Int, align 8
@secp = external dso_local global ptr, align 8
@stdout = external global ptr, align 8
@.str.228 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.234 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.235 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.237 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.238 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.239 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.240 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.241 = external hidden unnamed_addr constant [23 x i8], align 1

declare void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1

declare void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #4

declare i32 @printf(ptr noundef, ...) #0

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #1

declare void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16)) #0

declare noundef zeroext i1 @_ZN3Int9IsGreaterEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #5

declare noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

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

declare void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0

declare noalias ptr @fopen(ptr noundef, ptr noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

declare i32 @fclose(ptr noundef) #0

declare i32 @fflush(ptr noundef) #0

declare void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef) #0

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #0

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

declare void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #0

; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr noundef) #1

; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_Z24thread_process_bsgs_bothPv(ptr noundef %0) #7 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca [32 x i8], align 16
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %class.Int, align 8
  %10 = alloca %class.Int, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %class.Point, align 8
  %14 = alloca %class.Point, align 8
  %15 = alloca %class.Point, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca %class.Point, align 8
  %25 = alloca i32, align 4
  %26 = alloca [513 x %class.Int], align 16
  %27 = alloca [1024 x %class.Point], align 16
  %28 = alloca %class.Int, align 8
  %29 = alloca %class.Int, align 8
  %30 = alloca %class.Int, align 8
  %31 = alloca %class.Int, align 8
  %32 = alloca %class.Int, align 8
  %33 = alloca %class.Int, align 8
  %34 = alloca %class.Point, align 8
  %35 = alloca %class.Point, align 8
  %36 = alloca %class.Point, align 8
  %37 = alloca %class.Point, align 8
  %38 = alloca %class.Point, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca %class.Point, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %6) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #8
  call void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %9)
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %10)
          to label %43 unwind label %92

43:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 48, ptr %13) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13)
          to label %44 unwind label %96

44:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 48, ptr %14) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %14)
          to label %45 unwind label %100

45:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 48, ptr %15) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %15)
          to label %46 unwind label %104

46:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %47 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 24) #9
          to label %48 unwind label %108

48:                                               ; preds = %46
  invoke void @_ZN8IntGroupC1Ei(ptr noundef nonnull align 8 dereferenceable(20) %47, i32 noundef 513)
          to label %49 unwind label %112

49:                                               ; preds = %48
  store ptr %47, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %24) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %50 unwind label %116

50:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  store i32 511, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8208, ptr %26) #8
  %51 = getelementptr inbounds [513 x %class.Int], ptr %26, i32 0, i32 0
  %52 = getelementptr inbounds %class.Int, ptr %51, i64 513
  br label %53

53:                                               ; preds = %55, %50
  %54 = phi ptr [ %51, %50 ], [ %56, %55 ]
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %54)
          to label %55 unwind label %120

55:                                               ; preds = %53
  %56 = getelementptr inbounds %class.Int, ptr %54, i64 1
  %57 = icmp eq ptr %56, %52
  br i1 %57, label %58, label %53

58:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 49152, ptr %27) #8
  %59 = getelementptr inbounds [1024 x %class.Point], ptr %27, i32 0, i32 0
  %60 = getelementptr inbounds %class.Point, ptr %59, i64 1024
  br label %61

61:                                               ; preds = %63, %58
  %62 = phi ptr [ %59, %58 ], [ %64, %63 ]
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %62)
          to label %63 unwind label %130

63:                                               ; preds = %61
  %64 = getelementptr inbounds %class.Point, ptr %62, i64 1
  %65 = icmp eq ptr %64, %60
  br i1 %65, label %66, label %61

66:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %28)
          to label %67 unwind label %140

67:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %29)
          to label %68 unwind label %144

68:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %30)
          to label %69 unwind label %148

69:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %70 unwind label %152

70:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %32)
          to label %71 unwind label %156

71:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %33)
          to label %72 unwind label %160

72:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 48, ptr %34) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %34)
          to label %73 unwind label %164

73:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 48, ptr %35) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %35)
          to label %74 unwind label %168

74:                                               ; preds = %73
  %75 = load ptr, ptr %23, align 8, !tbaa !5
  %76 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 0
  invoke void @_ZN8IntGroup3SetEP3Int(ptr noundef nonnull align 8 dereferenceable(20) %75, ptr noundef %76)
          to label %77 unwind label %172

77:                                               ; preds = %74
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %78, ptr %5, align 8, !tbaa !5
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.tothread, ptr %79, i32 0, i32 0
  %81 = load i32, ptr %80, align 8, !tbaa !11
  store i32 %81, ptr %20, align 4, !tbaa !9
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  call void @free(ptr noundef %82) #8
  %83 = load i64, ptr @bsgs_aux, align 8, !tbaa !13
  %84 = udiv i64 %83, 1024
  %85 = trunc i64 %84 to i32
  store i32 %85, ptr %22, align 4, !tbaa !9
  %86 = load i64, ptr @bsgs_aux, align 8, !tbaa !13
  %87 = urem i64 %86, 1024
  %88 = icmp ne i64 %87, 0
  br i1 %88, label %89, label %176

89:                                               ; preds = %77
  %90 = load i32, ptr %22, align 4, !tbaa !9
  %91 = add i32 %90, 1
  store i32 %91, ptr %22, align 4, !tbaa !9
  br label %176

92:                                               ; preds = %1
  %93 = landingpad { ptr, i32 }
          cleanup
  %94 = extractvalue { ptr, i32 } %93, 0
  store ptr %94, ptr %11, align 8
  %95 = extractvalue { ptr, i32 } %93, 1
  store i32 %95, ptr %12, align 4
  br label %676

96:                                               ; preds = %43
  %97 = landingpad { ptr, i32 }
          cleanup
  %98 = extractvalue { ptr, i32 } %97, 0
  store ptr %98, ptr %11, align 8
  %99 = extractvalue { ptr, i32 } %97, 1
  store i32 %99, ptr %12, align 4
  br label %675

100:                                              ; preds = %44
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %11, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %12, align 4
  br label %674

104:                                              ; preds = %45
  %105 = landingpad { ptr, i32 }
          cleanup
  %106 = extractvalue { ptr, i32 } %105, 0
  store ptr %106, ptr %11, align 8
  %107 = extractvalue { ptr, i32 } %105, 1
  store i32 %107, ptr %12, align 4
  br label %673

108:                                              ; preds = %46
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %11, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %12, align 4
  br label %672

112:                                              ; preds = %48
  %113 = landingpad { ptr, i32 }
          cleanup
  %114 = extractvalue { ptr, i32 } %113, 0
  store ptr %114, ptr %11, align 8
  %115 = extractvalue { ptr, i32 } %113, 1
  store i32 %115, ptr %12, align 4
  call void @_ZdlPvm(ptr noundef %47, i64 noundef 24) #10
  br label %672

116:                                              ; preds = %49
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %11, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %12, align 4
  br label %671

120:                                              ; preds = %53
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %11, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %12, align 4
  %124 = icmp eq ptr %51, %54
  br i1 %124, label %129, label %125

125:                                              ; preds = %125, %120
  %126 = phi ptr [ %54, %120 ], [ %127, %125 ]
  %127 = getelementptr inbounds %class.Int, ptr %126, i64 -1
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %127) #8
  %128 = icmp eq ptr %127, %51
  br i1 %128, label %129, label %125

129:                                              ; preds = %125, %120
  br label %670

130:                                              ; preds = %61
  %131 = landingpad { ptr, i32 }
          cleanup
  %132 = extractvalue { ptr, i32 } %131, 0
  store ptr %132, ptr %11, align 8
  %133 = extractvalue { ptr, i32 } %131, 1
  store i32 %133, ptr %12, align 4
  %134 = icmp eq ptr %59, %62
  br i1 %134, label %139, label %135

135:                                              ; preds = %135, %130
  %136 = phi ptr [ %62, %130 ], [ %137, %135 ]
  %137 = getelementptr inbounds %class.Point, ptr %136, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %137) #8
  %138 = icmp eq ptr %137, %59
  br i1 %138, label %139, label %135

139:                                              ; preds = %135, %130
  br label %656

140:                                              ; preds = %66
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %11, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %12, align 4
  br label %641

144:                                              ; preds = %67
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %11, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %12, align 4
  br label %640

148:                                              ; preds = %68
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %11, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %12, align 4
  br label %639

152:                                              ; preds = %69
  %153 = landingpad { ptr, i32 }
          cleanup
  %154 = extractvalue { ptr, i32 } %153, 0
  store ptr %154, ptr %11, align 8
  %155 = extractvalue { ptr, i32 } %153, 1
  store i32 %155, ptr %12, align 4
  br label %638

156:                                              ; preds = %70
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %11, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %12, align 4
  br label %637

160:                                              ; preds = %71
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %11, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %12, align 4
  br label %636

164:                                              ; preds = %72
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %11, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %12, align 4
  br label %635

168:                                              ; preds = %73
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %11, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %12, align 4
  br label %634

172:                                              ; preds = %248, %245, %244, %243, %233, %230, %228, %220, %217, %215, %203, %202, %199, %194, %192, %189, %188, %185, %178, %177, %176, %74
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %11, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %12, align 4
  br label %633

176:                                              ; preds = %89, %77
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef @BSGS_M_double)
          to label %177 unwind label %172

177:                                              ; preds = %176
  invoke void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(16) %33, i64 noundef 512)
          to label %178 unwind label %172

178:                                              ; preds = %177
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef @BSGS_M)
          to label %179 unwind label %172

179:                                              ; preds = %178
  store i32 1, ptr %21, align 4, !tbaa !9
  br label %180

180:                                              ; preds = %625, %179
  %181 = call i32 @rand() #8
  %182 = srem i32 %181, 2
  store i32 %182, ptr %18, align 4, !tbaa !9
  %183 = call i32 @pthread_mutex_lock(ptr noundef @bsgs_thread) #8
  %184 = load i32, ptr %18, align 4, !tbaa !9
  switch i32 %184, label %207 [
    i32 0, label %185
    i32 1, label %199
  ]

185:                                              ; preds = %180
  %186 = invoke noundef zeroext i1 @_ZN3Int9IsGreaterEPS_(ptr noundef nonnull align 8 dereferenceable(16) @n_range_end, ptr noundef @BSGS_CURRENT)
          to label %187 unwind label %172

187:                                              ; preds = %185
  br i1 %186, label %188, label %197

188:                                              ; preds = %187
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16) @n_range_end, ptr noundef @BSGS_N_double)
          to label %189 unwind label %172

189:                                              ; preds = %188
  %190 = invoke noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(16) @n_range_end, ptr noundef @BSGS_CURRENT)
          to label %191 unwind label %172

191:                                              ; preds = %189
  br i1 %190, label %192, label %194

192:                                              ; preds = %191
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef @BSGS_CURRENT)
          to label %193 unwind label %172

193:                                              ; preds = %192
  br label %196

194:                                              ; preds = %191
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef @n_range_end)
          to label %195 unwind label %172

195:                                              ; preds = %194
  br label %196

196:                                              ; preds = %195, %193
  br label %198

197:                                              ; preds = %187
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %198

198:                                              ; preds = %197, %196
  br label %207

199:                                              ; preds = %180
  %200 = invoke noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(16) @BSGS_CURRENT, ptr noundef @n_range_end)
          to label %201 unwind label %172

201:                                              ; preds = %199
  br i1 %200, label %202, label %205

202:                                              ; preds = %201
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef @BSGS_CURRENT)
          to label %203 unwind label %172

203:                                              ; preds = %202
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) @BSGS_CURRENT, ptr noundef @BSGS_N_double)
          to label %204 unwind label %172

204:                                              ; preds = %203
  br label %206

205:                                              ; preds = %201
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %206

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

207:                                              ; preds = %206, %198, %180
  %208 = call i32 @pthread_mutex_unlock(ptr noundef @bsgs_thread) #8
  %209 = load i32, ptr %21, align 4, !tbaa !9
  %210 = icmp eq i32 %209, 0
  br i1 %210, label %211, label %212

211:                                              ; preds = %207
  br label %626

212:                                              ; preds = %207
  %213 = load i32, ptr @FLAGMATRIX, align 4, !tbaa !9
  %214 = icmp ne i32 %213, 0
  br i1 %214, label %215, label %225

215:                                              ; preds = %212
  %216 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %217 unwind label %172

217:                                              ; preds = %215
  store ptr %216, ptr %7, align 8, !tbaa !5
  %218 = load ptr, ptr %7, align 8, !tbaa !5
  %219 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.234, ptr noundef %218)
          to label %220 unwind label %172

220:                                              ; preds = %217
  %221 = load ptr, ptr @stdout, align 8, !tbaa !5
  %222 = invoke i32 @fflush(ptr noundef %221)
          to label %223 unwind label %172

223:                                              ; preds = %220
  %224 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %224) #8
  br label %239

225:                                              ; preds = %212
  %226 = load i32, ptr @FLAGQUIET, align 4, !tbaa !9
  %227 = icmp eq i32 %226, 0
  br i1 %227, label %228, label %238

228:                                              ; preds = %225
  %229 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %230 unwind label %172

230:                                              ; preds = %228
  store ptr %229, ptr %7, align 8, !tbaa !5
  %231 = load ptr, ptr %7, align 8, !tbaa !5
  %232 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.235, ptr noundef %231)
          to label %233 unwind label %172

233:                                              ; preds = %230
  %234 = load ptr, ptr @stdout, align 8, !tbaa !5
  %235 = invoke i32 @fflush(ptr noundef %234)
          to label %236 unwind label %172

236:                                              ; preds = %233
  %237 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %237) #8
  store i32 1, ptr @THREADOUTPUT, align 4, !tbaa !9
  br label %238

238:                                              ; preds = %236, %225
  br label %239

239:                                              ; preds = %238, %223
  call void @llvm.lifetime.start.p0(i64 48, ptr %36) #8
  %240 = load ptr, ptr @secp, align 8, !tbaa !5
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8 %36, ptr noundef nonnull align 8 dereferenceable(393296) %240, ptr noundef %9)
          to label %241 unwind label %304

241:                                              ; preds = %239
  %242 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %13, ptr noundef nonnull align 8 dereferenceable(48) %36)
          to label %243 unwind label %308

243:                                              ; preds = %241
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %36) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %36) #8
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %9)
          to label %244 unwind label %172

244:                                              ; preds = %243
  invoke void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(16) %32)
          to label %245 unwind label %172

245:                                              ; preds = %244
  %246 = load ptr, ptr @secp, align 8, !tbaa !5
  %247 = getelementptr inbounds %class.Secp256K1, ptr %246, i32 0, i32 2
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %247)
          to label %248 unwind label %172

248:                                              ; preds = %245
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %33)
          to label %249 unwind label %172

249:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 48, ptr %37) #8
  %250 = load ptr, ptr @secp, align 8, !tbaa !5
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8 %37, ptr noundef nonnull align 8 dereferenceable(393296) %250, ptr noundef %32)
          to label %251 unwind label %313

251:                                              ; preds = %249
  %252 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %14, ptr noundef nonnull align 8 dereferenceable(48) %37)
          to label %253 unwind label %317

253:                                              ; preds = %251
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %37) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %37) #8
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %254

254:                                              ; preds = %615, %253
  %255 = load i32, ptr %16, align 4, !tbaa !9
  %256 = load i32, ptr @bsgs_point_number, align 4, !tbaa !9
  %257 = icmp ult i32 %255, %256
  br i1 %257, label %258, label %618

258:                                              ; preds = %254
  %259 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %260 = load i32, ptr %16, align 4, !tbaa !9
  %261 = zext i32 %260 to i64
  %262 = getelementptr inbounds i32, ptr %259, i64 %261
  %263 = load i32, ptr %262, align 4, !tbaa !9
  %264 = icmp eq i32 %263, 0
  br i1 %264, label %265, label %614

265:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 48, ptr %38) #8
  %266 = load ptr, ptr @secp, align 8, !tbaa !5
  %267 = load i32, ptr %16, align 4, !tbaa !9
  %268 = zext i32 %267 to i64
  %269 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @OriginalPointsBSGS, i64 noundef %268) #8
  invoke void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind writable sret(%class.Point) align 8 %38, ptr noundef nonnull align 8 dereferenceable(393296) %266, ptr noundef nonnull align 8 dereferenceable(48) %269, ptr noundef nonnull align 8 dereferenceable(48) %14)
          to label %270 unwind label %322

270:                                              ; preds = %265
  %271 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %24, ptr noundef nonnull align 8 dereferenceable(48) %38)
          to label %272 unwind label %326

272:                                              ; preds = %270
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %38) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %273

273:                                              ; preds = %609, %272
  %274 = load i32, ptr %39, align 4, !tbaa !9
  %275 = load i32, ptr %22, align 4, !tbaa !9
  %276 = icmp ult i32 %274, %275
  br i1 %276, label %277, label %284

277:                                              ; preds = %273
  %278 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %279 = load i32, ptr %16, align 4, !tbaa !9
  %280 = zext i32 %279 to i64
  %281 = getelementptr inbounds i32, ptr %278, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !9
  %283 = icmp eq i32 %282, 0
  br label %284

284:                                              ; preds = %277, %273
  %285 = phi i1 [ false, %273 ], [ %283, %277 ]
  br i1 %285, label %286, label %613

286:                                              ; preds = %284
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %287

287:                                              ; preds = %301, %286
  %288 = load i32, ptr %40, align 4, !tbaa !9
  %289 = load i32, ptr %25, align 4, !tbaa !9
  %290 = icmp slt i32 %288, %289
  br i1 %290, label %291, label %335

291:                                              ; preds = %287
  %292 = load i32, ptr %40, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %293
  %295 = load i32, ptr %40, align 4, !tbaa !9
  %296 = sext i32 %295 to i64
  %297 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %296) #8
  %298 = getelementptr inbounds %class.Point, ptr %297, i32 0, i32 0
  %299 = getelementptr inbounds %class.Point, ptr %24, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %294, ptr noundef %298, ptr noundef %299)
          to label %300 unwind label %331

300:                                              ; preds = %291
  br label %301

301:                                              ; preds = %300
  %302 = load i32, ptr %40, align 4, !tbaa !9
  %303 = add nsw i32 %302, 1
  store i32 %303, ptr %40, align 4, !tbaa !9
  br label %287, !llvm.loop !15

304:                                              ; preds = %239
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %11, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %12, align 4
  br label %312

308:                                              ; preds = %241
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %11, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %12, align 4
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %36) #8
  br label %312

312:                                              ; preds = %308, %304
  call void @llvm.lifetime.end.p0(i64 48, ptr %36) #8
  br label %633

313:                                              ; preds = %249
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %11, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %12, align 4
  br label %321

317:                                              ; preds = %251
  %318 = landingpad { ptr, i32 }
          cleanup
  %319 = extractvalue { ptr, i32 } %318, 0
  store ptr %319, ptr %11, align 8
  %320 = extractvalue { ptr, i32 } %318, 1
  store i32 %320, ptr %12, align 4
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %37) #8
  br label %321

321:                                              ; preds = %317, %313
  call void @llvm.lifetime.end.p0(i64 48, ptr %37) #8
  br label %633

322:                                              ; preds = %265
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %11, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %12, align 4
  br label %330

326:                                              ; preds = %270
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %11, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %12, align 4
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %38) #8
  br label %330

330:                                              ; preds = %326, %322
  call void @llvm.lifetime.end.p0(i64 48, ptr %38) #8
  br label %633

331:                                              ; preds = %607, %605, %603, %600, %598, %596, %594, %593, %588, %586, %584, %451, %445, %443, %441, %440, %436, %434, %433, %428, %426, %415, %408, %402, %400, %398, %397, %393, %391, %390, %385, %379, %377, %375, %374, %370, %364, %362, %360, %352, %350, %344, %335, %291
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %11, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %12, align 4
  br label %612

335:                                              ; preds = %287
  %336 = load i32, ptr %40, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %337
  %339 = load i32, ptr %40, align 4, !tbaa !9
  %340 = sext i32 %339 to i64
  %341 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %340) #8
  %342 = getelementptr inbounds %class.Point, ptr %341, i32 0, i32 0
  %343 = getelementptr inbounds %class.Point, ptr %24, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %338, ptr noundef %342, ptr noundef %343)
          to label %344 unwind label %331

344:                                              ; preds = %335
  %345 = load i32, ptr %40, align 4, !tbaa !9
  %346 = add nsw i32 %345, 1
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %347
  %349 = getelementptr inbounds %class.Point, ptr %24, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %348, ptr noundef @_2GSn, ptr noundef %349)
          to label %350 unwind label %331

350:                                              ; preds = %344
  %351 = load ptr, ptr %23, align 8, !tbaa !5
  invoke void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20) %351)
          to label %352 unwind label %331

352:                                              ; preds = %350
  %353 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 512
  %354 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %353, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %355 unwind label %331

355:                                              ; preds = %352
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %356

356:                                              ; preds = %423, %355
  %357 = load i32, ptr %40, align 4, !tbaa !9
  %358 = load i32, ptr %25, align 4, !tbaa !9
  %359 = icmp slt i32 %357, %358
  br i1 %359, label %360, label %426

360:                                              ; preds = %356
  %361 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %34, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %362 unwind label %331

362:                                              ; preds = %360
  %363 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %35, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %364 unwind label %331

364:                                              ; preds = %362
  %365 = load i32, ptr %40, align 4, !tbaa !9
  %366 = sext i32 %365 to i64
  %367 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %366) #8
  %368 = getelementptr inbounds %class.Point, ptr %367, i32 0, i32 1
  %369 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %28, ptr noundef %368, ptr noundef %369)
          to label %370 unwind label %331

370:                                              ; preds = %364
  %371 = load i32, ptr %40, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %372
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef %28, ptr noundef %373)
          to label %374 unwind label %331

374:                                              ; preds = %370
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef %30)
          to label %375 unwind label %331

375:                                              ; preds = %374
  %376 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %376)
          to label %377 unwind label %331

377:                                              ; preds = %375
  %378 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %378, ptr noundef %31)
          to label %379 unwind label %331

379:                                              ; preds = %377
  %380 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  %381 = load i32, ptr %40, align 4, !tbaa !9
  %382 = sext i32 %381 to i64
  %383 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %382) #8
  %384 = getelementptr inbounds %class.Point, ptr %383, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %380, ptr noundef %384)
          to label %385 unwind label %331

385:                                              ; preds = %379
  %386 = load i32, ptr %40, align 4, !tbaa !9
  %387 = sext i32 %386 to i64
  %388 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %387) #8
  %389 = getelementptr inbounds %class.Point, ptr %388, i32 0, i32 1
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef %389)
          to label %390 unwind label %331

390:                                              ; preds = %385
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %29)
          to label %391 unwind label %331

391:                                              ; preds = %390
  %392 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef %392)
          to label %393 unwind label %331

393:                                              ; preds = %391
  %394 = load i32, ptr %40, align 4, !tbaa !9
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %395
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef %29, ptr noundef %396)
          to label %397 unwind label %331

397:                                              ; preds = %393
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef %30)
          to label %398 unwind label %331

398:                                              ; preds = %397
  %399 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %399)
          to label %400 unwind label %331

400:                                              ; preds = %398
  %401 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %401, ptr noundef %31)
          to label %402 unwind label %331

402:                                              ; preds = %400
  %403 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  %404 = load i32, ptr %40, align 4, !tbaa !9
  %405 = sext i32 %404 to i64
  %406 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %405) #8
  %407 = getelementptr inbounds %class.Point, ptr %406, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %403, ptr noundef %407)
          to label %408 unwind label %331

408:                                              ; preds = %402
  %409 = load i32, ptr %40, align 4, !tbaa !9
  %410 = add nsw i32 %409, 1
  %411 = add nsw i32 512, %410
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 %412
  %414 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %413, ptr noundef nonnull align 8 dereferenceable(48) %34)
          to label %415 unwind label %331

415:                                              ; preds = %408
  %416 = load i32, ptr %40, align 4, !tbaa !9
  %417 = add nsw i32 %416, 1
  %418 = sub nsw i32 512, %417
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 %419
  %421 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %420, ptr noundef nonnull align 8 dereferenceable(48) %35)
          to label %422 unwind label %331

422:                                              ; preds = %415
  br label %423

423:                                              ; preds = %422
  %424 = load i32, ptr %40, align 4, !tbaa !9
  %425 = add nsw i32 %424, 1
  store i32 %425, ptr %40, align 4, !tbaa !9
  br label %356, !llvm.loop !17

426:                                              ; preds = %356
  %427 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %35, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %428 unwind label %331

428:                                              ; preds = %426
  %429 = load i32, ptr %40, align 4, !tbaa !9
  %430 = sext i32 %429 to i64
  %431 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %430) #8
  %432 = getelementptr inbounds %class.Point, ptr %431, i32 0, i32 1
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef %432)
          to label %433 unwind label %331

433:                                              ; preds = %428
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %29)
          to label %434 unwind label %331

434:                                              ; preds = %433
  %435 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef %435)
          to label %436 unwind label %331

436:                                              ; preds = %434
  %437 = load i32, ptr %40, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %438
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef %29, ptr noundef %439)
          to label %440 unwind label %331

440:                                              ; preds = %436
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef %30)
          to label %441 unwind label %331

441:                                              ; preds = %440
  %442 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %442)
          to label %443 unwind label %331

443:                                              ; preds = %441
  %444 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %444, ptr noundef %31)
          to label %445 unwind label %331

445:                                              ; preds = %443
  %446 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  %447 = load i32, ptr %40, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  %449 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %448) #8
  %450 = getelementptr inbounds %class.Point, ptr %449, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %446, ptr noundef %450)
          to label %451 unwind label %331

451:                                              ; preds = %445
  %452 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 0
  %453 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %452, ptr noundef nonnull align 8 dereferenceable(48) %35)
          to label %454 unwind label %331

454:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %455

455:                                              ; preds = %580, %454
  %456 = load i32, ptr %41, align 4, !tbaa !9
  %457 = icmp slt i32 %456, 1024
  br i1 %457, label %458, label %465

458:                                              ; preds = %455
  %459 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %460 = load i32, ptr %16, align 4, !tbaa !9
  %461 = zext i32 %460 to i64
  %462 = getelementptr inbounds i32, ptr %459, i64 %461
  %463 = load i32, ptr %462, align 4, !tbaa !9
  %464 = icmp eq i32 %463, 0
  br label %465

465:                                              ; preds = %458, %455
  %466 = phi i1 [ false, %455 ], [ %464, %458 ]
  br i1 %466, label %468, label %467

467:                                              ; preds = %465
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %584

468:                                              ; preds = %465
  %469 = load i32, ptr %41, align 4, !tbaa !9
  %470 = sext i32 %469 to i64
  %471 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 %470
  %472 = getelementptr inbounds %class.Point, ptr %471, i32 0, i32 0
  %473 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  invoke void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16) %472, ptr noundef %473)
          to label %474 unwind label %530

474:                                              ; preds = %468
  %475 = load ptr, ptr @bloom_bP, align 8, !tbaa !5
  %476 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %477 = load i8, ptr %476, align 16, !tbaa !18
  %478 = zext i8 %477 to i64
  %479 = getelementptr inbounds %struct.bloom, ptr %475, i64 %478
  %480 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %481 = invoke i32 @bloom_check(ptr noundef %479, ptr noundef %480, i32 noundef 32)
          to label %482 unwind label %530

482:                                              ; preds = %474
  store i32 %481, ptr %18, align 4, !tbaa !9
  %483 = load i32, ptr %18, align 4, !tbaa !9
  %484 = icmp ne i32 %483, 0
  br i1 %484, label %485, label %579

485:                                              ; preds = %482
  %486 = load i32, ptr %39, align 4, !tbaa !9
  %487 = mul i32 %486, 1024
  %488 = load i32, ptr %41, align 4, !tbaa !9
  %489 = add i32 %487, %488
  %490 = load i32, ptr %16, align 4, !tbaa !9
  %491 = invoke noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef %9, i32 noundef %489, i32 noundef %490, ptr noundef %10)
          to label %492 unwind label %530

492:                                              ; preds = %485
  store i32 %491, ptr %18, align 4, !tbaa !9
  %493 = load i32, ptr %18, align 4, !tbaa !9
  %494 = icmp ne i32 %493, 0
  br i1 %494, label %495, label %578

495:                                              ; preds = %492
  %496 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %10)
          to label %497 unwind label %530

497:                                              ; preds = %495
  store ptr %496, ptr %8, align 8, !tbaa !5
  %498 = load ptr, ptr %8, align 8, !tbaa !5
  %499 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.237, ptr noundef %498)
          to label %500 unwind label %530

500:                                              ; preds = %497
  call void @llvm.lifetime.start.p0(i64 48, ptr %42) #8
  %501 = load ptr, ptr @secp, align 8, !tbaa !5
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8 %42, ptr noundef nonnull align 8 dereferenceable(393296) %501, ptr noundef %10)
          to label %502 unwind label %534

502:                                              ; preds = %500
  %503 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %15, ptr noundef nonnull align 8 dereferenceable(48) %42)
          to label %504 unwind label %538

504:                                              ; preds = %502
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %42) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %42) #8
  %505 = load ptr, ptr @secp, align 8, !tbaa !5
  %506 = load ptr, ptr @OriginalPointsBSGScompressed, align 8, !tbaa !5
  %507 = load i32, ptr %16, align 4, !tbaa !9
  %508 = zext i32 %507 to i64
  %509 = getelementptr inbounds i8, ptr %506, i64 %508
  %510 = load i8, ptr %509, align 1, !tbaa !19, !range !21, !noundef !22
  %511 = trunc i8 %510 to i1
  %512 = invoke noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(393296) %505, i1 noundef zeroext %511, ptr noundef nonnull align 8 dereferenceable(48) %15)
          to label %513 unwind label %530

513:                                              ; preds = %504
  store ptr %512, ptr %7, align 8, !tbaa !5
  %514 = load ptr, ptr %7, align 8, !tbaa !5
  %515 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.238, ptr noundef %514)
          to label %516 unwind label %530

516:                                              ; preds = %513
  %517 = call i32 @pthread_mutex_lock(ptr noundef @write_keys) #8
  %518 = invoke noalias ptr @fopen(ptr noundef @.str.228, ptr noundef @.str.239)
          to label %519 unwind label %530

519:                                              ; preds = %516
  store ptr %518, ptr %4, align 8, !tbaa !5
  %520 = load ptr, ptr %4, align 8, !tbaa !5
  %521 = icmp ne ptr %520, null
  br i1 %521, label %522, label %543

522:                                              ; preds = %519
  %523 = load ptr, ptr %4, align 8, !tbaa !5
  %524 = load ptr, ptr %8, align 8, !tbaa !5
  %525 = load ptr, ptr %7, align 8, !tbaa !5
  %526 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %523, ptr noundef @.str.240, ptr noundef %524, ptr noundef %525) #8
  %527 = load ptr, ptr %4, align 8, !tbaa !5
  %528 = invoke i32 @fclose(ptr noundef %527)
          to label %529 unwind label %530

529:                                              ; preds = %522
  br label %543

530:                                              ; preds = %574, %522, %516, %513, %504, %497, %495, %485, %474, %468
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %11, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, ptr %12, align 4
  br label %583

534:                                              ; preds = %500
  %535 = landingpad { ptr, i32 }
          cleanup
  %536 = extractvalue { ptr, i32 } %535, 0
  store ptr %536, ptr %11, align 8
  %537 = extractvalue { ptr, i32 } %535, 1
  store i32 %537, ptr %12, align 4
  br label %542

538:                                              ; preds = %502
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %11, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %12, align 4
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %42) #8
  br label %542

542:                                              ; preds = %538, %534
  call void @llvm.lifetime.end.p0(i64 48, ptr %42) #8
  br label %583

543:                                              ; preds = %529, %519
  %544 = call i32 @pthread_mutex_unlock(ptr noundef @write_keys) #8
  %545 = load ptr, ptr %8, align 8, !tbaa !5
  call void @free(ptr noundef %545) #8
  %546 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %546) #8
  %547 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %548 = load i32, ptr %16, align 4, !tbaa !9
  %549 = zext i32 %548 to i64
  %550 = getelementptr inbounds i32, ptr %547, i64 %549
  store i32 1, ptr %550, align 4, !tbaa !9
  store i32 1, ptr %19, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %551

551:                                              ; preds = %568, %543
  %552 = load i32, ptr %17, align 4, !tbaa !9
  %553 = load i32, ptr @bsgs_point_number, align 4, !tbaa !9
  %554 = icmp ult i32 %552, %553
  br i1 %554, label %555, label %558

555:                                              ; preds = %551
  %556 = load i32, ptr %19, align 4, !tbaa !9
  %557 = icmp ne i32 %556, 0
  br label %558

558:                                              ; preds = %555, %551
  %559 = phi i1 [ false, %551 ], [ %557, %555 ]
  br i1 %559, label %560, label %571

560:                                              ; preds = %558
  %561 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %562 = load i32, ptr %17, align 4, !tbaa !9
  %563 = zext i32 %562 to i64
  %564 = getelementptr inbounds i32, ptr %561, i64 %563
  %565 = load i32, ptr %564, align 4, !tbaa !9
  %566 = load i32, ptr %19, align 4, !tbaa !9
  %567 = and i32 %566, %565
  store i32 %567, ptr %19, align 4, !tbaa !9
  br label %568

568:                                              ; preds = %560
  %569 = load i32, ptr %17, align 4, !tbaa !9
  %570 = add i32 %569, 1
  store i32 %570, ptr %17, align 4, !tbaa !9
  br label %551, !llvm.loop !23

571:                                              ; preds = %558
  %572 = load i32, ptr %19, align 4, !tbaa !9
  %573 = icmp ne i32 %572, 0
  br i1 %573, label %574, label %577

574:                                              ; preds = %571
  %575 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.241)
          to label %576 unwind label %530

576:                                              ; preds = %574
  call void @exit(i32 noundef 1) #11
  unreachable

577:                                              ; preds = %571
  br label %578

578:                                              ; preds = %577, %492
  br label %579

579:                                              ; preds = %578, %482
  br label %580

580:                                              ; preds = %579
  %581 = load i32, ptr %41, align 4, !tbaa !9
  %582 = add nsw i32 %581, 1
  store i32 %582, ptr %41, align 4, !tbaa !9
  br label %455, !llvm.loop !24

583:                                              ; preds = %542, %530
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %612

584:                                              ; preds = %467
  %585 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %34, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %586 unwind label %331

586:                                              ; preds = %584
  %587 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %28, ptr noundef getelementptr inbounds (%class.Point, ptr @_2GSn, i32 0, i32 1), ptr noundef %587)
          to label %588 unwind label %331

588:                                              ; preds = %586
  %589 = load i32, ptr %40, align 4, !tbaa !9
  %590 = add nsw i32 %589, 1
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %591
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef %28, ptr noundef %592)
          to label %593 unwind label %331

593:                                              ; preds = %588
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef %30)
          to label %594 unwind label %331

594:                                              ; preds = %593
  %595 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %595)
          to label %596 unwind label %331

596:                                              ; preds = %594
  %597 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %597, ptr noundef %31)
          to label %598 unwind label %331

598:                                              ; preds = %596
  %599 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %599, ptr noundef @_2GSn)
          to label %600 unwind label %331

600:                                              ; preds = %598
  %601 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  %602 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %601, ptr noundef @_2GSn, ptr noundef %602)
          to label %603 unwind label %331

603:                                              ; preds = %600
  %604 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  invoke void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %604, ptr noundef %30)
          to label %605 unwind label %331

605:                                              ; preds = %603
  %606 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %606, ptr noundef getelementptr inbounds (%class.Point, ptr @_2GSn, i32 0, i32 1))
          to label %607 unwind label %331

607:                                              ; preds = %605
  %608 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %24, ptr noundef nonnull align 8 dereferenceable(48) %34)
          to label %609 unwind label %331

609:                                              ; preds = %607
  %610 = load i32, ptr %39, align 4, !tbaa !9
  %611 = add i32 %610, 1
  store i32 %611, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %273, !llvm.loop !25

612:                                              ; preds = %583, %331
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %633

613:                                              ; preds = %284
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %614

614:                                              ; preds = %613, %258
  br label %615

615:                                              ; preds = %614
  %616 = load i32, ptr %16, align 4, !tbaa !9
  %617 = add i32 %616, 1
  store i32 %617, ptr %16, align 4, !tbaa !9
  br label %254, !llvm.loop !26

618:                                              ; preds = %254
  %619 = load ptr, ptr @steps, align 8, !tbaa !5
  %620 = load i32, ptr %20, align 4, !tbaa !9
  %621 = zext i32 %620 to i64
  %622 = getelementptr inbounds i64, ptr %619, i64 %621
  %623 = load i64, ptr %622, align 8, !tbaa !13
  %624 = add i64 %623, 2
  store i64 %624, ptr %622, align 8, !tbaa !13
  br label %625

625:                                              ; preds = %618
  br i1 true, label %180, label %626, !llvm.loop !27

626:                                              ; preds = %625, %211
  %627 = load ptr, ptr @ends, align 8, !tbaa !5
  %628 = load i32, ptr %20, align 4, !tbaa !9
  %629 = zext i32 %628 to i64
  %630 = getelementptr inbounds i32, ptr %627, i64 %629
  store i32 1, ptr %630, align 4, !tbaa !9
  store ptr null, ptr %2, align 8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %35) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %35) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %34) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %34) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #8
  %631 = getelementptr inbounds [1024 x %class.Point], ptr %27, i32 0, i32 0
  %632 = getelementptr inbounds %class.Point, ptr %631, i64 1024
  br label %644

633:                                              ; preds = %612, %330, %321, %312, %172
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %35) #8
  br label %634

634:                                              ; preds = %633, %168
  call void @llvm.lifetime.end.p0(i64 48, ptr %35) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %34) #8
  br label %635

635:                                              ; preds = %634, %164
  call void @llvm.lifetime.end.p0(i64 48, ptr %34) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #8
  br label %636

636:                                              ; preds = %635, %160
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #8
  br label %637

637:                                              ; preds = %636, %156
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #8
  br label %638

638:                                              ; preds = %637, %152
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #8
  br label %639

639:                                              ; preds = %638, %148
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #8
  br label %640

640:                                              ; preds = %639, %144
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #8
  br label %641

641:                                              ; preds = %640, %140
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #8
  %642 = getelementptr inbounds [1024 x %class.Point], ptr %27, i32 0, i32 0
  %643 = getelementptr inbounds %class.Point, ptr %642, i64 1024
  br label %651

644:                                              ; preds = %644, %626
  %645 = phi ptr [ %632, %626 ], [ %646, %644 ]
  %646 = getelementptr inbounds %class.Point, ptr %645, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %646) #8
  %647 = icmp eq ptr %646, %631
  br i1 %647, label %648, label %644

648:                                              ; preds = %644
  call void @llvm.lifetime.end.p0(i64 49152, ptr %27) #8
  %649 = getelementptr inbounds [513 x %class.Int], ptr %26, i32 0, i32 0
  %650 = getelementptr inbounds %class.Int, ptr %649, i64 513
  br label %659

651:                                              ; preds = %651, %641
  %652 = phi ptr [ %643, %641 ], [ %653, %651 ]
  %653 = getelementptr inbounds %class.Point, ptr %652, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %653) #8
  %654 = icmp eq ptr %653, %642
  br i1 %654, label %655, label %651

655:                                              ; preds = %651
  br label %656

656:                                              ; preds = %655, %139
  call void @llvm.lifetime.end.p0(i64 49152, ptr %27) #8
  %657 = getelementptr inbounds [513 x %class.Int], ptr %26, i32 0, i32 0
  %658 = getelementptr inbounds %class.Int, ptr %657, i64 513
  br label %665

659:                                              ; preds = %659, %648
  %660 = phi ptr [ %650, %648 ], [ %661, %659 ]
  %661 = getelementptr inbounds %class.Int, ptr %660, i64 -1
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %661) #8
  %662 = icmp eq ptr %661, %649
  br i1 %662, label %663, label %659

663:                                              ; preds = %659
  call void @llvm.lifetime.end.p0(i64 8208, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %24) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %14) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %14) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %13) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  %664 = load ptr, ptr %2, align 8
  ret ptr %664

665:                                              ; preds = %665, %656
  %666 = phi ptr [ %658, %656 ], [ %667, %665 ]
  %667 = getelementptr inbounds %class.Int, ptr %666, i64 -1
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %667) #8
  %668 = icmp eq ptr %667, %657
  br i1 %668, label %669, label %665

669:                                              ; preds = %665
  br label %670

670:                                              ; preds = %669, %129
  call void @llvm.lifetime.end.p0(i64 8208, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %24) #8
  br label %671

671:                                              ; preds = %670, %116
  call void @llvm.lifetime.end.p0(i64 48, ptr %24) #8
  br label %672

672:                                              ; preds = %671, %112, %108
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #8
  br label %673

673:                                              ; preds = %672, %104
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %14) #8
  br label %674

674:                                              ; preds = %673, %100
  call void @llvm.lifetime.end.p0(i64 48, ptr %14) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #8
  br label %675

675:                                              ; preds = %674, %96
  call void @llvm.lifetime.end.p0(i64 48, ptr %13) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #8
  br label %676

676:                                              ; preds = %675, %92
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  br label %677

677:                                              ; preds = %676
  %678 = load ptr, ptr %11, align 8
  %679 = load i32, ptr %12, align 4
  %680 = insertvalue { ptr, i32 } poison, ptr %678, 0
  %681 = insertvalue { ptr, i32 } %680, i32 %679, 1
  resume { ptr, i32 } %681
}

declare void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare i32 @bloom_check(ptr noundef, ptr noundef, i32 noundef) #0

declare void @_ZN8IntGroupC1Ei(ptr noundef nonnull align 8 dereferenceable(20), i32 noundef) unnamed_addr #0

declare void @_ZN8IntGroup3SetEP3Int(ptr noundef nonnull align 8 dereferenceable(20), ptr noundef) #0

declare void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef) #0

declare void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20)) #0

declare void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef) #0

declare void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16)) #0

declare void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(16)) #0

declare void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #7

declare noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(393296), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(48)) #0

; Function Attrs: nounwind
declare i32 @rand() #1

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 = { 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 #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { builtin nounwind }
attributes #11 = { noreturn 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 = !{!12, !10, i64 0}
!12 = !{!"_ZTS8tothread", !10, i64 0, !6, i64 8, !6, i64 16}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!7, !7, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"bool", !7, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}


; 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::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Point = type { %class.Int, %class.Int, %class.Int }
%class.Int = type { [1 x %struct.__mpz_struct] }
%struct.__mpz_struct = type { i32, i32, ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.bloom = type { i64, i64, i64, i8, x86_fp80, i8, i8, i8, double, ptr }

@GSn = external dso_local global %"class.std::vector", align 8
@_2GSn = external dso_local global %class.Point, align 8
@THREADOUTPUT = external dso_local local_unnamed_addr global i32, align 4
@write_keys = external dso_local global %union.pthread_mutex_t, align 8
@bsgs_thread = external dso_local global %union.pthread_mutex_t, align 8
@steps = external dso_local local_unnamed_addr global ptr, align 8
@ends = external dso_local local_unnamed_addr global ptr, align 8
@FLAGQUIET = external dso_local local_unnamed_addr global i32, align 4
@FLAGMATRIX = external dso_local local_unnamed_addr global i32, align 4
@bsgs_found = external dso_local local_unnamed_addr global ptr, align 8
@OriginalPointsBSGS = external dso_local global %"class.std::vector", align 8
@OriginalPointsBSGScompressed = external dso_local local_unnamed_addr global ptr, align 8
@bloom_bP = external dso_local local_unnamed_addr global ptr, align 8
@bsgs_aux = external dso_local local_unnamed_addr global i64, align 8
@bsgs_point_number = external dso_local local_unnamed_addr global i32, align 4
@BSGS_CURRENT = external dso_local global %class.Int, align 8
@BSGS_N_double = external dso_local global %class.Int, align 8
@BSGS_M = external dso_local global %class.Int, align 8
@BSGS_M_double = external dso_local global %class.Int, align 8
@n_range_end = external dso_local global %class.Int, align 8
@secp = external dso_local local_unnamed_addr global ptr, align 8
@stdout = external local_unnamed_addr global ptr, align 8
@.str.228 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.234 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.235 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.237 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.238 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.239 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.240 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.241 = external hidden unnamed_addr constant [23 x i8], align 1

declare void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1

declare void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #5

declare void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

declare noundef zeroext i1 @_ZN3Int9IsGreaterEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #6

declare noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

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

declare void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #8 align 2

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #5

declare void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef) local_unnamed_addr #0

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #0

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

declare void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #0

; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local noalias noundef ptr @_Z24thread_process_bsgs_bothPv(ptr nocapture noundef %0) local_unnamed_addr #9 personality ptr @__gxx_personality_v0 {
  %2 = alloca [32 x i8], align 16
  %3 = alloca %class.Int, align 8
  %4 = alloca %class.Int, align 8
  %5 = alloca %class.Point, align 8
  %6 = alloca %class.Point, align 8
  %7 = alloca %class.Point, align 8
  %8 = alloca %class.Point, align 8
  %9 = alloca [513 x %class.Int], align 16
  %10 = alloca [1024 x %class.Point], align 16
  %11 = alloca %class.Int, align 8
  %12 = alloca %class.Int, align 8
  %13 = alloca %class.Int, align 8
  %14 = alloca %class.Int, align 8
  %15 = alloca %class.Int, align 8
  %16 = alloca %class.Int, align 8
  %17 = alloca %class.Point, align 8
  %18 = alloca %class.Point, align 8
  %19 = alloca %class.Point, align 8
  %20 = alloca %class.Point, align 8
  %21 = alloca %class.Point, align 8
  %22 = alloca %class.Point, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #10
  call void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %23 unwind label %56

23:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %5) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %5)
          to label %24 unwind label %58

24:                                               ; preds = %23
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %6)
          to label %25 unwind label %60

25:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %7) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %7)
          to label %26 unwind label %62

26:                                               ; preds = %25
  %27 = invoke noalias noundef nonnull dereferenceable(24) ptr @_Znwm(i64 noundef 24) #11
          to label %28 unwind label %64

28:                                               ; preds = %26
  invoke void @_ZN8IntGroupC1Ei(ptr noundef nonnull align 8 dereferenceable(20) %27, i32 noundef 513)
          to label %29 unwind label %66

29:                                               ; preds = %28
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %30 unwind label %68

30:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 8208, ptr nonnull %9) #10
  %31 = getelementptr inbounds i8, ptr %9, i64 8208
  br label %32

32:                                               ; preds = %33, %30
  %.idx = phi i64 [ 0, %30 ], [ %.add, %33 ]
  %.ptr = getelementptr inbounds i8, ptr %9, i64 %.idx
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %.ptr)
          to label %33 unwind label %70

33:                                               ; preds = %32
  %.add = add nuw nsw i64 %.idx, 16
  %34 = icmp eq i64 %.add, 8208
  br i1 %34, label %35, label %32

35:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 49152, ptr nonnull %10) #10
  %36 = getelementptr inbounds i8, ptr %10, i64 49152
  br label %37

37:                                               ; preds = %38, %35
  %.idx118 = phi i64 [ 0, %35 ], [ %.add119, %38 ]
  %.ptr120 = getelementptr inbounds i8, ptr %10, i64 %.idx118
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %.ptr120)
          to label %38 unwind label %76

38:                                               ; preds = %37
  %.add119 = add nuw nsw i64 %.idx118, 48
  %39 = icmp eq i64 %.add119, 49152
  br i1 %39, label %40, label %37

40:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %11)
          to label %41 unwind label %82

41:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %42 unwind label %84

42:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %13)
          to label %43 unwind label %86

43:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %44 unwind label %88

44:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %15)
          to label %45 unwind label %90

45:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %16)
          to label %46 unwind label %92

46:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %17) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %17)
          to label %47 unwind label %94

47:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %18) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %18)
          to label %48 unwind label %96

48:                                               ; preds = %47
  invoke void @_ZN8IntGroup3SetEP3Int(ptr noundef nonnull align 8 dereferenceable(20) %27, ptr noundef nonnull %9)
          to label %49 unwind label %.loopexit.split-lp165

49:                                               ; preds = %48
  %50 = load i32, ptr %0, align 8, !tbaa !5
  call void @free(ptr noundef %0) #10
  %51 = load i64, ptr @bsgs_aux, align 8, !tbaa !11
  %52 = lshr i64 %51, 10
  %53 = trunc i64 %52 to i32
  %54 = and i64 %51, 1023
  %.not = icmp ne i64 %54, 0
  %55 = zext i1 %.not to i32
  %spec.select = add i32 %55, %53
  %spec.select.fr = freeze i32 %spec.select
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull @BSGS_M_double)
          to label %98 unwind label %.loopexit.split-lp165

56:                                               ; preds = %1
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %371

58:                                               ; preds = %23
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %370

60:                                               ; preds = %24
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %369

62:                                               ; preds = %25
  %63 = landingpad { ptr, i32 }
          cleanup
  br label %368

64:                                               ; preds = %26
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %367

66:                                               ; preds = %28
  %67 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %27, i64 noundef 24) #12
  br label %367

68:                                               ; preds = %29
  %69 = landingpad { ptr, i32 }
          cleanup
  br label %366

70:                                               ; preds = %32
  %71 = landingpad { ptr, i32 }
          cleanup
  %72 = icmp eq i64 %.idx, 0
  br i1 %72, label %.loopexit, label %.preheader170

.preheader170:                                    ; preds = %70, %.preheader170
  %73 = phi ptr [ %74, %.preheader170 ], [ %.ptr, %70 ]
  %74 = getelementptr inbounds i8, ptr %73, i64 -16
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %74) #10
  %75 = icmp eq ptr %74, %9
  br i1 %75, label %.loopexit, label %.preheader170

76:                                               ; preds = %37
  %77 = landingpad { ptr, i32 }
          cleanup
  %78 = icmp eq i64 %.idx118, 0
  br i1 %78, label %.loopexit156, label %.preheader168

.preheader168:                                    ; preds = %76, %.preheader168
  %79 = phi ptr [ %80, %.preheader168 ], [ %.ptr120, %76 ]
  %80 = getelementptr inbounds i8, ptr %79, i64 -48
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %80) #10
  %81 = icmp eq ptr %80, %10
  br i1 %81, label %.loopexit156, label %.preheader168

82:                                               ; preds = %40
  %83 = landingpad { ptr, i32 }
          cleanup
  br label %347

84:                                               ; preds = %41
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %346

86:                                               ; preds = %42
  %87 = landingpad { ptr, i32 }
          cleanup
  br label %345

88:                                               ; preds = %43
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %344

90:                                               ; preds = %44
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %343

92:                                               ; preds = %45
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %342

94:                                               ; preds = %46
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %341

96:                                               ; preds = %47
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %340

.loopexit164:                                     ; preds = %.invoke, %110, %113, %114, %116, %119, %120, %127, %136, %146, %147, %148, %151
  %lpad.loopexit166 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp165:                            ; preds = %48, %49, %98, %99
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

98:                                               ; preds = %49
  invoke void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef 512)
          to label %99 unwind label %.loopexit.split-lp165

99:                                               ; preds = %98
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull @BSGS_M)
          to label %.preheader163 unwind label %.loopexit.split-lp165

.preheader163:                                    ; preds = %99
  %.not208 = icmp eq i32 %spec.select.fr, 0
  %100 = getelementptr inbounds i8, ptr %10, i64 24576
  %101 = getelementptr inbounds i8, ptr %17, i64 16
  %102 = getelementptr inbounds i8, ptr %18, i64 16
  %103 = zext i32 %50 to i64
  %wide.trip.count = zext i32 %spec.select.fr to i64
  %104 = getelementptr inbounds i8, ptr %9, i64 8176
  %105 = getelementptr inbounds i8, ptr %9, i64 8192
  br label %106

106:                                              ; preds = %.preheader163, %._crit_edge189
  %107 = call i32 @rand() #10
  %108 = srem i32 %107, 2
  %109 = call i32 @pthread_mutex_lock(ptr noundef nonnull @bsgs_thread) #10
  switch i32 %108, label %.critedge155 [
    i32 0, label %110
    i32 1, label %116
  ]

110:                                              ; preds = %106
  %111 = invoke noundef zeroext i1 @_ZN3Int9IsGreaterEPS_(ptr noundef nonnull align 8 dereferenceable(16) @n_range_end, ptr noundef nonnull @BSGS_CURRENT)
          to label %112 unwind label %.loopexit164

112:                                              ; preds = %110
  br i1 %111, label %113, label %121

113:                                              ; preds = %112
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16) @n_range_end, ptr noundef nonnull @BSGS_N_double)
          to label %114 unwind label %.loopexit164

114:                                              ; preds = %113
  %115 = invoke noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(16) @n_range_end, ptr noundef nonnull @BSGS_CURRENT)
          to label %.invoke unwind label %.loopexit164

.invoke:                                          ; preds = %114
  %BSGS_CURRENT.n_range_end = select i1 %115, ptr @BSGS_CURRENT, ptr @n_range_end
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull %BSGS_CURRENT.n_range_end)
          to label %.critedge155 unwind label %.loopexit164

116:                                              ; preds = %106
  %117 = invoke noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(16) @BSGS_CURRENT, ptr noundef nonnull @n_range_end)
          to label %118 unwind label %.loopexit164

118:                                              ; preds = %116
  br i1 %117, label %119, label %121

119:                                              ; preds = %118
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @BSGS_CURRENT)
          to label %120 unwind label %.loopexit164

120:                                              ; preds = %119
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) @BSGS_CURRENT, ptr noundef nonnull @BSGS_N_double)
          to label %.critedge155 unwind label %.loopexit164

121:                                              ; preds = %118, %112
  %122 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @bsgs_thread) #10
  %123 = load ptr, ptr @ends, align 8, !tbaa !13
  %124 = getelementptr inbounds i32, ptr %123, i64 %103
  store i32 1, ptr %124, align 4, !tbaa !14
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %18) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %18) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %17) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %17) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #10
  br label %348

.critedge155:                                     ; preds = %.invoke, %120, %106
  %125 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @bsgs_thread) #10
  %126 = load i32, ptr @FLAGMATRIX, align 4, !tbaa !14
  %.not122 = icmp eq i32 %126, 0
  br i1 %.not122, label %133, label %127

127:                                              ; preds = %.critedge155
  %128 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %129 unwind label %.loopexit164

129:                                              ; preds = %127
  %130 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.234, ptr noundef %128)
  %131 = load ptr, ptr @stdout, align 8, !tbaa !13
  %132 = call i32 @fflush(ptr noundef %131)
  call void @free(ptr noundef %128) #10
  br label %142

133:                                              ; preds = %.critedge155
  %134 = load i32, ptr @FLAGQUIET, align 4, !tbaa !14
  %135 = icmp eq i32 %134, 0
  br i1 %135, label %136, label %142

136:                                              ; preds = %133
  %137 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %138 unwind label %.loopexit164

138:                                              ; preds = %136
  %139 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.235, ptr noundef %137)
  %140 = load ptr, ptr @stdout, align 8, !tbaa !13
  %141 = call i32 @fflush(ptr noundef %140)
  call void @free(ptr noundef %137) #10
  store i32 1, ptr @THREADOUTPUT, align 4, !tbaa !14
  br label %142

142:                                              ; preds = %133, %138, %129
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %19) #10
  %143 = load ptr, ptr @secp, align 8, !tbaa !13
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %19, ptr noundef nonnull align 8 dereferenceable(393296) %143, ptr noundef nonnull %3)
          to label %144 unwind label %316

144:                                              ; preds = %142
  %145 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %5, ptr noundef nonnull align 8 dereferenceable(48) %19)
          to label %146 unwind label %318

146:                                              ; preds = %144
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %19) #10
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull %3)
          to label %147 unwind label %.loopexit164

147:                                              ; preds = %146
  invoke void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(16) %15)
          to label %148 unwind label %.loopexit164

148:                                              ; preds = %147
  %149 = load ptr, ptr @secp, align 8, !tbaa !13
  %150 = getelementptr inbounds i8, ptr %149, i64 64
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull %150)
          to label %151 unwind label %.loopexit164

151:                                              ; preds = %148
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull %16)
          to label %152 unwind label %.loopexit164

152:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %20) #10
  %153 = load ptr, ptr @secp, align 8, !tbaa !13
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %20, ptr noundef nonnull align 8 dereferenceable(393296) %153, ptr noundef nonnull %15)
          to label %154 unwind label %321

154:                                              ; preds = %152
  %155 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %6, ptr noundef nonnull align 8 dereferenceable(48) %20)
          to label %156 unwind label %323

156:                                              ; preds = %154
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %20) #10
  %157 = load i32, ptr @bsgs_point_number, align 4, !tbaa !14
  %.not209 = icmp eq i32 %157, 0
  br i1 %.not209, label %._crit_edge189, label %.lr.ph188

.lr.ph188:                                        ; preds = %156
  br i1 %.not208, label %.lr.ph188.split.preheader, label %.lr.ph188.split.us

.lr.ph188.split.preheader:                        ; preds = %.lr.ph188
  %.pre244 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  br label %.lr.ph188.split

.lr.ph188.split.us:                               ; preds = %.lr.ph188, %.critedge.us
  %158 = phi i32 [ %174, %.critedge.us ], [ %157, %.lr.ph188 ]
  %indvars.iv237 = phi i64 [ %indvars.iv.next238, %.critedge.us ], [ 0, %.lr.ph188 ]
  %159 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %160 = getelementptr inbounds i32, ptr %159, i64 %indvars.iv237
  %161 = load i32, ptr %160, align 4, !tbaa !14
  %162 = icmp eq i32 %161, 0
  br i1 %162, label %163, label %.critedge.us

163:                                              ; preds = %.lr.ph188.split.us
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %21) #10
  %164 = load ptr, ptr @secp, align 8, !tbaa !13
  %165 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @OriginalPointsBSGS, i64 noundef %indvars.iv237) #10
  invoke void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %21, ptr noundef nonnull align 8 dereferenceable(393296) %164, ptr noundef nonnull align 8 dereferenceable(48) %165, ptr noundef nonnull align 8 dereferenceable(48) %6)
          to label %166 unwind label %.split.us

166:                                              ; preds = %163
  %167 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %8, ptr noundef nonnull align 8 dereferenceable(48) %21)
          to label %.lr.ph183.us unwind label %.split191.us

.lr.ph183.us:                                     ; preds = %166
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  %168 = trunc nuw i64 %indvars.iv237 to i32
  br label %169

169:                                              ; preds = %.lr.ph183.us, %215
  %indvars.iv233 = phi i64 [ 0, %.lr.ph183.us ], [ %indvars.iv.next234, %215 ]
  %170 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %171 = getelementptr inbounds i32, ptr %170, i64 %indvars.iv237
  %172 = load i32, ptr %171, align 4, !tbaa !14
  %173 = icmp eq i32 %172, 0
  br i1 %173, label %.preheader159.us, label %.critedge.us.loopexit

.critedge.us.loopexit:                            ; preds = %215, %169
  %.pre = load i32, ptr @bsgs_point_number, align 4, !tbaa !14
  br label %.critedge.us

.critedge.us:                                     ; preds = %.critedge.us.loopexit, %.lr.ph188.split.us
  %174 = phi i32 [ %.pre, %.critedge.us.loopexit ], [ %158, %.lr.ph188.split.us ]
  %indvars.iv.next238 = add nuw nsw i64 %indvars.iv237, 1
  %175 = zext i32 %174 to i64
  %176 = icmp ult i64 %indvars.iv.next238, %175
  br i1 %176, label %.lr.ph188.split.us, label %._crit_edge189, !llvm.loop !15

177:                                              ; preds = %299
  %178 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef 511) #10
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %104, ptr noundef nonnull %178, ptr noundef nonnull %8)
          to label %179 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

179:                                              ; preds = %177
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %105, ptr noundef nonnull @_2GSn, ptr noundef nonnull %8)
          to label %180 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

180:                                              ; preds = %179
  invoke void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20) %27)
          to label %181 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

181:                                              ; preds = %180
  %182 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %100, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %.preheader157.us unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

.preheader157.us:                                 ; preds = %181, %293
  %indvars.iv222 = phi i64 [ %indvars.iv.next223, %293 ], [ 0, %181 ]
  %exitcond225.not = icmp eq i64 %indvars.iv222, 511
  br i1 %exitcond225.not, label %183, label %264

183:                                              ; preds = %.preheader157.us
  %184 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %18, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %185 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

185:                                              ; preds = %183
  %186 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef 511) #10
  %187 = getelementptr inbounds i8, ptr %186, i64 16
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull %187)
          to label %188 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

188:                                              ; preds = %185
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %189 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

189:                                              ; preds = %188
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull %102)
          to label %190 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

190:                                              ; preds = %189
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull %12, ptr noundef nonnull %104)
          to label %191 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

191:                                              ; preds = %190
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull %13)
          to label %192 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

192:                                              ; preds = %191
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %193 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

193:                                              ; preds = %192
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull %14)
          to label %194 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

194:                                              ; preds = %193
  %195 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef 511) #10
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull %195)
          to label %196 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

196:                                              ; preds = %194
  %197 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %10, ptr noundef nonnull align 8 dereferenceable(48) %18)
          to label %.preheader.us unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

198:                                              ; preds = %.preheader.us, %263
  %indvars.iv229 = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next230, %263 ]
  %199 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %200 = getelementptr inbounds i32, ptr %199, i64 %indvars.iv237
  %201 = load i32, ptr %200, align 4, !tbaa !14
  %202 = icmp eq i32 %201, 0
  br i1 %202, label %216, label %.critedge2.us

.critedge2.us:                                    ; preds = %263, %198
  %203 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %17, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %204 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

204:                                              ; preds = %.critedge2.us
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull getelementptr inbounds (i8, ptr @_2GSn, i64 16), ptr noundef nonnull %101)
          to label %205 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

205:                                              ; preds = %204
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull %11, ptr noundef nonnull %105)
          to label %206 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

206:                                              ; preds = %205
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull %13)
          to label %207 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

207:                                              ; preds = %206
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %208 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

208:                                              ; preds = %207
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull %14)
          to label %209 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

209:                                              ; preds = %208
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull @_2GSn)
          to label %210 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

210:                                              ; preds = %209
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %101, ptr noundef nonnull @_2GSn, ptr noundef nonnull %17)
          to label %211 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

211:                                              ; preds = %210
  invoke void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %101, ptr noundef nonnull %13)
          to label %212 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

212:                                              ; preds = %211
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %101, ptr noundef nonnull getelementptr inbounds (i8, ptr @_2GSn, i64 16))
          to label %213 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

213:                                              ; preds = %212
  %214 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %8, ptr noundef nonnull align 8 dereferenceable(48) %17)
          to label %215 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

215:                                              ; preds = %213
  %indvars.iv.next234 = add nuw nsw i64 %indvars.iv233, 1
  %exitcond236.not = icmp eq i64 %indvars.iv.next234, %wide.trip.count
  br i1 %exitcond236.not, label %.critedge.us.loopexit, label %169, !llvm.loop !17

216:                                              ; preds = %198
  %217 = getelementptr inbounds [1024 x %class.Point], ptr %10, i64 0, i64 %indvars.iv229
  invoke void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16) %217, ptr noundef nonnull %2)
          to label %218 unwind label %.split195.us

218:                                              ; preds = %216
  %219 = load ptr, ptr @bloom_bP, align 8, !tbaa !13
  %220 = load i8, ptr %2, align 16, !tbaa !18
  %221 = zext i8 %220 to i64
  %222 = getelementptr inbounds %struct.bloom, ptr %219, i64 %221
  %223 = invoke i32 @bloom_check(ptr noundef %222, ptr noundef nonnull %2, i32 noundef 32)
          to label %224 unwind label %.split195.us

224:                                              ; preds = %218
  %.not128.us = icmp eq i32 %223, 0
  br i1 %.not128.us, label %263, label %225

225:                                              ; preds = %224
  %226 = add i64 %indvars.iv229, %300
  %227 = trunc i64 %226 to i32
  %228 = invoke noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef nonnull %3, i32 noundef %227, i32 noundef %168, ptr noundef nonnull %4)
          to label %229 unwind label %.split195.us

229:                                              ; preds = %225
  %.not129.us = icmp eq i32 %228, 0
  br i1 %.not129.us, label %263, label %230

230:                                              ; preds = %229
  %231 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %232 unwind label %.split195.us

232:                                              ; preds = %230
  %233 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.237, ptr noundef %231)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %22) #10
  %234 = load ptr, ptr @secp, align 8, !tbaa !13
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %22, ptr noundef nonnull align 8 dereferenceable(393296) %234, ptr noundef nonnull %4)
          to label %235 unwind label %.split198.us

235:                                              ; preds = %232
  %236 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %7, ptr noundef nonnull align 8 dereferenceable(48) %22)
          to label %237 unwind label %.split201.us

237:                                              ; preds = %235
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %22) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %22) #10
  %238 = load ptr, ptr @secp, align 8, !tbaa !13
  %239 = load ptr, ptr @OriginalPointsBSGScompressed, align 8, !tbaa !13
  %240 = getelementptr inbounds i8, ptr %239, i64 %indvars.iv237
  %241 = load i8, ptr %240, align 1, !tbaa !19, !range !21, !noundef !22
  %242 = trunc nuw i8 %241 to i1
  %243 = invoke noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(393296) %238, i1 noundef zeroext %242, ptr noundef nonnull align 8 dereferenceable(48) %7)
          to label %244 unwind label %.split195.us

244:                                              ; preds = %237
  %245 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.238, ptr noundef %243)
  %246 = call i32 @pthread_mutex_lock(ptr noundef nonnull @write_keys) #10
  %247 = call noalias ptr @fopen(ptr noundef nonnull @.str.228, ptr noundef nonnull @.str.239)
  %.not134.us = icmp eq ptr %247, null
  br i1 %.not134.us, label %251, label %248

248:                                              ; preds = %244
  %249 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %247, ptr noundef nonnull @.str.240, ptr noundef %231, ptr noundef %243) #10
  %250 = call i32 @fclose(ptr noundef nonnull %247)
  br label %251

251:                                              ; preds = %248, %244
  %252 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @write_keys) #10
  call void @free(ptr noundef %231) #10
  call void @free(ptr noundef %243) #10
  %253 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %254 = getelementptr inbounds i32, ptr %253, i64 %indvars.iv237
  store i32 1, ptr %254, align 4, !tbaa !14
  %255 = load i32, ptr @bsgs_point_number, align 4, !tbaa !14
  %.not210 = icmp eq i32 %255, 0
  br i1 %.not210, label %.split204.us, label %.lr.ph.us.preheader

.lr.ph.us.preheader:                              ; preds = %251
  %256 = zext i32 %255 to i64
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %.lr.ph.us
  %indvars.iv226 = phi i64 [ 0, %.lr.ph.us.preheader ], [ %indvars.iv.next227, %.lr.ph.us ]
  %257 = getelementptr inbounds i32, ptr %253, i64 %indvars.iv226
  %258 = load i32, ptr %257, align 4, !tbaa !14
  %259 = and i32 %258, 1
  %indvars.iv.next227 = add nuw nsw i64 %indvars.iv226, 1
  %260 = icmp ult i64 %indvars.iv.next227, %256
  %261 = icmp ne i32 %259, 0
  %262 = select i1 %260, i1 %261, i1 false
  br i1 %262, label %.lr.ph.us, label %._crit_edge.us, !llvm.loop !23

263:                                              ; preds = %._crit_edge.us, %229, %224
  %indvars.iv.next230 = add nuw nsw i64 %indvars.iv229, 1
  %exitcond232.not = icmp eq i64 %indvars.iv.next230, 1024
  br i1 %exitcond232.not, label %.critedge2.us, label %198, !llvm.loop !24

264:                                              ; preds = %.preheader157.us
  %265 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %17, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %266 unwind label %.loopexit158.split.us

266:                                              ; preds = %264
  %267 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %18, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %268 unwind label %.loopexit158.split.us

268:                                              ; preds = %266
  %269 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv222) #10
  %270 = getelementptr inbounds i8, ptr %269, i64 16
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull %270, ptr noundef nonnull %101)
          to label %271 unwind label %.loopexit158.split.us

271:                                              ; preds = %268
  %272 = getelementptr inbounds [513 x %class.Int], ptr %9, i64 0, i64 %indvars.iv222
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull %11, ptr noundef nonnull %272)
          to label %273 unwind label %.loopexit158.split.us

273:                                              ; preds = %271
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull %13)
          to label %274 unwind label %.loopexit158.split.us

274:                                              ; preds = %273
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %275 unwind label %.loopexit158.split.us

275:                                              ; preds = %274
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull %14)
          to label %276 unwind label %.loopexit158.split.us

276:                                              ; preds = %275
  %277 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv222) #10
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull %277)
          to label %278 unwind label %.loopexit158.split.us

278:                                              ; preds = %276
  %279 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv222) #10
  %280 = getelementptr inbounds i8, ptr %279, i64 16
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull %280)
          to label %281 unwind label %.loopexit158.split.us

281:                                              ; preds = %278
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %282 unwind label %.loopexit158.split.us

282:                                              ; preds = %281
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull %102)
          to label %283 unwind label %.loopexit158.split.us

283:                                              ; preds = %282
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull %12, ptr noundef nonnull %272)
          to label %284 unwind label %.loopexit158.split.us

284:                                              ; preds = %283
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull %13)
          to label %285 unwind label %.loopexit158.split.us

285:                                              ; preds = %284
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %286 unwind label %.loopexit158.split.us

286:                                              ; preds = %285
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull %14)
          to label %287 unwind label %.loopexit158.split.us

287:                                              ; preds = %286
  %288 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv222) #10
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull %288)
          to label %289 unwind label %.loopexit158.split.us

289:                                              ; preds = %287
  %290 = add nuw nsw i64 %indvars.iv222, 513
  %291 = getelementptr inbounds [1024 x %class.Point], ptr %10, i64 0, i64 %290
  %292 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %291, ptr noundef nonnull align 8 dereferenceable(48) %17)
          to label %293 unwind label %.loopexit158.split.us

293:                                              ; preds = %289
  %indvars.iv.next223 = add nuw nsw i64 %indvars.iv222, 1
  %294 = sub nuw nsw i64 511, %indvars.iv222
  %295 = getelementptr inbounds [1024 x %class.Point], ptr %10, i64 0, i64 %294
  %296 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %295, ptr noundef nonnull align 8 dereferenceable(48) %18)
          to label %.preheader157.us unwind label %.loopexit158.split.us, !llvm.loop !25

.preheader159.us:                                 ; preds = %169, %299
  %indvars.iv = phi i64 [ %indvars.iv.next, %299 ], [ 0, %169 ]
  %297 = getelementptr inbounds [513 x %class.Int], ptr %9, i64 0, i64 %indvars.iv
  %298 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv) #10
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %297, ptr noundef nonnull %298, ptr noundef nonnull %8)
          to label %299 unwind label %.loopexit.split-lp.loopexit.split.us

299:                                              ; preds = %.preheader159.us
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 511
  br i1 %exitcond.not, label %177, label %.preheader159.us, !llvm.loop !26

.preheader.us:                                    ; preds = %196
  %300 = shl i64 %indvars.iv233, 10
  br label %198

._crit_edge.us:                                   ; preds = %.lr.ph.us
  br i1 %261, label %.split204.us, label %263

.split.us:                                        ; preds = %163
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %329

.split191.us:                                     ; preds = %166
  %302 = landingpad { ptr, i32 }
          cleanup
  br label %328

.loopexit.split-lp.loopexit.split-lp.split.us:    ; preds = %213, %212, %211, %210, %209, %208, %207, %206, %205, %204, %.critedge2.us, %196, %194, %193, %192, %191, %190, %189, %188, %185, %183, %181, %180, %179, %177
  %lpad.loopexit.split-lp161.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split195.us:                                     ; preds = %237, %230, %225, %218, %216
  %303 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split198.us:                                     ; preds = %232
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %330

.split201.us:                                     ; preds = %235
  %305 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %22) #10
  br label %330

.loopexit158.split.us:                            ; preds = %293, %289, %287, %286, %285, %284, %283, %282, %281, %278, %276, %275, %274, %273, %271, %268, %266, %264
  %lpad.loopexit.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split.us:             ; preds = %.preheader159.us
  %lpad.loopexit160.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.lr.ph188.split:                                  ; preds = %.lr.ph188.split.preheader, %.critedge
  %306 = phi i32 [ %157, %.lr.ph188.split.preheader ], [ %332, %.critedge ]
  %307 = phi ptr [ %.pre244, %.lr.ph188.split.preheader ], [ %333, %.critedge ]
  %indvars.iv240 = phi i64 [ 0, %.lr.ph188.split.preheader ], [ %indvars.iv.next241, %.critedge ]
  %308 = getelementptr inbounds i32, ptr %307, i64 %indvars.iv240
  %309 = load i32, ptr %308, align 4, !tbaa !14
  %310 = icmp eq i32 %309, 0
  br i1 %310, label %311, label %.critedge

311:                                              ; preds = %.lr.ph188.split
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %21) #10
  %312 = load ptr, ptr @secp, align 8, !tbaa !13
  %313 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @OriginalPointsBSGS, i64 noundef %indvars.iv240) #10
  invoke void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %21, ptr noundef nonnull align 8 dereferenceable(393296) %312, ptr noundef nonnull align 8 dereferenceable(48) %313, ptr noundef nonnull align 8 dereferenceable(48) %6)
          to label %314 unwind label %.split

314:                                              ; preds = %311
  %315 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %8, ptr noundef nonnull align 8 dereferenceable(48) %21)
          to label %.critedge.loopexit unwind label %.split191

.critedge.loopexit:                               ; preds = %314
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  %.pre243 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %.pre245 = load i32, ptr @bsgs_point_number, align 4, !tbaa !14
  br label %.critedge

316:                                              ; preds = %142
  %317 = landingpad { ptr, i32 }
          cleanup
  br label %320

318:                                              ; preds = %144
  %319 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #10
  br label %320

320:                                              ; preds = %318, %316
  %.pn = phi { ptr, i32 } [ %319, %318 ], [ %317, %316 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %19) #10
  br label %.loopexit.split-lp

321:                                              ; preds = %152
  %322 = landingpad { ptr, i32 }
          cleanup
  br label %325

323:                                              ; preds = %154
  %324 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #10
  br label %325

325:                                              ; preds = %323, %321
  %.pn124 = phi { ptr, i32 } [ %324, %323 ], [ %322, %321 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %20) #10
  br label %.loopexit.split-lp

.split:                                           ; preds = %311
  %326 = landingpad { ptr, i32 }
          cleanup
  br label %329

.split191:                                        ; preds = %314
  %327 = landingpad { ptr, i32 }
          cleanup
  br label %328

328:                                              ; preds = %.split191.us, %.split191
  %.us-phi192 = phi { ptr, i32 } [ %327, %.split191 ], [ %302, %.split191.us ]
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  br label %329

329:                                              ; preds = %.split, %.split.us, %328
  %.pn126 = phi { ptr, i32 } [ %.us-phi192, %328 ], [ %326, %.split ], [ %301, %.split.us ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  br label %.loopexit.split-lp

330:                                              ; preds = %.split201.us, %.split198.us
  %.pn130 = phi { ptr, i32 } [ %305, %.split201.us ], [ %304, %.split198.us ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %22) #10
  br label %.loopexit.split-lp

.split204.us:                                     ; preds = %._crit_edge.us, %251
  %331 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.241)
  call void @exit(i32 noundef 1) #13
  unreachable

.critedge:                                        ; preds = %.critedge.loopexit, %.lr.ph188.split
  %332 = phi i32 [ %.pre245, %.critedge.loopexit ], [ %306, %.lr.ph188.split ]
  %333 = phi ptr [ %.pre243, %.critedge.loopexit ], [ %307, %.lr.ph188.split ]
  %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1
  %334 = zext i32 %332 to i64
  %335 = icmp ult i64 %indvars.iv.next241, %334
  br i1 %335, label %.lr.ph188.split, label %._crit_edge189, !llvm.loop !15

._crit_edge189:                                   ; preds = %.critedge.us, %.critedge, %156
  %336 = load ptr, ptr @steps, align 8, !tbaa !13
  %337 = getelementptr inbounds i64, ptr %336, i64 %103
  %338 = load i64, ptr %337, align 8, !tbaa !11
  %339 = add i64 %338, 2
  store i64 %339, ptr %337, align 8, !tbaa !11
  br label %106, !llvm.loop !27

.loopexit.split-lp:                               ; preds = %.loopexit158.split.us, %.loopexit.split-lp.loopexit.split-lp.split.us, %.loopexit.split-lp.loopexit.split.us, %.loopexit164, %.loopexit.split-lp165, %330, %.split195.us, %329, %325, %320
  %.pn135.pn = phi { ptr, i32 } [ %.pn126, %329 ], [ %.pn124, %325 ], [ %.pn, %320 ], [ %303, %.split195.us ], [ %.pn130, %330 ], [ %lpad.loopexit166, %.loopexit164 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp165 ], [ %lpad.loopexit.us, %.loopexit158.split.us ], [ %lpad.loopexit160.us, %.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit.split-lp161.us, %.loopexit.split-lp.loopexit.split-lp.split.us ]
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %18) #10
  br label %340

340:                                              ; preds = %.loopexit.split-lp, %96
  %.pn135.pn.pn = phi { ptr, i32 } [ %.pn135.pn, %.loopexit.split-lp ], [ %97, %96 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %18) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %17) #10
  br label %341

341:                                              ; preds = %340, %94
  %.pn135.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn, %340 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %17) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #10
  br label %342

342:                                              ; preds = %341, %92
  %.pn135.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn, %341 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #10
  br label %343

343:                                              ; preds = %342, %90
  %.pn135.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn, %342 ], [ %91, %90 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #10
  br label %344

344:                                              ; preds = %343, %88
  %.pn135.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn, %343 ], [ %89, %88 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #10
  br label %345

345:                                              ; preds = %344, %86
  %.pn135.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn.pn, %344 ], [ %87, %86 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #10
  br label %346

346:                                              ; preds = %345, %84
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn.pn.pn, %345 ], [ %85, %84 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #10
  br label %347

347:                                              ; preds = %346, %82
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn.pn.pn.pn, %346 ], [ %83, %82 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #10
  br label %353

348:                                              ; preds = %348, %121
  %349 = phi ptr [ %36, %121 ], [ %350, %348 ]
  %350 = getelementptr inbounds i8, ptr %349, i64 -48
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %350) #10
  %351 = icmp eq ptr %350, %10
  br i1 %351, label %352, label %348

352:                                              ; preds = %348
  call void @llvm.lifetime.end.p0(i64 49152, ptr nonnull %10) #10
  br label %357

353:                                              ; preds = %353, %347
  %354 = phi ptr [ %36, %347 ], [ %355, %353 ]
  %355 = getelementptr inbounds i8, ptr %354, i64 -48
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %355) #10
  %356 = icmp eq ptr %355, %10
  br i1 %356, label %.loopexit156, label %353

.loopexit156:                                     ; preds = %.preheader168, %353, %76
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %77, %76 ], [ %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn, %353 ], [ %77, %.preheader168 ]
  call void @llvm.lifetime.end.p0(i64 49152, ptr nonnull %10) #10
  br label %362

357:                                              ; preds = %357, %352
  %358 = phi ptr [ %31, %352 ], [ %359, %357 ]
  %359 = getelementptr inbounds i8, ptr %358, i64 -16
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %359) #10
  %360 = icmp eq ptr %359, %9
  br i1 %360, label %361, label %357

361:                                              ; preds = %357
  call void @llvm.lifetime.end.p0(i64 8208, ptr nonnull %9) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %8) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %7) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %5) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #10
  ret ptr null

362:                                              ; preds = %362, %.loopexit156
  %363 = phi ptr [ %31, %.loopexit156 ], [ %364, %362 ]
  %364 = getelementptr inbounds i8, ptr %363, i64 -16
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %364) #10
  %365 = icmp eq ptr %364, %9
  br i1 %365, label %.loopexit, label %362

.loopexit:                                        ; preds = %.preheader170, %362, %70
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %71, %70 ], [ %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %362 ], [ %71, %.preheader170 ]
  call void @llvm.lifetime.end.p0(i64 8208, ptr nonnull %9) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %8) #10
  br label %366

366:                                              ; preds = %.loopexit, %68
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %.loopexit ], [ %69, %68 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #10
  br label %367

367:                                              ; preds = %366, %66, %64
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %366 ], [ %67, %66 ], [ %65, %64 ]
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %7) #10
  br label %368

368:                                              ; preds = %367, %62
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %367 ], [ %63, %62 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #10
  br label %369

369:                                              ; preds = %368, %60
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %368 ], [ %61, %60 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %5) #10
  br label %370

370:                                              ; preds = %369, %58
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %369 ], [ %59, %58 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #10
  br label %371

371:                                              ; preds = %370, %56
  %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %370 ], [ %57, %56 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn135.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare i32 @bloom_check(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @_ZN8IntGroupC1Ei(ptr noundef nonnull align 8 dereferenceable(20), i32 noundef) unnamed_addr #0

declare void @_ZN8IntGroup3SetEP3Int(ptr noundef nonnull align 8 dereferenceable(20), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20)) local_unnamed_addr #0

declare void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

declare void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

declare void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #9

declare noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(393296), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #0

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #1

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind "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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { 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 #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { builtin nounwind }
attributes #13 = { noreturn 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, !7, i64 0}
!6 = !{!"_ZTS8tothread", !7, i64 0, !10, i64 8, !10, i64 16}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!10, !10, i64 0}
!14 = !{!7, !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!8, !8, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"bool", !8, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}


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