; LLVM IR from stivalaa/EstimNetDirected :: src (equilibriumExpectation)

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

@.str.1 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [88 x i8], align 1
@__PRETTY_FUNCTION__.algorithm_EE = external hidden unnamed_addr constant [379 x i8], align 1

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

declare ptr @safe_malloc(i64 noundef) #1

declare ptr @safe_calloc(i64 noundef, i64 noundef) #1

declare double @arcCorrection(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

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

declare double @ifdSampler(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, double noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare double @tntSampler(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare double @basicSampler(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

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

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

; Function Attrs: nounwind uwtable
define dso_local void @algorithm_EE(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, i32 noundef %13, i32 noundef %14, i32 noundef %15, double noundef %16, double noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef %21, i32 noundef %22, i32 noundef %23, double noundef %24, i32 noundef %25, i32 noundef %26, i32 noundef %27, double noundef %28, double noundef %29, i32 noundef %30, i32 noundef %31, i32 noundef %32) #3 {
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca double, align 8
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca double, align 8
  %63 = alloca double, align 8
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca double, align 8
  %74 = alloca ptr, align 8
  %75 = alloca ptr, align 8
  %76 = alloca ptr, align 8
  %77 = alloca ptr, align 8
  %78 = alloca ptr, align 8
  %79 = alloca ptr, align 8
  %80 = alloca ptr, align 8
  %81 = alloca double, align 8
  %82 = alloca double, align 8
  %83 = alloca double, align 8
  store ptr %0, ptr %34, align 8, !tbaa !5
  store i32 %1, ptr %35, align 4, !tbaa !9
  store i32 %2, ptr %36, align 4, !tbaa !9
  store i32 %3, ptr %37, align 4, !tbaa !9
  store i32 %4, ptr %38, align 4, !tbaa !9
  store ptr %5, ptr %39, align 8, !tbaa !5
  store ptr %6, ptr %40, align 8, !tbaa !5
  store ptr %7, ptr %41, align 8, !tbaa !5
  store ptr %8, ptr %42, align 8, !tbaa !5
  store ptr %9, ptr %43, align 8, !tbaa !5
  store ptr %10, ptr %44, align 8, !tbaa !5
  store ptr %11, ptr %45, align 8, !tbaa !5
  store ptr %12, ptr %46, align 8, !tbaa !5
  store i32 %13, ptr %47, align 4, !tbaa !9
  store i32 %14, ptr %48, align 4, !tbaa !9
  store i32 %15, ptr %49, align 4, !tbaa !9
  store double %16, ptr %50, align 8, !tbaa !11
  store double %17, ptr %51, align 8, !tbaa !11
  store ptr %18, ptr %52, align 8, !tbaa !5
  store ptr %19, ptr %53, align 8, !tbaa !5
  store ptr %20, ptr %54, align 8, !tbaa !5
  store ptr %21, ptr %55, align 8, !tbaa !5
  store i32 %22, ptr %56, align 4, !tbaa !9
  store i32 %23, ptr %57, align 4, !tbaa !9
  store double %24, ptr %58, align 8, !tbaa !11
  store i32 %25, ptr %59, align 4, !tbaa !9
  store i32 %26, ptr %60, align 4, !tbaa !9
  store i32 %27, ptr %61, align 4, !tbaa !9
  store double %28, ptr %62, align 8, !tbaa !11
  store double %29, ptr %63, align 8, !tbaa !11
  store i32 %30, ptr %64, align 4, !tbaa !9
  store i32 %31, ptr %65, align 4, !tbaa !9
  store i32 %32, ptr %66, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #6
  store i32 0, ptr %70, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #6
  %84 = load i32, ptr %35, align 4, !tbaa !9
  %85 = zext i32 %84 to i64
  %86 = mul i64 %85, 8
  %87 = call ptr @safe_malloc(i64 noundef %86)
  store ptr %87, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #6
  %88 = load i32, ptr %35, align 4, !tbaa !9
  %89 = zext i32 %88 to i64
  %90 = mul i64 %89, 8
  %91 = call ptr @safe_malloc(i64 noundef %90)
  store ptr %91, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #6
  %92 = load i32, ptr %35, align 4, !tbaa !9
  %93 = zext i32 %92 to i64
  %94 = mul i64 %93, 8
  %95 = call ptr @safe_malloc(i64 noundef %94)
  store ptr %95, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #6
  %96 = load i32, ptr %35, align 4, !tbaa !9
  %97 = zext i32 %96 to i64
  %98 = mul i64 %97, 8
  %99 = call ptr @safe_malloc(i64 noundef %98)
  store ptr %99, ptr %77, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #6
  %100 = load i32, ptr %35, align 4, !tbaa !9
  %101 = zext i32 %100 to i64
  %102 = mul i64 %101, 8
  %103 = call ptr @safe_malloc(i64 noundef %102)
  store ptr %103, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #6
  %104 = load i32, ptr %35, align 4, !tbaa !9
  %105 = zext i32 %104 to i64
  %106 = call ptr @safe_calloc(i64 noundef %105, i64 noundef 8)
  store ptr %106, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #6
  %107 = load i32, ptr %35, align 4, !tbaa !9
  %108 = zext i32 %107 to i64
  %109 = mul i64 %108, 8
  %110 = call ptr @safe_malloc(i64 noundef %109)
  store ptr %110, ptr %80, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #6
  store double 0.000000e+00, ptr %83, align 8, !tbaa !11
  %111 = load i32, ptr %57, align 4, !tbaa !9
  %112 = icmp ne i32 %111, 0
  br i1 %112, label %113, label %120

113:                                              ; preds = %33
  %114 = load ptr, ptr %34, align 8, !tbaa !5
  %115 = load i32, ptr %59, align 4, !tbaa !9
  %116 = load i32, ptr %65, align 4, !tbaa !9
  %117 = load i32, ptr %60, align 4, !tbaa !9
  %118 = load i32, ptr %66, align 4, !tbaa !9
  %119 = call double @arcCorrection(ptr noundef %114, i32 noundef %115, i32 noundef %116, i32 noundef %117, i32 noundef %118)
  store double %119, ptr %81, align 8, !tbaa !11
  br label %120

120:                                              ; preds = %113, %33
  store i32 0, ptr %69, align 4, !tbaa !9
  br label %121

121:                                              ; preds = %134, %120
  %122 = load i32, ptr %69, align 4, !tbaa !9
  %123 = load i32, ptr %35, align 4, !tbaa !9
  %124 = icmp ult i32 %122, %123
  br i1 %124, label %125, label %137

125:                                              ; preds = %121
  %126 = load i32, ptr %48, align 4, !tbaa !9
  %127 = zext i32 %126 to i64
  %128 = mul i64 %127, 8
  %129 = call ptr @safe_malloc(i64 noundef %128)
  %130 = load ptr, ptr %80, align 8, !tbaa !5
  %131 = load i32, ptr %69, align 4, !tbaa !9
  %132 = zext i32 %131 to i64
  %133 = getelementptr inbounds ptr, ptr %130, i64 %132
  store ptr %129, ptr %133, align 8, !tbaa !5
  br label %134

134:                                              ; preds = %125
  %135 = load i32, ptr %69, align 4, !tbaa !9
  %136 = add i32 %135, 1
  store i32 %136, ptr %69, align 4, !tbaa !9
  br label %121, !llvm.loop !13

137:                                              ; preds = %121
  store i32 0, ptr %67, align 4, !tbaa !9
  br label %138

138:                                              ; preds = %481, %137
  %139 = load i32, ptr %67, align 4, !tbaa !9
  %140 = load i32, ptr %47, align 4, !tbaa !9
  %141 = icmp ult i32 %139, %140
  br i1 %141, label %142, label %484

142:                                              ; preds = %138
  store i32 0, ptr %68, align 4, !tbaa !9
  br label %143

143:                                              ; preds = %426, %142
  %144 = load i32, ptr %68, align 4, !tbaa !9
  %145 = load i32, ptr %48, align 4, !tbaa !9
  %146 = icmp ult i32 %144, %145
  br i1 %146, label %147, label %429

147:                                              ; preds = %143
  %148 = load i32, ptr %56, align 4, !tbaa !9
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %153, label %150

150:                                              ; preds = %147
  %151 = load i32, ptr %68, align 4, !tbaa !9
  %152 = icmp eq i32 %151, 0
  br i1 %152, label %153, label %160

153:                                              ; preds = %150, %147
  %154 = load ptr, ptr %54, align 8, !tbaa !5
  %155 = load i32, ptr %70, align 4, !tbaa !9
  %156 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %154, ptr noundef @.str.3, i32 noundef %155) #6
  %157 = load ptr, ptr %55, align 8, !tbaa !5
  %158 = load i32, ptr %70, align 4, !tbaa !9
  %159 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %157, ptr noundef @.str.3, i32 noundef %158) #6
  br label %160

160:                                              ; preds = %153, %150
  %161 = load i32, ptr %57, align 4, !tbaa !9
  %162 = icmp ne i32 %161, 0
  br i1 %162, label %163, label %206

163:                                              ; preds = %160
  %164 = load ptr, ptr %34, align 8, !tbaa !5
  %165 = load i32, ptr %35, align 4, !tbaa !9
  %166 = load i32, ptr %36, align 4, !tbaa !9
  %167 = load i32, ptr %37, align 4, !tbaa !9
  %168 = load i32, ptr %38, align 4, !tbaa !9
  %169 = load ptr, ptr %39, align 8, !tbaa !5
  %170 = load ptr, ptr %40, align 8, !tbaa !5
  %171 = load ptr, ptr %41, align 8, !tbaa !5
  %172 = load ptr, ptr %42, align 8, !tbaa !5
  %173 = load ptr, ptr %43, align 8, !tbaa !5
  %174 = load ptr, ptr %44, align 8, !tbaa !5
  %175 = load ptr, ptr %45, align 8, !tbaa !5
  %176 = load ptr, ptr %46, align 8, !tbaa !5
  %177 = load ptr, ptr %53, align 8, !tbaa !5
  %178 = load ptr, ptr %74, align 8, !tbaa !5
  %179 = load ptr, ptr %75, align 8, !tbaa !5
  %180 = load i32, ptr %49, align 4, !tbaa !9
  %181 = zext i32 %180 to i64
  %182 = load double, ptr %58, align 8, !tbaa !11
  %183 = load i32, ptr %59, align 4, !tbaa !9
  %184 = load i32, ptr %60, align 4, !tbaa !9
  %185 = load i32, ptr %65, align 4, !tbaa !9
  %186 = load i32, ptr %66, align 4, !tbaa !9
  %187 = call double @ifdSampler(ptr noundef %164, i32 noundef %165, i32 noundef %166, i32 noundef %167, i32 noundef %168, ptr noundef %169, ptr noundef %170, ptr noundef %171, ptr noundef %172, ptr noundef %173, ptr noundef %174, ptr noundef %175, ptr noundef %176, ptr noundef %177, ptr noundef %178, ptr noundef %179, i64 noundef %181, i32 noundef 1, double noundef %182, ptr noundef %82, ptr noundef %83, i32 noundef %183, i32 noundef %184, i32 noundef %185, i32 noundef %186)
  store double %187, ptr %71, align 8, !tbaa !11
  %188 = load i32, ptr %57, align 4, !tbaa !9
  %189 = icmp ne i32 %188, 0
  br i1 %189, label %190, label %205

190:                                              ; preds = %163
  %191 = load i32, ptr %56, align 4, !tbaa !9
  %192 = icmp ne i32 %191, 0
  br i1 %192, label %196, label %193

193:                                              ; preds = %190
  %194 = load i32, ptr %68, align 4, !tbaa !9
  %195 = icmp eq i32 %194, 0
  br i1 %195, label %196, label %205

196:                                              ; preds = %193, %190
  %197 = load ptr, ptr %55, align 8, !tbaa !5
  %198 = load double, ptr %82, align 8, !tbaa !11
  %199 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %197, ptr noundef @.str.1, double noundef %198) #6
  %200 = load ptr, ptr %54, align 8, !tbaa !5
  %201 = load double, ptr %83, align 8, !tbaa !11
  %202 = load double, ptr %81, align 8, !tbaa !11
  %203 = fsub double %201, %202
  %204 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %200, ptr noundef @.str.1, double noundef %203) #6
  br label %205

