; LLVM IR from totte174/minesolve :: src (probability)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.PermutationSet = type { ptr, i32, i32, i8, [192 x i32], [192 x i32], i32 }
%struct.Edge = type { [192 x i32], i32, [192 x i32], [192 x i32], i32, i32, [192 x i32], i32 }
%struct.ProbabilityMap = type { double, [192 x double], [192 x double], double }
%struct.Mask = type { [3 x i64] }
%struct.Board = type { i32, i32, i32, i32, [1024 x i32], [1024 x i8], [1024 x i8], i8 }

@get_pmap.permutation_set = external hidden global %struct.PermutationSet, align 8
@get_pmap.split_mine_c_min = external hidden global [192 x i32], align 16
@get_pmap.split_mine_c_max = external hidden global [192 x i32], align 16

; Function Attrs: nounwind uwtable
declare dso_local double @choose(double noundef, double noundef) #0

; Function Attrs: nounwind uwtable
define dso_local i32 @get_pmap(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca [18 x [192 x double]], align 16
  %26 = alloca [18 x double], align 16
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca [18 x [192 x double]], align 16
  %30 = alloca [18 x double], align 16
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca [18 x [192 x double]], align 16
  %36 = alloca [18 x double], align 16
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca [18 x double], align 16
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store i32 0, ptr %8, align 4, !tbaa !9
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = call i32 @get_permutation_set(ptr noundef %57, ptr noundef %58, ptr noundef @get_pmap.permutation_set, ptr noundef %59)
  store i32 %60, ptr %8, align 4, !tbaa !9
  %61 = load i32, ptr %8, align 4, !tbaa !9
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %63, label %65

63:                                               ; preds = %3
  call void @permutation_set_deinit(ptr noundef @get_pmap.permutation_set)
  %64 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %64, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %684

65:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.Edge, ptr %66, i32 0, i32 5
  %68 = load i32, ptr %67, align 4, !tbaa !11
  store i32 %68, ptr %10, align 4, !tbaa !9
  %69 = load i32, ptr %10, align 4, !tbaa !9
  %70 = icmp slt i32 %69, 0
  br i1 %70, label %71, label %73

71:                                               ; preds = %65
  call void @permutation_set_deinit(ptr noundef @get_pmap.permutation_set)
  store i32 3, ptr %8, align 4, !tbaa !9
  %72 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %72, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %683

73:                                               ; preds = %65
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.ProbabilityMap, ptr %74, i32 0, i32 0
  store double 0.000000e+00, ptr %75, align 8, !tbaa !13
  %76 = load ptr, ptr %7, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.ProbabilityMap, ptr %76, i32 0, i32 3
  store double 0.000000e+00, ptr %77, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %78

78:                                               ; preds = %91, %73
  %79 = load i32, ptr %11, align 4, !tbaa !9
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.Edge, ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 4, !tbaa !17
  %83 = icmp slt i32 %79, %82
  br i1 %83, label %85, label %84

84:                                               ; preds = %78
  store i32 2, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  br label %94

85:                                               ; preds = %78
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.ProbabilityMap, ptr %86, i32 0, i32 1
  %88 = load i32, ptr %11, align 4, !tbaa !9
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds [192 x double], ptr %87, i64 0, i64 %89
  store double 0.000000e+00, ptr %90, align 8, !tbaa !18
  br label %91

91:                                               ; preds = %85
  %92 = load i32, ptr %11, align 4, !tbaa !9
  %93 = add nsw i32 %92, 1
  store i32 %93, ptr %11, align 4, !tbaa !9
  br label %78, !llvm.loop !19

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

95:                                               ; preds = %112, %94
  %96 = load i32, ptr %13, align 4, !tbaa !9
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.Edge, ptr %97, i32 0, i32 7
  %99 = load i32, ptr %98, align 4, !tbaa !21
  %100 = icmp slt i32 %96, %99
  br i1 %100, label %102, label %101

101:                                              ; preds = %95
  store i32 5, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %115

102:                                              ; preds = %95
  %103 = load ptr, ptr %7, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.ProbabilityMap, ptr %103, i32 0, i32 2
  %105 = load i32, ptr %13, align 4, !tbaa !9
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds [192 x double], ptr %104, i64 0, i64 %106
  %108 = load double, ptr %107, align 8, !tbaa !18
  %109 = fptosi double %108 to i32
  %110 = load i32, ptr %12, align 4, !tbaa !9
  %111 = add nsw i32 %110, %109
  store i32 %111, ptr %12, align 4, !tbaa !9
  br label %112

112:                                              ; preds = %102
  %113 = load i32, ptr %13, align 4, !tbaa !9
  %114 = add nsw i32 %113, 1
  store i32 %114, ptr %13, align 4, !tbaa !9
  br label %95, !llvm.loop !22

115:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  %116 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %116, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %117 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %117, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %118

118:                                              ; preds = %215, %115
  %119 = load i32, ptr %16, align 4, !tbaa !9
  %120 = load i32, ptr getelementptr inbounds (%struct.PermutationSet, ptr @get_pmap.permutation_set, i32 0, i32 6), align 4, !tbaa !23
  %121 = icmp slt i32 %119, %120
  br i1 %121, label %123, label %122

122:                                              ; preds = %118
  store i32 8, ptr %9, align 4
  br label %218

123:                                              ; preds = %118
  %124 = load i32, ptr %16, align 4, !tbaa !9
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %125
  store i32 256, ptr %126, align 4, !tbaa !9
  %127 = load i32, ptr %16, align 4, !tbaa !9
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %128
  store i32 0, ptr %129, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %130

130:                                              ; preds = %187, %123
  %131 = load i32, ptr %17, align 4, !tbaa !9
  %132 = load i32, ptr %16, align 4, !tbaa !9
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds [192 x i32], ptr getelementptr inbounds (%struct.PermutationSet, ptr @get_pmap.permutation_set, i32 0, i32 4), i64 0, i64 %133
  %135 = load i32, ptr %134, align 4, !tbaa !9
  %136 = icmp slt i32 %131, %135
  br i1 %136, label %138, label %137

137:                                              ; preds = %130
  store i32 11, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %190

138:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %139 = load ptr, ptr @get_pmap.permutation_set, align 8, !tbaa !26
  %140 = load i32, ptr %16, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds [192 x i32], ptr getelementptr inbounds (%struct.PermutationSet, ptr @get_pmap.permutation_set, i32 0, i32 5), i64 0, i64 %141
  %143 = load i32, ptr %142, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds %struct.Mask, ptr %139, i64 %144
  %146 = load i32, ptr %17, align 4, !tbaa !9
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds %struct.Mask, ptr %145, i64 %147
  store ptr %148, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %149 = load i32, ptr %16, align 4, !tbaa !9
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %150
  %152 = load i32, ptr %151, align 4, !tbaa !9
  store i32 %152, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %153 = load ptr, ptr %18, align 8, !tbaa !5
  %154 = call i32 @mine_c(ptr noundef %153)
  store i32 %154, ptr %20, align 4, !tbaa !9
  %155 = load i32, ptr %19, align 4, !tbaa !9
  %156 = load i32, ptr %20, align 4, !tbaa !9
  %157 = icmp slt i32 %155, %156
  br i1 %157, label %158, label %160

158:                                              ; preds = %138
  %159 = load i32, ptr %19, align 4, !tbaa !9
  br label %162

160:                                              ; preds = %138
  %161 = load i32, ptr %20, align 4, !tbaa !9
  br label %162

162:                                              ; preds = %160, %158
  %163 = phi i32 [ %159, %158 ], [ %161, %160 ]
  store i32 %163, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  %164 = load i32, ptr %21, align 4, !tbaa !9
  %165 = load i32, ptr %16, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %166
  store i32 %164, ptr %167, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %168 = load i32, ptr %16, align 4, !tbaa !9
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %169
  %171 = load i32, ptr %170, align 4, !tbaa !9
  store i32 %171, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %172 = load ptr, ptr %18, align 8, !tbaa !5
  %173 = call i32 @mine_c(ptr noundef %172)
  store i32 %173, ptr %23, align 4, !tbaa !9
  %174 = load i32, ptr %22, align 4, !tbaa !9
  %175 = load i32, ptr %23, align 4, !tbaa !9
  %176 = icmp sgt i32 %174, %175
  br i1 %176, label %177, label %179

177:                                              ; preds = %162
  %178 = load i32, ptr %22, align 4, !tbaa !9
  br label %181

179:                                              ; preds = %162
  %180 = load i32, ptr %23, align 4, !tbaa !9
  br label %181

181:                                              ; preds = %179, %177
  %182 = phi i32 [ %178, %177 ], [ %180, %179 ]
  store i32 %182, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  %183 = load i32, ptr %24, align 4, !tbaa !9
  %184 = load i32, ptr %16, align 4, !tbaa !9
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %185
  store i32 %183, ptr %186, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br label %187

187:                                              ; preds = %181
  %188 = load i32, ptr %17, align 4, !tbaa !9
  %189 = add nsw i32 %188, 1
  store i32 %189, ptr %17, align 4, !tbaa !9
  br label %130, !llvm.loop !27

190:                                              ; preds = %137
  %191 = load i32, ptr %16, align 4, !tbaa !9
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %192
  %194 = load i32, ptr %193, align 4, !tbaa !9
  %195 = load i32, ptr %16, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %196
  %198 = load i32, ptr %197, align 4, !tbaa !9
  %199 = icmp slt i32 %194, %198
  br i1 %199, label %200, label %202

200:                                              ; preds = %190
  call void @permutation_set_deinit(ptr noundef @get_pmap.permutation_set)
  store i32 3, ptr %8, align 4, !tbaa !9
  %201 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %201, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %218

202:                                              ; preds = %190
  %203 = load i32, ptr %16, align 4, !tbaa !9
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %204
  %206 = load i32, ptr %205, align 4, !tbaa !9
  %207 = load i32, ptr %14, align 4, !tbaa !9
  %208 = add nsw i32 %207, %206
  store i32 %208, ptr %14, align 4, !tbaa !9
  %209 = load i32, ptr %16, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %210
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = load i32, ptr %15, align 4, !tbaa !9
  %214 = add nsw i32 %213, %212
  store i32 %214, ptr %15, align 4, !tbaa !9
  br label %215

215:                                              ; preds = %202
  %216 = load i32, ptr %16, align 4, !tbaa !9
  %217 = add nsw i32 %216, 1
  store i32 %217, ptr %16, align 4, !tbaa !9
  br label %118, !llvm.loop !28

218:                                              ; preds = %200, %122
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  %219 = load i32, ptr %9, align 4
  switch i32 %219, label %682 [
    i32 8, label %220
  ]

220:                                              ; preds = %218
  %221 = load i32, ptr %15, align 4, !tbaa !9
  %222 = load i32, ptr %14, align 4, !tbaa !9
  %223 = sub nsw i32 %221, %222
  %224 = icmp sge i32 %223, 18
  br i1 %224, label %225, label %227

225:                                              ; preds = %220
  call void @permutation_set_deinit(ptr noundef @get_pmap.permutation_set)
  store i32 2, ptr %8, align 4, !tbaa !9
  %226 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %226, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %682

227:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 27648, ptr %25) #5
  call void @llvm.memset.p0.i64(ptr align 16 %25, i8 0, i64 27648, i1 false)
  call void @llvm.lifetime.start.p0(i64 144, ptr %26) #5
  call void @llvm.memset.p0.i64(ptr align 16 %26, i8 0, i64 144, i1 false)
  %228 = getelementptr inbounds [18 x double], ptr %26, i64 0, i64 0
  store double 1.000000e+00, ptr %228, align 16, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  store i32 0, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %229

