; LLVM IR from cfd-rg-solver/FVM-RG-Solver :: src/riemannsolver.ll (ZN16ExacRiemanSolver16exacRiemanSolverE10macroParamS0_d)

; 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.macroParam = type { %struct.Mixture, %"class.std::vector.5", %"class.std::vector.5", double, double, double, double, double, double, double, double, %"class.std::__cxx11::basic_string" }
%struct.Mixture = type <{ %"class.std::vector", i32, [4 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<MixtureComponent, std::allocator<MixtureComponent>>::_Vector_impl" }
%"struct.std::_Vector_base<MixtureComponent, std::allocator<MixtureComponent>>::_Vector_impl" = type { %"struct.std::_Vector_base<MixtureComponent, std::allocator<MixtureComponent>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MixtureComponent, std::allocator<MixtureComponent>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16ExacRiemanSolver16exacRiemanSolverE10macroParamS0_d(ptr dead_on_unwind noalias writable sret(%struct.macroParam) align 8 %0, ptr noundef nonnull align 8 dereferenceable(88) %1, ptr noundef %2, ptr noundef %3, double noundef %4) #4 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca i1, align 1
  %15 = alloca %struct.Mixture, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca i32, align 4
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca i8, align 1
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  store ptr %0, ptr %6, align 8
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store double %4, ptr %10, align 8, !tbaa !9
  %43 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  store double 4.000000e+01, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  store double 1.000000e-08, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  store double 0.000000e+00, ptr %13, align 8, !tbaa !9
  store i1 false, ptr %14, align 1
  %44 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 0
  call void @_ZN7MixtureC2ERKS_(ptr noundef nonnull align 8 dereferenceable(28) %15, ptr noundef nonnull align 8 dereferenceable(28) %44)
  invoke void @_ZN10macroParamC2E7Mixture(ptr noundef nonnull align 8 dereferenceable(176) %0, ptr noundef %15)
          to label %45 unwind label %156

45:                                               ; preds = %5
  call void @_ZN7MixtureD2Ev(ptr noundef nonnull align 8 dereferenceable(28) %15) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %46 = load double, ptr %10, align 8, !tbaa !9
  %47 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %48 = load double, ptr %47, align 8, !tbaa !11
  %49 = fmul double %46, %48
  %50 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %51 = load double, ptr %50, align 8, !tbaa !26
  %52 = fdiv double %49, %51
  %53 = call double @sqrt(double noundef %52) #6
  store double %53, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %54 = load double, ptr %10, align 8, !tbaa !9
  %55 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %56 = load double, ptr %55, align 8, !tbaa !11
  %57 = fmul double %54, %56
  %58 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %59 = load double, ptr %58, align 8, !tbaa !26
  %60 = fdiv double %57, %59
  %61 = call double @sqrt(double noundef %60) #6
  store double %61, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %62 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %63 = load double, ptr %62, align 8, !tbaa !11
  %64 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %65 = load double, ptr %64, align 8, !tbaa !11
  %66 = fadd double %63, %65
  %67 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %68 = load double, ptr %67, align 8, !tbaa !27
  %69 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %70 = load double, ptr %69, align 8, !tbaa !27
  %71 = fsub double %68, %70
  %72 = fmul double 1.250000e-01, %71
  %73 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %74 = load double, ptr %73, align 8, !tbaa !26
  %75 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %76 = load double, ptr %75, align 8, !tbaa !26
  %77 = fadd double %74, %76
  %78 = fmul double %72, %77
  %79 = load double, ptr %18, align 8, !tbaa !9
  %80 = load double, ptr %19, align 8, !tbaa !9
  %81 = fadd double %79, %80
  %82 = fmul double %78, %81
  %83 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %66, double %82)
  store double %83, ptr %20, align 8, !tbaa !9
  %84 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %85 unwind label %160

85:                                               ; preds = %45
  %86 = load double, ptr %84, align 8, !tbaa !9
  store double %86, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %87 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %88 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %89 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef nonnull align 8 dereferenceable(8) %88)
          to label %90 unwind label %164

90:                                               ; preds = %85
  %91 = load double, ptr %89, align 8, !tbaa !9
  store double %91, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %92 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %93 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %94 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %92, ptr noundef nonnull align 8 dereferenceable(8) %93)
          to label %95 unwind label %168

95:                                               ; preds = %90
  %96 = load double, ptr %94, align 8, !tbaa !9
  store double %96, ptr %22, align 8, !tbaa !9
  %97 = load double, ptr %20, align 8, !tbaa !9
  %98 = load double, ptr %22, align 8, !tbaa !9
  %99 = fcmp ogt double %97, %98
  br i1 %99, label %100, label %176

100:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %101 = load double, ptr %10, align 8, !tbaa !9
  %102 = fadd double %101, 1.000000e+00
  %103 = fdiv double 2.000000e+00, %102
  %104 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %105 = load double, ptr %104, align 8, !tbaa !26
  %106 = fdiv double %103, %105
  %107 = load double, ptr %20, align 8, !tbaa !9
  %108 = load double, ptr %10, align 8, !tbaa !9
  %109 = fsub double %108, 1.000000e+00
  %110 = load double, ptr %10, align 8, !tbaa !9
  %111 = fadd double %110, 1.000000e+00
  %112 = fdiv double %109, %111
  %113 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %114 = load double, ptr %113, align 8, !tbaa !11
  %115 = call double @llvm.fmuladd.f64(double %112, double %114, double %107)
  %116 = fdiv double %106, %115
  %117 = call double @sqrt(double noundef %116) #6
  store double %117, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %118 = load double, ptr %10, align 8, !tbaa !9
  %119 = fadd double %118, 1.000000e+00
  %120 = fdiv double 2.000000e+00, %119
  %121 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %122 = load double, ptr %121, align 8, !tbaa !26
  %123 = fdiv double %120, %122
  %124 = load double, ptr %20, align 8, !tbaa !9
  %125 = load double, ptr %10, align 8, !tbaa !9
  %126 = fsub double %125, 1.000000e+00
  %127 = load double, ptr %10, align 8, !tbaa !9
  %128 = fadd double %127, 1.000000e+00
  %129 = fdiv double %126, %128
  %130 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %131 = load double, ptr %130, align 8, !tbaa !11
  %132 = call double @llvm.fmuladd.f64(double %129, double %131, double %124)
  %133 = fdiv double %123, %132
  %134 = call double @sqrt(double noundef %133) #6
  store double %134, ptr %24, align 8, !tbaa !9
  %135 = load double, ptr %23, align 8, !tbaa !9
  %136 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %137 = load double, ptr %136, align 8, !tbaa !11
  %138 = load double, ptr %24, align 8, !tbaa !9
  %139 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %140 = load double, ptr %139, align 8, !tbaa !11
  %141 = fmul double %138, %140
  %142 = call double @llvm.fmuladd.f64(double %135, double %137, double %141)
  %143 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %144 = load double, ptr %143, align 8, !tbaa !27
  %145 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %146 = load double, ptr %145, align 8, !tbaa !27
  %147 = fsub double %144, %146
  %148 = fadd double %142, %147
  %149 = load double, ptr %23, align 8, !tbaa !9
  %150 = load double, ptr %24, align 8, !tbaa !9
  %151 = fadd double %149, %150
  %152 = fdiv double %148, %151
  store double %152, ptr %20, align 8, !tbaa !9
  %153 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %154 unwind label %172

154:                                              ; preds = %100
  %155 = load double, ptr %153, align 8, !tbaa !9
  store double %155, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %216

156:                                              ; preds = %5
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %16, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %17, align 4
  call void @_ZN7MixtureD2Ev(ptr noundef nonnull align 8 dereferenceable(28) %15) #6
  br label %837

160:                                              ; preds = %45
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %16, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %17, align 4
  br label %834

164:                                              ; preds = %85
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %16, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %17, align 4
  br label %833

168:                                              ; preds = %90
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %16, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %17, align 4
  br label %832

172:                                              ; preds = %100
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %16, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %832

176:                                              ; preds = %95
  %177 = load double, ptr %20, align 8, !tbaa !9
  %178 = load double, ptr %21, align 8, !tbaa !9
  %179 = fcmp olt double %177, %178
  br i1 %179, label %180, label %215

180:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %181 = load double, ptr %10, align 8, !tbaa !9
  %182 = fsub double %181, 1.000000e+00
  %183 = load double, ptr %10, align 8, !tbaa !9
  %184 = fmul double 2.000000e+00, %183
  %185 = fdiv double %182, %184
  store double %185, ptr %25, align 8, !tbaa !9
  %186 = load double, ptr %18, align 8, !tbaa !9
  %187 = load double, ptr %19, align 8, !tbaa !9
  %188 = fadd double %186, %187
  %189 = load double, ptr %10, align 8, !tbaa !9
  %190 = fsub double %189, 1.000000e+00
  %191 = fmul double 5.000000e-01, %190
  %192 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %193 = load double, ptr %192, align 8, !tbaa !27
  %194 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %195 = load double, ptr %194, align 8, !tbaa !27
  %196 = fsub double %193, %195
  %197 = call double @llvm.fmuladd.f64(double %191, double %196, double %188)
  %198 = load double, ptr %18, align 8, !tbaa !9
  %199 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %200 = load double, ptr %199, align 8, !tbaa !11
  %201 = load double, ptr %25, align 8, !tbaa !9
  %202 = call double @pow(double noundef %200, double noundef %201) #6
  %203 = fdiv double %198, %202
  %204 = load double, ptr %19, align 8, !tbaa !9
  %205 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %206 = load double, ptr %205, align 8, !tbaa !11
  %207 = load double, ptr %25, align 8, !tbaa !9
  %208 = call double @pow(double noundef %206, double noundef %207) #6
  %209 = fdiv double %204, %208
  %210 = fadd double %203, %209
  %211 = fdiv double %197, %210
  %212 = load double, ptr %25, align 8, !tbaa !9
  %213 = fdiv double 1.000000e+00, %212
  %214 = call double @pow(double noundef %211, double noundef %213) #6
  store double %214, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  br label %215