205:                                              ; preds = %196, %193, %163
  br label %258

206:                                              ; preds = %160
  %207 = load i32, ptr %64, align 4, !tbaa !9
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %209, label %233

209:                                              ; preds = %206
  %210 = load ptr, ptr %34, align 8, !tbaa !5
  %211 = load i32, ptr %35, align 4, !tbaa !9
  %212 = load i32, ptr %36, align 4, !tbaa !9
  %213 = load i32, ptr %37, align 4, !tbaa !9
  %214 = load i32, ptr %38, align 4, !tbaa !9
  %215 = load ptr, ptr %39, align 8, !tbaa !5
  %216 = load ptr, ptr %40, align 8, !tbaa !5
  %217 = load ptr, ptr %41, align 8, !tbaa !5
  %218 = load ptr, ptr %42, align 8, !tbaa !5
  %219 = load ptr, ptr %43, align 8, !tbaa !5
  %220 = load ptr, ptr %44, align 8, !tbaa !5
  %221 = load ptr, ptr %45, align 8, !tbaa !5
  %222 = load ptr, ptr %46, align 8, !tbaa !5
  %223 = load ptr, ptr %53, align 8, !tbaa !5
  %224 = load ptr, ptr %74, align 8, !tbaa !5
  %225 = load ptr, ptr %75, align 8, !tbaa !5
  %226 = load i32, ptr %49, align 4, !tbaa !9
  %227 = zext i32 %226 to i64
  %228 = load i32, ptr %59, align 4, !tbaa !9
  %229 = load i32, ptr %60, align 4, !tbaa !9
  %230 = load i32, ptr %65, align 4, !tbaa !9
  %231 = load i32, ptr %66, align 4, !tbaa !9
  %232 = call double @tntSampler(ptr noundef %210, i32 noundef %211, i32 noundef %212, i32 noundef %213, i32 noundef %214, ptr noundef %215, ptr noundef %216, ptr noundef %217, ptr noundef %218, ptr noundef %219, ptr noundef %220, ptr noundef %221, ptr noundef %222, ptr noundef %223, ptr noundef %224, ptr noundef %225, i64 noundef %227, i32 noundef 1, i32 noundef %228, i32 noundef %229, i32 noundef %230, i32 noundef %231)
  store double %232, ptr %71, align 8, !tbaa !11
  br label %257