229:                                              ; preds = %466, %227
  %230 = load i32, ptr %28, align 4, !tbaa !9
  %231 = load i32, ptr getelementptr inbounds (%struct.PermutationSet, ptr @get_pmap.permutation_set, i32 0, i32 6), align 4, !tbaa !23
  %232 = icmp slt i32 %230, %231
  br i1 %232, label %234, label %233

233:                                              ; preds = %229
  store i32 14, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  br label %469

234:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 27648, ptr %29) #5
  call void @llvm.memset.p0.i64(ptr align 16 %29, i8 0, i64 27648, i1 false)
  call void @llvm.lifetime.start.p0(i64 144, ptr %30) #5
  call void @llvm.memset.p0.i64(ptr align 16 %30, i8 0, i64 144, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %235

235:                                              ; preds = %311, %234
  %236 = load i32, ptr %31, align 4, !tbaa !9
  %237 = load i32, ptr %28, align 4, !tbaa !9
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds [192 x i32], ptr getelementptr inbounds (%struct.PermutationSet, ptr @get_pmap.permutation_set, i32 0, i32 4), i64 0, i64 %238
  %240 = load i32, ptr %239, align 4, !tbaa !9
  %241 = icmp slt i32 %236, %240
  br i1 %241, label %243, label %242

242:                                              ; preds = %235
  store i32 17, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %314

243:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %244 = load ptr, ptr @get_pmap.permutation_set, align 8, !tbaa !26
  %245 = load i32, ptr %28, align 4, !tbaa !9
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds [192 x i32], ptr getelementptr inbounds (%struct.PermutationSet, ptr @get_pmap.permutation_set, i32 0, i32 5), i64 0, i64 %246
  %248 = load i32, ptr %247, align 4, !tbaa !9
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds %struct.Mask, ptr %244, i64 %249
  %251 = load i32, ptr %31, align 4, !tbaa !9
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds %struct.Mask, ptr %250, i64 %252
  store ptr %253, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %254 = load ptr, ptr %32, align 8, !tbaa !5
  %255 = call i32 @mine_c(ptr noundef %254)
  %256 = load i32, ptr %28, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = sub nsw i32 %255, %259
  store i32 %260, ptr %33, align 4, !tbaa !9
  %261 = load i32, ptr %33, align 4, !tbaa !9
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds [18 x double], ptr %30, i64 0, i64 %262
  %264 = load double, ptr %263, align 8, !tbaa !18
  %265 = fadd double %264, 1.000000e+00
  store double %265, ptr %263, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %266

266:                                              ; preds = %307, %243
  %267 = load i32, ptr %34, align 4, !tbaa !9
  %268 = load ptr, ptr %6, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.Edge, ptr %268, i32 0, i32 2
  %270 = load i32, ptr %28, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds [192 x i32], ptr %269, i64 0, i64 %271
  %273 = load i32, ptr %272, align 4, !tbaa !9
  %274 = icmp slt i32 %267, %273
  br i1 %274, label %276, label %275

275:                                              ; preds = %266
  store i32 20, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  br label %310

276:                                              ; preds = %266
  %277 = load ptr, ptr %32, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.Mask, ptr %277, i32 0, i32 0
  %279 = load i32, ptr %34, align 4, !tbaa !9
  %280 = sext i32 %279 to i64
  %281 = udiv i64 %280, 64
  %282 = getelementptr inbounds [3 x i64], ptr %278, i64 0, i64 %281
  %283 = load i64, ptr %282, align 8, !tbaa !29
  %284 = load i32, ptr %34, align 4, !tbaa !9
  %285 = sext i32 %284 to i64
  %286 = urem i64 %285, 64
  %287 = lshr i64 %283, %286
  %288 = and i64 %287, 1
  %289 = icmp ne i64 %288, 0
  br i1 %289, label %290, label %306

290:                                              ; preds = %276
  %291 = load i32, ptr %33, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds [18 x [192 x double]], ptr %29, i64 0, i64 %292
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.Edge, ptr %294, i32 0, i32 3
  %296 = load i32, ptr %28, align 4, !tbaa !9
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds [192 x i32], ptr %295, i64 0, i64 %297
  %299 = load i32, ptr %298, align 4, !tbaa !9
  %300 = load i32, ptr %34, align 4, !tbaa !9
  %301 = add nsw i32 %299, %300
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds [192 x double], ptr %293, i64 0, i64 %302
  %304 = load double, ptr %303, align 8, !tbaa !18
  %305 = fadd double %304, 1.000000e+00
  store double %305, ptr %303, align 8, !tbaa !18
  br label %306

306:                                              ; preds = %290, %276
  br label %307

307:                                              ; preds = %306
  %308 = load i32, ptr %34, align 4, !tbaa !9
  %309 = add nsw i32 %308, 1
  store i32 %309, ptr %34, align 4, !tbaa !9
  br label %266, !llvm.loop !31

310:                                              ; preds = %275
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %311

311:                                              ; preds = %310
  %312 = load i32, ptr %31, align 4, !tbaa !9
  %313 = add nsw i32 %312, 1
  store i32 %313, ptr %31, align 4, !tbaa !9
  br label %235, !llvm.loop !32

314:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 27648, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 144, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %362, %314
  %316 = load i32, ptr %37, align 4, !tbaa !9
  %317 = load i32, ptr %27, align 4, !tbaa !9
  %318 = icmp sle i32 %316, %317
  br i1 %318, label %320, label %319

319:                                              ; preds = %315
  store i32 23, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  br label %365

320:                                              ; preds = %315
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %321

321:                                              ; preds = %348, %320
  %322 = load i32, ptr %38, align 4, !tbaa !9
  %323 = load ptr, ptr %6, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.Edge, ptr %323, i32 0, i32 1
  %325 = load i32, ptr %324, align 4, !tbaa !17
  %326 = icmp slt i32 %322, %325
  br i1 %326, label %328, label %327

327:                                              ; preds = %321
  store i32 26, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %351

328:                                              ; preds = %321
  %329 = load i32, ptr %37, align 4, !tbaa !9
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds [18 x [192 x double]], ptr %25, i64 0, i64 %330
  %332 = load i32, ptr %38, align 4, !tbaa !9
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds [192 x double], ptr %331, i64 0, i64 %333
  %335 = load double, ptr %334, align 8, !tbaa !18
  %336 = load i32, ptr %37, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds [18 x [192 x double]], ptr %35, i64 0, i64 %337
  %339 = load i32, ptr %38, align 4, !tbaa !9
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds [192 x double], ptr %338, i64 0, i64 %340
  store double %335, ptr %341, align 8, !tbaa !18
  %342 = load i32, ptr %37, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds [18 x [192 x double]], ptr %25, i64 0, i64 %343
  %345 = load i32, ptr %38, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds [192 x double], ptr %344, i64 0, i64 %346
  store double 0.000000e+00, ptr %347, align 8, !tbaa !18
  br label %348

348:                                              ; preds = %328
  %349 = load i32, ptr %38, align 4, !tbaa !9
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %38, align 4, !tbaa !9
  br label %321, !llvm.loop !33

351:                                              ; preds = %327
  %352 = load i32, ptr %37, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds [18 x double], ptr %26, i64 0, i64 %353
  %355 = load double, ptr %354, align 8, !tbaa !18
  %356 = load i32, ptr %37, align 4, !tbaa !9
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds [18 x double], ptr %36, i64 0, i64 %357
  store double %355, ptr %358, align 8, !tbaa !18
  %359 = load i32, ptr %37, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds [18 x double], ptr %26, i64 0, i64 %360
  store double 0.000000e+00, ptr %361, align 8, !tbaa !18
  br label %362

362:                                              ; preds = %351
  %363 = load i32, ptr %37, align 4, !tbaa !9
  %364 = add nsw i32 %363, 1
  store i32 %364, ptr %37, align 4, !tbaa !9
  br label %315, !llvm.loop !34

365:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %366

366:                                              ; preds = %451, %365
  %367 = load i32, ptr %39, align 4, !tbaa !9
  %368 = load i32, ptr %27, align 4, !tbaa !9
  %369 = icmp sle i32 %367, %368
  br i1 %369, label %371, label %370

370:                                              ; preds = %366
  store i32 29, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  br label %454

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

372:                                              ; preds = %447, %371
  %373 = load i32, ptr %40, align 4, !tbaa !9
  %374 = load i32, ptr %28, align 4, !tbaa !9
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %375
  %377 = load i32, ptr %376, align 4, !tbaa !9
  %378 = load i32, ptr %28, align 4, !tbaa !9
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %379
  %381 = load i32, ptr %380, align 4, !tbaa !9
  %382 = sub nsw i32 %377, %381
  %383 = icmp sle i32 %373, %382
  br i1 %383, label %385, label %384

384:                                              ; preds = %372
  store i32 32, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  br label %450

385:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %386

386:                                              ; preds = %428, %385
  %387 = load i32, ptr %41, align 4, !tbaa !9
  %388 = load ptr, ptr %6, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.Edge, ptr %388, i32 0, i32 1
  %390 = load i32, ptr %389, align 4, !tbaa !17
  %391 = icmp slt i32 %387, %390
  br i1 %391, label %393, label %392

392:                                              ; preds = %386
  store i32 35, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  br label %431

393:                                              ; preds = %386
  %394 = load i32, ptr %39, align 4, !tbaa !9
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds [18 x [192 x double]], ptr %35, i64 0, i64 %395
  %397 = load i32, ptr %41, align 4, !tbaa !9
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds [192 x double], ptr %396, i64 0, i64 %398
  %400 = load double, ptr %399, align 8, !tbaa !18
  %401 = load i32, ptr %40, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds [18 x double], ptr %30, i64 0, i64 %402
  %404 = load double, ptr %403, align 8, !tbaa !18
  %405 = load i32, ptr %40, align 4, !tbaa !9
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds [18 x [192 x double]], ptr %29, i64 0, i64 %406
  %408 = load i32, ptr %41, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds [192 x double], ptr %407, i64 0, i64 %409
  %411 = load double, ptr %410, align 8, !tbaa !18
  %412 = load i32, ptr %39, align 4, !tbaa !9
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds [18 x double], ptr %36, i64 0, i64 %413
  %415 = load double, ptr %414, align 8, !tbaa !18
  %416 = fmul double %411, %415
  %417 = call double @llvm.fmuladd.f64(double %400, double %404, double %416)
  %418 = load i32, ptr %39, align 4, !tbaa !9
  %419 = load i32, ptr %40, align 4, !tbaa !9
  %420 = add nsw i32 %418, %419
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds [18 x [192 x double]], ptr %25, i64 0, i64 %421
  %423 = load i32, ptr %41, align 4, !tbaa !9
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds [192 x double], ptr %422, i64 0, i64 %424
  %426 = load double, ptr %425, align 8, !tbaa !18
  %427 = fadd double %426, %417
  store double %427, ptr %425, align 8, !tbaa !18
  br label %428

428:                                              ; preds = %393
  %429 = load i32, ptr %41, align 4, !tbaa !9
  %430 = add nsw i32 %429, 1
  store i32 %430, ptr %41, align 4, !tbaa !9
  br label %386, !llvm.loop !35

431:                                              ; preds = %392
  %432 = load i32, ptr %39, align 4, !tbaa !9
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds [18 x double], ptr %36, i64 0, i64 %433
  %435 = load double, ptr %434, align 8, !tbaa !18
  %436 = load i32, ptr %40, align 4, !tbaa !9
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds [18 x double], ptr %30, i64 0, i64 %437
  %439 = load double, ptr %438, align 8, !tbaa !18
  %440 = load i32, ptr %39, align 4, !tbaa !9
  %441 = load i32, ptr %40, align 4, !tbaa !9
  %442 = add nsw i32 %440, %441
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds [18 x double], ptr %26, i64 0, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !18
  %446 = call double @llvm.fmuladd.f64(double %435, double %439, double %445)
  store double %446, ptr %444, align 8, !tbaa !18
  br label %447

447:                                              ; preds = %431
  %448 = load i32, ptr %40, align 4, !tbaa !9
  %449 = add nsw i32 %448, 1
  store i32 %449, ptr %40, align 4, !tbaa !9
  br label %372, !llvm.loop !36

450:                                              ; preds = %384
  br label %451

451:                                              ; preds = %450
  %452 = load i32, ptr %39, align 4, !tbaa !9
  %453 = add nsw i32 %452, 1
  store i32 %453, ptr %39, align 4, !tbaa !9
  br label %366, !llvm.loop !37

454:                                              ; preds = %370
  %455 = load i32, ptr %28, align 4, !tbaa !9
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %456
  %458 = load i32, ptr %457, align 4, !tbaa !9
  %459 = load i32, ptr %28, align 4, !tbaa !9
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %460
  %462 = load i32, ptr %461, align 4, !tbaa !9
  %463 = sub nsw i32 %458, %462
  %464 = load i32, ptr %27, align 4, !tbaa !9
  %465 = add nsw i32 %464, %463
  store i32 %465, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 144, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 27648, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 144, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 27648, ptr %29) #5
  br label %466

