; LLVM IR from albertobsd/keyhunt :: keyhunt.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 { %union.anon }
%union.anon = type { [5 x i64] }
%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.229 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.235 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.236 = 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(120)) unnamed_addr #0

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

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

; 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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

declare void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef) #0

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

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

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

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

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

declare void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(40), 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(120) 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(983240), ptr noundef) #0

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

; Function Attrs: nocallback nofree nosync nounwind 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(983240), ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(120)) #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) #8 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 %class.Point, align 8
  %12 = alloca %class.Point, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %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) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %6) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr %9) #9
  call void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %9)
  call void @llvm.lifetime.start.p0(i64 40, ptr %10) #9
  call void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %10)
  call void @llvm.lifetime.start.p0(i64 120, ptr %11) #9
  call void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %11)
  call void @llvm.lifetime.start.p0(i64 120, ptr %12) #9
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %12)
          to label %43 unwind label %90

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

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

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

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

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

51:                                               ; preds = %53, %48
  %52 = phi ptr [ %49, %48 ], [ %54, %53 ]
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %52)
          to label %53 unwind label %110

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

56:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 122880, ptr %27) #9
  %57 = getelementptr inbounds [1024 x %class.Point], ptr %27, i32 0, i32 0
  %58 = getelementptr inbounds %class.Point, ptr %57, i64 1024
  br label %59

59:                                               ; preds = %61, %56
  %60 = phi ptr [ %57, %56 ], [ %62, %61 ]
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %60)
          to label %61 unwind label %114

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

64:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 40, ptr %28) #9
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %28)
          to label %65 unwind label %124

65:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 40, ptr %29) #9
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %29)
          to label %66 unwind label %128

66:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 40, ptr %30) #9
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %30)
          to label %67 unwind label %132

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

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

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

70:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 120, ptr %34) #9
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %34)
          to label %71 unwind label %148

71:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 120, ptr %35) #9
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %35)
          to label %72 unwind label %152

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

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

87:                                               ; preds = %75
  %88 = load i32, ptr %22, align 4, !tbaa !9
  %89 = add i32 %88, 1
  store i32 %89, ptr %22, align 4, !tbaa !9
  br label %160

90:                                               ; preds = %1
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %13, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %14, align 4
  br label %598

94:                                               ; preds = %43
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %13, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %14, align 4
  br label %597

98:                                               ; preds = %44
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %13, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %14, align 4
  br label %596

102:                                              ; preds = %46
  %103 = landingpad { ptr, i32 }
          cleanup
  %104 = extractvalue { ptr, i32 } %103, 0
  store ptr %104, ptr %13, align 8
  %105 = extractvalue { ptr, i32 } %103, 1
  store i32 %105, ptr %14, align 4
  call void @_ZdlPvm(ptr noundef %45, i64 noundef 24) #11
  br label %596

106:                                              ; preds = %47
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %13, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %14, align 4
  br label %595

110:                                              ; preds = %51
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %13, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %14, align 4
  br label %594

114:                                              ; preds = %59
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %13, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %14, align 4
  %118 = icmp eq ptr %57, %60
  br i1 %118, label %123, label %119

119:                                              ; preds = %119, %114
  %120 = phi ptr [ %60, %114 ], [ %121, %119 ]
  %121 = getelementptr inbounds %class.Point, ptr %120, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %121) #9
  %122 = icmp eq ptr %121, %57
  br i1 %122, label %123, label %119

123:                                              ; preds = %119, %114
  br label %593

124:                                              ; preds = %64
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %13, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %14, align 4
  br label %579

128:                                              ; preds = %65
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %13, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %14, align 4
  br label %578

132:                                              ; preds = %66
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %13, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %14, align 4
  br label %577

136:                                              ; preds = %67
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %13, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %14, align 4
  br label %576

140:                                              ; preds = %68
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %13, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %14, align 4
  br label %575

144:                                              ; preds = %69
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %13, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %14, align 4
  br label %574

148:                                              ; preds = %70
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %13, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %14, align 4
  br label %573

152:                                              ; preds = %71
  %153 = landingpad { ptr, i32 }
          cleanup
  %154 = extractvalue { ptr, i32 } %153, 0
  store ptr %154, ptr %13, align 8
  %155 = extractvalue { ptr, i32 } %153, 1
  store i32 %155, ptr %14, align 4
  br label %572

156:                                              ; preds = %230, %227, %226, %225, %217, %214, %212, %204, %201, %199, %187, %186, %183, %178, %176, %173, %172, %169, %162, %161, %160, %72
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %13, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %14, align 4
  br label %571

160:                                              ; preds = %87, %75
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %33, ptr noundef @BSGS_M_double)
          to label %161 unwind label %156

161:                                              ; preds = %160
  invoke void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(40) %33, i64 noundef 512)
          to label %162 unwind label %156

162:                                              ; preds = %161
  invoke void @_ZN3Int3AddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %33, ptr noundef @BSGS_M)
          to label %163 unwind label %156

163:                                              ; preds = %162
  store i32 1, ptr %21, align 4, !tbaa !9
  br label %164

164:                                              ; preds = %563, %163
  %165 = call i32 @rand() #9
  %166 = srem i32 %165, 2
  store i32 %166, ptr %18, align 4, !tbaa !9
  %167 = call i32 @pthread_mutex_lock(ptr noundef @bsgs_thread) #9
  %168 = load i32, ptr %18, align 4, !tbaa !9
  switch i32 %168, label %191 [
    i32 0, label %169
    i32 1, label %183
  ]

169:                                              ; preds = %164
  %170 = invoke noundef zeroext i1 @_ZN3Int9IsGreaterEPS_(ptr noundef nonnull align 8 dereferenceable(40) @n_range_end, ptr noundef @BSGS_CURRENT)
          to label %171 unwind label %156

171:                                              ; preds = %169
  br i1 %170, label %172, label %181

172:                                              ; preds = %171
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(40) @n_range_end, ptr noundef @BSGS_N_double)
          to label %173 unwind label %156

173:                                              ; preds = %172
  %174 = invoke noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(40) @n_range_end, ptr noundef @BSGS_CURRENT)
          to label %175 unwind label %156

175:                                              ; preds = %173
  br i1 %174, label %176, label %178

176:                                              ; preds = %175
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %9, ptr noundef @BSGS_CURRENT)
          to label %177 unwind label %156

177:                                              ; preds = %176
  br label %180

178:                                              ; preds = %175
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %9, ptr noundef @n_range_end)
          to label %179 unwind label %156

179:                                              ; preds = %178
  br label %180

180:                                              ; preds = %179, %177
  br label %182

181:                                              ; preds = %171
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %181, %180
  br label %191

183:                                              ; preds = %164
  %184 = invoke noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(40) @BSGS_CURRENT, ptr noundef @n_range_end)
          to label %185 unwind label %156

185:                                              ; preds = %183
  br i1 %184, label %186, label %189

186:                                              ; preds = %185
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %9, ptr noundef @BSGS_CURRENT)
          to label %187 unwind label %156

187:                                              ; preds = %186
  invoke void @_ZN3Int3AddEPS_(ptr noundef nonnull align 8 dereferenceable(40) @BSGS_CURRENT, ptr noundef @BSGS_N_double)
          to label %188 unwind label %156

188:                                              ; preds = %187
  br label %190

189:                                              ; preds = %185
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %190

190:                                              ; preds = %189, %188
  br label %191

191:                                              ; preds = %190, %182, %164
  %192 = call i32 @pthread_mutex_unlock(ptr noundef @bsgs_thread) #9
  %193 = load i32, ptr %21, align 4, !tbaa !9
  %194 = icmp eq i32 %193, 0
  br i1 %194, label %195, label %196

195:                                              ; preds = %191
  br label %564

196:                                              ; preds = %191
  %197 = load i32, ptr @FLAGMATRIX, align 4, !tbaa !9
  %198 = icmp ne i32 %197, 0
  br i1 %198, label %199, label %209

199:                                              ; preds = %196
  %200 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(40) %9)
          to label %201 unwind label %156

201:                                              ; preds = %199
  store ptr %200, ptr %7, align 8, !tbaa !5
  %202 = load ptr, ptr %7, align 8, !tbaa !5
  %203 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.235, ptr noundef %202)
          to label %204 unwind label %156

204:                                              ; preds = %201
  %205 = load ptr, ptr @stdout, align 8, !tbaa !5
  %206 = invoke i32 @fflush(ptr noundef %205)
          to label %207 unwind label %156

207:                                              ; preds = %204
  %208 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %208) #9
  br label %223

209:                                              ; preds = %196
  %210 = load i32, ptr @FLAGQUIET, align 4, !tbaa !9
  %211 = icmp eq i32 %210, 0
  br i1 %211, label %212, label %222