233:                                              ; preds = %206
  %234 = load ptr, ptr %34, align 8, !tbaa !5
  %235 = load i32, ptr %35, align 4, !tbaa !9
  %236 = load i32, ptr %36, align 4, !tbaa !9
  %237 = load i32, ptr %37, align 4, !tbaa !9
  %238 = load i32, ptr %38, align 4, !tbaa !9
  %239 = load ptr, ptr %39, align 8, !tbaa !5
  %240 = load ptr, ptr %40, align 8, !tbaa !5
  %241 = load ptr, ptr %41, align 8, !tbaa !5
  %242 = load ptr, ptr %42, align 8, !tbaa !5
  %243 = load ptr, ptr %43, align 8, !tbaa !5
  %244 = load ptr, ptr %44, align 8, !tbaa !5
  %245 = load ptr, ptr %45, align 8, !tbaa !5
  %246 = load ptr, ptr %46, align 8, !tbaa !5
  %247 = load ptr, ptr %53, align 8, !tbaa !5
  %248 = load ptr, ptr %74, align 8, !tbaa !5
  %249 = load ptr, ptr %75, align 8, !tbaa !5
  %250 = load i32, ptr %49, align 4, !tbaa !9
  %251 = zext i32 %250 to i64
  %252 = load i32, ptr %59, align 4, !tbaa !9
  %253 = load i32, ptr %60, align 4, !tbaa !9
  %254 = load i32, ptr %65, align 4, !tbaa !9
  %255 = load i32, ptr %66, align 4, !tbaa !9
  %256 = call double @basicSampler(ptr noundef %234, i32 noundef %235, i32 noundef %236, i32 noundef %237, i32 noundef %238, ptr noundef %239, ptr noundef %240, ptr noundef %241, ptr noundef %242, ptr noundef %243, ptr noundef %244, ptr noundef %245, ptr noundef %246, ptr noundef %247, ptr noundef %248, ptr noundef %249, i64 noundef %251, i32 noundef 1, i32 noundef %252, i32 noundef %253, i32 noundef %254, i32 noundef %255)
  store double %256, ptr %71, align 8, !tbaa !11
  br label %257

257:                                              ; preds = %233, %209
  br label %258

258:                                              ; preds = %257, %205
  store i32 0, ptr %69, align 4, !tbaa !9
  br label %259

259:                                              ; preds = %408, %258
  %260 = load i32, ptr %69, align 4, !tbaa !9
  %261 = load i32, ptr %35, align 4, !tbaa !9
  %262 = icmp ult i32 %260, %261
  br i1 %262, label %263, label %411

263:                                              ; preds = %259
  %264 = load ptr, ptr %74, align 8, !tbaa !5
  %265 = load i32, ptr %69, align 4, !tbaa !9
  %266 = zext i32 %265 to i64
  %267 = getelementptr inbounds double, ptr %264, i64 %266
  %268 = load double, ptr %267, align 8, !tbaa !11
  %269 = load ptr, ptr %75, align 8, !tbaa !5
  %270 = load i32, ptr %69, align 4, !tbaa !9
  %271 = zext i32 %270 to i64
  %272 = getelementptr inbounds double, ptr %269, i64 %271
  %273 = load double, ptr %272, align 8, !tbaa !11
  %274 = fsub double %268, %273
  %275 = load ptr, ptr %79, align 8, !tbaa !5
  %276 = load i32, ptr %69, align 4, !tbaa !9
  %277 = zext i32 %276 to i64
  %278 = getelementptr inbounds double, ptr %275, i64 %277
  %279 = load double, ptr %278, align 8, !tbaa !11
  %280 = fadd double %279, %274
  store double %280, ptr %278, align 8, !tbaa !11
  %281 = load i32, ptr %61, align 4, !tbaa !9
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %283, label %319

283:                                              ; preds = %263
  %284 = load ptr, ptr %79, align 8, !tbaa !5
  %285 = load i32, ptr %69, align 4, !tbaa !9
  %286 = zext i32 %285 to i64
  %287 = getelementptr inbounds double, ptr %284, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !11
  %289 = fcmp olt double %288, 0.000000e+00
  %290 = zext i1 %289 to i64
  %291 = select i1 %289, i32 1, i32 -1
  %292 = sitofp i32 %291 to double
  %293 = load double, ptr %62, align 8, !tbaa !11
  %294 = fmul double %292, %293
  %295 = load ptr, ptr %53, align 8, !tbaa !5
  %296 = load i32, ptr %69, align 4, !tbaa !9
  %297 = zext i32 %296 to i64
  %298 = getelementptr inbounds double, ptr %295, i64 %297
  %299 = load double, ptr %298, align 8, !tbaa !11
  %300 = call double @llvm.fabs.f64(double %299)
  %301 = load double, ptr %63, align 8, !tbaa !11
  %302 = fcmp ogt double %300, %301
  br i1 %302, label %303, label %310

303:                                              ; preds = %283
  %304 = load ptr, ptr %53, align 8, !tbaa !5
  %305 = load i32, ptr %69, align 4, !tbaa !9
  %306 = zext i32 %305 to i64
  %307 = getelementptr inbounds double, ptr %304, i64 %306
  %308 = load double, ptr %307, align 8, !tbaa !11
  %309 = call double @llvm.fabs.f64(double %308)
  br label %312

310:                                              ; preds = %283
  %311 = load double, ptr %63, align 8, !tbaa !11
  br label %312

312:                                              ; preds = %310, %303
  %313 = phi double [ %309, %303 ], [ %311, %310 ]
  %314 = fmul double %294, %313
  %315 = load ptr, ptr %78, align 8, !tbaa !5
  %316 = load i32, ptr %69, align 4, !tbaa !9
  %317 = zext i32 %316 to i64
  %318 = getelementptr inbounds double, ptr %315, i64 %317
  store double %314, ptr %318, align 8, !tbaa !11
  br label %362