466:                                              ; preds = %454
  %467 = load i32, ptr %28, align 4, !tbaa !9
  %468 = add nsw i32 %467, 1
  store i32 %468, ptr %28, align 4, !tbaa !9
  br label %229, !llvm.loop !38

469:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  %470 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %470, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %471 = load ptr, ptr %5, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.Board, ptr %471, i32 0, i32 2
  %473 = load i32, ptr %472, align 4, !tbaa !39
  %474 = load i32, ptr %10, align 4, !tbaa !9
  %475 = sub nsw i32 %473, %474
  store i32 %475, ptr %44, align 4, !tbaa !9
  %476 = load i32, ptr %43, align 4, !tbaa !9
  %477 = load i32, ptr %44, align 4, !tbaa !9
  %478 = icmp sgt i32 %476, %477
  br i1 %478, label %479, label %481

479:                                              ; preds = %469
  %480 = load i32, ptr %43, align 4, !tbaa !9
  br label %483

481:                                              ; preds = %469
  %482 = load i32, ptr %44, align 4, !tbaa !9
  br label %483

483:                                              ; preds = %481, %479
  %484 = phi i32 [ %480, %479 ], [ %482, %481 ]
  store i32 %484, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  %485 = load i32, ptr %45, align 4, !tbaa !9
  store i32 %485, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  %486 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %486, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %487 = load ptr, ptr %5, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.Board, ptr %487, i32 0, i32 2
  %489 = load i32, ptr %488, align 4, !tbaa !39
  store i32 %489, ptr %48, align 4, !tbaa !9
  %490 = load i32, ptr %47, align 4, !tbaa !9
  %491 = load i32, ptr %48, align 4, !tbaa !9
  %492 = icmp slt i32 %490, %491
  br i1 %492, label %493, label %495

493:                                              ; preds = %483
  %494 = load i32, ptr %47, align 4, !tbaa !9
  br label %497

495:                                              ; preds = %483
  %496 = load i32, ptr %48, align 4, !tbaa !9
  br label %497

497:                                              ; preds = %495, %493
  %498 = phi i32 [ %494, %493 ], [ %496, %495 ]
  store i32 %498, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  %499 = load i32, ptr %49, align 4, !tbaa !9
  store i32 %499, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 144, ptr %50) #5
  %500 = load i32, ptr %42, align 4, !tbaa !9
  %501 = load i32, ptr %14, align 4, !tbaa !9
  %502 = sub nsw i32 %500, %501
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds [18 x double], ptr %50, i64 0, i64 %503
  store double 1.000000e+00, ptr %504, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  %505 = load i32, ptr %42, align 4, !tbaa !9
  %506 = load i32, ptr %14, align 4, !tbaa !9
  %507 = sub nsw i32 %505, %506
  %508 = add nsw i32 %507, 1
  store i32 %508, ptr %51, align 4, !tbaa !9
  br label %509

509:                                              ; preds = %541, %497
  %510 = load i32, ptr %51, align 4, !tbaa !9
  %511 = load i32, ptr %46, align 4, !tbaa !9
  %512 = load i32, ptr %14, align 4, !tbaa !9
  %513 = sub nsw i32 %511, %512
  %514 = icmp sle i32 %510, %513
  br i1 %514, label %516, label %515

515:                                              ; preds = %509
  store i32 38, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  br label %544

516:                                              ; preds = %509
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  %517 = load ptr, ptr %5, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.Board, ptr %517, i32 0, i32 2
  %519 = load i32, ptr %518, align 4, !tbaa !39
  %520 = load i32, ptr %14, align 4, !tbaa !9
  %521 = sub nsw i32 %519, %520
  %522 = load i32, ptr %51, align 4, !tbaa !9
  %523 = sub nsw i32 %521, %522
  store i32 %523, ptr %52, align 4, !tbaa !9
  %524 = load i32, ptr %51, align 4, !tbaa !9
  %525 = sub nsw i32 %524, 1
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds [18 x double], ptr %50, i64 0, i64 %526
  %528 = load double, ptr %527, align 8, !tbaa !18
  %529 = load i32, ptr %52, align 4, !tbaa !9
  %530 = sitofp i32 %529 to double
  %531 = fadd double %530, 1.000000e+00
  %532 = fmul double %528, %531
  %533 = load i32, ptr %10, align 4, !tbaa !9
  %534 = load i32, ptr %52, align 4, !tbaa !9
  %535 = sub nsw i32 %533, %534
  %536 = sitofp i32 %535 to double
  %537 = fdiv double %532, %536
  %538 = load i32, ptr %51, align 4, !tbaa !9
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds [18 x double], ptr %50, i64 0, i64 %539
  store double %537, ptr %540, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  br label %541

541:                                              ; preds = %516
  %542 = load i32, ptr %51, align 4, !tbaa !9
  %543 = add nsw i32 %542, 1
  store i32 %543, ptr %51, align 4, !tbaa !9
  br label %509, !llvm.loop !41

544:                                              ; preds = %515
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  %545 = load i32, ptr %42, align 4, !tbaa !9
  %546 = load i32, ptr %14, align 4, !tbaa !9
  %547 = sub nsw i32 %545, %546
  store i32 %547, ptr %53, align 4, !tbaa !9
  br label %548

548:                                              ; preds = %620, %544
  %549 = load i32, ptr %53, align 4, !tbaa !9
  %550 = load i32, ptr %46, align 4, !tbaa !9
  %551 = load i32, ptr %14, align 4, !tbaa !9
  %552 = sub nsw i32 %550, %551
  %553 = icmp sle i32 %549, %552
  br i1 %553, label %555, label %554

554:                                              ; preds = %548
  store i32 41, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  br label %623

555:                                              ; preds = %548
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #5
  %556 = load ptr, ptr %5, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.Board, ptr %556, i32 0, i32 2
  %558 = load i32, ptr %557, align 4, !tbaa !39
  %559 = load i32, ptr %14, align 4, !tbaa !9
  %560 = sub nsw i32 %558, %559
  %561 = load i32, ptr %53, align 4, !tbaa !9
  %562 = sub nsw i32 %560, %561
  store i32 %562, ptr %54, align 4, !tbaa !9
  %563 = load i32, ptr %53, align 4, !tbaa !9
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds [18 x double], ptr %26, i64 0, i64 %564
  %566 = load double, ptr %565, align 8, !tbaa !18
  %567 = load i32, ptr %53, align 4, !tbaa !9
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds [18 x double], ptr %50, i64 0, i64 %568
  %570 = load double, ptr %569, align 8, !tbaa !18
  %571 = load ptr, ptr %7, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.ProbabilityMap, ptr %571, i32 0, i32 0
  %573 = load double, ptr %572, align 8, !tbaa !13
  %574 = call double @llvm.fmuladd.f64(double %566, double %570, double %573)
  store double %574, ptr %572, align 8, !tbaa !13
  %575 = load i32, ptr %53, align 4, !tbaa !9
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds [18 x double], ptr %26, i64 0, i64 %576
  %578 = load double, ptr %577, align 8, !tbaa !18
  %579 = load i32, ptr %53, align 4, !tbaa !9
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds [18 x double], ptr %50, i64 0, i64 %580
  %582 = load double, ptr %581, align 8, !tbaa !18
  %583 = fmul double %578, %582
  %584 = load i32, ptr %54, align 4, !tbaa !9
  %585 = sitofp i32 %584 to double
  %586 = load ptr, ptr %7, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.ProbabilityMap, ptr %586, i32 0, i32 3
  %588 = load double, ptr %587, align 8, !tbaa !16
  %589 = call double @llvm.fmuladd.f64(double %583, double %585, double %588)
  store double %589, ptr %587, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #5
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %590

590:                                              ; preds = %616, %555
  %591 = load i32, ptr %55, align 4, !tbaa !9
  %592 = load ptr, ptr %6, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.Edge, ptr %592, i32 0, i32 1
  %594 = load i32, ptr %593, align 4, !tbaa !17
  %595 = icmp slt i32 %591, %594
  br i1 %595, label %597, label %596

596:                                              ; preds = %590
  store i32 44, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  br label %619

597:                                              ; preds = %590
  %598 = load i32, ptr %53, align 4, !tbaa !9
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds [18 x [192 x double]], ptr %25, i64 0, i64 %599
  %601 = load i32, ptr %55, align 4, !tbaa !9
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds [192 x double], ptr %600, i64 0, i64 %602
  %604 = load double, ptr %603, align 8, !tbaa !18
  %605 = load i32, ptr %53, align 4, !tbaa !9
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds [18 x double], ptr %50, i64 0, i64 %606
  %608 = load double, ptr %607, align 8, !tbaa !18
  %609 = load ptr, ptr %7, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.ProbabilityMap, ptr %609, i32 0, i32 1
  %611 = load i32, ptr %55, align 4, !tbaa !9
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds [192 x double], ptr %610, i64 0, i64 %612
  %614 = load double, ptr %613, align 8, !tbaa !18
  %615 = call double @llvm.fmuladd.f64(double %604, double %608, double %614)
  store double %615, ptr %613, align 8, !tbaa !18
  br label %616

616:                                              ; preds = %597
  %617 = load i32, ptr %55, align 4, !tbaa !9
  %618 = add nsw i32 %617, 1
  store i32 %618, ptr %55, align 4, !tbaa !9
  br label %590, !llvm.loop !42

619:                                              ; preds = %596
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  br label %620

620:                                              ; preds = %619
  %621 = load i32, ptr %53, align 4, !tbaa !9
  %622 = add nsw i32 %621, 1
  store i32 %622, ptr %53, align 4, !tbaa !9
  br label %548, !llvm.loop !43

623:                                              ; preds = %554
  %624 = load ptr, ptr %7, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.ProbabilityMap, ptr %624, i32 0, i32 0
  %626 = load double, ptr %625, align 8, !tbaa !13
  %627 = fcmp oeq double %626, 0.000000e+00
  br i1 %627, label %628, label %630