215:                                              ; preds = %180, %176
  br label %216

216:                                              ; preds = %215, %154
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  store double 0.000000e+00, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  store double 0.000000e+00, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  store double 0.000000e+00, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  store double 1.000000e+00, ptr %29, align 8, !tbaa !9
  br label %217

217:                                              ; preds = %438, %216
  %218 = load double, ptr %29, align 8, !tbaa !9
  %219 = load double, ptr %11, align 8, !tbaa !9
  %220 = fcmp olt double %218, %219
  br i1 %220, label %222, label %221

221:                                              ; preds = %217
  store i32 2, ptr %30, align 4
  br label %441

222:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %223 = load double, ptr %10, align 8, !tbaa !9
  %224 = fadd double %223, 1.000000e+00
  %225 = fdiv double 2.000000e+00, %224
  %226 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %227 = load double, ptr %226, align 8, !tbaa !26
  %228 = fdiv double %225, %227
  %229 = load double, ptr %20, align 8, !tbaa !9
  %230 = load double, ptr %10, align 8, !tbaa !9
  %231 = fsub double %230, 1.000000e+00
  %232 = load double, ptr %10, align 8, !tbaa !9
  %233 = fadd double %232, 1.000000e+00
  %234 = fdiv double %231, %233
  %235 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %236 = load double, ptr %235, align 8, !tbaa !11
  %237 = call double @llvm.fmuladd.f64(double %234, double %236, double %229)
  %238 = fdiv double %228, %237
  %239 = call double @sqrt(double noundef %238) #6
  store double %239, ptr %31, align 8, !tbaa !9
  %240 = load double, ptr %20, align 8, !tbaa !9
  %241 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %242 = load double, ptr %241, align 8, !tbaa !11
  %243 = fcmp ole double %240, %242
  br i1 %243, label %244, label %262

244:                                              ; preds = %222
  %245 = load double, ptr %10, align 8, !tbaa !9
  %246 = fsub double %245, 1.000000e+00
  %247 = fdiv double 2.000000e+00, %246
  %248 = load double, ptr %18, align 8, !tbaa !9
  %249 = fmul double %247, %248
  %250 = load double, ptr %20, align 8, !tbaa !9
  %251 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %252 = load double, ptr %251, align 8, !tbaa !11
  %253 = fdiv double %250, %252
  %254 = load double, ptr %10, align 8, !tbaa !9
  %255 = fsub double %254, 1.000000e+00
  %256 = load double, ptr %10, align 8, !tbaa !9
  %257 = fmul double 2.000000e+00, %256
  %258 = fdiv double %255, %257
  %259 = call double @pow(double noundef %253, double noundef %258) #6
  %260 = fsub double %259, 1.000000e+00
  %261 = fmul double %249, %260
  store double %261, ptr %26, align 8, !tbaa !9
  br label %269

262:                                              ; preds = %222
  %263 = load double, ptr %20, align 8, !tbaa !9
  %264 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %265 = load double, ptr %264, align 8, !tbaa !11
  %266 = fsub double %263, %265
  %267 = load double, ptr %31, align 8, !tbaa !9
  %268 = fmul double %266, %267
  store double %268, ptr %26, align 8, !tbaa !9
  br label %269

269:                                              ; preds = %262, %244
  %270 = load double, ptr %20, align 8, !tbaa !9
  %271 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %272 = load double, ptr %271, align 8, !tbaa !11
  %273 = fcmp ole double %270, %272
  br i1 %273, label %274, label %291

274:                                              ; preds = %269
  %275 = load double, ptr %20, align 8, !tbaa !9
  %276 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %277 = load double, ptr %276, align 8, !tbaa !11
  %278 = fdiv double %275, %277
  %279 = load double, ptr %10, align 8, !tbaa !9
  %280 = fadd double %279, 1.000000e+00
  %281 = fneg double %280
  %282 = load double, ptr %10, align 8, !tbaa !9
  %283 = fmul double 2.000000e+00, %282
  %284 = fdiv double %281, %283
  %285 = call double @pow(double noundef %278, double noundef %284) #6
  %286 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %287 = load double, ptr %286, align 8, !tbaa !26
  %288 = load double, ptr %18, align 8, !tbaa !9
  %289 = fmul double %287, %288
  %290 = fdiv double %285, %289
  store double %290, ptr %28, align 8, !tbaa !9
  br label %310

291:                                              ; preds = %269
  %292 = load double, ptr %31, align 8, !tbaa !9
  %293 = load double, ptr %20, align 8, !tbaa !9
  %294 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %295 = load double, ptr %294, align 8, !tbaa !11
  %296 = fsub double %293, %295
  %297 = fmul double 5.000000e-01, %296
  %298 = load double, ptr %20, align 8, !tbaa !9
  %299 = load double, ptr %10, align 8, !tbaa !9
  %300 = fsub double %299, 1.000000e+00
  %301 = load double, ptr %10, align 8, !tbaa !9
  %302 = fadd double %301, 1.000000e+00
  %303 = fdiv double %300, %302
  %304 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %305 = load double, ptr %304, align 8, !tbaa !11
  %306 = call double @llvm.fmuladd.f64(double %303, double %305, double %298)
  %307 = fdiv double %297, %306
  %308 = fsub double 1.000000e+00, %307
  %309 = fmul double %292, %308
  store double %309, ptr %28, align 8, !tbaa !9
  br label %310

310:                                              ; preds = %291, %274
  %311 = load double, ptr %10, align 8, !tbaa !9
  %312 = fadd double %311, 1.000000e+00
  %313 = fdiv double 2.000000e+00, %312
  %314 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %315 = load double, ptr %314, align 8, !tbaa !26
  %316 = fdiv double %313, %315
  %317 = load double, ptr %20, align 8, !tbaa !9
  %318 = load double, ptr %10, align 8, !tbaa !9
  %319 = fsub double %318, 1.000000e+00
  %320 = load double, ptr %10, align 8, !tbaa !9
  %321 = fadd double %320, 1.000000e+00
  %322 = fdiv double %319, %321
  %323 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %324 = load double, ptr %323, align 8, !tbaa !11
  %325 = call double @llvm.fmuladd.f64(double %322, double %324, double %317)
  %326 = fdiv double %316, %325
  %327 = call double @sqrt(double noundef %326) #6
  store double %327, ptr %31, align 8, !tbaa !9
  %328 = load double, ptr %20, align 8, !tbaa !9
  %329 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %330 = load double, ptr %329, align 8, !tbaa !11
  %331 = fcmp ole double %328, %330
  br i1 %331, label %332, label %350

332:                                              ; preds = %310
  %333 = load double, ptr %10, align 8, !tbaa !9
  %334 = fsub double %333, 1.000000e+00
  %335 = fdiv double 2.000000e+00, %334
  %336 = load double, ptr %19, align 8, !tbaa !9
  %337 = fmul double %335, %336
  %338 = load double, ptr %20, align 8, !tbaa !9
  %339 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %340 = load double, ptr %339, align 8, !tbaa !11
  %341 = fdiv double %338, %340
  %342 = load double, ptr %10, align 8, !tbaa !9
  %343 = fsub double %342, 1.000000e+00
  %344 = load double, ptr %10, align 8, !tbaa !9
  %345 = fmul double 2.000000e+00, %344
  %346 = fdiv double %343, %345
  %347 = call double @pow(double noundef %341, double noundef %346) #6
  %348 = fsub double %347, 1.000000e+00
  %349 = fmul double %337, %348
  store double %349, ptr %27, align 8, !tbaa !9
  br label %357

350:                                              ; preds = %310
  %351 = load double, ptr %20, align 8, !tbaa !9
  %352 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %353 = load double, ptr %352, align 8, !tbaa !11
  %354 = fsub double %351, %353
  %355 = load double, ptr %31, align 8, !tbaa !9
  %356 = fmul double %354, %355
  store double %356, ptr %27, align 8, !tbaa !9
  br label %357

357:                                              ; preds = %350, %332
  %358 = load double, ptr %20, align 8, !tbaa !9
  %359 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %360 = load double, ptr %359, align 8, !tbaa !11
  %361 = fcmp ole double %358, %360
  br i1 %361, label %362, label %381