212:                                              ; preds = %209
  %213 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(40) %9)
          to label %214 unwind label %156

214:                                              ; preds = %212
  store ptr %213, ptr %7, align 8, !tbaa !5
  %215 = load ptr, ptr %7, align 8, !tbaa !5
  %216 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.236, ptr noundef %215)
          to label %217 unwind label %156

217:                                              ; preds = %214
  %218 = load ptr, ptr @stdout, align 8, !tbaa !5
  %219 = invoke i32 @fflush(ptr noundef %218)
          to label %220 unwind label %156

220:                                              ; preds = %217
  %221 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %221) #9
  store i32 1, ptr @THREADOUTPUT, align 4, !tbaa !9
  br label %222

222:                                              ; preds = %220, %209
  br label %223

223:                                              ; preds = %222, %207
  call void @llvm.lifetime.start.p0(i64 120, ptr %36) #9
  %224 = 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(983240) %224, ptr noundef %9)
          to label %225 unwind label %282

225:                                              ; preds = %223
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %36, i64 120, i1 false), !tbaa.struct !15
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %36) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %36) #9
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef %9)
          to label %226 unwind label %156

226:                                              ; preds = %225
  invoke void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(40) %32)
          to label %227 unwind label %156

227:                                              ; preds = %226
  %228 = load ptr, ptr @secp, align 8, !tbaa !5
  %229 = getelementptr inbounds %class.Secp256K1, ptr %228, i32 0, i32 2
  invoke void @_ZN3Int3AddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef %229)
          to label %230 unwind label %156

230:                                              ; preds = %227
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef %33)
          to label %231 unwind label %156

231:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 120, ptr %37) #9
  %232 = 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(983240) %232, ptr noundef %32)
          to label %233 unwind label %286

233:                                              ; preds = %231
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %12, ptr align 8 %37, i64 120, i1 false), !tbaa.struct !15
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %37) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %37) #9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %553, %233
  %235 = load i32, ptr %16, align 4, !tbaa !9
  %236 = load i32, ptr @bsgs_point_number, align 4, !tbaa !9
  %237 = icmp ult i32 %235, %236
  br i1 %237, label %238, label %556

238:                                              ; preds = %234
  %239 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %240 = load i32, ptr %16, align 4, !tbaa !9
  %241 = zext i32 %240 to i64
  %242 = getelementptr inbounds i32, ptr %239, i64 %241
  %243 = load i32, ptr %242, align 4, !tbaa !9
  %244 = icmp eq i32 %243, 0
  br i1 %244, label %245, label %552

245:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 120, ptr %38) #9
  %246 = load ptr, ptr @secp, align 8, !tbaa !5
  %247 = load i32, ptr %16, align 4, !tbaa !9
  %248 = zext i32 %247 to i64
  %249 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @OriginalPointsBSGS, i64 noundef %248) #9
  invoke void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind writable sret(%class.Point) align 8 %38, ptr noundef nonnull align 8 dereferenceable(983240) %246, ptr noundef nonnull align 8 dereferenceable(120) %249, ptr noundef nonnull align 8 dereferenceable(120) %12)
          to label %250 unwind label %290

250:                                              ; preds = %245
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %24, ptr align 8 %38, i64 120, i1 false), !tbaa.struct !15
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %38) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %251

251:                                              ; preds = %547, %250
  %252 = load i32, ptr %39, align 4, !tbaa !9
  %253 = load i32, ptr %22, align 4, !tbaa !9
  %254 = icmp ult i32 %252, %253
  br i1 %254, label %255, label %262

255:                                              ; preds = %251
  %256 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %257 = load i32, ptr %16, align 4, !tbaa !9
  %258 = zext i32 %257 to i64
  %259 = getelementptr inbounds i32, ptr %256, i64 %258
  %260 = load i32, ptr %259, align 4, !tbaa !9
  %261 = icmp eq i32 %260, 0
  br label %262

262:                                              ; preds = %255, %251
  %263 = phi i1 [ false, %251 ], [ %261, %255 ]
  br i1 %263, label %264, label %551

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

265:                                              ; preds = %279, %264
  %266 = load i32, ptr %40, align 4, !tbaa !9
  %267 = load i32, ptr %25, align 4, !tbaa !9
  %268 = icmp slt i32 %266, %267
  br i1 %268, label %269, label %298

269:                                              ; preds = %265
  %270 = load i32, ptr %40, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %271
  %273 = load i32, ptr %40, align 4, !tbaa !9
  %274 = sext i32 %273 to i64
  %275 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %274) #9
  %276 = getelementptr inbounds %class.Point, ptr %275, i32 0, i32 0
  %277 = getelementptr inbounds %class.Point, ptr %24, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %272, ptr noundef %276, ptr noundef %277)
          to label %278 unwind label %294

278:                                              ; preds = %269
  br label %279

279:                                              ; preds = %278
  %280 = load i32, ptr %40, align 4, !tbaa !9
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %40, align 4, !tbaa !9
  br label %265, !llvm.loop !17

282:                                              ; preds = %223
  %283 = landingpad { ptr, i32 }
          cleanup
  %284 = extractvalue { ptr, i32 } %283, 0
  store ptr %284, ptr %13, align 8
  %285 = extractvalue { ptr, i32 } %283, 1
  store i32 %285, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 120, ptr %36) #9
  br label %571

286:                                              ; preds = %231
  %287 = landingpad { ptr, i32 }
          cleanup
  %288 = extractvalue { ptr, i32 } %287, 0
  store ptr %288, ptr %13, align 8
  %289 = extractvalue { ptr, i32 } %287, 1
  store i32 %289, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 120, ptr %37) #9
  br label %571

290:                                              ; preds = %245
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %13, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 120, ptr %38) #9
  br label %571

294:                                              ; preds = %545, %543, %540, %538, %536, %534, %533, %528, %526, %396, %394, %392, %391, %387, %385, %384, %379, %359, %357, %355, %354, %350, %348, %347, %342, %336, %334, %332, %331, %327, %321, %313, %307, %298, %269
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %13, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %14, align 4
  br label %550

298:                                              ; preds = %265
  %299 = load i32, ptr %40, align 4, !tbaa !9
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %300
  %302 = load i32, ptr %40, align 4, !tbaa !9
  %303 = sext i32 %302 to i64
  %304 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %303) #9
  %305 = getelementptr inbounds %class.Point, ptr %304, i32 0, i32 0
  %306 = getelementptr inbounds %class.Point, ptr %24, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %301, ptr noundef %305, ptr noundef %306)
          to label %307 unwind label %294

307:                                              ; preds = %298
  %308 = load i32, ptr %40, align 4, !tbaa !9
  %309 = add nsw i32 %308, 1
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %310
  %312 = getelementptr inbounds %class.Point, ptr %24, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %311, ptr noundef @_2GSn, ptr noundef %312)
          to label %313 unwind label %294

313:                                              ; preds = %307
  %314 = load ptr, ptr %23, align 8, !tbaa !5
  invoke void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20) %314)
          to label %315 unwind label %294

315:                                              ; preds = %313
  %316 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 512
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %316, ptr align 8 %24, i64 120, i1 false), !tbaa.struct !15
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %317

317:                                              ; preds = %376, %315
  %318 = load i32, ptr %40, align 4, !tbaa !9
  %319 = load i32, ptr %25, align 4, !tbaa !9
  %320 = icmp slt i32 %318, %319
  br i1 %320, label %321, label %379

321:                                              ; preds = %317
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %34, ptr align 8 %24, i64 120, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %35, ptr align 8 %24, i64 120, i1 false), !tbaa.struct !15
  %322 = load i32, ptr %40, align 4, !tbaa !9
  %323 = sext i32 %322 to i64
  %324 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %323) #9
  %325 = getelementptr inbounds %class.Point, ptr %324, i32 0, i32 1
  %326 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %28, ptr noundef %325, ptr noundef %326)
          to label %327 unwind label %294

327:                                              ; preds = %321
  %328 = load i32, ptr %40, align 4, !tbaa !9
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %329
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %30, ptr noundef %28, ptr noundef %330)
          to label %331 unwind label %294

331:                                              ; preds = %327
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %31, ptr noundef %30)
          to label %332 unwind label %294

332:                                              ; preds = %331
  %333 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %333)
          to label %334 unwind label %294

334:                                              ; preds = %332
  %335 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %335, ptr noundef %31)
          to label %336 unwind label %294

336:                                              ; preds = %334
  %337 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  %338 = load i32, ptr %40, align 4, !tbaa !9
  %339 = sext i32 %338 to i64
  %340 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %339) #9
  %341 = getelementptr inbounds %class.Point, ptr %340, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %337, ptr noundef %341)
          to label %342 unwind label %294