628:                                              ; preds = %623
  call void @permutation_set_deinit(ptr noundef @get_pmap.permutation_set)
  store i32 3, ptr %8, align 4, !tbaa !9
  %629 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %629, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %681

630:                                              ; preds = %623
  %631 = load i32, ptr %10, align 4, !tbaa !9
  %632 = icmp sgt i32 %631, 0
  br i1 %632, label %633, label %644

633:                                              ; preds = %630
  %634 = load ptr, ptr %7, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.ProbabilityMap, ptr %634, i32 0, i32 0
  %636 = load double, ptr %635, align 8, !tbaa !13
  %637 = load i32, ptr %10, align 4, !tbaa !9
  %638 = sitofp i32 %637 to double
  %639 = fmul double %636, %638
  %640 = load ptr, ptr %7, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.ProbabilityMap, ptr %640, i32 0, i32 3
  %642 = load double, ptr %641, align 8, !tbaa !16
  %643 = fdiv double %642, %639
  store double %643, ptr %641, align 8, !tbaa !16
  br label %644

644:                                              ; preds = %633, %630
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #5
  store i32 0, ptr %56, align 4, !tbaa !9
  br label %645

645:                                              ; preds = %663, %644
  %646 = load i32, ptr %56, align 4, !tbaa !9
  %647 = load ptr, ptr %6, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.Edge, ptr %647, i32 0, i32 1
  %649 = load i32, ptr %648, align 4, !tbaa !17
  %650 = icmp slt i32 %646, %649
  br i1 %650, label %652, label %651

651:                                              ; preds = %645
  store i32 47, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  br label %666

652:                                              ; preds = %645
  %653 = load ptr, ptr %7, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.ProbabilityMap, ptr %653, i32 0, i32 0
  %655 = load double, ptr %654, align 8, !tbaa !13
  %656 = load ptr, ptr %7, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.ProbabilityMap, ptr %656, i32 0, i32 1
  %658 = load i32, ptr %56, align 4, !tbaa !9
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds [192 x double], ptr %657, i64 0, i64 %659
  %661 = load double, ptr %660, align 8, !tbaa !18
  %662 = fdiv double %661, %655
  store double %662, ptr %660, align 8, !tbaa !18
  br label %663

663:                                              ; preds = %652
  %664 = load i32, ptr %56, align 4, !tbaa !9
  %665 = add nsw i32 %664, 1
  store i32 %665, ptr %56, align 4, !tbaa !9
  br label %645, !llvm.loop !44

666:                                              ; preds = %651
  %667 = load i32, ptr %10, align 4, !tbaa !9
  %668 = sitofp i32 %667 to double
  %669 = load ptr, ptr %5, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.Board, ptr %669, i32 0, i32 2
  %671 = load i32, ptr %670, align 4, !tbaa !39
  %672 = load i32, ptr %42, align 4, !tbaa !9
  %673 = sub nsw i32 %671, %672
  %674 = sitofp i32 %673 to double
  %675 = call double @choose(double noundef %668, double noundef %674)
  %676 = load ptr, ptr %7, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.ProbabilityMap, ptr %676, i32 0, i32 0
  %678 = load double, ptr %677, align 8, !tbaa !13
  %679 = fmul double %678, %675
  store double %679, ptr %677, align 8, !tbaa !13
  call void @permutation_set_deinit(ptr noundef @get_pmap.permutation_set)
  %680 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %680, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %681

681:                                              ; preds = %666, %628
  call void @llvm.lifetime.end.p0(i64 144, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 144, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 27648, ptr %25) #5
  br label %682

682:                                              ; preds = %681, %225, %218
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  br label %683

683:                                              ; preds = %682, %71
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  br label %684

684:                                              ; preds = %683, %63
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  %685 = load i32, ptr %4, align 4
  ret i32 %685
}

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

declare i32 @get_permutation_set(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @permutation_set_deinit(ptr noundef) #2

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

declare i32 @mine_c(ptr noundef) #2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 2312}
!12 = !{!"Edge", !7, i64 0, !10, i64 768, !7, i64 772, !7, i64 1540, !10, i64 2308, !10, i64 2312, !7, i64 2316, !10, i64 3084}
!13 = !{!14, !15, i64 0}
!14 = !{!"ProbabilityMap", !15, i64 0, !7, i64 8, !7, i64 1544, !15, i64 3080}
!15 = !{!"double", !7, i64 0}
!16 = !{!14, !15, i64 3080}
!17 = !{!12, !10, i64 768}
!18 = !{!15, !15, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!12, !10, i64 3084}
!22 = distinct !{!22, !20}
!23 = !{!24, !10, i64 1556}
!24 = !{!"PermutationSet", !6, i64 0, !10, i64 8, !10, i64 12, !25, i64 16, !7, i64 20, !7, i64 788, !10, i64 1556}
!25 = !{!"_Bool", !7, i64 0}
!26 = !{!24, !6, i64 0}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = !{!30, !30, i64 0}
!30 = !{!"long", !7, i64 0}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = !{!40, !10, i64 8}
!40 = !{!"Board", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !7, i64 16, !7, i64 4112, !7, i64 5136, !25, i64 6160}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}


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

%struct.PermutationSet = type { ptr, i32, i32, i8, [192 x i32], [192 x i32], i32 }
%struct.Mask = type { [3 x i64] }

@get_pmap.permutation_set = external hidden global %struct.PermutationSet, align 8
@get_pmap.split_mine_c_min = external hidden local_unnamed_addr global [192 x i32], align 16
@get_pmap.split_mine_c_max = external hidden local_unnamed_addr global [192 x i32], align 16

; Function Attrs: nounwind uwtable
declare dso_local double @choose(double noundef, double noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local i32 @get_pmap(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = alloca [18 x [192 x double]], align 16
  %5 = alloca [18 x double], align 16
  %6 = alloca [18 x [192 x double]], align 16
  %7 = alloca [18 x double], align 16
  %8 = alloca [18 x [192 x double]], align 16
  %9 = alloca [18 x double], align 16
  %10 = alloca [18 x double], align 16
  %11 = tail call i32 @get_permutation_set(ptr noundef %0, ptr noundef %1, ptr noundef nonnull @get_pmap.permutation_set, ptr noundef %2) #6
  %.not = icmp eq i32 %11, 0
  br i1 %.not, label %13, label %12

12:                                               ; preds = %3
  tail call void @permutation_set_deinit(ptr noundef nonnull @get_pmap.permutation_set) #6
  br label %280

13:                                               ; preds = %3
  %14 = getelementptr inbounds i8, ptr %1, i64 2312
  %15 = load i32, ptr %14, align 4, !tbaa !5
  %16 = icmp slt i32 %15, 0
  br i1 %16, label %17, label %18

17:                                               ; preds = %13
  tail call void @permutation_set_deinit(ptr noundef nonnull @get_pmap.permutation_set) #6
  br label %280

18:                                               ; preds = %13
  store double 0.000000e+00, ptr %2, align 8, !tbaa !10
  %19 = getelementptr inbounds i8, ptr %2, i64 3080
  store double 0.000000e+00, ptr %19, align 8, !tbaa !13
  %20 = getelementptr inbounds i8, ptr %1, i64 768
  %21 = load i32, ptr %20, align 4, !tbaa !14
  %22 = icmp sgt i32 %21, 0
  br i1 %22, label %.lr.ph, label %.preheader239

.lr.ph:                                           ; preds = %18
  %23 = getelementptr inbounds i8, ptr %2, i64 8
  %24 = zext nneg i32 %21 to i64
  %25 = shl nuw nsw i64 %24, 3
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %23, i8 0, i64 %25, i1 false), !tbaa !15
  br label %.preheader239

.preheader239:                                    ; preds = %.lr.ph, %18
  %26 = getelementptr inbounds i8, ptr %1, i64 3084
  %27 = load i32, ptr %26, align 4, !tbaa !16
  %28 = icmp sgt i32 %27, 0
  br i1 %28, label %.lr.ph251, label %.preheader238

.lr.ph251:                                        ; preds = %.preheader239
  %29 = getelementptr inbounds i8, ptr %2, i64 1544
  %wide.trip.count = zext nneg i32 %27 to i64
  %min.iters.check = icmp ult i32 %27, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph251
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph251 ], [ %n.vec, %middle.block ]
  %.0200250.ph = phi i32 [ 0, %.lr.ph251 ], [ %37, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph251
  %n.vec = and i64 %wide.trip.count, 2147483644
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <2 x i32> [ zeroinitializer, %vector.ph ], [ %34, %vector.body ]
  %vec.phi415 = phi <2 x i32> [ zeroinitializer, %vector.ph ], [ %35, %vector.body ]
  %30 = getelementptr inbounds [192 x double], ptr %29, i64 0, i64 %index
  %31 = getelementptr inbounds i8, ptr %30, i64 16
  %wide.load = load <2 x double>, ptr %30, align 8, !tbaa !15
  %wide.load416 = load <2 x double>, ptr %31, align 8, !tbaa !15
  %32 = fptosi <2 x double> %wide.load to <2 x i32>
  %33 = fptosi <2 x double> %wide.load416 to <2 x i32>
  %34 = add <2 x i32> %vec.phi, %32
  %35 = add <2 x i32> %vec.phi415, %33
  %index.next = add nuw i64 %index, 4
  %36 = icmp eq i64 %index.next, %n.vec
  br i1 %36, label %middle.block, label %vector.body, !llvm.loop !17

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i32> %35, %34
  %37 = tail call i32 @llvm.vector.reduce.add.v2i32(<2 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.preheader238, label %scalar.ph.preheader

.preheader238:                                    ; preds = %scalar.ph, %middle.block, %.preheader239
  %.0200.lcssa = phi i32 [ 0, %.preheader239 ], [ %37, %middle.block ], [ %42, %scalar.ph ]
  %38 = load i32, ptr getelementptr inbounds (i8, ptr @get_pmap.permutation_set, i64 1556), align 4, !tbaa !21
  %.not222257 = icmp sgt i32 %38, 0
  br i1 %.not222257, label %.lr.ph261, label %.thread.loopexit

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %.0200250 = phi i32 [ %42, %scalar.ph ], [ %.0200250.ph, %scalar.ph.preheader ]
  %39 = getelementptr inbounds [192 x double], ptr %29, i64 0, i64 %indvars.iv
  %40 = load double, ptr %39, align 8, !tbaa !15
  %41 = fptosi double %40 to i32
  %42 = add nsw i32 %.0200250, %41
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader238, label %scalar.ph, !llvm.loop !25

.lr.ph261:                                        ; preds = %.preheader238, %65
  %indvars.iv328 = phi i64 [ %indvars.iv.next329, %65 ], [ 0, %.preheader238 ]
  %.0202260 = phi i32 [ %66, %65 ], [ %.0200.lcssa, %.preheader238 ]
  %.0203259 = phi i32 [ %67, %65 ], [ %.0200.lcssa, %.preheader238 ]
  %43 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %indvars.iv328
  store i32 256, ptr %43, align 4, !tbaa !26
  %44 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %indvars.iv328
  store i32 0, ptr %44, align 4, !tbaa !26
  %45 = getelementptr inbounds [192 x i32], ptr getelementptr inbounds (i8, ptr @get_pmap.permutation_set, i64 20), i64 0, i64 %indvars.iv328
  %46 = load i32, ptr %45, align 4, !tbaa !26
  %47 = icmp sgt i32 %46, 0
  br i1 %47, label %.lr.ph253, label %._crit_edge.thread

.lr.ph253:                                        ; preds = %.lr.ph261
  %48 = getelementptr inbounds [192 x i32], ptr getelementptr inbounds (i8, ptr @get_pmap.permutation_set, i64 788), i64 0, i64 %indvars.iv328
  br label %50

._crit_edge:                                      ; preds = %50
  %.pre = load i32, ptr %43, align 4, !tbaa !26
  %49 = icmp slt i32 %61, %.pre
  br i1 %49, label %._crit_edge.thread, label %65

50:                                               ; preds = %.lr.ph253, %50
  %indvars.iv325 = phi i64 [ 0, %.lr.ph253 ], [ %indvars.iv.next326, %50 ]
  %51 = load ptr, ptr @get_pmap.permutation_set, align 8, !tbaa !27
  %52 = load i32, ptr %48, align 4, !tbaa !26
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds %struct.Mask, ptr %51, i64 %53
  %55 = getelementptr inbounds %struct.Mask, ptr %54, i64 %indvars.iv325
  %56 = load i32, ptr %43, align 4, !tbaa !26
  %57 = tail call i32 @mine_c(ptr noundef %55) #6
  %58 = tail call i32 @llvm.smin.i32(i32 %56, i32 %57)
  store i32 %58, ptr %43, align 4, !tbaa !26
  %59 = load i32, ptr %44, align 4, !tbaa !26
  %60 = tail call i32 @mine_c(ptr noundef %55) #6
  %61 = tail call i32 @llvm.smax.i32(i32 %59, i32 %60)
  store i32 %61, ptr %44, align 4, !tbaa !26
  %indvars.iv.next326 = add nuw nsw i64 %indvars.iv325, 1
  %62 = load i32, ptr %45, align 4, !tbaa !26
  %63 = sext i32 %62 to i64
  %64 = icmp slt i64 %indvars.iv.next326, %63
  br i1 %64, label %50, label %._crit_edge, !llvm.loop !28

65:                                               ; preds = %._crit_edge
  %66 = add nsw i32 %.pre, %.0202260
  %67 = add nsw i32 %61, %.0203259
  %indvars.iv.next329 = add nuw nsw i64 %indvars.iv328, 1
  %68 = load i32, ptr getelementptr inbounds (i8, ptr @get_pmap.permutation_set, i64 1556), align 4, !tbaa !21
  %69 = sext i32 %68 to i64
  %.not222 = icmp slt i64 %indvars.iv.next329, %69
  br i1 %.not222, label %.lr.ph261, label %.thread.loopexit.loopexit, !llvm.loop !29

._crit_edge.thread:                               ; preds = %.lr.ph261, %._crit_edge
  tail call void @permutation_set_deinit(ptr noundef nonnull @get_pmap.permutation_set) #6
  br label %280

.thread.loopexit.loopexit:                        ; preds = %65
  %70 = icmp sgt i32 %68, 0
  br label %.thread.loopexit

.thread.loopexit:                                 ; preds = %.thread.loopexit.loopexit, %.preheader238
  %71 = phi i1 [ false, %.preheader238 ], [ %70, %.thread.loopexit.loopexit ]
  %.0202.lcssa256 = phi i32 [ %.0200.lcssa, %.preheader238 ], [ %66, %.thread.loopexit.loopexit ]
  %.0203.lcssa = phi i32 [ %.0200.lcssa, %.preheader238 ], [ %67, %.thread.loopexit.loopexit ]
  %72 = sub nsw i32 %.0203.lcssa, %.0202.lcssa256
  %73 = icmp sgt i32 %72, 17
  br i1 %73, label %74, label %75

74:                                               ; preds = %.thread.loopexit
  tail call void @permutation_set_deinit(ptr noundef nonnull @get_pmap.permutation_set) #6
  br label %280

75:                                               ; preds = %.thread.loopexit
  call void @llvm.lifetime.start.p0(i64 27648, ptr nonnull %4) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(27648) %4, i8 0, i64 27648, i1 false)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %5) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(144) %5, i8 0, i64 144, i1 false)
  store double 1.000000e+00, ptr %5, align 16, !tbaa !15
  br i1 %71, label %.lr.ph297, label %._crit_edge298