319:                                              ; preds = %263
  %320 = load ptr, ptr %52, align 8, !tbaa !5
  %321 = load i32, ptr %69, align 4, !tbaa !9
  %322 = zext i32 %321 to i64
  %323 = getelementptr inbounds double, ptr %320, i64 %322
  %324 = load double, ptr %323, align 8, !tbaa !11
  %325 = load double, ptr %50, align 8, !tbaa !11
  %326 = fmul double %324, %325
  %327 = load ptr, ptr %77, align 8, !tbaa !5
  %328 = load i32, ptr %69, align 4, !tbaa !9
  %329 = zext i32 %328 to i64
  %330 = getelementptr inbounds double, ptr %327, i64 %329
  store double %326, ptr %330, align 8, !tbaa !11
  %331 = load ptr, ptr %79, align 8, !tbaa !5
  %332 = load i32, ptr %69, align 4, !tbaa !9
  %333 = zext i32 %332 to i64
  %334 = getelementptr inbounds double, ptr %331, i64 %333
  %335 = load double, ptr %334, align 8, !tbaa !11
  %336 = fcmp olt double %335, 0.000000e+00
  %337 = zext i1 %336 to i64
  %338 = select i1 %336, i32 1, i32 -1
  %339 = sitofp i32 %338 to double
  %340 = load ptr, ptr %77, align 8, !tbaa !5
  %341 = load i32, ptr %69, align 4, !tbaa !9
  %342 = zext i32 %341 to i64
  %343 = getelementptr inbounds double, ptr %340, i64 %342
  %344 = load double, ptr %343, align 8, !tbaa !11
  %345 = fmul double %339, %344
  %346 = load ptr, ptr %79, align 8, !tbaa !5
  %347 = load i32, ptr %69, align 4, !tbaa !9
  %348 = zext i32 %347 to i64
  %349 = getelementptr inbounds double, ptr %346, i64 %348
  %350 = load double, ptr %349, align 8, !tbaa !11
  %351 = fmul double %345, %350
  %352 = load ptr, ptr %79, align 8, !tbaa !5
  %353 = load i32, ptr %69, align 4, !tbaa !9
  %354 = zext i32 %353 to i64
  %355 = getelementptr inbounds double, ptr %352, i64 %354
  %356 = load double, ptr %355, align 8, !tbaa !11
  %357 = fmul double %351, %356
  %358 = load ptr, ptr %78, align 8, !tbaa !5
  %359 = load i32, ptr %69, align 4, !tbaa !9
  %360 = zext i32 %359 to i64
  %361 = getelementptr inbounds double, ptr %358, i64 %360
  store double %357, ptr %361, align 8, !tbaa !11
  br label %362

362:                                              ; preds = %319, %312
  %363 = load ptr, ptr %78, align 8, !tbaa !5
  %364 = load i32, ptr %69, align 4, !tbaa !9
  %365 = zext i32 %364 to i64
  %366 = getelementptr inbounds double, ptr %363, i64 %365
  %367 = load double, ptr %366, align 8, !tbaa !11
  %368 = load ptr, ptr %53, align 8, !tbaa !5
  %369 = load i32, ptr %69, align 4, !tbaa !9
  %370 = zext i32 %369 to i64
  %371 = getelementptr inbounds double, ptr %368, i64 %370
  %372 = load double, ptr %371, align 8, !tbaa !11
  %373 = fadd double %372, %367
  store double %373, ptr %371, align 8, !tbaa !11
  %374 = load i32, ptr %56, align 4, !tbaa !9
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %379, label %376

376:                                              ; preds = %362
  %377 = load i32, ptr %68, align 4, !tbaa !9
  %378 = icmp eq i32 %377, 0
  br i1 %378, label %379, label %394

379:                                              ; preds = %376, %362
  %380 = load ptr, ptr %55, align 8, !tbaa !5
  %381 = load ptr, ptr %79, align 8, !tbaa !5
  %382 = load i32, ptr %69, align 4, !tbaa !9
  %383 = zext i32 %382 to i64
  %384 = getelementptr inbounds double, ptr %381, i64 %383
  %385 = load double, ptr %384, align 8, !tbaa !11
  %386 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %380, ptr noundef @.str.1, double noundef %385) #6
  %387 = load ptr, ptr %54, align 8, !tbaa !5
  %388 = load ptr, ptr %53, align 8, !tbaa !5
  %389 = load i32, ptr %69, align 4, !tbaa !9
  %390 = zext i32 %389 to i64
  %391 = getelementptr inbounds double, ptr %388, i64 %390
  %392 = load double, ptr %391, align 8, !tbaa !11
  %393 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %387, ptr noundef @.str.1, double noundef %392) #6
  br label %394

394:                                              ; preds = %379, %376
  %395 = load ptr, ptr %53, align 8, !tbaa !5
  %396 = load i32, ptr %69, align 4, !tbaa !9
  %397 = zext i32 %396 to i64
  %398 = getelementptr inbounds double, ptr %395, i64 %397
  %399 = load double, ptr %398, align 8, !tbaa !11
  %400 = load ptr, ptr %80, align 8, !tbaa !5
  %401 = load i32, ptr %69, align 4, !tbaa !9
  %402 = zext i32 %401 to i64
  %403 = getelementptr inbounds ptr, ptr %400, i64 %402
  %404 = load ptr, ptr %403, align 8, !tbaa !5
  %405 = load i32, ptr %68, align 4, !tbaa !9
  %406 = zext i32 %405 to i64
  %407 = getelementptr inbounds double, ptr %404, i64 %406
  store double %399, ptr %407, align 8, !tbaa !11
  br label %408

408:                                              ; preds = %394
  %409 = load i32, ptr %69, align 4, !tbaa !9
  %410 = add i32 %409, 1
  store i32 %410, ptr %69, align 4, !tbaa !9
  br label %259, !llvm.loop !15

411:                                              ; preds = %259
  %412 = load i32, ptr %56, align 4, !tbaa !9
  %413 = icmp ne i32 %412, 0
  br i1 %413, label %417, label %414

414:                                              ; preds = %411
  %415 = load i32, ptr %68, align 4, !tbaa !9
  %416 = icmp eq i32 %415, 0
  br i1 %416, label %417, label %423

417:                                              ; preds = %414, %411
  %418 = load ptr, ptr %54, align 8, !tbaa !5
  %419 = load double, ptr %71, align 8, !tbaa !11
  %420 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %418, ptr noundef @.str.2, double noundef %419) #6
  %421 = load ptr, ptr %55, align 8, !tbaa !5
  %422 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %421, ptr noundef @.str.4) #6
  br label %423

423:                                              ; preds = %417, %414
  %424 = load i32, ptr %70, align 4, !tbaa !9
  %425 = add i32 %424, 1
  store i32 %425, ptr %70, align 4, !tbaa !9
  br label %426