342:                                              ; preds = %336
  %343 = load i32, ptr %40, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %344) #9
  %346 = getelementptr inbounds %class.Point, ptr %345, i32 0, i32 1
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %29, ptr noundef %346)
          to label %347 unwind label %294

347:                                              ; preds = %342
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %29)
          to label %348 unwind label %294

348:                                              ; preds = %347
  %349 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %29, ptr noundef %349)
          to label %350 unwind label %294

350:                                              ; preds = %348
  %351 = load i32, ptr %40, align 4, !tbaa !9
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %352
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %30, ptr noundef %29, ptr noundef %353)
          to label %354 unwind label %294

354:                                              ; preds = %350
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %31, ptr noundef %30)
          to label %355 unwind label %294

355:                                              ; preds = %354
  %356 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %356)
          to label %357 unwind label %294

357:                                              ; preds = %355
  %358 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %358, ptr noundef %31)
          to label %359 unwind label %294

359:                                              ; preds = %357
  %360 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  %361 = load i32, ptr %40, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %362) #9
  %364 = getelementptr inbounds %class.Point, ptr %363, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %360, ptr noundef %364)
          to label %365 unwind label %294

365:                                              ; preds = %359
  %366 = load i32, ptr %40, align 4, !tbaa !9
  %367 = add nsw i32 %366, 1
  %368 = add nsw i32 512, %367
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 %369
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %370, ptr align 8 %34, i64 120, i1 false), !tbaa.struct !15
  %371 = load i32, ptr %40, align 4, !tbaa !9
  %372 = add nsw i32 %371, 1
  %373 = sub nsw i32 512, %372
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 %374
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %375, ptr align 8 %35, i64 120, i1 false), !tbaa.struct !15
  br label %376

376:                                              ; preds = %365
  %377 = load i32, ptr %40, align 4, !tbaa !9
  %378 = add nsw i32 %377, 1
  store i32 %378, ptr %40, align 4, !tbaa !9
  br label %317, !llvm.loop !19

379:                                              ; preds = %317
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %35, ptr align 8 %24, i64 120, i1 false), !tbaa.struct !15
  %380 = load i32, ptr %40, align 4, !tbaa !9
  %381 = sext i32 %380 to i64
  %382 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %381) #9
  %383 = getelementptr inbounds %class.Point, ptr %382, i32 0, i32 1
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %29, ptr noundef %383)
          to label %384 unwind label %294

384:                                              ; preds = %379
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %29)
          to label %385 unwind label %294

385:                                              ; preds = %384
  %386 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %29, ptr noundef %386)
          to label %387 unwind label %294

387:                                              ; preds = %385
  %388 = load i32, ptr %40, align 4, !tbaa !9
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %389
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %30, ptr noundef %29, ptr noundef %390)
          to label %391 unwind label %294

391:                                              ; preds = %387
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %31, ptr noundef %30)
          to label %392 unwind label %294

392:                                              ; preds = %391
  %393 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %393)
          to label %394 unwind label %294

394:                                              ; preds = %392
  %395 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %395, ptr noundef %31)
          to label %396 unwind label %294

396:                                              ; preds = %394
  %397 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  %398 = load i32, ptr %40, align 4, !tbaa !9
  %399 = sext i32 %398 to i64
  %400 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %399) #9
  %401 = getelementptr inbounds %class.Point, ptr %400, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %397, ptr noundef %401)
          to label %402 unwind label %294

402:                                              ; preds = %396
  %403 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %403, ptr align 8 %35, i64 120, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %404

404:                                              ; preds = %522, %402
  %405 = load i32, ptr %41, align 4, !tbaa !9
  %406 = icmp slt i32 %405, 1024
  br i1 %406, label %407, label %414

407:                                              ; preds = %404
  %408 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %409 = load i32, ptr %16, align 4, !tbaa !9
  %410 = zext i32 %409 to i64
  %411 = getelementptr inbounds i32, ptr %408, i64 %410
  %412 = load i32, ptr %411, align 4, !tbaa !9
  %413 = icmp eq i32 %412, 0
  br label %414

414:                                              ; preds = %407, %404
  %415 = phi i1 [ false, %404 ], [ %413, %407 ]
  br i1 %415, label %417, label %416

416:                                              ; preds = %414
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  br label %526

417:                                              ; preds = %414
  %418 = load i32, ptr %41, align 4, !tbaa !9
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds [1024 x %class.Point], ptr %27, i64 0, i64 %419
  %421 = getelementptr inbounds %class.Point, ptr %420, i32 0, i32 0
  %422 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  invoke void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(40) %421, ptr noundef %422)
          to label %423 unwind label %477

423:                                              ; preds = %417
  %424 = load ptr, ptr @bloom_bP, align 8, !tbaa !5
  %425 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %426 = load i8, ptr %425, align 16, !tbaa !16
  %427 = zext i8 %426 to i64
  %428 = getelementptr inbounds %struct.bloom, ptr %424, i64 %427
  %429 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %430 = invoke i32 @bloom_check(ptr noundef %428, ptr noundef %429, i32 noundef 32)
          to label %431 unwind label %477

431:                                              ; preds = %423
  store i32 %430, ptr %18, align 4, !tbaa !9
  %432 = load i32, ptr %18, align 4, !tbaa !9
  %433 = icmp ne i32 %432, 0
  br i1 %433, label %434, label %521

434:                                              ; preds = %431
  %435 = load i32, ptr %39, align 4, !tbaa !9
  %436 = mul i32 %435, 1024
  %437 = load i32, ptr %41, align 4, !tbaa !9
  %438 = add i32 %436, %437
  %439 = load i32, ptr %16, align 4, !tbaa !9
  %440 = invoke noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef %9, i32 noundef %438, i32 noundef %439, ptr noundef %10)
          to label %441 unwind label %477

441:                                              ; preds = %434
  store i32 %440, ptr %18, align 4, !tbaa !9
  %442 = load i32, ptr %18, align 4, !tbaa !9
  %443 = icmp ne i32 %442, 0
  br i1 %443, label %444, label %520

444:                                              ; preds = %441
  %445 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(40) %10)
          to label %446 unwind label %477

446:                                              ; preds = %444
  store ptr %445, ptr %8, align 8, !tbaa !5
  %447 = load ptr, ptr %8, align 8, !tbaa !5
  %448 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.237, ptr noundef %447)
          to label %449 unwind label %477

449:                                              ; preds = %446
  call void @llvm.lifetime.start.p0(i64 120, ptr %42) #9
  %450 = 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(983240) %450, ptr noundef %10)
          to label %451 unwind label %481

451:                                              ; preds = %449
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %15, ptr align 8 %42, i64 120, i1 false), !tbaa.struct !15
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %42) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %42) #9
  %452 = load ptr, ptr @secp, align 8, !tbaa !5
  %453 = load ptr, ptr @OriginalPointsBSGScompressed, align 8, !tbaa !5
  %454 = load i32, ptr %16, align 4, !tbaa !9
  %455 = zext i32 %454 to i64
  %456 = getelementptr inbounds i8, ptr %453, i64 %455
  %457 = load i8, ptr %456, align 1, !tbaa !20, !range !22, !noundef !23
  %458 = trunc i8 %457 to i1
  %459 = invoke noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(983240) %452, i1 noundef zeroext %458, ptr noundef nonnull align 8 dereferenceable(120) %15)
          to label %460 unwind label %477

460:                                              ; preds = %451
  store ptr %459, ptr %7, align 8, !tbaa !5
  %461 = load ptr, ptr %7, align 8, !tbaa !5
  %462 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.238, ptr noundef %461)
          to label %463 unwind label %477

463:                                              ; preds = %460
  %464 = call i32 @pthread_mutex_lock(ptr noundef @write_keys) #9
  %465 = invoke noalias ptr @fopen(ptr noundef @.str.229, ptr noundef @.str.239)
          to label %466 unwind label %477

466:                                              ; preds = %463
  store ptr %465, ptr %4, align 8, !tbaa !5
  %467 = load ptr, ptr %4, align 8, !tbaa !5
  %468 = icmp ne ptr %467, null
  br i1 %468, label %469, label %485

469:                                              ; preds = %466
  %470 = load ptr, ptr %4, align 8, !tbaa !5
  %471 = load ptr, ptr %8, align 8, !tbaa !5
  %472 = load ptr, ptr %7, align 8, !tbaa !5
  %473 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %470, ptr noundef @.str.240, ptr noundef %471, ptr noundef %472) #9
  %474 = load ptr, ptr %4, align 8, !tbaa !5
  %475 = invoke i32 @fclose(ptr noundef %474)
          to label %476 unwind label %477

476:                                              ; preds = %469
  br label %485

477:                                              ; preds = %516, %469, %463, %460, %451, %446, %444, %434, %423, %417
  %478 = landingpad { ptr, i32 }
          cleanup
  %479 = extractvalue { ptr, i32 } %478, 0
  store ptr %479, ptr %13, align 8
  %480 = extractvalue { ptr, i32 } %478, 1
  store i32 %480, ptr %14, align 4
  br label %525