.lr.ph297:                                        ; preds = %75
  %76 = getelementptr inbounds i8, ptr %1, i64 772
  %77 = getelementptr inbounds i8, ptr %1, i64 1540
  br label %88

._crit_edge298:                                   ; preds = %._crit_edge288, %75
  %78 = getelementptr inbounds i8, ptr %0, i64 8
  %79 = load i32, ptr %78, align 4, !tbaa !30
  %80 = sub nsw i32 %79, %15
  %81 = tail call i32 @llvm.smax.i32(i32 %.0202.lcssa256, i32 %80)
  %82 = tail call i32 @llvm.smin.i32(i32 %.0203.lcssa, i32 %79)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %10) #6
  %83 = sub nsw i32 %81, %.0202.lcssa256
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds [18 x double], ptr %10, i64 0, i64 %84
  store double 1.000000e+00, ptr %85, align 8, !tbaa !15
  %86 = sub nsw i32 %82, %.0202.lcssa256
  %.not223.not299 = icmp slt i32 %81, %82
  br i1 %.not223.not299, label %.lr.ph302, label %.preheader

.lr.ph302:                                        ; preds = %._crit_edge298
  %.neg232 = sub i32 %79, %.0202.lcssa256
  %87 = sext i32 %86 to i64
  br label %217

88:                                               ; preds = %.lr.ph297, %._crit_edge288
  %indvars.iv380 = phi i64 [ 0, %.lr.ph297 ], [ %indvars.iv.next381, %._crit_edge288 ]
  %.0212293 = phi i32 [ 0, %.lr.ph297 ], [ %203, %._crit_edge288 ]
  call void @llvm.lifetime.start.p0(i64 27648, ptr nonnull %6) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(27648) %6, i8 0, i64 27648, i1 false)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %7) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(144) %7, i8 0, i64 144, i1 false)
  %89 = getelementptr inbounds [192 x i32], ptr getelementptr inbounds (i8, ptr @get_pmap.permutation_set, i64 20), i64 0, i64 %indvars.iv380
  %90 = load i32, ptr %89, align 4, !tbaa !26
  %91 = icmp sgt i32 %90, 0
  br i1 %91, label %.lr.ph271, label %._crit_edge272

.lr.ph271:                                        ; preds = %88
  %92 = getelementptr inbounds [192 x i32], ptr getelementptr inbounds (i8, ptr @get_pmap.permutation_set, i64 788), i64 0, i64 %indvars.iv380
  %93 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %indvars.iv380
  %94 = getelementptr inbounds [192 x i32], ptr %76, i64 0, i64 %indvars.iv380
  %95 = getelementptr inbounds [192 x i32], ptr %77, i64 0, i64 %indvars.iv380
  br label %115

._crit_edge272:                                   ; preds = %._crit_edge268, %88
  call void @llvm.lifetime.start.p0(i64 27648, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %9) #6
  %.not226277 = icmp slt i32 %.0212293, 0
  br i1 %.not226277, label %.preheader237.._crit_edge288_crit_edge, label %.preheader236.lr.ph

.preheader236.lr.ph:                              ; preds = %._crit_edge272
  %96 = load i32, ptr %20, align 4, !tbaa !14
  %97 = icmp sgt i32 %96, 0
  %98 = add nuw i32 %.0212293, 1
  %wide.trip.count353 = zext i32 %98 to i64
  br i1 %97, label %.preheader236.us.preheader, label %.preheader236.preheader

.preheader236.preheader:                          ; preds = %.preheader236.lr.ph
  %min.iters.check468 = icmp ult i32 %.0212293, 3
  br i1 %min.iters.check468, label %.preheader236.preheader512, label %vector.ph469

.preheader236.preheader512:                       ; preds = %middle.block466, %.preheader236.preheader
  %indvars.iv339.ph = phi i64 [ 0, %.preheader236.preheader ], [ %n.vec471, %middle.block466 ]
  br label %.preheader236

vector.ph469:                                     ; preds = %.preheader236.preheader
  %n.vec471 = and i64 %wide.trip.count353, 4294967292
  br label %vector.body473

vector.body473:                                   ; preds = %vector.body473, %vector.ph469
  %index474 = phi i64 [ 0, %vector.ph469 ], [ %index.next477, %vector.body473 ]
  %99 = getelementptr inbounds [18 x double], ptr %5, i64 0, i64 %index474
  %100 = getelementptr inbounds i8, ptr %99, i64 16
  %wide.load475 = load <2 x double>, ptr %99, align 16, !tbaa !15
  %wide.load476 = load <2 x double>, ptr %100, align 16, !tbaa !15
  %101 = getelementptr inbounds [18 x double], ptr %9, i64 0, i64 %index474
  %102 = getelementptr inbounds i8, ptr %101, i64 16
  store <2 x double> %wide.load475, ptr %101, align 16, !tbaa !15
  store <2 x double> %wide.load476, ptr %102, align 16, !tbaa !15
  store <2 x double> zeroinitializer, ptr %99, align 16, !tbaa !15
  store <2 x double> zeroinitializer, ptr %100, align 16, !tbaa !15
  %index.next477 = add nuw i64 %index474, 4
  %103 = icmp eq i64 %index.next477, %n.vec471
  br i1 %103, label %middle.block466, label %vector.body473, !llvm.loop !32

middle.block466:                                  ; preds = %vector.body473
  %cmp.n478 = icmp eq i64 %n.vec471, %wide.trip.count353
  br i1 %cmp.n478, label %.preheader237, label %.preheader236.preheader512

.preheader236.us.preheader:                       ; preds = %.preheader236.lr.ph
  %wide.trip.count348 = zext nneg i32 %96 to i64
  %min.iters.check455 = icmp ult i32 %96, 4
  %n.vec458 = and i64 %wide.trip.count348, 2147483644
  %cmp.n465 = icmp eq i64 %n.vec458, %wide.trip.count348
  br label %.preheader236.us

.preheader236.us:                                 ; preds = %.preheader236.us.preheader, %._crit_edge276.us
  %indvars.iv350 = phi i64 [ 0, %.preheader236.us.preheader ], [ %indvars.iv.next351, %._crit_edge276.us ]
  br i1 %min.iters.check455, label %scalar.ph454.preheader, label %vector.body460

vector.body460:                                   ; preds = %.preheader236.us, %vector.body460
  %index461 = phi i64 [ %index.next464, %vector.body460 ], [ 0, %.preheader236.us ]
  %104 = getelementptr inbounds [18 x [192 x double]], ptr %4, i64 0, i64 %indvars.iv350, i64 %index461
  %105 = getelementptr inbounds i8, ptr %104, i64 16
  %wide.load462 = load <2 x double>, ptr %104, align 16, !tbaa !15
  %wide.load463 = load <2 x double>, ptr %105, align 16, !tbaa !15
  %106 = getelementptr inbounds [18 x [192 x double]], ptr %8, i64 0, i64 %indvars.iv350, i64 %index461
  %107 = getelementptr inbounds i8, ptr %106, i64 16
  store <2 x double> %wide.load462, ptr %106, align 16, !tbaa !15
  store <2 x double> %wide.load463, ptr %107, align 16, !tbaa !15
  store <2 x double> zeroinitializer, ptr %104, align 16, !tbaa !15
  store <2 x double> zeroinitializer, ptr %105, align 16, !tbaa !15
  %index.next464 = add nuw i64 %index461, 4
  %108 = icmp eq i64 %index.next464, %n.vec458
  br i1 %108, label %middle.block453, label %vector.body460, !llvm.loop !33

middle.block453:                                  ; preds = %vector.body460
  br i1 %cmp.n465, label %._crit_edge276.us, label %scalar.ph454.preheader