426:                                              ; preds = %423
  %427 = load i32, ptr %68, align 4, !tbaa !9
  %428 = add i32 %427, 1
  store i32 %428, ptr %68, align 4, !tbaa !9
  br label %143, !llvm.loop !16

429:                                              ; preds = %143
  %430 = load i32, ptr %61, align 4, !tbaa !9
  %431 = icmp ne i32 %430, 0
  br i1 %431, label %476, label %432

432:                                              ; preds = %429
  store i32 0, ptr %69, align 4, !tbaa !9
  br label %433

433:                                              ; preds = %472, %432
  %434 = load i32, ptr %69, align 4, !tbaa !9
  %435 = load i32, ptr %35, align 4, !tbaa !9
  %436 = icmp ult i32 %434, %435
  br i1 %436, label %437, label %475

437:                                              ; preds = %433
  %438 = load ptr, ptr %80, align 8, !tbaa !5
  %439 = load i32, ptr %69, align 4, !tbaa !9
  %440 = zext i32 %439 to i64
  %441 = getelementptr inbounds ptr, ptr %438, i64 %440
  %442 = load ptr, ptr %441, align 8, !tbaa !5
  %443 = load i32, ptr %48, align 4, !tbaa !9
  %444 = call double @mean_and_sd(ptr noundef %442, i32 noundef %443, ptr noundef %73)
  store double %444, ptr %72, align 8, !tbaa !11
  %445 = load double, ptr %72, align 8, !tbaa !11
  %446 = call double @llvm.fabs.f64(double %445)
  %447 = fcmp olt double %446, 1.000000e-01
  br i1 %447, label %448, label %449

448:                                              ; preds = %437
  store double 1.000000e-01, ptr %72, align 8, !tbaa !11
  br label %449

449:                                              ; preds = %448, %437
  %450 = load double, ptr %73, align 8, !tbaa !11
  %451 = fcmp oge double %450, 0.000000e+00
  br i1 %451, label %452, label %453

452:                                              ; preds = %449
  br label %454

453:                                              ; preds = %449
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.6, i32 noundef 506, ptr noundef @__PRETTY_FUNCTION__.algorithm_EE) #7
  unreachable

454:                                              ; preds = %452
  %455 = load double, ptr %73, align 8, !tbaa !11
  %456 = fcmp ogt double %455, 1.000000e-10
  br i1 %456, label %457, label %471

457:                                              ; preds = %454
  %458 = load double, ptr %51, align 8, !tbaa !11
  %459 = load double, ptr %73, align 8, !tbaa !11
  %460 = load double, ptr %72, align 8, !tbaa !11
  %461 = call double @llvm.fabs.f64(double %460)
  %462 = fdiv double %459, %461
  %463 = fdiv double %458, %462
  %464 = call double @sqrt(double noundef %463) #6
  %465 = load ptr, ptr %52, align 8, !tbaa !5
  %466 = load i32, ptr %69, align 4, !tbaa !9
  %467 = zext i32 %466 to i64
  %468 = getelementptr inbounds double, ptr %465, i64 %467
  %469 = load double, ptr %468, align 8, !tbaa !11
  %470 = fmul double %469, %464
  store double %470, ptr %468, align 8, !tbaa !11
  br label %471

471:                                              ; preds = %457, %454
  br label %472

472:                                              ; preds = %471
  %473 = load i32, ptr %69, align 4, !tbaa !9
  %474 = add i32 %473, 1
  store i32 %474, ptr %69, align 4, !tbaa !9
  br label %433, !llvm.loop !17

475:                                              ; preds = %433
  br label %476

476:                                              ; preds = %475, %429
  %477 = load ptr, ptr %55, align 8, !tbaa !5
  %478 = call i32 @fflush(ptr noundef %477)
  %479 = load ptr, ptr %54, align 8, !tbaa !5
  %480 = call i32 @fflush(ptr noundef %479)
  br label %481

481:                                              ; preds = %476
  %482 = load i32, ptr %67, align 4, !tbaa !9
  %483 = add i32 %482, 1
  store i32 %483, ptr %67, align 4, !tbaa !9
  br label %138, !llvm.loop !18

484:                                              ; preds = %138
  store i32 0, ptr %69, align 4, !tbaa !9
  br label %485

485:                                              ; preds = %495, %484
  %486 = load i32, ptr %69, align 4, !tbaa !9
  %487 = load i32, ptr %35, align 4, !tbaa !9
  %488 = icmp ult i32 %486, %487
  br i1 %488, label %489, label %498

489:                                              ; preds = %485
  %490 = load ptr, ptr %80, align 8, !tbaa !5
  %491 = load i32, ptr %69, align 4, !tbaa !9
  %492 = zext i32 %491 to i64
  %493 = getelementptr inbounds ptr, ptr %490, i64 %492
  %494 = load ptr, ptr %493, align 8, !tbaa !5
  call void @free(ptr noundef %494) #6
  br label %495

495:                                              ; preds = %489
  %496 = load i32, ptr %69, align 4, !tbaa !9
  %497 = add i32 %496, 1
  store i32 %497, ptr %69, align 4, !tbaa !9
  br label %485, !llvm.loop !19

498:                                              ; preds = %485
  %499 = load ptr, ptr %80, align 8, !tbaa !5
  call void @free(ptr noundef %499) #6
  %500 = load ptr, ptr %78, align 8, !tbaa !5
  call void @free(ptr noundef %500) #6
  %501 = load ptr, ptr %77, align 8, !tbaa !5
  call void @free(ptr noundef %501) #6
  %502 = load ptr, ptr %79, align 8, !tbaa !5
  call void @free(ptr noundef %502) #6
  %503 = load ptr, ptr %76, align 8, !tbaa !5
  call void @free(ptr noundef %503) #6
  %504 = load ptr, ptr %75, align 8, !tbaa !5
  call void @free(ptr noundef %504) #6
  %505 = load ptr, ptr %74, align 8, !tbaa !5
  call void @free(ptr noundef %505) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #6
  ret void
}

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

declare double @mean_and_sd(ptr noundef, i32 noundef, ptr noundef) #1

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #5

; Function Attrs: nounwind
declare double @sqrt(double noundef) #2

declare i32 @fflush(ptr noundef) #1

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

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

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


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

@.str.1 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [88 x i8], align 1
@__PRETTY_FUNCTION__.algorithm_EE = external hidden unnamed_addr constant [379 x i8], align 1

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

declare ptr @safe_malloc(i64 noundef) local_unnamed_addr #1

declare ptr @safe_calloc(i64 noundef, i64 noundef) local_unnamed_addr #1