481:                                              ; preds = %449
  %482 = landingpad { ptr, i32 }
          cleanup
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %13, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 120, ptr %42) #9
  br label %525

485:                                              ; preds = %476, %466
  %486 = load ptr, ptr %8, align 8, !tbaa !5
  call void @free(ptr noundef %486) #9
  %487 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %487) #9
  %488 = call i32 @pthread_mutex_unlock(ptr noundef @write_keys) #9
  %489 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %490 = load i32, ptr %16, align 4, !tbaa !9
  %491 = zext i32 %490 to i64
  %492 = getelementptr inbounds i32, ptr %489, i64 %491
  store i32 1, ptr %492, align 4, !tbaa !9
  store i32 1, ptr %19, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %493

493:                                              ; preds = %510, %485
  %494 = load i32, ptr %17, align 4, !tbaa !9
  %495 = load i32, ptr @bsgs_point_number, align 4, !tbaa !9
  %496 = icmp ult i32 %494, %495
  br i1 %496, label %497, label %500

497:                                              ; preds = %493
  %498 = load i32, ptr %19, align 4, !tbaa !9
  %499 = icmp ne i32 %498, 0
  br label %500

500:                                              ; preds = %497, %493
  %501 = phi i1 [ false, %493 ], [ %499, %497 ]
  br i1 %501, label %502, label %513

502:                                              ; preds = %500
  %503 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %504 = load i32, ptr %17, align 4, !tbaa !9
  %505 = zext i32 %504 to i64
  %506 = getelementptr inbounds i32, ptr %503, i64 %505
  %507 = load i32, ptr %506, align 4, !tbaa !9
  %508 = load i32, ptr %19, align 4, !tbaa !9
  %509 = and i32 %508, %507
  store i32 %509, ptr %19, align 4, !tbaa !9
  br label %510

510:                                              ; preds = %502
  %511 = load i32, ptr %17, align 4, !tbaa !9
  %512 = add i32 %511, 1
  store i32 %512, ptr %17, align 4, !tbaa !9
  br label %493, !llvm.loop !24

513:                                              ; preds = %500
  %514 = load i32, ptr %19, align 4, !tbaa !9
  %515 = icmp ne i32 %514, 0
  br i1 %515, label %516, label %519

516:                                              ; preds = %513
  %517 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.241)
          to label %518 unwind label %477

518:                                              ; preds = %516
  call void @exit(i32 noundef 1) #12
  unreachable

519:                                              ; preds = %513
  br label %520

520:                                              ; preds = %519, %441
  br label %521

521:                                              ; preds = %520, %431
  br label %522

522:                                              ; preds = %521
  %523 = load i32, ptr %41, align 4, !tbaa !9
  %524 = add nsw i32 %523, 1
  store i32 %524, ptr %41, align 4, !tbaa !9
  br label %404, !llvm.loop !25

525:                                              ; preds = %481, %477
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  br label %550

526:                                              ; preds = %416
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %34, ptr align 8 %24, i64 120, i1 false), !tbaa.struct !15
  %527 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %28, ptr noundef getelementptr inbounds (%class.Point, ptr @_2GSn, i32 0, i32 1), ptr noundef %527)
          to label %528 unwind label %294

528:                                              ; preds = %526
  %529 = load i32, ptr %40, align 4, !tbaa !9
  %530 = add nsw i32 %529, 1
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds [513 x %class.Int], ptr %26, i64 0, i64 %531
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %30, ptr noundef %28, ptr noundef %532)
          to label %533 unwind label %294

533:                                              ; preds = %528
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %31, ptr noundef %30)
          to label %534 unwind label %294

534:                                              ; preds = %533
  %535 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %535)
          to label %536 unwind label %294

536:                                              ; preds = %534
  %537 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %537, ptr noundef %31)
          to label %538 unwind label %294

538:                                              ; preds = %536
  %539 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %539, ptr noundef @_2GSn)
          to label %540 unwind label %294

540:                                              ; preds = %538
  %541 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  %542 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %541, ptr noundef @_2GSn, ptr noundef %542)
          to label %543 unwind label %294

543:                                              ; preds = %540
  %544 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  invoke void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %544, ptr noundef %30)
          to label %545 unwind label %294

545:                                              ; preds = %543
  %546 = getelementptr inbounds %class.Point, ptr %34, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %546, ptr noundef getelementptr inbounds (%class.Point, ptr @_2GSn, i32 0, i32 1))
          to label %547 unwind label %294

547:                                              ; preds = %545
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %24, ptr align 8 %34, i64 120, i1 false), !tbaa.struct !15
  %548 = load i32, ptr %39, align 4, !tbaa !9
  %549 = add i32 %548, 1
  store i32 %549, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %251, !llvm.loop !26

550:                                              ; preds = %525, %294
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  br label %571

551:                                              ; preds = %262
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  br label %552

552:                                              ; preds = %551, %238
  br label %553

553:                                              ; preds = %552
  %554 = load i32, ptr %16, align 4, !tbaa !9
  %555 = add i32 %554, 1
  store i32 %555, ptr %16, align 4, !tbaa !9
  br label %234, !llvm.loop !27

556:                                              ; preds = %234
  %557 = load ptr, ptr @steps, align 8, !tbaa !5
  %558 = load i32, ptr %20, align 4, !tbaa !9
  %559 = zext i32 %558 to i64
  %560 = getelementptr inbounds i64, ptr %557, i64 %559
  %561 = load i64, ptr %560, align 8, !tbaa !13
  %562 = add i64 %561, 2
  store i64 %562, ptr %560, align 8, !tbaa !13
  br label %563

563:                                              ; preds = %556
  br i1 true, label %164, label %564, !llvm.loop !28

564:                                              ; preds = %563, %195
  %565 = load ptr, ptr @ends, align 8, !tbaa !5
  %566 = load i32, ptr %20, align 4, !tbaa !9
  %567 = zext i32 %566 to i64
  %568 = getelementptr inbounds i32, ptr %565, i64 %567
  store i32 1, ptr %568, align 4, !tbaa !9
  store ptr null, ptr %2, align 8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %35) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %35) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %34) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %28) #9
  %569 = getelementptr inbounds [1024 x %class.Point], ptr %27, i32 0, i32 0
  %570 = getelementptr inbounds %class.Point, ptr %569, i64 1024
  br label %582

571:                                              ; preds = %550, %290, %286, %282, %156
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %35) #9
  br label %572

572:                                              ; preds = %571, %152
  call void @llvm.lifetime.end.p0(i64 120, ptr %35) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %34) #9
  br label %573

573:                                              ; preds = %572, %148
  call void @llvm.lifetime.end.p0(i64 120, ptr %34) #9
  br label %574

574:                                              ; preds = %573, %144
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #9
  br label %575

575:                                              ; preds = %574, %140
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #9
  br label %576

576:                                              ; preds = %575, %136
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #9
  br label %577

577:                                              ; preds = %576, %132
  call void @llvm.lifetime.end.p0(i64 40, ptr %30) #9
  br label %578

578:                                              ; preds = %577, %128
  call void @llvm.lifetime.end.p0(i64 40, ptr %29) #9
  br label %579

579:                                              ; preds = %578, %124
  call void @llvm.lifetime.end.p0(i64 40, ptr %28) #9
  %580 = getelementptr inbounds [1024 x %class.Point], ptr %27, i32 0, i32 0
  %581 = getelementptr inbounds %class.Point, ptr %580, i64 1024
  br label %588

582:                                              ; preds = %582, %564
  %583 = phi ptr [ %570, %564 ], [ %584, %582 ]
  %584 = getelementptr inbounds %class.Point, ptr %583, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %584) #9
  %585 = icmp eq ptr %584, %569
  br i1 %585, label %586, label %582

586:                                              ; preds = %582
  call void @llvm.lifetime.end.p0(i64 122880, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 20520, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %24) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %15) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %15) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %12) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %12) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %11) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  %587 = load ptr, ptr %2, align 8
  ret ptr %587

588:                                              ; preds = %588, %579
  %589 = phi ptr [ %581, %579 ], [ %590, %588 ]
  %590 = getelementptr inbounds %class.Point, ptr %589, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %590) #9
  %591 = icmp eq ptr %590, %580
  br i1 %591, label %592, label %588

592:                                              ; preds = %588
  br label %593

593:                                              ; preds = %592, %123
  call void @llvm.lifetime.end.p0(i64 122880, ptr %27) #9
  br label %594

594:                                              ; preds = %593, %110
  call void @llvm.lifetime.end.p0(i64 20520, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %24) #9
  br label %595