scalar.ph454.preheader:                           ; preds = %middle.block453, %.preheader236.us
  %indvars.iv345.ph = phi i64 [ 0, %.preheader236.us ], [ %n.vec458, %middle.block453 ]
  br label %scalar.ph454

scalar.ph454:                                     ; preds = %scalar.ph454.preheader, %scalar.ph454
  %indvars.iv345 = phi i64 [ %indvars.iv.next346, %scalar.ph454 ], [ %indvars.iv345.ph, %scalar.ph454.preheader ]
  %109 = getelementptr inbounds [18 x [192 x double]], ptr %4, i64 0, i64 %indvars.iv350, i64 %indvars.iv345
  %110 = load double, ptr %109, align 8, !tbaa !15
  %111 = getelementptr inbounds [18 x [192 x double]], ptr %8, i64 0, i64 %indvars.iv350, i64 %indvars.iv345
  store double %110, ptr %111, align 8, !tbaa !15
  store double 0.000000e+00, ptr %109, align 8, !tbaa !15
  %indvars.iv.next346 = add nuw nsw i64 %indvars.iv345, 1
  %exitcond349.not = icmp eq i64 %indvars.iv.next346, %wide.trip.count348
  br i1 %exitcond349.not, label %._crit_edge276.us, label %scalar.ph454, !llvm.loop !34

._crit_edge276.us:                                ; preds = %scalar.ph454, %middle.block453
  %112 = getelementptr inbounds [18 x double], ptr %5, i64 0, i64 %indvars.iv350
  %113 = load double, ptr %112, align 8, !tbaa !15
  %114 = getelementptr inbounds [18 x double], ptr %9, i64 0, i64 %indvars.iv350
  store double %113, ptr %114, align 8, !tbaa !15
  store double 0.000000e+00, ptr %112, align 8, !tbaa !15
  %indvars.iv.next351 = add nuw nsw i64 %indvars.iv350, 1
  %exitcond354.not = icmp eq i64 %indvars.iv.next351, %wide.trip.count353
  br i1 %exitcond354.not, label %.preheader237, label %.preheader236.us, !llvm.loop !35

115:                                              ; preds = %.lr.ph271, %._crit_edge268
  %indvars.iv336 = phi i64 [ 0, %.lr.ph271 ], [ %indvars.iv.next337, %._crit_edge268 ]
  %116 = load ptr, ptr @get_pmap.permutation_set, align 8, !tbaa !27
  %117 = load i32, ptr %92, align 4, !tbaa !26
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds %struct.Mask, ptr %116, i64 %118
  %120 = getelementptr inbounds %struct.Mask, ptr %119, i64 %indvars.iv336
  %121 = tail call i32 @mine_c(ptr noundef %120) #6
  %122 = load i32, ptr %93, align 4, !tbaa !26
  %123 = sub nsw i32 %121, %122
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds [18 x double], ptr %7, i64 0, i64 %124
  %126 = load double, ptr %125, align 8, !tbaa !15
  %127 = fadd double %126, 1.000000e+00
  store double %127, ptr %125, align 8, !tbaa !15
  %128 = load i32, ptr %94, align 4, !tbaa !26
  %129 = icmp sgt i32 %128, 0
  br i1 %129, label %.lr.ph267.preheader, label %._crit_edge268

.lr.ph267.preheader:                              ; preds = %115
  %wide.trip.count334 = zext nneg i32 %128 to i64
  br label %.lr.ph267

._crit_edge268:                                   ; preds = %147, %115
  %indvars.iv.next337 = add nuw nsw i64 %indvars.iv336, 1
  %130 = load i32, ptr %89, align 4, !tbaa !26
  %131 = sext i32 %130 to i64
  %132 = icmp slt i64 %indvars.iv.next337, %131
  br i1 %132, label %115, label %._crit_edge272, !llvm.loop !36

.lr.ph267:                                        ; preds = %.lr.ph267.preheader, %147
  %indvars.iv331 = phi i64 [ 0, %.lr.ph267.preheader ], [ %indvars.iv.next332, %147 ]
  %133 = lshr i64 %indvars.iv331, 6
  %134 = getelementptr inbounds [3 x i64], ptr %120, i64 0, i64 %133
  %135 = load i64, ptr %134, align 8, !tbaa !37
  %136 = and i64 %indvars.iv331, 63
  %137 = shl nuw i64 1, %136
  %138 = and i64 %135, %137
  %.not229 = icmp eq i64 %138, 0
  br i1 %.not229, label %147, label %139

139:                                              ; preds = %.lr.ph267
  %140 = load i32, ptr %95, align 4, !tbaa !26
  %141 = trunc nuw nsw i64 %indvars.iv331 to i32
  %142 = add nsw i32 %140, %141
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds [18 x [192 x double]], ptr %6, i64 0, i64 %124, i64 %143
  %145 = load double, ptr %144, align 8, !tbaa !15
  %146 = fadd double %145, 1.000000e+00
  store double %146, ptr %144, align 8, !tbaa !15
  br label %147

147:                                              ; preds = %.lr.ph267, %139
  %indvars.iv.next332 = add nuw nsw i64 %indvars.iv331, 1
  %exitcond335.not = icmp eq i64 %indvars.iv.next332, %wide.trip.count334
  br i1 %exitcond335.not, label %._crit_edge268, label %.lr.ph267, !llvm.loop !39

.preheader237:                                    ; preds = %.preheader236, %._crit_edge276.us, %middle.block466
  br i1 %.not226277, label %.preheader237.._crit_edge288_crit_edge, label %.preheader235.lr.ph

.preheader237.._crit_edge288_crit_edge:           ; preds = %._crit_edge272, %.preheader237
  %.phi.trans.insert = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %indvars.iv380
  %.pre397 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !26
  %.phi.trans.insert398 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %indvars.iv380
  %.pre399 = load i32, ptr %.phi.trans.insert398, align 4, !tbaa !26
  br label %._crit_edge288

.preheader235.lr.ph:                              ; preds = %.preheader237
  %148 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_max, i64 0, i64 %indvars.iv380
  %149 = load i32, ptr %148, align 4, !tbaa !26
  %150 = getelementptr inbounds [192 x i32], ptr @get_pmap.split_mine_c_min, i64 0, i64 %indvars.iv380
  %151 = load i32, ptr %150, align 4, !tbaa !26
  %.not228282 = icmp slt i32 %149, %151
  br i1 %.not228282, label %._crit_edge288, label %.preheader235.lr.ph.split

.preheader235.lr.ph.split:                        ; preds = %.preheader235.lr.ph
  %152 = load i32, ptr %20, align 4, !tbaa !14
  %153 = icmp sgt i32 %152, 0
  %154 = add i32 %149, 1
  %155 = sub i32 %154, %151
  %156 = add nuw i32 %.0212293, 1
  %wide.trip.count378 = zext i32 %156 to i64
  %wide.trip.count373 = zext i32 %155 to i64
  br i1 %153, label %.preheader235.us289.preheader, label %.preheader235.preheader

.preheader235.preheader:                          ; preds = %.preheader235.lr.ph.split
  %min.iters.check438 = icmp ult i32 %155, 4
  %n.vec441 = and i64 %wide.trip.count373, 4294967292
  %cmp.n452 = icmp eq i64 %n.vec441, %wide.trip.count373
  br label %.preheader235

.preheader235.us289.preheader:                    ; preds = %.preheader235.lr.ph.split
  %wide.trip.count368 = zext nneg i32 %152 to i64
  %min.iters.check419 = icmp ult i32 %152, 4
  %n.vec422 = and i64 %wide.trip.count368, 2147483644
  %cmp.n435 = icmp eq i64 %n.vec422, %wide.trip.count368
  br label %.preheader235.us289

.preheader235.us289:                              ; preds = %.preheader235.us289.preheader, %._crit_edge284.split.us.us
  %indvars.iv375 = phi i64 [ 0, %.preheader235.us289.preheader ], [ %indvars.iv.next376, %._crit_edge284.split.us.us ]
  %157 = getelementptr inbounds [18 x double], ptr %9, i64 0, i64 %indvars.iv375
  %158 = load double, ptr %157, align 8, !tbaa !15
  %broadcast.splatinsert = insertelement <2 x double> poison, double %158, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.preheader234.us.us

.preheader234.us.us:                              ; preds = %._crit_edge281.us.us, %.preheader235.us289
  %indvars.iv370 = phi i64 [ %indvars.iv.next371, %._crit_edge281.us.us ], [ 0, %.preheader235.us289 ]
  %159 = getelementptr inbounds [18 x double], ptr %7, i64 0, i64 %indvars.iv370
  %160 = load double, ptr %159, align 8, !tbaa !15
  %161 = add nuw nsw i64 %indvars.iv370, %indvars.iv375
  br i1 %min.iters.check419, label %scalar.ph418.preheader, label %vector.ph420

vector.ph420:                                     ; preds = %.preheader234.us.us
  %broadcast.splatinsert430 = insertelement <2 x double> poison, double %160, i64 0
  %broadcast.splat431 = shufflevector <2 x double> %broadcast.splatinsert430, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body424

vector.body424:                                   ; preds = %vector.body424, %vector.ph420
  %index425 = phi i64 [ 0, %vector.ph420 ], [ %index.next434, %vector.body424 ]
  %162 = getelementptr inbounds [18 x [192 x double]], ptr %8, i64 0, i64 %indvars.iv375, i64 %index425
  %163 = getelementptr inbounds i8, ptr %162, i64 16
  %wide.load426 = load <2 x double>, ptr %162, align 16, !tbaa !15
  %wide.load427 = load <2 x double>, ptr %163, align 16, !tbaa !15
  %164 = getelementptr inbounds [18 x [192 x double]], ptr %6, i64 0, i64 %indvars.iv370, i64 %index425
  %165 = getelementptr inbounds i8, ptr %164, i64 16
  %wide.load428 = load <2 x double>, ptr %164, align 16, !tbaa !15
  %wide.load429 = load <2 x double>, ptr %165, align 16, !tbaa !15
  %166 = fmul <2 x double> %wide.load428, %broadcast.splat
  %167 = fmul <2 x double> %wide.load429, %broadcast.splat
  %168 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load426, <2 x double> %broadcast.splat431, <2 x double> %166)
  %169 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load427, <2 x double> %broadcast.splat431, <2 x double> %167)
  %170 = getelementptr inbounds [18 x [192 x double]], ptr %4, i64 0, i64 %161, i64 %index425
  %171 = getelementptr inbounds i8, ptr %170, i64 16
  %wide.load432 = load <2 x double>, ptr %170, align 16, !tbaa !15
  %wide.load433 = load <2 x double>, ptr %171, align 16, !tbaa !15
  %172 = fadd <2 x double> %wide.load432, %168
  %173 = fadd <2 x double> %wide.load433, %169
  store <2 x double> %172, ptr %170, align 16, !tbaa !15
  store <2 x double> %173, ptr %171, align 16, !tbaa !15
  %index.next434 = add nuw i64 %index425, 4
  %174 = icmp eq i64 %index.next434, %n.vec422
  br i1 %174, label %middle.block417, label %vector.body424, !llvm.loop !40

middle.block417:                                  ; preds = %vector.body424
  br i1 %cmp.n435, label %._crit_edge281.us.us, label %scalar.ph418.preheader

scalar.ph418.preheader:                           ; preds = %middle.block417, %.preheader234.us.us
  %indvars.iv365.ph = phi i64 [ 0, %.preheader234.us.us ], [ %n.vec422, %middle.block417 ]
  br label %scalar.ph418