declare double @arcCorrection(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

declare double @ifdSampler(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, double noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare double @tntSampler(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare double @basicSampler(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

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

; Function Attrs: nounwind uwtable
define dso_local void @algorithm_EE(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, i32 noundef %13, i32 noundef %14, i32 noundef %15, double noundef %16, double noundef %17, ptr nocapture noundef %18, ptr noundef %19, ptr nocapture noundef %20, ptr nocapture noundef %21, i32 noundef %22, i32 noundef %23, double noundef %24, i32 noundef %25, i32 noundef %26, i32 noundef %27, double noundef %28, double noundef %29, i32 noundef %30, i32 noundef %31, i32 noundef %32) local_unnamed_addr #4 {
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #8
  %37 = zext i32 %1 to i64
  %38 = shl nuw nsw i64 %37, 3
  %39 = tail call ptr @safe_malloc(i64 noundef %38) #8
  %40 = tail call ptr @safe_malloc(i64 noundef %38) #8
  %41 = tail call ptr @safe_malloc(i64 noundef %38) #8
  %42 = tail call ptr @safe_malloc(i64 noundef %38) #8
  %43 = tail call ptr @safe_malloc(i64 noundef %38) #8
  %44 = tail call ptr @safe_calloc(i64 noundef %37, i64 noundef 8) #8
  %45 = tail call ptr @safe_malloc(i64 noundef %38) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #8
  store double 0.000000e+00, ptr %36, align 8, !tbaa !5
  %.not = icmp eq i32 %23, 0
  br i1 %.not, label %48, label %46

46:                                               ; preds = %33
  %47 = tail call double @arcCorrection(ptr noundef %0, i32 noundef %25, i32 noundef %31, i32 noundef %26, i32 noundef %32) #8
  br label %48

48:                                               ; preds = %46, %33
  %.0 = phi double [ %47, %46 ], [ undef, %33 ]
  %.not237 = icmp eq i32 %1, 0
  br i1 %.not237, label %.preheader212, label %.lr.ph

.lr.ph:                                           ; preds = %48
  %49 = zext i32 %14 to i64
  %50 = shl nuw nsw i64 %49, 3
  br label %184

.preheader212:                                    ; preds = %184, %48
  %.not238 = icmp eq i32 %13, 0
  br i1 %.not238, label %.preheader, label %.preheader211.lr.ph

.preheader211.lr.ph:                              ; preds = %.preheader212
  %.not239 = icmp eq i32 %14, 0
  %51 = icmp ne i32 %22, 0
  %52 = zext i32 %15 to i64
  %.not207 = icmp eq i32 %30, 0
  %.not208 = icmp eq i32 %27, 0
  %53 = fneg double %28
  %.not206 = icmp ne i32 %27, 0
  br i1 %.not239, label %.preheader211.lr.ph.split, label %.preheader211.us.preheader

.preheader211.us.preheader:                       ; preds = %.preheader211.lr.ph
  %wide.trip.count262 = zext i32 %14 to i64
  %brmerge = or i1 %.not206, %.not237
  br label %.preheader211.us

.preheader211.us:                                 ; preds = %.preheader211.us.preheader, %.loopexit.us
  %.0194223.us = phi i32 [ %56, %.loopexit.us ], [ 0, %.preheader211.us.preheader ]
  %.0197222.us = phi i32 [ %98, %.loopexit.us ], [ 0, %.preheader211.us.preheader ]
  br label %75

.loopexit.us:                                     ; preds = %74, %._crit_edge219.us
  %54 = call i32 @fflush(ptr noundef %21)
  %55 = call i32 @fflush(ptr noundef %20)
  %56 = add nuw i32 %.0194223.us, 1
  %exitcond269.not = icmp eq i32 %56, %13
  br i1 %exitcond269.not, label %.preheader, label %.preheader211.us, !llvm.loop !9

.lr.ph221.us:                                     ; preds = %._crit_edge219.us, %74
  %indvars.iv264 = phi i64 [ %indvars.iv.next265, %74 ], [ 0, %._crit_edge219.us ]
  %57 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv264
  %58 = load ptr, ptr %57, align 8, !tbaa !11
  %59 = call double @mean_and_sd(ptr noundef %58, i32 noundef %14, ptr noundef nonnull %34) #8
  %60 = call double @llvm.fabs.f64(double %59)
  %61 = fcmp olt double %60, 1.000000e-01
  %62 = load double, ptr %34, align 8, !tbaa !5
  %63 = fcmp ult double %62, 0.000000e+00
  br i1 %63, label %.split.us, label %64

64:                                               ; preds = %.lr.ph221.us
  %65 = fcmp ogt double %62, 1.000000e-10
  br i1 %65, label %66, label %74

66:                                               ; preds = %64
  %67 = select i1 %61, double 1.000000e-01, double %60
  %68 = fdiv double %62, %67
  %69 = fdiv double %17, %68
  %70 = call double @sqrt(double noundef %69) #8
  %71 = getelementptr inbounds double, ptr %18, i64 %indvars.iv264
  %72 = load double, ptr %71, align 8, !tbaa !5
  %73 = fmul double %70, %72
  store double %73, ptr %71, align 8, !tbaa !5
  br label %74

74:                                               ; preds = %66, %64
  %indvars.iv.next265 = add nuw nsw i64 %indvars.iv264, 1
  %exitcond268.not = icmp eq i64 %indvars.iv.next265, %37
  br i1 %exitcond268.not, label %.loopexit.us, label %.lr.ph221.us, !llvm.loop !13

75:                                               ; preds = %.preheader211.us, %97
  %indvars.iv259 = phi i64 [ 0, %.preheader211.us ], [ %indvars.iv.next260, %97 ]
  %.1198216.us = phi i32 [ %.0197222.us, %.preheader211.us ], [ %98, %97 ]
  %76 = icmp eq i64 %indvars.iv259, 0
  %or.cond.us = or i1 %51, %76
  br i1 %or.cond.us, label %78, label %.thread.us

.thread.us:                                       ; preds = %75
  br i1 %.not, label %88, label %.thread209.us

.thread209.us:                                    ; preds = %.thread.us
  %77 = call double @ifdSampler(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %19, ptr noundef %39, ptr noundef %40, i64 noundef %52, i32 noundef 1, double noundef %24, ptr noundef nonnull %35, ptr noundef nonnull %36, i32 noundef %25, i32 noundef %26, i32 noundef %31, i32 noundef %32) #8
  br label %93

78:                                               ; preds = %75
  %79 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %20, ptr noundef nonnull @.str.3, i32 noundef %.1198216.us) #8
  %80 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %21, ptr noundef nonnull @.str.3, i32 noundef %.1198216.us) #8
  br i1 %.not, label %88, label %81

81:                                               ; preds = %78
  %82 = call double @ifdSampler(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %19, ptr noundef %39, ptr noundef %40, i64 noundef %52, i32 noundef 1, double noundef %24, ptr noundef nonnull %35, ptr noundef nonnull %36, i32 noundef %25, i32 noundef %26, i32 noundef %31, i32 noundef %32) #8
  %83 = load double, ptr %35, align 8, !tbaa !5
  %84 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %21, ptr noundef nonnull @.str.1, double noundef %83) #8
  %85 = load double, ptr %36, align 8, !tbaa !5
  %86 = fsub double %85, %.0
  %87 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %20, ptr noundef nonnull @.str.1, double noundef %86) #8
  br label %93