595:                                              ; preds = %594, %106
  call void @llvm.lifetime.end.p0(i64 120, ptr %24) #9
  br label %596

596:                                              ; preds = %595, %102, %98
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %15) #9
  br label %597

597:                                              ; preds = %596, %94
  call void @llvm.lifetime.end.p0(i64 120, ptr %15) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %12) #9
  br label %598

598:                                              ; preds = %597, %90
  call void @llvm.lifetime.end.p0(i64 120, ptr %12) #9
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %11) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  br label %599

599:                                              ; preds = %598
  %600 = load ptr, ptr %13, align 8
  %601 = load i32, ptr %14, align 4
  %602 = insertvalue { ptr, i32 } poison, ptr %600, 0
  %603 = insertvalue { ptr, i32 } %602, i32 %601, 1
  resume { ptr, i32 } %603
}

declare void @_ZN3Int3AddEPS_(ptr noundef nonnull align 8 dereferenceable(40), 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(40), 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(40), ptr noundef, ptr noundef) #0

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

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

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

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

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

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

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

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

declare noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(983240), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(120)) #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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { 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 #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin nounwind }
attributes #12 = { 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 = !{i64 0, i64 40, !16, i64 40, i64 40, !16, i64 80, i64 40, !16}
!16 = !{!7, !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = !{!21, !21, i64 0}
!21 = !{!"bool", !7, i64 0}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = distinct !{!28, !18}


; 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 { %union.anon }
%union.anon = type { [5 x i64] }
%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.229 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.235 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.236 = 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(120)) unnamed_addr #0

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

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

; 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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

declare void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef) local_unnamed_addr #0

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

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

declare noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(40), 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(40), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(40), 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(120) 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(983240), ptr noundef) local_unnamed_addr #0

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

; 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(983240), ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(120)) 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 #10 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) #11
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %3) #11
  call void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %3)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #11
  call void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %4)
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %5) #11
  call void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %5)
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %6) #11
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %6)
          to label %23 unwind label %53

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

24:                                               ; preds = %23
  %25 = invoke noalias noundef nonnull dereferenceable(24) ptr @_Znwm(i64 noundef 24) #12
          to label %26 unwind label %57

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

27:                                               ; preds = %26
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %8) #11
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %8)
          to label %28 unwind label %61

28:                                               ; preds = %27
  call void @llvm.lifetime.start.p0(i64 20520, ptr nonnull %9) #11
  br label %29

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

30:                                               ; preds = %29
  %.add = add nuw nsw i64 %.idx, 40
  %31 = icmp eq i64 %.add, 20520
  br i1 %31, label %32, label %29

32:                                               ; preds = %30
  call void @llvm.lifetime.start.p0(i64 122880, ptr nonnull %10) #11
  %33 = getelementptr inbounds i8, ptr %10, i64 122880
  br label %34

34:                                               ; preds = %35, %32
  %.idx109 = phi i64 [ 0, %32 ], [ %.add110, %35 ]
  %.ptr111 = getelementptr inbounds i8, ptr %10, i64 %.idx109
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %.ptr111)
          to label %35 unwind label %65

35:                                               ; preds = %34
  %.add110 = add nuw nsw i64 %.idx109, 120
  %36 = icmp eq i64 %.add110, 122880
  br i1 %36, label %37, label %34

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

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

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

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

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

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

43:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %17) #11
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(120) %17)
          to label %44 unwind label %83

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

45:                                               ; preds = %44
  invoke void @_ZN8IntGroup3SetEP3Int(ptr noundef nonnull align 8 dereferenceable(20) %25, ptr noundef nonnull %9)
          to label %46 unwind label %.loopexit.split-lp143

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

53:                                               ; preds = %1
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %314

55:                                               ; preds = %23
  %56 = landingpad { ptr, i32 }
          cleanup
  br label %313

57:                                               ; preds = %24
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %312

59:                                               ; preds = %26
  %60 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %25, i64 noundef 24) #13
  br label %312

61:                                               ; preds = %27
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %311

63:                                               ; preds = %29
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %310

65:                                               ; preds = %34
  %66 = landingpad { ptr, i32 }
          cleanup
  %67 = icmp eq i64 %.idx109, 0
  br i1 %67, label %.loopexit, label %.preheader146

.preheader146:                                    ; preds = %65, %.preheader146
  %68 = phi ptr [ %69, %.preheader146 ], [ %.ptr111, %65 ]
  %69 = getelementptr inbounds i8, ptr %68, i64 -120
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %69) #11
  %70 = icmp eq ptr %69, %10
  br i1 %70, label %.loopexit, label %.preheader146

71:                                               ; preds = %37
  %72 = landingpad { ptr, i32 }
          cleanup
  br label %300

73:                                               ; preds = %38
  %74 = landingpad { ptr, i32 }
          cleanup
  br label %299

75:                                               ; preds = %39
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %298

77:                                               ; preds = %40
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %297

79:                                               ; preds = %41
  %80 = landingpad { ptr, i32 }
          cleanup
  br label %296

81:                                               ; preds = %42
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %295

83:                                               ; preds = %43
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %294

85:                                               ; preds = %44
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %293

.loopexit142:                                     ; preds = %.invoke, %99, %102, %103, %105, %108, %109, %116, %125, %133, %134, %135, %138
  %lpad.loopexit144 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp143:                            ; preds = %45, %46, %87, %88
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

87:                                               ; preds = %46
  invoke void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(40) %16, i64 noundef 512)
          to label %88 unwind label %.loopexit.split-lp143

88:                                               ; preds = %87
  invoke void @_ZN3Int3AddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %16, ptr noundef nonnull @BSGS_M)
          to label %.preheader141 unwind label %.loopexit.split-lp143

.preheader141:                                    ; preds = %88
  %.not177 = icmp eq i32 %spec.select.fr, 0
  %89 = getelementptr inbounds i8, ptr %10, i64 61440
  %90 = getelementptr inbounds i8, ptr %17, i64 40
  %91 = getelementptr inbounds i8, ptr %18, i64 40
  %92 = zext i32 %47 to i64
  %wide.trip.count = zext i32 %spec.select.fr to i64
  %93 = getelementptr inbounds i8, ptr %9, i64 20440
  %94 = getelementptr inbounds i8, ptr %9, i64 20480
  br label %95

95:                                               ; preds = %.preheader141, %._crit_edge164
  %96 = call i32 @rand() #11
  %97 = srem i32 %96, 2
  %98 = call i32 @pthread_mutex_lock(ptr noundef nonnull @bsgs_thread) #11
  switch i32 %97, label %.critedge136 [
    i32 0, label %99
    i32 1, label %105
  ]

99:                                               ; preds = %95
  %100 = invoke noundef zeroext i1 @_ZN3Int9IsGreaterEPS_(ptr noundef nonnull align 8 dereferenceable(40) @n_range_end, ptr noundef nonnull @BSGS_CURRENT)
          to label %101 unwind label %.loopexit142

101:                                              ; preds = %99
  br i1 %100, label %102, label %110

102:                                              ; preds = %101
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(40) @n_range_end, ptr noundef nonnull @BSGS_N_double)
          to label %103 unwind label %.loopexit142

103:                                              ; preds = %102
  %104 = invoke noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(40) @n_range_end, ptr noundef nonnull @BSGS_CURRENT)
          to label %.invoke unwind label %.loopexit142

.invoke:                                          ; preds = %103
  %BSGS_CURRENT.n_range_end = select i1 %104, ptr @BSGS_CURRENT, ptr @n_range_end
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %3, ptr noundef nonnull %BSGS_CURRENT.n_range_end)
          to label %.critedge136 unwind label %.loopexit142

105:                                              ; preds = %95
  %106 = invoke noundef zeroext i1 @_ZN3Int7IsLowerEPS_(ptr noundef nonnull align 8 dereferenceable(40) @BSGS_CURRENT, ptr noundef nonnull @n_range_end)
          to label %107 unwind label %.loopexit142

107:                                              ; preds = %105
  br i1 %106, label %108, label %110

108:                                              ; preds = %107
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %3, ptr noundef nonnull @BSGS_CURRENT)
          to label %109 unwind label %.loopexit142

109:                                              ; preds = %108
  invoke void @_ZN3Int3AddEPS_(ptr noundef nonnull align 8 dereferenceable(40) @BSGS_CURRENT, ptr noundef nonnull @BSGS_N_double)
          to label %.critedge136 unwind label %.loopexit142

110:                                              ; preds = %107, %101
  %111 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @bsgs_thread) #11
  %112 = load ptr, ptr @ends, align 8, !tbaa !13
  %113 = getelementptr inbounds i32, ptr %112, i64 %92
  store i32 1, ptr %113, align 4, !tbaa !14
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %18) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %18) #11
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %17) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #11
  br label %301