362:                                              ; preds = %357
  %363 = load double, ptr %28, align 8, !tbaa !9
  %364 = load double, ptr %20, align 8, !tbaa !9
  %365 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %366 = load double, ptr %365, align 8, !tbaa !11
  %367 = fdiv double %364, %366
  %368 = load double, ptr %10, align 8, !tbaa !9
  %369 = fadd double %368, 1.000000e+00
  %370 = fneg double %369
  %371 = load double, ptr %10, align 8, !tbaa !9
  %372 = fmul double 2.000000e+00, %371
  %373 = fdiv double %370, %372
  %374 = call double @pow(double noundef %367, double noundef %373) #6
  %375 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %376 = load double, ptr %375, align 8, !tbaa !26
  %377 = load double, ptr %19, align 8, !tbaa !9
  %378 = fmul double %376, %377
  %379 = fdiv double %374, %378
  %380 = fadd double %363, %379
  store double %380, ptr %28, align 8, !tbaa !9
  br label %401

381:                                              ; preds = %357
  %382 = load double, ptr %28, align 8, !tbaa !9
  %383 = load double, ptr %31, align 8, !tbaa !9
  %384 = load double, ptr %20, align 8, !tbaa !9
  %385 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %386 = load double, ptr %385, align 8, !tbaa !11
  %387 = fsub double %384, %386
  %388 = fmul double 5.000000e-01, %387
  %389 = load double, ptr %20, align 8, !tbaa !9
  %390 = load double, ptr %10, align 8, !tbaa !9
  %391 = fsub double %390, 1.000000e+00
  %392 = load double, ptr %10, align 8, !tbaa !9
  %393 = fadd double %392, 1.000000e+00
  %394 = fdiv double %391, %393
  %395 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %396 = load double, ptr %395, align 8, !tbaa !11
  %397 = call double @llvm.fmuladd.f64(double %394, double %396, double %389)
  %398 = fdiv double %388, %397
  %399 = fsub double 1.000000e+00, %398
  %400 = call double @llvm.fmuladd.f64(double %383, double %399, double %382)
  store double %400, ptr %28, align 8, !tbaa !9
  br label %401

401:                                              ; preds = %381, %362
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %402 = load double, ptr %20, align 8, !tbaa !9
  %403 = load double, ptr %26, align 8, !tbaa !9
  %404 = load double, ptr %27, align 8, !tbaa !9
  %405 = fadd double %403, %404
  %406 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %407 = load double, ptr %406, align 8, !tbaa !27
  %408 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %409 = load double, ptr %408, align 8, !tbaa !27
  %410 = fsub double %407, %409
  %411 = fsub double %405, %410
  %412 = load double, ptr %28, align 8, !tbaa !9
  %413 = fdiv double %411, %412
  %414 = fsub double %402, %413
  store double %414, ptr %32, align 8, !tbaa !9
  %415 = load double, ptr %32, align 8, !tbaa !9
  %416 = load double, ptr %20, align 8, !tbaa !9
  %417 = fsub double %415, %416
  %418 = call double @llvm.fabs.f64(double %417)
  %419 = load double, ptr %32, align 8, !tbaa !9
  %420 = load double, ptr %20, align 8, !tbaa !9
  %421 = fadd double %419, %420
  %422 = invoke noundef double @_ZSt3absd(double noundef %421)
          to label %423 unwind label %429

423:                                              ; preds = %401
  %424 = fmul double 5.000000e-01, %422
  %425 = fdiv double %418, %424
  %426 = load double, ptr %12, align 8, !tbaa !9
  %427 = fcmp olt double %425, %426
  br i1 %427, label %428, label %433

428:                                              ; preds = %423
  store i32 2, ptr %30, align 4
  br label %435

429:                                              ; preds = %401
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %16, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %832

433:                                              ; preds = %423
  %434 = load double, ptr %32, align 8, !tbaa !9
  store double %434, ptr %20, align 8, !tbaa !9
  store i32 0, ptr %30, align 4
  br label %435

435:                                              ; preds = %433, %428
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  %436 = load i32, ptr %30, align 4
  switch i32 %436, label %441 [
    i32 0, label %437
  ]

437:                                              ; preds = %435
  br label %438

438:                                              ; preds = %437
  %439 = load double, ptr %29, align 8, !tbaa !9
  %440 = fadd double %439, 1.000000e+00
  store double %440, ptr %29, align 8, !tbaa !9
  br label %217, !llvm.loop !28

441:                                              ; preds = %435, %221
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %442

442:                                              ; preds = %441
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %443 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %444 = load double, ptr %443, align 8, !tbaa !27
  %445 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %446 = load double, ptr %445, align 8, !tbaa !27
  %447 = fadd double %444, %446
  %448 = load double, ptr %27, align 8, !tbaa !9
  %449 = load double, ptr %26, align 8, !tbaa !9
  %450 = fsub double %448, %449
  %451 = fmul double 5.000000e-01, %450
  %452 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %447, double %451)
  store double %452, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %453 = load double, ptr %20, align 8, !tbaa !9
  %454 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %455 = load double, ptr %454, align 8, !tbaa !11
  %456 = fcmp oge double %453, %455
  br i1 %456, label %457, label %506

457:                                              ; preds = %442
  %458 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %459 = load double, ptr %458, align 8, !tbaa !26
  %460 = load double, ptr %20, align 8, !tbaa !9
  %461 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %462 = load double, ptr %461, align 8, !tbaa !11
  %463 = fdiv double %460, %462
  %464 = load double, ptr %10, align 8, !tbaa !9
  %465 = fsub double %464, 1.000000e+00
  %466 = load double, ptr %10, align 8, !tbaa !9
  %467 = fadd double %466, 1.000000e+00
  %468 = fdiv double %465, %467
  %469 = fadd double %463, %468
  %470 = fmul double %459, %469
  %471 = load double, ptr %10, align 8, !tbaa !9
  %472 = fsub double %471, 1.000000e+00
  %473 = load double, ptr %10, align 8, !tbaa !9
  %474 = fadd double %473, 1.000000e+00
  %475 = fdiv double %472, %474
  %476 = load double, ptr %20, align 8, !tbaa !9
  %477 = fmul double %475, %476
  %478 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %479 = load double, ptr %478, align 8, !tbaa !11
  %480 = fdiv double %477, %479
  %481 = fadd double %480, 1.000000e+00
  %482 = fdiv double %470, %481
  store double %482, ptr %34, align 8, !tbaa !9
  %483 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %484 = load double, ptr %483, align 8, !tbaa !27
  %485 = load double, ptr %18, align 8, !tbaa !9
  %486 = load double, ptr %10, align 8, !tbaa !9
  %487 = fadd double %486, 1.000000e+00
  %488 = load double, ptr %10, align 8, !tbaa !9
  %489 = fmul double 2.000000e+00, %488
  %490 = fdiv double %487, %489
  %491 = load double, ptr %20, align 8, !tbaa !9
  %492 = fmul double %490, %491
  %493 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %494 = load double, ptr %493, align 8, !tbaa !11
  %495 = fdiv double %492, %494
  %496 = load double, ptr %10, align 8, !tbaa !9
  %497 = fsub double %496, 1.000000e+00
  %498 = load double, ptr %10, align 8, !tbaa !9
  %499 = fmul double 2.000000e+00, %498
  %500 = fdiv double %497, %499
  %501 = fadd double %495, %500
  %502 = call double @sqrt(double noundef %501) #6
  %503 = fneg double %485
  %504 = call double @llvm.fmuladd.f64(double %503, double %502, double %484)
  store double %504, ptr %35, align 8, !tbaa !9
  %505 = load double, ptr %35, align 8, !tbaa !9
  store double %505, ptr %36, align 8, !tbaa !9
  br label %529

506:                                              ; preds = %442
  %507 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %508 = load double, ptr %507, align 8, !tbaa !26
  %509 = load double, ptr %20, align 8, !tbaa !9
  %510 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %511 = load double, ptr %510, align 8, !tbaa !11
  %512 = fdiv double %509, %511
  %513 = load double, ptr %10, align 8, !tbaa !9
  %514 = fdiv double 1.000000e+00, %513
  %515 = call double @pow(double noundef %512, double noundef %514) #6
  %516 = fmul double %508, %515
  store double %516, ptr %34, align 8, !tbaa !9
  %517 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %518 = load double, ptr %517, align 8, !tbaa !27
  %519 = load double, ptr %18, align 8, !tbaa !9
  %520 = fsub double %518, %519
  store double %520, ptr %36, align 8, !tbaa !9
  %521 = load double, ptr %33, align 8, !tbaa !9
  %522 = load double, ptr %10, align 8, !tbaa !9
  %523 = load double, ptr %20, align 8, !tbaa !9
  %524 = fmul double %522, %523
  %525 = load double, ptr %34, align 8, !tbaa !9
  %526 = fdiv double %524, %525
  %527 = call double @sqrt(double noundef %526) #6
  %528 = fsub double %521, %527
  store double %528, ptr %35, align 8, !tbaa !9
  br label %529

529:                                              ; preds = %506, %457
  %530 = load double, ptr %20, align 8, !tbaa !9
  %531 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %532 = load double, ptr %531, align 8, !tbaa !11
  %533 = fcmp oge double %530, %532
  br i1 %533, label %534, label %582