88:                                               ; preds = %78, %.thread.us
  br i1 %.not207, label %91, label %89

89:                                               ; preds = %88
  %90 = call double @tntSampler(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %19, ptr noundef %39, ptr noundef %40, i64 noundef %52, i32 noundef 1, i32 noundef %25, i32 noundef %26, i32 noundef %31, i32 noundef %32) #8
  br label %93

91:                                               ; preds = %88
  %92 = call double @basicSampler(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %19, ptr noundef %39, ptr noundef %40, i64 noundef %52, i32 noundef 1, i32 noundef %25, i32 noundef %26, i32 noundef %31, i32 noundef %32) #8
  br label %93

93:                                               ; preds = %91, %89, %81, %.thread209.us
  %.0199.us = phi double [ %82, %81 ], [ %90, %89 ], [ %92, %91 ], [ %77, %.thread209.us ]
  br i1 %.not237, label %._crit_edge.us, label %.lr.ph215.us

._crit_edge.us:                                   ; preds = %122, %154, %93
  br i1 %or.cond.us, label %94, label %97

94:                                               ; preds = %._crit_edge.us
  %95 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %20, ptr noundef nonnull @.str.2, double noundef %.0199.us) #8
  %96 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %21, ptr noundef nonnull @.str.4) #8
  br label %97

97:                                               ; preds = %94, %._crit_edge.us
  %98 = add i32 %.1198216.us, 1
  %indvars.iv.next260 = add nuw nsw i64 %indvars.iv259, 1
  %exitcond263.not = icmp eq i64 %indvars.iv.next260, %wide.trip.count262
  br i1 %exitcond263.not, label %._crit_edge219.us, label %75, !llvm.loop !14

.lr.ph215.split.us226:                            ; preds = %.lr.ph215.us, %122
  %indvars.iv249 = phi i64 [ %indvars.iv.next250, %122 ], [ 0, %.lr.ph215.us ]
  %99 = getelementptr inbounds double, ptr %39, i64 %indvars.iv249
  %100 = load double, ptr %99, align 8, !tbaa !5
  %101 = getelementptr inbounds double, ptr %40, i64 %indvars.iv249
  %102 = load double, ptr %101, align 8, !tbaa !5
  %103 = fsub double %100, %102
  %104 = getelementptr inbounds double, ptr %44, i64 %indvars.iv249
  %105 = load double, ptr %104, align 8, !tbaa !5
  %106 = fadd double %105, %103
  store double %106, ptr %104, align 8, !tbaa !5
  %107 = fcmp olt double %106, 0.000000e+00
  %108 = select i1 %107, double %28, double %53
  %109 = getelementptr inbounds double, ptr %19, i64 %indvars.iv249
  %110 = load double, ptr %109, align 8, !tbaa !5
  %111 = call double @llvm.fabs.f64(double %110)
  %112 = fcmp ogt double %111, %29
  %..us = select i1 %112, double %111, double %29
  %113 = fmul double %108, %..us
  %114 = getelementptr inbounds double, ptr %43, i64 %indvars.iv249
  store double %113, ptr %114, align 8, !tbaa !5
  %115 = load double, ptr %109, align 8, !tbaa !5
  %116 = fadd double %113, %115
  store double %116, ptr %109, align 8, !tbaa !5
  br i1 %or.cond.us, label %117, label %122

117:                                              ; preds = %.lr.ph215.split.us226
  %118 = load double, ptr %104, align 8, !tbaa !5
  %119 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %21, ptr noundef nonnull @.str.1, double noundef %118) #8
  %120 = load double, ptr %109, align 8, !tbaa !5
  %121 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %20, ptr noundef nonnull @.str.1, double noundef %120) #8
  %.pre = load double, ptr %109, align 8, !tbaa !5
  br label %122

122:                                              ; preds = %117, %.lr.ph215.split.us226
  %123 = phi double [ %.pre, %117 ], [ %116, %.lr.ph215.split.us226 ]
  %124 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv249
  %125 = load ptr, ptr %124, align 8, !tbaa !11
  %126 = getelementptr inbounds double, ptr %125, i64 %indvars.iv259
  store double %123, ptr %126, align 8, !tbaa !5
  %indvars.iv.next250 = add nuw nsw i64 %indvars.iv249, 1
  %exitcond253.not = icmp eq i64 %indvars.iv.next250, %37
  br i1 %exitcond253.not, label %._crit_edge.us, label %.lr.ph215.split.us226, !llvm.loop !15

.lr.ph215.us:                                     ; preds = %93
  br i1 %.not208, label %.lr.ph215.split.us.us, label %.lr.ph215.split.us226

.lr.ph215.split.us.us:                            ; preds = %.lr.ph215.us, %154
  %indvars.iv254 = phi i64 [ %indvars.iv.next255, %154 ], [ 0, %.lr.ph215.us ]
  %127 = getelementptr inbounds double, ptr %39, i64 %indvars.iv254
  %128 = load double, ptr %127, align 8, !tbaa !5
  %129 = getelementptr inbounds double, ptr %40, i64 %indvars.iv254
  %130 = load double, ptr %129, align 8, !tbaa !5
  %131 = fsub double %128, %130
  %132 = getelementptr inbounds double, ptr %44, i64 %indvars.iv254
  %133 = load double, ptr %132, align 8, !tbaa !5
  %134 = fadd double %133, %131
  store double %134, ptr %132, align 8, !tbaa !5
  %135 = getelementptr inbounds double, ptr %18, i64 %indvars.iv254
  %136 = load double, ptr %135, align 8, !tbaa !5
  %137 = fmul double %136, %16
  %138 = getelementptr inbounds double, ptr %42, i64 %indvars.iv254
  store double %137, ptr %138, align 8, !tbaa !5
  %139 = load double, ptr %132, align 8, !tbaa !5
  %140 = fcmp olt double %139, 0.000000e+00
  %141 = fneg double %137
  %142 = select i1 %140, double %137, double %141
  %143 = fmul double %139, %142
  %144 = fmul double %139, %143
  %145 = getelementptr inbounds double, ptr %43, i64 %indvars.iv254
  store double %144, ptr %145, align 8, !tbaa !5
  %146 = getelementptr inbounds double, ptr %19, i64 %indvars.iv254
  %147 = load double, ptr %146, align 8, !tbaa !5
  %148 = fadd double %144, %147
  store double %148, ptr %146, align 8, !tbaa !5
  br i1 %or.cond.us, label %149, label %154