.critedge136:                                     ; preds = %.invoke, %109, %95
  %114 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @bsgs_thread) #11
  %115 = load i32, ptr @FLAGMATRIX, align 4, !tbaa !14
  %.not113 = icmp eq i32 %115, 0
  br i1 %.not113, label %122, label %116

116:                                              ; preds = %.critedge136
  %117 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(40) %3)
          to label %118 unwind label %.loopexit142

118:                                              ; preds = %116
  %119 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.235, ptr noundef %117)
  %120 = load ptr, ptr @stdout, align 8, !tbaa !13
  %121 = call i32 @fflush(ptr noundef %120)
  call void @free(ptr noundef %117) #11
  br label %131

122:                                              ; preds = %.critedge136
  %123 = load i32, ptr @FLAGQUIET, align 4, !tbaa !14
  %124 = icmp eq i32 %123, 0
  br i1 %124, label %125, label %131

125:                                              ; preds = %122
  %126 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(40) %3)
          to label %127 unwind label %.loopexit142

127:                                              ; preds = %125
  %128 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.236, ptr noundef %126)
  %129 = load ptr, ptr @stdout, align 8, !tbaa !13
  %130 = call i32 @fflush(ptr noundef %129)
  call void @free(ptr noundef %126) #11
  store i32 1, ptr @THREADOUTPUT, align 4, !tbaa !14
  br label %131

131:                                              ; preds = %122, %127, %118
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %19) #11
  %132 = 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(983240) %132, ptr noundef nonnull %3)
          to label %133 unwind label %278

133:                                              ; preds = %131
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %5, ptr noundef nonnull align 8 dereferenceable(120) %19, i64 120, i1 false), !tbaa.struct !15
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %19) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %19) #11
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %15, ptr noundef nonnull %3)
          to label %134 unwind label %.loopexit142

134:                                              ; preds = %133
  invoke void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(40) %15)
          to label %135 unwind label %.loopexit142

135:                                              ; preds = %134
  %136 = load ptr, ptr @secp, align 8, !tbaa !13
  %137 = getelementptr inbounds i8, ptr %136, i64 160
  invoke void @_ZN3Int3AddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %15, ptr noundef nonnull %137)
          to label %138 unwind label %.loopexit142

138:                                              ; preds = %135
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %15, ptr noundef nonnull %16)
          to label %139 unwind label %.loopexit142

139:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %20) #11
  %140 = 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(983240) %140, ptr noundef nonnull %15)
          to label %141 unwind label %280

141:                                              ; preds = %139
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %6, ptr noundef nonnull align 8 dereferenceable(120) %20, i64 120, i1 false), !tbaa.struct !15
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %20) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %20) #11
  %142 = load i32, ptr @bsgs_point_number, align 4, !tbaa !14
  %.not178 = icmp eq i32 %142, 0
  br i1 %.not178, label %._crit_edge164, label %.lr.ph163

.lr.ph163:                                        ; preds = %141
  br i1 %.not177, label %.lr.ph163.split.preheader, label %.lr.ph163.split.us

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

.lr.ph163.split.us:                               ; preds = %.lr.ph163, %.critedge.us
  %143 = phi i32 [ %157, %.critedge.us ], [ %142, %.lr.ph163 ]
  %indvars.iv204 = phi i64 [ %indvars.iv.next205, %.critedge.us ], [ 0, %.lr.ph163 ]
  %144 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %145 = getelementptr inbounds i32, ptr %144, i64 %indvars.iv204
  %146 = load i32, ptr %145, align 4, !tbaa !14
  %147 = icmp eq i32 %146, 0
  br i1 %147, label %148, label %.critedge.us

148:                                              ; preds = %.lr.ph163.split.us
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %21) #11
  %149 = load ptr, ptr @secp, align 8, !tbaa !13
  %150 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @OriginalPointsBSGS, i64 noundef %indvars.iv204) #11
  invoke void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %21, ptr noundef nonnull align 8 dereferenceable(983240) %149, ptr noundef nonnull align 8 dereferenceable(120) %150, ptr noundef nonnull align 8 dereferenceable(120) %6)
          to label %.lr.ph158.us unwind label %.split.us

.lr.ph158.us:                                     ; preds = %148
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %8, ptr noundef nonnull align 8 dereferenceable(120) %21, i64 120, i1 false), !tbaa.struct !15
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %21) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %21) #11
  %151 = trunc nuw i64 %indvars.iv204 to i32
  br label %152

152:                                              ; preds = %.lr.ph158.us, %191
  %indvars.iv200 = phi i64 [ 0, %.lr.ph158.us ], [ %indvars.iv.next201, %191 ]
  %153 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %154 = getelementptr inbounds i32, ptr %153, i64 %indvars.iv204
  %155 = load i32, ptr %154, align 4, !tbaa !14
  %156 = icmp eq i32 %155, 0
  br i1 %156, label %.preheader.us, label %.critedge.us.loopexit

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

.critedge.us:                                     ; preds = %.critedge.us.loopexit, %.lr.ph163.split.us
  %157 = phi i32 [ %.pre, %.critedge.us.loopexit ], [ %143, %.lr.ph163.split.us ]
  %indvars.iv.next205 = add nuw nsw i64 %indvars.iv204, 1
  %158 = zext i32 %157 to i64
  %159 = icmp ult i64 %indvars.iv.next205, %158
  br i1 %159, label %.lr.ph163.split.us, label %._crit_edge164, !llvm.loop !17

160:                                              ; preds = %266
  %161 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef 511) #11
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %93, ptr noundef nonnull %161, ptr noundef nonnull %8)
          to label %162 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

162:                                              ; preds = %160
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %94, ptr noundef nonnull @_2GSn, ptr noundef nonnull %8)
          to label %163 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

163:                                              ; preds = %162
  invoke void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20) %25)
          to label %164 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

164:                                              ; preds = %163
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(120) %89, ptr noundef nonnull align 8 dereferenceable(120) %8, i64 120, i1 false), !tbaa.struct !15
  br label %238

165:                                              ; preds = %259
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %18, ptr noundef nonnull align 8 dereferenceable(120) %8, i64 120, i1 false), !tbaa.struct !15
  %166 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef 511) #11
  %167 = getelementptr inbounds i8, ptr %166, i64 40
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull %167)
          to label %168 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

168:                                              ; preds = %165
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %12)
          to label %169 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

169:                                              ; preds = %168
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull %91)
          to label %170 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

170:                                              ; preds = %169
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %13, ptr noundef nonnull %12, ptr noundef nonnull %93)
          to label %171 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

171:                                              ; preds = %170
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %14, ptr noundef nonnull %13)
          to label %172 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

172:                                              ; preds = %171
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %18)
          to label %173 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

173:                                              ; preds = %172
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %18, ptr noundef nonnull %14)
          to label %174 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

174:                                              ; preds = %173
  %175 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef 511) #11
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %18, ptr noundef nonnull %175)
          to label %176 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

176:                                              ; preds = %174
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(120) %10, ptr noundef nonnull align 8 dereferenceable(120) %18, i64 120, i1 false), !tbaa.struct !15
  %177 = shl i64 %indvars.iv200, 10
  br label %178

178:                                              ; preds = %237, %176
  %indvars.iv196 = phi i64 [ %indvars.iv.next197, %237 ], [ 0, %176 ]
  %179 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %180 = getelementptr inbounds i32, ptr %179, i64 %indvars.iv204
  %181 = load i32, ptr %180, align 4, !tbaa !14
  %182 = icmp eq i32 %181, 0
  br i1 %182, label %192, label %.critedge2.us

.critedge2.us:                                    ; preds = %237, %178
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %17, ptr noundef nonnull align 8 dereferenceable(120) %8, i64 120, i1 false), !tbaa.struct !15
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %11, ptr noundef nonnull getelementptr inbounds (i8, ptr @_2GSn, i64 40), ptr noundef nonnull %90)
          to label %183 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

183:                                              ; preds = %.critedge2.us
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %13, ptr noundef nonnull %11, ptr noundef nonnull %94)
          to label %184 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

184:                                              ; preds = %183
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %14, ptr noundef nonnull %13)
          to label %185 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

185:                                              ; preds = %184
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %17)
          to label %186 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

186:                                              ; preds = %185
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull %14)
          to label %187 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

187:                                              ; preds = %186
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull @_2GSn)
          to label %188 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

188:                                              ; preds = %187
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %90, ptr noundef nonnull @_2GSn, ptr noundef nonnull %17)
          to label %189 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

189:                                              ; preds = %188
  invoke void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %90, ptr noundef nonnull %13)
          to label %190 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

190:                                              ; preds = %189
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %90, ptr noundef nonnull getelementptr inbounds (i8, ptr @_2GSn, i64 40))
          to label %191 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