534:                                              ; preds = %529
  %535 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %536 = load double, ptr %535, align 8, !tbaa !26
  %537 = load double, ptr %20, align 8, !tbaa !9
  %538 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %539 = load double, ptr %538, align 8, !tbaa !11
  %540 = fdiv double %537, %539
  %541 = load double, ptr %10, align 8, !tbaa !9
  %542 = fsub double %541, 1.000000e+00
  %543 = load double, ptr %10, align 8, !tbaa !9
  %544 = fadd double %543, 1.000000e+00
  %545 = fdiv double %542, %544
  %546 = fadd double %540, %545
  %547 = fmul double %536, %546
  %548 = load double, ptr %10, align 8, !tbaa !9
  %549 = fsub double %548, 1.000000e+00
  %550 = load double, ptr %10, align 8, !tbaa !9
  %551 = fadd double %550, 1.000000e+00
  %552 = fdiv double %549, %551
  %553 = load double, ptr %20, align 8, !tbaa !9
  %554 = fmul double %552, %553
  %555 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %556 = load double, ptr %555, align 8, !tbaa !11
  %557 = fdiv double %554, %556
  %558 = fadd double %557, 1.000000e+00
  %559 = fdiv double %547, %558
  store double %559, ptr %37, align 8, !tbaa !9
  %560 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %561 = load double, ptr %560, align 8, !tbaa !27
  %562 = load double, ptr %19, align 8, !tbaa !9
  %563 = load double, ptr %10, align 8, !tbaa !9
  %564 = fadd double %563, 1.000000e+00
  %565 = load double, ptr %10, align 8, !tbaa !9
  %566 = fmul double 2.000000e+00, %565
  %567 = fdiv double %564, %566
  %568 = load double, ptr %20, align 8, !tbaa !9
  %569 = fmul double %567, %568
  %570 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %571 = load double, ptr %570, align 8, !tbaa !11
  %572 = fdiv double %569, %571
  %573 = load double, ptr %10, align 8, !tbaa !9
  %574 = fsub double %573, 1.000000e+00
  %575 = load double, ptr %10, align 8, !tbaa !9
  %576 = fmul double 2.000000e+00, %575
  %577 = fdiv double %574, %576
  %578 = fadd double %572, %577
  %579 = call double @sqrt(double noundef %578) #6
  %580 = call double @llvm.fmuladd.f64(double %562, double %579, double %561)
  store double %580, ptr %38, align 8, !tbaa !9
  %581 = load double, ptr %38, align 8, !tbaa !9
  store double %581, ptr %39, align 8, !tbaa !9
  br label %605

582:                                              ; preds = %529
  %583 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %584 = load double, ptr %583, align 8, !tbaa !26
  %585 = load double, ptr %20, align 8, !tbaa !9
  %586 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %587 = load double, ptr %586, align 8, !tbaa !11
  %588 = fdiv double %585, %587
  %589 = load double, ptr %10, align 8, !tbaa !9
  %590 = fdiv double 1.000000e+00, %589
  %591 = call double @pow(double noundef %588, double noundef %590) #6
  %592 = fmul double %584, %591
  store double %592, ptr %37, align 8, !tbaa !9
  %593 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %594 = load double, ptr %593, align 8, !tbaa !27
  %595 = load double, ptr %19, align 8, !tbaa !9
  %596 = fadd double %594, %595
  store double %596, ptr %39, align 8, !tbaa !9
  %597 = load double, ptr %33, align 8, !tbaa !9
  %598 = load double, ptr %10, align 8, !tbaa !9
  %599 = load double, ptr %20, align 8, !tbaa !9
  %600 = fmul double %598, %599
  %601 = load double, ptr %37, align 8, !tbaa !9
  %602 = fdiv double %600, %601
  %603 = call double @sqrt(double noundef %602) #6
  %604 = fadd double %597, %603
  store double %604, ptr %38, align 8, !tbaa !9
  br label %605

605:                                              ; preds = %582, %534
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #6
  %606 = load double, ptr %13, align 8, !tbaa !9
  %607 = load double, ptr %33, align 8, !tbaa !9
  %608 = fcmp olt double %606, %607
  %609 = zext i1 %608 to i8
  store i8 %609, ptr %40, align 1, !tbaa !30
  %610 = load i8, ptr %40, align 1, !tbaa !30, !range !32, !noundef !33
  %611 = trunc i8 %610 to i1
  br i1 %611, label %612, label %723

612:                                              ; preds = %605
  %613 = load double, ptr %20, align 8, !tbaa !9
  %614 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %615 = load double, ptr %614, align 8, !tbaa !11
  %616 = fcmp oge double %613, %615
  br i1 %616, label %617, label %645

617:                                              ; preds = %612
  %618 = load double, ptr %13, align 8, !tbaa !9
  %619 = load double, ptr %36, align 8, !tbaa !9
  %620 = fcmp olt double %618, %619
  br i1 %620, label %621, label %637

621:                                              ; preds = %617
  %622 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %623 = load double, ptr %622, align 8, !tbaa !26
  %624 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %623, ptr %624, align 8, !tbaa !26
  %625 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %626 = load double, ptr %625, align 8, !tbaa !27
  %627 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %626, ptr %627, align 8, !tbaa !27
  %628 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 5
  %629 = load double, ptr %628, align 8, !tbaa !34
  %630 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 5
  store double %629, ptr %630, align 8, !tbaa !34
  %631 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 6
  %632 = load double, ptr %631, align 8, !tbaa !35
  %633 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 6
  store double %632, ptr %633, align 8, !tbaa !35
  %634 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %635 = load double, ptr %634, align 8, !tbaa !11
  %636 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %635, ptr %636, align 8, !tbaa !11
  br label %644

637:                                              ; preds = %617
  %638 = load double, ptr %34, align 8, !tbaa !9
  %639 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %638, ptr %639, align 8, !tbaa !26
  %640 = load double, ptr %33, align 8, !tbaa !9
  %641 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %640, ptr %641, align 8, !tbaa !27
  %642 = load double, ptr %20, align 8, !tbaa !9
  %643 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %642, ptr %643, align 8, !tbaa !11
  br label %644

644:                                              ; preds = %637, %621
  br label %722

645:                                              ; preds = %612
  %646 = load double, ptr %13, align 8, !tbaa !9
  %647 = load double, ptr %36, align 8, !tbaa !9
  %648 = fcmp olt double %646, %647
  br i1 %648, label %649, label %659

649:                                              ; preds = %645
  %650 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %651 = load double, ptr %650, align 8, !tbaa !26
  %652 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %651, ptr %652, align 8, !tbaa !26
  %653 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %654 = load double, ptr %653, align 8, !tbaa !27
  %655 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %654, ptr %655, align 8, !tbaa !27
  %656 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %657 = load double, ptr %656, align 8, !tbaa !11
  %658 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %657, ptr %658, align 8, !tbaa !11
  br label %721

659:                                              ; preds = %645
  %660 = load double, ptr %13, align 8, !tbaa !9
  %661 = load double, ptr %35, align 8, !tbaa !9
  %662 = fcmp olt double %660, %661
  br i1 %662, label %663, label %713

663:                                              ; preds = %659
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  %664 = load double, ptr %10, align 8, !tbaa !9
  %665 = fadd double %664, 1.000000e+00
  %666 = fdiv double 2.000000e+00, %665
  %667 = load double, ptr %10, align 8, !tbaa !9
  %668 = fsub double %667, 1.000000e+00
  %669 = load double, ptr %10, align 8, !tbaa !9
  %670 = fadd double %669, 1.000000e+00
  %671 = fdiv double %668, %670
  %672 = load double, ptr %18, align 8, !tbaa !9
  %673 = fdiv double %671, %672
  %674 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %675 = load double, ptr %674, align 8, !tbaa !27
  %676 = load double, ptr %13, align 8, !tbaa !9
  %677 = fsub double %675, %676
  %678 = call double @llvm.fmuladd.f64(double %673, double %677, double %666)
  store double %678, ptr %41, align 8, !tbaa !9
  %679 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 3
  %680 = load double, ptr %679, align 8, !tbaa !26
  %681 = load double, ptr %41, align 8, !tbaa !9
  %682 = load double, ptr %10, align 8, !tbaa !9
  %683 = fsub double %682, 1.000000e+00
  %684 = fdiv double 2.000000e+00, %683
  %685 = call double @pow(double noundef %681, double noundef %684) #6
  %686 = fmul double %680, %685
  %687 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %686, ptr %687, align 8, !tbaa !26
  %688 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 4
  %689 = load double, ptr %688, align 8, !tbaa !11
  %690 = load double, ptr %41, align 8, !tbaa !9
  %691 = load double, ptr %10, align 8, !tbaa !9
  %692 = fmul double 2.000000e+00, %691
  %693 = load double, ptr %10, align 8, !tbaa !9
  %694 = fsub double %693, 1.000000e+00
  %695 = fdiv double %692, %694
  %696 = call double @pow(double noundef %690, double noundef %695) #6
  %697 = fmul double %689, %696
  %698 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %697, ptr %698, align 8, !tbaa !11
  %699 = load double, ptr %10, align 8, !tbaa !9
  %700 = fadd double %699, 1.000000e+00
  %701 = fdiv double 2.000000e+00, %700
  %702 = load double, ptr %18, align 8, !tbaa !9
  %703 = load double, ptr %10, align 8, !tbaa !9
  %704 = fsub double %703, 1.000000e+00
  %705 = fdiv double %704, 2.000000e+00
  %706 = getelementptr inbounds %struct.macroParam, ptr %2, i32 0, i32 7
  %707 = load double, ptr %706, align 8, !tbaa !27
  %708 = call double @llvm.fmuladd.f64(double %705, double %707, double %702)
  %709 = load double, ptr %13, align 8, !tbaa !9
  %710 = fadd double %708, %709
  %711 = fmul double %701, %710
  %712 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %711, ptr %712, align 8, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  br label %720