scalar.ph418:                                     ; preds = %scalar.ph418.preheader, %scalar.ph418
  %indvars.iv365 = phi i64 [ %indvars.iv.next366, %scalar.ph418 ], [ %indvars.iv365.ph, %scalar.ph418.preheader ]
  %175 = getelementptr inbounds [18 x [192 x double]], ptr %8, i64 0, i64 %indvars.iv375, i64 %indvars.iv365
  %176 = load double, ptr %175, align 8, !tbaa !15
  %177 = getelementptr inbounds [18 x [192 x double]], ptr %6, i64 0, i64 %indvars.iv370, i64 %indvars.iv365
  %178 = load double, ptr %177, align 8, !tbaa !15
  %179 = fmul double %178, %158
  %180 = tail call double @llvm.fmuladd.f64(double %176, double %160, double %179)
  %181 = getelementptr inbounds [18 x [192 x double]], ptr %4, i64 0, i64 %161, i64 %indvars.iv365
  %182 = load double, ptr %181, align 8, !tbaa !15
  %183 = fadd double %182, %180
  store double %183, ptr %181, align 8, !tbaa !15
  %indvars.iv.next366 = add nuw nsw i64 %indvars.iv365, 1
  %exitcond369.not = icmp eq i64 %indvars.iv.next366, %wide.trip.count368
  br i1 %exitcond369.not, label %._crit_edge281.us.us, label %scalar.ph418, !llvm.loop !41

._crit_edge281.us.us:                             ; preds = %scalar.ph418, %middle.block417
  %184 = getelementptr inbounds [18 x double], ptr %5, i64 0, i64 %161
  %185 = load double, ptr %184, align 8, !tbaa !15
  %186 = tail call double @llvm.fmuladd.f64(double %158, double %160, double %185)
  store double %186, ptr %184, align 8, !tbaa !15
  %indvars.iv.next371 = add nuw nsw i64 %indvars.iv370, 1
  %exitcond374.not = icmp eq i64 %indvars.iv.next371, %wide.trip.count373
  br i1 %exitcond374.not, label %._crit_edge284.split.us.us, label %.preheader234.us.us, !llvm.loop !42

._crit_edge284.split.us.us:                       ; preds = %._crit_edge281.us.us
  %indvars.iv.next376 = add nuw nsw i64 %indvars.iv375, 1
  %exitcond379.not = icmp eq i64 %indvars.iv.next376, %wide.trip.count378
  br i1 %exitcond379.not, label %._crit_edge288, label %.preheader235.us289, !llvm.loop !43

.preheader236:                                    ; preds = %.preheader236.preheader512, %.preheader236
  %indvars.iv339 = phi i64 [ %indvars.iv.next340, %.preheader236 ], [ %indvars.iv339.ph, %.preheader236.preheader512 ]
  %187 = getelementptr inbounds [18 x double], ptr %5, i64 0, i64 %indvars.iv339
  %188 = load double, ptr %187, align 8, !tbaa !15
  %189 = getelementptr inbounds [18 x double], ptr %9, i64 0, i64 %indvars.iv339
  store double %188, ptr %189, align 8, !tbaa !15
  store double 0.000000e+00, ptr %187, align 8, !tbaa !15
  %indvars.iv.next340 = add nuw nsw i64 %indvars.iv339, 1
  %exitcond343.not = icmp eq i64 %indvars.iv.next340, %wide.trip.count353
  br i1 %exitcond343.not, label %.preheader237, label %.preheader236, !llvm.loop !44

.preheader235:                                    ; preds = %.preheader235.preheader, %._crit_edge284.split
  %indvars.iv360 = phi i64 [ %indvars.iv.next361, %._crit_edge284.split ], [ 0, %.preheader235.preheader ]
  %190 = getelementptr inbounds [18 x double], ptr %9, i64 0, i64 %indvars.iv360
  %191 = load double, ptr %190, align 8, !tbaa !15
  br i1 %min.iters.check438, label %.preheader234.preheader, label %vector.ph439

.preheader234.preheader:                          ; preds = %middle.block436, %.preheader235
  %indvars.iv355.ph = phi i64 [ 0, %.preheader235 ], [ %n.vec441, %middle.block436 ]
  br label %.preheader234

vector.ph439:                                     ; preds = %.preheader235
  %broadcast.splatinsert449 = insertelement <2 x double> poison, double %191, i64 0
  %broadcast.splat450 = shufflevector <2 x double> %broadcast.splatinsert449, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body443

vector.body443:                                   ; preds = %vector.body443, %vector.ph439
  %index444 = phi i64 [ 0, %vector.ph439 ], [ %index.next451, %vector.body443 ]
  %192 = getelementptr inbounds [18 x double], ptr %7, i64 0, i64 %index444
  %193 = getelementptr inbounds i8, ptr %192, i64 16
  %wide.load445 = load <2 x double>, ptr %192, align 16, !tbaa !15
  %wide.load446 = load <2 x double>, ptr %193, align 16, !tbaa !15
  %194 = add nuw nsw i64 %index444, %indvars.iv360
  %195 = getelementptr inbounds [18 x double], ptr %5, i64 0, i64 %194
  %196 = getelementptr inbounds i8, ptr %195, i64 16
  %wide.load447 = load <2 x double>, ptr %195, align 8, !tbaa !15
  %wide.load448 = load <2 x double>, ptr %196, align 8, !tbaa !15
  %197 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat450, <2 x double> %wide.load445, <2 x double> %wide.load447)
  %198 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat450, <2 x double> %wide.load446, <2 x double> %wide.load448)
  store <2 x double> %197, ptr %195, align 8, !tbaa !15
  store <2 x double> %198, ptr %196, align 8, !tbaa !15
  %index.next451 = add nuw i64 %index444, 4
  %199 = icmp eq i64 %index.next451, %n.vec441
  br i1 %199, label %middle.block436, label %vector.body443, !llvm.loop !45

middle.block436:                                  ; preds = %vector.body443
  br i1 %cmp.n452, label %._crit_edge284.split, label %.preheader234.preheader

._crit_edge288:                                   ; preds = %._crit_edge284.split, %._crit_edge284.split.us.us, %.preheader235.lr.ph, %.preheader237.._crit_edge288_crit_edge
  %200 = phi i32 [ %.pre399, %.preheader237.._crit_edge288_crit_edge ], [ %151, %.preheader235.lr.ph ], [ %151, %._crit_edge284.split.us.us ], [ %151, %._crit_edge284.split ]
  %201 = phi i32 [ %.pre397, %.preheader237.._crit_edge288_crit_edge ], [ %149, %.preheader235.lr.ph ], [ %149, %._crit_edge284.split.us.us ], [ %149, %._crit_edge284.split ]
  %202 = add i32 %201, %.0212293
  %203 = sub i32 %202, %200
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 27648, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 27648, ptr nonnull %6) #6
  %indvars.iv.next381 = add nuw nsw i64 %indvars.iv380, 1
  %204 = load i32, ptr getelementptr inbounds (i8, ptr @get_pmap.permutation_set, i64 1556), align 4, !tbaa !21
  %205 = sext i32 %204 to i64
  %206 = icmp slt i64 %indvars.iv.next381, %205
  br i1 %206, label %88, label %._crit_edge298, !llvm.loop !46

.preheader234:                                    ; preds = %.preheader234.preheader, %.preheader234
  %indvars.iv355 = phi i64 [ %indvars.iv.next356, %.preheader234 ], [ %indvars.iv355.ph, %.preheader234.preheader ]
  %207 = getelementptr inbounds [18 x double], ptr %7, i64 0, i64 %indvars.iv355
  %208 = load double, ptr %207, align 8, !tbaa !15
  %209 = add nuw nsw i64 %indvars.iv355, %indvars.iv360
  %210 = getelementptr inbounds [18 x double], ptr %5, i64 0, i64 %209
  %211 = load double, ptr %210, align 8, !tbaa !15
  %212 = tail call double @llvm.fmuladd.f64(double %191, double %208, double %211)
  store double %212, ptr %210, align 8, !tbaa !15
  %indvars.iv.next356 = add nuw nsw i64 %indvars.iv355, 1
  %exitcond359.not = icmp eq i64 %indvars.iv.next356, %wide.trip.count373
  br i1 %exitcond359.not, label %._crit_edge284.split, label %.preheader234, !llvm.loop !47

._crit_edge284.split:                             ; preds = %.preheader234, %middle.block436
  %indvars.iv.next361 = add nuw nsw i64 %indvars.iv360, 1
  %exitcond364.not = icmp eq i64 %indvars.iv.next361, %wide.trip.count378
  br i1 %exitcond364.not, label %._crit_edge288, label %.preheader235, !llvm.loop !43

.preheader:                                       ; preds = %217, %._crit_edge298
  %.not224308 = icmp sgt i32 %81, %82
  %.pre400 = load double, ptr %2, align 8, !tbaa !10
  br i1 %.not224308, label %228, label %.lr.ph310

.lr.ph310:                                        ; preds = %.preheader
  %213 = load i32, ptr %20, align 4, !tbaa !14
  %214 = icmp sgt i32 %213, 0
  %215 = getelementptr inbounds i8, ptr %2, i64 8
  %216 = sext i32 %86 to i64
  %wide.trip.count388 = zext i32 %213 to i64
  %min.iters.check481 = icmp ult i32 %213, 4
  %n.vec484 = and i64 %wide.trip.count388, 2147483644
  %cmp.n495 = icmp eq i64 %n.vec484, %wide.trip.count388
  br label %231

217:                                              ; preds = %.lr.ph302, %217
  %218 = phi double [ 1.000000e+00, %.lr.ph302 ], [ %226, %217 ]
  %indvars.iv383 = phi i64 [ %84, %.lr.ph302 ], [ %indvars.iv.next384, %217 ]
  %indvars.iv.next384 = add nsw i64 %indvars.iv383, 1
  %219 = trunc nsw i64 %indvars.iv383 to i32
  %.0197.neg = xor i32 %219, -1
  %220 = add i32 %.neg232, %.0197.neg
  %221 = sitofp i32 %220 to double
  %222 = fadd double %221, 1.000000e+00
  %223 = fmul double %222, %218
  %224 = sub nsw i32 %15, %220
  %225 = sitofp i32 %224 to double
  %226 = fdiv double %223, %225
  %227 = getelementptr inbounds [18 x double], ptr %10, i64 0, i64 %indvars.iv.next384
  store double %226, ptr %227, align 8, !tbaa !15
  %.not223.not = icmp slt i64 %indvars.iv.next384, %87
  br i1 %.not223.not, label %217, label %.preheader, !llvm.loop !48

._crit_edge311:                                   ; preds = %._crit_edge307
  store double %240, ptr %2, align 8, !tbaa !10
  br label %228

228:                                              ; preds = %._crit_edge311, %.preheader
  %229 = phi double [ %240, %._crit_edge311 ], [ %.pre400, %.preheader ]
  %230 = fcmp oeq double %229, 0.000000e+00
  br i1 %230, label %279, label %257