191:                                              ; preds = %190
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %8, ptr noundef nonnull align 8 dereferenceable(120) %17, i64 120, i1 false), !tbaa.struct !15
  %indvars.iv.next201 = add nuw nsw i64 %indvars.iv200, 1
  %exitcond203.not = icmp eq i64 %indvars.iv.next201, %wide.trip.count
  br i1 %exitcond203.not, label %.critedge.us.loopexit, label %152, !llvm.loop !19

192:                                              ; preds = %178
  %193 = getelementptr inbounds [1024 x %class.Point], ptr %10, i64 0, i64 %indvars.iv196
  invoke void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(40) %193, ptr noundef nonnull %2)
          to label %194 unwind label %.split167.us

194:                                              ; preds = %192
  %195 = load ptr, ptr @bloom_bP, align 8, !tbaa !13
  %196 = load i8, ptr %2, align 16, !tbaa !16
  %197 = zext i8 %196 to i64
  %198 = getelementptr inbounds %struct.bloom, ptr %195, i64 %197
  %199 = invoke i32 @bloom_check(ptr noundef %198, ptr noundef nonnull %2, i32 noundef 32)
          to label %200 unwind label %.split167.us

200:                                              ; preds = %194
  %.not114.us = icmp eq i32 %199, 0
  br i1 %.not114.us, label %237, label %201

201:                                              ; preds = %200
  %202 = add i64 %indvars.iv196, %177
  %203 = trunc i64 %202 to i32
  %204 = invoke noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef nonnull %3, i32 noundef %203, i32 noundef %151, ptr noundef nonnull %4)
          to label %205 unwind label %.split167.us

205:                                              ; preds = %201
  %.not115.us = icmp eq i32 %204, 0
  br i1 %.not115.us, label %237, label %206

206:                                              ; preds = %205
  %207 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(40) %4)
          to label %208 unwind label %.split167.us

208:                                              ; preds = %206
  %209 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.237, ptr noundef %207)
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %22) #11
  %210 = 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(983240) %210, ptr noundef nonnull %4)
          to label %211 unwind label %.split170.us

211:                                              ; preds = %208
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %7, ptr noundef nonnull align 8 dereferenceable(120) %22, i64 120, i1 false), !tbaa.struct !15
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %22) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %22) #11
  %212 = load ptr, ptr @secp, align 8, !tbaa !13
  %213 = load ptr, ptr @OriginalPointsBSGScompressed, align 8, !tbaa !13
  %214 = getelementptr inbounds i8, ptr %213, i64 %indvars.iv204
  %215 = load i8, ptr %214, align 1, !tbaa !20, !range !22, !noundef !23
  %216 = trunc nuw i8 %215 to i1
  %217 = invoke noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(983240) %212, i1 noundef zeroext %216, ptr noundef nonnull align 8 dereferenceable(120) %7)
          to label %218 unwind label %.split167.us

218:                                              ; preds = %211
  %219 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.238, ptr noundef %217)
  %220 = call i32 @pthread_mutex_lock(ptr noundef nonnull @write_keys) #11
  %221 = call noalias ptr @fopen(ptr noundef nonnull @.str.229, ptr noundef nonnull @.str.239)
  %.not117.us = icmp eq ptr %221, null
  br i1 %.not117.us, label %225, label %222

222:                                              ; preds = %218
  %223 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %221, ptr noundef nonnull @.str.240, ptr noundef %207, ptr noundef %217) #11
  %224 = call i32 @fclose(ptr noundef nonnull %221)
  br label %225

225:                                              ; preds = %222, %218
  call void @free(ptr noundef %207) #11
  call void @free(ptr noundef %217) #11
  %226 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @write_keys) #11
  %227 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %228 = getelementptr inbounds i32, ptr %227, i64 %indvars.iv204
  store i32 1, ptr %228, align 4, !tbaa !14
  %229 = load i32, ptr @bsgs_point_number, align 4, !tbaa !14
  %.not179 = icmp eq i32 %229, 0
  br i1 %.not179, label %.split173.us, label %.lr.ph.us.preheader

.lr.ph.us.preheader:                              ; preds = %225
  %230 = zext i32 %229 to i64
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %.lr.ph.us
  %indvars.iv193 = phi i64 [ 0, %.lr.ph.us.preheader ], [ %indvars.iv.next194, %.lr.ph.us ]
  %231 = getelementptr inbounds i32, ptr %227, i64 %indvars.iv193
  %232 = load i32, ptr %231, align 4, !tbaa !14
  %233 = and i32 %232, 1
  %indvars.iv.next194 = add nuw nsw i64 %indvars.iv193, 1
  %234 = icmp ult i64 %indvars.iv.next194, %230
  %235 = icmp ne i32 %233, 0
  %236 = select i1 %234, i1 %235, i1 false
  br i1 %236, label %.lr.ph.us, label %._crit_edge.us, !llvm.loop !24

237:                                              ; preds = %._crit_edge.us, %205, %200
  %indvars.iv.next197 = add nuw nsw i64 %indvars.iv196, 1
  %exitcond199.not = icmp eq i64 %indvars.iv.next197, 1024
  br i1 %exitcond199.not, label %.critedge2.us, label %178, !llvm.loop !25

238:                                              ; preds = %259, %164
  %indvars.iv189 = phi i64 [ %indvars.iv.next190, %259 ], [ 0, %164 ]
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %17, ptr noundef nonnull align 8 dereferenceable(120) %8, i64 120, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %18, ptr noundef nonnull align 8 dereferenceable(120) %8, i64 120, i1 false), !tbaa.struct !15
  %239 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv189) #11
  %240 = getelementptr inbounds i8, ptr %239, i64 40
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %11, ptr noundef nonnull %240, ptr noundef nonnull %90)
          to label %241 unwind label %.loopexit137.split.us

241:                                              ; preds = %238
  %242 = getelementptr inbounds [513 x %class.Int], ptr %9, i64 0, i64 %indvars.iv189
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %13, ptr noundef nonnull %11, ptr noundef nonnull %242)
          to label %243 unwind label %.loopexit137.split.us

243:                                              ; preds = %241
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %14, ptr noundef nonnull %13)
          to label %244 unwind label %.loopexit137.split.us

244:                                              ; preds = %243
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %17)
          to label %245 unwind label %.loopexit137.split.us

245:                                              ; preds = %244
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull %14)
          to label %246 unwind label %.loopexit137.split.us

246:                                              ; preds = %245
  %247 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv189) #11
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull %247)
          to label %248 unwind label %.loopexit137.split.us

248:                                              ; preds = %246
  %249 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv189) #11
  %250 = getelementptr inbounds i8, ptr %249, i64 40
  invoke void @_ZN3Int3SetEPS_(ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull %250)
          to label %251 unwind label %.loopexit137.split.us

251:                                              ; preds = %248
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %12)
          to label %252 unwind label %.loopexit137.split.us

252:                                              ; preds = %251
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull %91)
          to label %253 unwind label %.loopexit137.split.us

253:                                              ; preds = %252
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %13, ptr noundef nonnull %12, ptr noundef nonnull %242)
          to label %254 unwind label %.loopexit137.split.us

254:                                              ; preds = %253
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(40) %14, ptr noundef nonnull %13)
          to label %255 unwind label %.loopexit137.split.us

255:                                              ; preds = %254
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(40) %18)
          to label %256 unwind label %.loopexit137.split.us

256:                                              ; preds = %255
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(40) %18, ptr noundef nonnull %14)
          to label %257 unwind label %.loopexit137.split.us

257:                                              ; preds = %256
  %258 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv189) #11
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(40) %18, ptr noundef nonnull %258)
          to label %259 unwind label %.loopexit137.split.us

259:                                              ; preds = %257
  %indvars.iv.next190 = add nuw nsw i64 %indvars.iv189, 1
  %260 = add nuw nsw i64 %indvars.iv189, 513
  %261 = getelementptr inbounds [1024 x %class.Point], ptr %10, i64 0, i64 %260
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %261, ptr noundef nonnull align 8 dereferenceable(120) %17, i64 120, i1 false), !tbaa.struct !15
  %262 = sub nuw nsw i64 511, %indvars.iv189
  %263 = getelementptr inbounds [1024 x %class.Point], ptr %10, i64 0, i64 %262
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %263, ptr noundef nonnull align 8 dereferenceable(120) %18, i64 120, i1 false), !tbaa.struct !15
  %exitcond192.not = icmp eq i64 %indvars.iv.next190, 511
  br i1 %exitcond192.not, label %165, label %238, !llvm.loop !26

.preheader.us:                                    ; preds = %152, %266
  %indvars.iv = phi i64 [ %indvars.iv.next, %266 ], [ 0, %152 ]
  %264 = getelementptr inbounds [513 x %class.Int], ptr %9, i64 0, i64 %indvars.iv
  %265 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv) #11
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(40) %264, ptr noundef nonnull %265, ptr noundef nonnull %8)
          to label %266 unwind label %.loopexit.split-lp.loopexit.split.us