713:                                              ; preds = %659
  %714 = load double, ptr %34, align 8, !tbaa !9
  %715 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %714, ptr %715, align 8, !tbaa !26
  %716 = load double, ptr %33, align 8, !tbaa !9
  %717 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %716, ptr %717, align 8, !tbaa !27
  %718 = load double, ptr %20, align 8, !tbaa !9
  %719 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %718, ptr %719, align 8, !tbaa !11
  br label %720

720:                                              ; preds = %713, %663
  br label %721

721:                                              ; preds = %720, %649
  br label %722

722:                                              ; preds = %721, %644
  br label %830

723:                                              ; preds = %605
  %724 = load double, ptr %20, align 8, !tbaa !9
  %725 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %726 = load double, ptr %725, align 8, !tbaa !11
  %727 = fcmp oge double %724, %726
  br i1 %727, label %728, label %750

728:                                              ; preds = %723
  %729 = load double, ptr %13, align 8, !tbaa !9
  %730 = load double, ptr %39, align 8, !tbaa !9
  %731 = fcmp ogt double %729, %730
  br i1 %731, label %732, label %742

732:                                              ; preds = %728
  %733 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %734 = load double, ptr %733, align 8, !tbaa !26
  %735 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %734, ptr %735, align 8, !tbaa !26
  %736 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %737 = load double, ptr %736, align 8, !tbaa !27
  %738 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %737, ptr %738, align 8, !tbaa !27
  %739 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %740 = load double, ptr %739, align 8, !tbaa !11
  %741 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %740, ptr %741, align 8, !tbaa !11
  br label %749

742:                                              ; preds = %728
  %743 = load double, ptr %37, align 8, !tbaa !9
  %744 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %743, ptr %744, align 8, !tbaa !26
  %745 = load double, ptr %33, align 8, !tbaa !9
  %746 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %745, ptr %746, align 8, !tbaa !27
  %747 = load double, ptr %20, align 8, !tbaa !9
  %748 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %747, ptr %748, align 8, !tbaa !11
  br label %749

749:                                              ; preds = %742, %732
  br label %829

750:                                              ; preds = %723
  %751 = load double, ptr %13, align 8, !tbaa !9
  %752 = load double, ptr %39, align 8, !tbaa !9
  %753 = fcmp ogt double %751, %752
  br i1 %753, label %754, label %764

754:                                              ; preds = %750
  %755 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %756 = load double, ptr %755, align 8, !tbaa !26
  %757 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %756, ptr %757, align 8, !tbaa !26
  %758 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %759 = load double, ptr %758, align 8, !tbaa !27
  %760 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %759, ptr %760, align 8, !tbaa !27
  %761 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %762 = load double, ptr %761, align 8, !tbaa !11
  %763 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %762, ptr %763, align 8, !tbaa !11
  br label %828

764:                                              ; preds = %750
  %765 = load double, ptr %13, align 8, !tbaa !9
  %766 = load double, ptr %38, align 8, !tbaa !9
  %767 = fcmp ogt double %765, %766
  br i1 %767, label %768, label %820

768:                                              ; preds = %764
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %769 = load double, ptr %10, align 8, !tbaa !9
  %770 = fadd double %769, 1.000000e+00
  %771 = fdiv double 2.000000e+00, %770
  %772 = load double, ptr %10, align 8, !tbaa !9
  %773 = fsub double %772, 1.000000e+00
  %774 = load double, ptr %10, align 8, !tbaa !9
  %775 = fadd double %774, 1.000000e+00
  %776 = fdiv double %773, %775
  %777 = load double, ptr %19, align 8, !tbaa !9
  %778 = fdiv double %776, %777
  %779 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %780 = load double, ptr %779, align 8, !tbaa !27
  %781 = load double, ptr %13, align 8, !tbaa !9
  %782 = fsub double %780, %781
  %783 = fneg double %778
  %784 = call double @llvm.fmuladd.f64(double %783, double %782, double %771)
  store double %784, ptr %42, align 8, !tbaa !9
  %785 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 3
  %786 = load double, ptr %785, align 8, !tbaa !26
  %787 = load double, ptr %42, align 8, !tbaa !9
  %788 = load double, ptr %10, align 8, !tbaa !9
  %789 = fsub double %788, 1.000000e+00
  %790 = fdiv double 2.000000e+00, %789
  %791 = call double @pow(double noundef %787, double noundef %790) #6
  %792 = fmul double %786, %791
  %793 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %792, ptr %793, align 8, !tbaa !26
  %794 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 4
  %795 = load double, ptr %794, align 8, !tbaa !11
  %796 = load double, ptr %42, align 8, !tbaa !9
  %797 = load double, ptr %10, align 8, !tbaa !9
  %798 = fmul double 2.000000e+00, %797
  %799 = load double, ptr %10, align 8, !tbaa !9
  %800 = fsub double %799, 1.000000e+00
  %801 = fdiv double %798, %800
  %802 = call double @pow(double noundef %796, double noundef %801) #6
  %803 = fmul double %795, %802
  %804 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %803, ptr %804, align 8, !tbaa !11
  %805 = load double, ptr %10, align 8, !tbaa !9
  %806 = fadd double %805, 1.000000e+00
  %807 = fdiv double 2.000000e+00, %806
  %808 = load double, ptr %19, align 8, !tbaa !9
  %809 = fneg double %808
  %810 = load double, ptr %10, align 8, !tbaa !9
  %811 = fsub double %810, 1.000000e+00
  %812 = fdiv double %811, 2.000000e+00
  %813 = getelementptr inbounds %struct.macroParam, ptr %3, i32 0, i32 7
  %814 = load double, ptr %813, align 8, !tbaa !27
  %815 = call double @llvm.fmuladd.f64(double %812, double %814, double %809)
  %816 = load double, ptr %13, align 8, !tbaa !9
  %817 = fadd double %815, %816
  %818 = fmul double %807, %817
  %819 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %818, ptr %819, align 8, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %827

820:                                              ; preds = %764
  %821 = load double, ptr %37, align 8, !tbaa !9
  %822 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 3
  store double %821, ptr %822, align 8, !tbaa !26
  %823 = load double, ptr %33, align 8, !tbaa !9
  %824 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 7
  store double %823, ptr %824, align 8, !tbaa !27
  %825 = load double, ptr %20, align 8, !tbaa !9
  %826 = getelementptr inbounds %struct.macroParam, ptr %0, i32 0, i32 4
  store double %825, ptr %826, align 8, !tbaa !11
  br label %827

827:                                              ; preds = %820, %768
  br label %828

828:                                              ; preds = %827, %754
  br label %829

829:                                              ; preds = %828, %749
  br label %830

830:                                              ; preds = %829, %722
  store i1 true, ptr %14, align 1
  store i32 1, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  %831 = load i1, ptr %14, align 1
  br i1 %831, label %836, label %835

832:                                              ; preds = %429, %172, %168
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %833

833:                                              ; preds = %832, %164
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br label %834

834:                                              ; preds = %833, %160
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @_ZN10macroParamD2Ev(ptr noundef nonnull align 8 dereferenceable(176) %0) #6
  br label %837

835:                                              ; preds = %830
  call void @_ZN10macroParamD2Ev(ptr noundef nonnull align 8 dereferenceable(176) %0) #6
  br label %836

836:                                              ; preds = %835, %830
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  ret void

837:                                              ; preds = %834, %156
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  br label %838