231:                                              ; preds = %.lr.ph310, %._crit_edge307
  %indvars.iv390 = phi i64 [ %84, %.lr.ph310 ], [ %indvars.iv.next391, %._crit_edge307 ]
  %232 = phi double [ %.pre400, %.lr.ph310 ], [ %240, %._crit_edge307 ]
  %233 = trunc nsw i64 %indvars.iv390 to i32
  %234 = add i32 %.0202.lcssa256, %233
  %235 = sub i32 %79, %234
  %236 = getelementptr inbounds [18 x double], ptr %5, i64 0, i64 %indvars.iv390
  %237 = load double, ptr %236, align 8, !tbaa !15
  %238 = getelementptr inbounds [18 x double], ptr %10, i64 0, i64 %indvars.iv390
  %239 = load double, ptr %238, align 8, !tbaa !15
  %240 = tail call double @llvm.fmuladd.f64(double %237, double %239, double %232)
  %241 = fmul double %237, %239
  %242 = sitofp i32 %235 to double
  %243 = load double, ptr %19, align 8, !tbaa !13
  %244 = tail call double @llvm.fmuladd.f64(double %241, double %242, double %243)
  store double %244, ptr %19, align 8, !tbaa !13
  br i1 %214, label %.lr.ph306.preheader, label %._crit_edge307

.lr.ph306.preheader:                              ; preds = %231
  br i1 %min.iters.check481, label %.lr.ph306.preheader510, label %vector.ph482

.lr.ph306.preheader510:                           ; preds = %middle.block479, %.lr.ph306.preheader
  %indvars.iv385.ph = phi i64 [ 0, %.lr.ph306.preheader ], [ %n.vec484, %middle.block479 ]
  br label %.lr.ph306

vector.ph482:                                     ; preds = %.lr.ph306.preheader
  %broadcast.splatinsert492 = insertelement <2 x double> poison, double %239, i64 0
  %broadcast.splat493 = shufflevector <2 x double> %broadcast.splatinsert492, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body486

vector.body486:                                   ; preds = %vector.body486, %vector.ph482
  %index487 = phi i64 [ 0, %vector.ph482 ], [ %index.next494, %vector.body486 ]
  %245 = getelementptr inbounds [18 x [192 x double]], ptr %4, i64 0, i64 %indvars.iv390, i64 %index487
  %246 = getelementptr inbounds i8, ptr %245, i64 16
  %wide.load488 = load <2 x double>, ptr %245, align 16, !tbaa !15
  %wide.load489 = load <2 x double>, ptr %246, align 16, !tbaa !15
  %247 = getelementptr inbounds [192 x double], ptr %215, i64 0, i64 %index487
  %248 = getelementptr inbounds i8, ptr %247, i64 16
  %wide.load490 = load <2 x double>, ptr %247, align 8, !tbaa !15
  %wide.load491 = load <2 x double>, ptr %248, align 8, !tbaa !15
  %249 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load488, <2 x double> %broadcast.splat493, <2 x double> %wide.load490)
  %250 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load489, <2 x double> %broadcast.splat493, <2 x double> %wide.load491)
  store <2 x double> %249, ptr %247, align 8, !tbaa !15
  store <2 x double> %250, ptr %248, align 8, !tbaa !15
  %index.next494 = add nuw i64 %index487, 4
  %251 = icmp eq i64 %index.next494, %n.vec484
  br i1 %251, label %middle.block479, label %vector.body486, !llvm.loop !49

middle.block479:                                  ; preds = %vector.body486
  br i1 %cmp.n495, label %._crit_edge307, label %.lr.ph306.preheader510

._crit_edge307:                                   ; preds = %.lr.ph306, %middle.block479, %231
  %indvars.iv.next391 = add nsw i64 %indvars.iv390, 1
  %.not224.not = icmp slt i64 %indvars.iv390, %216
  br i1 %.not224.not, label %231, label %._crit_edge311, !llvm.loop !50

.lr.ph306:                                        ; preds = %.lr.ph306.preheader510, %.lr.ph306
  %indvars.iv385 = phi i64 [ %indvars.iv.next386, %.lr.ph306 ], [ %indvars.iv385.ph, %.lr.ph306.preheader510 ]
  %252 = getelementptr inbounds [18 x [192 x double]], ptr %4, i64 0, i64 %indvars.iv390, i64 %indvars.iv385
  %253 = load double, ptr %252, align 8, !tbaa !15
  %254 = getelementptr inbounds [192 x double], ptr %215, i64 0, i64 %indvars.iv385
  %255 = load double, ptr %254, align 8, !tbaa !15
  %256 = tail call double @llvm.fmuladd.f64(double %253, double %239, double %255)
  store double %256, ptr %254, align 8, !tbaa !15
  %indvars.iv.next386 = add nuw nsw i64 %indvars.iv385, 1
  %exitcond389.not = icmp eq i64 %indvars.iv.next386, %wide.trip.count388
  br i1 %exitcond389.not, label %._crit_edge307, label %.lr.ph306, !llvm.loop !51

257:                                              ; preds = %228
  %.not225 = icmp eq i32 %15, 0
  br i1 %.not225, label %263, label %258

258:                                              ; preds = %257
  %259 = uitofp nneg i32 %15 to double
  %260 = fmul double %229, %259
  %261 = load double, ptr %19, align 8, !tbaa !13
  %262 = fdiv double %261, %260
  store double %262, ptr %19, align 8, !tbaa !13
  br label %263

263:                                              ; preds = %258, %257
  %264 = load i32, ptr %20, align 4, !tbaa !14
  %265 = icmp sgt i32 %264, 0
  br i1 %265, label %.lr.ph315, label %._crit_edge316

.lr.ph315:                                        ; preds = %263
  %266 = getelementptr inbounds i8, ptr %2, i64 8
  %wide.trip.count395 = zext nneg i32 %264 to i64
  %min.iters.check498 = icmp eq i32 %264, 1
  br i1 %min.iters.check498, label %scalar.ph497.preheader, label %vector.ph499

scalar.ph497.preheader:                           ; preds = %middle.block496, %.lr.ph315
  %indvars.iv392.ph = phi i64 [ 0, %.lr.ph315 ], [ %n.vec501, %middle.block496 ]
  br label %scalar.ph497

vector.ph499:                                     ; preds = %.lr.ph315
  %n.vec501 = and i64 %wide.trip.count395, 2147483646
  %broadcast.splatinsert506 = insertelement <2 x double> poison, double %229, i64 0
  %broadcast.splat507 = shufflevector <2 x double> %broadcast.splatinsert506, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body503

vector.body503:                                   ; preds = %vector.body503, %vector.ph499
  %index504 = phi i64 [ 0, %vector.ph499 ], [ %index.next508, %vector.body503 ]
  %267 = getelementptr inbounds [192 x double], ptr %266, i64 0, i64 %index504
  %wide.load505 = load <2 x double>, ptr %267, align 8, !tbaa !15
  %268 = fdiv <2 x double> %wide.load505, %broadcast.splat507
  store <2 x double> %268, ptr %267, align 8, !tbaa !15
  %index.next508 = add nuw i64 %index504, 2
  %269 = icmp eq i64 %index.next508, %n.vec501
  br i1 %269, label %middle.block496, label %vector.body503, !llvm.loop !52

middle.block496:                                  ; preds = %vector.body503
  %cmp.n509 = icmp eq i64 %n.vec501, %wide.trip.count395
  br i1 %cmp.n509, label %._crit_edge316, label %scalar.ph497.preheader

._crit_edge316:                                   ; preds = %scalar.ph497, %middle.block496, %263
  %270 = uitofp nneg i32 %15 to double
  %271 = sub nsw i32 %79, %81
  %272 = sitofp i32 %271 to double
  %273 = tail call double @choose(double noundef %270, double noundef %272)
  %274 = load double, ptr %2, align 8, !tbaa !10
  %275 = fmul double %273, %274
  store double %275, ptr %2, align 8, !tbaa !10
  br label %279

scalar.ph497:                                     ; preds = %scalar.ph497.preheader, %scalar.ph497
  %indvars.iv392 = phi i64 [ %indvars.iv.next393, %scalar.ph497 ], [ %indvars.iv392.ph, %scalar.ph497.preheader ]
  %276 = getelementptr inbounds [192 x double], ptr %266, i64 0, i64 %indvars.iv392
  %277 = load double, ptr %276, align 8, !tbaa !15
  %278 = fdiv double %277, %229
  store double %278, ptr %276, align 8, !tbaa !15
  %indvars.iv.next393 = add nuw nsw i64 %indvars.iv392, 1
  %exitcond396.not = icmp eq i64 %indvars.iv.next393, %wide.trip.count395
  br i1 %exitcond396.not, label %._crit_edge316, label %scalar.ph497, !llvm.loop !53

279:                                              ; preds = %228, %._crit_edge316
  %.1 = phi i32 [ 0, %._crit_edge316 ], [ 3, %228 ]
  tail call void @permutation_set_deinit(ptr noundef nonnull @get_pmap.permutation_set) #6
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 27648, ptr nonnull %4) #6
  br label %280

280:                                              ; preds = %._crit_edge.thread, %17, %279, %74, %12
  %.4 = phi i32 [ %11, %12 ], [ 3, %17 ], [ 2, %74 ], [ %.1, %279 ], [ 3, %._crit_edge.thread ]
  ret i32 %.4
}

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

declare i32 @get_permutation_set(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @permutation_set_deinit(ptr noundef) local_unnamed_addr #2

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

declare i32 @mine_c(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !9, i64 2312}
!6 = !{!"Edge", !7, i64 0, !9, i64 768, !7, i64 772, !7, i64 1540, !9, i64 2308, !9, i64 2312, !7, i64 2316, !9, i64 3084}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"int", !7, i64 0}
!10 = !{!11, !12, i64 0}
!11 = !{!"ProbabilityMap", !12, i64 0, !7, i64 8, !7, i64 1544, !12, i64 3080}
!12 = !{!"double", !7, i64 0}
!13 = !{!11, !12, i64 3080}
!14 = !{!6, !9, i64 768}
!15 = !{!12, !12, i64 0}
!16 = !{!6, !9, i64 3084}
!17 = distinct !{!17, !18, !19, !20}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!"llvm.loop.isvectorized", i32 1}
!20 = !{!"llvm.loop.unroll.runtime.disable"}
!21 = !{!22, !9, i64 1556}
!22 = !{!"PermutationSet", !23, i64 0, !9, i64 8, !9, i64 12, !24, i64 16, !7, i64 20, !7, i64 788, !9, i64 1556}
!23 = !{!"any pointer", !7, i64 0}
!24 = !{!"_Bool", !7, i64 0}
!25 = distinct !{!25, !18, !20, !19}
!26 = !{!9, !9, i64 0}
!27 = !{!22, !23, i64 0}
!28 = distinct !{!28, !18}
!29 = distinct !{!29, !18}
!30 = !{!31, !9, i64 8}
!31 = !{!"Board", !9, i64 0, !9, i64 4, !9, i64 8, !9, i64 12, !7, i64 16, !7, i64 4112, !7, i64 5136, !24, i64 6160}
!32 = distinct !{!32, !18, !19, !20}
!33 = distinct !{!33, !18, !19, !20}
!34 = distinct !{!34, !18, !20, !19}
!35 = distinct !{!35, !18}
!36 = distinct !{!36, !18}
!37 = !{!38, !38, i64 0}
!38 = !{!"long", !7, i64 0}
!39 = distinct !{!39, !18}
!40 = distinct !{!40, !18, !19, !20}
!41 = distinct !{!41, !18, !20, !19}
!42 = distinct !{!42, !18}
!43 = distinct !{!43, !18}
!44 = distinct !{!44, !18, !20, !19}
!45 = distinct !{!45, !18, !19, !20}
!46 = distinct !{!46, !18}
!47 = distinct !{!47, !18, !20, !19}
!48 = distinct !{!48, !18}
!49 = distinct !{!49, !18, !19, !20}
!50 = distinct !{!50, !18}
!51 = distinct !{!51, !18, !20, !19}
!52 = distinct !{!52, !18, !19, !20}
!53 = distinct !{!53, !18, !20, !19}


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