266:                                              ; preds = %.preheader.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 %160, label %.preheader.us, !llvm.loop !27

._crit_edge.us:                                   ; preds = %.lr.ph.us
  br i1 %235, label %.split173.us, label %237

.split.us:                                        ; preds = %148
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %283

.loopexit.split-lp.loopexit.split-lp.split.us:    ; preds = %190, %189, %188, %187, %186, %185, %184, %183, %.critedge2.us, %174, %173, %172, %171, %170, %169, %168, %165, %163, %162, %160
  %lpad.loopexit.split-lp139.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split167.us:                                     ; preds = %211, %206, %201, %194, %192
  %268 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split170.us:                                     ; preds = %208
  %269 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %22) #11
  br label %.loopexit.split-lp

.loopexit137.split.us:                            ; preds = %257, %256, %255, %254, %253, %252, %251, %248, %246, %245, %244, %243, %241, %238
  %lpad.loopexit.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

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

.lr.ph163.split:                                  ; preds = %.lr.ph163.split.preheader, %.critedge
  %270 = phi i32 [ %142, %.lr.ph163.split.preheader ], [ %285, %.critedge ]
  %271 = phi ptr [ %.pre211, %.lr.ph163.split.preheader ], [ %286, %.critedge ]
  %indvars.iv207 = phi i64 [ 0, %.lr.ph163.split.preheader ], [ %indvars.iv.next208, %.critedge ]
  %272 = getelementptr inbounds i32, ptr %271, i64 %indvars.iv207
  %273 = load i32, ptr %272, align 4, !tbaa !14
  %274 = icmp eq i32 %273, 0
  br i1 %274, label %275, label %.critedge

275:                                              ; preds = %.lr.ph163.split
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %21) #11
  %276 = load ptr, ptr @secp, align 8, !tbaa !13
  %277 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @OriginalPointsBSGS, i64 noundef %indvars.iv207) #11
  invoke void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %21, ptr noundef nonnull align 8 dereferenceable(983240) %276, ptr noundef nonnull align 8 dereferenceable(120) %277, ptr noundef nonnull align 8 dereferenceable(120) %6)
          to label %.critedge.loopexit unwind label %.split

.critedge.loopexit:                               ; preds = %275
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %8, ptr noundef nonnull align 8 dereferenceable(120) %21, i64 120, i1 false), !tbaa.struct !15
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %21) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %21) #11
  %.pre210 = load ptr, ptr @bsgs_found, align 8, !tbaa !13
  %.pre212 = load i32, ptr @bsgs_point_number, align 4, !tbaa !14
  br label %.critedge

278:                                              ; preds = %131
  %279 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %19) #11
  br label %.loopexit.split-lp

280:                                              ; preds = %139
  %281 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %20) #11
  br label %.loopexit.split-lp

.split:                                           ; preds = %275
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %283

283:                                              ; preds = %.split.us, %.split
  %.us-phi = phi { ptr, i32 } [ %282, %.split ], [ %267, %.split.us ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %21) #11
  br label %.loopexit.split-lp

.split173.us:                                     ; preds = %._crit_edge.us, %225
  %284 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.241)
  call void @exit(i32 noundef 1) #14
  unreachable

.critedge:                                        ; preds = %.critedge.loopexit, %.lr.ph163.split
  %285 = phi i32 [ %.pre212, %.critedge.loopexit ], [ %270, %.lr.ph163.split ]
  %286 = phi ptr [ %.pre210, %.critedge.loopexit ], [ %271, %.lr.ph163.split ]
  %indvars.iv.next208 = add nuw nsw i64 %indvars.iv207, 1
  %287 = zext i32 %285 to i64
  %288 = icmp ult i64 %indvars.iv.next208, %287
  br i1 %288, label %.lr.ph163.split, label %._crit_edge164, !llvm.loop !17

._crit_edge164:                                   ; preds = %.critedge.us, %.critedge, %141
  %289 = load ptr, ptr @steps, align 8, !tbaa !13
  %290 = getelementptr inbounds i64, ptr %289, i64 %92
  %291 = load i64, ptr %290, align 8, !tbaa !11
  %292 = add i64 %291, 2
  store i64 %292, ptr %290, align 8, !tbaa !11
  br label %95, !llvm.loop !28

.loopexit.split-lp:                               ; preds = %.loopexit137.split.us, %.loopexit.split-lp.loopexit.split-lp.split.us, %.loopexit.split-lp.loopexit.split.us, %.loopexit142, %.loopexit.split-lp143, %.split170.us, %.split167.us, %283, %280, %278
  %.pn118.pn = phi { ptr, i32 } [ %.us-phi, %283 ], [ %281, %280 ], [ %279, %278 ], [ %268, %.split167.us ], [ %269, %.split170.us ], [ %lpad.loopexit144, %.loopexit142 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp143 ], [ %lpad.loopexit.us, %.loopexit137.split.us ], [ %lpad.loopexit138.us, %.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit.split-lp139.us, %.loopexit.split-lp.loopexit.split-lp.split.us ]
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %18) #11
  br label %293

293:                                              ; preds = %.loopexit.split-lp, %85
  %.pn118.pn.pn = phi { ptr, i32 } [ %.pn118.pn, %.loopexit.split-lp ], [ %86, %85 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %18) #11
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %17) #11
  br label %294

294:                                              ; preds = %293, %83
  %.pn118.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn, %293 ], [ %84, %83 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %17) #11
  br label %295

295:                                              ; preds = %294, %81
  %.pn118.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn, %294 ], [ %82, %81 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %16) #11
  br label %296

296:                                              ; preds = %295, %79
  %.pn118.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn, %295 ], [ %80, %79 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #11
  br label %297

297:                                              ; preds = %296, %77
  %.pn118.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn.pn, %296 ], [ %78, %77 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %14) #11
  br label %298

298:                                              ; preds = %297, %75
  %.pn118.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn.pn.pn, %297 ], [ %76, %75 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %13) #11
  br label %299

299:                                              ; preds = %298, %73
  %.pn118.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn.pn.pn.pn, %298 ], [ %74, %73 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #11
  br label %300

300:                                              ; preds = %299, %71
  %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn.pn.pn.pn.pn, %299 ], [ %72, %71 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #11
  br label %306

301:                                              ; preds = %301, %110
  %302 = phi ptr [ %33, %110 ], [ %303, %301 ]
  %303 = getelementptr inbounds i8, ptr %302, i64 -120
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %303) #11
  %304 = icmp eq ptr %303, %10
  br i1 %304, label %305, label %301

305:                                              ; preds = %301
  call void @llvm.lifetime.end.p0(i64 122880, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 20520, ptr nonnull %9) #11
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %8) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %8) #11
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %7) #11
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %6) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %6) #11
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #11
  ret ptr null

306:                                              ; preds = %306, %300
  %307 = phi ptr [ %33, %300 ], [ %308, %306 ]
  %308 = getelementptr inbounds i8, ptr %307, i64 -120
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %308) #11
  %309 = icmp eq ptr %308, %10
  br i1 %309, label %.loopexit, label %306

.loopexit:                                        ; preds = %.preheader146, %306, %65
  %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %66, %65 ], [ %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn, %306 ], [ %66, %.preheader146 ]
  call void @llvm.lifetime.end.p0(i64 122880, ptr nonnull %10) #11
  br label %310

310:                                              ; preds = %.loopexit, %63
  %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %.loopexit ], [ %64, %63 ]
  call void @llvm.lifetime.end.p0(i64 20520, ptr nonnull %9) #11
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %8) #11
  br label %311

311:                                              ; preds = %310, %61
  %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %310 ], [ %62, %61 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %8) #11
  br label %312

312:                                              ; preds = %311, %59, %57
  %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %311 ], [ %60, %59 ], [ %58, %57 ]
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #11
  br label %313

313:                                              ; preds = %312, %55
  %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %312 ], [ %56, %55 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %7) #11
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %6) #11
  br label %314

314:                                              ; preds = %313, %53
  %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %313 ], [ %54, %53 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %6) #11
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %5) #11
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #11
  resume { ptr, i32 } %.pn118.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare void @_ZN3Int3AddEPS_(ptr noundef nonnull align 8 dereferenceable(40), 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(40), 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(40), ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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

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

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

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

declare void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(40), 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 #10

declare noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(983240), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(120)) 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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { 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 #11 = { nounwind }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { builtin nounwind }
attributes #14 = { 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 = !{i64 0, i64 40, !16, i64 40, i64 40, !16, i64 80, i64 40, !16}
!16 = !{!8, !8, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = !{!21, !21, i64 0}
!21 = !{!"bool", !8, i64 0}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = distinct !{!28, !18}


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