838:                                              ; preds = %837
  %839 = load ptr, ptr %16, align 8
  %840 = load i32, ptr %17, align 4
  %841 = insertvalue { ptr, i32 } poison, ptr %839, 0
  %842 = insertvalue { ptr, i32 } %841, i32 %840, 1
  resume { ptr, i32 } %842
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN10macroParamD2Ev(ptr noundef nonnull align 8 dereferenceable(176)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7MixtureC2ERKS_(ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10macroParamC2E7Mixture(ptr noundef nonnull align 8 dereferenceable(176), ptr noundef) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7MixtureD2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: nounwind
declare double @pow(double noundef, double noundef) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !10, i64 88}
!12 = !{!"_ZTS10macroParam", !13, i64 0, !19, i64 32, !19, i64 56, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !23, i64 144}
!13 = !{!"_ZTS7Mixture", !14, i64 0, !18, i64 24}
!14 = !{!"_ZTSSt6vectorI16MixtureComponentSaIS0_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseI16MixtureComponentSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseI16MixtureComponentSaIS0_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI16MixtureComponentSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!"int", !7, i64 0}
!19 = !{!"_ZTSSt6vectorIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !24, i64 0, !25, i64 8, !7, i64 16}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!25 = !{!"long", !7, i64 0}
!26 = !{!12, !10, i64 80}
!27 = !{!12, !10, i64 112}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!31, !31, i64 0}
!31 = !{!"bool", !7, i64 0}
!32 = !{i8 0, i8 2}
!33 = !{}
!34 = !{!12, !10, i64 96}
!35 = !{!12, !10, i64 104}


; 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.macroParam = type { %struct.Mixture, %"class.std::vector.5", %"class.std::vector.5", double, double, double, double, double, double, double, double, %"class.std::__cxx11::basic_string" }
%struct.Mixture = type <{ %"class.std::vector", i32, [4 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<MixtureComponent, std::allocator<MixtureComponent>>::_Vector_impl" }
%"struct.std::_Vector_base<MixtureComponent, std::allocator<MixtureComponent>>::_Vector_impl" = type { %"struct.std::_Vector_base<MixtureComponent, std::allocator<MixtureComponent>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MixtureComponent, std::allocator<MixtureComponent>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16ExacRiemanSolver16exacRiemanSolverE10macroParamS0_d(ptr dead_on_unwind noalias writable sret(%struct.macroParam) align 8 %0, ptr nocapture noundef nonnull readnone align 8 dereferenceable(88) %1, ptr noundef nonnull %2, ptr noundef %3, double noundef %4) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca double, align 8
  %7 = alloca %struct.Mixture, align 8
  %8 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #6
  store double 1.000000e-08, ptr %6, align 8, !tbaa !5
  call void @_ZN7MixtureC2ERKS_(ptr noundef nonnull align 8 dereferenceable(28) %7, ptr noundef nonnull align 8 dereferenceable(28) %2)
  invoke void @_ZN10macroParamC2E7Mixture(ptr noundef nonnull align 8 dereferenceable(176) %0, ptr noundef nonnull %7)
          to label %9 unwind label %78

9:                                                ; preds = %5
  call void @_ZN7MixtureD2Ev(ptr noundef nonnull align 8 dereferenceable(28) %7) #6
  %10 = getelementptr inbounds i8, ptr %2, i64 88
  %11 = load double, ptr %10, align 8, !tbaa !9
  %12 = fmul double %11, %4
  %13 = getelementptr inbounds i8, ptr %2, i64 80
  %14 = load double, ptr %13, align 8, !tbaa !25
  %15 = fdiv double %12, %14
  %16 = call double @sqrt(double noundef %15) #6
  %17 = getelementptr inbounds i8, ptr %3, i64 88
  %18 = load double, ptr %17, align 8, !tbaa !9
  %19 = fmul double %18, %4
  %20 = getelementptr inbounds i8, ptr %3, i64 80
  %21 = load double, ptr %20, align 8, !tbaa !25
  %22 = fdiv double %19, %21
  %23 = call double @sqrt(double noundef %22) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  %24 = load double, ptr %10, align 8, !tbaa !9
  %25 = load double, ptr %17, align 8, !tbaa !9
  %26 = fadd double %24, %25
  %27 = getelementptr inbounds i8, ptr %2, i64 112
  %28 = load double, ptr %27, align 8, !tbaa !26
  %29 = getelementptr inbounds i8, ptr %3, i64 112
  %30 = load double, ptr %29, align 8, !tbaa !26
  %31 = fsub double %28, %30
  %32 = fmul double %31, 1.250000e-01
  %33 = load double, ptr %13, align 8, !tbaa !25
  %34 = load double, ptr %20, align 8, !tbaa !25
  %35 = fadd double %33, %34
  %36 = fmul double %32, %35
  %37 = fadd double %16, %23
  %38 = fmul double %37, %36
  %39 = call double @llvm.fmuladd.f64(double %26, double 5.000000e-01, double %38)
  store double %39, ptr %8, align 8, !tbaa !5
  %40 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %6)
  %41 = load double, ptr %40, align 8, !tbaa !5
  store double %41, ptr %8, align 8, !tbaa !5
  %42 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %17)
  %43 = load double, ptr %42, align 8, !tbaa !5
  %44 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %17)
  %45 = load double, ptr %44, align 8, !tbaa !5
  %46 = load double, ptr %8, align 8, !tbaa !5
  %47 = fcmp ogt double %46, %45
  br i1 %47, label %48, label %80

48:                                               ; preds = %9
  %49 = fadd double %4, 1.000000e+00
  %50 = fdiv double 2.000000e+00, %49
  %51 = load double, ptr %13, align 8, !tbaa !25
  %52 = fdiv double %50, %51
  %53 = fadd double %4, -1.000000e+00
  %54 = fdiv double %53, %49
  %55 = load double, ptr %10, align 8, !tbaa !9
  %56 = call double @llvm.fmuladd.f64(double %54, double %55, double %46)
  %57 = fdiv double %52, %56
  %58 = call double @sqrt(double noundef %57) #6
  %59 = load double, ptr %20, align 8, !tbaa !25
  %60 = fdiv double %50, %59
  %61 = load double, ptr %8, align 8, !tbaa !5
  %62 = load double, ptr %17, align 8, !tbaa !9
  %63 = call double @llvm.fmuladd.f64(double %54, double %62, double %61)
  %64 = fdiv double %60, %63
  %65 = call double @sqrt(double noundef %64) #6
  %66 = load double, ptr %10, align 8, !tbaa !9
  %67 = load double, ptr %17, align 8, !tbaa !9
  %68 = fmul double %65, %67
  %69 = call double @llvm.fmuladd.f64(double %58, double %66, double %68)
  %70 = load double, ptr %27, align 8, !tbaa !26
  %71 = load double, ptr %29, align 8, !tbaa !26
  %72 = fsub double %70, %71
  %73 = fadd double %69, %72
  %74 = fadd double %58, %65
  %75 = fdiv double %73, %74
  store double %75, ptr %8, align 8, !tbaa !5
  %76 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %6)
  %77 = load double, ptr %76, align 8, !tbaa !5
  store double %77, ptr %8, align 8, !tbaa !5
  br label %._crit_edge

78:                                               ; preds = %5
  %79 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7MixtureD2Ev(ptr noundef nonnull align 8 dereferenceable(28) %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  resume { ptr, i32 } %79

80:                                               ; preds = %9
  %81 = fcmp olt double %46, %43
  %82 = fadd double %4, -1.000000e+00
  br i1 %81, label %83, label %._crit_edge

83:                                               ; preds = %80
  %84 = fmul double %4, 2.000000e+00
  %85 = fdiv double %82, %84
  %86 = fmul double %82, 5.000000e-01
  %87 = load double, ptr %27, align 8, !tbaa !26
  %88 = load double, ptr %29, align 8, !tbaa !26
  %89 = fsub double %87, %88
  %90 = call double @llvm.fmuladd.f64(double %86, double %89, double %37)
  %91 = load double, ptr %10, align 8, !tbaa !9
  %92 = call double @pow(double noundef %91, double noundef %85) #6
  %93 = load double, ptr %17, align 8, !tbaa !9
  %94 = call double @pow(double noundef %93, double noundef %85) #6
  %95 = insertelement <2 x double> poison, double %16, i64 0
  %96 = insertelement <2 x double> %95, double %23, i64 1
  %97 = insertelement <2 x double> poison, double %92, i64 0
  %98 = insertelement <2 x double> %97, double %94, i64 1
  %99 = fdiv <2 x double> %96, %98
  %shift = shufflevector <2 x double> %99, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %100 = fadd <2 x double> %99, %shift
  %101 = extractelement <2 x double> %100, i64 0
  %102 = fdiv double %90, %101
  %103 = fdiv double 1.000000e+00, %85
  %104 = call double @pow(double noundef %102, double noundef %103) #6
  store double %104, ptr %8, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %80, %83, %48
  %.pre-phi = phi double [ %82, %83 ], [ %53, %48 ], [ %82, %80 ]
  %105 = phi double [ %104, %83 ], [ %77, %48 ], [ %46, %80 ]
  %106 = fadd double %4, 1.000000e+00
  %107 = fdiv double 2.000000e+00, %106
  %108 = fdiv double %.pre-phi, %106
  %109 = fdiv double 2.000000e+00, %.pre-phi
  %110 = fmul double %109, %16
  %111 = fmul double %4, 2.000000e+00
  %112 = fdiv double %.pre-phi, %111
  %113 = fneg double %106
  %114 = fdiv double %113, %111
  %115 = fmul double %109, %23
  br label %116

116:                                              ; preds = %._crit_edge, %206
  %117 = phi double [ %105, %._crit_edge ], [ %197, %206 ]
  %.0163193.int = phi i32 [ 1, %._crit_edge ], [ %.int, %206 ]
  %118 = load double, ptr %13, align 8, !tbaa !25
  %119 = fdiv double %107, %118
  %120 = load double, ptr %10, align 8, !tbaa !9
  %121 = call double @llvm.fmuladd.f64(double %108, double %120, double %117)
  %122 = fdiv double %119, %121
  %123 = call double @sqrt(double noundef %122) #6
  %124 = load double, ptr %8, align 8, !tbaa !5
  %125 = load double, ptr %10, align 8, !tbaa !9
  %126 = fcmp ugt double %124, %125
  br i1 %126, label %132, label %127

127:                                              ; preds = %116
  %128 = fdiv double %124, %125
  %129 = call double @pow(double noundef %128, double noundef %112) #6
  %130 = fadd double %129, -1.000000e+00
  %131 = fmul double %110, %130
  %.pre = load double, ptr %8, align 8, !tbaa !5
  %.pre194 = load double, ptr %10, align 8, !tbaa !9
  br label %135

132:                                              ; preds = %116
  %133 = fsub double %124, %125
  %134 = fmul double %123, %133
  br label %135

135:                                              ; preds = %132, %127
  %136 = phi double [ %.pre194, %127 ], [ %125, %132 ]
  %137 = phi double [ %.pre, %127 ], [ %124, %132 ]
  %.1 = phi double [ %131, %127 ], [ %134, %132 ]
  %138 = fcmp ugt double %137, %136
  br i1 %138, label %145, label %139

139:                                              ; preds = %135
  %140 = fdiv double %137, %136
  %141 = call double @pow(double noundef %140, double noundef %114) #6
  %142 = load double, ptr %13, align 8, !tbaa !25
  %143 = fmul double %16, %142
  %144 = fdiv double %141, %143
  %.pre195 = load double, ptr %8, align 8, !tbaa !5
  br label %152

145:                                              ; preds = %135
  %146 = fsub double %137, %136
  %147 = fmul double %146, 5.000000e-01
  %148 = call double @llvm.fmuladd.f64(double %108, double %136, double %137)
  %149 = fdiv double %147, %148
  %150 = fsub double 1.000000e+00, %149
  %151 = fmul double %123, %150
  br label %152

152:                                              ; preds = %145, %139
  %153 = phi double [ %.pre195, %139 ], [ %137, %145 ]
  %.0161 = phi double [ %144, %139 ], [ %151, %145 ]
  %154 = load double, ptr %20, align 8, !tbaa !25
  %155 = fdiv double %107, %154
  %156 = load double, ptr %17, align 8, !tbaa !9
  %157 = call double @llvm.fmuladd.f64(double %108, double %156, double %153)
  %158 = fdiv double %155, %157
  %159 = call double @sqrt(double noundef %158) #6
  %160 = load double, ptr %8, align 8, !tbaa !5
  %161 = load double, ptr %17, align 8, !tbaa !9
  %162 = fcmp ugt double %160, %161
  br i1 %162, label %168, label %163

163:                                              ; preds = %152
  %164 = fdiv double %160, %161
  %165 = call double @pow(double noundef %164, double noundef %112) #6
  %166 = fadd double %165, -1.000000e+00
  %167 = fmul double %115, %166
  %.pre196 = load double, ptr %8, align 8, !tbaa !5
  %.pre197 = load double, ptr %17, align 8, !tbaa !9
  br label %171

168:                                              ; preds = %152
  %169 = fsub double %160, %161
  %170 = fmul double %159, %169
  br label %171

171:                                              ; preds = %168, %163
  %172 = phi double [ %.pre197, %163 ], [ %161, %168 ]
  %173 = phi double [ %.pre196, %163 ], [ %160, %168 ]
  %.1153 = phi double [ %167, %163 ], [ %170, %168 ]
  %174 = fcmp ugt double %173, %172
  br i1 %174, label %182, label %175

175:                                              ; preds = %171
  %176 = fdiv double %173, %172
  %177 = call double @pow(double noundef %176, double noundef %114) #6
  %178 = load double, ptr %20, align 8, !tbaa !25
  %179 = fmul double %23, %178
  %180 = fdiv double %177, %179
  %181 = fadd double %.0161, %180
  %.pre198 = load double, ptr %8, align 8, !tbaa !5
  br label %189

182:                                              ; preds = %171
  %183 = fsub double %173, %172
  %184 = fmul double %183, 5.000000e-01
  %185 = call double @llvm.fmuladd.f64(double %108, double %172, double %173)
  %186 = fdiv double %184, %185
  %187 = fsub double 1.000000e+00, %186
  %188 = call double @llvm.fmuladd.f64(double %159, double %187, double %.0161)
  br label %189

189:                                              ; preds = %182, %175
  %190 = phi double [ %.pre198, %175 ], [ %173, %182 ]
  %.1162 = phi double [ %181, %175 ], [ %188, %182 ]
  %191 = fadd double %.1, %.1153
  %192 = load double, ptr %27, align 8, !tbaa !26
  %193 = load double, ptr %29, align 8, !tbaa !26
  %194 = fsub double %192, %193
  %195 = fsub double %191, %194
  %196 = fdiv double %195, %.1162
  %197 = fsub double %190, %196
  %198 = fsub double %197, %190
  %199 = call double @llvm.fabs.f64(double %198)
  %200 = fadd double %190, %197
  %201 = call noundef double @_ZSt3absd(double noundef %200)
  %202 = fmul double %201, 5.000000e-01
  %203 = fdiv double %199, %202
  %204 = load double, ptr %6, align 8, !tbaa !5
  %205 = fcmp uge double %203, %204
  br i1 %205, label %206, label %..critedge_crit_edge

..critedge_crit_edge:                             ; preds = %189
  %.pre199 = load double, ptr %8, align 8, !tbaa !5
  br label %.critedge

206:                                              ; preds = %189
  store double %197, ptr %8, align 8, !tbaa !5
  %.int = add nuw nsw i32 %.0163193.int, 1
  %exitcond.not = icmp eq i32 %.int, 40
  br i1 %exitcond.not, label %.critedge, label %116, !llvm.loop !27

.critedge:                                        ; preds = %206, %..critedge_crit_edge
  %207 = phi double [ %.pre199, %..critedge_crit_edge ], [ %197, %206 ]
  %208 = load double, ptr %27, align 8, !tbaa !26
  %209 = load double, ptr %29, align 8, !tbaa !26
  %210 = fadd double %208, %209
  %211 = fsub double %.1153, %.1
  %212 = fmul double %211, 5.000000e-01
  %213 = call double @llvm.fmuladd.f64(double %210, double 5.000000e-01, double %212)
  %214 = load double, ptr %10, align 8, !tbaa !9
  %215 = fcmp ult double %207, %214
  %216 = load double, ptr %13, align 8, !tbaa !25
  %217 = fdiv double %207, %214
  br i1 %215, label %232, label %218

218:                                              ; preds = %.critedge
  %219 = fadd double %108, %217
  %220 = fmul double %219, %216
  %221 = fmul double %108, %207
  %222 = fdiv double %221, %214
  %223 = fadd double %222, 1.000000e+00
  %224 = fdiv double %220, %223
  %225 = fdiv double %106, %111
  %226 = fmul double %225, %207
  %227 = fdiv double %226, %214
  %228 = fadd double %112, %227
  %229 = call double @sqrt(double noundef %228) #6
  %230 = fneg double %16
  %231 = call double @llvm.fmuladd.f64(double %230, double %229, double %208)
  br label %243

232:                                              ; preds = %.critedge
  %233 = fdiv double 1.000000e+00, %4
  %234 = call double @pow(double noundef %217, double noundef %233) #6
  %235 = fmul double %216, %234
  %236 = load double, ptr %27, align 8, !tbaa !26
  %237 = fsub double %236, %16
  %238 = load double, ptr %8, align 8, !tbaa !5
  %239 = fmul double %238, %4
  %240 = fdiv double %239, %235
  %241 = call double @sqrt(double noundef %240) #6
  %242 = fsub double %213, %241
  br label %243

243:                                              ; preds = %232, %218
  %.0160 = phi double [ %224, %218 ], [ %235, %232 ]
  %.0159 = phi double [ %231, %218 ], [ %242, %232 ]
  %.0158 = phi double [ %231, %218 ], [ %237, %232 ]
  %244 = load double, ptr %8, align 8, !tbaa !5
  %245 = load double, ptr %17, align 8, !tbaa !9
  %246 = fcmp ult double %244, %245
  %247 = load double, ptr %20, align 8, !tbaa !25
  %248 = fdiv double %244, %245
  br i1 %246, label %263, label %249

249:                                              ; preds = %243
  %250 = fadd double %108, %248
  %251 = fmul double %250, %247
  %252 = fmul double %108, %244
  %253 = fdiv double %252, %245
  %254 = fadd double %253, 1.000000e+00
  %255 = fdiv double %251, %254
  %256 = load double, ptr %29, align 8, !tbaa !26
  %257 = fdiv double %106, %111
  %258 = fmul double %257, %244
  %259 = fdiv double %258, %245
  %260 = fadd double %112, %259
  %261 = call double @sqrt(double noundef %260) #6
  %262 = call double @llvm.fmuladd.f64(double %23, double %261, double %256)
  br label %274

263:                                              ; preds = %243
  %264 = fdiv double 1.000000e+00, %4
  %265 = call double @pow(double noundef %248, double noundef %264) #6
  %266 = fmul double %247, %265
  %267 = load double, ptr %29, align 8, !tbaa !26
  %268 = fadd double %23, %267
  %269 = load double, ptr %8, align 8, !tbaa !5
  %270 = fmul double %269, %4
  %271 = fdiv double %270, %266
  %272 = call double @sqrt(double noundef %271) #6
  %273 = fadd double %213, %272
  br label %274

274:                                              ; preds = %263, %249
  %.0157 = phi double [ %255, %249 ], [ %266, %263 ]
  %.0156 = phi double [ %262, %249 ], [ %273, %263 ]
  %.0155 = phi double [ %262, %249 ], [ %268, %263 ]
  %275 = fcmp ogt double %213, 0.000000e+00
  %276 = load double, ptr %8, align 8, !tbaa !5
  br i1 %275, label %277, label %322

277:                                              ; preds = %274
  %278 = load double, ptr %10, align 8, !tbaa !9
  %279 = fcmp ult double %276, %278
  %280 = fcmp ogt double %.0158, 0.000000e+00
  br i1 %279, label %293, label %281

281:                                              ; preds = %277
  br i1 %280, label %282, label %290

282:                                              ; preds = %281
  %283 = load double, ptr %13, align 8, !tbaa !25
  %284 = getelementptr inbounds i8, ptr %0, i64 80
  store double %283, ptr %284, align 8, !tbaa !25
  %285 = load double, ptr %27, align 8, !tbaa !26
  %286 = getelementptr inbounds i8, ptr %0, i64 112
  store double %285, ptr %286, align 8, !tbaa !26
  %287 = getelementptr inbounds i8, ptr %2, i64 96
  %288 = getelementptr inbounds i8, ptr %0, i64 96
  %289 = load <2 x double>, ptr %287, align 8, !tbaa !5
  store <2 x double> %289, ptr %288, align 8, !tbaa !5
  br label %367

290:                                              ; preds = %281
  %291 = getelementptr inbounds i8, ptr %0, i64 80
  store double %.0160, ptr %291, align 8, !tbaa !25
  %292 = getelementptr inbounds i8, ptr %0, i64 112
  store double %213, ptr %292, align 8, !tbaa !26
  br label %367

293:                                              ; preds = %277
  br i1 %280, label %294, label %299

294:                                              ; preds = %293
  %295 = load double, ptr %13, align 8, !tbaa !25
  %296 = getelementptr inbounds i8, ptr %0, i64 80
  store double %295, ptr %296, align 8, !tbaa !25
  %297 = load double, ptr %27, align 8, !tbaa !26
  %298 = getelementptr inbounds i8, ptr %0, i64 112
  store double %297, ptr %298, align 8, !tbaa !26
  br label %367

299:                                              ; preds = %293
  %300 = fcmp ogt double %.0159, 0.000000e+00
  br i1 %300, label %301, label %319

301:                                              ; preds = %299
  %302 = fdiv double %108, %16
  %303 = load double, ptr %27, align 8, !tbaa !26
  %304 = call double @llvm.fmuladd.f64(double %302, double %303, double %107)
  %305 = load double, ptr %13, align 8, !tbaa !25
  %306 = call double @pow(double noundef %304, double noundef %109) #6
  %307 = fmul double %305, %306
  %308 = getelementptr inbounds i8, ptr %0, i64 80
  store double %307, ptr %308, align 8, !tbaa !25
  %309 = load double, ptr %10, align 8, !tbaa !9
  %310 = fdiv double %111, %.pre-phi
  %311 = call double @pow(double noundef %304, double noundef %310) #6
  %312 = fmul double %309, %311
  %313 = getelementptr inbounds i8, ptr %0, i64 88
  store double %312, ptr %313, align 8, !tbaa !9
  %314 = fmul double %.pre-phi, 5.000000e-01
  %315 = load double, ptr %27, align 8, !tbaa !26
  %316 = call double @llvm.fmuladd.f64(double %314, double %315, double %16)
  %317 = fadd double %316, 0.000000e+00
  %318 = fmul double %107, %317
  br label %367

319:                                              ; preds = %299
  %320 = getelementptr inbounds i8, ptr %0, i64 80
  store double %.0160, ptr %320, align 8, !tbaa !25
  %321 = getelementptr inbounds i8, ptr %0, i64 112
  store double %213, ptr %321, align 8, !tbaa !26
  br label %367

322:                                              ; preds = %274
  %323 = load double, ptr %17, align 8, !tbaa !9
  %324 = fcmp ult double %276, %323
  %325 = fcmp olt double %.0155, 0.000000e+00
  br i1 %324, label %335, label %326

326:                                              ; preds = %322
  br i1 %325, label %327, label %332

327:                                              ; preds = %326
  %328 = load double, ptr %20, align 8, !tbaa !25
  %329 = getelementptr inbounds i8, ptr %0, i64 80
  store double %328, ptr %329, align 8, !tbaa !25
  %330 = load double, ptr %29, align 8, !tbaa !26
  %331 = getelementptr inbounds i8, ptr %0, i64 112
  store double %330, ptr %331, align 8, !tbaa !26
  br label %367

332:                                              ; preds = %326
  %333 = getelementptr inbounds i8, ptr %0, i64 80
  store double %.0157, ptr %333, align 8, !tbaa !25
  %334 = getelementptr inbounds i8, ptr %0, i64 112
  store double %213, ptr %334, align 8, !tbaa !26
  br label %367

335:                                              ; preds = %322
  br i1 %325, label %336, label %341

336:                                              ; preds = %335
  %337 = load double, ptr %20, align 8, !tbaa !25
  %338 = getelementptr inbounds i8, ptr %0, i64 80
  store double %337, ptr %338, align 8, !tbaa !25
  %339 = load double, ptr %29, align 8, !tbaa !26
  %340 = getelementptr inbounds i8, ptr %0, i64 112
  store double %339, ptr %340, align 8, !tbaa !26
  br label %367

341:                                              ; preds = %335
  %342 = fcmp olt double %.0156, 0.000000e+00
  br i1 %342, label %343, label %364

343:                                              ; preds = %341
  %344 = load double, ptr %29, align 8, !tbaa !26
  %345 = fneg double %.pre-phi
  %346 = fdiv double %345, %106
  %347 = fdiv double %346, %23
  %348 = call double @llvm.fmuladd.f64(double %347, double %344, double %107)
  %349 = load double, ptr %20, align 8, !tbaa !25
  %350 = call double @pow(double noundef %348, double noundef %109) #6
  %351 = fmul double %349, %350
  %352 = getelementptr inbounds i8, ptr %0, i64 80
  store double %351, ptr %352, align 8, !tbaa !25
  %353 = load double, ptr %17, align 8, !tbaa !9
  %354 = fdiv double %111, %.pre-phi
  %355 = call double @pow(double noundef %348, double noundef %354) #6
  %356 = fmul double %353, %355
  %357 = getelementptr inbounds i8, ptr %0, i64 88
  store double %356, ptr %357, align 8, !tbaa !9
  %358 = fneg double %23
  %359 = fmul double %.pre-phi, 5.000000e-01
  %360 = load double, ptr %29, align 8, !tbaa !26
  %361 = call double @llvm.fmuladd.f64(double %359, double %360, double %358)
  %362 = fadd double %361, 0.000000e+00
  %363 = fmul double %107, %362
  br label %367

364:                                              ; preds = %341
  %365 = getelementptr inbounds i8, ptr %0, i64 80
  store double %.0157, ptr %365, align 8, !tbaa !25
  %366 = getelementptr inbounds i8, ptr %0, i64 112
  store double %213, ptr %366, align 8, !tbaa !26
  br label %367

367:                                              ; preds = %332, %327, %343, %364, %336, %290, %282, %301, %319, %294
  %.sink207 = phi i64 [ 88, %332 ], [ 88, %327 ], [ 112, %343 ], [ 88, %364 ], [ 88, %336 ], [ 88, %290 ], [ 88, %282 ], [ 112, %301 ], [ 88, %319 ], [ 88, %294 ]
  %.sink = phi double [ %276, %332 ], [ %323, %327 ], [ %363, %343 ], [ %276, %364 ], [ %323, %336 ], [ %276, %290 ], [ %278, %282 ], [ %318, %301 ], [ %276, %319 ], [ %278, %294 ]
  %368 = getelementptr inbounds i8, ptr %0, i64 %.sink207
  store double %.sink, ptr %368, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  ret void
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7MixtureC2ERKS_(ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10macroParamC2E7Mixture(ptr noundef nonnull align 8 dereferenceable(176), ptr noundef) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7MixtureD2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @pow(double noundef, double noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) local_unnamed_addr #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 88}
!10 = !{!"_ZTS10macroParam", !11, i64 0, !18, i64 32, !18, i64 56, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !22, i64 144}
!11 = !{!"_ZTS7Mixture", !12, i64 0, !17, i64 24}
!12 = !{!"_ZTSSt6vectorI16MixtureComponentSaIS0_EE", !13, i64 0}
!13 = !{!"_ZTSSt12_Vector_baseI16MixtureComponentSaIS0_EE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseI16MixtureComponentSaIS0_EE12_Vector_implE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseI16MixtureComponentSaIS0_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!16 = !{!"any pointer", !7, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSSt6vectorIdSaIdEE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !23, i64 0, !24, i64 8, !7, i64 16}
!23 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !16, i64 0}
!24 = !{!"long", !7, i64 0}
!25 = !{!10, !6, i64 80}
!26 = !{!10, !6, i64 112}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}


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