149:                                              ; preds = %.lr.ph215.split.us.us
  %150 = load double, ptr %132, align 8, !tbaa !5
  %151 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %21, ptr noundef nonnull @.str.1, double noundef %150) #8
  %152 = load double, ptr %146, align 8, !tbaa !5
  %153 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %20, ptr noundef nonnull @.str.1, double noundef %152) #8
  %.pre283 = load double, ptr %146, align 8, !tbaa !5
  br label %154

154:                                              ; preds = %149, %.lr.ph215.split.us.us
  %155 = phi double [ %.pre283, %149 ], [ %148, %.lr.ph215.split.us.us ]
  %156 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv254
  %157 = load ptr, ptr %156, align 8, !tbaa !11
  %158 = getelementptr inbounds double, ptr %157, i64 %indvars.iv259
  store double %155, ptr %158, align 8, !tbaa !5
  %indvars.iv.next255 = add nuw nsw i64 %indvars.iv254, 1
  %exitcond258.not = icmp eq i64 %indvars.iv.next255, %37
  br i1 %exitcond258.not, label %._crit_edge.us, label %.lr.ph215.split.us.us, !llvm.loop !15

._crit_edge219.us:                                ; preds = %97
  br i1 %brmerge, label %.loopexit.us, label %.lr.ph221.us

.preheader211.lr.ph.split:                        ; preds = %.preheader211.lr.ph
  br i1 %.not206, label %.preheader211, label %.preheader211.lr.ph.split.split.us

.preheader211.lr.ph.split.split.us:               ; preds = %.preheader211.lr.ph.split
  br i1 %.not237, label %.preheader211.us227, label %.preheader211.us227.us

.preheader211.us227.us:                           ; preds = %.preheader211.lr.ph.split.split.us, %..loopexit_crit_edge.us233.us
  %.0194223.us228.us = phi i32 [ %180, %..loopexit_crit_edge.us233.us ], [ 0, %.preheader211.lr.ph.split.split.us ]
  br label %159

159:                                              ; preds = %.preheader211.us227.us, %177
  %indvars.iv270 = phi i64 [ 0, %.preheader211.us227.us ], [ %indvars.iv.next271, %177 ]
  %160 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv270
  %161 = load ptr, ptr %160, align 8, !tbaa !11
  %162 = call double @mean_and_sd(ptr noundef %161, i32 noundef 0, ptr noundef nonnull %34) #8
  %163 = call double @llvm.fabs.f64(double %162)
  %164 = fcmp olt double %163, 1.000000e-01
  %165 = load double, ptr %34, align 8, !tbaa !5
  %166 = fcmp ult double %165, 0.000000e+00
  br i1 %166, label %.split.us, label %167

167:                                              ; preds = %159
  %168 = fcmp ogt double %165, 1.000000e-10
  br i1 %168, label %169, label %177

169:                                              ; preds = %167
  %170 = select i1 %164, double 1.000000e-01, double %163
  %171 = fdiv double %165, %170
  %172 = fdiv double %17, %171
  %173 = call double @sqrt(double noundef %172) #8
  %174 = getelementptr inbounds double, ptr %18, i64 %indvars.iv270
  %175 = load double, ptr %174, align 8, !tbaa !5
  %176 = fmul double %173, %175
  store double %176, ptr %174, align 8, !tbaa !5
  br label %177

177:                                              ; preds = %169, %167
  %indvars.iv.next271 = add nuw nsw i64 %indvars.iv270, 1
  %exitcond274.not = icmp eq i64 %indvars.iv.next271, %37
  br i1 %exitcond274.not, label %..loopexit_crit_edge.us233.us, label %159, !llvm.loop !13

..loopexit_crit_edge.us233.us:                    ; preds = %177
  %178 = call i32 @fflush(ptr noundef %21)
  %179 = call i32 @fflush(ptr noundef %20)
  %180 = add nuw i32 %.0194223.us228.us, 1
  %exitcond275.not = icmp eq i32 %180, %13
  br i1 %exitcond275.not, label %.preheader, label %.preheader211.us227.us, !llvm.loop !9

.preheader211.us227:                              ; preds = %.preheader211.lr.ph.split.split.us, %.preheader211.us227
  %.0194223.us228 = phi i32 [ %183, %.preheader211.us227 ], [ 0, %.preheader211.lr.ph.split.split.us ]
  %181 = tail call i32 @fflush(ptr noundef %21)
  %182 = tail call i32 @fflush(ptr noundef %20)
  %183 = add nuw i32 %.0194223.us228, 1
  %exitcond276.not = icmp eq i32 %183, %13
  br i1 %exitcond276.not, label %.preheader, label %.preheader211.us227, !llvm.loop !9

184:                                              ; preds = %.lr.ph, %184
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %184 ]
  %185 = tail call ptr @safe_malloc(i64 noundef %50) #8
  %186 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv
  store ptr %185, ptr %186, align 8, !tbaa !11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %37
  br i1 %exitcond.not, label %.preheader212, label %184, !llvm.loop !16

.preheader211:                                    ; preds = %.preheader211.lr.ph.split, %.preheader211
  %.0194223 = phi i32 [ %189, %.preheader211 ], [ 0, %.preheader211.lr.ph.split ]
  %187 = tail call i32 @fflush(ptr noundef %21)
  %188 = tail call i32 @fflush(ptr noundef %20)
  %189 = add nuw i32 %.0194223, 1
  %exitcond277.not = icmp eq i32 %189, %13
  br i1 %exitcond277.not, label %.preheader, label %.preheader211, !llvm.loop !9

.preheader:                                       ; preds = %.loopexit.us, %..loopexit_crit_edge.us233.us, %.preheader211.us227, %.preheader211, %.preheader212
  br i1 %.not237, label %._crit_edge, label %.lr.ph235

.split.us:                                        ; preds = %.lr.ph221.us, %159
  call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, i32 noundef 506, ptr noundef nonnull @__PRETTY_FUNCTION__.algorithm_EE) #9
  unreachable

.lr.ph235:                                        ; preds = %.preheader, %.lr.ph235
  %indvars.iv278 = phi i64 [ %indvars.iv.next279, %.lr.ph235 ], [ 0, %.preheader ]
  %190 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv278
  %191 = load ptr, ptr %190, align 8, !tbaa !11
  call void @free(ptr noundef %191) #8
  %indvars.iv.next279 = add nuw nsw i64 %indvars.iv278, 1
  %exitcond282.not = icmp eq i64 %indvars.iv.next279, %37
  br i1 %exitcond282.not, label %._crit_edge, label %.lr.ph235, !llvm.loop !17

._crit_edge:                                      ; preds = %.lr.ph235, %.preheader
  call void @free(ptr noundef %45) #8
  call void @free(ptr noundef %43) #8
  call void @free(ptr noundef %42) #8
  call void @free(ptr noundef %44) #8
  call void @free(ptr noundef %41) #8
  call void @free(ptr noundef %40) #8
  call void @free(ptr noundef %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #8
  ret void
}

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

declare double @mean_and_sd(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #7

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { noreturn nounwind }

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

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


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