; LLVM IR from CLASS-SZ/class_sz :: class-sz/source (perturbations)

; 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.perturb_parameters_and_workspace = type { ptr, ptr, ptr, ptr, i32, i32, i32, double, ptr }
%struct.perturb_workspace = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, ptr, ptr, ptr, double, double, double, double, double, double, double, double, double, ptr, i32, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, ptr }
%struct.background = type { double, double, double, double, double, double, double, i32, double, double, double, double, i16, double, double, double, double, double, double, double, double, double, i16, double, double, ptr, i32, i32, double, i32, ptr, ptr, double, ptr, double, ptr, double, ptr, double, ptr, ptr, ptr, double, double, double, double, i32, ptr, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i16, i16, i16, i16, i16, i16, [2048 x i8], i16, [2048 x i8] }
%struct.thermo = type { double, i32, i32, i32, double, double, i16, i16, double, double, double, double, i32, ptr, ptr, double, i32, ptr, ptr, double, i32, ptr, ptr, double, i16, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i16, i16, i16, [2048 x i8] }
%struct.perturbs = type { i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i32, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i32, i32, i32, i32, double, i32, i32, [100 x double], [100 x double], i32, i32, i32, i32, i32, double, i32, i32, [30 x double], double, double, double, ptr, ptr, i32, i16, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, double, double, ptr, i32, double, double, double, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, [8000 x i8], [8000 x i8], [8000 x i8], i32, i32, i32, [30 x ptr], [30 x ptr], [30 x ptr], [30 x i32], [30 x i32], [30 x i32], i16, [2048 x i8] }
%struct.perturb_vector = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr }
%struct.precision = type { double, double, double, double, double, double, double, double, double, double, double, double, double, [256 x i8], double, i32, double, i32, i32, double, i32, double, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, [256 x i8], [256 x i8], [256 x i8], double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, double, double, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, i32, double, double, i32, double, double, i32, double, i32, double, double, i32, double, double, double, i32, double, double, double, double, double, i32, double, double, double, double, double, double, double, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, double, double, double, double, i32, double, double, i32, i32, i32, double, double, [2048 x i8] }

@.str = external hidden unnamed_addr constant [18 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.322 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.345 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.347 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.349 = external hidden unnamed_addr constant [132 x i8], align 1
@__func__.perturb_derivs = external hidden unnamed_addr constant [15 x i8], align 1
@.str.356 = external hidden unnamed_addr constant [50 x i8], align 1
@stderr = external global ptr, align 8
@.str.357 = external hidden unnamed_addr constant [19 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 void @class_protect_sprintf(ptr noundef, ptr noundef, ...) #1

; 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 i32 @fprintf(ptr noundef, ptr noundef, ...) #2

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

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

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

declare i32 @background_at_tau(ptr noundef, double noundef, i16 noundef signext, i16 noundef signext, ptr noundef, ptr noundef) #1

declare i32 @thermodynamics_at_z(ptr noundef, ptr noundef, double noundef, i16 noundef signext, ptr noundef, ptr noundef, ptr noundef) #1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @perturb_derivs(double noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #4 {
  %6 = alloca i32, align 4
  %7 = alloca double, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca ptr, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %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 double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca double, align 8
  %58 = alloca double, align 8
  %59 = alloca double, align 8
  %60 = alloca double, align 8
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca double, align 8
  %64 = alloca double, align 8
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca double, align 8
  %69 = alloca double, align 8
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca double, align 8
  %74 = alloca double, align 8
  %75 = alloca double, align 8
  %76 = alloca double, align 8
  %77 = alloca double, align 8
  %78 = alloca double, align 8
  %79 = alloca double, align 8
  %80 = alloca double, align 8
  %81 = alloca double, align 8
  %82 = alloca double, align 8
  %83 = alloca double, align 8
  %84 = alloca double, align 8
  %85 = alloca double, align 8
  %86 = alloca double, align 8
  %87 = alloca double, align 8
  %88 = alloca double, align 8
  %89 = alloca [2048 x i8], align 16
  %90 = alloca i32, align 4
  %91 = alloca [2048 x i8], align 16
  %92 = alloca [2048 x i8], align 16
  %93 = alloca [2048 x i8], align 16
  %94 = alloca [2048 x i8], align 16
  store double %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !9
  store ptr %2, ptr %9, align 8, !tbaa !9
  store ptr %3, ptr %10, align 8, !tbaa !9
  store ptr %4, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  store double 0.000000e+00, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  store double 0.000000e+00, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  store double 0.000000e+00, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  store double 0.000000e+00, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  store double 0.000000e+00, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  store double 0.000000e+00, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  store double 0.000000e+00, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  store double 0.000000e+00, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  store double 0.000000e+00, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  store double 0.000000e+00, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  store double 0.000000e+00, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  store double 0.000000e+00, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  store double 0.000000e+00, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  store double 0.000000e+00, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  store double 0.000000e+00, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #5
  store double 0.000000e+00, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  store double 0.000000e+00, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #5
  store double 0.000000e+00, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #5
  store double 0.000000e+00, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #5
  store double 0.000000e+00, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #5
  store double 0.000000e+00, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #5
  store double 0.000000e+00, ptr %77, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #5
  store double 0.000000e+00, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #5
  store double 0.000000e+00, ptr %85, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #5
  store double 0.000000e+00, ptr %86, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #5
  store double 0.000000e+00, ptr %87, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #5
  store double 0.000000e+00, ptr %88, align 8, !tbaa !5
  %95 = load ptr, ptr %10, align 8, !tbaa !9
  store ptr %95, ptr %17, align 8, !tbaa !9
  %96 = load ptr, ptr %17, align 8, !tbaa !9
  %97 = getelementptr inbounds %struct.perturb_parameters_and_workspace, ptr %96, i32 0, i32 7
  %98 = load double, ptr %97, align 8, !tbaa !11
  store double %98, ptr %18, align 8, !tbaa !5
  %99 = load double, ptr %18, align 8, !tbaa !5
  %100 = load double, ptr %18, align 8, !tbaa !5
  %101 = fmul double %99, %100
  store double %101, ptr %19, align 8, !tbaa !5
  %102 = load ptr, ptr %17, align 8, !tbaa !9
  %103 = getelementptr inbounds %struct.perturb_parameters_and_workspace, ptr %102, i32 0, i32 4
  %104 = load i32, ptr %103, align 8, !tbaa !14
  store i32 %104, ptr %20, align 4, !tbaa !15
  %105 = load ptr, ptr %17, align 8, !tbaa !9
  %106 = getelementptr inbounds %struct.perturb_parameters_and_workspace, ptr %105, i32 0, i32 0
  %107 = load ptr, ptr %106, align 8, !tbaa !16
  store ptr %107, ptr %21, align 8, !tbaa !9
  %108 = load ptr, ptr %17, align 8, !tbaa !9
  %109 = getelementptr inbounds %struct.perturb_parameters_and_workspace, ptr %108, i32 0, i32 1
  %110 = load ptr, ptr %109, align 8, !tbaa !17
  store ptr %110, ptr %22, align 8, !tbaa !9
  %111 = load ptr, ptr %17, align 8, !tbaa !9
  %112 = getelementptr inbounds %struct.perturb_parameters_and_workspace, ptr %111, i32 0, i32 2
  %113 = load ptr, ptr %112, align 8, !tbaa !18
  store ptr %113, ptr %23, align 8, !tbaa !9
  %114 = load ptr, ptr %17, align 8, !tbaa !9
  %115 = getelementptr inbounds %struct.perturb_parameters_and_workspace, ptr %114, i32 0, i32 3
  %116 = load ptr, ptr %115, align 8, !tbaa !19
  store ptr %116, ptr %24, align 8, !tbaa !9
  %117 = load ptr, ptr %17, align 8, !tbaa !9
  %118 = getelementptr inbounds %struct.perturb_parameters_and_workspace, ptr %117, i32 0, i32 8
  %119 = load ptr, ptr %118, align 8, !tbaa !20
  store ptr %119, ptr %25, align 8, !tbaa !9
  %120 = load ptr, ptr %25, align 8, !tbaa !9
  %121 = getelementptr inbounds %struct.perturb_workspace, ptr %120, i32 0, i32 58
  %122 = load ptr, ptr %121, align 8, !tbaa !21
  store ptr %122, ptr %29, align 8, !tbaa !9
  %123 = load ptr, ptr %25, align 8, !tbaa !9
  %124 = getelementptr inbounds %struct.perturb_workspace, ptr %123, i32 0, i32 11
  %125 = load ptr, ptr %124, align 8, !tbaa !24
  store ptr %125, ptr %26, align 8, !tbaa !9
  %126 = load ptr, ptr %25, align 8, !tbaa !9
  %127 = getelementptr inbounds %struct.perturb_workspace, ptr %126, i32 0, i32 12
  %128 = load ptr, ptr %127, align 8, !tbaa !25
  store ptr %128, ptr %27, align 8, !tbaa !9
  %129 = load ptr, ptr %25, align 8, !tbaa !9
  %130 = getelementptr inbounds %struct.perturb_workspace, ptr %129, i32 0, i32 13
  %131 = load ptr, ptr %130, align 8, !tbaa !26
  store ptr %131, ptr %28, align 8, !tbaa !9
  %132 = load ptr, ptr %25, align 8, !tbaa !9
  %133 = getelementptr inbounds %struct.perturb_workspace, ptr %132, i32 0, i32 14
  %134 = load ptr, ptr %133, align 8, !tbaa !27
  store ptr %134, ptr %30, align 8, !tbaa !9
  %135 = load ptr, ptr %22, align 8, !tbaa !9
  %136 = load double, ptr %7, align 8, !tbaa !5
  %137 = load ptr, ptr %22, align 8, !tbaa !9
  %138 = getelementptr inbounds %struct.background, ptr %137, i32 0, i32 142
  %139 = load i16, ptr %138, align 2, !tbaa !28
  %140 = load ptr, ptr %22, align 8, !tbaa !9
  %141 = getelementptr inbounds %struct.background, ptr %140, i32 0, i32 145
  %142 = load i16, ptr %141, align 8, !tbaa !30
  %143 = load ptr, ptr %25, align 8, !tbaa !9
  %144 = getelementptr inbounds %struct.perturb_workspace, ptr %143, i32 0, i32 47
  %145 = load ptr, ptr %26, align 8, !tbaa !9
  %146 = call i32 @background_at_tau(ptr noundef %135, double noundef %136, i16 noundef signext %139, i16 noundef signext %142, ptr noundef %144, ptr noundef %145)
  %147 = icmp eq i32 %146, 1
  br i1 %147, label %148, label %155

148:                                              ; preds = %5
  call void @llvm.lifetime.start.p0(i64 2048, ptr %89) #5
  %149 = getelementptr inbounds [2048 x i8], ptr %89, i64 0, i64 0
  %150 = load ptr, ptr %22, align 8, !tbaa !9
  %151 = getelementptr inbounds %struct.background, ptr %150, i32 0, i32 149
  %152 = getelementptr inbounds [2048 x i8], ptr %151, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %149, ptr noundef @.str, ptr noundef @.str.345, ptr noundef %152)
  %153 = load ptr, ptr %11, align 8, !tbaa !9
  %154 = getelementptr inbounds [2048 x i8], ptr %89, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %153, ptr noundef @.str.2, ptr noundef @__func__.perturb_derivs, i32 noundef 8405, ptr noundef %154)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %89) #5
  store i32 1, ptr %6, align 4
  store i32 1, ptr %90, align 4
  br label %6020

155:                                              ; preds = %5
  %156 = load ptr, ptr %22, align 8, !tbaa !9
  %157 = load ptr, ptr %23, align 8, !tbaa !9
  %158 = load ptr, ptr %26, align 8, !tbaa !9
  %159 = load ptr, ptr %22, align 8, !tbaa !9
  %160 = getelementptr inbounds %struct.background, ptr %159, i32 0, i32 59
  %161 = load i32, ptr %160, align 8, !tbaa !31
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds double, ptr %158, i64 %162
  %164 = load double, ptr %163, align 8, !tbaa !5
  %165 = fdiv double 1.000000e+00, %164
  %166 = fsub double %165, 1.000000e+00
  %167 = load ptr, ptr %23, align 8, !tbaa !9
  %168 = getelementptr inbounds %struct.thermo, ptr %167, i32 0, i32 91
  %169 = load i16, ptr %168, align 2, !tbaa !32
  %170 = load ptr, ptr %25, align 8, !tbaa !9
  %171 = getelementptr inbounds %struct.perturb_workspace, ptr %170, i32 0, i32 48
  %172 = load ptr, ptr %26, align 8, !tbaa !9
  %173 = load ptr, ptr %27, align 8, !tbaa !9
  %174 = call i32 @thermodynamics_at_z(ptr noundef %156, ptr noundef %157, double noundef %166, i16 noundef signext %169, ptr noundef %171, ptr noundef %172, ptr noundef %173)
  %175 = icmp eq i32 %174, 1
  br i1 %175, label %176, label %183

176:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 2048, ptr %91) #5
  %177 = getelementptr inbounds [2048 x i8], ptr %91, i64 0, i64 0
  %178 = load ptr, ptr %23, align 8, !tbaa !9
  %179 = getelementptr inbounds %struct.thermo, ptr %178, i32 0, i32 93
  %180 = getelementptr inbounds [2048 x i8], ptr %179, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %177, ptr noundef @.str, ptr noundef @.str.349, ptr noundef %180)
  %181 = load ptr, ptr %11, align 8, !tbaa !9
  %182 = getelementptr inbounds [2048 x i8], ptr %91, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %181, ptr noundef @.str.2, ptr noundef @__func__.perturb_derivs, i32 noundef 8415, ptr noundef %182)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %91) #5
  store i32 1, ptr %6, align 4
  store i32 1, ptr %90, align 4
  br label %6020

183:                                              ; preds = %155
  %184 = load ptr, ptr %21, align 8, !tbaa !9
  %185 = load ptr, ptr %22, align 8, !tbaa !9
  %186 = load ptr, ptr %23, align 8, !tbaa !9
  %187 = load ptr, ptr %24, align 8, !tbaa !9
  %188 = load i32, ptr %20, align 4, !tbaa !15
  %189 = load double, ptr %18, align 8, !tbaa !5
  %190 = load double, ptr %7, align 8, !tbaa !5
  %191 = load ptr, ptr %8, align 8, !tbaa !9
  %192 = load ptr, ptr %25, align 8, !tbaa !9
  %193 = call i32 @perturb_einstein(ptr noundef %184, ptr noundef %185, ptr noundef %186, ptr noundef %187, i32 noundef %188, double noundef %189, double noundef %190, ptr noundef %191, ptr noundef %192)
  %194 = icmp eq i32 %193, 1
  br i1 %194, label %195, label %202

195:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 2048, ptr %92) #5
  %196 = getelementptr inbounds [2048 x i8], ptr %92, i64 0, i64 0
  %197 = load ptr, ptr %24, align 8, !tbaa !9
  %198 = getelementptr inbounds %struct.perturbs, ptr %197, i32 0, i32 186
  %199 = getelementptr inbounds [2048 x i8], ptr %198, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %196, ptr noundef @.str, ptr noundef @.str.347, ptr noundef %199)
  %200 = load ptr, ptr %11, align 8, !tbaa !9
  %201 = getelementptr inbounds [2048 x i8], ptr %92, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %200, ptr noundef @.str.2, ptr noundef @__func__.perturb_derivs, i32 noundef 8428, ptr noundef %201)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %92) #5
  store i32 1, ptr %6, align 4
  store i32 1, ptr %90, align 4
  br label %6020

202:                                              ; preds = %183
  %203 = load ptr, ptr %26, align 8, !tbaa !9
  %204 = load ptr, ptr %22, align 8, !tbaa !9
  %205 = getelementptr inbounds %struct.background, ptr %204, i32 0, i32 59
  %206 = load i32, ptr %205, align 8, !tbaa !31
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds double, ptr %203, i64 %207
  %209 = load double, ptr %208, align 8, !tbaa !5
  store double %209, ptr %13, align 8, !tbaa !5
  %210 = load double, ptr %13, align 8, !tbaa !5
  %211 = load double, ptr %13, align 8, !tbaa !5
  %212 = fmul double %210, %211
  store double %212, ptr %14, align 8, !tbaa !5
  %213 = load ptr, ptr %26, align 8, !tbaa !9
  %214 = load ptr, ptr %22, align 8, !tbaa !9
  %215 = getelementptr inbounds %struct.background, ptr %214, i32 0, i32 60
  %216 = load i32, ptr %215, align 4, !tbaa !34
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds double, ptr %213, i64 %217
  %219 = load double, ptr %218, align 8, !tbaa !5
  %220 = load double, ptr %13, align 8, !tbaa !5
  %221 = fmul double %219, %220
  store double %221, ptr %15, align 8, !tbaa !5
  %222 = load ptr, ptr %26, align 8, !tbaa !9
  %223 = load ptr, ptr %22, align 8, !tbaa !9
  %224 = getelementptr inbounds %struct.background, ptr %223, i32 0, i32 62
  %225 = load i32, ptr %224, align 4, !tbaa !35
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds double, ptr %222, i64 %226
  %228 = load double, ptr %227, align 8, !tbaa !5
  %229 = fmul double 0x3FF5555555555555, %228
  %230 = load ptr, ptr %26, align 8, !tbaa !9
  %231 = load ptr, ptr %22, align 8, !tbaa !9
  %232 = getelementptr inbounds %struct.background, ptr %231, i32 0, i32 63
  %233 = load i32, ptr %232, align 8, !tbaa !36
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds double, ptr %230, i64 %234
  %236 = load double, ptr %235, align 8, !tbaa !5
  %237 = fdiv double %229, %236
  store double %237, ptr %16, align 8, !tbaa !5
  %238 = load ptr, ptr %22, align 8, !tbaa !9
  %239 = getelementptr inbounds %struct.background, ptr %238, i32 0, i32 128
  %240 = load i16, ptr %239, align 2, !tbaa !37
  %241 = sext i16 %240 to i32
  %242 = icmp eq i32 %241, 1
  br i1 %242, label %243, label %284

243:                                              ; preds = %202
  %244 = load ptr, ptr %26, align 8, !tbaa !9
  %245 = load ptr, ptr %22, align 8, !tbaa !9
  %246 = getelementptr inbounds %struct.background, ptr %245, i32 0, i32 70
  %247 = load i32, ptr %246, align 4, !tbaa !38
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds double, ptr %244, i64 %248
  %250 = load double, ptr %249, align 8, !tbaa !5
  %251 = fmul double 0x3FF5555555555555, %250
  %252 = load ptr, ptr %26, align 8, !tbaa !9
  %253 = load ptr, ptr %22, align 8, !tbaa !9
  %254 = getelementptr inbounds %struct.background, ptr %253, i32 0, i32 69
  %255 = load i32, ptr %254, align 8, !tbaa !39
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds double, ptr %252, i64 %256
  %258 = load double, ptr %257, align 8, !tbaa !5
  %259 = fdiv double %251, %258
  store double %259, ptr %85, align 8, !tbaa !5
  %260 = load ptr, ptr %27, align 8, !tbaa !9
  %261 = load ptr, ptr %23, align 8, !tbaa !9
  %262 = getelementptr inbounds %struct.thermo, ptr %261, i32 0, i32 45
  %263 = load i32, ptr %262, align 4, !tbaa !40
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds double, ptr %260, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !5
  store double %266, ptr %86, align 8, !tbaa !5
  %267 = load ptr, ptr %23, align 8, !tbaa !9
  %268 = getelementptr inbounds %struct.thermo, ptr %267, i32 0, i32 33
  %269 = load double, ptr %268, align 8, !tbaa !41
  %270 = load ptr, ptr %23, align 8, !tbaa !9
  %271 = getelementptr inbounds %struct.thermo, ptr %270, i32 0, i32 32
  %272 = load double, ptr %271, align 8, !tbaa !42
  %273 = fdiv double %269, %272
  %274 = load ptr, ptr %22, align 8, !tbaa !9
  %275 = getelementptr inbounds %struct.background, ptr %274, i32 0, i32 15
  %276 = load double, ptr %275, align 8, !tbaa !43
  %277 = fmul double %273, %276
  %278 = load ptr, ptr %22, align 8, !tbaa !9
  %279 = getelementptr inbounds %struct.background, ptr %278, i32 0, i32 17
  %280 = load double, ptr %279, align 8, !tbaa !44
  %281 = fdiv double %277, %280
  %282 = load double, ptr %86, align 8, !tbaa !5
  %283 = fmul double %281, %282
  store double %283, ptr %87, align 8, !tbaa !5
  br label %284

284:                                              ; preds = %243, %202
  %285 = load ptr, ptr %22, align 8, !tbaa !9
  %286 = getelementptr inbounds %struct.background, ptr %285, i32 0, i32 129
  %287 = load i16, ptr %286, align 8, !tbaa !45
  %288 = sext i16 %287 to i32
  %289 = icmp eq i32 %288, 0
  br i1 %289, label %290, label %295

290:                                              ; preds = %284
  %291 = load double, ptr %18, align 8, !tbaa !5
  %292 = load double, ptr %7, align 8, !tbaa !5
  %293 = fmul double %291, %292
  %294 = fdiv double 1.000000e+00, %293
  store double %294, ptr %79, align 8, !tbaa !5
  br label %324

295:                                              ; preds = %284
  %296 = load ptr, ptr %22, align 8, !tbaa !9
  %297 = getelementptr inbounds %struct.background, ptr %296, i32 0, i32 45
  %298 = load double, ptr %297, align 8, !tbaa !46
  %299 = call double @llvm.fabs.f64(double %298)
  %300 = call double @sqrt(double noundef %299) #5
  store double %300, ptr %80, align 8, !tbaa !5
  %301 = load ptr, ptr %22, align 8, !tbaa !9
  %302 = getelementptr inbounds %struct.background, ptr %301, i32 0, i32 45
  %303 = load double, ptr %302, align 8, !tbaa !46
  %304 = fcmp olt double %303, 0.000000e+00
  br i1 %304, label %305, label %314

305:                                              ; preds = %295
  %306 = load double, ptr %80, align 8, !tbaa !5
  %307 = load double, ptr %18, align 8, !tbaa !5
  %308 = fdiv double %306, %307
  %309 = load double, ptr %80, align 8, !tbaa !5
  %310 = load double, ptr %7, align 8, !tbaa !5
  %311 = fmul double %309, %310
  %312 = call double @tanh(double noundef %311) #5
  %313 = fdiv double %308, %312
  store double %313, ptr %79, align 8, !tbaa !5
  br label %323

314:                                              ; preds = %295
  %315 = load double, ptr %80, align 8, !tbaa !5
  %316 = load double, ptr %18, align 8, !tbaa !5
  %317 = fdiv double %315, %316
  %318 = load double, ptr %80, align 8, !tbaa !5
  %319 = load double, ptr %7, align 8, !tbaa !5
  %320 = fmul double %318, %319
  %321 = call double @tan(double noundef %320) #5
  %322 = fdiv double %317, %321
  store double %322, ptr %79, align 8, !tbaa !5
  br label %323

323:                                              ; preds = %314, %305
  br label %324

324:                                              ; preds = %323, %290
  %325 = load ptr, ptr %22, align 8, !tbaa !9
  %326 = getelementptr inbounds %struct.background, ptr %325, i32 0, i32 45
  %327 = load double, ptr %326, align 8, !tbaa !46
  %328 = fmul double 3.000000e+00, %327
  %329 = load double, ptr %19, align 8, !tbaa !5
  %330 = fdiv double %328, %329
  %331 = fsub double 1.000000e+00, %330
  store double %331, ptr %81, align 8, !tbaa !5
  %332 = load ptr, ptr %24, align 8, !tbaa !9
  %333 = getelementptr inbounds %struct.perturbs, ptr %332, i32 0, i32 2
  %334 = load i16, ptr %333, align 4, !tbaa !47
  %335 = sext i16 %334 to i32
  %336 = icmp eq i32 %335, 1
  br i1 %336, label %337, label %4175

337:                                              ; preds = %324
  %338 = load i32, ptr %20, align 4, !tbaa !15
  %339 = load ptr, ptr %24, align 8, !tbaa !9
  %340 = getelementptr inbounds %struct.perturbs, ptr %339, i32 0, i32 56
  %341 = load i32, ptr %340, align 4, !tbaa !49
  %342 = icmp eq i32 %338, %341
  br i1 %342, label %343, label %4175

343:                                              ; preds = %337
  %344 = load ptr, ptr %25, align 8, !tbaa !9
  %345 = getelementptr inbounds %struct.perturb_workspace, ptr %344, i32 0, i32 56
  %346 = load ptr, ptr %345, align 8, !tbaa !50
  %347 = load ptr, ptr %25, align 8, !tbaa !9
  %348 = getelementptr inbounds %struct.perturb_workspace, ptr %347, i32 0, i32 50
  %349 = load i32, ptr %348, align 4, !tbaa !51
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds i32, ptr %346, i64 %350
  %352 = load i32, ptr %351, align 4, !tbaa !15
  %353 = icmp eq i32 %352, 0
  br i1 %353, label %354, label %369

354:                                              ; preds = %343
  %355 = load ptr, ptr %8, align 8, !tbaa !9
  %356 = load ptr, ptr %30, align 8, !tbaa !9
  %357 = getelementptr inbounds %struct.perturb_vector, ptr %356, i32 0, i32 0
  %358 = load i32, ptr %357, align 8, !tbaa !52
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds double, ptr %355, i64 %359
  %361 = load double, ptr %360, align 8, !tbaa !5
  store double %361, ptr %31, align 8, !tbaa !5
  %362 = load ptr, ptr %8, align 8, !tbaa !9
  %363 = load ptr, ptr %30, align 8, !tbaa !9
  %364 = getelementptr inbounds %struct.perturb_vector, ptr %363, i32 0, i32 1
  %365 = load i32, ptr %364, align 4, !tbaa !54
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds double, ptr %362, i64 %366
  %368 = load double, ptr %367, align 8, !tbaa !5
  store double %368, ptr %32, align 8, !tbaa !5
  br label %369

369:                                              ; preds = %354, %343
  %370 = load ptr, ptr %22, align 8, !tbaa !9
  %371 = getelementptr inbounds %struct.background, ptr %370, i32 0, i32 127
  %372 = load i16, ptr %371, align 4, !tbaa !55
  %373 = sext i16 %372 to i32
  %374 = icmp eq i32 %373, 1
  br i1 %374, label %375, label %402

375:                                              ; preds = %369
  %376 = load ptr, ptr %25, align 8, !tbaa !9
  %377 = getelementptr inbounds %struct.perturb_workspace, ptr %376, i32 0, i32 56
  %378 = load ptr, ptr %377, align 8, !tbaa !50
  %379 = load ptr, ptr %25, align 8, !tbaa !9
  %380 = getelementptr inbounds %struct.perturb_workspace, ptr %379, i32 0, i32 52
  %381 = load i32, ptr %380, align 4, !tbaa !56
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds i32, ptr %378, i64 %382
  %384 = load i32, ptr %383, align 4, !tbaa !15
  %385 = icmp eq i32 %384, 0
  br i1 %385, label %386, label %401

386:                                              ; preds = %375
  %387 = load ptr, ptr %8, align 8, !tbaa !9
  %388 = load ptr, ptr %30, align 8, !tbaa !9
  %389 = getelementptr inbounds %struct.perturb_vector, ptr %388, i32 0, i32 28
  %390 = load i32, ptr %389, align 8, !tbaa !57
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds double, ptr %387, i64 %391
  %393 = load double, ptr %392, align 8, !tbaa !5
  store double %393, ptr %36, align 8, !tbaa !5
  %394 = load ptr, ptr %8, align 8, !tbaa !9
  %395 = load ptr, ptr %30, align 8, !tbaa !9
  %396 = getelementptr inbounds %struct.perturb_vector, ptr %395, i32 0, i32 29
  %397 = load i32, ptr %396, align 4, !tbaa !58
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds double, ptr %394, i64 %398
  %400 = load double, ptr %399, align 8, !tbaa !5
  store double %400, ptr %37, align 8, !tbaa !5
  br label %401

401:                                              ; preds = %386, %375
  br label %402

402:                                              ; preds = %401, %369
  %403 = load ptr, ptr %8, align 8, !tbaa !9
  %404 = load ptr, ptr %30, align 8, !tbaa !9
  %405 = getelementptr inbounds %struct.perturb_vector, ptr %404, i32 0, i32 10
  %406 = load i32, ptr %405, align 8, !tbaa !59
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds double, ptr %403, i64 %407
  %409 = load double, ptr %408, align 8, !tbaa !5
  store double %409, ptr %34, align 8, !tbaa !5
  %410 = load ptr, ptr %8, align 8, !tbaa !9
  %411 = load ptr, ptr %30, align 8, !tbaa !9
  %412 = getelementptr inbounds %struct.perturb_vector, ptr %411, i32 0, i32 11
  %413 = load i32, ptr %412, align 4, !tbaa !60
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds double, ptr %410, i64 %414
  %416 = load double, ptr %415, align 8, !tbaa !5
  store double %416, ptr %35, align 8, !tbaa !5
  %417 = load ptr, ptr %27, align 8, !tbaa !9
  %418 = load ptr, ptr %23, align 8, !tbaa !9
  %419 = getelementptr inbounds %struct.thermo, ptr %418, i32 0, i32 56
  %420 = load i32, ptr %419, align 8, !tbaa !61
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds double, ptr %417, i64 %421
  %423 = load double, ptr %422, align 8, !tbaa !5
  store double %423, ptr %38, align 8, !tbaa !5
  %424 = load double, ptr %38, align 8, !tbaa !5
  %425 = load double, ptr %34, align 8, !tbaa !5
  %426 = fmul double %424, %425
  store double %426, ptr %41, align 8, !tbaa !5
  %427 = load ptr, ptr %24, align 8, !tbaa !9
  %428 = getelementptr inbounds %struct.perturbs, ptr %427, i32 0, i32 10
  %429 = load i16, ptr %428, align 4, !tbaa !62
  %430 = sext i16 %429 to i32
  %431 = icmp eq i32 %430, 1
  br i1 %431, label %432, label %565

432:                                              ; preds = %402
  %433 = load ptr, ptr %25, align 8, !tbaa !9
  %434 = getelementptr inbounds %struct.perturb_workspace, ptr %433, i32 0, i32 56
  %435 = load ptr, ptr %434, align 8, !tbaa !50
  %436 = load ptr, ptr %25, align 8, !tbaa !9
  %437 = getelementptr inbounds %struct.perturb_workspace, ptr %436, i32 0, i32 49
  %438 = load i32, ptr %437, align 8, !tbaa !63
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds i32, ptr %435, i64 %439
  %441 = load i32, ptr %440, align 4, !tbaa !15
  %442 = icmp eq i32 %441, 1
  br i1 %442, label %443, label %565

443:                                              ; preds = %432
  %444 = load ptr, ptr %8, align 8, !tbaa !9
  %445 = load ptr, ptr %25, align 8, !tbaa !9
  %446 = getelementptr inbounds %struct.perturb_workspace, ptr %445, i32 0, i32 14
  %447 = load ptr, ptr %446, align 8, !tbaa !27
  %448 = getelementptr inbounds %struct.perturb_vector, ptr %447, i32 0, i32 33
  %449 = load i32, ptr %448, align 4, !tbaa !64
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds double, ptr %444, i64 %450
  %452 = load double, ptr %451, align 8, !tbaa !5
  store double %452, ptr %50, align 8, !tbaa !5
  %453 = load ptr, ptr %27, align 8, !tbaa !9
  %454 = load ptr, ptr %23, align 8, !tbaa !9
  %455 = getelementptr inbounds %struct.thermo, ptr %454, i32 0, i32 55
  %456 = load i32, ptr %455, align 4, !tbaa !65
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds double, ptr %453, i64 %457
  %459 = load double, ptr %458, align 8, !tbaa !5
  %460 = load double, ptr %34, align 8, !tbaa !5
  %461 = load double, ptr %50, align 8, !tbaa !5
  %462 = fadd double %460, %461
  %463 = fmul double %459, %462
  store double %463, ptr %41, align 8, !tbaa !5
  %464 = load ptr, ptr %8, align 8, !tbaa !9
  %465 = load ptr, ptr %25, align 8, !tbaa !9
  %466 = getelementptr inbounds %struct.perturb_workspace, ptr %465, i32 0, i32 14
  %467 = load ptr, ptr %466, align 8, !tbaa !27
  %468 = getelementptr inbounds %struct.perturb_vector, ptr %467, i32 0, i32 34
  %469 = load i32, ptr %468, align 8, !tbaa !66
  %470 = sext i32 %469 to i64
  %471 = getelementptr inbounds double, ptr %464, i64 %470
  %472 = load double, ptr %471, align 8, !tbaa !5
  store double %472, ptr %51, align 8, !tbaa !5
  %473 = load ptr, ptr %27, align 8, !tbaa !9
  %474 = load ptr, ptr %23, align 8, !tbaa !9
  %475 = getelementptr inbounds %struct.thermo, ptr %474, i32 0, i32 36
  %476 = load i32, ptr %475, align 8, !tbaa !67
  %477 = sext i32 %476 to i64
  %478 = getelementptr inbounds double, ptr %473, i64 %477
  %479 = load double, ptr %478, align 8, !tbaa !5
  store double %479, ptr %52, align 8, !tbaa !5
  %480 = load ptr, ptr %22, align 8, !tbaa !9
  %481 = getelementptr inbounds %struct.background, ptr %480, i32 0, i32 0
  %482 = load double, ptr %481, align 8, !tbaa !68
  %483 = fmul double %482, 0x41B1DE784A000000
  %484 = fdiv double %483, 0x449A22FF260E3826
  store double %484, ptr %46, align 8, !tbaa !5
  %485 = load double, ptr %46, align 8, !tbaa !5
  %486 = fmul double 3.000000e+00, %485
  %487 = load double, ptr %46, align 8, !tbaa !5
  %488 = fmul double %486, %487
  %489 = load ptr, ptr %22, align 8, !tbaa !9
  %490 = getelementptr inbounds %struct.background, ptr %489, i32 0, i32 3
  %491 = load double, ptr %490, align 8, !tbaa !69
  %492 = fmul double %488, %491
  %493 = load ptr, ptr %23, align 8, !tbaa !9
  %494 = getelementptr inbounds %struct.thermo, ptr %493, i32 0, i32 0
  %495 = load double, ptr %494, align 8, !tbaa !70
  %496 = fsub double 1.000000e+00, %495
  %497 = fmul double %492, %496
  %498 = fdiv double %497, 0x388DDA356D683EDB
  store double %498, ptr %47, align 8, !tbaa !5
  %499 = load ptr, ptr %22, align 8, !tbaa !9
  %500 = getelementptr inbounds %struct.background, ptr %499, i32 0, i32 58
  %501 = load double, ptr %500, align 8, !tbaa !71
  %502 = load double, ptr %13, align 8, !tbaa !5
  %503 = fdiv double %501, %502
  %504 = load ptr, ptr %22, align 8, !tbaa !9
  %505 = getelementptr inbounds %struct.background, ptr %504, i32 0, i32 58
  %506 = load double, ptr %505, align 8, !tbaa !71
  %507 = load double, ptr %13, align 8, !tbaa !5
  %508 = fdiv double %506, %507
  %509 = fmul double %503, %508
  %510 = load ptr, ptr %22, align 8, !tbaa !9
  %511 = getelementptr inbounds %struct.background, ptr %510, i32 0, i32 58
  %512 = load double, ptr %511, align 8, !tbaa !71
  %513 = load double, ptr %13, align 8, !tbaa !5
  %514 = fdiv double %512, %513
  %515 = fmul double %509, %514
  %516 = load double, ptr %47, align 8, !tbaa !5
  %517 = fmul double %515, %516
  store double %517, ptr %48, align 8, !tbaa !5
  %518 = load ptr, ptr %23, align 8, !tbaa !9
  %519 = getelementptr inbounds %struct.thermo, ptr %518, i32 0, i32 0
  %520 = load double, ptr %519, align 8, !tbaa !70
  %521 = load ptr, ptr %23, align 8, !tbaa !9
  %522 = getelementptr inbounds %struct.thermo, ptr %521, i32 0, i32 0
  %523 = load double, ptr %522, align 8, !tbaa !70
  %524 = fsub double 1.000000e+00, %523
  %525 = fmul double 3.971500e+00, %524
  %526 = fdiv double %520, %525
  store double %526, ptr %49, align 8, !tbaa !5
  %527 = call double @pow(double noundef 0x400921FB54442D18, double noundef 5.000000e+00) #5
  %528 = fmul double 0x3FE1111111111111, %527
  %529 = call double @pow(double noundef 0x3B30B0E7F1528C6D, double noundef 4.000000e+00) #5
  %530 = fmul double %528, %529
  %531 = call double @pow(double noundef 0x3ACEBD1F10915C4E, double noundef 3.000000e+00) #5
  %532 = fdiv double %530, %531
  store double %532, ptr %55, align 8, !tbaa !5
  %533 = load double, ptr %55, align 8, !tbaa !5
  %534 = fmul double 0x3A2C1C284AA542F2, %533
  %535 = fdiv double %534, 0x3D370B6E3145B296
  %536 = fmul double %535, 0x449A22FF260E3826
  store double %536, ptr %56, align 8, !tbaa !5
  %537 = load ptr, ptr %27, align 8, !tbaa !9
  %538 = load ptr, ptr %23, align 8, !tbaa !9
  %539 = getelementptr inbounds %struct.thermo, ptr %538, i32 0, i32 54
  %540 = load i32, ptr %539, align 8, !tbaa !72
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds double, ptr %537, i64 %541
  %543 = load double, ptr %542, align 8, !tbaa !5
  store double %543, ptr %57, align 8, !tbaa !5
  %544 = load double, ptr %57, align 8, !tbaa !5
  %545 = fmul double %544, 1.000000e-04
  %546 = call double @pow(double noundef %545, double noundef -6.166000e-01) #5
  %547 = fmul double 4.912260e-19, %546
  %548 = load double, ptr %57, align 8, !tbaa !5
  %549 = fmul double %548, 1.000000e-04
  %550 = call double @pow(double noundef %549, double noundef 5.300000e-01) #5
  %551 = call double @llvm.fmuladd.f64(double 6.703000e-01, double %550, double 1.000000e+00)
  %552 = fdiv double %547, %551
  store double %552, ptr %53, align 8, !tbaa !5
  %553 = load double, ptr %57, align 8, !tbaa !5
  %554 = fmul double %553, 1.000000e-04
  %555 = call double @pow(double noundef %554, double noundef 5.300000e-01) #5
  %556 = fmul double 6.703000e-01, %555
  %557 = call double @llvm.fmuladd.f64(double %556, double -1.146600e+00, double -6.166000e-01)
  %558 = load double, ptr %57, align 8, !tbaa !5
  %559 = fmul double %558, 1.000000e-04
  %560 = call double @pow(double noundef %559, double noundef 5.300000e-01) #5
  %561 = call double @llvm.fmuladd.f64(double 6.703000e-01, double %560, double 1.000000e+00)
  %562 = fdiv double %557, %561
  %563 = load double, ptr %50, align 8, !tbaa !5
  %564 = fmul double %562, %563
  store double %564, ptr %54, align 8, !tbaa !5
  br label %565

565:                                              ; preds = %443, %432, %402
  %566 = load ptr, ptr %24, align 8, !tbaa !9
  %567 = getelementptr inbounds %struct.perturbs, ptr %566, i32 0, i32 55
  %568 = load i32, ptr %567, align 8, !tbaa !73
  %569 = icmp eq i32 %568, 1
  br i1 %569, label %570, label %596

570:                                              ; preds = %565
  %571 = load ptr, ptr %28, align 8, !tbaa !9
  %572 = load ptr, ptr %25, align 8, !tbaa !9
  %573 = getelementptr inbounds %struct.perturb_workspace, ptr %572, i32 0, i32 2
  %574 = load i32, ptr %573, align 8, !tbaa !74
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds double, ptr %571, i64 %575
  %577 = load double, ptr %576, align 8, !tbaa !5
  %578 = fdiv double %577, 2.000000e+00
  store double %578, ptr %42, align 8, !tbaa !5
  store double 0.000000e+00, ptr %43, align 8, !tbaa !5
  %579 = load double, ptr %19, align 8, !tbaa !5
  %580 = load ptr, ptr %28, align 8, !tbaa !9
  %581 = load ptr, ptr %25, align 8, !tbaa !9
  %582 = getelementptr inbounds %struct.perturb_workspace, ptr %581, i32 0, i32 5
  %583 = load i32, ptr %582, align 4, !tbaa !75
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds double, ptr %580, i64 %584
  %586 = load double, ptr %585, align 8, !tbaa !5
  %587 = fmul double %579, %586
  store double %587, ptr %44, align 8, !tbaa !5
  %588 = load ptr, ptr %28, align 8, !tbaa !9
  %589 = load ptr, ptr %25, align 8, !tbaa !9
  %590 = getelementptr inbounds %struct.perturb_workspace, ptr %589, i32 0, i32 2
  %591 = load i32, ptr %590, align 8, !tbaa !74
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds double, ptr %588, i64 %592
  %594 = load double, ptr %593, align 8, !tbaa !5
  %595 = fdiv double %594, 2.000000e+00
  store double %595, ptr %45, align 8, !tbaa !5
  br label %596

596:                                              ; preds = %570, %565
  %597 = load ptr, ptr %24, align 8, !tbaa !9
  %598 = getelementptr inbounds %struct.perturbs, ptr %597, i32 0, i32 55
  %599 = load i32, ptr %598, align 8, !tbaa !73
  %600 = icmp eq i32 %599, 0
  br i1 %600, label %601, label %627

601:                                              ; preds = %596
  %602 = load ptr, ptr %28, align 8, !tbaa !9
  %603 = load ptr, ptr %25, align 8, !tbaa !9
  %604 = getelementptr inbounds %struct.perturb_workspace, ptr %603, i32 0, i32 1
  %605 = load i32, ptr %604, align 4, !tbaa !76
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds double, ptr %602, i64 %606
  %608 = load double, ptr %607, align 8, !tbaa !5
  %609 = fmul double -3.000000e+00, %608
  store double %609, ptr %42, align 8, !tbaa !5
  %610 = load double, ptr %19, align 8, !tbaa !5
  %611 = load ptr, ptr %28, align 8, !tbaa !9
  %612 = load ptr, ptr %25, align 8, !tbaa !9
  %613 = getelementptr inbounds %struct.perturb_workspace, ptr %612, i32 0, i32 0
  %614 = load i32, ptr %613, align 8, !tbaa !77
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds double, ptr %611, i64 %615
  %617 = load double, ptr %616, align 8, !tbaa !5
  %618 = fmul double %610, %617
  store double %618, ptr %43, align 8, !tbaa !5
  store double 0.000000e+00, ptr %44, align 8, !tbaa !5
  %619 = load ptr, ptr %28, align 8, !tbaa !9
  %620 = load ptr, ptr %25, align 8, !tbaa !9
  %621 = getelementptr inbounds %struct.perturb_workspace, ptr %620, i32 0, i32 1
  %622 = load i32, ptr %621, align 4, !tbaa !76
  %623 = sext i32 %622 to i64
  %624 = getelementptr inbounds double, ptr %619, i64 %623
  %625 = load double, ptr %624, align 8, !tbaa !5
  %626 = fmul double -6.000000e+00, %625
  store double %626, ptr %45, align 8, !tbaa !5
  br label %627

627:                                              ; preds = %601, %596
  %628 = load ptr, ptr %25, align 8, !tbaa !9
  %629 = getelementptr inbounds %struct.perturb_workspace, ptr %628, i32 0, i32 56
  %630 = load ptr, ptr %629, align 8, !tbaa !50
  %631 = load ptr, ptr %25, align 8, !tbaa !9
  %632 = getelementptr inbounds %struct.perturb_workspace, ptr %631, i32 0, i32 50
  %633 = load i32, ptr %632, align 4, !tbaa !51
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds i32, ptr %630, i64 %634
  %636 = load i32, ptr %635, align 4, !tbaa !15
  %637 = icmp eq i32 %636, 1
  br i1 %637, label %638, label %645

638:                                              ; preds = %627
  %639 = load ptr, ptr %25, align 8, !tbaa !9
  %640 = getelementptr inbounds %struct.perturb_workspace, ptr %639, i32 0, i32 26
  %641 = load double, ptr %640, align 8, !tbaa !78
  store double %641, ptr %31, align 8, !tbaa !5
  %642 = load ptr, ptr %25, align 8, !tbaa !9
  %643 = getelementptr inbounds %struct.perturb_workspace, ptr %642, i32 0, i32 27
  %644 = load double, ptr %643, align 8, !tbaa !79
  store double %644, ptr %32, align 8, !tbaa !5
  br label %645

645:                                              ; preds = %638, %627
  %646 = load ptr, ptr %22, align 8, !tbaa !9
  %647 = getelementptr inbounds %struct.background, ptr %646, i32 0, i32 127
  %648 = load i16, ptr %647, align 4, !tbaa !55
  %649 = sext i16 %648 to i32
  %650 = icmp eq i32 %649, 1
  br i1 %650, label %651, label %670

651:                                              ; preds = %645
  %652 = load ptr, ptr %25, align 8, !tbaa !9
  %653 = getelementptr inbounds %struct.perturb_workspace, ptr %652, i32 0, i32 56
  %654 = load ptr, ptr %653, align 8, !tbaa !50
  %655 = load ptr, ptr %25, align 8, !tbaa !9
  %656 = getelementptr inbounds %struct.perturb_workspace, ptr %655, i32 0, i32 52
  %657 = load i32, ptr %656, align 4, !tbaa !56
  %658 = sext i32 %657 to i64
  %659 = getelementptr inbounds i32, ptr %654, i64 %658
  %660 = load i32, ptr %659, align 4, !tbaa !15
  %661 = icmp eq i32 %660, 1
  br i1 %661, label %662, label %669

662:                                              ; preds = %651
  %663 = load ptr, ptr %25, align 8, !tbaa !9
  %664 = getelementptr inbounds %struct.perturb_workspace, ptr %663, i32 0, i32 30
  %665 = load double, ptr %664, align 8, !tbaa !80
  store double %665, ptr %36, align 8, !tbaa !5
  %666 = load ptr, ptr %25, align 8, !tbaa !9
  %667 = getelementptr inbounds %struct.perturb_workspace, ptr %666, i32 0, i32 31
  %668 = load double, ptr %667, align 8, !tbaa !81
  store double %668, ptr %37, align 8, !tbaa !5
  br label %669

669:                                              ; preds = %662, %651
  br label %670

670:                                              ; preds = %669, %645
  %671 = load ptr, ptr %25, align 8, !tbaa !9
  %672 = getelementptr inbounds %struct.perturb_workspace, ptr %671, i32 0, i32 56
  %673 = load ptr, ptr %672, align 8, !tbaa !50
  %674 = load ptr, ptr %25, align 8, !tbaa !9
  %675 = getelementptr inbounds %struct.perturb_workspace, ptr %674, i32 0, i32 50
  %676 = load i32, ptr %675, align 4, !tbaa !51
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds i32, ptr %673, i64 %677
  %679 = load i32, ptr %678, align 4, !tbaa !15
  %680 = icmp eq i32 %679, 0
  br i1 %680, label %681, label %692

681:                                              ; preds = %670
  %682 = load double, ptr %32, align 8, !tbaa !5
  %683 = load double, ptr %42, align 8, !tbaa !5
  %684 = fadd double %682, %683
  %685 = fmul double 0xBFF5555555555555, %684
  %686 = load ptr, ptr %9, align 8, !tbaa !9
  %687 = load ptr, ptr %30, align 8, !tbaa !9
  %688 = getelementptr inbounds %struct.perturb_vector, ptr %687, i32 0, i32 0
  %689 = load i32, ptr %688, align 8, !tbaa !52
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds double, ptr %686, i64 %690
  store double %685, ptr %691, align 8, !tbaa !5
  br label %692

692:                                              ; preds = %681, %670
  %693 = load double, ptr %35, align 8, !tbaa !5
  %694 = load double, ptr %42, align 8, !tbaa !5
  %695 = fadd double %693, %694
  %696 = fneg double %695
  %697 = load ptr, ptr %9, align 8, !tbaa !9
  %698 = load ptr, ptr %30, align 8, !tbaa !9
  %699 = getelementptr inbounds %struct.perturb_vector, ptr %698, i32 0, i32 10
  %700 = load i32, ptr %699, align 8, !tbaa !59
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds double, ptr %697, i64 %701
  store double %696, ptr %702, align 8, !tbaa !5
  %703 = load ptr, ptr %25, align 8, !tbaa !9
  %704 = getelementptr inbounds %struct.perturb_workspace, ptr %703, i32 0, i32 56
  %705 = load ptr, ptr %704, align 8, !tbaa !50
  %706 = load ptr, ptr %25, align 8, !tbaa !9
  %707 = getelementptr inbounds %struct.perturb_workspace, ptr %706, i32 0, i32 49
  %708 = load i32, ptr %707, align 8, !tbaa !63
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds i32, ptr %705, i64 %709
  %711 = load i32, ptr %710, align 4, !tbaa !15
  %712 = icmp eq i32 %711, 1
  br i1 %712, label %713, label %741

713:                                              ; preds = %692
  %714 = load double, ptr %15, align 8, !tbaa !5
  %715 = fneg double %714
  %716 = load double, ptr %35, align 8, !tbaa !5
  %717 = load double, ptr %43, align 8, !tbaa !5
  %718 = call double @llvm.fmuladd.f64(double %715, double %716, double %717)
  %719 = load double, ptr %19, align 8, !tbaa !5
  %720 = load double, ptr %41, align 8, !tbaa !5
  %721 = call double @llvm.fmuladd.f64(double %719, double %720, double %718)
  %722 = load double, ptr %16, align 8, !tbaa !5
  %723 = load ptr, ptr %27, align 8, !tbaa !9
  %724 = load ptr, ptr %23, align 8, !tbaa !9
  %725 = getelementptr inbounds %struct.thermo, ptr %724, i32 0, i32 37
  %726 = load i32, ptr %725, align 4, !tbaa !82
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds double, ptr %723, i64 %727
  %729 = load double, ptr %728, align 8, !tbaa !5
  %730 = fmul double %722, %729
  %731 = load double, ptr %32, align 8, !tbaa !5
  %732 = load double, ptr %35, align 8, !tbaa !5
  %733 = fsub double %731, %732
  %734 = call double @llvm.fmuladd.f64(double %730, double %733, double %721)
  %735 = load ptr, ptr %9, align 8, !tbaa !9
  %736 = load ptr, ptr %30, align 8, !tbaa !9
  %737 = getelementptr inbounds %struct.perturb_vector, ptr %736, i32 0, i32 11
  %738 = load i32, ptr %737, align 4, !tbaa !60
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds double, ptr %735, i64 %739
  store double %734, ptr %740, align 8, !tbaa !5
  br label %786

741:                                              ; preds = %692
  %742 = load ptr, ptr %8, align 8, !tbaa !9
  %743 = load ptr, ptr %17, align 8, !tbaa !9
  %744 = load ptr, ptr %11, align 8, !tbaa !9
  %745 = call i32 @perturb_tca_slip_and_shear(ptr noundef %742, ptr noundef %743, ptr noundef %744)
  %746 = icmp eq i32 %745, 1
  br i1 %746, label %747, label %752

747:                                              ; preds = %741
  call void @llvm.lifetime.start.p0(i64 2048, ptr %93) #5
  %748 = getelementptr inbounds [2048 x i8], ptr %93, i64 0, i64 0
  %749 = load ptr, ptr %11, align 8, !tbaa !9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %748, ptr noundef @.str, ptr noundef @.str.356, ptr noundef %749)
  %750 = load ptr, ptr %11, align 8, !tbaa !9
  %751 = getelementptr inbounds [2048 x i8], ptr %93, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %750, ptr noundef @.str.2, ptr noundef @__func__.perturb_derivs, i32 noundef 8600, ptr noundef %751)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %93) #5
  store i32 1, ptr %6, align 4
  store i32 1, ptr %90, align 4
  br label %6020

752:                                              ; preds = %741
  %753 = load double, ptr %15, align 8, !tbaa !5
  %754 = fneg double %753
  %755 = load double, ptr %35, align 8, !tbaa !5
  %756 = load double, ptr %19, align 8, !tbaa !5
  %757 = load double, ptr %41, align 8, !tbaa !5
  %758 = load double, ptr %16, align 8, !tbaa !5
  %759 = load double, ptr %31, align 8, !tbaa !5
  %760 = fdiv double %759, 4.000000e+00
  %761 = load double, ptr %81, align 8, !tbaa !5
  %762 = load ptr, ptr %25, align 8, !tbaa !9
  %763 = getelementptr inbounds %struct.perturb_workspace, ptr %762, i32 0, i32 23
  %764 = load double, ptr %763, align 8, !tbaa !83
  %765 = fneg double %761
  %766 = call double @llvm.fmuladd.f64(double %765, double %764, double %760)
  %767 = call double @llvm.fmuladd.f64(double %758, double %766, double %757)
  %768 = fmul double %756, %767
  %769 = call double @llvm.fmuladd.f64(double %754, double %755, double %768)
  %770 = load double, ptr %16, align 8, !tbaa !5
  %771 = load ptr, ptr %25, align 8, !tbaa !9
  %772 = getelementptr inbounds %struct.perturb_workspace, ptr %771, i32 0, i32 24
  %773 = load double, ptr %772, align 8, !tbaa !84
  %774 = call double @llvm.fmuladd.f64(double %770, double %773, double %769)
  %775 = load double, ptr %16, align 8, !tbaa !5
  %776 = fadd double 1.000000e+00, %775
  %777 = fdiv double %774, %776
  %778 = load double, ptr %43, align 8, !tbaa !5
  %779 = fadd double %777, %778
  %780 = load ptr, ptr %9, align 8, !tbaa !9
  %781 = load ptr, ptr %30, align 8, !tbaa !9
  %782 = getelementptr inbounds %struct.perturb_vector, ptr %781, i32 0, i32 11
  %783 = load i32, ptr %782, align 4, !tbaa !60
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds double, ptr %780, i64 %784
  store double %779, ptr %785, align 8, !tbaa !5
  br label %786

786:                                              ; preds = %752, %713
  %787 = load ptr, ptr %25, align 8, !tbaa !9
  %788 = getelementptr inbounds %struct.perturb_workspace, ptr %787, i32 0, i32 56
  %789 = load ptr, ptr %788, align 8, !tbaa !50
  %790 = load ptr, ptr %25, align 8, !tbaa !9
  %791 = getelementptr inbounds %struct.perturb_workspace, ptr %790, i32 0, i32 50
  %792 = load i32, ptr %791, align 4, !tbaa !51
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds i32, ptr %789, i64 %793
  %795 = load i32, ptr %794, align 4, !tbaa !15
  %796 = icmp eq i32 %795, 0
  br i1 %796, label %797, label %1463

797:                                              ; preds = %786
  %798 = load ptr, ptr %25, align 8, !tbaa !9
  %799 = getelementptr inbounds %struct.perturb_workspace, ptr %798, i32 0, i32 56
  %800 = load ptr, ptr %799, align 8, !tbaa !50
  %801 = load ptr, ptr %25, align 8, !tbaa !9
  %802 = getelementptr inbounds %struct.perturb_workspace, ptr %801, i32 0, i32 49
  %803 = load i32, ptr %802, align 8, !tbaa !63
  %804 = sext i32 %803 to i64
  %805 = getelementptr inbounds i32, ptr %800, i64 %804
  %806 = load i32, ptr %805, align 4, !tbaa !15
  %807 = icmp eq i32 %806, 1
  br i1 %807, label %808, label %1422

808:                                              ; preds = %797
  %809 = load ptr, ptr %8, align 8, !tbaa !9
  %810 = load ptr, ptr %30, align 8, !tbaa !9
  %811 = getelementptr inbounds %struct.perturb_vector, ptr %810, i32 0, i32 5
  %812 = load i32, ptr %811, align 4, !tbaa !85
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds double, ptr %809, i64 %813
  %815 = load double, ptr %814, align 8, !tbaa !5
  %816 = load ptr, ptr %8, align 8, !tbaa !9
  %817 = load ptr, ptr %30, align 8, !tbaa !9
  %818 = getelementptr inbounds %struct.perturb_vector, ptr %817, i32 0, i32 7
  %819 = load i32, ptr %818, align 4, !tbaa !86
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds double, ptr %816, i64 %820
  %822 = load double, ptr %821, align 8, !tbaa !5
  %823 = fadd double %815, %822
  %824 = load ptr, ptr %29, align 8, !tbaa !9
  %825 = getelementptr inbounds double, ptr %824, i64 2
  %826 = load double, ptr %825, align 8, !tbaa !5
  %827 = fmul double 2.000000e+00, %826
  %828 = load ptr, ptr %8, align 8, !tbaa !9
  %829 = load ptr, ptr %30, align 8, !tbaa !9
  %830 = getelementptr inbounds %struct.perturb_vector, ptr %829, i32 0, i32 2
  %831 = load i32, ptr %830, align 8, !tbaa !87
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds double, ptr %828, i64 %832
  %834 = load double, ptr %833, align 8, !tbaa !5
  %835 = call double @llvm.fmuladd.f64(double %827, double %834, double %823)
  %836 = fdiv double %835, 8.000000e+00
  store double %836, ptr %58, align 8, !tbaa !5
  %837 = load double, ptr %19, align 8, !tbaa !5
  %838 = load double, ptr %31, align 8, !tbaa !5
  %839 = fdiv double %838, 4.000000e+00
  %840 = load double, ptr %81, align 8, !tbaa !5
  %841 = load ptr, ptr %8, align 8, !tbaa !9
  %842 = load ptr, ptr %30, align 8, !tbaa !9
  %843 = getelementptr inbounds %struct.perturb_vector, ptr %842, i32 0, i32 2
  %844 = load i32, ptr %843, align 8, !tbaa !87
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds double, ptr %841, i64 %845
  %847 = load double, ptr %846, align 8, !tbaa !5
  %848 = fneg double %840
  %849 = call double @llvm.fmuladd.f64(double %848, double %847, double %839)
  %850 = load double, ptr %43, align 8, !tbaa !5
  %851 = call double @llvm.fmuladd.f64(double %837, double %849, double %850)
  %852 = load ptr, ptr %27, align 8, !tbaa !9
  %853 = load ptr, ptr %23, align 8, !tbaa !9
  %854 = getelementptr inbounds %struct.thermo, ptr %853, i32 0, i32 37
  %855 = load i32, ptr %854, align 4, !tbaa !82
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds double, ptr %852, i64 %856
  %858 = load double, ptr %857, align 8, !tbaa !5
  %859 = load double, ptr %35, align 8, !tbaa !5
  %860 = load double, ptr %32, align 8, !tbaa !5
  %861 = fsub double %859, %860
  %862 = call double @llvm.fmuladd.f64(double %858, double %861, double %851)
  %863 = load ptr, ptr %9, align 8, !tbaa !9
  %864 = load ptr, ptr %30, align 8, !tbaa !9
  %865 = getelementptr inbounds %struct.perturb_vector, ptr %864, i32 0, i32 1
  %866 = load i32, ptr %865, align 4, !tbaa !54
  %867 = sext i32 %866 to i64
  %868 = getelementptr inbounds double, ptr %863, i64 %867
  store double %862, ptr %868, align 8, !tbaa !5
  %869 = load double, ptr %32, align 8, !tbaa !5
  %870 = load double, ptr %44, align 8, !tbaa !5
  %871 = fadd double %869, %870
  %872 = load double, ptr %18, align 8, !tbaa !5
  %873 = fmul double 6.000000e-01, %872
  %874 = load ptr, ptr %29, align 8, !tbaa !9
  %875 = getelementptr inbounds double, ptr %874, i64 3
  %876 = load double, ptr %875, align 8, !tbaa !5
  %877 = fmul double %873, %876
  %878 = load ptr, ptr %29, align 8, !tbaa !9
  %879 = getelementptr inbounds double, ptr %878, i64 2
  %880 = load double, ptr %879, align 8, !tbaa !5
  %881 = fdiv double %877, %880
  %882 = load ptr, ptr %8, align 8, !tbaa !9
  %883 = load ptr, ptr %30, align 8, !tbaa !9
  %884 = getelementptr inbounds %struct.perturb_vector, ptr %883, i32 0, i32 3
  %885 = load i32, ptr %884, align 4, !tbaa !88
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds double, ptr %882, i64 %886
  %888 = load double, ptr %887, align 8, !tbaa !5
  %889 = fmul double %881, %888
  %890 = fneg double %889
  %891 = call double @llvm.fmuladd.f64(double 0x3FE1111111111111, double %871, double %890)
  %892 = load ptr, ptr %27, align 8, !tbaa !9
  %893 = load ptr, ptr %23, align 8, !tbaa !9
  %894 = getelementptr inbounds %struct.thermo, ptr %893, i32 0, i32 37
  %895 = load i32, ptr %894, align 4, !tbaa !82
  %896 = sext i32 %895 to i64
  %897 = getelementptr inbounds double, ptr %892, i64 %896
  %898 = load double, ptr %897, align 8, !tbaa !5
  %899 = load ptr, ptr %8, align 8, !tbaa !9
  %900 = load ptr, ptr %30, align 8, !tbaa !9
  %901 = getelementptr inbounds %struct.perturb_vector, ptr %900, i32 0, i32 2
  %902 = load i32, ptr %901, align 8, !tbaa !87
  %903 = sext i32 %902 to i64
  %904 = getelementptr inbounds double, ptr %899, i64 %903
  %905 = load double, ptr %904, align 8, !tbaa !5
  %906 = load ptr, ptr %29, align 8, !tbaa !9
  %907 = getelementptr inbounds double, ptr %906, i64 2
  %908 = load double, ptr %907, align 8, !tbaa !5
  %909 = fdiv double 8.000000e-01, %908
  %910 = load double, ptr %58, align 8, !tbaa !5
  %911 = fmul double %909, %910
  %912 = fneg double %911
  %913 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %905, double %912)
  %914 = fneg double %898
  %915 = call double @llvm.fmuladd.f64(double %914, double %913, double %891)
  %916 = fmul double 5.000000e-01, %915
  %917 = load ptr, ptr %9, align 8, !tbaa !9
  %918 = load ptr, ptr %30, align 8, !tbaa !9
  %919 = getelementptr inbounds %struct.perturb_vector, ptr %918, i32 0, i32 2
  %920 = load i32, ptr %919, align 8, !tbaa !87
  %921 = sext i32 %920 to i64
  %922 = getelementptr inbounds double, ptr %917, i64 %921
  store double %916, ptr %922, align 8, !tbaa !5
  store i32 3, ptr %12, align 4, !tbaa !15
  %923 = load double, ptr %18, align 8, !tbaa !5
  %924 = load i32, ptr %12, align 4, !tbaa !15
  %925 = sitofp i32 %924 to double
  %926 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %925, double 1.000000e+00)
  %927 = fdiv double %923, %926
  %928 = load i32, ptr %12, align 4, !tbaa !15
  %929 = sitofp i32 %928 to double
  %930 = load ptr, ptr %29, align 8, !tbaa !9
  %931 = load i32, ptr %12, align 4, !tbaa !15
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds double, ptr %930, i64 %932
  %934 = load double, ptr %933, align 8, !tbaa !5
  %935 = fmul double %929, %934
  %936 = fmul double %935, 2.000000e+00
  %937 = load ptr, ptr %29, align 8, !tbaa !9
  %938 = getelementptr inbounds double, ptr %937, i64 2
  %939 = load double, ptr %938, align 8, !tbaa !5
  %940 = fmul double %936, %939
  %941 = load ptr, ptr %8, align 8, !tbaa !9
  %942 = load ptr, ptr %30, align 8, !tbaa !9
  %943 = getelementptr inbounds %struct.perturb_vector, ptr %942, i32 0, i32 2
  %944 = load i32, ptr %943, align 8, !tbaa !87
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds double, ptr %941, i64 %945
  %947 = load double, ptr %946, align 8, !tbaa !5
  %948 = load i32, ptr %12, align 4, !tbaa !15
  %949 = sitofp i32 %948 to double
  %950 = fadd double %949, 1.000000e+00
  %951 = load ptr, ptr %29, align 8, !tbaa !9
  %952 = load i32, ptr %12, align 4, !tbaa !15
  %953 = add nsw i32 %952, 1
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds double, ptr %951, i64 %954
  %956 = load double, ptr %955, align 8, !tbaa !5
  %957 = fmul double %950, %956
  %958 = load ptr, ptr %8, align 8, !tbaa !9
  %959 = load ptr, ptr %30, align 8, !tbaa !9
  %960 = getelementptr inbounds %struct.perturb_vector, ptr %959, i32 0, i32 3
  %961 = load i32, ptr %960, align 4, !tbaa !88
  %962 = add nsw i32 %961, 1
  %963 = sext i32 %962 to i64
  %964 = getelementptr inbounds double, ptr %958, i64 %963
  %965 = load double, ptr %964, align 8, !tbaa !5
  %966 = fmul double %957, %965
  %967 = fneg double %966
  %968 = call double @llvm.fmuladd.f64(double %940, double %947, double %967)
  %969 = load ptr, ptr %27, align 8, !tbaa !9
  %970 = load ptr, ptr %23, align 8, !tbaa !9
  %971 = getelementptr inbounds %struct.thermo, ptr %970, i32 0, i32 37
  %972 = load i32, ptr %971, align 4, !tbaa !82
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds double, ptr %969, i64 %973
  %975 = load double, ptr %974, align 8, !tbaa !5
  %976 = load ptr, ptr %8, align 8, !tbaa !9
  %977 = load ptr, ptr %30, align 8, !tbaa !9
  %978 = getelementptr inbounds %struct.perturb_vector, ptr %977, i32 0, i32 3
  %979 = load i32, ptr %978, align 4, !tbaa !88
  %980 = sext i32 %979 to i64
  %981 = getelementptr inbounds double, ptr %976, i64 %980
  %982 = load double, ptr %981, align 8, !tbaa !5
  %983 = fmul double %975, %982
  %984 = fneg double %983
  %985 = call double @llvm.fmuladd.f64(double %927, double %968, double %984)
  %986 = load ptr, ptr %9, align 8, !tbaa !9
  %987 = load ptr, ptr %30, align 8, !tbaa !9
  %988 = getelementptr inbounds %struct.perturb_vector, ptr %987, i32 0, i32 3
  %989 = load i32, ptr %988, align 4, !tbaa !88
  %990 = sext i32 %989 to i64
  %991 = getelementptr inbounds double, ptr %986, i64 %990
  store double %985, ptr %991, align 8, !tbaa !5
  store i32 4, ptr %12, align 4, !tbaa !15
  br label %992

992:                                              ; preds = %1072, %808
  %993 = load i32, ptr %12, align 4, !tbaa !15
  %994 = load ptr, ptr %30, align 8, !tbaa !9
  %995 = getelementptr inbounds %struct.perturb_vector, ptr %994, i32 0, i32 4
  %996 = load i32, ptr %995, align 8, !tbaa !89
  %997 = icmp slt i32 %993, %996
  br i1 %997, label %998, label %1075

998:                                              ; preds = %992
  %999 = load double, ptr %18, align 8, !tbaa !5
  %1000 = load i32, ptr %12, align 4, !tbaa !15
  %1001 = sitofp i32 %1000 to double
  %1002 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1001, double 1.000000e+00)
  %1003 = fdiv double %999, %1002
  %1004 = load i32, ptr %12, align 4, !tbaa !15
  %1005 = sitofp i32 %1004 to double
  %1006 = load ptr, ptr %29, align 8, !tbaa !9
  %1007 = load i32, ptr %12, align 4, !tbaa !15
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds double, ptr %1006, i64 %1008
  %1010 = load double, ptr %1009, align 8, !tbaa !5
  %1011 = fmul double %1005, %1010
  %1012 = load ptr, ptr %8, align 8, !tbaa !9
  %1013 = load ptr, ptr %30, align 8, !tbaa !9
  %1014 = getelementptr inbounds %struct.perturb_vector, ptr %1013, i32 0, i32 0
  %1015 = load i32, ptr %1014, align 8, !tbaa !52
  %1016 = load i32, ptr %12, align 4, !tbaa !15
  %1017 = add nsw i32 %1015, %1016
  %1018 = sub nsw i32 %1017, 1
  %1019 = sext i32 %1018 to i64
  %1020 = getelementptr inbounds double, ptr %1012, i64 %1019
  %1021 = load double, ptr %1020, align 8, !tbaa !5
  %1022 = load i32, ptr %12, align 4, !tbaa !15
  %1023 = add nsw i32 %1022, 1
  %1024 = sitofp i32 %1023 to double
  %1025 = load ptr, ptr %29, align 8, !tbaa !9
  %1026 = load i32, ptr %12, align 4, !tbaa !15
  %1027 = add nsw i32 %1026, 1
  %1028 = sext i32 %1027 to i64
  %1029 = getelementptr inbounds double, ptr %1025, i64 %1028
  %1030 = load double, ptr %1029, align 8, !tbaa !5
  %1031 = fmul double %1024, %1030
  %1032 = load ptr, ptr %8, align 8, !tbaa !9
  %1033 = load ptr, ptr %30, align 8, !tbaa !9
  %1034 = getelementptr inbounds %struct.perturb_vector, ptr %1033, i32 0, i32 0
  %1035 = load i32, ptr %1034, align 8, !tbaa !52
  %1036 = load i32, ptr %12, align 4, !tbaa !15
  %1037 = add nsw i32 %1035, %1036
  %1038 = add nsw i32 %1037, 1
  %1039 = sext i32 %1038 to i64
  %1040 = getelementptr inbounds double, ptr %1032, i64 %1039
  %1041 = load double, ptr %1040, align 8, !tbaa !5
  %1042 = fmul double %1031, %1041
  %1043 = fneg double %1042
  %1044 = call double @llvm.fmuladd.f64(double %1011, double %1021, double %1043)
  %1045 = load ptr, ptr %27, align 8, !tbaa !9
  %1046 = load ptr, ptr %23, align 8, !tbaa !9
  %1047 = getelementptr inbounds %struct.thermo, ptr %1046, i32 0, i32 37
  %1048 = load i32, ptr %1047, align 4, !tbaa !82
  %1049 = sext i32 %1048 to i64
  %1050 = getelementptr inbounds double, ptr %1045, i64 %1049
  %1051 = load double, ptr %1050, align 8, !tbaa !5
  %1052 = load ptr, ptr %8, align 8, !tbaa !9
  %1053 = load ptr, ptr %30, align 8, !tbaa !9
  %1054 = getelementptr inbounds %struct.perturb_vector, ptr %1053, i32 0, i32 0
  %1055 = load i32, ptr %1054, align 8, !tbaa !52
  %1056 = load i32, ptr %12, align 4, !tbaa !15
  %1057 = add nsw i32 %1055, %1056
  %1058 = sext i32 %1057 to i64
  %1059 = getelementptr inbounds double, ptr %1052, i64 %1058
  %1060 = load double, ptr %1059, align 8, !tbaa !5
  %1061 = fmul double %1051, %1060
  %1062 = fneg double %1061
  %1063 = call double @llvm.fmuladd.f64(double %1003, double %1044, double %1062)
  %1064 = load ptr, ptr %9, align 8, !tbaa !9
  %1065 = load ptr, ptr %30, align 8, !tbaa !9
  %1066 = getelementptr inbounds %struct.perturb_vector, ptr %1065, i32 0, i32 0
  %1067 = load i32, ptr %1066, align 8, !tbaa !52
  %1068 = load i32, ptr %12, align 4, !tbaa !15
  %1069 = add nsw i32 %1067, %1068
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds double, ptr %1064, i64 %1070
  store double %1063, ptr %1071, align 8, !tbaa !5
  br label %1072

1072:                                             ; preds = %998
  %1073 = load i32, ptr %12, align 4, !tbaa !15
  %1074 = add nsw i32 %1073, 1
  store i32 %1074, ptr %12, align 4, !tbaa !15
  br label %992, !llvm.loop !90

1075:                                             ; preds = %992
  %1076 = load ptr, ptr %30, align 8, !tbaa !9
  %1077 = getelementptr inbounds %struct.perturb_vector, ptr %1076, i32 0, i32 4
  %1078 = load i32, ptr %1077, align 8, !tbaa !89
  store i32 %1078, ptr %12, align 4, !tbaa !15
  %1079 = load double, ptr %18, align 8, !tbaa !5
  %1080 = load ptr, ptr %29, align 8, !tbaa !9
  %1081 = load i32, ptr %12, align 4, !tbaa !15
  %1082 = sext i32 %1081 to i64
  %1083 = getelementptr inbounds double, ptr %1080, i64 %1082
  %1084 = load double, ptr %1083, align 8, !tbaa !5
  %1085 = load ptr, ptr %8, align 8, !tbaa !9
  %1086 = load ptr, ptr %30, align 8, !tbaa !9
  %1087 = getelementptr inbounds %struct.perturb_vector, ptr %1086, i32 0, i32 0
  %1088 = load i32, ptr %1087, align 8, !tbaa !52
  %1089 = load i32, ptr %12, align 4, !tbaa !15
  %1090 = add nsw i32 %1088, %1089
  %1091 = sub nsw i32 %1090, 1
  %1092 = sext i32 %1091 to i64
  %1093 = getelementptr inbounds double, ptr %1085, i64 %1092
  %1094 = load double, ptr %1093, align 8, !tbaa !5
  %1095 = load i32, ptr %12, align 4, !tbaa !15
  %1096 = sitofp i32 %1095 to double
  %1097 = fadd double 1.000000e+00, %1096
  %1098 = load double, ptr %79, align 8, !tbaa !5
  %1099 = fmul double %1097, %1098
  %1100 = load ptr, ptr %8, align 8, !tbaa !9
  %1101 = load ptr, ptr %30, align 8, !tbaa !9
  %1102 = getelementptr inbounds %struct.perturb_vector, ptr %1101, i32 0, i32 0
  %1103 = load i32, ptr %1102, align 8, !tbaa !52
  %1104 = load i32, ptr %12, align 4, !tbaa !15
  %1105 = add nsw i32 %1103, %1104
  %1106 = sext i32 %1105 to i64
  %1107 = getelementptr inbounds double, ptr %1100, i64 %1106
  %1108 = load double, ptr %1107, align 8, !tbaa !5
  %1109 = fmul double %1099, %1108
  %1110 = fneg double %1109
  %1111 = call double @llvm.fmuladd.f64(double %1084, double %1094, double %1110)
  %1112 = load ptr, ptr %27, align 8, !tbaa !9
  %1113 = load ptr, ptr %23, align 8, !tbaa !9
  %1114 = getelementptr inbounds %struct.thermo, ptr %1113, i32 0, i32 37
  %1115 = load i32, ptr %1114, align 4, !tbaa !82
  %1116 = sext i32 %1115 to i64
  %1117 = getelementptr inbounds double, ptr %1112, i64 %1116
  %1118 = load double, ptr %1117, align 8, !tbaa !5
  %1119 = load ptr, ptr %8, align 8, !tbaa !9
  %1120 = load ptr, ptr %30, align 8, !tbaa !9
  %1121 = getelementptr inbounds %struct.perturb_vector, ptr %1120, i32 0, i32 0
  %1122 = load i32, ptr %1121, align 8, !tbaa !52
  %1123 = load i32, ptr %12, align 4, !tbaa !15
  %1124 = add nsw i32 %1122, %1123
  %1125 = sext i32 %1124 to i64
  %1126 = getelementptr inbounds double, ptr %1119, i64 %1125
  %1127 = load double, ptr %1126, align 8, !tbaa !5
  %1128 = fmul double %1118, %1127
  %1129 = fneg double %1128
  %1130 = call double @llvm.fmuladd.f64(double %1079, double %1111, double %1129)
  %1131 = load ptr, ptr %9, align 8, !tbaa !9
  %1132 = load ptr, ptr %30, align 8, !tbaa !9
  %1133 = getelementptr inbounds %struct.perturb_vector, ptr %1132, i32 0, i32 0
  %1134 = load i32, ptr %1133, align 8, !tbaa !52
  %1135 = load i32, ptr %12, align 4, !tbaa !15
  %1136 = add nsw i32 %1134, %1135
  %1137 = sext i32 %1136 to i64
  %1138 = getelementptr inbounds double, ptr %1131, i64 %1137
  store double %1130, ptr %1138, align 8, !tbaa !5
  %1139 = load double, ptr %18, align 8, !tbaa !5
  %1140 = fneg double %1139
  %1141 = load ptr, ptr %8, align 8, !tbaa !9
  %1142 = load ptr, ptr %30, align 8, !tbaa !9
  %1143 = getelementptr inbounds %struct.perturb_vector, ptr %1142, i32 0, i32 5
  %1144 = load i32, ptr %1143, align 4, !tbaa !85
  %1145 = add nsw i32 %1144, 1
  %1146 = sext i32 %1145 to i64
  %1147 = getelementptr inbounds double, ptr %1141, i64 %1146
  %1148 = load double, ptr %1147, align 8, !tbaa !5
  %1149 = load ptr, ptr %27, align 8, !tbaa !9
  %1150 = load ptr, ptr %23, align 8, !tbaa !9
  %1151 = getelementptr inbounds %struct.thermo, ptr %1150, i32 0, i32 37
  %1152 = load i32, ptr %1151, align 4, !tbaa !82
  %1153 = sext i32 %1152 to i64
  %1154 = getelementptr inbounds double, ptr %1149, i64 %1153
  %1155 = load double, ptr %1154, align 8, !tbaa !5
  %1156 = load ptr, ptr %8, align 8, !tbaa !9
  %1157 = load ptr, ptr %30, align 8, !tbaa !9
  %1158 = getelementptr inbounds %struct.perturb_vector, ptr %1157, i32 0, i32 5
  %1159 = load i32, ptr %1158, align 4, !tbaa !85
  %1160 = sext i32 %1159 to i64
  %1161 = getelementptr inbounds double, ptr %1156, i64 %1160
  %1162 = load double, ptr %1161, align 8, !tbaa !5
  %1163 = load double, ptr %58, align 8, !tbaa !5
  %1164 = call double @llvm.fmuladd.f64(double -4.000000e+00, double %1163, double %1162)
  %1165 = fmul double %1155, %1164
  %1166 = fneg double %1165
  %1167 = call double @llvm.fmuladd.f64(double %1140, double %1148, double %1166)
  %1168 = load ptr, ptr %9, align 8, !tbaa !9
  %1169 = load ptr, ptr %30, align 8, !tbaa !9
  %1170 = getelementptr inbounds %struct.perturb_vector, ptr %1169, i32 0, i32 5
  %1171 = load i32, ptr %1170, align 4, !tbaa !85
  %1172 = sext i32 %1171 to i64
  %1173 = getelementptr inbounds double, ptr %1168, i64 %1172
  store double %1167, ptr %1173, align 8, !tbaa !5
  %1174 = load double, ptr %18, align 8, !tbaa !5
  %1175 = fdiv double %1174, 3.000000e+00
  %1176 = load ptr, ptr %8, align 8, !tbaa !9
  %1177 = load ptr, ptr %30, align 8, !tbaa !9
  %1178 = getelementptr inbounds %struct.perturb_vector, ptr %1177, i32 0, i32 6
  %1179 = load i32, ptr %1178, align 8, !tbaa !92
  %1180 = sub nsw i32 %1179, 1
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds double, ptr %1176, i64 %1181
  %1183 = load double, ptr %1182, align 8, !tbaa !5
  %1184 = load ptr, ptr %29, align 8, !tbaa !9
  %1185 = getelementptr inbounds double, ptr %1184, i64 2
  %1186 = load double, ptr %1185, align 8, !tbaa !5
  %1187 = fmul double 2.000000e+00, %1186
  %1188 = load ptr, ptr %8, align 8, !tbaa !9
  %1189 = load ptr, ptr %30, align 8, !tbaa !9
  %1190 = getelementptr inbounds %struct.perturb_vector, ptr %1189, i32 0, i32 6
  %1191 = load i32, ptr %1190, align 8, !tbaa !92
  %1192 = add nsw i32 %1191, 1
  %1193 = sext i32 %1192 to i64
  %1194 = getelementptr inbounds double, ptr %1188, i64 %1193
  %1195 = load double, ptr %1194, align 8, !tbaa !5
  %1196 = fneg double %1187
  %1197 = call double @llvm.fmuladd.f64(double %1196, double %1195, double %1183)
  %1198 = load ptr, ptr %27, align 8, !tbaa !9
  %1199 = load ptr, ptr %23, align 8, !tbaa !9
  %1200 = getelementptr inbounds %struct.thermo, ptr %1199, i32 0, i32 37
  %1201 = load i32, ptr %1200, align 4, !tbaa !82
  %1202 = sext i32 %1201 to i64
  %1203 = getelementptr inbounds double, ptr %1198, i64 %1202
  %1204 = load double, ptr %1203, align 8, !tbaa !5
  %1205 = load ptr, ptr %8, align 8, !tbaa !9
  %1206 = load ptr, ptr %30, align 8, !tbaa !9
  %1207 = getelementptr inbounds %struct.perturb_vector, ptr %1206, i32 0, i32 6
  %1208 = load i32, ptr %1207, align 8, !tbaa !92
  %1209 = sext i32 %1208 to i64
  %1210 = getelementptr inbounds double, ptr %1205, i64 %1209
  %1211 = load double, ptr %1210, align 8, !tbaa !5
  %1212 = fmul double %1204, %1211
  %1213 = fneg double %1212
  %1214 = call double @llvm.fmuladd.f64(double %1175, double %1197, double %1213)
  %1215 = load ptr, ptr %9, align 8, !tbaa !9
  %1216 = load ptr, ptr %30, align 8, !tbaa !9
  %1217 = getelementptr inbounds %struct.perturb_vector, ptr %1216, i32 0, i32 6
  %1218 = load i32, ptr %1217, align 8, !tbaa !92
  %1219 = sext i32 %1218 to i64
  %1220 = getelementptr inbounds double, ptr %1215, i64 %1219
  store double %1214, ptr %1220, align 8, !tbaa !5
  %1221 = load double, ptr %18, align 8, !tbaa !5
  %1222 = fdiv double %1221, 5.000000e+00
  %1223 = load ptr, ptr %29, align 8, !tbaa !9
  %1224 = getelementptr inbounds double, ptr %1223, i64 2
  %1225 = load double, ptr %1224, align 8, !tbaa !5
  %1226 = fmul double 2.000000e+00, %1225
  %1227 = load ptr, ptr %8, align 8, !tbaa !9
  %1228 = load ptr, ptr %30, align 8, !tbaa !9
  %1229 = getelementptr inbounds %struct.perturb_vector, ptr %1228, i32 0, i32 7
  %1230 = load i32, ptr %1229, align 4, !tbaa !86
  %1231 = sub nsw i32 %1230, 1
  %1232 = sext i32 %1231 to i64
  %1233 = getelementptr inbounds double, ptr %1227, i64 %1232
  %1234 = load double, ptr %1233, align 8, !tbaa !5
  %1235 = load ptr, ptr %29, align 8, !tbaa !9
  %1236 = getelementptr inbounds double, ptr %1235, i64 3
  %1237 = load double, ptr %1236, align 8, !tbaa !5
  %1238 = fmul double 3.000000e+00, %1237
  %1239 = load ptr, ptr %8, align 8, !tbaa !9
  %1240 = load ptr, ptr %30, align 8, !tbaa !9
  %1241 = getelementptr inbounds %struct.perturb_vector, ptr %1240, i32 0, i32 7
  %1242 = load i32, ptr %1241, align 4, !tbaa !86
  %1243 = add nsw i32 %1242, 1
  %1244 = sext i32 %1243 to i64
  %1245 = getelementptr inbounds double, ptr %1239, i64 %1244
  %1246 = load double, ptr %1245, align 8, !tbaa !5
  %1247 = fmul double %1238, %1246
  %1248 = fneg double %1247
  %1249 = call double @llvm.fmuladd.f64(double %1226, double %1234, double %1248)
  %1250 = load ptr, ptr %27, align 8, !tbaa !9
  %1251 = load ptr, ptr %23, align 8, !tbaa !9
  %1252 = getelementptr inbounds %struct.thermo, ptr %1251, i32 0, i32 37
  %1253 = load i32, ptr %1252, align 4, !tbaa !82
  %1254 = sext i32 %1253 to i64
  %1255 = getelementptr inbounds double, ptr %1250, i64 %1254
  %1256 = load double, ptr %1255, align 8, !tbaa !5
  %1257 = load ptr, ptr %8, align 8, !tbaa !9
  %1258 = load ptr, ptr %30, align 8, !tbaa !9
  %1259 = getelementptr inbounds %struct.perturb_vector, ptr %1258, i32 0, i32 7
  %1260 = load i32, ptr %1259, align 4, !tbaa !86
  %1261 = sext i32 %1260 to i64
  %1262 = getelementptr inbounds double, ptr %1257, i64 %1261
  %1263 = load double, ptr %1262, align 8, !tbaa !5
  %1264 = load double, ptr %58, align 8, !tbaa !5
  %1265 = call double @llvm.fmuladd.f64(double -8.000000e-01, double %1264, double %1263)
  %1266 = fmul double %1256, %1265
  %1267 = fneg double %1266
  %1268 = call double @llvm.fmuladd.f64(double %1222, double %1249, double %1267)
  %1269 = load ptr, ptr %9, align 8, !tbaa !9
  %1270 = load ptr, ptr %30, align 8, !tbaa !9
  %1271 = getelementptr inbounds %struct.perturb_vector, ptr %1270, i32 0, i32 7
  %1272 = load i32, ptr %1271, align 4, !tbaa !86
  %1273 = sext i32 %1272 to i64
  %1274 = getelementptr inbounds double, ptr %1269, i64 %1273
  store double %1268, ptr %1274, align 8, !tbaa !5
  store i32 3, ptr %12, align 4, !tbaa !15
  br label %1275

1275:                                             ; preds = %1355, %1075
  %1276 = load i32, ptr %12, align 4, !tbaa !15
  %1277 = load ptr, ptr %30, align 8, !tbaa !9
  %1278 = getelementptr inbounds %struct.perturb_vector, ptr %1277, i32 0, i32 9
  %1279 = load i32, ptr %1278, align 4, !tbaa !93
  %1280 = icmp slt i32 %1276, %1279
  br i1 %1280, label %1281, label %1358

1281:                                             ; preds = %1275
  %1282 = load double, ptr %18, align 8, !tbaa !5
  %1283 = load i32, ptr %12, align 4, !tbaa !15
  %1284 = sitofp i32 %1283 to double
  %1285 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1284, double 1.000000e+00)
  %1286 = fdiv double %1282, %1285
  %1287 = load i32, ptr %12, align 4, !tbaa !15
  %1288 = sitofp i32 %1287 to double
  %1289 = load ptr, ptr %29, align 8, !tbaa !9
  %1290 = load i32, ptr %12, align 4, !tbaa !15
  %1291 = sext i32 %1290 to i64
  %1292 = getelementptr inbounds double, ptr %1289, i64 %1291
  %1293 = load double, ptr %1292, align 8, !tbaa !5
  %1294 = fmul double %1288, %1293
  %1295 = load ptr, ptr %8, align 8, !tbaa !9
  %1296 = load ptr, ptr %30, align 8, !tbaa !9
  %1297 = getelementptr inbounds %struct.perturb_vector, ptr %1296, i32 0, i32 5
  %1298 = load i32, ptr %1297, align 4, !tbaa !85
  %1299 = load i32, ptr %12, align 4, !tbaa !15
  %1300 = add nsw i32 %1298, %1299
  %1301 = sub nsw i32 %1300, 1
  %1302 = sext i32 %1301 to i64
  %1303 = getelementptr inbounds double, ptr %1295, i64 %1302
  %1304 = load double, ptr %1303, align 8, !tbaa !5
  %1305 = load i32, ptr %12, align 4, !tbaa !15
  %1306 = sitofp i32 %1305 to double
  %1307 = fadd double %1306, 1.000000e+00
  %1308 = load ptr, ptr %29, align 8, !tbaa !9
  %1309 = load i32, ptr %12, align 4, !tbaa !15
  %1310 = add nsw i32 %1309, 1
  %1311 = sext i32 %1310 to i64
  %1312 = getelementptr inbounds double, ptr %1308, i64 %1311
  %1313 = load double, ptr %1312, align 8, !tbaa !5
  %1314 = fmul double %1307, %1313
  %1315 = load ptr, ptr %8, align 8, !tbaa !9
  %1316 = load ptr, ptr %30, align 8, !tbaa !9
  %1317 = getelementptr inbounds %struct.perturb_vector, ptr %1316, i32 0, i32 5
  %1318 = load i32, ptr %1317, align 4, !tbaa !85
  %1319 = load i32, ptr %12, align 4, !tbaa !15
  %1320 = add nsw i32 %1318, %1319
  %1321 = add nsw i32 %1320, 1
  %1322 = sext i32 %1321 to i64
  %1323 = getelementptr inbounds double, ptr %1315, i64 %1322
  %1324 = load double, ptr %1323, align 8, !tbaa !5
  %1325 = fmul double %1314, %1324
  %1326 = fneg double %1325
  %1327 = call double @llvm.fmuladd.f64(double %1294, double %1304, double %1326)
  %1328 = load ptr, ptr %27, align 8, !tbaa !9
  %1329 = load ptr, ptr %23, align 8, !tbaa !9
  %1330 = getelementptr inbounds %struct.thermo, ptr %1329, i32 0, i32 37
  %1331 = load i32, ptr %1330, align 4, !tbaa !82
  %1332 = sext i32 %1331 to i64
  %1333 = getelementptr inbounds double, ptr %1328, i64 %1332
  %1334 = load double, ptr %1333, align 8, !tbaa !5
  %1335 = load ptr, ptr %8, align 8, !tbaa !9
  %1336 = load ptr, ptr %30, align 8, !tbaa !9
  %1337 = getelementptr inbounds %struct.perturb_vector, ptr %1336, i32 0, i32 5
  %1338 = load i32, ptr %1337, align 4, !tbaa !85
  %1339 = load i32, ptr %12, align 4, !tbaa !15
  %1340 = add nsw i32 %1338, %1339
  %1341 = sext i32 %1340 to i64
  %1342 = getelementptr inbounds double, ptr %1335, i64 %1341
  %1343 = load double, ptr %1342, align 8, !tbaa !5
  %1344 = fmul double %1334, %1343
  %1345 = fneg double %1344
  %1346 = call double @llvm.fmuladd.f64(double %1286, double %1327, double %1345)
  %1347 = load ptr, ptr %9, align 8, !tbaa !9
  %1348 = load ptr, ptr %30, align 8, !tbaa !9
  %1349 = getelementptr inbounds %struct.perturb_vector, ptr %1348, i32 0, i32 5
  %1350 = load i32, ptr %1349, align 4, !tbaa !85
  %1351 = load i32, ptr %12, align 4, !tbaa !15
  %1352 = add nsw i32 %1350, %1351
  %1353 = sext i32 %1352 to i64
  %1354 = getelementptr inbounds double, ptr %1347, i64 %1353
  store double %1346, ptr %1354, align 8, !tbaa !5
  br label %1355

1355:                                             ; preds = %1281
  %1356 = load i32, ptr %12, align 4, !tbaa !15
  %1357 = add nsw i32 %1356, 1
  store i32 %1357, ptr %12, align 4, !tbaa !15
  br label %1275, !llvm.loop !94

1358:                                             ; preds = %1275
  %1359 = load ptr, ptr %30, align 8, !tbaa !9
  %1360 = getelementptr inbounds %struct.perturb_vector, ptr %1359, i32 0, i32 9
  %1361 = load i32, ptr %1360, align 4, !tbaa !93
  store i32 %1361, ptr %12, align 4, !tbaa !15
  %1362 = load double, ptr %18, align 8, !tbaa !5
  %1363 = load ptr, ptr %29, align 8, !tbaa !9
  %1364 = load i32, ptr %12, align 4, !tbaa !15
  %1365 = sext i32 %1364 to i64
  %1366 = getelementptr inbounds double, ptr %1363, i64 %1365
  %1367 = load double, ptr %1366, align 8, !tbaa !5
  %1368 = load ptr, ptr %8, align 8, !tbaa !9
  %1369 = load ptr, ptr %30, align 8, !tbaa !9
  %1370 = getelementptr inbounds %struct.perturb_vector, ptr %1369, i32 0, i32 5
  %1371 = load i32, ptr %1370, align 4, !tbaa !85
  %1372 = load i32, ptr %12, align 4, !tbaa !15
  %1373 = add nsw i32 %1371, %1372
  %1374 = sub nsw i32 %1373, 1
  %1375 = sext i32 %1374 to i64
  %1376 = getelementptr inbounds double, ptr %1368, i64 %1375
  %1377 = load double, ptr %1376, align 8, !tbaa !5
  %1378 = load i32, ptr %12, align 4, !tbaa !15
  %1379 = add nsw i32 %1378, 1
  %1380 = sitofp i32 %1379 to double
  %1381 = load double, ptr %79, align 8, !tbaa !5
  %1382 = fmul double %1380, %1381
  %1383 = load ptr, ptr %8, align 8, !tbaa !9
  %1384 = load ptr, ptr %30, align 8, !tbaa !9
  %1385 = getelementptr inbounds %struct.perturb_vector, ptr %1384, i32 0, i32 5
  %1386 = load i32, ptr %1385, align 4, !tbaa !85
  %1387 = load i32, ptr %12, align 4, !tbaa !15
  %1388 = add nsw i32 %1386, %1387
  %1389 = sext i32 %1388 to i64
  %1390 = getelementptr inbounds double, ptr %1383, i64 %1389
  %1391 = load double, ptr %1390, align 8, !tbaa !5
  %1392 = fmul double %1382, %1391
  %1393 = fneg double %1392
  %1394 = call double @llvm.fmuladd.f64(double %1367, double %1377, double %1393)
  %1395 = load ptr, ptr %27, align 8, !tbaa !9
  %1396 = load ptr, ptr %23, align 8, !tbaa !9
  %1397 = getelementptr inbounds %struct.thermo, ptr %1396, i32 0, i32 37
  %1398 = load i32, ptr %1397, align 4, !tbaa !82
  %1399 = sext i32 %1398 to i64
  %1400 = getelementptr inbounds double, ptr %1395, i64 %1399
  %1401 = load double, ptr %1400, align 8, !tbaa !5
  %1402 = load ptr, ptr %8, align 8, !tbaa !9
  %1403 = load ptr, ptr %30, align 8, !tbaa !9
  %1404 = getelementptr inbounds %struct.perturb_vector, ptr %1403, i32 0, i32 5
  %1405 = load i32, ptr %1404, align 4, !tbaa !85
  %1406 = load i32, ptr %12, align 4, !tbaa !15
  %1407 = add nsw i32 %1405, %1406
  %1408 = sext i32 %1407 to i64
  %1409 = getelementptr inbounds double, ptr %1402, i64 %1408
  %1410 = load double, ptr %1409, align 8, !tbaa !5
  %1411 = fmul double %1401, %1410
  %1412 = fneg double %1411
  %1413 = call double @llvm.fmuladd.f64(double %1362, double %1394, double %1412)
  %1414 = load ptr, ptr %9, align 8, !tbaa !9
  %1415 = load ptr, ptr %30, align 8, !tbaa !9
  %1416 = getelementptr inbounds %struct.perturb_vector, ptr %1415, i32 0, i32 5
  %1417 = load i32, ptr %1416, align 4, !tbaa !85
  %1418 = load i32, ptr %12, align 4, !tbaa !15
  %1419 = add nsw i32 %1417, %1418
  %1420 = sext i32 %1419 to i64
  %1421 = getelementptr inbounds double, ptr %1414, i64 %1420
  store double %1413, ptr %1421, align 8, !tbaa !5
  br label %1462

1422:                                             ; preds = %797
  %1423 = load ptr, ptr %9, align 8, !tbaa !9
  %1424 = load ptr, ptr %30, align 8, !tbaa !9
  %1425 = getelementptr inbounds %struct.perturb_vector, ptr %1424, i32 0, i32 11
  %1426 = load i32, ptr %1425, align 4, !tbaa !60
  %1427 = sext i32 %1426 to i64
  %1428 = getelementptr inbounds double, ptr %1423, i64 %1427
  %1429 = load double, ptr %1428, align 8, !tbaa !5
  %1430 = load double, ptr %15, align 8, !tbaa !5
  %1431 = load double, ptr %35, align 8, !tbaa !5
  %1432 = call double @llvm.fmuladd.f64(double %1430, double %1431, double %1429)
  %1433 = load double, ptr %19, align 8, !tbaa !5
  %1434 = load double, ptr %41, align 8, !tbaa !5
  %1435 = fneg double %1433
  %1436 = call double @llvm.fmuladd.f64(double %1435, double %1434, double %1432)
  %1437 = fneg double %1436
  %1438 = load double, ptr %16, align 8, !tbaa !5
  %1439 = fdiv double %1437, %1438
  %1440 = load double, ptr %19, align 8, !tbaa !5
  %1441 = load double, ptr %31, align 8, !tbaa !5
  %1442 = load double, ptr %81, align 8, !tbaa !5
  %1443 = load ptr, ptr %25, align 8, !tbaa !9
  %1444 = getelementptr inbounds %struct.perturb_workspace, ptr %1443, i32 0, i32 23
  %1445 = load double, ptr %1444, align 8, !tbaa !83
  %1446 = fmul double %1442, %1445
  %1447 = fneg double %1446
  %1448 = call double @llvm.fmuladd.f64(double 2.500000e-01, double %1441, double %1447)
  %1449 = call double @llvm.fmuladd.f64(double %1440, double %1448, double %1439)
  %1450 = load double, ptr %16, align 8, !tbaa !5
  %1451 = fadd double 1.000000e+00, %1450
  %1452 = load double, ptr %16, align 8, !tbaa !5
  %1453 = fdiv double %1451, %1452
  %1454 = load double, ptr %43, align 8, !tbaa !5
  %1455 = call double @llvm.fmuladd.f64(double %1453, double %1454, double %1449)
  %1456 = load ptr, ptr %9, align 8, !tbaa !9
  %1457 = load ptr, ptr %30, align 8, !tbaa !9
  %1458 = getelementptr inbounds %struct.perturb_vector, ptr %1457, i32 0, i32 1
  %1459 = load i32, ptr %1458, align 4, !tbaa !54
  %1460 = sext i32 %1459 to i64
  %1461 = getelementptr inbounds double, ptr %1456, i64 %1460
  store double %1455, ptr %1461, align 8, !tbaa !5
  br label %1462

1462:                                             ; preds = %1422, %1358
  br label %1463

1463:                                             ; preds = %1462, %786
  %1464 = load ptr, ptr %22, align 8, !tbaa !9
  %1465 = getelementptr inbounds %struct.background, ptr %1464, i32 0, i32 119
  %1466 = load i16, ptr %1465, align 4, !tbaa !95
  %1467 = sext i16 %1466 to i32
  %1468 = icmp eq i32 %1467, 1
  br i1 %1468, label %1469, label %1523

1469:                                             ; preds = %1463
  %1470 = load ptr, ptr %24, align 8, !tbaa !9
  %1471 = getelementptr inbounds %struct.perturbs, ptr %1470, i32 0, i32 55
  %1472 = load i32, ptr %1471, align 8, !tbaa !73
  %1473 = icmp eq i32 %1472, 0
  br i1 %1473, label %1474, label %1508

1474:                                             ; preds = %1469
  %1475 = load ptr, ptr %8, align 8, !tbaa !9
  %1476 = load ptr, ptr %30, align 8, !tbaa !9
  %1477 = getelementptr inbounds %struct.perturb_vector, ptr %1476, i32 0, i32 13
  %1478 = load i32, ptr %1477, align 4, !tbaa !96
  %1479 = sext i32 %1478 to i64
  %1480 = getelementptr inbounds double, ptr %1475, i64 %1479
  %1481 = load double, ptr %1480, align 8, !tbaa !5
  %1482 = load double, ptr %42, align 8, !tbaa !5
  %1483 = fadd double %1481, %1482
  %1484 = fneg double %1483
  %1485 = load ptr, ptr %9, align 8, !tbaa !9
  %1486 = load ptr, ptr %30, align 8, !tbaa !9
  %1487 = getelementptr inbounds %struct.perturb_vector, ptr %1486, i32 0, i32 12
  %1488 = load i32, ptr %1487, align 8, !tbaa !97
  %1489 = sext i32 %1488 to i64
  %1490 = getelementptr inbounds double, ptr %1485, i64 %1489
  store double %1484, ptr %1490, align 8, !tbaa !5
  %1491 = load double, ptr %15, align 8, !tbaa !5
  %1492 = fneg double %1491
  %1493 = load ptr, ptr %8, align 8, !tbaa !9
  %1494 = load ptr, ptr %30, align 8, !tbaa !9
  %1495 = getelementptr inbounds %struct.perturb_vector, ptr %1494, i32 0, i32 13
  %1496 = load i32, ptr %1495, align 4, !tbaa !96
  %1497 = sext i32 %1496 to i64
  %1498 = getelementptr inbounds double, ptr %1493, i64 %1497
  %1499 = load double, ptr %1498, align 8, !tbaa !5
  %1500 = load double, ptr %43, align 8, !tbaa !5
  %1501 = call double @llvm.fmuladd.f64(double %1492, double %1499, double %1500)
  %1502 = load ptr, ptr %9, align 8, !tbaa !9
  %1503 = load ptr, ptr %30, align 8, !tbaa !9
  %1504 = getelementptr inbounds %struct.perturb_vector, ptr %1503, i32 0, i32 13
  %1505 = load i32, ptr %1504, align 4, !tbaa !96
  %1506 = sext i32 %1505 to i64
  %1507 = getelementptr inbounds double, ptr %1502, i64 %1506
  store double %1501, ptr %1507, align 8, !tbaa !5
  br label %1508

1508:                                             ; preds = %1474, %1469
  %1509 = load ptr, ptr %24, align 8, !tbaa !9
  %1510 = getelementptr inbounds %struct.perturbs, ptr %1509, i32 0, i32 55
  %1511 = load i32, ptr %1510, align 8, !tbaa !73
  %1512 = icmp eq i32 %1511, 1
  br i1 %1512, label %1513, label %1522

1513:                                             ; preds = %1508
  %1514 = load double, ptr %42, align 8, !tbaa !5
  %1515 = fneg double %1514
  %1516 = load ptr, ptr %9, align 8, !tbaa !9
  %1517 = load ptr, ptr %30, align 8, !tbaa !9
  %1518 = getelementptr inbounds %struct.perturb_vector, ptr %1517, i32 0, i32 12
  %1519 = load i32, ptr %1518, align 8, !tbaa !97
  %1520 = sext i32 %1519 to i64
  %1521 = getelementptr inbounds double, ptr %1516, i64 %1520
  store double %1515, ptr %1521, align 8, !tbaa !5
  br label %1522

1522:                                             ; preds = %1513, %1508
  br label %1523

1523:                                             ; preds = %1522, %1463
  %1524 = load ptr, ptr %22, align 8, !tbaa !9
  %1525 = getelementptr inbounds %struct.background, ptr %1524, i32 0, i32 127
  %1526 = load i16, ptr %1525, align 4, !tbaa !55
  %1527 = sext i16 %1526 to i32
  %1528 = icmp eq i32 %1527, 1
  br i1 %1528, label %1529, label %1552

1529:                                             ; preds = %1523
  %1530 = load ptr, ptr %25, align 8, !tbaa !9
  %1531 = getelementptr inbounds %struct.perturb_workspace, ptr %1530, i32 0, i32 56
  %1532 = load ptr, ptr %1531, align 8, !tbaa !50
  %1533 = load ptr, ptr %25, align 8, !tbaa !9
  %1534 = getelementptr inbounds %struct.perturb_workspace, ptr %1533, i32 0, i32 52
  %1535 = load i32, ptr %1534, align 4, !tbaa !56
  %1536 = sext i32 %1535 to i64
  %1537 = getelementptr inbounds i32, ptr %1532, i64 %1536
  %1538 = load i32, ptr %1537, align 4, !tbaa !15
  %1539 = icmp eq i32 %1538, 0
  br i1 %1539, label %1540, label %1551

1540:                                             ; preds = %1529
  %1541 = load double, ptr %37, align 8, !tbaa !5
  %1542 = load double, ptr %42, align 8, !tbaa !5
  %1543 = fadd double %1541, %1542
  %1544 = fmul double 0xBFF5555555555555, %1543
  %1545 = load ptr, ptr %9, align 8, !tbaa !9
  %1546 = load ptr, ptr %30, align 8, !tbaa !9
  %1547 = getelementptr inbounds %struct.perturb_vector, ptr %1546, i32 0, i32 28
  %1548 = load i32, ptr %1547, align 8, !tbaa !57
  %1549 = sext i32 %1548 to i64
  %1550 = getelementptr inbounds double, ptr %1545, i64 %1549
  store double %1544, ptr %1550, align 8, !tbaa !5
  br label %1551

1551:                                             ; preds = %1540, %1529
  br label %1552

1552:                                             ; preds = %1551, %1523
  %1553 = load ptr, ptr %22, align 8, !tbaa !9
  %1554 = getelementptr inbounds %struct.background, ptr %1553, i32 0, i32 128
  %1555 = load i16, ptr %1554, align 2, !tbaa !37
  %1556 = sext i16 %1555 to i32
  %1557 = icmp eq i32 %1556, 1
  br i1 %1557, label %1558, label %1799

1558:                                             ; preds = %1552
  %1559 = load ptr, ptr %8, align 8, !tbaa !9
  %1560 = load ptr, ptr %30, align 8, !tbaa !9
  %1561 = getelementptr inbounds %struct.perturb_vector, ptr %1560, i32 0, i32 15
  %1562 = load i32, ptr %1561, align 4, !tbaa !98
  %1563 = sext i32 %1562 to i64
  %1564 = getelementptr inbounds double, ptr %1559, i64 %1563
  %1565 = load double, ptr %1564, align 8, !tbaa !5
  %1566 = load double, ptr %42, align 8, !tbaa !5
  %1567 = fadd double %1565, %1566
  %1568 = fneg double %1567
  %1569 = load ptr, ptr %9, align 8, !tbaa !9
  %1570 = load ptr, ptr %30, align 8, !tbaa !9
  %1571 = getelementptr inbounds %struct.perturb_vector, ptr %1570, i32 0, i32 14
  %1572 = load i32, ptr %1571, align 8, !tbaa !99
  %1573 = sext i32 %1572 to i64
  %1574 = getelementptr inbounds double, ptr %1569, i64 %1573
  store double %1568, ptr %1574, align 8, !tbaa !5
  %1575 = load ptr, ptr %25, align 8, !tbaa !9
  %1576 = getelementptr inbounds %struct.perturb_workspace, ptr %1575, i32 0, i32 56
  %1577 = load ptr, ptr %1576, align 8, !tbaa !50
  %1578 = load ptr, ptr %25, align 8, !tbaa !9
  %1579 = getelementptr inbounds %struct.perturb_workspace, ptr %1578, i32 0, i32 51
  %1580 = load i32, ptr %1579, align 8, !tbaa !100
  %1581 = sext i32 %1580 to i64
  %1582 = getelementptr inbounds i32, ptr %1577, i64 %1581
  %1583 = load i32, ptr %1582, align 4, !tbaa !15
  %1584 = icmp eq i32 %1583, 1
  br i1 %1584, label %1585, label %1642

1585:                                             ; preds = %1558
  %1586 = load double, ptr %15, align 8, !tbaa !5
  %1587 = fneg double %1586
  %1588 = load ptr, ptr %8, align 8, !tbaa !9
  %1589 = load ptr, ptr %30, align 8, !tbaa !9
  %1590 = getelementptr inbounds %struct.perturb_vector, ptr %1589, i32 0, i32 15
  %1591 = load i32, ptr %1590, align 4, !tbaa !98
  %1592 = sext i32 %1591 to i64
  %1593 = getelementptr inbounds double, ptr %1588, i64 %1592
  %1594 = load double, ptr %1593, align 8, !tbaa !5
  %1595 = load double, ptr %43, align 8, !tbaa !5
  %1596 = call double @llvm.fmuladd.f64(double %1587, double %1594, double %1595)
  %1597 = load ptr, ptr %9, align 8, !tbaa !9
  %1598 = load ptr, ptr %30, align 8, !tbaa !9
  %1599 = getelementptr inbounds %struct.perturb_vector, ptr %1598, i32 0, i32 15
  %1600 = load i32, ptr %1599, align 4, !tbaa !98
  %1601 = sext i32 %1600 to i64
  %1602 = getelementptr inbounds double, ptr %1597, i64 %1601
  store double %1596, ptr %1602, align 8, !tbaa !5
  %1603 = load double, ptr %85, align 8, !tbaa !5
  %1604 = load double, ptr %86, align 8, !tbaa !5
  %1605 = fmul double %1603, %1604
  %1606 = load ptr, ptr %8, align 8, !tbaa !9
  %1607 = load ptr, ptr %30, align 8, !tbaa !9
  %1608 = getelementptr inbounds %struct.perturb_vector, ptr %1607, i32 0, i32 15
  %1609 = load i32, ptr %1608, align 4, !tbaa !98
  %1610 = sext i32 %1609 to i64
  %1611 = getelementptr inbounds double, ptr %1606, i64 %1610
  %1612 = load double, ptr %1611, align 8, !tbaa !5
  %1613 = load double, ptr %37, align 8, !tbaa !5
  %1614 = fsub double %1612, %1613
  %1615 = load double, ptr %19, align 8, !tbaa !5
  %1616 = load ptr, ptr %27, align 8, !tbaa !9
  %1617 = load ptr, ptr %23, align 8, !tbaa !9
  %1618 = getelementptr inbounds %struct.thermo, ptr %1617, i32 0, i32 52
  %1619 = load i32, ptr %1618, align 8, !tbaa !101
  %1620 = sext i32 %1619 to i64
  %1621 = getelementptr inbounds double, ptr %1616, i64 %1620
  %1622 = load double, ptr %1621, align 8, !tbaa !5
  %1623 = fmul double %1615, %1622
  %1624 = load ptr, ptr %8, align 8, !tbaa !9
  %1625 = load ptr, ptr %30, align 8, !tbaa !9
  %1626 = getelementptr inbounds %struct.perturb_vector, ptr %1625, i32 0, i32 14
  %1627 = load i32, ptr %1626, align 8, !tbaa !99
  %1628 = sext i32 %1627 to i64
  %1629 = getelementptr inbounds double, ptr %1624, i64 %1628
  %1630 = load double, ptr %1629, align 8, !tbaa !5
  %1631 = fmul double %1623, %1630
  %1632 = fneg double %1631
  %1633 = call double @llvm.fmuladd.f64(double %1605, double %1614, double %1632)
  %1634 = load ptr, ptr %9, align 8, !tbaa !9
  %1635 = load ptr, ptr %30, align 8, !tbaa !9
  %1636 = getelementptr inbounds %struct.perturb_vector, ptr %1635, i32 0, i32 15
  %1637 = load i32, ptr %1636, align 4, !tbaa !98
  %1638 = sext i32 %1637 to i64
  %1639 = getelementptr inbounds double, ptr %1634, i64 %1638
  %1640 = load double, ptr %1639, align 8, !tbaa !5
  %1641 = fsub double %1640, %1633
  store double %1641, ptr %1639, align 8, !tbaa !5
  br label %1798

1642:                                             ; preds = %1558
  %1643 = load ptr, ptr %23, align 8, !tbaa !9
  %1644 = getelementptr inbounds %struct.thermo, ptr %1643, i32 0, i32 34
  %1645 = load double, ptr %1644, align 8, !tbaa !102
  %1646 = load double, ptr %85, align 8, !tbaa !5
  %1647 = fadd double 1.000000e+00, %1646
  %1648 = fdiv double 2.000000e+00, %1647
  %1649 = fsub double %1645, %1648
  %1650 = load double, ptr %15, align 8, !tbaa !5
  %1651 = fmul double %1649, %1650
  %1652 = load ptr, ptr %8, align 8, !tbaa !9
  %1653 = load ptr, ptr %30, align 8, !tbaa !9
  %1654 = getelementptr inbounds %struct.perturb_vector, ptr %1653, i32 0, i32 15
  %1655 = load i32, ptr %1654, align 4, !tbaa !98
  %1656 = sext i32 %1655 to i64
  %1657 = getelementptr inbounds double, ptr %1652, i64 %1656
  %1658 = load double, ptr %1657, align 8, !tbaa !5
  %1659 = load double, ptr %37, align 8, !tbaa !5
  %1660 = fsub double %1658, %1659
  %1661 = load double, ptr %85, align 8, !tbaa !5
  %1662 = fadd double 1.000000e+00, %1661
  %1663 = fdiv double 1.000000e+00, %1662
  %1664 = load double, ptr %86, align 8, !tbaa !5
  %1665 = fdiv double %1663, %1664
  %1666 = load ptr, ptr %26, align 8, !tbaa !9
  %1667 = load ptr, ptr %22, align 8, !tbaa !9
  %1668 = getelementptr inbounds %struct.background, ptr %1667, i32 0, i32 61
  %1669 = load i32, ptr %1668, align 8, !tbaa !103
  %1670 = sext i32 %1669 to i64
  %1671 = getelementptr inbounds double, ptr %1666, i64 %1670
  %1672 = load double, ptr %1671, align 8, !tbaa !5
  %1673 = load double, ptr %13, align 8, !tbaa !5
  %1674 = load double, ptr %15, align 8, !tbaa !5
  %1675 = fmul double 2.000000e+00, %1674
  %1676 = load double, ptr %15, align 8, !tbaa !5
  %1677 = fmul double %1675, %1676
  %1678 = call double @llvm.fmuladd.f64(double %1672, double %1673, double %1677)
  %1679 = fneg double %1678
  %1680 = load ptr, ptr %8, align 8, !tbaa !9
  %1681 = load ptr, ptr %30, align 8, !tbaa !9
  %1682 = getelementptr inbounds %struct.perturb_vector, ptr %1681, i32 0, i32 15
  %1683 = load i32, ptr %1682, align 4, !tbaa !98
  %1684 = sext i32 %1683 to i64
  %1685 = getelementptr inbounds double, ptr %1680, i64 %1684
  %1686 = load double, ptr %1685, align 8, !tbaa !5
  %1687 = load double, ptr %15, align 8, !tbaa !5
  %1688 = load double, ptr %19, align 8, !tbaa !5
  %1689 = fmul double 5.000000e-01, %1688
  %1690 = load double, ptr %36, align 8, !tbaa !5
  %1691 = load double, ptr %43, align 8, !tbaa !5
  %1692 = call double @llvm.fmuladd.f64(double %1689, double %1690, double %1691)
  %1693 = fmul double %1687, %1692
  %1694 = fneg double %1693
  %1695 = call double @llvm.fmuladd.f64(double %1679, double %1686, double %1694)
  %1696 = load double, ptr %19, align 8, !tbaa !5
  %1697 = load ptr, ptr %27, align 8, !tbaa !9
  %1698 = load ptr, ptr %23, align 8, !tbaa !9
  %1699 = getelementptr inbounds %struct.thermo, ptr %1698, i32 0, i32 52
  %1700 = load i32, ptr %1699, align 8, !tbaa !101
  %1701 = sext i32 %1700 to i64
  %1702 = getelementptr inbounds double, ptr %1697, i64 %1701
  %1703 = load double, ptr %1702, align 8, !tbaa !5
  %1704 = load ptr, ptr %9, align 8, !tbaa !9
  %1705 = load ptr, ptr %30, align 8, !tbaa !9
  %1706 = getelementptr inbounds %struct.perturb_vector, ptr %1705, i32 0, i32 14
  %1707 = load i32, ptr %1706, align 8, !tbaa !99
  %1708 = sext i32 %1707 to i64
  %1709 = getelementptr inbounds double, ptr %1704, i64 %1708
  %1710 = load double, ptr %1709, align 8, !tbaa !5
  %1711 = load ptr, ptr %9, align 8, !tbaa !9
  %1712 = load ptr, ptr %30, align 8, !tbaa !9
  %1713 = getelementptr inbounds %struct.perturb_vector, ptr %1712, i32 0, i32 28
  %1714 = load i32, ptr %1713, align 8, !tbaa !57
  %1715 = sext i32 %1714 to i64
  %1716 = getelementptr inbounds double, ptr %1711, i64 %1715
  %1717 = load double, ptr %1716, align 8, !tbaa !5
  %1718 = fmul double 2.500000e-01, %1717
  %1719 = fneg double %1718
  %1720 = call double @llvm.fmuladd.f64(double %1703, double %1710, double %1719)
  %1721 = call double @llvm.fmuladd.f64(double %1696, double %1720, double %1695)
  %1722 = fmul double %1665, %1721
  %1723 = call double @llvm.fmuladd.f64(double %1651, double %1660, double %1722)
  store double %1723, ptr %88, align 8, !tbaa !5
  %1724 = load double, ptr %86, align 8, !tbaa !5
  %1725 = fdiv double 0x3FD1111111111111, %1724
  %1726 = load ptr, ptr %24, align 8, !tbaa !9
  %1727 = getelementptr inbounds %struct.perturbs, ptr %1726, i32 0, i32 50
  %1728 = load ptr, ptr %1727, align 8, !tbaa !104
  %1729 = getelementptr inbounds double, ptr %1728, i64 0
  %1730 = load double, ptr %1729, align 8, !tbaa !5
  %1731 = fdiv double %1725, %1730
  %1732 = load ptr, ptr %8, align 8, !tbaa !9
  %1733 = load ptr, ptr %30, align 8, !tbaa !9
  %1734 = getelementptr inbounds %struct.perturb_vector, ptr %1733, i32 0, i32 15
  %1735 = load i32, ptr %1734, align 4, !tbaa !98
  %1736 = sext i32 %1735 to i64
  %1737 = getelementptr inbounds double, ptr %1732, i64 %1736
  %1738 = load double, ptr %1737, align 8, !tbaa !5
  %1739 = load double, ptr %44, align 8, !tbaa !5
  %1740 = fadd double %1738, %1739
  %1741 = fmul double %1731, %1740
  %1742 = load ptr, ptr %25, align 8, !tbaa !9
  %1743 = getelementptr inbounds %struct.perturb_workspace, ptr %1742, i32 0, i32 25
  store double %1741, ptr %1743, align 8, !tbaa !105
  %1744 = load double, ptr %85, align 8, !tbaa !5
  %1745 = fadd double 1.000000e+00, %1744
  %1746 = fdiv double 1.000000e+00, %1745
  %1747 = load double, ptr %15, align 8, !tbaa !5
  %1748 = fneg double %1747
  %1749 = load ptr, ptr %8, align 8, !tbaa !9
  %1750 = load ptr, ptr %30, align 8, !tbaa !9
  %1751 = getelementptr inbounds %struct.perturb_vector, ptr %1750, i32 0, i32 15
  %1752 = load i32, ptr %1751, align 4, !tbaa !98
  %1753 = sext i32 %1752 to i64
  %1754 = getelementptr inbounds double, ptr %1749, i64 %1753
  %1755 = load double, ptr %1754, align 8, !tbaa !5
  %1756 = load double, ptr %19, align 8, !tbaa !5
  %1757 = load ptr, ptr %27, align 8, !tbaa !9
  %1758 = load ptr, ptr %23, align 8, !tbaa !9
  %1759 = getelementptr inbounds %struct.thermo, ptr %1758, i32 0, i32 52
  %1760 = load i32, ptr %1759, align 8, !tbaa !101
  %1761 = sext i32 %1760 to i64
  %1762 = getelementptr inbounds double, ptr %1757, i64 %1761
  %1763 = load double, ptr %1762, align 8, !tbaa !5
  %1764 = fmul double %1756, %1763
  %1765 = load ptr, ptr %8, align 8, !tbaa !9
  %1766 = load ptr, ptr %30, align 8, !tbaa !9
  %1767 = getelementptr inbounds %struct.perturb_vector, ptr %1766, i32 0, i32 14
  %1768 = load i32, ptr %1767, align 8, !tbaa !99
  %1769 = sext i32 %1768 to i64
  %1770 = getelementptr inbounds double, ptr %1765, i64 %1769
  %1771 = load double, ptr %1770, align 8, !tbaa !5
  %1772 = fmul double %1764, %1771
  %1773 = call double @llvm.fmuladd.f64(double %1748, double %1755, double %1772)
  %1774 = load double, ptr %19, align 8, !tbaa !5
  %1775 = load double, ptr %85, align 8, !tbaa !5
  %1776 = fmul double %1774, %1775
  %1777 = load double, ptr %36, align 8, !tbaa !5
  %1778 = fdiv double %1777, 4.000000e+00
  %1779 = load ptr, ptr %25, align 8, !tbaa !9
  %1780 = getelementptr inbounds %struct.perturb_workspace, ptr %1779, i32 0, i32 25
  %1781 = load double, ptr %1780, align 8, !tbaa !105
  %1782 = fsub double %1778, %1781
  %1783 = call double @llvm.fmuladd.f64(double %1776, double %1782, double %1773)
  %1784 = load double, ptr %43, align 8, !tbaa !5
  %1785 = call double @llvm.fmuladd.f64(double %1746, double %1783, double %1784)
  %1786 = load double, ptr %85, align 8, !tbaa !5
  %1787 = load double, ptr %85, align 8, !tbaa !5
  %1788 = fadd double 1.000000e+00, %1787
  %1789 = fdiv double %1786, %1788
  %1790 = load double, ptr %88, align 8, !tbaa !5
  %1791 = call double @llvm.fmuladd.f64(double %1789, double %1790, double %1785)
  %1792 = load ptr, ptr %9, align 8, !tbaa !9
  %1793 = load ptr, ptr %30, align 8, !tbaa !9
  %1794 = getelementptr inbounds %struct.perturb_vector, ptr %1793, i32 0, i32 15
  %1795 = load i32, ptr %1794, align 4, !tbaa !98
  %1796 = sext i32 %1795 to i64
  %1797 = getelementptr inbounds double, ptr %1792, i64 %1796
  store double %1791, ptr %1797, align 8, !tbaa !5
  br label %1798

1798:                                             ; preds = %1642, %1585
  br label %1799

1799:                                             ; preds = %1798, %1552
  %1800 = load ptr, ptr %24, align 8, !tbaa !9
  %1801 = getelementptr inbounds %struct.perturbs, ptr %1800, i32 0, i32 10
  %1802 = load i16, ptr %1801, align 4, !tbaa !62
  %1803 = sext i16 %1802 to i32
  %1804 = icmp eq i32 %1803, 1
  br i1 %1804, label %1805, label %1929

1805:                                             ; preds = %1799
  %1806 = load ptr, ptr %25, align 8, !tbaa !9
  %1807 = getelementptr inbounds %struct.perturb_workspace, ptr %1806, i32 0, i32 56
  %1808 = load ptr, ptr %1807, align 8, !tbaa !50
  %1809 = load ptr, ptr %25, align 8, !tbaa !9
  %1810 = getelementptr inbounds %struct.perturb_workspace, ptr %1809, i32 0, i32 49
  %1811 = load i32, ptr %1810, align 8, !tbaa !63
  %1812 = sext i32 %1811 to i64
  %1813 = getelementptr inbounds i32, ptr %1808, i64 %1812
  %1814 = load i32, ptr %1813, align 4, !tbaa !15
  %1815 = icmp eq i32 %1814, 1
  br i1 %1815, label %1816, label %1929

1816:                                             ; preds = %1805
  %1817 = load double, ptr %53, align 8, !tbaa !5
  %1818 = fneg double %1817
  %1819 = load double, ptr %13, align 8, !tbaa !5
  %1820 = fmul double %1818, %1819
  %1821 = load double, ptr %52, align 8, !tbaa !5
  %1822 = fmul double %1820, %1821
  %1823 = load double, ptr %48, align 8, !tbaa !5
  %1824 = fmul double %1822, %1823
  %1825 = load double, ptr %54, align 8, !tbaa !5
  %1826 = load double, ptr %51, align 8, !tbaa !5
  %1827 = fadd double %1825, %1826
  %1828 = load double, ptr %34, align 8, !tbaa !5
  %1829 = fadd double %1827, %1828
  %1830 = fmul double %1824, %1829
  %1831 = fmul double %1830, 0x449A22FF260E3826
  %1832 = fdiv double %1831, 0x41B1DE784A000000
  %1833 = load ptr, ptr %9, align 8, !tbaa !9
  %1834 = load ptr, ptr %25, align 8, !tbaa !9
  %1835 = getelementptr inbounds %struct.perturb_workspace, ptr %1834, i32 0, i32 14
  %1836 = load ptr, ptr %1835, align 8, !tbaa !27
  %1837 = getelementptr inbounds %struct.perturb_vector, ptr %1836, i32 0, i32 34
  %1838 = load i32, ptr %1837, align 8, !tbaa !66
  %1839 = sext i32 %1838 to i64
  %1840 = getelementptr inbounds double, ptr %1833, i64 %1839
  store double %1832, ptr %1840, align 8, !tbaa !5
  %1841 = load ptr, ptr %9, align 8, !tbaa !9
  %1842 = load ptr, ptr %25, align 8, !tbaa !9
  %1843 = getelementptr inbounds %struct.perturb_workspace, ptr %1842, i32 0, i32 14
  %1844 = load ptr, ptr %1843, align 8, !tbaa !27
  %1845 = getelementptr inbounds %struct.perturb_vector, ptr %1844, i32 0, i32 10
  %1846 = load i32, ptr %1845, align 8, !tbaa !59
  %1847 = sext i32 %1846 to i64
  %1848 = getelementptr inbounds double, ptr %1841, i64 %1847
  %1849 = load double, ptr %1848, align 8, !tbaa !5
  %1850 = load double, ptr %13, align 8, !tbaa !5
  %1851 = load double, ptr %56, align 8, !tbaa !5
  %1852 = fmul double %1850, %1851
  %1853 = load ptr, ptr %22, align 8, !tbaa !9
  %1854 = getelementptr inbounds %struct.background, ptr %1853, i32 0, i32 2
  %1855 = load double, ptr %1854, align 8, !tbaa !106
  %1856 = load double, ptr %13, align 8, !tbaa !5
  %1857 = fdiv double %1855, %1856
  %1858 = call double @pow(double noundef %1857, double noundef 4.000000e+00) #5
  %1859 = fmul double %1852, %1858
  %1860 = load double, ptr %52, align 8, !tbaa !5
  %1861 = fmul double %1859, %1860
  %1862 = load double, ptr %52, align 8, !tbaa !5
  %1863 = fadd double 1.000000e+00, %1862
  %1864 = load double, ptr %49, align 8, !tbaa !5
  %1865 = fadd double %1863, %1864
  %1866 = fdiv double %1861, %1865
  %1867 = load ptr, ptr %22, align 8, !tbaa !9
  %1868 = getelementptr inbounds %struct.background, ptr %1867, i32 0, i32 2
  %1869 = load double, ptr %1868, align 8, !tbaa !106
  %1870 = load ptr, ptr %22, align 8, !tbaa !9
  %1871 = getelementptr inbounds %struct.background, ptr %1870, i32 0, i32 58
  %1872 = load double, ptr %1871, align 8, !tbaa !71
  %1873 = fmul double %1869, %1872
  %1874 = load double, ptr %13, align 8, !tbaa !5
  %1875 = fdiv double %1873, %1874
  %1876 = load ptr, ptr %27, align 8, !tbaa !9
  %1877 = load ptr, ptr %23, align 8, !tbaa !9
  %1878 = getelementptr inbounds %struct.thermo, ptr %1877, i32 0, i32 54
  %1879 = load i32, ptr %1878, align 8, !tbaa !72
  %1880 = sext i32 %1879 to i64
  %1881 = getelementptr inbounds double, ptr %1876, i64 %1880
  %1882 = load double, ptr %1881, align 8, !tbaa !5
  %1883 = fdiv double %1875, %1882
  %1884 = fsub double 1.000000e+00, %1883
  %1885 = load double, ptr %31, align 8, !tbaa !5
  %1886 = load double, ptr %51, align 8, !tbaa !5
  %1887 = load double, ptr %49, align 8, !tbaa !5
  %1888 = fadd double 1.000000e+00, %1887
  %1889 = fmul double %1886, %1888
  %1890 = load double, ptr %52, align 8, !tbaa !5
  %1891 = fadd double 1.000000e+00, %1890
  %1892 = load double, ptr %49, align 8, !tbaa !5
  %1893 = fadd double %1891, %1892
  %1894 = fdiv double %1889, %1893
  %1895 = fadd double %1885, %1894
  %1896 = load ptr, ptr %22, align 8, !tbaa !9
  %1897 = getelementptr inbounds %struct.background, ptr %1896, i32 0, i32 2
  %1898 = load double, ptr %1897, align 8, !tbaa !106
  %1899 = load ptr, ptr %22, align 8, !tbaa !9
  %1900 = getelementptr inbounds %struct.background, ptr %1899, i32 0, i32 58
  %1901 = load double, ptr %1900, align 8, !tbaa !71
  %1902 = fmul double %1898, %1901
  %1903 = load double, ptr %13, align 8, !tbaa !5
  %1904 = fdiv double %1902, %1903
  %1905 = load ptr, ptr %27, align 8, !tbaa !9
  %1906 = load ptr, ptr %23, align 8, !tbaa !9
  %1907 = getelementptr inbounds %struct.thermo, ptr %1906, i32 0, i32 54
  %1908 = load i32, ptr %1907, align 8, !tbaa !72
  %1909 = sext i32 %1908 to i64
  %1910 = getelementptr inbounds double, ptr %1905, i64 %1909
  %1911 = load double, ptr %1910, align 8, !tbaa !5
  %1912 = fdiv double %1904, %1911
  %1913 = load double, ptr %50, align 8, !tbaa !5
  %1914 = load double, ptr %31, align 8, !tbaa !5
  %1915 = call double @llvm.fmuladd.f64(double -2.500000e-01, double %1914, double %1913)
  %1916 = fmul double %1912, %1915
  %1917 = call double @llvm.fmuladd.f64(double %1884, double %1895, double %1916)
  %1918 = fmul double %1866, %1917
  %1919 = fneg double %1918
  %1920 = call double @llvm.fmuladd.f64(double 0x3FE5555555555555, double %1849, double %1919)
  %1921 = load ptr, ptr %9, align 8, !tbaa !9
  %1922 = load ptr, ptr %25, align 8, !tbaa !9
  %1923 = getelementptr inbounds %struct.perturb_workspace, ptr %1922, i32 0, i32 14
  %1924 = load ptr, ptr %1923, align 8, !tbaa !27
  %1925 = getelementptr inbounds %struct.perturb_vector, ptr %1924, i32 0, i32 33
  %1926 = load i32, ptr %1925, align 4, !tbaa !64
  %1927 = sext i32 %1926 to i64
  %1928 = getelementptr inbounds double, ptr %1921, i64 %1927
  store double %1920, ptr %1928, align 8, !tbaa !5
  br label %1929

1929:                                             ; preds = %1816, %1805, %1799
  %1930 = load ptr, ptr %22, align 8, !tbaa !9
  %1931 = getelementptr inbounds %struct.background, ptr %1930, i32 0, i32 120
  %1932 = load i16, ptr %1931, align 2, !tbaa !107
  %1933 = sext i16 %1932 to i32
  %1934 = icmp eq i32 %1933, 1
  br i1 %1934, label %1935, label %1979

1935:                                             ; preds = %1929
  %1936 = load ptr, ptr %8, align 8, !tbaa !9
  %1937 = load ptr, ptr %30, align 8, !tbaa !9
  %1938 = getelementptr inbounds %struct.perturb_vector, ptr %1937, i32 0, i32 17
  %1939 = load i32, ptr %1938, align 4, !tbaa !108
  %1940 = sext i32 %1939 to i64
  %1941 = getelementptr inbounds double, ptr %1936, i64 %1940
  %1942 = load double, ptr %1941, align 8, !tbaa !5
  %1943 = load double, ptr %42, align 8, !tbaa !5
  %1944 = fadd double %1942, %1943
  %1945 = fneg double %1944
  %1946 = load double, ptr %13, align 8, !tbaa !5
  %1947 = load ptr, ptr %22, align 8, !tbaa !9
  %1948 = getelementptr inbounds %struct.background, ptr %1947, i32 0, i32 19
  %1949 = load double, ptr %1948, align 8, !tbaa !109
  %1950 = fmul double %1946, %1949
  %1951 = load double, ptr %19, align 8, !tbaa !5
  %1952 = fdiv double %1950, %1951
  %1953 = load double, ptr %43, align 8, !tbaa !5
  %1954 = fneg double %1952
  %1955 = call double @llvm.fmuladd.f64(double %1954, double %1953, double %1945)
  %1956 = load ptr, ptr %9, align 8, !tbaa !9
  %1957 = load ptr, ptr %30, align 8, !tbaa !9
  %1958 = getelementptr inbounds %struct.perturb_vector, ptr %1957, i32 0, i32 16
  %1959 = load i32, ptr %1958, align 8, !tbaa !110
  %1960 = sext i32 %1959 to i64
  %1961 = getelementptr inbounds double, ptr %1956, i64 %1960
  store double %1955, ptr %1961, align 8, !tbaa !5
  %1962 = load double, ptr %15, align 8, !tbaa !5
  %1963 = fneg double %1962
  %1964 = load ptr, ptr %8, align 8, !tbaa !9
  %1965 = load ptr, ptr %30, align 8, !tbaa !9
  %1966 = getelementptr inbounds %struct.perturb_vector, ptr %1965, i32 0, i32 17
  %1967 = load i32, ptr %1966, align 4, !tbaa !108
  %1968 = sext i32 %1967 to i64
  %1969 = getelementptr inbounds double, ptr %1964, i64 %1968
  %1970 = load double, ptr %1969, align 8, !tbaa !5
  %1971 = load double, ptr %43, align 8, !tbaa !5
  %1972 = call double @llvm.fmuladd.f64(double %1963, double %1970, double %1971)
  %1973 = load ptr, ptr %9, align 8, !tbaa !9
  %1974 = load ptr, ptr %30, align 8, !tbaa !9
  %1975 = getelementptr inbounds %struct.perturb_vector, ptr %1974, i32 0, i32 17
  %1976 = load i32, ptr %1975, align 4, !tbaa !108
  %1977 = sext i32 %1976 to i64
  %1978 = getelementptr inbounds double, ptr %1973, i64 %1977
  store double %1972, ptr %1978, align 8, !tbaa !5
  br label %1979

1979:                                             ; preds = %1935, %1929
  %1980 = load ptr, ptr %22, align 8, !tbaa !9
  %1981 = getelementptr inbounds %struct.background, ptr %1980, i32 0, i32 120
  %1982 = load i16, ptr %1981, align 2, !tbaa !107
  %1983 = sext i16 %1982 to i32
  %1984 = icmp eq i32 %1983, 1
  br i1 %1984, label %1985, label %2321

1985:                                             ; preds = %1979
  %1986 = load ptr, ptr %22, align 8, !tbaa !9
  %1987 = getelementptr inbounds %struct.background, ptr %1986, i32 0, i32 121
  %1988 = load i16, ptr %1987, align 8, !tbaa !111
  %1989 = sext i16 %1988 to i32
  %1990 = icmp eq i32 %1989, 1
  br i1 %1990, label %1991, label %2321

1991:                                             ; preds = %1985
  %1992 = load double, ptr %13, align 8, !tbaa !5
  %1993 = load ptr, ptr %22, align 8, !tbaa !9
  %1994 = getelementptr inbounds %struct.background, ptr %1993, i32 0, i32 58
  %1995 = load double, ptr %1994, align 8, !tbaa !71
  %1996 = fdiv double %1992, %1995
  %1997 = call double @pow(double noundef %1996, double noundef 2.000000e+00) #5
  %1998 = load ptr, ptr %22, align 8, !tbaa !9
  %1999 = getelementptr inbounds %struct.background, ptr %1998, i32 0, i32 0
  %2000 = load double, ptr %1999, align 8, !tbaa !68
  %2001 = fdiv double %1997, %2000
  %2002 = call double @pow(double noundef %2001, double noundef 2.000000e+00) #5
  %2003 = load ptr, ptr %26, align 8, !tbaa !9
  %2004 = load ptr, ptr %22, align 8, !tbaa !9
  %2005 = getelementptr inbounds %struct.background, ptr %2004, i32 0, i32 72
  %2006 = load i32, ptr %2005, align 4, !tbaa !112
  %2007 = sext i32 %2006 to i64
  %2008 = getelementptr inbounds double, ptr %2003, i64 %2007
  %2009 = load double, ptr %2008, align 8, !tbaa !5
  %2010 = fmul double %2002, %2009
  store double %2010, ptr %83, align 8, !tbaa !5
  %2011 = load ptr, ptr %22, align 8, !tbaa !9
  %2012 = getelementptr inbounds %struct.background, ptr %2011, i32 0, i32 19
  %2013 = load double, ptr %2012, align 8, !tbaa !109
  %2014 = load ptr, ptr %26, align 8, !tbaa !9
  %2015 = load ptr, ptr %22, align 8, !tbaa !9
  %2016 = getelementptr inbounds %struct.background, ptr %2015, i32 0, i32 71
  %2017 = load i32, ptr %2016, align 8, !tbaa !113
  %2018 = sext i32 %2017 to i64
  %2019 = getelementptr inbounds double, ptr %2014, i64 %2018
  %2020 = load double, ptr %2019, align 8, !tbaa !5
  %2021 = fmul double %2013, %2020
  %2022 = load double, ptr %13, align 8, !tbaa !5
  %2023 = call double @pow(double noundef %2022, double noundef 5.000000e+00) #5
  %2024 = fmul double %2021, %2023
  %2025 = load ptr, ptr %22, align 8, !tbaa !9
  %2026 = getelementptr inbounds %struct.background, ptr %2025, i32 0, i32 0
  %2027 = load double, ptr %2026, align 8, !tbaa !68
  %2028 = call double @pow(double noundef %2027, double noundef 2.000000e+00) #5
  %2029 = fdiv double %2024, %2028
  store double %2029, ptr %84, align 8, !tbaa !5
  %2030 = load double, ptr %18, align 8, !tbaa !5
  %2031 = fneg double %2030
  %2032 = load ptr, ptr %8, align 8, !tbaa !9
  %2033 = load ptr, ptr %30, align 8, !tbaa !9
  %2034 = getelementptr inbounds %struct.perturb_vector, ptr %2033, i32 0, i32 35
  %2035 = load i32, ptr %2034, align 4, !tbaa !114
  %2036 = add nsw i32 %2035, 1
  %2037 = sext i32 %2036 to i64
  %2038 = getelementptr inbounds double, ptr %2032, i64 %2037
  %2039 = load double, ptr %2038, align 8, !tbaa !5
  %2040 = load double, ptr %42, align 8, !tbaa !5
  %2041 = fmul double 0x3FF5555555555555, %2040
  %2042 = load double, ptr %83, align 8, !tbaa !5
  %2043 = fmul double %2041, %2042
  %2044 = fneg double %2043
  %2045 = call double @llvm.fmuladd.f64(double %2031, double %2039, double %2044)
  %2046 = load double, ptr %84, align 8, !tbaa !5
  %2047 = load ptr, ptr %8, align 8, !tbaa !9
  %2048 = load ptr, ptr %30, align 8, !tbaa !9
  %2049 = getelementptr inbounds %struct.perturb_vector, ptr %2048, i32 0, i32 16
  %2050 = load i32, ptr %2049, align 8, !tbaa !110
  %2051 = sext i32 %2050 to i64
  %2052 = getelementptr inbounds double, ptr %2047, i64 %2051
  %2053 = load double, ptr %2052, align 8, !tbaa !5
  %2054 = load double, ptr %43, align 8, !tbaa !5
  %2055 = load double, ptr %19, align 8, !tbaa !5
  %2056 = fdiv double %2054, %2055
  %2057 = fadd double %2053, %2056
  %2058 = call double @llvm.fmuladd.f64(double %2046, double %2057, double %2045)
  %2059 = load ptr, ptr %9, align 8, !tbaa !9
  %2060 = load ptr, ptr %30, align 8, !tbaa !9
  %2061 = getelementptr inbounds %struct.perturb_vector, ptr %2060, i32 0, i32 35
  %2062 = load i32, ptr %2061, align 4, !tbaa !114
  %2063 = sext i32 %2062 to i64
  %2064 = getelementptr inbounds double, ptr %2059, i64 %2063
  store double %2058, ptr %2064, align 8, !tbaa !5
  %2065 = load double, ptr %18, align 8, !tbaa !5
  %2066 = fdiv double %2065, 3.000000e+00
  %2067 = load ptr, ptr %8, align 8, !tbaa !9
  %2068 = load ptr, ptr %30, align 8, !tbaa !9
  %2069 = getelementptr inbounds %struct.perturb_vector, ptr %2068, i32 0, i32 35
  %2070 = load i32, ptr %2069, align 4, !tbaa !114
  %2071 = sext i32 %2070 to i64
  %2072 = getelementptr inbounds double, ptr %2067, i64 %2071
  %2073 = load double, ptr %2072, align 8, !tbaa !5
  %2074 = load double, ptr %18, align 8, !tbaa !5
  %2075 = fmul double 0x3FE5555555555555, %2074
  %2076 = load ptr, ptr %8, align 8, !tbaa !9
  %2077 = load ptr, ptr %30, align 8, !tbaa !9
  %2078 = getelementptr inbounds %struct.perturb_vector, ptr %2077, i32 0, i32 35
  %2079 = load i32, ptr %2078, align 4, !tbaa !114
  %2080 = add nsw i32 %2079, 2
  %2081 = sext i32 %2080 to i64
  %2082 = getelementptr inbounds double, ptr %2076, i64 %2081
  %2083 = load double, ptr %2082, align 8, !tbaa !5
  %2084 = fmul double %2075, %2083
  %2085 = load double, ptr %81, align 8, !tbaa !5
  %2086 = fmul double %2084, %2085
  %2087 = fneg double %2086
  %2088 = call double @llvm.fmuladd.f64(double %2066, double %2073, double %2087)
  %2089 = load double, ptr %43, align 8, !tbaa !5
  %2090 = fmul double 4.000000e+00, %2089
  %2091 = load double, ptr %18, align 8, !tbaa !5
  %2092 = fmul double 3.000000e+00, %2091
  %2093 = fdiv double %2090, %2092
  %2094 = load double, ptr %83, align 8, !tbaa !5
  %2095 = call double @llvm.fmuladd.f64(double %2093, double %2094, double %2088)
  %2096 = load double, ptr %84, align 8, !tbaa !5
  %2097 = load double, ptr %18, align 8, !tbaa !5
  %2098 = fdiv double %2096, %2097
  %2099 = load ptr, ptr %8, align 8, !tbaa !9
  %2100 = load ptr, ptr %30, align 8, !tbaa !9
  %2101 = getelementptr inbounds %struct.perturb_vector, ptr %2100, i32 0, i32 17
  %2102 = load i32, ptr %2101, align 4, !tbaa !108
  %2103 = sext i32 %2102 to i64
  %2104 = getelementptr inbounds double, ptr %2099, i64 %2103
  %2105 = load double, ptr %2104, align 8, !tbaa !5
  %2106 = call double @llvm.fmuladd.f64(double %2098, double %2105, double %2095)
  %2107 = load ptr, ptr %9, align 8, !tbaa !9
  %2108 = load ptr, ptr %30, align 8, !tbaa !9
  %2109 = getelementptr inbounds %struct.perturb_vector, ptr %2108, i32 0, i32 35
  %2110 = load i32, ptr %2109, align 4, !tbaa !114
  %2111 = add nsw i32 %2110, 1
  %2112 = sext i32 %2111 to i64
  %2113 = getelementptr inbounds double, ptr %2107, i64 %2112
  store double %2106, ptr %2113, align 8, !tbaa !5
  %2114 = load double, ptr %18, align 8, !tbaa !5
  %2115 = fmul double 7.500000e-01, %2114
  %2116 = load ptr, ptr %8, align 8, !tbaa !9
  %2117 = load ptr, ptr %30, align 8, !tbaa !9
  %2118 = getelementptr inbounds %struct.perturb_vector, ptr %2117, i32 0, i32 35
  %2119 = load i32, ptr %2118, align 4, !tbaa !114
  %2120 = add nsw i32 %2119, 1
  %2121 = sext i32 %2120 to i64
  %2122 = getelementptr inbounds double, ptr %2116, i64 %2121
  %2123 = load double, ptr %2122, align 8, !tbaa !5
  %2124 = load double, ptr %44, align 8, !tbaa !5
  %2125 = load double, ptr %83, align 8, !tbaa !5
  %2126 = fmul double %2124, %2125
  %2127 = call double @llvm.fmuladd.f64(double %2115, double %2123, double %2126)
  %2128 = load double, ptr %18, align 8, !tbaa !5
  %2129 = fmul double 6.000000e-01, %2128
  %2130 = load ptr, ptr %29, align 8, !tbaa !9
  %2131 = getelementptr inbounds double, ptr %2130, i64 3
  %2132 = load double, ptr %2131, align 8, !tbaa !5
  %2133 = fmul double %2129, %2132
  %2134 = load ptr, ptr %29, align 8, !tbaa !9
  %2135 = getelementptr inbounds double, ptr %2134, i64 2
  %2136 = load double, ptr %2135, align 8, !tbaa !5
  %2137 = fdiv double %2133, %2136
  %2138 = load ptr, ptr %8, align 8, !tbaa !9
  %2139 = load ptr, ptr %30, align 8, !tbaa !9
  %2140 = getelementptr inbounds %struct.perturb_vector, ptr %2139, i32 0, i32 35
  %2141 = load i32, ptr %2140, align 4, !tbaa !114
  %2142 = add nsw i32 %2141, 3
  %2143 = sext i32 %2142 to i64
  %2144 = getelementptr inbounds double, ptr %2138, i64 %2143
  %2145 = load double, ptr %2144, align 8, !tbaa !5
  %2146 = fmul double %2137, %2145
  %2147 = fneg double %2146
  %2148 = call double @llvm.fmuladd.f64(double 0x3FE1111111111111, double %2127, double %2147)
  %2149 = load ptr, ptr %9, align 8, !tbaa !9
  %2150 = load ptr, ptr %30, align 8, !tbaa !9
  %2151 = getelementptr inbounds %struct.perturb_vector, ptr %2150, i32 0, i32 35
  %2152 = load i32, ptr %2151, align 4, !tbaa !114
  %2153 = add nsw i32 %2152, 2
  %2154 = sext i32 %2153 to i64
  %2155 = getelementptr inbounds double, ptr %2149, i64 %2154
  store double %2148, ptr %2155, align 8, !tbaa !5
  store i32 3, ptr %12, align 4, !tbaa !15
  %2156 = load double, ptr %18, align 8, !tbaa !5
  %2157 = load i32, ptr %12, align 4, !tbaa !15
  %2158 = sitofp i32 %2157 to double
  %2159 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2158, double 1.000000e+00)
  %2160 = fdiv double %2156, %2159
  %2161 = load i32, ptr %12, align 4, !tbaa !15
  %2162 = sitofp i32 %2161 to double
  %2163 = load ptr, ptr %29, align 8, !tbaa !9
  %2164 = load i32, ptr %12, align 4, !tbaa !15
  %2165 = sext i32 %2164 to i64
  %2166 = getelementptr inbounds double, ptr %2163, i64 %2165
  %2167 = load double, ptr %2166, align 8, !tbaa !5
  %2168 = fmul double %2162, %2167
  %2169 = load ptr, ptr %29, align 8, !tbaa !9
  %2170 = getelementptr inbounds double, ptr %2169, i64 2
  %2171 = load double, ptr %2170, align 8, !tbaa !5
  %2172 = fmul double %2168, %2171
  %2173 = load ptr, ptr %8, align 8, !tbaa !9
  %2174 = load ptr, ptr %30, align 8, !tbaa !9
  %2175 = getelementptr inbounds %struct.perturb_vector, ptr %2174, i32 0, i32 35
  %2176 = load i32, ptr %2175, align 4, !tbaa !114
  %2177 = add nsw i32 %2176, 2
  %2178 = sext i32 %2177 to i64
  %2179 = getelementptr inbounds double, ptr %2173, i64 %2178
  %2180 = load double, ptr %2179, align 8, !tbaa !5
  %2181 = load i32, ptr %12, align 4, !tbaa !15
  %2182 = sitofp i32 %2181 to double
  %2183 = fadd double %2182, 1.000000e+00
  %2184 = load ptr, ptr %29, align 8, !tbaa !9
  %2185 = load i32, ptr %12, align 4, !tbaa !15
  %2186 = add nsw i32 %2185, 1
  %2187 = sext i32 %2186 to i64
  %2188 = getelementptr inbounds double, ptr %2184, i64 %2187
  %2189 = load double, ptr %2188, align 8, !tbaa !5
  %2190 = fmul double %2183, %2189
  %2191 = load ptr, ptr %8, align 8, !tbaa !9
  %2192 = load ptr, ptr %30, align 8, !tbaa !9
  %2193 = getelementptr inbounds %struct.perturb_vector, ptr %2192, i32 0, i32 35
  %2194 = load i32, ptr %2193, align 4, !tbaa !114
  %2195 = add nsw i32 %2194, 4
  %2196 = sext i32 %2195 to i64
  %2197 = getelementptr inbounds double, ptr %2191, i64 %2196
  %2198 = load double, ptr %2197, align 8, !tbaa !5
  %2199 = fmul double %2190, %2198
  %2200 = fneg double %2199
  %2201 = call double @llvm.fmuladd.f64(double %2172, double %2180, double %2200)
  %2202 = fmul double %2160, %2201
  %2203 = load ptr, ptr %9, align 8, !tbaa !9
  %2204 = load ptr, ptr %30, align 8, !tbaa !9
  %2205 = getelementptr inbounds %struct.perturb_vector, ptr %2204, i32 0, i32 35
  %2206 = load i32, ptr %2205, align 4, !tbaa !114
  %2207 = add nsw i32 %2206, 3
  %2208 = sext i32 %2207 to i64
  %2209 = getelementptr inbounds double, ptr %2203, i64 %2208
  store double %2202, ptr %2209, align 8, !tbaa !5
  store i32 4, ptr %12, align 4, !tbaa !15
  br label %2210

2210:                                             ; preds = %2272, %1991
  %2211 = load i32, ptr %12, align 4, !tbaa !15
  %2212 = load ptr, ptr %30, align 8, !tbaa !9
  %2213 = getelementptr inbounds %struct.perturb_vector, ptr %2212, i32 0, i32 36
  %2214 = load i32, ptr %2213, align 8, !tbaa !115
  %2215 = icmp slt i32 %2211, %2214
  br i1 %2215, label %2216, label %2275

2216:                                             ; preds = %2210
  %2217 = load double, ptr %18, align 8, !tbaa !5
  %2218 = load i32, ptr %12, align 4, !tbaa !15
  %2219 = sitofp i32 %2218 to double
  %2220 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2219, double 1.000000e+00)
  %2221 = fdiv double %2217, %2220
  %2222 = load i32, ptr %12, align 4, !tbaa !15
  %2223 = sitofp i32 %2222 to double
  %2224 = load ptr, ptr %29, align 8, !tbaa !9
  %2225 = load i32, ptr %12, align 4, !tbaa !15
  %2226 = sext i32 %2225 to i64
  %2227 = getelementptr inbounds double, ptr %2224, i64 %2226
  %2228 = load double, ptr %2227, align 8, !tbaa !5
  %2229 = fmul double %2223, %2228
  %2230 = load ptr, ptr %8, align 8, !tbaa !9
  %2231 = load ptr, ptr %30, align 8, !tbaa !9
  %2232 = getelementptr inbounds %struct.perturb_vector, ptr %2231, i32 0, i32 35
  %2233 = load i32, ptr %2232, align 4, !tbaa !114
  %2234 = load i32, ptr %12, align 4, !tbaa !15
  %2235 = add nsw i32 %2233, %2234
  %2236 = sub nsw i32 %2235, 1
  %2237 = sext i32 %2236 to i64
  %2238 = getelementptr inbounds double, ptr %2230, i64 %2237
  %2239 = load double, ptr %2238, align 8, !tbaa !5
  %2240 = load i32, ptr %12, align 4, !tbaa !15
  %2241 = sitofp i32 %2240 to double
  %2242 = fadd double %2241, 1.000000e+00
  %2243 = load ptr, ptr %29, align 8, !tbaa !9
  %2244 = load i32, ptr %12, align 4, !tbaa !15
  %2245 = add nsw i32 %2244, 1
  %2246 = sext i32 %2245 to i64
  %2247 = getelementptr inbounds double, ptr %2243, i64 %2246
  %2248 = load double, ptr %2247, align 8, !tbaa !5
  %2249 = fmul double %2242, %2248
  %2250 = load ptr, ptr %8, align 8, !tbaa !9
  %2251 = load ptr, ptr %30, align 8, !tbaa !9
  %2252 = getelementptr inbounds %struct.perturb_vector, ptr %2251, i32 0, i32 35
  %2253 = load i32, ptr %2252, align 4, !tbaa !114
  %2254 = load i32, ptr %12, align 4, !tbaa !15
  %2255 = add nsw i32 %2253, %2254
  %2256 = add nsw i32 %2255, 1
  %2257 = sext i32 %2256 to i64
  %2258 = getelementptr inbounds double, ptr %2250, i64 %2257
  %2259 = load double, ptr %2258, align 8, !tbaa !5
  %2260 = fmul double %2249, %2259
  %2261 = fneg double %2260
  %2262 = call double @llvm.fmuladd.f64(double %2229, double %2239, double %2261)
  %2263 = fmul double %2221, %2262
  %2264 = load ptr, ptr %9, align 8, !tbaa !9
  %2265 = load ptr, ptr %30, align 8, !tbaa !9
  %2266 = getelementptr inbounds %struct.perturb_vector, ptr %2265, i32 0, i32 35
  %2267 = load i32, ptr %2266, align 4, !tbaa !114
  %2268 = load i32, ptr %12, align 4, !tbaa !15
  %2269 = add nsw i32 %2267, %2268
  %2270 = sext i32 %2269 to i64
  %2271 = getelementptr inbounds double, ptr %2264, i64 %2270
  store double %2263, ptr %2271, align 8, !tbaa !5
  br label %2272

2272:                                             ; preds = %2216
  %2273 = load i32, ptr %12, align 4, !tbaa !15
  %2274 = add nsw i32 %2273, 1
  store i32 %2274, ptr %12, align 4, !tbaa !15
  br label %2210, !llvm.loop !116

2275:                                             ; preds = %2210
  %2276 = load ptr, ptr %30, align 8, !tbaa !9
  %2277 = getelementptr inbounds %struct.perturb_vector, ptr %2276, i32 0, i32 36
  %2278 = load i32, ptr %2277, align 8, !tbaa !115
  store i32 %2278, ptr %12, align 4, !tbaa !15
  %2279 = load double, ptr %18, align 8, !tbaa !5
  %2280 = load ptr, ptr %29, align 8, !tbaa !9
  %2281 = load i32, ptr %12, align 4, !tbaa !15
  %2282 = sext i32 %2281 to i64
  %2283 = getelementptr inbounds double, ptr %2280, i64 %2282
  %2284 = load double, ptr %2283, align 8, !tbaa !5
  %2285 = load ptr, ptr %8, align 8, !tbaa !9
  %2286 = load ptr, ptr %30, align 8, !tbaa !9
  %2287 = getelementptr inbounds %struct.perturb_vector, ptr %2286, i32 0, i32 35
  %2288 = load i32, ptr %2287, align 4, !tbaa !114
  %2289 = load i32, ptr %12, align 4, !tbaa !15
  %2290 = add nsw i32 %2288, %2289
  %2291 = sub nsw i32 %2290, 1
  %2292 = sext i32 %2291 to i64
  %2293 = getelementptr inbounds double, ptr %2285, i64 %2292
  %2294 = load double, ptr %2293, align 8, !tbaa !5
  %2295 = load i32, ptr %12, align 4, !tbaa !15
  %2296 = sitofp i32 %2295 to double
  %2297 = fadd double 1.000000e+00, %2296
  %2298 = load double, ptr %79, align 8, !tbaa !5
  %2299 = fmul double %2297, %2298
  %2300 = load ptr, ptr %8, align 8, !tbaa !9
  %2301 = load ptr, ptr %30, align 8, !tbaa !9
  %2302 = getelementptr inbounds %struct.perturb_vector, ptr %2301, i32 0, i32 35
  %2303 = load i32, ptr %2302, align 4, !tbaa !114
  %2304 = load i32, ptr %12, align 4, !tbaa !15
  %2305 = add nsw i32 %2303, %2304
  %2306 = sext i32 %2305 to i64
  %2307 = getelementptr inbounds double, ptr %2300, i64 %2306
  %2308 = load double, ptr %2307, align 8, !tbaa !5
  %2309 = fmul double %2299, %2308
  %2310 = fneg double %2309
  %2311 = call double @llvm.fmuladd.f64(double %2284, double %2294, double %2310)
  %2312 = fmul double %2279, %2311
  %2313 = load ptr, ptr %9, align 8, !tbaa !9
  %2314 = load ptr, ptr %30, align 8, !tbaa !9
  %2315 = getelementptr inbounds %struct.perturb_vector, ptr %2314, i32 0, i32 35
  %2316 = load i32, ptr %2315, align 4, !tbaa !114
  %2317 = load i32, ptr %12, align 4, !tbaa !15
  %2318 = add nsw i32 %2316, %2317
  %2319 = sext i32 %2318 to i64
  %2320 = getelementptr inbounds double, ptr %2313, i64 %2319
  store double %2312, ptr %2320, align 8, !tbaa !5
  br label %2321

2321:                                             ; preds = %2275, %1985, %1979
  %2322 = load ptr, ptr %22, align 8, !tbaa !9
  %2323 = getelementptr inbounds %struct.background, ptr %2322, i32 0, i32 125
  %2324 = load i16, ptr %2323, align 8, !tbaa !117
  %2325 = sext i16 %2324 to i32
  %2326 = icmp eq i32 %2325, 1
  br i1 %2326, label %2327, label %2467

2327:                                             ; preds = %2321
  %2328 = load ptr, ptr %22, align 8, !tbaa !9
  %2329 = getelementptr inbounds %struct.background, ptr %2328, i32 0, i32 12
  %2330 = load i16, ptr %2329, align 8, !tbaa !118
  %2331 = sext i16 %2330 to i32
  %2332 = icmp eq i32 %2331, 0
  br i1 %2332, label %2333, label %2456

2333:                                             ; preds = %2327
  %2334 = load ptr, ptr %22, align 8, !tbaa !9
  %2335 = load double, ptr %13, align 8, !tbaa !5
  %2336 = call i32 @background_w_fld(ptr noundef %2334, double noundef %2335, ptr noundef %61, ptr noundef %62, ptr noundef %64)
  %2337 = icmp eq i32 %2336, 1
  br i1 %2337, label %2338, label %2347

2338:                                             ; preds = %2333
  call void @llvm.lifetime.start.p0(i64 2048, ptr %94) #5
  %2339 = getelementptr inbounds [2048 x i8], ptr %94, i64 0, i64 0
  %2340 = load ptr, ptr %22, align 8, !tbaa !9
  %2341 = getelementptr inbounds %struct.background, ptr %2340, i32 0, i32 149
  %2342 = getelementptr inbounds [2048 x i8], ptr %2341, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2339, ptr noundef @.str, ptr noundef @.str.322, ptr noundef %2342)
  %2343 = load ptr, ptr %24, align 8, !tbaa !9
  %2344 = getelementptr inbounds %struct.perturbs, ptr %2343, i32 0, i32 186
  %2345 = getelementptr inbounds [2048 x i8], ptr %2344, i64 0, i64 0
  %2346 = getelementptr inbounds [2048 x i8], ptr %94, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2345, ptr noundef @.str.2, ptr noundef @__func__.perturb_derivs, i32 noundef 8829, ptr noundef %2346)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %94) #5
  store i32 1, ptr %6, align 4
  store i32 1, ptr %90, align 4
  br label %6020

2347:                                             ; preds = %2333
  %2348 = load double, ptr %62, align 8, !tbaa !5
  %2349 = load double, ptr %15, align 8, !tbaa !5
  %2350 = fmul double %2348, %2349
  %2351 = load double, ptr %13, align 8, !tbaa !5
  %2352 = fmul double %2350, %2351
  store double %2352, ptr %63, align 8, !tbaa !5
  %2353 = load double, ptr %61, align 8, !tbaa !5
  %2354 = load double, ptr %63, align 8, !tbaa !5
  %2355 = fdiv double %2354, 3.000000e+00
  %2356 = load double, ptr %61, align 8, !tbaa !5
  %2357 = fadd double 1.000000e+00, %2356
  %2358 = fdiv double %2355, %2357
  %2359 = load double, ptr %15, align 8, !tbaa !5
  %2360 = fdiv double %2358, %2359
  %2361 = fsub double %2353, %2360
  store double %2361, ptr %40, align 8, !tbaa !5
  %2362 = load ptr, ptr %22, align 8, !tbaa !9
  %2363 = getelementptr inbounds %struct.background, ptr %2362, i32 0, i32 11
  %2364 = load double, ptr %2363, align 8, !tbaa !119
  store double %2364, ptr %39, align 8, !tbaa !5
  %2365 = load double, ptr %61, align 8, !tbaa !5
  %2366 = fadd double 1.000000e+00, %2365
  %2367 = fneg double %2366
  %2368 = load ptr, ptr %8, align 8, !tbaa !9
  %2369 = load ptr, ptr %30, align 8, !tbaa !9
  %2370 = getelementptr inbounds %struct.perturb_vector, ptr %2369, i32 0, i32 19
  %2371 = load i32, ptr %2370, align 4, !tbaa !120
  %2372 = sext i32 %2371 to i64
  %2373 = getelementptr inbounds double, ptr %2368, i64 %2372
  %2374 = load double, ptr %2373, align 8, !tbaa !5
  %2375 = load double, ptr %42, align 8, !tbaa !5
  %2376 = fadd double %2374, %2375
  %2377 = load double, ptr %39, align 8, !tbaa !5
  %2378 = load double, ptr %61, align 8, !tbaa !5
  %2379 = fsub double %2377, %2378
  %2380 = fmul double 3.000000e+00, %2379
  %2381 = load double, ptr %15, align 8, !tbaa !5
  %2382 = fmul double %2380, %2381
  %2383 = load ptr, ptr %8, align 8, !tbaa !9
  %2384 = load ptr, ptr %30, align 8, !tbaa !9
  %2385 = getelementptr inbounds %struct.perturb_vector, ptr %2384, i32 0, i32 18
  %2386 = load i32, ptr %2385, align 8, !tbaa !121
  %2387 = sext i32 %2386 to i64
  %2388 = getelementptr inbounds double, ptr %2383, i64 %2387
  %2389 = load double, ptr %2388, align 8, !tbaa !5
  %2390 = fmul double %2382, %2389
  %2391 = fneg double %2390
  %2392 = call double @llvm.fmuladd.f64(double %2367, double %2376, double %2391)
  %2393 = load double, ptr %61, align 8, !tbaa !5
  %2394 = fadd double 1.000000e+00, %2393
  %2395 = fmul double 9.000000e+00, %2394
  %2396 = load double, ptr %39, align 8, !tbaa !5
  %2397 = load double, ptr %40, align 8, !tbaa !5
  %2398 = fsub double %2396, %2397
  %2399 = fmul double %2395, %2398
  %2400 = load double, ptr %15, align 8, !tbaa !5
  %2401 = fmul double %2399, %2400
  %2402 = load double, ptr %15, align 8, !tbaa !5
  %2403 = fmul double %2401, %2402
  %2404 = load ptr, ptr %8, align 8, !tbaa !9
  %2405 = load ptr, ptr %30, align 8, !tbaa !9
  %2406 = getelementptr inbounds %struct.perturb_vector, ptr %2405, i32 0, i32 19
  %2407 = load i32, ptr %2406, align 4, !tbaa !120
  %2408 = sext i32 %2407 to i64
  %2409 = getelementptr inbounds double, ptr %2404, i64 %2408
  %2410 = load double, ptr %2409, align 8, !tbaa !5
  %2411 = fmul double %2403, %2410
  %2412 = load double, ptr %19, align 8, !tbaa !5
  %2413 = fdiv double %2411, %2412
  %2414 = fsub double %2392, %2413
  %2415 = load ptr, ptr %9, align 8, !tbaa !9
  %2416 = load ptr, ptr %30, align 8, !tbaa !9
  %2417 = getelementptr inbounds %struct.perturb_vector, ptr %2416, i32 0, i32 18
  %2418 = load i32, ptr %2417, align 8, !tbaa !121
  %2419 = sext i32 %2418 to i64
  %2420 = getelementptr inbounds double, ptr %2415, i64 %2419
  store double %2414, ptr %2420, align 8, !tbaa !5
  %2421 = load double, ptr %39, align 8, !tbaa !5
  %2422 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %2421, double 1.000000e+00)
  %2423 = fneg double %2422
  %2424 = load double, ptr %15, align 8, !tbaa !5
  %2425 = fmul double %2423, %2424
  %2426 = load ptr, ptr %8, align 8, !tbaa !9
  %2427 = load ptr, ptr %30, align 8, !tbaa !9
  %2428 = getelementptr inbounds %struct.perturb_vector, ptr %2427, i32 0, i32 19
  %2429 = load i32, ptr %2428, align 4, !tbaa !120
  %2430 = sext i32 %2429 to i64
  %2431 = getelementptr inbounds double, ptr %2426, i64 %2430
  %2432 = load double, ptr %2431, align 8, !tbaa !5
  %2433 = load double, ptr %39, align 8, !tbaa !5
  %2434 = load double, ptr %19, align 8, !tbaa !5
  %2435 = fmul double %2433, %2434
  %2436 = load double, ptr %61, align 8, !tbaa !5
  %2437 = fadd double 1.000000e+00, %2436
  %2438 = fdiv double %2435, %2437
  %2439 = load ptr, ptr %8, align 8, !tbaa !9
  %2440 = load ptr, ptr %30, align 8, !tbaa !9
  %2441 = getelementptr inbounds %struct.perturb_vector, ptr %2440, i32 0, i32 18
  %2442 = load i32, ptr %2441, align 8, !tbaa !121
  %2443 = sext i32 %2442 to i64
  %2444 = getelementptr inbounds double, ptr %2439, i64 %2443
  %2445 = load double, ptr %2444, align 8, !tbaa !5
  %2446 = fmul double %2438, %2445
  %2447 = call double @llvm.fmuladd.f64(double %2425, double %2432, double %2446)
  %2448 = load double, ptr %43, align 8, !tbaa !5
  %2449 = fadd double %2447, %2448
  %2450 = load ptr, ptr %9, align 8, !tbaa !9
  %2451 = load ptr, ptr %30, align 8, !tbaa !9
  %2452 = getelementptr inbounds %struct.perturb_vector, ptr %2451, i32 0, i32 19
  %2453 = load i32, ptr %2452, align 4, !tbaa !120
  %2454 = sext i32 %2453 to i64
  %2455 = getelementptr inbounds double, ptr %2450, i64 %2454
  store double %2449, ptr %2455, align 8, !tbaa !5
  br label %2466

2456:                                             ; preds = %2327
  %2457 = load ptr, ptr %25, align 8, !tbaa !9
  %2458 = getelementptr inbounds %struct.perturb_workspace, ptr %2457, i32 0, i32 43
  %2459 = load double, ptr %2458, align 8, !tbaa !122
  %2460 = load ptr, ptr %9, align 8, !tbaa !9
  %2461 = load ptr, ptr %30, align 8, !tbaa !9
  %2462 = getelementptr inbounds %struct.perturb_vector, ptr %2461, i32 0, i32 20
  %2463 = load i32, ptr %2462, align 8, !tbaa !123
  %2464 = sext i32 %2463 to i64
  %2465 = getelementptr inbounds double, ptr %2460, i64 %2464
  store double %2459, ptr %2465, align 8, !tbaa !5
  br label %2466

2466:                                             ; preds = %2456, %2347
  br label %2467

2467:                                             ; preds = %2466, %2321
  %2468 = load ptr, ptr %22, align 8, !tbaa !9
  %2469 = getelementptr inbounds %struct.background, ptr %2468, i32 0, i32 122
  %2470 = load i16, ptr %2469, align 2, !tbaa !124
  %2471 = sext i16 %2470 to i32
  %2472 = icmp eq i32 %2471, 1
  br i1 %2472, label %2473, label %2532

2473:                                             ; preds = %2467
  %2474 = load ptr, ptr %8, align 8, !tbaa !9
  %2475 = load ptr, ptr %30, align 8, !tbaa !9
  %2476 = getelementptr inbounds %struct.perturb_vector, ptr %2475, i32 0, i32 22
  %2477 = load i32, ptr %2476, align 8, !tbaa !125
  %2478 = sext i32 %2477 to i64
  %2479 = getelementptr inbounds double, ptr %2474, i64 %2478
  %2480 = load double, ptr %2479, align 8, !tbaa !5
  %2481 = load ptr, ptr %9, align 8, !tbaa !9
  %2482 = load ptr, ptr %30, align 8, !tbaa !9
  %2483 = getelementptr inbounds %struct.perturb_vector, ptr %2482, i32 0, i32 21
  %2484 = load i32, ptr %2483, align 4, !tbaa !126
  %2485 = sext i32 %2484 to i64
  %2486 = getelementptr inbounds double, ptr %2481, i64 %2485
  store double %2480, ptr %2486, align 8, !tbaa !5
  %2487 = load double, ptr %15, align 8, !tbaa !5
  %2488 = fmul double -2.000000e+00, %2487
  %2489 = load ptr, ptr %8, align 8, !tbaa !9
  %2490 = load ptr, ptr %30, align 8, !tbaa !9
  %2491 = getelementptr inbounds %struct.perturb_vector, ptr %2490, i32 0, i32 22
  %2492 = load i32, ptr %2491, align 8, !tbaa !125
  %2493 = sext i32 %2492 to i64
  %2494 = getelementptr inbounds double, ptr %2489, i64 %2493
  %2495 = load double, ptr %2494, align 8, !tbaa !5
  %2496 = load double, ptr %42, align 8, !tbaa !5
  %2497 = load ptr, ptr %26, align 8, !tbaa !9
  %2498 = load ptr, ptr %22, align 8, !tbaa !9
  %2499 = getelementptr inbounds %struct.background, ptr %2498, i32 0, i32 74
  %2500 = load i32, ptr %2499, align 4, !tbaa !127
  %2501 = sext i32 %2500 to i64
  %2502 = getelementptr inbounds double, ptr %2497, i64 %2501
  %2503 = load double, ptr %2502, align 8, !tbaa !5
  %2504 = fmul double %2496, %2503
  %2505 = fneg double %2504
  %2506 = call double @llvm.fmuladd.f64(double %2488, double %2495, double %2505)
  %2507 = load double, ptr %19, align 8, !tbaa !5
  %2508 = load double, ptr %14, align 8, !tbaa !5
  %2509 = load ptr, ptr %26, align 8, !tbaa !9
  %2510 = load ptr, ptr %22, align 8, !tbaa !9
  %2511 = getelementptr inbounds %struct.background, ptr %2510, i32 0, i32 77
  %2512 = load i32, ptr %2511, align 8, !tbaa !128
  %2513 = sext i32 %2512 to i64
  %2514 = getelementptr inbounds double, ptr %2509, i64 %2513
  %2515 = load double, ptr %2514, align 8, !tbaa !5
  %2516 = call double @llvm.fmuladd.f64(double %2508, double %2515, double %2507)
  %2517 = load ptr, ptr %8, align 8, !tbaa !9
  %2518 = load ptr, ptr %30, align 8, !tbaa !9
  %2519 = getelementptr inbounds %struct.perturb_vector, ptr %2518, i32 0, i32 21
  %2520 = load i32, ptr %2519, align 4, !tbaa !126
  %2521 = sext i32 %2520 to i64
  %2522 = getelementptr inbounds double, ptr %2517, i64 %2521
  %2523 = load double, ptr %2522, align 8, !tbaa !5
  %2524 = fneg double %2516
  %2525 = call double @llvm.fmuladd.f64(double %2524, double %2523, double %2506)
  %2526 = load ptr, ptr %9, align 8, !tbaa !9
  %2527 = load ptr, ptr %30, align 8, !tbaa !9
  %2528 = getelementptr inbounds %struct.perturb_vector, ptr %2527, i32 0, i32 22
  %2529 = load i32, ptr %2528, align 8, !tbaa !125
  %2530 = sext i32 %2529 to i64
  %2531 = getelementptr inbounds double, ptr %2526, i64 %2530
  store double %2525, ptr %2531, align 8, !tbaa !5
  br label %2532

2532:                                             ; preds = %2473, %2467
  %2533 = load ptr, ptr %22, align 8, !tbaa !9
  %2534 = getelementptr inbounds %struct.background, ptr %2533, i32 0, i32 127
  %2535 = load i16, ptr %2534, align 4, !tbaa !55
  %2536 = sext i16 %2535 to i32
  %2537 = icmp eq i32 %2536, 1
  br i1 %2537, label %2538, label %3105

2538:                                             ; preds = %2532
  %2539 = load ptr, ptr %25, align 8, !tbaa !9
  %2540 = getelementptr inbounds %struct.perturb_workspace, ptr %2539, i32 0, i32 56
  %2541 = load ptr, ptr %2540, align 8, !tbaa !50
  %2542 = load ptr, ptr %25, align 8, !tbaa !9
  %2543 = getelementptr inbounds %struct.perturb_workspace, ptr %2542, i32 0, i32 52
  %2544 = load i32, ptr %2543, align 4, !tbaa !56
  %2545 = sext i32 %2544 to i64
  %2546 = getelementptr inbounds i32, ptr %2541, i64 %2545
  %2547 = load i32, ptr %2546, align 4, !tbaa !15
  %2548 = icmp eq i32 %2547, 0
  br i1 %2548, label %2549, label %3104

2549:                                             ; preds = %2538
  %2550 = load ptr, ptr %22, align 8, !tbaa !9
  %2551 = getelementptr inbounds %struct.background, ptr %2550, i32 0, i32 128
  %2552 = load i16, ptr %2551, align 2, !tbaa !37
  %2553 = sext i16 %2552 to i32
  %2554 = icmp eq i32 %2553, 0
  br i1 %2554, label %2572, label %2555

2555:                                             ; preds = %2549
  %2556 = load ptr, ptr %22, align 8, !tbaa !9
  %2557 = getelementptr inbounds %struct.background, ptr %2556, i32 0, i32 128
  %2558 = load i16, ptr %2557, align 2, !tbaa !37
  %2559 = sext i16 %2558 to i32
  %2560 = icmp eq i32 %2559, 1
  br i1 %2560, label %2561, label %3042

2561:                                             ; preds = %2555
  %2562 = load ptr, ptr %25, align 8, !tbaa !9
  %2563 = getelementptr inbounds %struct.perturb_workspace, ptr %2562, i32 0, i32 56
  %2564 = load ptr, ptr %2563, align 8, !tbaa !50
  %2565 = load ptr, ptr %25, align 8, !tbaa !9
  %2566 = getelementptr inbounds %struct.perturb_workspace, ptr %2565, i32 0, i32 51
  %2567 = load i32, ptr %2566, align 8, !tbaa !100
  %2568 = sext i32 %2567 to i64
  %2569 = getelementptr inbounds i32, ptr %2564, i64 %2568
  %2570 = load i32, ptr %2569, align 4, !tbaa !15
  %2571 = icmp eq i32 %2570, 1
  br i1 %2571, label %2572, label %3042

2572:                                             ; preds = %2561, %2549
  %2573 = load ptr, ptr %24, align 8, !tbaa !9
  %2574 = getelementptr inbounds %struct.perturbs, ptr %2573, i32 0, i32 52
  %2575 = load i32, ptr %2574, align 8, !tbaa !129
  %2576 = icmp eq i32 %2575, 0
  br i1 %2576, label %2577, label %2605

2577:                                             ; preds = %2572
  %2578 = load double, ptr %19, align 8, !tbaa !5
  %2579 = load ptr, ptr %8, align 8, !tbaa !9
  %2580 = load ptr, ptr %30, align 8, !tbaa !9
  %2581 = getelementptr inbounds %struct.perturb_vector, ptr %2580, i32 0, i32 28
  %2582 = load i32, ptr %2581, align 8, !tbaa !57
  %2583 = sext i32 %2582 to i64
  %2584 = getelementptr inbounds double, ptr %2579, i64 %2583
  %2585 = load double, ptr %2584, align 8, !tbaa !5
  %2586 = fdiv double %2585, 4.000000e+00
  %2587 = load double, ptr %81, align 8, !tbaa !5
  %2588 = load ptr, ptr %8, align 8, !tbaa !9
  %2589 = load ptr, ptr %30, align 8, !tbaa !9
  %2590 = getelementptr inbounds %struct.perturb_vector, ptr %2589, i32 0, i32 30
  %2591 = load i32, ptr %2590, align 8, !tbaa !130
  %2592 = sext i32 %2591 to i64
  %2593 = getelementptr inbounds double, ptr %2588, i64 %2592
  %2594 = load double, ptr %2593, align 8, !tbaa !5
  %2595 = fneg double %2587
  %2596 = call double @llvm.fmuladd.f64(double %2595, double %2594, double %2586)
  %2597 = load double, ptr %43, align 8, !tbaa !5
  %2598 = call double @llvm.fmuladd.f64(double %2578, double %2596, double %2597)
  %2599 = load ptr, ptr %9, align 8, !tbaa !9
  %2600 = load ptr, ptr %30, align 8, !tbaa !9
  %2601 = getelementptr inbounds %struct.perturb_vector, ptr %2600, i32 0, i32 29
  %2602 = load i32, ptr %2601, align 4, !tbaa !58
  %2603 = sext i32 %2602 to i64
  %2604 = getelementptr inbounds double, ptr %2599, i64 %2603
  store double %2598, ptr %2604, align 8, !tbaa !5
  br label %2623

2605:                                             ; preds = %2572
  %2606 = load double, ptr %19, align 8, !tbaa !5
  %2607 = fdiv double %2606, 4.000000e+00
  %2608 = load ptr, ptr %8, align 8, !tbaa !9
  %2609 = load ptr, ptr %30, align 8, !tbaa !9
  %2610 = getelementptr inbounds %struct.perturb_vector, ptr %2609, i32 0, i32 28
  %2611 = load i32, ptr %2610, align 8, !tbaa !57
  %2612 = sext i32 %2611 to i64
  %2613 = getelementptr inbounds double, ptr %2608, i64 %2612
  %2614 = load double, ptr %2613, align 8, !tbaa !5
  %2615 = load double, ptr %43, align 8, !tbaa !5
  %2616 = call double @llvm.fmuladd.f64(double %2607, double %2614, double %2615)
  %2617 = load ptr, ptr %9, align 8, !tbaa !9
  %2618 = load ptr, ptr %30, align 8, !tbaa !9
  %2619 = getelementptr inbounds %struct.perturb_vector, ptr %2618, i32 0, i32 29
  %2620 = load i32, ptr %2619, align 4, !tbaa !58
  %2621 = sext i32 %2620 to i64
  %2622 = getelementptr inbounds double, ptr %2617, i64 %2621
  store double %2616, ptr %2622, align 8, !tbaa !5
  br label %2623

2623:                                             ; preds = %2605, %2577
  %2624 = load ptr, ptr %22, align 8, !tbaa !9
  %2625 = getelementptr inbounds %struct.background, ptr %2624, i32 0, i32 128
  %2626 = load i16, ptr %2625, align 2, !tbaa !37
  %2627 = sext i16 %2626 to i32
  %2628 = icmp eq i32 %2627, 1
  br i1 %2628, label %2629, label %2654

2629:                                             ; preds = %2623
  %2630 = load double, ptr %86, align 8, !tbaa !5
  %2631 = load ptr, ptr %8, align 8, !tbaa !9
  %2632 = load ptr, ptr %30, align 8, !tbaa !9
  %2633 = getelementptr inbounds %struct.perturb_vector, ptr %2632, i32 0, i32 15
  %2634 = load i32, ptr %2633, align 4, !tbaa !98
  %2635 = sext i32 %2634 to i64
  %2636 = getelementptr inbounds double, ptr %2631, i64 %2635
  %2637 = load double, ptr %2636, align 8, !tbaa !5
  %2638 = load ptr, ptr %8, align 8, !tbaa !9
  %2639 = load ptr, ptr %30, align 8, !tbaa !9
  %2640 = getelementptr inbounds %struct.perturb_vector, ptr %2639, i32 0, i32 29
  %2641 = load i32, ptr %2640, align 4, !tbaa !58
  %2642 = sext i32 %2641 to i64
  %2643 = getelementptr inbounds double, ptr %2638, i64 %2642
  %2644 = load double, ptr %2643, align 8, !tbaa !5
  %2645 = fsub double %2637, %2644
  %2646 = load ptr, ptr %9, align 8, !tbaa !9
  %2647 = load ptr, ptr %30, align 8, !tbaa !9
  %2648 = getelementptr inbounds %struct.perturb_vector, ptr %2647, i32 0, i32 29
  %2649 = load i32, ptr %2648, align 4, !tbaa !58
  %2650 = sext i32 %2649 to i64
  %2651 = getelementptr inbounds double, ptr %2646, i64 %2650
  %2652 = load double, ptr %2651, align 8, !tbaa !5
  %2653 = call double @llvm.fmuladd.f64(double %2630, double %2645, double %2652)
  store double %2653, ptr %2651, align 8, !tbaa !5
  br label %2654

2654:                                             ; preds = %2629, %2623
  %2655 = load ptr, ptr %24, align 8, !tbaa !9
  %2656 = getelementptr inbounds %struct.perturbs, ptr %2655, i32 0, i32 52
  %2657 = load i32, ptr %2656, align 8, !tbaa !129
  %2658 = icmp eq i32 %2657, 0
  br i1 %2658, label %2659, label %3041

2659:                                             ; preds = %2654
  store i32 2, ptr %12, align 4, !tbaa !15
  %2660 = load ptr, ptr %8, align 8, !tbaa !9
  %2661 = load ptr, ptr %30, align 8, !tbaa !9
  %2662 = getelementptr inbounds %struct.perturb_vector, ptr %2661, i32 0, i32 29
  %2663 = load i32, ptr %2662, align 4, !tbaa !58
  %2664 = sext i32 %2663 to i64
  %2665 = getelementptr inbounds double, ptr %2660, i64 %2664
  %2666 = load double, ptr %2665, align 8, !tbaa !5
  %2667 = load double, ptr %44, align 8, !tbaa !5
  %2668 = fadd double %2666, %2667
  %2669 = load double, ptr %18, align 8, !tbaa !5
  %2670 = fmul double 6.000000e-01, %2669
  %2671 = load ptr, ptr %29, align 8, !tbaa !9
  %2672 = getelementptr inbounds double, ptr %2671, i64 3
  %2673 = load double, ptr %2672, align 8, !tbaa !5
  %2674 = fmul double %2670, %2673
  %2675 = load ptr, ptr %29, align 8, !tbaa !9
  %2676 = getelementptr inbounds double, ptr %2675, i64 2
  %2677 = load double, ptr %2676, align 8, !tbaa !5
  %2678 = fdiv double %2674, %2677
  %2679 = load ptr, ptr %8, align 8, !tbaa !9
  %2680 = load ptr, ptr %30, align 8, !tbaa !9
  %2681 = getelementptr inbounds %struct.perturb_vector, ptr %2680, i32 0, i32 30
  %2682 = load i32, ptr %2681, align 8, !tbaa !130
  %2683 = add nsw i32 %2682, 1
  %2684 = sext i32 %2683 to i64
  %2685 = getelementptr inbounds double, ptr %2679, i64 %2684
  %2686 = load double, ptr %2685, align 8, !tbaa !5
  %2687 = fmul double %2678, %2686
  %2688 = fneg double %2687
  %2689 = call double @llvm.fmuladd.f64(double 0x3FE1111111111111, double %2668, double %2688)
  %2690 = fmul double 5.000000e-01, %2689
  %2691 = load ptr, ptr %9, align 8, !tbaa !9
  %2692 = load ptr, ptr %30, align 8, !tbaa !9
  %2693 = getelementptr inbounds %struct.perturb_vector, ptr %2692, i32 0, i32 30
  %2694 = load i32, ptr %2693, align 8, !tbaa !130
  %2695 = sext i32 %2694 to i64
  %2696 = getelementptr inbounds double, ptr %2691, i64 %2695
  store double %2690, ptr %2696, align 8, !tbaa !5
  %2697 = load ptr, ptr %22, align 8, !tbaa !9
  %2698 = getelementptr inbounds %struct.background, ptr %2697, i32 0, i32 128
  %2699 = load i16, ptr %2698, align 2, !tbaa !37
  %2700 = sext i16 %2699 to i32
  %2701 = icmp eq i32 %2700, 1
  br i1 %2701, label %2702, label %2739

2702:                                             ; preds = %2659
  %2703 = load ptr, ptr %24, align 8, !tbaa !9
  %2704 = getelementptr inbounds %struct.perturbs, ptr %2703, i32 0, i32 50
  %2705 = load ptr, ptr %2704, align 8, !tbaa !104
  %2706 = load i32, ptr %12, align 4, !tbaa !15
  %2707 = sub nsw i32 %2706, 2
  %2708 = sext i32 %2707 to i64
  %2709 = getelementptr inbounds double, ptr %2705, i64 %2708
  %2710 = load double, ptr %2709, align 8, !tbaa !5
  %2711 = load double, ptr %86, align 8, !tbaa !5
  %2712 = load ptr, ptr %24, align 8, !tbaa !9
  %2713 = getelementptr inbounds %struct.perturbs, ptr %2712, i32 0, i32 51
  %2714 = load ptr, ptr %2713, align 8, !tbaa !131
  %2715 = load i32, ptr %12, align 4, !tbaa !15
  %2716 = sub nsw i32 %2715, 2
  %2717 = sext i32 %2716 to i64
  %2718 = getelementptr inbounds double, ptr %2714, i64 %2717
  %2719 = load double, ptr %2718, align 8, !tbaa !5
  %2720 = load double, ptr %87, align 8, !tbaa !5
  %2721 = fmul double %2719, %2720
  %2722 = call double @llvm.fmuladd.f64(double %2710, double %2711, double %2721)
  %2723 = load ptr, ptr %8, align 8, !tbaa !9
  %2724 = load ptr, ptr %30, align 8, !tbaa !9
  %2725 = getelementptr inbounds %struct.perturb_vector, ptr %2724, i32 0, i32 30
  %2726 = load i32, ptr %2725, align 8, !tbaa !130
  %2727 = sext i32 %2726 to i64
  %2728 = getelementptr inbounds double, ptr %2723, i64 %2727
  %2729 = load double, ptr %2728, align 8, !tbaa !5
  %2730 = load ptr, ptr %9, align 8, !tbaa !9
  %2731 = load ptr, ptr %30, align 8, !tbaa !9
  %2732 = getelementptr inbounds %struct.perturb_vector, ptr %2731, i32 0, i32 30
  %2733 = load i32, ptr %2732, align 8, !tbaa !130
  %2734 = sext i32 %2733 to i64
  %2735 = getelementptr inbounds double, ptr %2730, i64 %2734
  %2736 = load double, ptr %2735, align 8, !tbaa !5
  %2737 = fneg double %2722
  %2738 = call double @llvm.fmuladd.f64(double %2737, double %2729, double %2736)
  store double %2738, ptr %2735, align 8, !tbaa !5
  br label %2739

2739:                                             ; preds = %2702, %2659
  store i32 3, ptr %12, align 4, !tbaa !15
  %2740 = load double, ptr %18, align 8, !tbaa !5
  %2741 = load i32, ptr %12, align 4, !tbaa !15
  %2742 = sitofp i32 %2741 to double
  %2743 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2742, double 1.000000e+00)
  %2744 = fdiv double %2740, %2743
  %2745 = load i32, ptr %12, align 4, !tbaa !15
  %2746 = sitofp i32 %2745 to double
  %2747 = fmul double %2746, 2.000000e+00
  %2748 = load ptr, ptr %29, align 8, !tbaa !9
  %2749 = load i32, ptr %12, align 4, !tbaa !15
  %2750 = sext i32 %2749 to i64
  %2751 = getelementptr inbounds double, ptr %2748, i64 %2750
  %2752 = load double, ptr %2751, align 8, !tbaa !5
  %2753 = fmul double %2747, %2752
  %2754 = load ptr, ptr %29, align 8, !tbaa !9
  %2755 = getelementptr inbounds double, ptr %2754, i64 2
  %2756 = load double, ptr %2755, align 8, !tbaa !5
  %2757 = fmul double %2753, %2756
  %2758 = load ptr, ptr %8, align 8, !tbaa !9
  %2759 = load ptr, ptr %30, align 8, !tbaa !9
  %2760 = getelementptr inbounds %struct.perturb_vector, ptr %2759, i32 0, i32 30
  %2761 = load i32, ptr %2760, align 8, !tbaa !130
  %2762 = sext i32 %2761 to i64
  %2763 = getelementptr inbounds double, ptr %2758, i64 %2762
  %2764 = load double, ptr %2763, align 8, !tbaa !5
  %2765 = load i32, ptr %12, align 4, !tbaa !15
  %2766 = sitofp i32 %2765 to double
  %2767 = fadd double %2766, 1.000000e+00
  %2768 = load ptr, ptr %29, align 8, !tbaa !9
  %2769 = load i32, ptr %12, align 4, !tbaa !15
  %2770 = add nsw i32 %2769, 1
  %2771 = sext i32 %2770 to i64
  %2772 = getelementptr inbounds double, ptr %2768, i64 %2771
  %2773 = load double, ptr %2772, align 8, !tbaa !5
  %2774 = fmul double %2767, %2773
  %2775 = load ptr, ptr %8, align 8, !tbaa !9
  %2776 = load ptr, ptr %30, align 8, !tbaa !9
  %2777 = getelementptr inbounds %struct.perturb_vector, ptr %2776, i32 0, i32 31
  %2778 = load i32, ptr %2777, align 4, !tbaa !132
  %2779 = add nsw i32 %2778, 1
  %2780 = sext i32 %2779 to i64
  %2781 = getelementptr inbounds double, ptr %2775, i64 %2780
  %2782 = load double, ptr %2781, align 8, !tbaa !5
  %2783 = fmul double %2774, %2782
  %2784 = fneg double %2783
  %2785 = call double @llvm.fmuladd.f64(double %2757, double %2764, double %2784)
  %2786 = fmul double %2744, %2785
  %2787 = load ptr, ptr %9, align 8, !tbaa !9
  %2788 = load ptr, ptr %30, align 8, !tbaa !9
  %2789 = getelementptr inbounds %struct.perturb_vector, ptr %2788, i32 0, i32 31
  %2790 = load i32, ptr %2789, align 4, !tbaa !132
  %2791 = sext i32 %2790 to i64
  %2792 = getelementptr inbounds double, ptr %2787, i64 %2791
  store double %2786, ptr %2792, align 8, !tbaa !5
  %2793 = load ptr, ptr %22, align 8, !tbaa !9
  %2794 = getelementptr inbounds %struct.background, ptr %2793, i32 0, i32 128
  %2795 = load i16, ptr %2794, align 2, !tbaa !37
  %2796 = sext i16 %2795 to i32
  %2797 = icmp eq i32 %2796, 1
  br i1 %2797, label %2798, label %2835

2798:                                             ; preds = %2739
  %2799 = load ptr, ptr %24, align 8, !tbaa !9
  %2800 = getelementptr inbounds %struct.perturbs, ptr %2799, i32 0, i32 50
  %2801 = load ptr, ptr %2800, align 8, !tbaa !104
  %2802 = load i32, ptr %12, align 4, !tbaa !15
  %2803 = sub nsw i32 %2802, 2
  %2804 = sext i32 %2803 to i64
  %2805 = getelementptr inbounds double, ptr %2801, i64 %2804
  %2806 = load double, ptr %2805, align 8, !tbaa !5
  %2807 = load double, ptr %86, align 8, !tbaa !5
  %2808 = load ptr, ptr %24, align 8, !tbaa !9
  %2809 = getelementptr inbounds %struct.perturbs, ptr %2808, i32 0, i32 51
  %2810 = load ptr, ptr %2809, align 8, !tbaa !131
  %2811 = load i32, ptr %12, align 4, !tbaa !15
  %2812 = sub nsw i32 %2811, 2
  %2813 = sext i32 %2812 to i64
  %2814 = getelementptr inbounds double, ptr %2810, i64 %2813
  %2815 = load double, ptr %2814, align 8, !tbaa !5
  %2816 = load double, ptr %87, align 8, !tbaa !5
  %2817 = fmul double %2815, %2816
  %2818 = call double @llvm.fmuladd.f64(double %2806, double %2807, double %2817)
  %2819 = load ptr, ptr %8, align 8, !tbaa !9
  %2820 = load ptr, ptr %30, align 8, !tbaa !9
  %2821 = getelementptr inbounds %struct.perturb_vector, ptr %2820, i32 0, i32 31
  %2822 = load i32, ptr %2821, align 4, !tbaa !132
  %2823 = sext i32 %2822 to i64
  %2824 = getelementptr inbounds double, ptr %2819, i64 %2823
  %2825 = load double, ptr %2824, align 8, !tbaa !5
  %2826 = load ptr, ptr %9, align 8, !tbaa !9
  %2827 = load ptr, ptr %30, align 8, !tbaa !9
  %2828 = getelementptr inbounds %struct.perturb_vector, ptr %2827, i32 0, i32 31
  %2829 = load i32, ptr %2828, align 4, !tbaa !132
  %2830 = sext i32 %2829 to i64
  %2831 = getelementptr inbounds double, ptr %2826, i64 %2830
  %2832 = load double, ptr %2831, align 8, !tbaa !5
  %2833 = fneg double %2818
  %2834 = call double @llvm.fmuladd.f64(double %2833, double %2825, double %2832)
  store double %2834, ptr %2831, align 8, !tbaa !5
  br label %2835

2835:                                             ; preds = %2798, %2739
  store i32 4, ptr %12, align 4, !tbaa !15
  br label %2836

2836:                                             ; preds = %2945, %2835
  %2837 = load i32, ptr %12, align 4, !tbaa !15
  %2838 = load ptr, ptr %30, align 8, !tbaa !9
  %2839 = getelementptr inbounds %struct.perturb_vector, ptr %2838, i32 0, i32 32
  %2840 = load i32, ptr %2839, align 8, !tbaa !133
  %2841 = icmp slt i32 %2837, %2840
  br i1 %2841, label %2842, label %2948

2842:                                             ; preds = %2836
  %2843 = load double, ptr %18, align 8, !tbaa !5
  %2844 = load i32, ptr %12, align 4, !tbaa !15
  %2845 = sitofp i32 %2844 to double
  %2846 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2845, double 1.000000e+00)
  %2847 = fdiv double %2843, %2846
  %2848 = load i32, ptr %12, align 4, !tbaa !15
  %2849 = sitofp i32 %2848 to double
  %2850 = load ptr, ptr %29, align 8, !tbaa !9
  %2851 = load i32, ptr %12, align 4, !tbaa !15
  %2852 = sext i32 %2851 to i64
  %2853 = getelementptr inbounds double, ptr %2850, i64 %2852
  %2854 = load double, ptr %2853, align 8, !tbaa !5
  %2855 = fmul double %2849, %2854
  %2856 = load ptr, ptr %8, align 8, !tbaa !9
  %2857 = load ptr, ptr %30, align 8, !tbaa !9
  %2858 = getelementptr inbounds %struct.perturb_vector, ptr %2857, i32 0, i32 28
  %2859 = load i32, ptr %2858, align 8, !tbaa !57
  %2860 = load i32, ptr %12, align 4, !tbaa !15
  %2861 = add nsw i32 %2859, %2860
  %2862 = sub nsw i32 %2861, 1
  %2863 = sext i32 %2862 to i64
  %2864 = getelementptr inbounds double, ptr %2856, i64 %2863
  %2865 = load double, ptr %2864, align 8, !tbaa !5
  %2866 = load i32, ptr %12, align 4, !tbaa !15
  %2867 = sitofp i32 %2866 to double
  %2868 = fadd double %2867, 1.000000e+00
  %2869 = load ptr, ptr %29, align 8, !tbaa !9
  %2870 = load i32, ptr %12, align 4, !tbaa !15
  %2871 = add nsw i32 %2870, 1
  %2872 = sext i32 %2871 to i64
  %2873 = getelementptr inbounds double, ptr %2869, i64 %2872
  %2874 = load double, ptr %2873, align 8, !tbaa !5
  %2875 = fmul double %2868, %2874
  %2876 = load ptr, ptr %8, align 8, !tbaa !9
  %2877 = load ptr, ptr %30, align 8, !tbaa !9
  %2878 = getelementptr inbounds %struct.perturb_vector, ptr %2877, i32 0, i32 28
  %2879 = load i32, ptr %2878, align 8, !tbaa !57
  %2880 = load i32, ptr %12, align 4, !tbaa !15
  %2881 = add nsw i32 %2879, %2880
  %2882 = add nsw i32 %2881, 1
  %2883 = sext i32 %2882 to i64
  %2884 = getelementptr inbounds double, ptr %2876, i64 %2883
  %2885 = load double, ptr %2884, align 8, !tbaa !5
  %2886 = fmul double %2875, %2885
  %2887 = fneg double %2886
  %2888 = call double @llvm.fmuladd.f64(double %2855, double %2865, double %2887)
  %2889 = fmul double %2847, %2888
  %2890 = load ptr, ptr %9, align 8, !tbaa !9
  %2891 = load ptr, ptr %30, align 8, !tbaa !9
  %2892 = getelementptr inbounds %struct.perturb_vector, ptr %2891, i32 0, i32 28
  %2893 = load i32, ptr %2892, align 8, !tbaa !57
  %2894 = load i32, ptr %12, align 4, !tbaa !15
  %2895 = add nsw i32 %2893, %2894
  %2896 = sext i32 %2895 to i64
  %2897 = getelementptr inbounds double, ptr %2890, i64 %2896
  store double %2889, ptr %2897, align 8, !tbaa !5
  %2898 = load ptr, ptr %22, align 8, !tbaa !9
  %2899 = getelementptr inbounds %struct.background, ptr %2898, i32 0, i32 128
  %2900 = load i16, ptr %2899, align 2, !tbaa !37
  %2901 = sext i16 %2900 to i32
  %2902 = icmp eq i32 %2901, 1
  br i1 %2902, label %2903, label %2944

2903:                                             ; preds = %2842
  %2904 = load ptr, ptr %24, align 8, !tbaa !9
  %2905 = getelementptr inbounds %struct.perturbs, ptr %2904, i32 0, i32 50
  %2906 = load ptr, ptr %2905, align 8, !tbaa !104
  %2907 = load i32, ptr %12, align 4, !tbaa !15
  %2908 = sub nsw i32 %2907, 2
  %2909 = sext i32 %2908 to i64
  %2910 = getelementptr inbounds double, ptr %2906, i64 %2909
  %2911 = load double, ptr %2910, align 8, !tbaa !5
  %2912 = load double, ptr %86, align 8, !tbaa !5
  %2913 = load ptr, ptr %24, align 8, !tbaa !9
  %2914 = getelementptr inbounds %struct.perturbs, ptr %2913, i32 0, i32 51
  %2915 = load ptr, ptr %2914, align 8, !tbaa !131
  %2916 = load i32, ptr %12, align 4, !tbaa !15
  %2917 = sub nsw i32 %2916, 2
  %2918 = sext i32 %2917 to i64
  %2919 = getelementptr inbounds double, ptr %2915, i64 %2918
  %2920 = load double, ptr %2919, align 8, !tbaa !5
  %2921 = load double, ptr %87, align 8, !tbaa !5
  %2922 = fmul double %2920, %2921
  %2923 = call double @llvm.fmuladd.f64(double %2911, double %2912, double %2922)
  %2924 = load ptr, ptr %8, align 8, !tbaa !9
  %2925 = load ptr, ptr %30, align 8, !tbaa !9
  %2926 = getelementptr inbounds %struct.perturb_vector, ptr %2925, i32 0, i32 28
  %2927 = load i32, ptr %2926, align 8, !tbaa !57
  %2928 = load i32, ptr %12, align 4, !tbaa !15
  %2929 = add nsw i32 %2927, %2928
  %2930 = sext i32 %2929 to i64
  %2931 = getelementptr inbounds double, ptr %2924, i64 %2930
  %2932 = load double, ptr %2931, align 8, !tbaa !5
  %2933 = load ptr, ptr %9, align 8, !tbaa !9
  %2934 = load ptr, ptr %30, align 8, !tbaa !9
  %2935 = getelementptr inbounds %struct.perturb_vector, ptr %2934, i32 0, i32 28
  %2936 = load i32, ptr %2935, align 8, !tbaa !57
  %2937 = load i32, ptr %12, align 4, !tbaa !15
  %2938 = add nsw i32 %2936, %2937
  %2939 = sext i32 %2938 to i64
  %2940 = getelementptr inbounds double, ptr %2933, i64 %2939
  %2941 = load double, ptr %2940, align 8, !tbaa !5
  %2942 = fneg double %2923
  %2943 = call double @llvm.fmuladd.f64(double %2942, double %2932, double %2941)
  store double %2943, ptr %2940, align 8, !tbaa !5
  br label %2944

2944:                                             ; preds = %2903, %2842
  br label %2945

2945:                                             ; preds = %2944
  %2946 = load i32, ptr %12, align 4, !tbaa !15
  %2947 = add nsw i32 %2946, 1
  store i32 %2947, ptr %12, align 4, !tbaa !15
  br label %2836, !llvm.loop !134

2948:                                             ; preds = %2836
  %2949 = load ptr, ptr %30, align 8, !tbaa !9
  %2950 = getelementptr inbounds %struct.perturb_vector, ptr %2949, i32 0, i32 32
  %2951 = load i32, ptr %2950, align 8, !tbaa !133
  store i32 %2951, ptr %12, align 4, !tbaa !15
  %2952 = load double, ptr %18, align 8, !tbaa !5
  %2953 = load ptr, ptr %29, align 8, !tbaa !9
  %2954 = load i32, ptr %12, align 4, !tbaa !15
  %2955 = sext i32 %2954 to i64
  %2956 = getelementptr inbounds double, ptr %2953, i64 %2955
  %2957 = load double, ptr %2956, align 8, !tbaa !5
  %2958 = load ptr, ptr %8, align 8, !tbaa !9
  %2959 = load ptr, ptr %30, align 8, !tbaa !9
  %2960 = getelementptr inbounds %struct.perturb_vector, ptr %2959, i32 0, i32 28
  %2961 = load i32, ptr %2960, align 8, !tbaa !57
  %2962 = load i32, ptr %12, align 4, !tbaa !15
  %2963 = add nsw i32 %2961, %2962
  %2964 = sub nsw i32 %2963, 1
  %2965 = sext i32 %2964 to i64
  %2966 = getelementptr inbounds double, ptr %2958, i64 %2965
  %2967 = load double, ptr %2966, align 8, !tbaa !5
  %2968 = load i32, ptr %12, align 4, !tbaa !15
  %2969 = sitofp i32 %2968 to double
  %2970 = fadd double 1.000000e+00, %2969
  %2971 = load double, ptr %79, align 8, !tbaa !5
  %2972 = fmul double %2970, %2971
  %2973 = load ptr, ptr %8, align 8, !tbaa !9
  %2974 = load ptr, ptr %30, align 8, !tbaa !9
  %2975 = getelementptr inbounds %struct.perturb_vector, ptr %2974, i32 0, i32 28
  %2976 = load i32, ptr %2975, align 8, !tbaa !57
  %2977 = load i32, ptr %12, align 4, !tbaa !15
  %2978 = add nsw i32 %2976, %2977
  %2979 = sext i32 %2978 to i64
  %2980 = getelementptr inbounds double, ptr %2973, i64 %2979
  %2981 = load double, ptr %2980, align 8, !tbaa !5
  %2982 = fmul double %2972, %2981
  %2983 = fneg double %2982
  %2984 = call double @llvm.fmuladd.f64(double %2957, double %2967, double %2983)
  %2985 = fmul double %2952, %2984
  %2986 = load ptr, ptr %9, align 8, !tbaa !9
  %2987 = load ptr, ptr %30, align 8, !tbaa !9
  %2988 = getelementptr inbounds %struct.perturb_vector, ptr %2987, i32 0, i32 28
  %2989 = load i32, ptr %2988, align 8, !tbaa !57
  %2990 = load i32, ptr %12, align 4, !tbaa !15
  %2991 = add nsw i32 %2989, %2990
  %2992 = sext i32 %2991 to i64
  %2993 = getelementptr inbounds double, ptr %2986, i64 %2992
  store double %2985, ptr %2993, align 8, !tbaa !5
  %2994 = load ptr, ptr %22, align 8, !tbaa !9
  %2995 = getelementptr inbounds %struct.background, ptr %2994, i32 0, i32 128
  %2996 = load i16, ptr %2995, align 2, !tbaa !37
  %2997 = sext i16 %2996 to i32
  %2998 = icmp eq i32 %2997, 1
  br i1 %2998, label %2999, label %3040

2999:                                             ; preds = %2948
  %3000 = load ptr, ptr %24, align 8, !tbaa !9
  %3001 = getelementptr inbounds %struct.perturbs, ptr %3000, i32 0, i32 50
  %3002 = load ptr, ptr %3001, align 8, !tbaa !104
  %3003 = load i32, ptr %12, align 4, !tbaa !15
  %3004 = sub nsw i32 %3003, 2
  %3005 = sext i32 %3004 to i64
  %3006 = getelementptr inbounds double, ptr %3002, i64 %3005
  %3007 = load double, ptr %3006, align 8, !tbaa !5
  %3008 = load double, ptr %86, align 8, !tbaa !5
  %3009 = load ptr, ptr %24, align 8, !tbaa !9
  %3010 = getelementptr inbounds %struct.perturbs, ptr %3009, i32 0, i32 51
  %3011 = load ptr, ptr %3010, align 8, !tbaa !131
  %3012 = load i32, ptr %12, align 4, !tbaa !15
  %3013 = sub nsw i32 %3012, 2
  %3014 = sext i32 %3013 to i64
  %3015 = getelementptr inbounds double, ptr %3011, i64 %3014
  %3016 = load double, ptr %3015, align 8, !tbaa !5
  %3017 = load double, ptr %87, align 8, !tbaa !5
  %3018 = fmul double %3016, %3017
  %3019 = call double @llvm.fmuladd.f64(double %3007, double %3008, double %3018)
  %3020 = load ptr, ptr %8, align 8, !tbaa !9
  %3021 = load ptr, ptr %30, align 8, !tbaa !9
  %3022 = getelementptr inbounds %struct.perturb_vector, ptr %3021, i32 0, i32 28
  %3023 = load i32, ptr %3022, align 8, !tbaa !57
  %3024 = load i32, ptr %12, align 4, !tbaa !15
  %3025 = add nsw i32 %3023, %3024
  %3026 = sext i32 %3025 to i64
  %3027 = getelementptr inbounds double, ptr %3020, i64 %3026
  %3028 = load double, ptr %3027, align 8, !tbaa !5
  %3029 = load ptr, ptr %9, align 8, !tbaa !9
  %3030 = load ptr, ptr %30, align 8, !tbaa !9
  %3031 = getelementptr inbounds %struct.perturb_vector, ptr %3030, i32 0, i32 28
  %3032 = load i32, ptr %3031, align 8, !tbaa !57
  %3033 = load i32, ptr %12, align 4, !tbaa !15
  %3034 = add nsw i32 %3032, %3033
  %3035 = sext i32 %3034 to i64
  %3036 = getelementptr inbounds double, ptr %3029, i64 %3035
  %3037 = load double, ptr %3036, align 8, !tbaa !5
  %3038 = fneg double %3019
  %3039 = call double @llvm.fmuladd.f64(double %3038, double %3028, double %3037)
  store double %3039, ptr %3036, align 8, !tbaa !5
  br label %3040

3040:                                             ; preds = %2999, %2948
  br label %3041

3041:                                             ; preds = %3040, %2654
  br label %3103

3042:                                             ; preds = %2561, %2555
  %3043 = load double, ptr %85, align 8, !tbaa !5
  %3044 = fadd double 1.000000e+00, %3043
  %3045 = fdiv double 1.000000e+00, %3044
  %3046 = load double, ptr %15, align 8, !tbaa !5
  %3047 = fneg double %3046
  %3048 = load ptr, ptr %8, align 8, !tbaa !9
  %3049 = load ptr, ptr %30, align 8, !tbaa !9
  %3050 = getelementptr inbounds %struct.perturb_vector, ptr %3049, i32 0, i32 15
  %3051 = load i32, ptr %3050, align 4, !tbaa !98
  %3052 = sext i32 %3051 to i64
  %3053 = getelementptr inbounds double, ptr %3048, i64 %3052
  %3054 = load double, ptr %3053, align 8, !tbaa !5
  %3055 = load double, ptr %19, align 8, !tbaa !5
  %3056 = load ptr, ptr %27, align 8, !tbaa !9
  %3057 = load ptr, ptr %23, align 8, !tbaa !9
  %3058 = getelementptr inbounds %struct.thermo, ptr %3057, i32 0, i32 52
  %3059 = load i32, ptr %3058, align 8, !tbaa !101
  %3060 = sext i32 %3059 to i64
  %3061 = getelementptr inbounds double, ptr %3056, i64 %3060
  %3062 = load double, ptr %3061, align 8, !tbaa !5
  %3063 = fmul double %3055, %3062
  %3064 = load ptr, ptr %8, align 8, !tbaa !9
  %3065 = load ptr, ptr %30, align 8, !tbaa !9
  %3066 = getelementptr inbounds %struct.perturb_vector, ptr %3065, i32 0, i32 14
  %3067 = load i32, ptr %3066, align 8, !tbaa !99
  %3068 = sext i32 %3067 to i64
  %3069 = getelementptr inbounds double, ptr %3064, i64 %3068
  %3070 = load double, ptr %3069, align 8, !tbaa !5
  %3071 = fmul double %3063, %3070
  %3072 = call double @llvm.fmuladd.f64(double %3047, double %3054, double %3071)
  %3073 = load double, ptr %19, align 8, !tbaa !5
  %3074 = load double, ptr %85, align 8, !tbaa !5
  %3075 = fmul double %3073, %3074
  %3076 = load ptr, ptr %8, align 8, !tbaa !9
  %3077 = load ptr, ptr %30, align 8, !tbaa !9
  %3078 = getelementptr inbounds %struct.perturb_vector, ptr %3077, i32 0, i32 28
  %3079 = load i32, ptr %3078, align 8, !tbaa !57
  %3080 = sext i32 %3079 to i64
  %3081 = getelementptr inbounds double, ptr %3076, i64 %3080
  %3082 = load double, ptr %3081, align 8, !tbaa !5
  %3083 = load ptr, ptr %25, align 8, !tbaa !9
  %3084 = getelementptr inbounds %struct.perturb_workspace, ptr %3083, i32 0, i32 25
  %3085 = load double, ptr %3084, align 8, !tbaa !105
  %3086 = fneg double %3085
  %3087 = call double @llvm.fmuladd.f64(double 2.500000e-01, double %3082, double %3086)
  %3088 = call double @llvm.fmuladd.f64(double %3075, double %3087, double %3072)
  %3089 = load double, ptr %43, align 8, !tbaa !5
  %3090 = call double @llvm.fmuladd.f64(double %3045, double %3088, double %3089)
  %3091 = load double, ptr %85, align 8, !tbaa !5
  %3092 = fadd double 1.000000e+00, %3091
  %3093 = fdiv double 1.000000e+00, %3092
  %3094 = load double, ptr %88, align 8, !tbaa !5
  %3095 = fneg double %3093
  %3096 = call double @llvm.fmuladd.f64(double %3095, double %3094, double %3090)
  %3097 = load ptr, ptr %9, align 8, !tbaa !9
  %3098 = load ptr, ptr %30, align 8, !tbaa !9
  %3099 = getelementptr inbounds %struct.perturb_vector, ptr %3098, i32 0, i32 29
  %3100 = load i32, ptr %3099, align 4, !tbaa !58
  %3101 = sext i32 %3100 to i64
  %3102 = getelementptr inbounds double, ptr %3097, i64 %3101
  store double %3096, ptr %3102, align 8, !tbaa !5
  br label %3103

3103:                                             ; preds = %3042, %3041
  br label %3104

3104:                                             ; preds = %3103, %2538
  br label %3105

3105:                                             ; preds = %3104, %2532
  %3106 = load ptr, ptr %22, align 8, !tbaa !9
  %3107 = getelementptr inbounds %struct.background, ptr %3106, i32 0, i32 126
  %3108 = load i16, ptr %3107, align 2, !tbaa !135
  %3109 = sext i16 %3108 to i32
  %3110 = icmp eq i32 %3109, 1
  br i1 %3110, label %3111, label %3541

3111:                                             ; preds = %3105
  %3112 = load ptr, ptr %25, align 8, !tbaa !9
  %3113 = getelementptr inbounds %struct.perturb_workspace, ptr %3112, i32 0, i32 56
  %3114 = load ptr, ptr %3113, align 8, !tbaa !50
  %3115 = load ptr, ptr %25, align 8, !tbaa !9
  %3116 = getelementptr inbounds %struct.perturb_workspace, ptr %3115, i32 0, i32 50
  %3117 = load i32, ptr %3116, align 4, !tbaa !51
  %3118 = sext i32 %3117 to i64
  %3119 = getelementptr inbounds i32, ptr %3114, i64 %3118
  %3120 = load i32, ptr %3119, align 4, !tbaa !15
  %3121 = icmp eq i32 %3120, 0
  br i1 %3121, label %3122, label %3540

3122:                                             ; preds = %3111
  %3123 = load ptr, ptr %8, align 8, !tbaa !9
  %3124 = load ptr, ptr %30, align 8, !tbaa !9
  %3125 = getelementptr inbounds %struct.perturb_vector, ptr %3124, i32 0, i32 24
  %3126 = load i32, ptr %3125, align 8, !tbaa !136
  %3127 = sext i32 %3126 to i64
  %3128 = getelementptr inbounds double, ptr %3123, i64 %3127
  %3129 = load double, ptr %3128, align 8, !tbaa !5
  %3130 = load double, ptr %42, align 8, !tbaa !5
  %3131 = fadd double %3129, %3130
  %3132 = load ptr, ptr %24, align 8, !tbaa !9
  %3133 = getelementptr inbounds %struct.perturbs, ptr %3132, i32 0, i32 47
  %3134 = load double, ptr %3133, align 8, !tbaa !137
  %3135 = fsub double 1.000000e+00, %3134
  %3136 = load double, ptr %15, align 8, !tbaa !5
  %3137 = fmul double %3135, %3136
  %3138 = load ptr, ptr %8, align 8, !tbaa !9
  %3139 = load ptr, ptr %30, align 8, !tbaa !9
  %3140 = getelementptr inbounds %struct.perturb_vector, ptr %3139, i32 0, i32 23
  %3141 = load i32, ptr %3140, align 4, !tbaa !138
  %3142 = sext i32 %3141 to i64
  %3143 = getelementptr inbounds double, ptr %3138, i64 %3142
  %3144 = load double, ptr %3143, align 8, !tbaa !5
  %3145 = load double, ptr %15, align 8, !tbaa !5
  %3146 = fmul double 4.000000e+00, %3145
  %3147 = load ptr, ptr %8, align 8, !tbaa !9
  %3148 = load ptr, ptr %30, align 8, !tbaa !9
  %3149 = getelementptr inbounds %struct.perturb_vector, ptr %3148, i32 0, i32 24
  %3150 = load i32, ptr %3149, align 8, !tbaa !136
  %3151 = sext i32 %3150 to i64
  %3152 = getelementptr inbounds double, ptr %3147, i64 %3151
  %3153 = load double, ptr %3152, align 8, !tbaa !5
  %3154 = fmul double %3146, %3153
  %3155 = load double, ptr %18, align 8, !tbaa !5
  %3156 = fdiv double %3154, %3155
  %3157 = load double, ptr %18, align 8, !tbaa !5
  %3158 = fdiv double %3156, %3157
  %3159 = fadd double %3144, %3158
  %3160 = fmul double %3137, %3159
  %3161 = call double @llvm.fmuladd.f64(double 0xBFF5555555555555, double %3131, double %3160)
  %3162 = load ptr, ptr %9, align 8, !tbaa !9
  %3163 = load ptr, ptr %30, align 8, !tbaa !9
  %3164 = getelementptr inbounds %struct.perturb_vector, ptr %3163, i32 0, i32 23
  %3165 = load i32, ptr %3164, align 4, !tbaa !138
  %3166 = sext i32 %3165 to i64
  %3167 = getelementptr inbounds double, ptr %3162, i64 %3166
  store double %3161, ptr %3167, align 8, !tbaa !5
  %3168 = load double, ptr %19, align 8, !tbaa !5
  %3169 = load ptr, ptr %24, align 8, !tbaa !9
  %3170 = getelementptr inbounds %struct.perturbs, ptr %3169, i32 0, i32 47
  %3171 = load double, ptr %3170, align 8, !tbaa !137
  %3172 = load ptr, ptr %8, align 8, !tbaa !9
  %3173 = load ptr, ptr %30, align 8, !tbaa !9
  %3174 = getelementptr inbounds %struct.perturb_vector, ptr %3173, i32 0, i32 23
  %3175 = load i32, ptr %3174, align 4, !tbaa !138
  %3176 = sext i32 %3175 to i64
  %3177 = getelementptr inbounds double, ptr %3172, i64 %3176
  %3178 = load double, ptr %3177, align 8, !tbaa !5
  %3179 = fmul double %3171, %3178
  %3180 = fdiv double %3179, 4.000000e+00
  %3181 = load double, ptr %81, align 8, !tbaa !5
  %3182 = load ptr, ptr %8, align 8, !tbaa !9
  %3183 = load ptr, ptr %30, align 8, !tbaa !9
  %3184 = getelementptr inbounds %struct.perturb_vector, ptr %3183, i32 0, i32 25
  %3185 = load i32, ptr %3184, align 4, !tbaa !139
  %3186 = sext i32 %3185 to i64
  %3187 = getelementptr inbounds double, ptr %3182, i64 %3186
  %3188 = load double, ptr %3187, align 8, !tbaa !5
  %3189 = fneg double %3181
  %3190 = call double @llvm.fmuladd.f64(double %3189, double %3188, double %3180)
  %3191 = load double, ptr %43, align 8, !tbaa !5
  %3192 = call double @llvm.fmuladd.f64(double %3168, double %3190, double %3191)
  %3193 = load ptr, ptr %24, align 8, !tbaa !9
  %3194 = getelementptr inbounds %struct.perturbs, ptr %3193, i32 0, i32 47
  %3195 = load double, ptr %3194, align 8, !tbaa !137
  %3196 = fsub double 1.000000e+00, %3195
  %3197 = load double, ptr %15, align 8, !tbaa !5
  %3198 = fmul double %3196, %3197
  %3199 = load ptr, ptr %8, align 8, !tbaa !9
  %3200 = load ptr, ptr %30, align 8, !tbaa !9
  %3201 = getelementptr inbounds %struct.perturb_vector, ptr %3200, i32 0, i32 24
  %3202 = load i32, ptr %3201, align 8, !tbaa !136
  %3203 = sext i32 %3202 to i64
  %3204 = getelementptr inbounds double, ptr %3199, i64 %3203
  %3205 = load double, ptr %3204, align 8, !tbaa !5
  %3206 = fneg double %3198
  %3207 = call double @llvm.fmuladd.f64(double %3206, double %3205, double %3192)
  %3208 = load ptr, ptr %9, align 8, !tbaa !9
  %3209 = load ptr, ptr %30, align 8, !tbaa !9
  %3210 = getelementptr inbounds %struct.perturb_vector, ptr %3209, i32 0, i32 24
  %3211 = load i32, ptr %3210, align 8, !tbaa !136
  %3212 = sext i32 %3211 to i64
  %3213 = getelementptr inbounds double, ptr %3208, i64 %3212
  store double %3207, ptr %3213, align 8, !tbaa !5
  %3214 = load ptr, ptr %25, align 8, !tbaa !9
  %3215 = getelementptr inbounds %struct.perturb_workspace, ptr %3214, i32 0, i32 56
  %3216 = load ptr, ptr %3215, align 8, !tbaa !50
  %3217 = load ptr, ptr %25, align 8, !tbaa !9
  %3218 = getelementptr inbounds %struct.perturb_workspace, ptr %3217, i32 0, i32 53
  %3219 = load i32, ptr %3218, align 8, !tbaa !140
  %3220 = sext i32 %3219 to i64
  %3221 = getelementptr inbounds i32, ptr %3216, i64 %3220
  %3222 = load i32, ptr %3221, align 4, !tbaa !15
  %3223 = icmp eq i32 %3222, 0
  br i1 %3223, label %3224, label %3442

3224:                                             ; preds = %3122
  %3225 = load ptr, ptr %8, align 8, !tbaa !9
  %3226 = load ptr, ptr %30, align 8, !tbaa !9
  %3227 = getelementptr inbounds %struct.perturb_vector, ptr %3226, i32 0, i32 24
  %3228 = load i32, ptr %3227, align 8, !tbaa !136
  %3229 = sext i32 %3228 to i64
  %3230 = getelementptr inbounds double, ptr %3225, i64 %3229
  %3231 = load double, ptr %3230, align 8, !tbaa !5
  %3232 = load double, ptr %44, align 8, !tbaa !5
  %3233 = fadd double %3231, %3232
  %3234 = load double, ptr %18, align 8, !tbaa !5
  %3235 = fmul double 6.000000e-01, %3234
  %3236 = load ptr, ptr %29, align 8, !tbaa !9
  %3237 = getelementptr inbounds double, ptr %3236, i64 3
  %3238 = load double, ptr %3237, align 8, !tbaa !5
  %3239 = fmul double %3235, %3238
  %3240 = load ptr, ptr %29, align 8, !tbaa !9
  %3241 = getelementptr inbounds double, ptr %3240, i64 2
  %3242 = load double, ptr %3241, align 8, !tbaa !5
  %3243 = fdiv double %3239, %3242
  %3244 = load ptr, ptr %8, align 8, !tbaa !9
  %3245 = load ptr, ptr %30, align 8, !tbaa !9
  %3246 = getelementptr inbounds %struct.perturb_vector, ptr %3245, i32 0, i32 25
  %3247 = load i32, ptr %3246, align 4, !tbaa !139
  %3248 = add nsw i32 %3247, 1
  %3249 = sext i32 %3248 to i64
  %3250 = getelementptr inbounds double, ptr %3244, i64 %3249
  %3251 = load double, ptr %3250, align 8, !tbaa !5
  %3252 = fmul double %3243, %3251
  %3253 = fneg double %3252
  %3254 = call double @llvm.fmuladd.f64(double 0x3FE1111111111111, double %3233, double %3253)
  %3255 = load ptr, ptr %24, align 8, !tbaa !9
  %3256 = getelementptr inbounds %struct.perturbs, ptr %3255, i32 0, i32 48
  %3257 = load double, ptr %3256, align 8, !tbaa !141
  %3258 = fsub double 1.000000e+00, %3257
  %3259 = load ptr, ptr %8, align 8, !tbaa !9
  %3260 = load ptr, ptr %30, align 8, !tbaa !9
  %3261 = getelementptr inbounds %struct.perturb_vector, ptr %3260, i32 0, i32 24
  %3262 = load i32, ptr %3261, align 8, !tbaa !136
  %3263 = sext i32 %3262 to i64
  %3264 = getelementptr inbounds double, ptr %3259, i64 %3263
  %3265 = load double, ptr %3264, align 8, !tbaa !5
  %3266 = load double, ptr %44, align 8, !tbaa !5
  %3267 = fadd double %3265, %3266
  %3268 = fmul double 0x3FE1111111111111, %3267
  %3269 = fneg double %3258
  %3270 = call double @llvm.fmuladd.f64(double %3269, double %3268, double %3254)
  %3271 = fmul double 5.000000e-01, %3270
  %3272 = load ptr, ptr %9, align 8, !tbaa !9
  %3273 = load ptr, ptr %30, align 8, !tbaa !9
  %3274 = getelementptr inbounds %struct.perturb_vector, ptr %3273, i32 0, i32 25
  %3275 = load i32, ptr %3274, align 4, !tbaa !139
  %3276 = sext i32 %3275 to i64
  %3277 = getelementptr inbounds double, ptr %3272, i64 %3276
  store double %3271, ptr %3277, align 8, !tbaa !5
  store i32 3, ptr %12, align 4, !tbaa !15
  %3278 = load double, ptr %18, align 8, !tbaa !5
  %3279 = load i32, ptr %12, align 4, !tbaa !15
  %3280 = sitofp i32 %3279 to double
  %3281 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %3280, double 1.000000e+00)
  %3282 = fdiv double %3278, %3281
  %3283 = load i32, ptr %12, align 4, !tbaa !15
  %3284 = sitofp i32 %3283 to double
  %3285 = fmul double %3284, 2.000000e+00
  %3286 = load ptr, ptr %29, align 8, !tbaa !9
  %3287 = load i32, ptr %12, align 4, !tbaa !15
  %3288 = sext i32 %3287 to i64
  %3289 = getelementptr inbounds double, ptr %3286, i64 %3288
  %3290 = load double, ptr %3289, align 8, !tbaa !5
  %3291 = fmul double %3285, %3290
  %3292 = load ptr, ptr %29, align 8, !tbaa !9
  %3293 = getelementptr inbounds double, ptr %3292, i64 2
  %3294 = load double, ptr %3293, align 8, !tbaa !5
  %3295 = fmul double %3291, %3294
  %3296 = load ptr, ptr %8, align 8, !tbaa !9
  %3297 = load ptr, ptr %30, align 8, !tbaa !9
  %3298 = getelementptr inbounds %struct.perturb_vector, ptr %3297, i32 0, i32 25
  %3299 = load i32, ptr %3298, align 4, !tbaa !139
  %3300 = sext i32 %3299 to i64
  %3301 = getelementptr inbounds double, ptr %3296, i64 %3300
  %3302 = load double, ptr %3301, align 8, !tbaa !5
  %3303 = load i32, ptr %12, align 4, !tbaa !15
  %3304 = sitofp i32 %3303 to double
  %3305 = fadd double %3304, 1.000000e+00
  %3306 = load ptr, ptr %29, align 8, !tbaa !9
  %3307 = load i32, ptr %12, align 4, !tbaa !15
  %3308 = add nsw i32 %3307, 1
  %3309 = sext i32 %3308 to i64
  %3310 = getelementptr inbounds double, ptr %3306, i64 %3309
  %3311 = load double, ptr %3310, align 8, !tbaa !5
  %3312 = fmul double %3305, %3311
  %3313 = load ptr, ptr %8, align 8, !tbaa !9
  %3314 = load ptr, ptr %30, align 8, !tbaa !9
  %3315 = getelementptr inbounds %struct.perturb_vector, ptr %3314, i32 0, i32 26
  %3316 = load i32, ptr %3315, align 8, !tbaa !142
  %3317 = add nsw i32 %3316, 1
  %3318 = sext i32 %3317 to i64
  %3319 = getelementptr inbounds double, ptr %3313, i64 %3318
  %3320 = load double, ptr %3319, align 8, !tbaa !5
  %3321 = fmul double %3312, %3320
  %3322 = fneg double %3321
  %3323 = call double @llvm.fmuladd.f64(double %3295, double %3302, double %3322)
  %3324 = fmul double %3282, %3323
  %3325 = load ptr, ptr %9, align 8, !tbaa !9
  %3326 = load ptr, ptr %30, align 8, !tbaa !9
  %3327 = getelementptr inbounds %struct.perturb_vector, ptr %3326, i32 0, i32 26
  %3328 = load i32, ptr %3327, align 8, !tbaa !142
  %3329 = sext i32 %3328 to i64
  %3330 = getelementptr inbounds double, ptr %3325, i64 %3329
  store double %3324, ptr %3330, align 8, !tbaa !5
  store i32 4, ptr %12, align 4, !tbaa !15
  br label %3331

3331:                                             ; preds = %3393, %3224
  %3332 = load i32, ptr %12, align 4, !tbaa !15
  %3333 = load ptr, ptr %30, align 8, !tbaa !9
  %3334 = getelementptr inbounds %struct.perturb_vector, ptr %3333, i32 0, i32 27
  %3335 = load i32, ptr %3334, align 4, !tbaa !143
  %3336 = icmp slt i32 %3332, %3335
  br i1 %3336, label %3337, label %3396

3337:                                             ; preds = %3331
  %3338 = load double, ptr %18, align 8, !tbaa !5
  %3339 = load i32, ptr %12, align 4, !tbaa !15
  %3340 = sitofp i32 %3339 to double
  %3341 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %3340, double 1.000000e+00)
  %3342 = fdiv double %3338, %3341
  %3343 = load i32, ptr %12, align 4, !tbaa !15
  %3344 = sitofp i32 %3343 to double
  %3345 = load ptr, ptr %29, align 8, !tbaa !9
  %3346 = load i32, ptr %12, align 4, !tbaa !15
  %3347 = sext i32 %3346 to i64
  %3348 = getelementptr inbounds double, ptr %3345, i64 %3347
  %3349 = load double, ptr %3348, align 8, !tbaa !5
  %3350 = fmul double %3344, %3349
  %3351 = load ptr, ptr %8, align 8, !tbaa !9
  %3352 = load ptr, ptr %30, align 8, !tbaa !9
  %3353 = getelementptr inbounds %struct.perturb_vector, ptr %3352, i32 0, i32 23
  %3354 = load i32, ptr %3353, align 4, !tbaa !138
  %3355 = load i32, ptr %12, align 4, !tbaa !15
  %3356 = add nsw i32 %3354, %3355
  %3357 = sub nsw i32 %3356, 1
  %3358 = sext i32 %3357 to i64
  %3359 = getelementptr inbounds double, ptr %3351, i64 %3358
  %3360 = load double, ptr %3359, align 8, !tbaa !5
  %3361 = load i32, ptr %12, align 4, !tbaa !15
  %3362 = sitofp i32 %3361 to double
  %3363 = fadd double %3362, 1.000000e+00
  %3364 = load ptr, ptr %29, align 8, !tbaa !9
  %3365 = load i32, ptr %12, align 4, !tbaa !15
  %3366 = add nsw i32 %3365, 1
  %3367 = sext i32 %3366 to i64
  %3368 = getelementptr inbounds double, ptr %3364, i64 %3367
  %3369 = load double, ptr %3368, align 8, !tbaa !5
  %3370 = fmul double %3363, %3369
  %3371 = load ptr, ptr %8, align 8, !tbaa !9
  %3372 = load ptr, ptr %30, align 8, !tbaa !9
  %3373 = getelementptr inbounds %struct.perturb_vector, ptr %3372, i32 0, i32 23
  %3374 = load i32, ptr %3373, align 4, !tbaa !138
  %3375 = load i32, ptr %12, align 4, !tbaa !15
  %3376 = add nsw i32 %3374, %3375
  %3377 = add nsw i32 %3376, 1
  %3378 = sext i32 %3377 to i64
  %3379 = getelementptr inbounds double, ptr %3371, i64 %3378
  %3380 = load double, ptr %3379, align 8, !tbaa !5
  %3381 = fmul double %3370, %3380
  %3382 = fneg double %3381
  %3383 = call double @llvm.fmuladd.f64(double %3350, double %3360, double %3382)
  %3384 = fmul double %3342, %3383
  %3385 = load ptr, ptr %9, align 8, !tbaa !9
  %3386 = load ptr, ptr %30, align 8, !tbaa !9
  %3387 = getelementptr inbounds %struct.perturb_vector, ptr %3386, i32 0, i32 23
  %3388 = load i32, ptr %3387, align 4, !tbaa !138
  %3389 = load i32, ptr %12, align 4, !tbaa !15
  %3390 = add nsw i32 %3388, %3389
  %3391 = sext i32 %3390 to i64
  %3392 = getelementptr inbounds double, ptr %3385, i64 %3391
  store double %3384, ptr %3392, align 8, !tbaa !5
  br label %3393

3393:                                             ; preds = %3337
  %3394 = load i32, ptr %12, align 4, !tbaa !15
  %3395 = add nsw i32 %3394, 1
  store i32 %3395, ptr %12, align 4, !tbaa !15
  br label %3331, !llvm.loop !144

3396:                                             ; preds = %3331
  %3397 = load ptr, ptr %30, align 8, !tbaa !9
  %3398 = getelementptr inbounds %struct.perturb_vector, ptr %3397, i32 0, i32 27
  %3399 = load i32, ptr %3398, align 4, !tbaa !143
  store i32 %3399, ptr %12, align 4, !tbaa !15
  %3400 = load double, ptr %18, align 8, !tbaa !5
  %3401 = load ptr, ptr %29, align 8, !tbaa !9
  %3402 = load i32, ptr %12, align 4, !tbaa !15
  %3403 = sext i32 %3402 to i64
  %3404 = getelementptr inbounds double, ptr %3401, i64 %3403
  %3405 = load double, ptr %3404, align 8, !tbaa !5
  %3406 = load ptr, ptr %8, align 8, !tbaa !9
  %3407 = load ptr, ptr %30, align 8, !tbaa !9
  %3408 = getelementptr inbounds %struct.perturb_vector, ptr %3407, i32 0, i32 23
  %3409 = load i32, ptr %3408, align 4, !tbaa !138
  %3410 = load i32, ptr %12, align 4, !tbaa !15
  %3411 = add nsw i32 %3409, %3410
  %3412 = sub nsw i32 %3411, 1
  %3413 = sext i32 %3412 to i64
  %3414 = getelementptr inbounds double, ptr %3406, i64 %3413
  %3415 = load double, ptr %3414, align 8, !tbaa !5
  %3416 = load i32, ptr %12, align 4, !tbaa !15
  %3417 = sitofp i32 %3416 to double
  %3418 = fadd double 1.000000e+00, %3417
  %3419 = load double, ptr %79, align 8, !tbaa !5
  %3420 = fmul double %3418, %3419
  %3421 = load ptr, ptr %8, align 8, !tbaa !9
  %3422 = load ptr, ptr %30, align 8, !tbaa !9
  %3423 = getelementptr inbounds %struct.perturb_vector, ptr %3422, i32 0, i32 23
  %3424 = load i32, ptr %3423, align 4, !tbaa !138
  %3425 = load i32, ptr %12, align 4, !tbaa !15
  %3426 = add nsw i32 %3424, %3425
  %3427 = sext i32 %3426 to i64
  %3428 = getelementptr inbounds double, ptr %3421, i64 %3427
  %3429 = load double, ptr %3428, align 8, !tbaa !5
  %3430 = fmul double %3420, %3429
  %3431 = fneg double %3430
  %3432 = call double @llvm.fmuladd.f64(double %3405, double %3415, double %3431)
  %3433 = fmul double %3400, %3432
  %3434 = load ptr, ptr %9, align 8, !tbaa !9
  %3435 = load ptr, ptr %30, align 8, !tbaa !9
  %3436 = getelementptr inbounds %struct.perturb_vector, ptr %3435, i32 0, i32 23
  %3437 = load i32, ptr %3436, align 4, !tbaa !138
  %3438 = load i32, ptr %12, align 4, !tbaa !15
  %3439 = add nsw i32 %3437, %3438
  %3440 = sext i32 %3439 to i64
  %3441 = getelementptr inbounds double, ptr %3434, i64 %3440
  store double %3433, ptr %3441, align 8, !tbaa !5
  br label %3539

3442:                                             ; preds = %3122
  %3443 = load ptr, ptr %21, align 8, !tbaa !9
  %3444 = getelementptr inbounds %struct.precision, ptr %3443, i32 0, i32 93
  %3445 = load i32, ptr %3444, align 8, !tbaa !145
  %3446 = icmp eq i32 %3445, 0
  br i1 %3446, label %3447, label %3474

3447:                                             ; preds = %3442
  %3448 = load double, ptr %7, align 8, !tbaa !5
  %3449 = fdiv double -3.000000e+00, %3448
  %3450 = load ptr, ptr %8, align 8, !tbaa !9
  %3451 = load ptr, ptr %30, align 8, !tbaa !9
  %3452 = getelementptr inbounds %struct.perturb_vector, ptr %3451, i32 0, i32 25
  %3453 = load i32, ptr %3452, align 4, !tbaa !139
  %3454 = sext i32 %3453 to i64
  %3455 = getelementptr inbounds double, ptr %3450, i64 %3454
  %3456 = load double, ptr %3455, align 8, !tbaa !5
  %3457 = load ptr, ptr %8, align 8, !tbaa !9
  %3458 = load ptr, ptr %30, align 8, !tbaa !9
  %3459 = getelementptr inbounds %struct.perturb_vector, ptr %3458, i32 0, i32 24
  %3460 = load i32, ptr %3459, align 8, !tbaa !136
  %3461 = sext i32 %3460 to i64
  %3462 = getelementptr inbounds double, ptr %3457, i64 %3461
  %3463 = load double, ptr %3462, align 8, !tbaa !5
  %3464 = load double, ptr %44, align 8, !tbaa !5
  %3465 = fadd double %3463, %3464
  %3466 = fmul double 0x3FE5555555555555, %3465
  %3467 = call double @llvm.fmuladd.f64(double %3449, double %3456, double %3466)
  %3468 = load ptr, ptr %9, align 8, !tbaa !9
  %3469 = load ptr, ptr %30, align 8, !tbaa !9
  %3470 = getelementptr inbounds %struct.perturb_vector, ptr %3469, i32 0, i32 25
  %3471 = load i32, ptr %3470, align 4, !tbaa !139
  %3472 = sext i32 %3471 to i64
  %3473 = getelementptr inbounds double, ptr %3468, i64 %3472
  store double %3467, ptr %3473, align 8, !tbaa !5
  br label %3474

3474:                                             ; preds = %3447, %3442
  %3475 = load ptr, ptr %21, align 8, !tbaa !9
  %3476 = getelementptr inbounds %struct.precision, ptr %3475, i32 0, i32 93
  %3477 = load i32, ptr %3476, align 8, !tbaa !145
  %3478 = icmp eq i32 %3477, 1
  br i1 %3478, label %3479, label %3506

3479:                                             ; preds = %3474
  %3480 = load double, ptr %15, align 8, !tbaa !5
  %3481 = fmul double -3.000000e+00, %3480
  %3482 = load ptr, ptr %8, align 8, !tbaa !9
  %3483 = load ptr, ptr %30, align 8, !tbaa !9
  %3484 = getelementptr inbounds %struct.perturb_vector, ptr %3483, i32 0, i32 25
  %3485 = load i32, ptr %3484, align 4, !tbaa !139
  %3486 = sext i32 %3485 to i64
  %3487 = getelementptr inbounds double, ptr %3482, i64 %3486
  %3488 = load double, ptr %3487, align 8, !tbaa !5
  %3489 = load ptr, ptr %8, align 8, !tbaa !9
  %3490 = load ptr, ptr %30, align 8, !tbaa !9
  %3491 = getelementptr inbounds %struct.perturb_vector, ptr %3490, i32 0, i32 24
  %3492 = load i32, ptr %3491, align 8, !tbaa !136
  %3493 = sext i32 %3492 to i64
  %3494 = getelementptr inbounds double, ptr %3489, i64 %3493
  %3495 = load double, ptr %3494, align 8, !tbaa !5
  %3496 = load double, ptr %44, align 8, !tbaa !5
  %3497 = fadd double %3495, %3496
  %3498 = fmul double 0x3FE5555555555555, %3497
  %3499 = call double @llvm.fmuladd.f64(double %3481, double %3488, double %3498)
  %3500 = load ptr, ptr %9, align 8, !tbaa !9
  %3501 = load ptr, ptr %30, align 8, !tbaa !9
  %3502 = getelementptr inbounds %struct.perturb_vector, ptr %3501, i32 0, i32 25
  %3503 = load i32, ptr %3502, align 4, !tbaa !139
  %3504 = sext i32 %3503 to i64
  %3505 = getelementptr inbounds double, ptr %3500, i64 %3504
  store double %3499, ptr %3505, align 8, !tbaa !5
  br label %3506

3506:                                             ; preds = %3479, %3474
  %3507 = load ptr, ptr %21, align 8, !tbaa !9
  %3508 = getelementptr inbounds %struct.precision, ptr %3507, i32 0, i32 93
  %3509 = load i32, ptr %3508, align 8, !tbaa !145
  %3510 = icmp eq i32 %3509, 2
  br i1 %3510, label %3511, label %3538

3511:                                             ; preds = %3506
  %3512 = load double, ptr %7, align 8, !tbaa !5
  %3513 = fdiv double -3.000000e+00, %3512
  %3514 = load ptr, ptr %8, align 8, !tbaa !9
  %3515 = load ptr, ptr %30, align 8, !tbaa !9
  %3516 = getelementptr inbounds %struct.perturb_vector, ptr %3515, i32 0, i32 25
  %3517 = load i32, ptr %3516, align 4, !tbaa !139
  %3518 = sext i32 %3517 to i64
  %3519 = getelementptr inbounds double, ptr %3514, i64 %3518
  %3520 = load double, ptr %3519, align 8, !tbaa !5
  %3521 = load ptr, ptr %8, align 8, !tbaa !9
  %3522 = load ptr, ptr %30, align 8, !tbaa !9
  %3523 = getelementptr inbounds %struct.perturb_vector, ptr %3522, i32 0, i32 24
  %3524 = load i32, ptr %3523, align 8, !tbaa !136
  %3525 = sext i32 %3524 to i64
  %3526 = getelementptr inbounds double, ptr %3521, i64 %3525
  %3527 = load double, ptr %3526, align 8, !tbaa !5
  %3528 = load double, ptr %45, align 8, !tbaa !5
  %3529 = fadd double %3527, %3528
  %3530 = fmul double 0x3FE5555555555555, %3529
  %3531 = call double @llvm.fmuladd.f64(double %3513, double %3520, double %3530)
  %3532 = load ptr, ptr %9, align 8, !tbaa !9
  %3533 = load ptr, ptr %30, align 8, !tbaa !9
  %3534 = getelementptr inbounds %struct.perturb_vector, ptr %3533, i32 0, i32 25
  %3535 = load i32, ptr %3534, align 4, !tbaa !139
  %3536 = sext i32 %3535 to i64
  %3537 = getelementptr inbounds double, ptr %3532, i64 %3536
  store double %3531, ptr %3537, align 8, !tbaa !5
  br label %3538

3538:                                             ; preds = %3511, %3506
  br label %3539

3539:                                             ; preds = %3538, %3396
  br label %3540

3540:                                             ; preds = %3539, %3111
  br label %3541

3541:                                             ; preds = %3540, %3105
  %3542 = load ptr, ptr %22, align 8, !tbaa !9
  %3543 = getelementptr inbounds %struct.background, ptr %3542, i32 0, i32 123
  %3544 = load i16, ptr %3543, align 4, !tbaa !147
  %3545 = sext i16 %3544 to i32
  %3546 = icmp eq i32 %3545, 1
  br i1 %3546, label %3547, label %4136

3547:                                             ; preds = %3541
  %3548 = load ptr, ptr %30, align 8, !tbaa !9
  %3549 = getelementptr inbounds %struct.perturb_vector, ptr %3548, i32 0, i32 37
  %3550 = load i32, ptr %3549, align 4, !tbaa !148
  store i32 %3550, ptr %67, align 4, !tbaa !15
  %3551 = load ptr, ptr %25, align 8, !tbaa !9
  %3552 = getelementptr inbounds %struct.perturb_workspace, ptr %3551, i32 0, i32 56
  %3553 = load ptr, ptr %3552, align 8, !tbaa !50
  %3554 = load ptr, ptr %25, align 8, !tbaa !9
  %3555 = getelementptr inbounds %struct.perturb_workspace, ptr %3554, i32 0, i32 54
  %3556 = load i32, ptr %3555, align 4, !tbaa !149
  %3557 = sext i32 %3556 to i64
  %3558 = getelementptr inbounds i32, ptr %3553, i64 %3557
  %3559 = load i32, ptr %3558, align 4, !tbaa !15
  %3560 = icmp eq i32 %3559, 1
  br i1 %3560, label %3561, label %3860

3561:                                             ; preds = %3547
  store i32 0, ptr %66, align 4, !tbaa !15
  br label %3562

3562:                                             ; preds = %3856, %3561
  %3563 = load i32, ptr %66, align 4, !tbaa !15
  %3564 = load ptr, ptr %30, align 8, !tbaa !9
  %3565 = getelementptr inbounds %struct.perturb_vector, ptr %3564, i32 0, i32 38
  %3566 = load i32, ptr %3565, align 8, !tbaa !150
  %3567 = icmp slt i32 %3563, %3566
  br i1 %3567, label %3568, label %3859

3568:                                             ; preds = %3562
  %3569 = load ptr, ptr %26, align 8, !tbaa !9
  %3570 = load ptr, ptr %22, align 8, !tbaa !9
  %3571 = getelementptr inbounds %struct.background, ptr %3570, i32 0, i32 81
  %3572 = load i32, ptr %3571, align 8, !tbaa !151
  %3573 = load i32, ptr %66, align 4, !tbaa !15
  %3574 = add nsw i32 %3572, %3573
  %3575 = sext i32 %3574 to i64
  %3576 = getelementptr inbounds double, ptr %3569, i64 %3575
  %3577 = load double, ptr %3576, align 8, !tbaa !5
  store double %3577, ptr %72, align 8, !tbaa !5
  %3578 = load ptr, ptr %26, align 8, !tbaa !9
  %3579 = load ptr, ptr %22, align 8, !tbaa !9
  %3580 = getelementptr inbounds %struct.background, ptr %3579, i32 0, i32 82
  %3581 = load i32, ptr %3580, align 4, !tbaa !152
  %3582 = load i32, ptr %66, align 4, !tbaa !15
  %3583 = add nsw i32 %3581, %3582
  %3584 = sext i32 %3583 to i64
  %3585 = getelementptr inbounds double, ptr %3578, i64 %3584
  %3586 = load double, ptr %3585, align 8, !tbaa !5
  store double %3586, ptr %73, align 8, !tbaa !5
  %3587 = load ptr, ptr %26, align 8, !tbaa !9
  %3588 = load ptr, ptr %22, align 8, !tbaa !9
  %3589 = getelementptr inbounds %struct.background, ptr %3588, i32 0, i32 83
  %3590 = load i32, ptr %3589, align 8, !tbaa !153
  %3591 = load i32, ptr %66, align 4, !tbaa !15
  %3592 = add nsw i32 %3590, %3591
  %3593 = sext i32 %3592 to i64
  %3594 = getelementptr inbounds double, ptr %3587, i64 %3593
  %3595 = load double, ptr %3594, align 8, !tbaa !5
  store double %3595, ptr %74, align 8, !tbaa !5
  %3596 = load double, ptr %73, align 8, !tbaa !5
  %3597 = load double, ptr %72, align 8, !tbaa !5
  %3598 = fdiv double %3596, %3597
  store double %3598, ptr %75, align 8, !tbaa !5
  %3599 = load double, ptr %75, align 8, !tbaa !5
  %3600 = fdiv double %3599, 3.000000e+00
  %3601 = load double, ptr %75, align 8, !tbaa !5
  %3602 = fadd double 1.000000e+00, %3601
  %3603 = fdiv double %3600, %3602
  %3604 = load double, ptr %74, align 8, !tbaa !5
  %3605 = load double, ptr %73, align 8, !tbaa !5
  %3606 = fdiv double %3604, %3605
  %3607 = fsub double 5.000000e+00, %3606
  %3608 = fmul double %3603, %3607
  store double %3608, ptr %76, align 8, !tbaa !5
  %3609 = load ptr, ptr %21, align 8, !tbaa !9
  %3610 = getelementptr inbounds %struct.precision, ptr %3609, i32 0, i32 95
  %3611 = load i32, ptr %3610, align 8, !tbaa !154
  %3612 = icmp eq i32 %3611, 0
  br i1 %3612, label %3613, label %3619

3613:                                             ; preds = %3568
  %3614 = load double, ptr %76, align 8, !tbaa !5
  store double %3614, ptr %77, align 8, !tbaa !5
  %3615 = load double, ptr %75, align 8, !tbaa !5
  %3616 = fmul double 3.000000e+00, %3615
  %3617 = load double, ptr %76, align 8, !tbaa !5
  %3618 = fmul double %3616, %3617
  store double %3618, ptr %78, align 8, !tbaa !5
  br label %3619

3619:                                             ; preds = %3613, %3568
  %3620 = load ptr, ptr %21, align 8, !tbaa !9
  %3621 = getelementptr inbounds %struct.precision, ptr %3620, i32 0, i32 95
  %3622 = load i32, ptr %3621, align 8, !tbaa !154
  %3623 = icmp eq i32 %3622, 1
  br i1 %3623, label %3624, label %3627

3624:                                             ; preds = %3619
  %3625 = load double, ptr %76, align 8, !tbaa !5
  store double %3625, ptr %77, align 8, !tbaa !5
  %3626 = load double, ptr %75, align 8, !tbaa !5
  store double %3626, ptr %78, align 8, !tbaa !5
  br label %3627

3627:                                             ; preds = %3624, %3619
  %3628 = load ptr, ptr %21, align 8, !tbaa !9
  %3629 = getelementptr inbounds %struct.precision, ptr %3628, i32 0, i32 95
  %3630 = load i32, ptr %3629, align 8, !tbaa !154
  %3631 = icmp eq i32 %3630, 2
  br i1 %3631, label %3632, label %3638

3632:                                             ; preds = %3627
  %3633 = load double, ptr %76, align 8, !tbaa !5
  store double %3633, ptr %77, align 8, !tbaa !5
  %3634 = load double, ptr %75, align 8, !tbaa !5
  %3635 = fmul double 3.000000e+00, %3634
  %3636 = load double, ptr %76, align 8, !tbaa !5
  %3637 = fmul double %3635, %3636
  store double %3637, ptr %78, align 8, !tbaa !5
  br label %3638

3638:                                             ; preds = %3632, %3627
  %3639 = load double, ptr %75, align 8, !tbaa !5
  %3640 = fadd double 1.000000e+00, %3639
  %3641 = fneg double %3640
  %3642 = load ptr, ptr %8, align 8, !tbaa !9
  %3643 = load i32, ptr %67, align 4, !tbaa !15
  %3644 = add nsw i32 %3643, 1
  %3645 = sext i32 %3644 to i64
  %3646 = getelementptr inbounds double, ptr %3642, i64 %3645
  %3647 = load double, ptr %3646, align 8, !tbaa !5
  %3648 = load double, ptr %42, align 8, !tbaa !5
  %3649 = fadd double %3647, %3648
  %3650 = load double, ptr %15, align 8, !tbaa !5
  %3651 = fmul double 3.000000e+00, %3650
  %3652 = load double, ptr %77, align 8, !tbaa !5
  %3653 = load double, ptr %75, align 8, !tbaa !5
  %3654 = fsub double %3652, %3653
  %3655 = fmul double %3651, %3654
  %3656 = load ptr, ptr %8, align 8, !tbaa !9
  %3657 = load i32, ptr %67, align 4, !tbaa !15
  %3658 = sext i32 %3657 to i64
  %3659 = getelementptr inbounds double, ptr %3656, i64 %3658
  %3660 = load double, ptr %3659, align 8, !tbaa !5
  %3661 = fmul double %3655, %3660
  %3662 = fneg double %3661
  %3663 = call double @llvm.fmuladd.f64(double %3641, double %3649, double %3662)
  %3664 = load ptr, ptr %9, align 8, !tbaa !9
  %3665 = load i32, ptr %67, align 4, !tbaa !15
  %3666 = sext i32 %3665 to i64
  %3667 = getelementptr inbounds double, ptr %3664, i64 %3666
  store double %3663, ptr %3667, align 8, !tbaa !5
  %3668 = load double, ptr %15, align 8, !tbaa !5
  %3669 = fneg double %3668
  %3670 = load double, ptr %76, align 8, !tbaa !5
  %3671 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %3670, double 1.000000e+00)
  %3672 = fmul double %3669, %3671
  %3673 = load ptr, ptr %8, align 8, !tbaa !9
  %3674 = load i32, ptr %67, align 4, !tbaa !15
  %3675 = add nsw i32 %3674, 1
  %3676 = sext i32 %3675 to i64
  %3677 = getelementptr inbounds double, ptr %3673, i64 %3676
  %3678 = load double, ptr %3677, align 8, !tbaa !5
  %3679 = load double, ptr %77, align 8, !tbaa !5
  %3680 = load double, ptr %75, align 8, !tbaa !5
  %3681 = fadd double 1.000000e+00, %3680
  %3682 = fdiv double %3679, %3681
  %3683 = load double, ptr %19, align 8, !tbaa !5
  %3684 = fmul double %3682, %3683
  %3685 = load ptr, ptr %8, align 8, !tbaa !9
  %3686 = load i32, ptr %67, align 4, !tbaa !15
  %3687 = sext i32 %3686 to i64
  %3688 = getelementptr inbounds double, ptr %3685, i64 %3687
  %3689 = load double, ptr %3688, align 8, !tbaa !5
  %3690 = fmul double %3684, %3689
  %3691 = call double @llvm.fmuladd.f64(double %3672, double %3678, double %3690)
  %3692 = load double, ptr %19, align 8, !tbaa !5
  %3693 = load ptr, ptr %8, align 8, !tbaa !9
  %3694 = load i32, ptr %67, align 4, !tbaa !15
  %3695 = add nsw i32 %3694, 2
  %3696 = sext i32 %3695 to i64
  %3697 = getelementptr inbounds double, ptr %3693, i64 %3696
  %3698 = load double, ptr %3697, align 8, !tbaa !5
  %3699 = fneg double %3692
  %3700 = call double @llvm.fmuladd.f64(double %3699, double %3698, double %3691)
  %3701 = load double, ptr %43, align 8, !tbaa !5
  %3702 = fadd double %3700, %3701
  %3703 = load ptr, ptr %9, align 8, !tbaa !9
  %3704 = load i32, ptr %67, align 4, !tbaa !15
  %3705 = add nsw i32 %3704, 1
  %3706 = sext i32 %3705 to i64
  %3707 = getelementptr inbounds double, ptr %3703, i64 %3706
  store double %3702, ptr %3707, align 8, !tbaa !5
  %3708 = load ptr, ptr %21, align 8, !tbaa !9
  %3709 = getelementptr inbounds %struct.precision, ptr %3708, i32 0, i32 95
  %3710 = load i32, ptr %3709, align 8, !tbaa !154
  %3711 = icmp eq i32 %3710, 0
  br i1 %3711, label %3712, label %3755

3712:                                             ; preds = %3638
  %3713 = load double, ptr %15, align 8, !tbaa !5
  %3714 = load double, ptr %76, align 8, !tbaa !5
  %3715 = fsub double 0x3FE5555555555555, %3714
  %3716 = load double, ptr %74, align 8, !tbaa !5
  %3717 = load double, ptr %73, align 8, !tbaa !5
  %3718 = fdiv double %3716, %3717
  %3719 = fdiv double %3718, 3.000000e+00
  %3720 = fsub double %3715, %3719
  %3721 = load double, ptr %7, align 8, !tbaa !5
  %3722 = fdiv double 1.000000e+00, %3721
  %3723 = call double @llvm.fmuladd.f64(double %3713, double %3720, double %3722)
  %3724 = fmul double -3.000000e+00, %3723
  %3725 = load ptr, ptr %8, align 8, !tbaa !9
  %3726 = load i32, ptr %67, align 4, !tbaa !15
  %3727 = add nsw i32 %3726, 2
  %3728 = sext i32 %3727 to i64
  %3729 = getelementptr inbounds double, ptr %3725, i64 %3728
  %3730 = load double, ptr %3729, align 8, !tbaa !5
  %3731 = load double, ptr %78, align 8, !tbaa !5
  %3732 = fmul double 0x4005555555555555, %3731
  %3733 = load double, ptr %75, align 8, !tbaa !5
  %3734 = fadd double 1.000000e+00, %3733
  %3735 = fdiv double %3732, %3734
  %3736 = load ptr, ptr %29, align 8, !tbaa !9
  %3737 = getelementptr inbounds double, ptr %3736, i64 2
  %3738 = load double, ptr %3737, align 8, !tbaa !5
  %3739 = fmul double %3735, %3738
  %3740 = load ptr, ptr %8, align 8, !tbaa !9
  %3741 = load i32, ptr %67, align 4, !tbaa !15
  %3742 = add nsw i32 %3741, 1
  %3743 = sext i32 %3742 to i64
  %3744 = getelementptr inbounds double, ptr %3740, i64 %3743
  %3745 = load double, ptr %3744, align 8, !tbaa !5
  %3746 = load double, ptr %44, align 8, !tbaa !5
  %3747 = fadd double %3745, %3746
  %3748 = fmul double %3739, %3747
  %3749 = call double @llvm.fmuladd.f64(double %3724, double %3730, double %3748)
  %3750 = load ptr, ptr %9, align 8, !tbaa !9
  %3751 = load i32, ptr %67, align 4, !tbaa !15
  %3752 = add nsw i32 %3751, 2
  %3753 = sext i32 %3752 to i64
  %3754 = getelementptr inbounds double, ptr %3750, i64 %3753
  store double %3749, ptr %3754, align 8, !tbaa !5
  br label %3755

3755:                                             ; preds = %3712, %3638
  %3756 = load ptr, ptr %21, align 8, !tbaa !9
  %3757 = getelementptr inbounds %struct.precision, ptr %3756, i32 0, i32 95
  %3758 = load i32, ptr %3757, align 8, !tbaa !154
  %3759 = icmp eq i32 %3758, 1
  br i1 %3759, label %3760, label %3797

3760:                                             ; preds = %3755
  %3761 = load double, ptr %15, align 8, !tbaa !5
  %3762 = fmul double -3.000000e+00, %3761
  %3763 = load double, ptr %76, align 8, !tbaa !5
  %3764 = fmul double %3762, %3763
  %3765 = load double, ptr %75, align 8, !tbaa !5
  %3766 = fdiv double %3764, %3765
  %3767 = load ptr, ptr %8, align 8, !tbaa !9
  %3768 = load i32, ptr %67, align 4, !tbaa !15
  %3769 = add nsw i32 %3768, 2
  %3770 = sext i32 %3769 to i64
  %3771 = getelementptr inbounds double, ptr %3767, i64 %3770
  %3772 = load double, ptr %3771, align 8, !tbaa !5
  %3773 = load double, ptr %78, align 8, !tbaa !5
  %3774 = fmul double 0x4005555555555555, %3773
  %3775 = load double, ptr %75, align 8, !tbaa !5
  %3776 = fadd double 1.000000e+00, %3775
  %3777 = fdiv double %3774, %3776
  %3778 = load ptr, ptr %29, align 8, !tbaa !9
  %3779 = getelementptr inbounds double, ptr %3778, i64 2
  %3780 = load double, ptr %3779, align 8, !tbaa !5
  %3781 = fmul double %3777, %3780
  %3782 = load ptr, ptr %8, align 8, !tbaa !9
  %3783 = load i32, ptr %67, align 4, !tbaa !15
  %3784 = add nsw i32 %3783, 1
  %3785 = sext i32 %3784 to i64
  %3786 = getelementptr inbounds double, ptr %3782, i64 %3785
  %3787 = load double, ptr %3786, align 8, !tbaa !5
  %3788 = load double, ptr %44, align 8, !tbaa !5
  %3789 = fadd double %3787, %3788
  %3790 = fmul double %3781, %3789
  %3791 = call double @llvm.fmuladd.f64(double %3766, double %3772, double %3790)
  %3792 = load ptr, ptr %9, align 8, !tbaa !9
  %3793 = load i32, ptr %67, align 4, !tbaa !15
  %3794 = add nsw i32 %3793, 2
  %3795 = sext i32 %3794 to i64
  %3796 = getelementptr inbounds double, ptr %3792, i64 %3795
  store double %3791, ptr %3796, align 8, !tbaa !5
  br label %3797

3797:                                             ; preds = %3760, %3755
  %3798 = load ptr, ptr %21, align 8, !tbaa !9
  %3799 = getelementptr inbounds %struct.precision, ptr %3798, i32 0, i32 95
  %3800 = load i32, ptr %3799, align 8, !tbaa !154
  %3801 = icmp eq i32 %3800, 2
  br i1 %3801, label %3802, label %3845

3802:                                             ; preds = %3797
  %3803 = load double, ptr %15, align 8, !tbaa !5
  %3804 = load double, ptr %76, align 8, !tbaa !5
  %3805 = fsub double 0x3FE5555555555555, %3804
  %3806 = load double, ptr %74, align 8, !tbaa !5
  %3807 = load double, ptr %73, align 8, !tbaa !5
  %3808 = fdiv double %3806, %3807
  %3809 = fdiv double %3808, 3.000000e+00
  %3810 = fsub double %3805, %3809
  %3811 = load double, ptr %7, align 8, !tbaa !5
  %3812 = fdiv double 1.000000e+00, %3811
  %3813 = call double @llvm.fmuladd.f64(double %3803, double %3810, double %3812)
  %3814 = fmul double -3.000000e+00, %3813
  %3815 = load ptr, ptr %8, align 8, !tbaa !9
  %3816 = load i32, ptr %67, align 4, !tbaa !15
  %3817 = add nsw i32 %3816, 2
  %3818 = sext i32 %3817 to i64
  %3819 = getelementptr inbounds double, ptr %3815, i64 %3818
  %3820 = load double, ptr %3819, align 8, !tbaa !5
  %3821 = load double, ptr %78, align 8, !tbaa !5
  %3822 = fmul double 0x4005555555555555, %3821
  %3823 = load double, ptr %75, align 8, !tbaa !5
  %3824 = fadd double 1.000000e+00, %3823
  %3825 = fdiv double %3822, %3824
  %3826 = load ptr, ptr %29, align 8, !tbaa !9
  %3827 = getelementptr inbounds double, ptr %3826, i64 2
  %3828 = load double, ptr %3827, align 8, !tbaa !5
  %3829 = fmul double %3825, %3828
  %3830 = load ptr, ptr %8, align 8, !tbaa !9
  %3831 = load i32, ptr %67, align 4, !tbaa !15
  %3832 = add nsw i32 %3831, 1
  %3833 = sext i32 %3832 to i64
  %3834 = getelementptr inbounds double, ptr %3830, i64 %3833
  %3835 = load double, ptr %3834, align 8, !tbaa !5
  %3836 = load double, ptr %45, align 8, !tbaa !5
  %3837 = fadd double %3835, %3836
  %3838 = fmul double %3829, %3837
  %3839 = call double @llvm.fmuladd.f64(double %3814, double %3820, double %3838)
  %3840 = load ptr, ptr %9, align 8, !tbaa !9
  %3841 = load i32, ptr %67, align 4, !tbaa !15
  %3842 = add nsw i32 %3841, 2
  %3843 = sext i32 %3842 to i64
  %3844 = getelementptr inbounds double, ptr %3840, i64 %3843
  store double %3839, ptr %3844, align 8, !tbaa !5
  br label %3845

3845:                                             ; preds = %3802, %3797
  %3846 = load ptr, ptr %30, align 8, !tbaa !9
  %3847 = getelementptr inbounds %struct.perturb_vector, ptr %3846, i32 0, i32 39
  %3848 = load ptr, ptr %3847, align 8, !tbaa !155
  %3849 = load i32, ptr %66, align 4, !tbaa !15
  %3850 = sext i32 %3849 to i64
  %3851 = getelementptr inbounds i32, ptr %3848, i64 %3850
  %3852 = load i32, ptr %3851, align 4, !tbaa !15
  %3853 = add nsw i32 %3852, 1
  %3854 = load i32, ptr %67, align 4, !tbaa !15
  %3855 = add nsw i32 %3854, %3853
  store i32 %3855, ptr %67, align 4, !tbaa !15
  br label %3856

3856:                                             ; preds = %3845
  %3857 = load i32, ptr %66, align 4, !tbaa !15
  %3858 = add nsw i32 %3857, 1
  store i32 %3858, ptr %66, align 4, !tbaa !15
  br label %3562, !llvm.loop !156

3859:                                             ; preds = %3562
  br label %4135

3860:                                             ; preds = %3547
  store i32 0, ptr %66, align 4, !tbaa !15
  br label %3861

3861:                                             ; preds = %4131, %3860
  %3862 = load i32, ptr %66, align 4, !tbaa !15
  %3863 = load ptr, ptr %30, align 8, !tbaa !9
  %3864 = getelementptr inbounds %struct.perturb_vector, ptr %3863, i32 0, i32 38
  %3865 = load i32, ptr %3864, align 8, !tbaa !150
  %3866 = icmp slt i32 %3862, %3865
  br i1 %3866, label %3867, label %4134

3867:                                             ; preds = %3861
  store i32 0, ptr %65, align 4, !tbaa !15
  br label %3868

3868:                                             ; preds = %4127, %3867
  %3869 = load i32, ptr %65, align 4, !tbaa !15
  %3870 = load ptr, ptr %30, align 8, !tbaa !9
  %3871 = getelementptr inbounds %struct.perturb_vector, ptr %3870, i32 0, i32 40
  %3872 = load ptr, ptr %3871, align 8, !tbaa !157
  %3873 = load i32, ptr %66, align 4, !tbaa !15
  %3874 = sext i32 %3873 to i64
  %3875 = getelementptr inbounds i32, ptr %3872, i64 %3874
  %3876 = load i32, ptr %3875, align 4, !tbaa !15
  %3877 = icmp slt i32 %3869, %3876
  br i1 %3877, label %3878, label %4130

3878:                                             ; preds = %3868
  %3879 = load ptr, ptr %22, align 8, !tbaa !9
  %3880 = getelementptr inbounds %struct.background, ptr %3879, i32 0, i32 137
  %3881 = load ptr, ptr %3880, align 8, !tbaa !158
  %3882 = load i32, ptr %66, align 4, !tbaa !15
  %3883 = sext i32 %3882 to i64
  %3884 = getelementptr inbounds ptr, ptr %3881, i64 %3883
  %3885 = load ptr, ptr %3884, align 8, !tbaa !9
  %3886 = load i32, ptr %65, align 4, !tbaa !15
  %3887 = sext i32 %3886 to i64
  %3888 = getelementptr inbounds double, ptr %3885, i64 %3887
  %3889 = load double, ptr %3888, align 8, !tbaa !5
  store double %3889, ptr %70, align 8, !tbaa !5
  %3890 = load ptr, ptr %22, align 8, !tbaa !9
  %3891 = getelementptr inbounds %struct.background, ptr %3890, i32 0, i32 135
  %3892 = load ptr, ptr %3891, align 8, !tbaa !159
  %3893 = load i32, ptr %66, align 4, !tbaa !15
  %3894 = sext i32 %3893 to i64
  %3895 = getelementptr inbounds ptr, ptr %3892, i64 %3894
  %3896 = load ptr, ptr %3895, align 8, !tbaa !9
  %3897 = load i32, ptr %65, align 4, !tbaa !15
  %3898 = sext i32 %3897 to i64
  %3899 = getelementptr inbounds double, ptr %3896, i64 %3898
  %3900 = load double, ptr %3899, align 8, !tbaa !5
  store double %3900, ptr %68, align 8, !tbaa !5
  %3901 = load double, ptr %68, align 8, !tbaa !5
  %3902 = load double, ptr %68, align 8, !tbaa !5
  %3903 = load double, ptr %14, align 8, !tbaa !5
  %3904 = load ptr, ptr %22, align 8, !tbaa !9
  %3905 = getelementptr inbounds %struct.background, ptr %3904, i32 0, i32 30
  %3906 = load ptr, ptr %3905, align 8, !tbaa !160
  %3907 = load i32, ptr %66, align 4, !tbaa !15
  %3908 = sext i32 %3907 to i64
  %3909 = getelementptr inbounds double, ptr %3906, i64 %3908
  %3910 = load double, ptr %3909, align 8, !tbaa !5
  %3911 = fmul double %3903, %3910
  %3912 = load ptr, ptr %22, align 8, !tbaa !9
  %3913 = getelementptr inbounds %struct.background, ptr %3912, i32 0, i32 30
  %3914 = load ptr, ptr %3913, align 8, !tbaa !160
  %3915 = load i32, ptr %66, align 4, !tbaa !15
  %3916 = sext i32 %3915 to i64
  %3917 = getelementptr inbounds double, ptr %3914, i64 %3916
  %3918 = load double, ptr %3917, align 8, !tbaa !5
  %3919 = fmul double %3911, %3918
  %3920 = call double @llvm.fmuladd.f64(double %3901, double %3902, double %3919)
  %3921 = call double @sqrt(double noundef %3920) #5
  store double %3921, ptr %69, align 8, !tbaa !5
  %3922 = load double, ptr %18, align 8, !tbaa !5
  %3923 = load double, ptr %68, align 8, !tbaa !5
  %3924 = fmul double %3922, %3923
  %3925 = load double, ptr %69, align 8, !tbaa !5
  %3926 = fdiv double %3924, %3925
  store double %3926, ptr %71, align 8, !tbaa !5
  %3927 = load double, ptr %71, align 8, !tbaa !5
  %3928 = fneg double %3927
  %3929 = load ptr, ptr %8, align 8, !tbaa !9
  %3930 = load i32, ptr %67, align 4, !tbaa !15
  %3931 = add nsw i32 %3930, 1
  %3932 = sext i32 %3931 to i64
  %3933 = getelementptr inbounds double, ptr %3929, i64 %3932
  %3934 = load double, ptr %3933, align 8, !tbaa !5
  %3935 = load double, ptr %42, align 8, !tbaa !5
  %3936 = load double, ptr %70, align 8, !tbaa !5
  %3937 = fmul double %3935, %3936
  %3938 = fdiv double %3937, 3.000000e+00
  %3939 = call double @llvm.fmuladd.f64(double %3928, double %3934, double %3938)
  %3940 = load ptr, ptr %9, align 8, !tbaa !9
  %3941 = load i32, ptr %67, align 4, !tbaa !15
  %3942 = sext i32 %3941 to i64
  %3943 = getelementptr inbounds double, ptr %3940, i64 %3942
  store double %3939, ptr %3943, align 8, !tbaa !5
  %3944 = load double, ptr %71, align 8, !tbaa !5
  %3945 = fdiv double %3944, 3.000000e+00
  %3946 = load ptr, ptr %8, align 8, !tbaa !9
  %3947 = load i32, ptr %67, align 4, !tbaa !15
  %3948 = sext i32 %3947 to i64
  %3949 = getelementptr inbounds double, ptr %3946, i64 %3948
  %3950 = load double, ptr %3949, align 8, !tbaa !5
  %3951 = load ptr, ptr %29, align 8, !tbaa !9
  %3952 = getelementptr inbounds double, ptr %3951, i64 2
  %3953 = load double, ptr %3952, align 8, !tbaa !5
  %3954 = fmul double 2.000000e+00, %3953
  %3955 = load ptr, ptr %8, align 8, !tbaa !9
  %3956 = load i32, ptr %67, align 4, !tbaa !15
  %3957 = add nsw i32 %3956, 2
  %3958 = sext i32 %3957 to i64
  %3959 = getelementptr inbounds double, ptr %3955, i64 %3958
  %3960 = load double, ptr %3959, align 8, !tbaa !5
  %3961 = fneg double %3954
  %3962 = call double @llvm.fmuladd.f64(double %3961, double %3960, double %3950)
  %3963 = load double, ptr %69, align 8, !tbaa !5
  %3964 = load double, ptr %43, align 8, !tbaa !5
  %3965 = fmul double %3963, %3964
  %3966 = load double, ptr %68, align 8, !tbaa !5
  %3967 = fmul double 3.000000e+00, %3966
  %3968 = load double, ptr %18, align 8, !tbaa !5
  %3969 = fmul double %3967, %3968
  %3970 = fdiv double %3965, %3969
  %3971 = load double, ptr %70, align 8, !tbaa !5
  %3972 = fmul double %3970, %3971
  %3973 = fneg double %3972
  %3974 = call double @llvm.fmuladd.f64(double %3945, double %3962, double %3973)
  %3975 = load ptr, ptr %9, align 8, !tbaa !9
  %3976 = load i32, ptr %67, align 4, !tbaa !15
  %3977 = add nsw i32 %3976, 1
  %3978 = sext i32 %3977 to i64
  %3979 = getelementptr inbounds double, ptr %3975, i64 %3978
  store double %3974, ptr %3979, align 8, !tbaa !5
  %3980 = load double, ptr %71, align 8, !tbaa !5
  %3981 = fdiv double %3980, 5.000000e+00
  %3982 = load ptr, ptr %29, align 8, !tbaa !9
  %3983 = getelementptr inbounds double, ptr %3982, i64 2
  %3984 = load double, ptr %3983, align 8, !tbaa !5
  %3985 = fmul double 2.000000e+00, %3984
  %3986 = load ptr, ptr %8, align 8, !tbaa !9
  %3987 = load i32, ptr %67, align 4, !tbaa !15
  %3988 = add nsw i32 %3987, 1
  %3989 = sext i32 %3988 to i64
  %3990 = getelementptr inbounds double, ptr %3986, i64 %3989
  %3991 = load double, ptr %3990, align 8, !tbaa !5
  %3992 = load ptr, ptr %29, align 8, !tbaa !9
  %3993 = getelementptr inbounds double, ptr %3992, i64 3
  %3994 = load double, ptr %3993, align 8, !tbaa !5
  %3995 = fmul double 3.000000e+00, %3994
  %3996 = load ptr, ptr %8, align 8, !tbaa !9
  %3997 = load i32, ptr %67, align 4, !tbaa !15
  %3998 = add nsw i32 %3997, 3
  %3999 = sext i32 %3998 to i64
  %4000 = getelementptr inbounds double, ptr %3996, i64 %3999
  %4001 = load double, ptr %4000, align 8, !tbaa !5
  %4002 = fmul double %3995, %4001
  %4003 = fneg double %4002
  %4004 = call double @llvm.fmuladd.f64(double %3985, double %3991, double %4003)
  %4005 = load ptr, ptr %29, align 8, !tbaa !9
  %4006 = getelementptr inbounds double, ptr %4005, i64 2
  %4007 = load double, ptr %4006, align 8, !tbaa !5
  %4008 = load double, ptr %44, align 8, !tbaa !5
  %4009 = fmul double %4007, %4008
  %4010 = fmul double %4009, 2.000000e+00
  %4011 = fdiv double %4010, 1.500000e+01
  %4012 = load double, ptr %70, align 8, !tbaa !5
  %4013 = fmul double %4011, %4012
  %4014 = fneg double %4013
  %4015 = call double @llvm.fmuladd.f64(double %3981, double %4004, double %4014)
  %4016 = load ptr, ptr %9, align 8, !tbaa !9
  %4017 = load i32, ptr %67, align 4, !tbaa !15
  %4018 = add nsw i32 %4017, 2
  %4019 = sext i32 %4018 to i64
  %4020 = getelementptr inbounds double, ptr %4016, i64 %4019
  store double %4015, ptr %4020, align 8, !tbaa !5
  store i32 3, ptr %12, align 4, !tbaa !15
  br label %4021

4021:                                             ; preds = %4081, %3878
  %4022 = load i32, ptr %12, align 4, !tbaa !15
  %4023 = load ptr, ptr %30, align 8, !tbaa !9
  %4024 = getelementptr inbounds %struct.perturb_vector, ptr %4023, i32 0, i32 39
  %4025 = load ptr, ptr %4024, align 8, !tbaa !155
  %4026 = load i32, ptr %66, align 4, !tbaa !15
  %4027 = sext i32 %4026 to i64
  %4028 = getelementptr inbounds i32, ptr %4025, i64 %4027
  %4029 = load i32, ptr %4028, align 4, !tbaa !15
  %4030 = icmp slt i32 %4022, %4029
  br i1 %4030, label %4031, label %4084

4031:                                             ; preds = %4021
  %4032 = load double, ptr %71, align 8, !tbaa !5
  %4033 = load i32, ptr %12, align 4, !tbaa !15
  %4034 = sitofp i32 %4033 to double
  %4035 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %4034, double 1.000000e+00)
  %4036 = fdiv double %4032, %4035
  %4037 = load i32, ptr %12, align 4, !tbaa !15
  %4038 = sitofp i32 %4037 to double
  %4039 = load ptr, ptr %29, align 8, !tbaa !9
  %4040 = load i32, ptr %12, align 4, !tbaa !15
  %4041 = sext i32 %4040 to i64
  %4042 = getelementptr inbounds double, ptr %4039, i64 %4041
  %4043 = load double, ptr %4042, align 8, !tbaa !5
  %4044 = fmul double %4038, %4043
  %4045 = load ptr, ptr %8, align 8, !tbaa !9
  %4046 = load i32, ptr %67, align 4, !tbaa !15
  %4047 = load i32, ptr %12, align 4, !tbaa !15
  %4048 = sub nsw i32 %4047, 1
  %4049 = add nsw i32 %4046, %4048
  %4050 = sext i32 %4049 to i64
  %4051 = getelementptr inbounds double, ptr %4045, i64 %4050
  %4052 = load double, ptr %4051, align 8, !tbaa !5
  %4053 = load i32, ptr %12, align 4, !tbaa !15
  %4054 = sitofp i32 %4053 to double
  %4055 = fadd double %4054, 1.000000e+00
  %4056 = load ptr, ptr %29, align 8, !tbaa !9
  %4057 = load i32, ptr %12, align 4, !tbaa !15
  %4058 = add nsw i32 %4057, 1
  %4059 = sext i32 %4058 to i64
  %4060 = getelementptr inbounds double, ptr %4056, i64 %4059
  %4061 = load double, ptr %4060, align 8, !tbaa !5
  %4062 = fmul double %4055, %4061
  %4063 = load ptr, ptr %8, align 8, !tbaa !9
  %4064 = load i32, ptr %67, align 4, !tbaa !15
  %4065 = load i32, ptr %12, align 4, !tbaa !15
  %4066 = add nsw i32 %4065, 1
  %4067 = add nsw i32 %4064, %4066
  %4068 = sext i32 %4067 to i64
  %4069 = getelementptr inbounds double, ptr %4063, i64 %4068
  %4070 = load double, ptr %4069, align 8, !tbaa !5
  %4071 = fmul double %4062, %4070
  %4072 = fneg double %4071
  %4073 = call double @llvm.fmuladd.f64(double %4044, double %4052, double %4072)
  %4074 = fmul double %4036, %4073
  %4075 = load ptr, ptr %9, align 8, !tbaa !9
  %4076 = load i32, ptr %67, align 4, !tbaa !15
  %4077 = load i32, ptr %12, align 4, !tbaa !15
  %4078 = add nsw i32 %4076, %4077
  %4079 = sext i32 %4078 to i64
  %4080 = getelementptr inbounds double, ptr %4075, i64 %4079
  store double %4074, ptr %4080, align 8, !tbaa !5
  br label %4081

4081:                                             ; preds = %4031
  %4082 = load i32, ptr %12, align 4, !tbaa !15
  %4083 = add nsw i32 %4082, 1
  store i32 %4083, ptr %12, align 4, !tbaa !15
  br label %4021, !llvm.loop !161

4084:                                             ; preds = %4021
  %4085 = load double, ptr %71, align 8, !tbaa !5
  %4086 = load ptr, ptr %8, align 8, !tbaa !9
  %4087 = load i32, ptr %67, align 4, !tbaa !15
  %4088 = load i32, ptr %12, align 4, !tbaa !15
  %4089 = add nsw i32 %4087, %4088
  %4090 = sub nsw i32 %4089, 1
  %4091 = sext i32 %4090 to i64
  %4092 = getelementptr inbounds double, ptr %4086, i64 %4091
  %4093 = load double, ptr %4092, align 8, !tbaa !5
  %4094 = load i32, ptr %12, align 4, !tbaa !15
  %4095 = sitofp i32 %4094 to double
  %4096 = fadd double 1.000000e+00, %4095
  %4097 = load double, ptr %18, align 8, !tbaa !5
  %4098 = fmul double %4096, %4097
  %4099 = load double, ptr %79, align 8, !tbaa !5
  %4100 = fmul double %4098, %4099
  %4101 = load ptr, ptr %8, align 8, !tbaa !9
  %4102 = load i32, ptr %67, align 4, !tbaa !15
  %4103 = load i32, ptr %12, align 4, !tbaa !15
  %4104 = add nsw i32 %4102, %4103
  %4105 = sext i32 %4104 to i64
  %4106 = getelementptr inbounds double, ptr %4101, i64 %4105
  %4107 = load double, ptr %4106, align 8, !tbaa !5
  %4108 = fmul double %4100, %4107
  %4109 = fneg double %4108
  %4110 = call double @llvm.fmuladd.f64(double %4085, double %4093, double %4109)
  %4111 = load ptr, ptr %9, align 8, !tbaa !9
  %4112 = load i32, ptr %67, align 4, !tbaa !15
  %4113 = load i32, ptr %12, align 4, !tbaa !15
  %4114 = add nsw i32 %4112, %4113
  %4115 = sext i32 %4114 to i64
  %4116 = getelementptr inbounds double, ptr %4111, i64 %4115
  store double %4110, ptr %4116, align 8, !tbaa !5
  %4117 = load ptr, ptr %30, align 8, !tbaa !9
  %4118 = getelementptr inbounds %struct.perturb_vector, ptr %4117, i32 0, i32 39
  %4119 = load ptr, ptr %4118, align 8, !tbaa !155
  %4120 = load i32, ptr %66, align 4, !tbaa !15
  %4121 = sext i32 %4120 to i64
  %4122 = getelementptr inbounds i32, ptr %4119, i64 %4121
  %4123 = load i32, ptr %4122, align 4, !tbaa !15
  %4124 = add nsw i32 %4123, 1
  %4125 = load i32, ptr %67, align 4, !tbaa !15
  %4126 = add nsw i32 %4125, %4124
  store i32 %4126, ptr %67, align 4, !tbaa !15
  br label %4127

4127:                                             ; preds = %4084
  %4128 = load i32, ptr %65, align 4, !tbaa !15
  %4129 = add nsw i32 %4128, 1
  store i32 %4129, ptr %65, align 4, !tbaa !15
  br label %3868, !llvm.loop !162

4130:                                             ; preds = %3868
  br label %4131

4131:                                             ; preds = %4130
  %4132 = load i32, ptr %66, align 4, !tbaa !15
  %4133 = add nsw i32 %4132, 1
  store i32 %4133, ptr %66, align 4, !tbaa !15
  br label %3861, !llvm.loop !163

4134:                                             ; preds = %3861
  br label %4135

4135:                                             ; preds = %4134, %3859
  br label %4136

4136:                                             ; preds = %4135, %3541
  %4137 = load ptr, ptr %24, align 8, !tbaa !9
  %4138 = getelementptr inbounds %struct.perturbs, ptr %4137, i32 0, i32 55
  %4139 = load i32, ptr %4138, align 8, !tbaa !73
  %4140 = icmp eq i32 %4139, 1
  br i1 %4140, label %4141, label %4155

4141:                                             ; preds = %4136
  %4142 = load ptr, ptr %28, align 8, !tbaa !9
  %4143 = load ptr, ptr %25, align 8, !tbaa !9
  %4144 = getelementptr inbounds %struct.perturb_workspace, ptr %4143, i32 0, i32 4
  %4145 = load i32, ptr %4144, align 8, !tbaa !164
  %4146 = sext i32 %4145 to i64
  %4147 = getelementptr inbounds double, ptr %4142, i64 %4146
  %4148 = load double, ptr %4147, align 8, !tbaa !5
  %4149 = load ptr, ptr %9, align 8, !tbaa !9
  %4150 = load ptr, ptr %30, align 8, !tbaa !9
  %4151 = getelementptr inbounds %struct.perturb_vector, ptr %4150, i32 0, i32 41
  %4152 = load i32, ptr %4151, align 8, !tbaa !165
  %4153 = sext i32 %4152 to i64
  %4154 = getelementptr inbounds double, ptr %4149, i64 %4153
  store double %4148, ptr %4154, align 8, !tbaa !5
  br label %4155

4155:                                             ; preds = %4141, %4136
  %4156 = load ptr, ptr %24, align 8, !tbaa !9
  %4157 = getelementptr inbounds %struct.perturbs, ptr %4156, i32 0, i32 55
  %4158 = load i32, ptr %4157, align 8, !tbaa !73
  %4159 = icmp eq i32 %4158, 0
  br i1 %4159, label %4160, label %4174

4160:                                             ; preds = %4155
  %4161 = load ptr, ptr %28, align 8, !tbaa !9
  %4162 = load ptr, ptr %25, align 8, !tbaa !9
  %4163 = getelementptr inbounds %struct.perturb_workspace, ptr %4162, i32 0, i32 1
  %4164 = load i32, ptr %4163, align 4, !tbaa !76
  %4165 = sext i32 %4164 to i64
  %4166 = getelementptr inbounds double, ptr %4161, i64 %4165
  %4167 = load double, ptr %4166, align 8, !tbaa !5
  %4168 = load ptr, ptr %9, align 8, !tbaa !9
  %4169 = load ptr, ptr %30, align 8, !tbaa !9
  %4170 = getelementptr inbounds %struct.perturb_vector, ptr %4169, i32 0, i32 42
  %4171 = load i32, ptr %4170, align 4, !tbaa !166
  %4172 = sext i32 %4171 to i64
  %4173 = getelementptr inbounds double, ptr %4168, i64 %4172
  store double %4167, ptr %4173, align 8, !tbaa !5
  br label %4174

4174:                                             ; preds = %4160, %4155
  br label %4175

4175:                                             ; preds = %4174, %337, %324
  %4176 = load ptr, ptr %24, align 8, !tbaa !9
  %4177 = getelementptr inbounds %struct.perturbs, ptr %4176, i32 0, i32 3
  %4178 = load i16, ptr %4177, align 2, !tbaa !167
  %4179 = sext i16 %4178 to i32
  %4180 = icmp eq i32 %4179, 1
  br i1 %4180, label %4181, label %4963

4181:                                             ; preds = %4175
  %4182 = load i32, ptr %20, align 4, !tbaa !15
  %4183 = load ptr, ptr %24, align 8, !tbaa !9
  %4184 = getelementptr inbounds %struct.perturbs, ptr %4183, i32 0, i32 58
  %4185 = load i32, ptr %4184, align 4, !tbaa !168
  %4186 = icmp eq i32 %4182, %4185
  br i1 %4186, label %4187, label %4963

4187:                                             ; preds = %4181
  %4188 = load ptr, ptr @stderr, align 8, !tbaa !9
  %4189 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %4188, ptr noundef @.str.357) #5
  %4190 = load ptr, ptr %22, align 8, !tbaa !9
  %4191 = getelementptr inbounds %struct.background, ptr %4190, i32 0, i32 45
  %4192 = load double, ptr %4191, align 8, !tbaa !46
  %4193 = fmul double 2.000000e+00, %4192
  %4194 = load double, ptr %19, align 8, !tbaa !5
  %4195 = fdiv double %4193, %4194
  %4196 = fsub double 1.000000e+00, %4195
  %4197 = call double @sqrt(double noundef %4196) #5
  store double %4197, ptr %82, align 8, !tbaa !5
  %4198 = load ptr, ptr %27, align 8, !tbaa !9
  %4199 = load ptr, ptr %23, align 8, !tbaa !9
  %4200 = getelementptr inbounds %struct.thermo, ptr %4199, i32 0, i32 56
  %4201 = load i32, ptr %4200, align 8, !tbaa !61
  %4202 = sext i32 %4201 to i64
  %4203 = getelementptr inbounds double, ptr %4198, i64 %4202
  %4204 = load double, ptr %4203, align 8, !tbaa !5
  store double %4204, ptr %38, align 8, !tbaa !5
  %4205 = load ptr, ptr %24, align 8, !tbaa !9
  %4206 = getelementptr inbounds %struct.perturbs, ptr %4205, i32 0, i32 55
  %4207 = load i32, ptr %4206, align 8, !tbaa !73
  %4208 = icmp eq i32 %4207, 1
  br i1 %4208, label %4209, label %4247

4209:                                             ; preds = %4187
  %4210 = load double, ptr %38, align 8, !tbaa !5
  %4211 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %4210, double 1.000000e+00)
  %4212 = fneg double %4211
  %4213 = load double, ptr %15, align 8, !tbaa !5
  %4214 = fmul double %4212, %4213
  %4215 = load ptr, ptr %8, align 8, !tbaa !9
  %4216 = load ptr, ptr %30, align 8, !tbaa !9
  %4217 = getelementptr inbounds %struct.perturb_vector, ptr %4216, i32 0, i32 11
  %4218 = load i32, ptr %4217, align 4, !tbaa !60
  %4219 = sext i32 %4218 to i64
  %4220 = getelementptr inbounds double, ptr %4215, i64 %4219
  %4221 = load double, ptr %4220, align 8, !tbaa !5
  %4222 = load ptr, ptr %27, align 8, !tbaa !9
  %4223 = load ptr, ptr %23, align 8, !tbaa !9
  %4224 = getelementptr inbounds %struct.thermo, ptr %4223, i32 0, i32 37
  %4225 = load i32, ptr %4224, align 4, !tbaa !82
  %4226 = sext i32 %4225 to i64
  %4227 = getelementptr inbounds double, ptr %4222, i64 %4226
  %4228 = load double, ptr %4227, align 8, !tbaa !5
  %4229 = load double, ptr %31, align 8, !tbaa !5
  %4230 = load ptr, ptr %8, align 8, !tbaa !9
  %4231 = load ptr, ptr %30, align 8, !tbaa !9
  %4232 = getelementptr inbounds %struct.perturb_vector, ptr %4231, i32 0, i32 11
  %4233 = load i32, ptr %4232, align 4, !tbaa !60
  %4234 = sext i32 %4233 to i64
  %4235 = getelementptr inbounds double, ptr %4230, i64 %4234
  %4236 = load double, ptr %4235, align 8, !tbaa !5
  %4237 = call double @llvm.fmuladd.f64(double 0x3FD6A09E667F3BCD, double %4229, double %4236)
  %4238 = fmul double %4228, %4237
  %4239 = fneg double %4238
  %4240 = call double @llvm.fmuladd.f64(double %4214, double %4221, double %4239)
  %4241 = load ptr, ptr %9, align 8, !tbaa !9
  %4242 = load ptr, ptr %30, align 8, !tbaa !9
  %4243 = getelementptr inbounds %struct.perturb_vector, ptr %4242, i32 0, i32 11
  %4244 = load i32, ptr %4243, align 4, !tbaa !60
  %4245 = sext i32 %4244 to i64
  %4246 = getelementptr inbounds double, ptr %4241, i64 %4245
  store double %4240, ptr %4246, align 8, !tbaa !5
  br label %4312

4247:                                             ; preds = %4187
  %4248 = load ptr, ptr %24, align 8, !tbaa !9
  %4249 = getelementptr inbounds %struct.perturbs, ptr %4248, i32 0, i32 55
  %4250 = load i32, ptr %4249, align 8, !tbaa !73
  %4251 = icmp eq i32 %4250, 0
  br i1 %4251, label %4252, label %4311

4252:                                             ; preds = %4247
  %4253 = load double, ptr %38, align 8, !tbaa !5
  %4254 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %4253, double 1.000000e+00)
  %4255 = fneg double %4254
  %4256 = load double, ptr %15, align 8, !tbaa !5
  %4257 = fmul double %4255, %4256
  %4258 = load ptr, ptr %8, align 8, !tbaa !9
  %4259 = load ptr, ptr %30, align 8, !tbaa !9
  %4260 = getelementptr inbounds %struct.perturb_vector, ptr %4259, i32 0, i32 11
  %4261 = load i32, ptr %4260, align 4, !tbaa !60
  %4262 = sext i32 %4261 to i64
  %4263 = getelementptr inbounds double, ptr %4258, i64 %4262
  %4264 = load double, ptr %4263, align 8, !tbaa !5
  %4265 = load ptr, ptr %27, align 8, !tbaa !9
  %4266 = load ptr, ptr %23, align 8, !tbaa !9
  %4267 = getelementptr inbounds %struct.thermo, ptr %4266, i32 0, i32 37
  %4268 = load i32, ptr %4267, align 4, !tbaa !82
  %4269 = sext i32 %4268 to i64
  %4270 = getelementptr inbounds double, ptr %4265, i64 %4269
  %4271 = load double, ptr %4270, align 8, !tbaa !5
  %4272 = fmul double 0x3FD6A09E667F3BCD, %4271
  %4273 = load double, ptr %31, align 8, !tbaa !5
  %4274 = load ptr, ptr %8, align 8, !tbaa !9
  %4275 = load ptr, ptr %30, align 8, !tbaa !9
  %4276 = getelementptr inbounds %struct.perturb_vector, ptr %4275, i32 0, i32 11
  %4277 = load i32, ptr %4276, align 4, !tbaa !60
  %4278 = sext i32 %4277 to i64
  %4279 = getelementptr inbounds double, ptr %4274, i64 %4278
  %4280 = load double, ptr %4279, align 8, !tbaa !5
  %4281 = call double @llvm.fmuladd.f64(double 0x4006A09E667F3BCD, double %4280, double %4273)
  %4282 = fmul double %4272, %4281
  %4283 = fneg double %4282
  %4284 = call double @llvm.fmuladd.f64(double %4257, double %4264, double %4283)
  %4285 = load ptr, ptr %28, align 8, !tbaa !9
  %4286 = load ptr, ptr %25, align 8, !tbaa !9
  %4287 = getelementptr inbounds %struct.perturb_workspace, ptr %4286, i32 0, i32 8
  %4288 = load i32, ptr %4287, align 8, !tbaa !169
  %4289 = sext i32 %4288 to i64
  %4290 = getelementptr inbounds double, ptr %4285, i64 %4289
  %4291 = load double, ptr %4290, align 8, !tbaa !5
  %4292 = fadd double %4284, %4291
  %4293 = load double, ptr %38, align 8, !tbaa !5
  %4294 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %4293, double 1.000000e+00)
  %4295 = load double, ptr %15, align 8, !tbaa !5
  %4296 = fmul double %4294, %4295
  %4297 = load ptr, ptr %8, align 8, !tbaa !9
  %4298 = load ptr, ptr %30, align 8, !tbaa !9
  %4299 = getelementptr inbounds %struct.perturb_vector, ptr %4298, i32 0, i32 44
  %4300 = load i32, ptr %4299, align 4, !tbaa !170
  %4301 = sext i32 %4300 to i64
  %4302 = getelementptr inbounds double, ptr %4297, i64 %4301
  %4303 = load double, ptr %4302, align 8, !tbaa !5
  %4304 = call double @llvm.fmuladd.f64(double %4296, double %4303, double %4292)
  %4305 = load ptr, ptr %9, align 8, !tbaa !9
  %4306 = load ptr, ptr %30, align 8, !tbaa !9
  %4307 = getelementptr inbounds %struct.perturb_vector, ptr %4306, i32 0, i32 11
  %4308 = load i32, ptr %4307, align 4, !tbaa !60
  %4309 = sext i32 %4308 to i64
  %4310 = getelementptr inbounds double, ptr %4305, i64 %4309
  store double %4304, ptr %4310, align 8, !tbaa !5
  br label %4311

4311:                                             ; preds = %4252, %4247
  br label %4312

4312:                                             ; preds = %4311, %4209
  %4313 = load ptr, ptr %8, align 8, !tbaa !9
  %4314 = load ptr, ptr %30, align 8, !tbaa !9
  %4315 = getelementptr inbounds %struct.perturb_vector, ptr %4314, i32 0, i32 0
  %4316 = load i32, ptr %4315, align 8, !tbaa !52
  %4317 = sext i32 %4316 to i64
  %4318 = getelementptr inbounds double, ptr %4313, i64 %4317
  %4319 = load double, ptr %4318, align 8, !tbaa !5
  store double %4319, ptr %31, align 8, !tbaa !5
  %4320 = load ptr, ptr %8, align 8, !tbaa !9
  %4321 = load ptr, ptr %30, align 8, !tbaa !9
  %4322 = getelementptr inbounds %struct.perturb_vector, ptr %4321, i32 0, i32 1
  %4323 = load i32, ptr %4322, align 4, !tbaa !54
  %4324 = sext i32 %4323 to i64
  %4325 = getelementptr inbounds double, ptr %4320, i64 %4324
  %4326 = load double, ptr %4325, align 8, !tbaa !5
  store double %4326, ptr %32, align 8, !tbaa !5
  %4327 = load ptr, ptr %8, align 8, !tbaa !9
  %4328 = load ptr, ptr %30, align 8, !tbaa !9
  %4329 = getelementptr inbounds %struct.perturb_vector, ptr %4328, i32 0, i32 2
  %4330 = load i32, ptr %4329, align 8, !tbaa !87
  %4331 = sext i32 %4330 to i64
  %4332 = getelementptr inbounds double, ptr %4327, i64 %4331
  %4333 = load double, ptr %4332, align 8, !tbaa !5
  store double %4333, ptr %33, align 8, !tbaa !5
  %4334 = load double, ptr %18, align 8, !tbaa !5
  %4335 = fmul double 3.000000e+00, %4334
  %4336 = fdiv double 4.000000e+00, %4335
  %4337 = load double, ptr %32, align 8, !tbaa !5
  %4338 = load ptr, ptr %8, align 8, !tbaa !9
  %4339 = load ptr, ptr %30, align 8, !tbaa !9
  %4340 = getelementptr inbounds %struct.perturb_vector, ptr %4339, i32 0, i32 0
  %4341 = load i32, ptr %4340, align 8, !tbaa !52
  %4342 = add nsw i32 %4341, 3
  %4343 = sext i32 %4342 to i64
  %4344 = getelementptr inbounds double, ptr %4338, i64 %4343
  %4345 = load double, ptr %4344, align 8, !tbaa !5
  %4346 = call double @llvm.fmuladd.f64(double %4336, double %4337, double %4345)
  %4347 = load ptr, ptr %8, align 8, !tbaa !9
  %4348 = load ptr, ptr %30, align 8, !tbaa !9
  %4349 = getelementptr inbounds %struct.perturb_vector, ptr %4348, i32 0, i32 5
  %4350 = load i32, ptr %4349, align 4, !tbaa !85
  %4351 = sext i32 %4350 to i64
  %4352 = getelementptr inbounds double, ptr %4347, i64 %4351
  %4353 = load double, ptr %4352, align 8, !tbaa !5
  %4354 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %4353, double %4346)
  %4355 = load ptr, ptr %8, align 8, !tbaa !9
  %4356 = load ptr, ptr %30, align 8, !tbaa !9
  %4357 = getelementptr inbounds %struct.perturb_vector, ptr %4356, i32 0, i32 7
  %4358 = load i32, ptr %4357, align 4, !tbaa !86
  %4359 = sext i32 %4358 to i64
  %4360 = getelementptr inbounds double, ptr %4355, i64 %4359
  %4361 = load double, ptr %4360, align 8, !tbaa !5
  %4362 = call double @llvm.fmuladd.f64(double 0x3FF6DB6DB6DB6DB7, double %4361, double %4354)
  %4363 = load ptr, ptr %8, align 8, !tbaa !9
  %4364 = load ptr, ptr %30, align 8, !tbaa !9
  %4365 = getelementptr inbounds %struct.perturb_vector, ptr %4364, i32 0, i32 5
  %4366 = load i32, ptr %4365, align 4, !tbaa !85
  %4367 = add nsw i32 %4366, 4
  %4368 = sext i32 %4367 to i64
  %4369 = getelementptr inbounds double, ptr %4363, i64 %4368
  %4370 = load double, ptr %4369, align 8, !tbaa !5
  %4371 = call double @llvm.fmuladd.f64(double 0xBFE2492492492492, double %4370, double %4362)
  %4372 = fmul double 0xBFAF5A7CECDB684A, %4371
  store double %4372, ptr %59, align 8, !tbaa !5
  %4373 = load ptr, ptr %24, align 8, !tbaa !9
  %4374 = getelementptr inbounds %struct.perturbs, ptr %4373, i32 0, i32 55
  %4375 = load i32, ptr %4374, align 8, !tbaa !73
  %4376 = icmp eq i32 %4375, 1
  br i1 %4376, label %4377, label %4442

4377:                                             ; preds = %4312
  %4378 = load double, ptr %32, align 8, !tbaa !5
  %4379 = load ptr, ptr %27, align 8, !tbaa !9
  %4380 = load ptr, ptr %23, align 8, !tbaa !9
  %4381 = getelementptr inbounds %struct.thermo, ptr %4380, i32 0, i32 37
  %4382 = load i32, ptr %4381, align 4, !tbaa !82
  %4383 = sext i32 %4382 to i64
  %4384 = getelementptr inbounds double, ptr %4379, i64 %4383
  %4385 = load double, ptr %4384, align 8, !tbaa !5
  %4386 = load double, ptr %31, align 8, !tbaa !5
  %4387 = load ptr, ptr %8, align 8, !tbaa !9
  %4388 = load ptr, ptr %30, align 8, !tbaa !9
  %4389 = getelementptr inbounds %struct.perturb_vector, ptr %4388, i32 0, i32 11
  %4390 = load i32, ptr %4389, align 4, !tbaa !60
  %4391 = sext i32 %4390 to i64
  %4392 = getelementptr inbounds double, ptr %4387, i64 %4391
  %4393 = load double, ptr %4392, align 8, !tbaa !5
  %4394 = call double @llvm.fmuladd.f64(double 0x4006A09E667F3BCD, double %4393, double %4386)
  %4395 = fmul double %4385, %4394
  %4396 = fneg double %4395
  %4397 = call double @llvm.fmuladd.f64(double 0xBFF5555555555555, double %4378, double %4396)
  %4398 = load ptr, ptr %9, align 8, !tbaa !9
  %4399 = load ptr, ptr %30, align 8, !tbaa !9
  %4400 = getelementptr inbounds %struct.perturb_vector, ptr %4399, i32 0, i32 0
  %4401 = load i32, ptr %4400, align 8, !tbaa !52
  %4402 = sext i32 %4401 to i64
  %4403 = getelementptr inbounds double, ptr %4398, i64 %4402
  store double %4397, ptr %4403, align 8, !tbaa !5
  %4404 = load double, ptr %19, align 8, !tbaa !5
  %4405 = load double, ptr %31, align 8, !tbaa !5
  %4406 = fdiv double %4405, 4.000000e+00
  %4407 = load ptr, ptr %29, align 8, !tbaa !9
  %4408 = getelementptr inbounds double, ptr %4407, i64 2
  %4409 = load double, ptr %4408, align 8, !tbaa !5
  %4410 = load double, ptr %33, align 8, !tbaa !5
  %4411 = fneg double %4409
  %4412 = call double @llvm.fmuladd.f64(double %4411, double %4410, double %4406)
  %4413 = load ptr, ptr %27, align 8, !tbaa !9
  %4414 = load ptr, ptr %23, align 8, !tbaa !9
  %4415 = getelementptr inbounds %struct.thermo, ptr %4414, i32 0, i32 37
  %4416 = load i32, ptr %4415, align 4, !tbaa !82
  %4417 = sext i32 %4416 to i64
  %4418 = getelementptr inbounds double, ptr %4413, i64 %4417
  %4419 = load double, ptr %4418, align 8, !tbaa !5
  %4420 = load double, ptr %32, align 8, !tbaa !5
  %4421 = load double, ptr %59, align 8, !tbaa !5
  %4422 = call double @llvm.fmuladd.f64(double 0x3FFA20BD700C2C3F, double %4421, double %4420)
  %4423 = fmul double %4419, %4422
  %4424 = fneg double %4423
  %4425 = call double @llvm.fmuladd.f64(double %4404, double %4412, double %4424)
  %4426 = load double, ptr %82, align 8, !tbaa !5
  %4427 = fmul double 0x3FEE2B7DDDFEFA65, %4426
  %4428 = load ptr, ptr %8, align 8, !tbaa !9
  %4429 = load ptr, ptr %30, align 8, !tbaa !9
  %4430 = getelementptr inbounds %struct.perturb_vector, ptr %4429, i32 0, i32 43
  %4431 = load i32, ptr %4430, align 8, !tbaa !171
  %4432 = sext i32 %4431 to i64
  %4433 = getelementptr inbounds double, ptr %4428, i64 %4432
  %4434 = load double, ptr %4433, align 8, !tbaa !5
  %4435 = call double @llvm.fmuladd.f64(double %4427, double %4434, double %4425)
  %4436 = load ptr, ptr %9, align 8, !tbaa !9
  %4437 = load ptr, ptr %30, align 8, !tbaa !9
  %4438 = getelementptr inbounds %struct.perturb_vector, ptr %4437, i32 0, i32 1
  %4439 = load i32, ptr %4438, align 4, !tbaa !54
  %4440 = sext i32 %4439 to i64
  %4441 = getelementptr inbounds double, ptr %4436, i64 %4440
  store double %4435, ptr %4441, align 8, !tbaa !5
  br label %4511

4442:                                             ; preds = %4312
  %4443 = load ptr, ptr %24, align 8, !tbaa !9
  %4444 = getelementptr inbounds %struct.perturbs, ptr %4443, i32 0, i32 55
  %4445 = load i32, ptr %4444, align 8, !tbaa !73
  %4446 = icmp eq i32 %4445, 0
  br i1 %4446, label %4447, label %4510

4447:                                             ; preds = %4442
  %4448 = load double, ptr %32, align 8, !tbaa !5
  %4449 = load ptr, ptr %27, align 8, !tbaa !9
  %4450 = load ptr, ptr %23, align 8, !tbaa !9
  %4451 = getelementptr inbounds %struct.thermo, ptr %4450, i32 0, i32 37
  %4452 = load i32, ptr %4451, align 4, !tbaa !82
  %4453 = sext i32 %4452 to i64
  %4454 = getelementptr inbounds double, ptr %4449, i64 %4453
  %4455 = load double, ptr %4454, align 8, !tbaa !5
  %4456 = load double, ptr %31, align 8, !tbaa !5
  %4457 = load ptr, ptr %8, align 8, !tbaa !9
  %4458 = load ptr, ptr %30, align 8, !tbaa !9
  %4459 = getelementptr inbounds %struct.perturb_vector, ptr %4458, i32 0, i32 11
  %4460 = load i32, ptr %4459, align 4, !tbaa !60
  %4461 = sext i32 %4460 to i64
  %4462 = getelementptr inbounds double, ptr %4457, i64 %4461
  %4463 = load double, ptr %4462, align 8, !tbaa !5
  %4464 = call double @llvm.fmuladd.f64(double 0x4006A09E667F3BCD, double %4463, double %4456)
  %4465 = fmul double %4455, %4464
  %4466 = fneg double %4465
  %4467 = call double @llvm.fmuladd.f64(double 0xBFF5555555555555, double %4448, double %4466)
  %4468 = load ptr, ptr %28, align 8, !tbaa !9
  %4469 = load ptr, ptr %25, align 8, !tbaa !9
  %4470 = getelementptr inbounds %struct.perturb_workspace, ptr %4469, i32 0, i32 8
  %4471 = load i32, ptr %4470, align 8, !tbaa !169
  %4472 = sext i32 %4471 to i64
  %4473 = getelementptr inbounds double, ptr %4468, i64 %4472
  %4474 = load double, ptr %4473, align 8, !tbaa !5
  %4475 = call double @llvm.fmuladd.f64(double 0xC006A09E667F3BCD, double %4474, double %4467)
  %4476 = load ptr, ptr %9, align 8, !tbaa !9
  %4477 = load ptr, ptr %30, align 8, !tbaa !9
  %4478 = getelementptr inbounds %struct.perturb_vector, ptr %4477, i32 0, i32 0
  %4479 = load i32, ptr %4478, align 8, !tbaa !52
  %4480 = sext i32 %4479 to i64
  %4481 = getelementptr inbounds double, ptr %4476, i64 %4480
  store double %4475, ptr %4481, align 8, !tbaa !5
  %4482 = load double, ptr %19, align 8, !tbaa !5
  %4483 = load double, ptr %31, align 8, !tbaa !5
  %4484 = fdiv double %4483, 4.000000e+00
  %4485 = load ptr, ptr %29, align 8, !tbaa !9
  %4486 = getelementptr inbounds double, ptr %4485, i64 2
  %4487 = load double, ptr %4486, align 8, !tbaa !5
  %4488 = load double, ptr %33, align 8, !tbaa !5
  %4489 = fneg double %4487
  %4490 = call double @llvm.fmuladd.f64(double %4489, double %4488, double %4484)
  %4491 = load ptr, ptr %27, align 8, !tbaa !9
  %4492 = load ptr, ptr %23, align 8, !tbaa !9
  %4493 = getelementptr inbounds %struct.thermo, ptr %4492, i32 0, i32 37
  %4494 = load i32, ptr %4493, align 4, !tbaa !82
  %4495 = sext i32 %4494 to i64
  %4496 = getelementptr inbounds double, ptr %4491, i64 %4495
  %4497 = load double, ptr %4496, align 8, !tbaa !5
  %4498 = load double, ptr %32, align 8, !tbaa !5
  %4499 = load double, ptr %59, align 8, !tbaa !5
  %4500 = call double @llvm.fmuladd.f64(double 0x3FFA20BD700C2C3F, double %4499, double %4498)
  %4501 = fmul double %4497, %4500
  %4502 = fneg double %4501
  %4503 = call double @llvm.fmuladd.f64(double %4482, double %4490, double %4502)
  %4504 = load ptr, ptr %9, align 8, !tbaa !9
  %4505 = load ptr, ptr %30, align 8, !tbaa !9
  %4506 = getelementptr inbounds %struct.perturb_vector, ptr %4505, i32 0, i32 1
  %4507 = load i32, ptr %4506, align 4, !tbaa !54
  %4508 = sext i32 %4507 to i64
  %4509 = getelementptr inbounds double, ptr %4504, i64 %4508
  store double %4503, ptr %4509, align 8, !tbaa !5
  br label %4510

4510:                                             ; preds = %4447, %4442
  br label %4511

4511:                                             ; preds = %4510, %4377
  %4512 = load ptr, ptr %29, align 8, !tbaa !9
  %4513 = getelementptr inbounds double, ptr %4512, i64 2
  %4514 = load double, ptr %4513, align 8, !tbaa !5
  %4515 = fmul double 0x3FD1111111111111, %4514
  %4516 = load double, ptr %32, align 8, !tbaa !5
  %4517 = load double, ptr %18, align 8, !tbaa !5
  %4518 = fmul double 3.000000e-01, %4517
  %4519 = load ptr, ptr %29, align 8, !tbaa !9
  %4520 = getelementptr inbounds double, ptr %4519, i64 3
  %4521 = load double, ptr %4520, align 8, !tbaa !5
  %4522 = fmul double %4518, %4521
  %4523 = load ptr, ptr %8, align 8, !tbaa !9
  %4524 = load ptr, ptr %30, align 8, !tbaa !9
  %4525 = getelementptr inbounds %struct.perturb_vector, ptr %4524, i32 0, i32 2
  %4526 = load i32, ptr %4525, align 8, !tbaa !87
  %4527 = add nsw i32 %4526, 1
  %4528 = sext i32 %4527 to i64
  %4529 = getelementptr inbounds double, ptr %4523, i64 %4528
  %4530 = load double, ptr %4529, align 8, !tbaa !5
  %4531 = fmul double %4522, %4530
  %4532 = fneg double %4531
  %4533 = call double @llvm.fmuladd.f64(double %4515, double %4516, double %4532)
  %4534 = load ptr, ptr %27, align 8, !tbaa !9
  %4535 = load ptr, ptr %23, align 8, !tbaa !9
  %4536 = getelementptr inbounds %struct.thermo, ptr %4535, i32 0, i32 37
  %4537 = load i32, ptr %4536, align 4, !tbaa !82
  %4538 = sext i32 %4537 to i64
  %4539 = getelementptr inbounds double, ptr %4534, i64 %4538
  %4540 = load double, ptr %4539, align 8, !tbaa !5
  %4541 = load double, ptr %33, align 8, !tbaa !5
  %4542 = fneg double %4540
  %4543 = call double @llvm.fmuladd.f64(double %4542, double %4541, double %4533)
  %4544 = load ptr, ptr %9, align 8, !tbaa !9
  %4545 = load ptr, ptr %30, align 8, !tbaa !9
  %4546 = getelementptr inbounds %struct.perturb_vector, ptr %4545, i32 0, i32 2
  %4547 = load i32, ptr %4546, align 8, !tbaa !87
  %4548 = sext i32 %4547 to i64
  %4549 = getelementptr inbounds double, ptr %4544, i64 %4548
  store double %4543, ptr %4549, align 8, !tbaa !5
  %4550 = load double, ptr %18, align 8, !tbaa !5
  %4551 = fdiv double %4550, 7.000000e+00
  %4552 = load ptr, ptr %29, align 8, !tbaa !9
  %4553 = getelementptr inbounds double, ptr %4552, i64 3
  %4554 = load double, ptr %4553, align 8, !tbaa !5
  %4555 = fmul double 6.000000e+00, %4554
  %4556 = load double, ptr %33, align 8, !tbaa !5
  %4557 = load ptr, ptr %29, align 8, !tbaa !9
  %4558 = getelementptr inbounds double, ptr %4557, i64 4
  %4559 = load double, ptr %4558, align 8, !tbaa !5
  %4560 = fmul double 4.000000e+00, %4559
  %4561 = load ptr, ptr %8, align 8, !tbaa !9
  %4562 = load ptr, ptr %30, align 8, !tbaa !9
  %4563 = getelementptr inbounds %struct.perturb_vector, ptr %4562, i32 0, i32 3
  %4564 = load i32, ptr %4563, align 4, !tbaa !88
  %4565 = add nsw i32 %4564, 1
  %4566 = sext i32 %4565 to i64
  %4567 = getelementptr inbounds double, ptr %4561, i64 %4566
  %4568 = load double, ptr %4567, align 8, !tbaa !5
  %4569 = fmul double %4560, %4568
  %4570 = fneg double %4569
  %4571 = call double @llvm.fmuladd.f64(double %4555, double %4556, double %4570)
  %4572 = load ptr, ptr %27, align 8, !tbaa !9
  %4573 = load ptr, ptr %23, align 8, !tbaa !9
  %4574 = getelementptr inbounds %struct.thermo, ptr %4573, i32 0, i32 37
  %4575 = load i32, ptr %4574, align 4, !tbaa !82
  %4576 = sext i32 %4575 to i64
  %4577 = getelementptr inbounds double, ptr %4572, i64 %4576
  %4578 = load double, ptr %4577, align 8, !tbaa !5
  %4579 = load ptr, ptr %8, align 8, !tbaa !9
  %4580 = load ptr, ptr %30, align 8, !tbaa !9
  %4581 = getelementptr inbounds %struct.perturb_vector, ptr %4580, i32 0, i32 3
  %4582 = load i32, ptr %4581, align 4, !tbaa !88
  %4583 = sext i32 %4582 to i64
  %4584 = getelementptr inbounds double, ptr %4579, i64 %4583
  %4585 = load double, ptr %4584, align 8, !tbaa !5
  %4586 = fmul double %4578, %4585
  %4587 = fneg double %4586
  %4588 = call double @llvm.fmuladd.f64(double %4551, double %4571, double %4587)
  %4589 = load ptr, ptr %9, align 8, !tbaa !9
  %4590 = load ptr, ptr %30, align 8, !tbaa !9
  %4591 = getelementptr inbounds %struct.perturb_vector, ptr %4590, i32 0, i32 3
  %4592 = load i32, ptr %4591, align 4, !tbaa !88
  %4593 = sext i32 %4592 to i64
  %4594 = getelementptr inbounds double, ptr %4589, i64 %4593
  store double %4588, ptr %4594, align 8, !tbaa !5
  store i32 4, ptr %12, align 4, !tbaa !15
  br label %4595

4595:                                             ; preds = %4675, %4511
  %4596 = load i32, ptr %12, align 4, !tbaa !15
  %4597 = load ptr, ptr %30, align 8, !tbaa !9
  %4598 = getelementptr inbounds %struct.perturb_vector, ptr %4597, i32 0, i32 4
  %4599 = load i32, ptr %4598, align 8, !tbaa !89
  %4600 = icmp slt i32 %4596, %4599
  br i1 %4600, label %4601, label %4678

4601:                                             ; preds = %4595
  %4602 = load double, ptr %18, align 8, !tbaa !5
  %4603 = load i32, ptr %12, align 4, !tbaa !15
  %4604 = sitofp i32 %4603 to double
  %4605 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %4604, double 1.000000e+00)
  %4606 = fdiv double %4602, %4605
  %4607 = load i32, ptr %12, align 4, !tbaa !15
  %4608 = sitofp i32 %4607 to double
  %4609 = load ptr, ptr %29, align 8, !tbaa !9
  %4610 = load i32, ptr %12, align 4, !tbaa !15
  %4611 = sext i32 %4610 to i64
  %4612 = getelementptr inbounds double, ptr %4609, i64 %4611
  %4613 = load double, ptr %4612, align 8, !tbaa !5
  %4614 = fmul double %4608, %4613
  %4615 = load ptr, ptr %8, align 8, !tbaa !9
  %4616 = load ptr, ptr %30, align 8, !tbaa !9
  %4617 = getelementptr inbounds %struct.perturb_vector, ptr %4616, i32 0, i32 0
  %4618 = load i32, ptr %4617, align 8, !tbaa !52
  %4619 = load i32, ptr %12, align 4, !tbaa !15
  %4620 = add nsw i32 %4618, %4619
  %4621 = sub nsw i32 %4620, 1
  %4622 = sext i32 %4621 to i64
  %4623 = getelementptr inbounds double, ptr %4615, i64 %4622
  %4624 = load double, ptr %4623, align 8, !tbaa !5
  %4625 = load i32, ptr %12, align 4, !tbaa !15
  %4626 = sitofp i32 %4625 to double
  %4627 = fadd double %4626, 1.000000e+00
  %4628 = load ptr, ptr %29, align 8, !tbaa !9
  %4629 = load i32, ptr %12, align 4, !tbaa !15
  %4630 = add nsw i32 %4629, 1
  %4631 = sext i32 %4630 to i64
  %4632 = getelementptr inbounds double, ptr %4628, i64 %4631
  %4633 = load double, ptr %4632, align 8, !tbaa !5
  %4634 = fmul double %4627, %4633
  %4635 = load ptr, ptr %8, align 8, !tbaa !9
  %4636 = load ptr, ptr %30, align 8, !tbaa !9
  %4637 = getelementptr inbounds %struct.perturb_vector, ptr %4636, i32 0, i32 0
  %4638 = load i32, ptr %4637, align 8, !tbaa !52
  %4639 = load i32, ptr %12, align 4, !tbaa !15
  %4640 = add nsw i32 %4638, %4639
  %4641 = add nsw i32 %4640, 1
  %4642 = sext i32 %4641 to i64
  %4643 = getelementptr inbounds double, ptr %4635, i64 %4642
  %4644 = load double, ptr %4643, align 8, !tbaa !5
  %4645 = fmul double %4634, %4644
  %4646 = fneg double %4645
  %4647 = call double @llvm.fmuladd.f64(double %4614, double %4624, double %4646)
  %4648 = load ptr, ptr %27, align 8, !tbaa !9
  %4649 = load ptr, ptr %23, align 8, !tbaa !9
  %4650 = getelementptr inbounds %struct.thermo, ptr %4649, i32 0, i32 37
  %4651 = load i32, ptr %4650, align 4, !tbaa !82
  %4652 = sext i32 %4651 to i64
  %4653 = getelementptr inbounds double, ptr %4648, i64 %4652
  %4654 = load double, ptr %4653, align 8, !tbaa !5
  %4655 = load ptr, ptr %8, align 8, !tbaa !9
  %4656 = load ptr, ptr %30, align 8, !tbaa !9
  %4657 = getelementptr inbounds %struct.perturb_vector, ptr %4656, i32 0, i32 0
  %4658 = load i32, ptr %4657, align 8, !tbaa !52
  %4659 = load i32, ptr %12, align 4, !tbaa !15
  %4660 = add nsw i32 %4658, %4659
  %4661 = sext i32 %4660 to i64
  %4662 = getelementptr inbounds double, ptr %4655, i64 %4661
  %4663 = load double, ptr %4662, align 8, !tbaa !5
  %4664 = fmul double %4654, %4663
  %4665 = fneg double %4664
  %4666 = call double @llvm.fmuladd.f64(double %4606, double %4647, double %4665)
  %4667 = load ptr, ptr %9, align 8, !tbaa !9
  %4668 = load ptr, ptr %30, align 8, !tbaa !9
  %4669 = getelementptr inbounds %struct.perturb_vector, ptr %4668, i32 0, i32 0
  %4670 = load i32, ptr %4669, align 8, !tbaa !52
  %4671 = load i32, ptr %12, align 4, !tbaa !15
  %4672 = add nsw i32 %4670, %4671
  %4673 = sext i32 %4672 to i64
  %4674 = getelementptr inbounds double, ptr %4667, i64 %4673
  store double %4666, ptr %4674, align 8, !tbaa !5
  br label %4675

4675:                                             ; preds = %4601
  %4676 = load i32, ptr %12, align 4, !tbaa !15
  %4677 = add nsw i32 %4676, 1
  store i32 %4677, ptr %12, align 4, !tbaa !15
  br label %4595, !llvm.loop !172

4678:                                             ; preds = %4595
  %4679 = load ptr, ptr %30, align 8, !tbaa !9
  %4680 = getelementptr inbounds %struct.perturb_vector, ptr %4679, i32 0, i32 4
  %4681 = load i32, ptr %4680, align 8, !tbaa !89
  store i32 %4681, ptr %12, align 4, !tbaa !15
  %4682 = load double, ptr %18, align 8, !tbaa !5
  %4683 = load ptr, ptr %29, align 8, !tbaa !9
  %4684 = load i32, ptr %12, align 4, !tbaa !15
  %4685 = sext i32 %4684 to i64
  %4686 = getelementptr inbounds double, ptr %4683, i64 %4685
  %4687 = load double, ptr %4686, align 8, !tbaa !5
  %4688 = load ptr, ptr %8, align 8, !tbaa !9
  %4689 = load ptr, ptr %30, align 8, !tbaa !9
  %4690 = getelementptr inbounds %struct.perturb_vector, ptr %4689, i32 0, i32 0
  %4691 = load i32, ptr %4690, align 8, !tbaa !52
  %4692 = load i32, ptr %12, align 4, !tbaa !15
  %4693 = add nsw i32 %4691, %4692
  %4694 = sub nsw i32 %4693, 1
  %4695 = sext i32 %4694 to i64
  %4696 = getelementptr inbounds double, ptr %4688, i64 %4695
  %4697 = load double, ptr %4696, align 8, !tbaa !5
  %4698 = load i32, ptr %12, align 4, !tbaa !15
  %4699 = sitofp i32 %4698 to double
  %4700 = fadd double 1.000000e+00, %4699
  %4701 = load double, ptr %79, align 8, !tbaa !5
  %4702 = fmul double %4700, %4701
  %4703 = load ptr, ptr %8, align 8, !tbaa !9
  %4704 = load ptr, ptr %30, align 8, !tbaa !9
  %4705 = getelementptr inbounds %struct.perturb_vector, ptr %4704, i32 0, i32 0
  %4706 = load i32, ptr %4705, align 8, !tbaa !52
  %4707 = load i32, ptr %12, align 4, !tbaa !15
  %4708 = add nsw i32 %4706, %4707
  %4709 = sext i32 %4708 to i64
  %4710 = getelementptr inbounds double, ptr %4703, i64 %4709
  %4711 = load double, ptr %4710, align 8, !tbaa !5
  %4712 = fmul double %4702, %4711
  %4713 = fneg double %4712
  %4714 = call double @llvm.fmuladd.f64(double %4687, double %4697, double %4713)
  %4715 = load ptr, ptr %27, align 8, !tbaa !9
  %4716 = load ptr, ptr %23, align 8, !tbaa !9
  %4717 = getelementptr inbounds %struct.thermo, ptr %4716, i32 0, i32 37
  %4718 = load i32, ptr %4717, align 4, !tbaa !82
  %4719 = sext i32 %4718 to i64
  %4720 = getelementptr inbounds double, ptr %4715, i64 %4719
  %4721 = load double, ptr %4720, align 8, !tbaa !5
  %4722 = load ptr, ptr %8, align 8, !tbaa !9
  %4723 = load ptr, ptr %30, align 8, !tbaa !9
  %4724 = getelementptr inbounds %struct.perturb_vector, ptr %4723, i32 0, i32 0
  %4725 = load i32, ptr %4724, align 8, !tbaa !52
  %4726 = load i32, ptr %12, align 4, !tbaa !15
  %4727 = add nsw i32 %4725, %4726
  %4728 = sext i32 %4727 to i64
  %4729 = getelementptr inbounds double, ptr %4722, i64 %4728
  %4730 = load double, ptr %4729, align 8, !tbaa !5
  %4731 = fmul double %4721, %4730
  %4732 = fneg double %4731
  %4733 = call double @llvm.fmuladd.f64(double %4682, double %4714, double %4732)
  %4734 = load ptr, ptr %9, align 8, !tbaa !9
  %4735 = load ptr, ptr %30, align 8, !tbaa !9
  %4736 = getelementptr inbounds %struct.perturb_vector, ptr %4735, i32 0, i32 0
  %4737 = load i32, ptr %4736, align 8, !tbaa !52
  %4738 = load i32, ptr %12, align 4, !tbaa !15
  %4739 = add nsw i32 %4737, %4738
  %4740 = sext i32 %4739 to i64
  %4741 = getelementptr inbounds double, ptr %4734, i64 %4740
  store double %4733, ptr %4741, align 8, !tbaa !5
  %4742 = load double, ptr %18, align 8, !tbaa !5
  %4743 = fneg double %4742
  %4744 = load ptr, ptr %8, align 8, !tbaa !9
  %4745 = load ptr, ptr %30, align 8, !tbaa !9
  %4746 = getelementptr inbounds %struct.perturb_vector, ptr %4745, i32 0, i32 5
  %4747 = load i32, ptr %4746, align 4, !tbaa !85
  %4748 = add nsw i32 %4747, 1
  %4749 = sext i32 %4748 to i64
  %4750 = getelementptr inbounds double, ptr %4744, i64 %4749
  %4751 = load double, ptr %4750, align 8, !tbaa !5
  %4752 = load ptr, ptr %27, align 8, !tbaa !9
  %4753 = load ptr, ptr %23, align 8, !tbaa !9
  %4754 = getelementptr inbounds %struct.thermo, ptr %4753, i32 0, i32 37
  %4755 = load i32, ptr %4754, align 4, !tbaa !82
  %4756 = sext i32 %4755 to i64
  %4757 = getelementptr inbounds double, ptr %4752, i64 %4756
  %4758 = load double, ptr %4757, align 8, !tbaa !5
  %4759 = load ptr, ptr %8, align 8, !tbaa !9
  %4760 = load ptr, ptr %30, align 8, !tbaa !9
  %4761 = getelementptr inbounds %struct.perturb_vector, ptr %4760, i32 0, i32 5
  %4762 = load i32, ptr %4761, align 4, !tbaa !85
  %4763 = sext i32 %4762 to i64
  %4764 = getelementptr inbounds double, ptr %4759, i64 %4763
  %4765 = load double, ptr %4764, align 8, !tbaa !5
  %4766 = load double, ptr %59, align 8, !tbaa !5
  %4767 = call double @llvm.fmuladd.f64(double 0xC003988E1409212E, double %4766, double %4765)
  %4768 = fmul double %4758, %4767
  %4769 = fneg double %4768
  %4770 = call double @llvm.fmuladd.f64(double %4743, double %4751, double %4769)
  %4771 = load ptr, ptr %9, align 8, !tbaa !9
  %4772 = load ptr, ptr %30, align 8, !tbaa !9
  %4773 = getelementptr inbounds %struct.perturb_vector, ptr %4772, i32 0, i32 5
  %4774 = load i32, ptr %4773, align 4, !tbaa !85
  %4775 = sext i32 %4774 to i64
  %4776 = getelementptr inbounds double, ptr %4771, i64 %4775
  store double %4770, ptr %4776, align 8, !tbaa !5
  store i32 1, ptr %12, align 4, !tbaa !15
  br label %4777

4777:                                             ; preds = %4857, %4678
  %4778 = load i32, ptr %12, align 4, !tbaa !15
  %4779 = load ptr, ptr %30, align 8, !tbaa !9
  %4780 = getelementptr inbounds %struct.perturb_vector, ptr %4779, i32 0, i32 9
  %4781 = load i32, ptr %4780, align 4, !tbaa !93
  %4782 = icmp slt i32 %4778, %4781
  br i1 %4782, label %4783, label %4860

4783:                                             ; preds = %4777
  %4784 = load double, ptr %18, align 8, !tbaa !5
  %4785 = load i32, ptr %12, align 4, !tbaa !15
  %4786 = sitofp i32 %4785 to double
  %4787 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %4786, double 1.000000e+00)
  %4788 = fdiv double %4784, %4787
  %4789 = load i32, ptr %12, align 4, !tbaa !15
  %4790 = sitofp i32 %4789 to double
  %4791 = load ptr, ptr %29, align 8, !tbaa !9
  %4792 = load i32, ptr %12, align 4, !tbaa !15
  %4793 = sext i32 %4792 to i64
  %4794 = getelementptr inbounds double, ptr %4791, i64 %4793
  %4795 = load double, ptr %4794, align 8, !tbaa !5
  %4796 = fmul double %4790, %4795
  %4797 = load ptr, ptr %8, align 8, !tbaa !9
  %4798 = load ptr, ptr %30, align 8, !tbaa !9
  %4799 = getelementptr inbounds %struct.perturb_vector, ptr %4798, i32 0, i32 5
  %4800 = load i32, ptr %4799, align 4, !tbaa !85
  %4801 = load i32, ptr %12, align 4, !tbaa !15
  %4802 = add nsw i32 %4800, %4801
  %4803 = sub nsw i32 %4802, 1
  %4804 = sext i32 %4803 to i64
  %4805 = getelementptr inbounds double, ptr %4797, i64 %4804
  %4806 = load double, ptr %4805, align 8, !tbaa !5
  %4807 = load i32, ptr %12, align 4, !tbaa !15
  %4808 = sitofp i32 %4807 to double
  %4809 = fadd double %4808, 1.000000e+00
  %4810 = load ptr, ptr %29, align 8, !tbaa !9
  %4811 = load i32, ptr %12, align 4, !tbaa !15
  %4812 = add nsw i32 %4811, 1
  %4813 = sext i32 %4812 to i64
  %4814 = getelementptr inbounds double, ptr %4810, i64 %4813
  %4815 = load double, ptr %4814, align 8, !tbaa !5
  %4816 = fmul double %4809, %4815
  %4817 = load ptr, ptr %8, align 8, !tbaa !9
  %4818 = load ptr, ptr %30, align 8, !tbaa !9
  %4819 = getelementptr inbounds %struct.perturb_vector, ptr %4818, i32 0, i32 5
  %4820 = load i32, ptr %4819, align 4, !tbaa !85
  %4821 = load i32, ptr %12, align 4, !tbaa !15
  %4822 = add nsw i32 %4820, %4821
  %4823 = add nsw i32 %4822, 1
  %4824 = sext i32 %4823 to i64
  %4825 = getelementptr inbounds double, ptr %4817, i64 %4824
  %4826 = load double, ptr %4825, align 8, !tbaa !5
  %4827 = fmul double %4816, %4826
  %4828 = fneg double %4827
  %4829 = call double @llvm.fmuladd.f64(double %4796, double %4806, double %4828)
  %4830 = load ptr, ptr %27, align 8, !tbaa !9
  %4831 = load ptr, ptr %23, align 8, !tbaa !9
  %4832 = getelementptr inbounds %struct.thermo, ptr %4831, i32 0, i32 37
  %4833 = load i32, ptr %4832, align 4, !tbaa !82
  %4834 = sext i32 %4833 to i64
  %4835 = getelementptr inbounds double, ptr %4830, i64 %4834
  %4836 = load double, ptr %4835, align 8, !tbaa !5
  %4837 = load ptr, ptr %8, align 8, !tbaa !9
  %4838 = load ptr, ptr %30, align 8, !tbaa !9
  %4839 = getelementptr inbounds %struct.perturb_vector, ptr %4838, i32 0, i32 5
  %4840 = load i32, ptr %4839, align 4, !tbaa !85
  %4841 = load i32, ptr %12, align 4, !tbaa !15
  %4842 = add nsw i32 %4840, %4841
  %4843 = sext i32 %4842 to i64
  %4844 = getelementptr inbounds double, ptr %4837, i64 %4843
  %4845 = load double, ptr %4844, align 8, !tbaa !5
  %4846 = fmul double %4836, %4845
  %4847 = fneg double %4846
  %4848 = call double @llvm.fmuladd.f64(double %4788, double %4829, double %4847)
  %4849 = load ptr, ptr %9, align 8, !tbaa !9
  %4850 = load ptr, ptr %30, align 8, !tbaa !9
  %4851 = getelementptr inbounds %struct.perturb_vector, ptr %4850, i32 0, i32 5
  %4852 = load i32, ptr %4851, align 4, !tbaa !85
  %4853 = load i32, ptr %12, align 4, !tbaa !15
  %4854 = add nsw i32 %4852, %4853
  %4855 = sext i32 %4854 to i64
  %4856 = getelementptr inbounds double, ptr %4849, i64 %4855
  store double %4848, ptr %4856, align 8, !tbaa !5
  br label %4857

4857:                                             ; preds = %4783
  %4858 = load i32, ptr %12, align 4, !tbaa !15
  %4859 = add nsw i32 %4858, 1
  store i32 %4859, ptr %12, align 4, !tbaa !15
  br label %4777, !llvm.loop !173

4860:                                             ; preds = %4777
  %4861 = load ptr, ptr %30, align 8, !tbaa !9
  %4862 = getelementptr inbounds %struct.perturb_vector, ptr %4861, i32 0, i32 9
  %4863 = load i32, ptr %4862, align 4, !tbaa !93
  store i32 %4863, ptr %12, align 4, !tbaa !15
  %4864 = load double, ptr %18, align 8, !tbaa !5
  %4865 = load ptr, ptr %29, align 8, !tbaa !9
  %4866 = load i32, ptr %12, align 4, !tbaa !15
  %4867 = sext i32 %4866 to i64
  %4868 = getelementptr inbounds double, ptr %4865, i64 %4867
  %4869 = load double, ptr %4868, align 8, !tbaa !5
  %4870 = load ptr, ptr %8, align 8, !tbaa !9
  %4871 = load ptr, ptr %30, align 8, !tbaa !9
  %4872 = getelementptr inbounds %struct.perturb_vector, ptr %4871, i32 0, i32 5
  %4873 = load i32, ptr %4872, align 4, !tbaa !85
  %4874 = load i32, ptr %12, align 4, !tbaa !15
  %4875 = add nsw i32 %4873, %4874
  %4876 = sub nsw i32 %4875, 1
  %4877 = sext i32 %4876 to i64
  %4878 = getelementptr inbounds double, ptr %4870, i64 %4877
  %4879 = load double, ptr %4878, align 8, !tbaa !5
  %4880 = load i32, ptr %12, align 4, !tbaa !15
  %4881 = sitofp i32 %4880 to double
  %4882 = fadd double %4881, 1.000000e+00
  %4883 = load double, ptr %79, align 8, !tbaa !5
  %4884 = fmul double %4882, %4883
  %4885 = load ptr, ptr %8, align 8, !tbaa !9
  %4886 = load ptr, ptr %30, align 8, !tbaa !9
  %4887 = getelementptr inbounds %struct.perturb_vector, ptr %4886, i32 0, i32 5
  %4888 = load i32, ptr %4887, align 4, !tbaa !85
  %4889 = load i32, ptr %12, align 4, !tbaa !15
  %4890 = add nsw i32 %4888, %4889
  %4891 = sext i32 %4890 to i64
  %4892 = getelementptr inbounds double, ptr %4885, i64 %4891
  %4893 = load double, ptr %4892, align 8, !tbaa !5
  %4894 = fmul double %4884, %4893
  %4895 = fneg double %4894
  %4896 = call double @llvm.fmuladd.f64(double %4869, double %4879, double %4895)
  %4897 = load ptr, ptr %27, align 8, !tbaa !9
  %4898 = load ptr, ptr %23, align 8, !tbaa !9
  %4899 = getelementptr inbounds %struct.thermo, ptr %4898, i32 0, i32 37
  %4900 = load i32, ptr %4899, align 4, !tbaa !82
  %4901 = sext i32 %4900 to i64
  %4902 = getelementptr inbounds double, ptr %4897, i64 %4901
  %4903 = load double, ptr %4902, align 8, !tbaa !5
  %4904 = load ptr, ptr %8, align 8, !tbaa !9
  %4905 = load ptr, ptr %30, align 8, !tbaa !9
  %4906 = getelementptr inbounds %struct.perturb_vector, ptr %4905, i32 0, i32 5
  %4907 = load i32, ptr %4906, align 4, !tbaa !85
  %4908 = load i32, ptr %12, align 4, !tbaa !15
  %4909 = add nsw i32 %4907, %4908
  %4910 = sext i32 %4909 to i64
  %4911 = getelementptr inbounds double, ptr %4904, i64 %4910
  %4912 = load double, ptr %4911, align 8, !tbaa !5
  %4913 = fmul double %4903, %4912
  %4914 = fneg double %4913
  %4915 = call double @llvm.fmuladd.f64(double %4864, double %4896, double %4914)
  %4916 = load ptr, ptr %9, align 8, !tbaa !9
  %4917 = load ptr, ptr %30, align 8, !tbaa !9
  %4918 = getelementptr inbounds %struct.perturb_vector, ptr %4917, i32 0, i32 5
  %4919 = load i32, ptr %4918, align 4, !tbaa !85
  %4920 = load i32, ptr %12, align 4, !tbaa !15
  %4921 = add nsw i32 %4919, %4920
  %4922 = sext i32 %4921 to i64
  %4923 = getelementptr inbounds double, ptr %4916, i64 %4922
  store double %4915, ptr %4923, align 8, !tbaa !5
  %4924 = load ptr, ptr %24, align 8, !tbaa !9
  %4925 = getelementptr inbounds %struct.perturbs, ptr %4924, i32 0, i32 55
  %4926 = load i32, ptr %4925, align 8, !tbaa !73
  %4927 = icmp eq i32 %4926, 1
  br i1 %4927, label %4928, label %4942

4928:                                             ; preds = %4860
  %4929 = load ptr, ptr %28, align 8, !tbaa !9
  %4930 = load ptr, ptr %25, align 8, !tbaa !9
  %4931 = getelementptr inbounds %struct.perturb_workspace, ptr %4930, i32 0, i32 9
  %4932 = load i32, ptr %4931, align 4, !tbaa !174
  %4933 = sext i32 %4932 to i64
  %4934 = getelementptr inbounds double, ptr %4929, i64 %4933
  %4935 = load double, ptr %4934, align 8, !tbaa !5
  %4936 = load ptr, ptr %9, align 8, !tbaa !9
  %4937 = load ptr, ptr %30, align 8, !tbaa !9
  %4938 = getelementptr inbounds %struct.perturb_vector, ptr %4937, i32 0, i32 43
  %4939 = load i32, ptr %4938, align 8, !tbaa !171
  %4940 = sext i32 %4939 to i64
  %4941 = getelementptr inbounds double, ptr %4936, i64 %4940
  store double %4935, ptr %4941, align 8, !tbaa !5
  br label %4962

4942:                                             ; preds = %4860
  %4943 = load ptr, ptr %24, align 8, !tbaa !9
  %4944 = getelementptr inbounds %struct.perturbs, ptr %4943, i32 0, i32 55
  %4945 = load i32, ptr %4944, align 8, !tbaa !73
  %4946 = icmp eq i32 %4945, 0
  br i1 %4946, label %4947, label %4961

4947:                                             ; preds = %4942
  %4948 = load ptr, ptr %28, align 8, !tbaa !9
  %4949 = load ptr, ptr %25, align 8, !tbaa !9
  %4950 = getelementptr inbounds %struct.perturb_workspace, ptr %4949, i32 0, i32 8
  %4951 = load i32, ptr %4950, align 8, !tbaa !169
  %4952 = sext i32 %4951 to i64
  %4953 = getelementptr inbounds double, ptr %4948, i64 %4952
  %4954 = load double, ptr %4953, align 8, !tbaa !5
  %4955 = load ptr, ptr %9, align 8, !tbaa !9
  %4956 = load ptr, ptr %30, align 8, !tbaa !9
  %4957 = getelementptr inbounds %struct.perturb_vector, ptr %4956, i32 0, i32 44
  %4958 = load i32, ptr %4957, align 4, !tbaa !170
  %4959 = sext i32 %4958 to i64
  %4960 = getelementptr inbounds double, ptr %4955, i64 %4959
  store double %4954, ptr %4960, align 8, !tbaa !5
  br label %4961

4961:                                             ; preds = %4947, %4942
  br label %4962

4962:                                             ; preds = %4961, %4928
  br label %4963

4963:                                             ; preds = %4962, %4181, %4175
  %4964 = load ptr, ptr %24, align 8, !tbaa !9
  %4965 = getelementptr inbounds %struct.perturbs, ptr %4964, i32 0, i32 4
  %4966 = load i16, ptr %4965, align 8, !tbaa !175
  %4967 = sext i16 %4966 to i32
  %4968 = icmp eq i32 %4967, 1
  br i1 %4968, label %4969, label %6019

4969:                                             ; preds = %4963
  %4970 = load i32, ptr %20, align 4, !tbaa !15
  %4971 = load ptr, ptr %24, align 8, !tbaa !9
  %4972 = getelementptr inbounds %struct.perturbs, ptr %4971, i32 0, i32 57
  %4973 = load i32, ptr %4972, align 8, !tbaa !176
  %4974 = icmp eq i32 %4970, %4973
  br i1 %4974, label %4975, label %6019

4975:                                             ; preds = %4969
  %4976 = load ptr, ptr %25, align 8, !tbaa !9
  %4977 = getelementptr inbounds %struct.perturb_workspace, ptr %4976, i32 0, i32 56
  %4978 = load ptr, ptr %4977, align 8, !tbaa !50
  %4979 = load ptr, ptr %25, align 8, !tbaa !9
  %4980 = getelementptr inbounds %struct.perturb_workspace, ptr %4979, i32 0, i32 50
  %4981 = load i32, ptr %4980, align 4, !tbaa !51
  %4982 = sext i32 %4981 to i64
  %4983 = getelementptr inbounds i32, ptr %4978, i64 %4982
  %4984 = load i32, ptr %4983, align 4, !tbaa !15
  %4985 = icmp eq i32 %4984, 0
  br i1 %4985, label %4986, label %5525

4986:                                             ; preds = %4975
  %4987 = load ptr, ptr %25, align 8, !tbaa !9
  %4988 = getelementptr inbounds %struct.perturb_workspace, ptr %4987, i32 0, i32 56
  %4989 = load ptr, ptr %4988, align 8, !tbaa !50
  %4990 = load ptr, ptr %25, align 8, !tbaa !9
  %4991 = getelementptr inbounds %struct.perturb_workspace, ptr %4990, i32 0, i32 49
  %4992 = load i32, ptr %4991, align 8, !tbaa !63
  %4993 = sext i32 %4992 to i64
  %4994 = getelementptr inbounds i32, ptr %4989, i64 %4993
  %4995 = load i32, ptr %4994, align 4, !tbaa !15
  %4996 = icmp eq i32 %4995, 1
  br i1 %4996, label %4997, label %5524

4997:                                             ; preds = %4986
  %4998 = load ptr, ptr %8, align 8, !tbaa !9
  %4999 = load ptr, ptr %30, align 8, !tbaa !9
  %5000 = getelementptr inbounds %struct.perturb_vector, ptr %4999, i32 0, i32 0
  %5001 = load i32, ptr %5000, align 8, !tbaa !52
  %5002 = sext i32 %5001 to i64
  %5003 = getelementptr inbounds double, ptr %4998, i64 %5002
  %5004 = load double, ptr %5003, align 8, !tbaa !5
  store double %5004, ptr %31, align 8, !tbaa !5
  %5005 = load ptr, ptr %8, align 8, !tbaa !9
  %5006 = load ptr, ptr %30, align 8, !tbaa !9
  %5007 = getelementptr inbounds %struct.perturb_vector, ptr %5006, i32 0, i32 1
  %5008 = load i32, ptr %5007, align 4, !tbaa !54
  %5009 = sext i32 %5008 to i64
  %5010 = getelementptr inbounds double, ptr %5005, i64 %5009
  %5011 = load double, ptr %5010, align 8, !tbaa !5
  store double %5011, ptr %32, align 8, !tbaa !5
  %5012 = load ptr, ptr %8, align 8, !tbaa !9
  %5013 = load ptr, ptr %30, align 8, !tbaa !9
  %5014 = getelementptr inbounds %struct.perturb_vector, ptr %5013, i32 0, i32 2
  %5015 = load i32, ptr %5014, align 8, !tbaa !87
  %5016 = sext i32 %5015 to i64
  %5017 = getelementptr inbounds double, ptr %5012, i64 %5016
  %5018 = load double, ptr %5017, align 8, !tbaa !5
  store double %5018, ptr %33, align 8, !tbaa !5
  %5019 = load double, ptr %31, align 8, !tbaa !5
  %5020 = load double, ptr %33, align 8, !tbaa !5
  %5021 = fmul double 0x3FD2492492492492, %5020
  %5022 = call double @llvm.fmuladd.f64(double 1.000000e-01, double %5019, double %5021)
  %5023 = load ptr, ptr %8, align 8, !tbaa !9
  %5024 = load ptr, ptr %30, align 8, !tbaa !9
  %5025 = getelementptr inbounds %struct.perturb_vector, ptr %5024, i32 0, i32 0
  %5026 = load i32, ptr %5025, align 8, !tbaa !52
  %5027 = add nsw i32 %5026, 4
  %5028 = sext i32 %5027 to i64
  %5029 = getelementptr inbounds double, ptr %5023, i64 %5028
  %5030 = load double, ptr %5029, align 8, !tbaa !5
  %5031 = call double @llvm.fmuladd.f64(double 0x3FA5F15F15F15F16, double %5030, double %5022)
  %5032 = load ptr, ptr %8, align 8, !tbaa !9
  %5033 = load ptr, ptr %30, align 8, !tbaa !9
  %5034 = getelementptr inbounds %struct.perturb_vector, ptr %5033, i32 0, i32 5
  %5035 = load i32, ptr %5034, align 4, !tbaa !85
  %5036 = sext i32 %5035 to i64
  %5037 = getelementptr inbounds double, ptr %5032, i64 %5036
  %5038 = load double, ptr %5037, align 8, !tbaa !5
  %5039 = call double @llvm.fmuladd.f64(double -6.000000e-01, double %5038, double %5031)
  %5040 = load ptr, ptr %8, align 8, !tbaa !9
  %5041 = load ptr, ptr %30, align 8, !tbaa !9
  %5042 = getelementptr inbounds %struct.perturb_vector, ptr %5041, i32 0, i32 7
  %5043 = load i32, ptr %5042, align 4, !tbaa !86
  %5044 = sext i32 %5043 to i64
  %5045 = getelementptr inbounds double, ptr %5040, i64 %5044
  %5046 = load double, ptr %5045, align 8, !tbaa !5
  %5047 = call double @llvm.fmuladd.f64(double 0x3FEB6DB6DB6DB6DB, double %5046, double %5039)
  %5048 = load ptr, ptr %8, align 8, !tbaa !9
  %5049 = load ptr, ptr %30, align 8, !tbaa !9
  %5050 = getelementptr inbounds %struct.perturb_vector, ptr %5049, i32 0, i32 5
  %5051 = load i32, ptr %5050, align 4, !tbaa !85
  %5052 = add nsw i32 %5051, 4
  %5053 = sext i32 %5052 to i64
  %5054 = getelementptr inbounds double, ptr %5048, i64 %5053
  %5055 = load double, ptr %5054, align 8, !tbaa !5
  %5056 = call double @llvm.fmuladd.f64(double 0xBFA5F15F15F15F16, double %5055, double %5047)
  %5057 = fmul double 0xBFDA20BD700C2C3F, %5056
  store double %5057, ptr %60, align 8, !tbaa !5
  %5058 = load double, ptr %32, align 8, !tbaa !5
  %5059 = load ptr, ptr %27, align 8, !tbaa !9
  %5060 = load ptr, ptr %23, align 8, !tbaa !9
  %5061 = getelementptr inbounds %struct.thermo, ptr %5060, i32 0, i32 37
  %5062 = load i32, ptr %5061, align 4, !tbaa !82
  %5063 = sext i32 %5062 to i64
  %5064 = getelementptr inbounds double, ptr %5059, i64 %5063
  %5065 = load double, ptr %5064, align 8, !tbaa !5
  %5066 = load double, ptr %31, align 8, !tbaa !5
  %5067 = load double, ptr %60, align 8, !tbaa !5
  %5068 = call double @llvm.fmuladd.f64(double 0x4003988E1409212E, double %5067, double %5066)
  %5069 = fmul double %5065, %5068
  %5070 = fneg double %5069
  %5071 = call double @llvm.fmuladd.f64(double 0xBFF5555555555555, double %5058, double %5070)
  %5072 = load ptr, ptr %8, align 8, !tbaa !9
  %5073 = load ptr, ptr %30, align 8, !tbaa !9
  %5074 = getelementptr inbounds %struct.perturb_vector, ptr %5073, i32 0, i32 46
  %5075 = load i32, ptr %5074, align 4, !tbaa !177
  %5076 = sext i32 %5075 to i64
  %5077 = getelementptr inbounds double, ptr %5072, i64 %5076
  %5078 = load double, ptr %5077, align 8, !tbaa !5
  %5079 = call double @llvm.fmuladd.f64(double 0x4003988E1409212E, double %5078, double %5071)
  %5080 = load ptr, ptr %9, align 8, !tbaa !9
  %5081 = load ptr, ptr %30, align 8, !tbaa !9
  %5082 = getelementptr inbounds %struct.perturb_vector, ptr %5081, i32 0, i32 0
  %5083 = load i32, ptr %5082, align 8, !tbaa !52
  %5084 = sext i32 %5083 to i64
  %5085 = getelementptr inbounds double, ptr %5080, i64 %5084
  store double %5079, ptr %5085, align 8, !tbaa !5
  %5086 = load double, ptr %19, align 8, !tbaa !5
  %5087 = load double, ptr %31, align 8, !tbaa !5
  %5088 = fdiv double %5087, 4.000000e+00
  %5089 = load ptr, ptr %29, align 8, !tbaa !9
  %5090 = getelementptr inbounds double, ptr %5089, i64 2
  %5091 = load double, ptr %5090, align 8, !tbaa !5
  %5092 = load double, ptr %33, align 8, !tbaa !5
  %5093 = fneg double %5091
  %5094 = call double @llvm.fmuladd.f64(double %5093, double %5092, double %5088)
  %5095 = load ptr, ptr %27, align 8, !tbaa !9
  %5096 = load ptr, ptr %23, align 8, !tbaa !9
  %5097 = getelementptr inbounds %struct.thermo, ptr %5096, i32 0, i32 37
  %5098 = load i32, ptr %5097, align 4, !tbaa !82
  %5099 = sext i32 %5098 to i64
  %5100 = getelementptr inbounds double, ptr %5095, i64 %5099
  %5101 = load double, ptr %5100, align 8, !tbaa !5
  %5102 = load double, ptr %32, align 8, !tbaa !5
  %5103 = fmul double %5101, %5102
  %5104 = fneg double %5103
  %5105 = call double @llvm.fmuladd.f64(double %5086, double %5094, double %5104)
  %5106 = load ptr, ptr %9, align 8, !tbaa !9
  %5107 = load ptr, ptr %30, align 8, !tbaa !9
  %5108 = getelementptr inbounds %struct.perturb_vector, ptr %5107, i32 0, i32 1
  %5109 = load i32, ptr %5108, align 4, !tbaa !54
  %5110 = sext i32 %5109 to i64
  %5111 = getelementptr inbounds double, ptr %5106, i64 %5110
  store double %5105, ptr %5111, align 8, !tbaa !5
  %5112 = load ptr, ptr %29, align 8, !tbaa !9
  %5113 = getelementptr inbounds double, ptr %5112, i64 2
  %5114 = load double, ptr %5113, align 8, !tbaa !5
  %5115 = fmul double 0x3FD1111111111111, %5114
  %5116 = load double, ptr %32, align 8, !tbaa !5
  %5117 = load double, ptr %18, align 8, !tbaa !5
  %5118 = fmul double 3.000000e-01, %5117
  %5119 = load ptr, ptr %29, align 8, !tbaa !9
  %5120 = getelementptr inbounds double, ptr %5119, i64 3
  %5121 = load double, ptr %5120, align 8, !tbaa !5
  %5122 = fmul double %5118, %5121
  %5123 = load ptr, ptr %8, align 8, !tbaa !9
  %5124 = load ptr, ptr %30, align 8, !tbaa !9
  %5125 = getelementptr inbounds %struct.perturb_vector, ptr %5124, i32 0, i32 2
  %5126 = load i32, ptr %5125, align 8, !tbaa !87
  %5127 = add nsw i32 %5126, 1
  %5128 = sext i32 %5127 to i64
  %5129 = getelementptr inbounds double, ptr %5123, i64 %5128
  %5130 = load double, ptr %5129, align 8, !tbaa !5
  %5131 = fmul double %5122, %5130
  %5132 = fneg double %5131
  %5133 = call double @llvm.fmuladd.f64(double %5115, double %5116, double %5132)
  %5134 = load ptr, ptr %27, align 8, !tbaa !9
  %5135 = load ptr, ptr %23, align 8, !tbaa !9
  %5136 = getelementptr inbounds %struct.thermo, ptr %5135, i32 0, i32 37
  %5137 = load i32, ptr %5136, align 4, !tbaa !82
  %5138 = sext i32 %5137 to i64
  %5139 = getelementptr inbounds double, ptr %5134, i64 %5138
  %5140 = load double, ptr %5139, align 8, !tbaa !5
  %5141 = load double, ptr %33, align 8, !tbaa !5
  %5142 = fneg double %5140
  %5143 = call double @llvm.fmuladd.f64(double %5142, double %5141, double %5133)
  %5144 = load ptr, ptr %9, align 8, !tbaa !9
  %5145 = load ptr, ptr %30, align 8, !tbaa !9
  %5146 = getelementptr inbounds %struct.perturb_vector, ptr %5145, i32 0, i32 2
  %5147 = load i32, ptr %5146, align 8, !tbaa !87
  %5148 = sext i32 %5147 to i64
  %5149 = getelementptr inbounds double, ptr %5144, i64 %5148
  store double %5143, ptr %5149, align 8, !tbaa !5
  %5150 = load double, ptr %18, align 8, !tbaa !5
  %5151 = fdiv double %5150, 7.000000e+00
  %5152 = load ptr, ptr %29, align 8, !tbaa !9
  %5153 = getelementptr inbounds double, ptr %5152, i64 3
  %5154 = load double, ptr %5153, align 8, !tbaa !5
  %5155 = fmul double 6.000000e+00, %5154
  %5156 = load double, ptr %33, align 8, !tbaa !5
  %5157 = load ptr, ptr %29, align 8, !tbaa !9
  %5158 = getelementptr inbounds double, ptr %5157, i64 4
  %5159 = load double, ptr %5158, align 8, !tbaa !5
  %5160 = fmul double 4.000000e+00, %5159
  %5161 = load ptr, ptr %8, align 8, !tbaa !9
  %5162 = load ptr, ptr %30, align 8, !tbaa !9
  %5163 = getelementptr inbounds %struct.perturb_vector, ptr %5162, i32 0, i32 3
  %5164 = load i32, ptr %5163, align 4, !tbaa !88
  %5165 = add nsw i32 %5164, 1
  %5166 = sext i32 %5165 to i64
  %5167 = getelementptr inbounds double, ptr %5161, i64 %5166
  %5168 = load double, ptr %5167, align 8, !tbaa !5
  %5169 = fmul double %5160, %5168
  %5170 = fneg double %5169
  %5171 = call double @llvm.fmuladd.f64(double %5155, double %5156, double %5170)
  %5172 = load ptr, ptr %27, align 8, !tbaa !9
  %5173 = load ptr, ptr %23, align 8, !tbaa !9
  %5174 = getelementptr inbounds %struct.thermo, ptr %5173, i32 0, i32 37
  %5175 = load i32, ptr %5174, align 4, !tbaa !82
  %5176 = sext i32 %5175 to i64
  %5177 = getelementptr inbounds double, ptr %5172, i64 %5176
  %5178 = load double, ptr %5177, align 8, !tbaa !5
  %5179 = load ptr, ptr %8, align 8, !tbaa !9
  %5180 = load ptr, ptr %30, align 8, !tbaa !9
  %5181 = getelementptr inbounds %struct.perturb_vector, ptr %5180, i32 0, i32 3
  %5182 = load i32, ptr %5181, align 4, !tbaa !88
  %5183 = sext i32 %5182 to i64
  %5184 = getelementptr inbounds double, ptr %5179, i64 %5183
  %5185 = load double, ptr %5184, align 8, !tbaa !5
  %5186 = fmul double %5178, %5185
  %5187 = fneg double %5186
  %5188 = call double @llvm.fmuladd.f64(double %5151, double %5171, double %5187)
  %5189 = load ptr, ptr %9, align 8, !tbaa !9
  %5190 = load ptr, ptr %30, align 8, !tbaa !9
  %5191 = getelementptr inbounds %struct.perturb_vector, ptr %5190, i32 0, i32 3
  %5192 = load i32, ptr %5191, align 4, !tbaa !88
  %5193 = sext i32 %5192 to i64
  %5194 = getelementptr inbounds double, ptr %5189, i64 %5193
  store double %5188, ptr %5194, align 8, !tbaa !5
  store i32 4, ptr %12, align 4, !tbaa !15
  br label %5195

5195:                                             ; preds = %5275, %4997
  %5196 = load i32, ptr %12, align 4, !tbaa !15
  %5197 = load ptr, ptr %30, align 8, !tbaa !9
  %5198 = getelementptr inbounds %struct.perturb_vector, ptr %5197, i32 0, i32 4
  %5199 = load i32, ptr %5198, align 8, !tbaa !89
  %5200 = icmp slt i32 %5196, %5199
  br i1 %5200, label %5201, label %5278

5201:                                             ; preds = %5195
  %5202 = load double, ptr %18, align 8, !tbaa !5
  %5203 = load i32, ptr %12, align 4, !tbaa !15
  %5204 = sitofp i32 %5203 to double
  %5205 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %5204, double 1.000000e+00)
  %5206 = fdiv double %5202, %5205
  %5207 = load i32, ptr %12, align 4, !tbaa !15
  %5208 = sitofp i32 %5207 to double
  %5209 = load ptr, ptr %29, align 8, !tbaa !9
  %5210 = load i32, ptr %12, align 4, !tbaa !15
  %5211 = sext i32 %5210 to i64
  %5212 = getelementptr inbounds double, ptr %5209, i64 %5211
  %5213 = load double, ptr %5212, align 8, !tbaa !5
  %5214 = fmul double %5208, %5213
  %5215 = load ptr, ptr %8, align 8, !tbaa !9
  %5216 = load ptr, ptr %30, align 8, !tbaa !9
  %5217 = getelementptr inbounds %struct.perturb_vector, ptr %5216, i32 0, i32 0
  %5218 = load i32, ptr %5217, align 8, !tbaa !52
  %5219 = load i32, ptr %12, align 4, !tbaa !15
  %5220 = add nsw i32 %5218, %5219
  %5221 = sub nsw i32 %5220, 1
  %5222 = sext i32 %5221 to i64
  %5223 = getelementptr inbounds double, ptr %5215, i64 %5222
  %5224 = load double, ptr %5223, align 8, !tbaa !5
  %5225 = load i32, ptr %12, align 4, !tbaa !15
  %5226 = sitofp i32 %5225 to double
  %5227 = fadd double %5226, 1.000000e+00
  %5228 = load ptr, ptr %29, align 8, !tbaa !9
  %5229 = load i32, ptr %12, align 4, !tbaa !15
  %5230 = add nsw i32 %5229, 1
  %5231 = sext i32 %5230 to i64
  %5232 = getelementptr inbounds double, ptr %5228, i64 %5231
  %5233 = load double, ptr %5232, align 8, !tbaa !5
  %5234 = fmul double %5227, %5233
  %5235 = load ptr, ptr %8, align 8, !tbaa !9
  %5236 = load ptr, ptr %30, align 8, !tbaa !9
  %5237 = getelementptr inbounds %struct.perturb_vector, ptr %5236, i32 0, i32 0
  %5238 = load i32, ptr %5237, align 8, !tbaa !52
  %5239 = load i32, ptr %12, align 4, !tbaa !15
  %5240 = add nsw i32 %5238, %5239
  %5241 = add nsw i32 %5240, 1
  %5242 = sext i32 %5241 to i64
  %5243 = getelementptr inbounds double, ptr %5235, i64 %5242
  %5244 = load double, ptr %5243, align 8, !tbaa !5
  %5245 = fmul double %5234, %5244
  %5246 = fneg double %5245
  %5247 = call double @llvm.fmuladd.f64(double %5214, double %5224, double %5246)
  %5248 = load ptr, ptr %27, align 8, !tbaa !9
  %5249 = load ptr, ptr %23, align 8, !tbaa !9
  %5250 = getelementptr inbounds %struct.thermo, ptr %5249, i32 0, i32 37
  %5251 = load i32, ptr %5250, align 4, !tbaa !82
  %5252 = sext i32 %5251 to i64
  %5253 = getelementptr inbounds double, ptr %5248, i64 %5252
  %5254 = load double, ptr %5253, align 8, !tbaa !5
  %5255 = load ptr, ptr %8, align 8, !tbaa !9
  %5256 = load ptr, ptr %30, align 8, !tbaa !9
  %5257 = getelementptr inbounds %struct.perturb_vector, ptr %5256, i32 0, i32 0
  %5258 = load i32, ptr %5257, align 8, !tbaa !52
  %5259 = load i32, ptr %12, align 4, !tbaa !15
  %5260 = add nsw i32 %5258, %5259
  %5261 = sext i32 %5260 to i64
  %5262 = getelementptr inbounds double, ptr %5255, i64 %5261
  %5263 = load double, ptr %5262, align 8, !tbaa !5
  %5264 = fmul double %5254, %5263
  %5265 = fneg double %5264
  %5266 = call double @llvm.fmuladd.f64(double %5206, double %5247, double %5265)
  %5267 = load ptr, ptr %9, align 8, !tbaa !9
  %5268 = load ptr, ptr %30, align 8, !tbaa !9
  %5269 = getelementptr inbounds %struct.perturb_vector, ptr %5268, i32 0, i32 0
  %5270 = load i32, ptr %5269, align 8, !tbaa !52
  %5271 = load i32, ptr %12, align 4, !tbaa !15
  %5272 = add nsw i32 %5270, %5271
  %5273 = sext i32 %5272 to i64
  %5274 = getelementptr inbounds double, ptr %5267, i64 %5273
  store double %5266, ptr %5274, align 8, !tbaa !5
  br label %5275

5275:                                             ; preds = %5201
  %5276 = load i32, ptr %12, align 4, !tbaa !15
  %5277 = add nsw i32 %5276, 1
  store i32 %5277, ptr %12, align 4, !tbaa !15
  br label %5195, !llvm.loop !178

5278:                                             ; preds = %5195
  %5279 = load ptr, ptr %30, align 8, !tbaa !9
  %5280 = getelementptr inbounds %struct.perturb_vector, ptr %5279, i32 0, i32 4
  %5281 = load i32, ptr %5280, align 8, !tbaa !89
  store i32 %5281, ptr %12, align 4, !tbaa !15
  %5282 = load double, ptr %18, align 8, !tbaa !5
  %5283 = load ptr, ptr %29, align 8, !tbaa !9
  %5284 = load i32, ptr %12, align 4, !tbaa !15
  %5285 = sext i32 %5284 to i64
  %5286 = getelementptr inbounds double, ptr %5283, i64 %5285
  %5287 = load double, ptr %5286, align 8, !tbaa !5
  %5288 = load ptr, ptr %8, align 8, !tbaa !9
  %5289 = load ptr, ptr %30, align 8, !tbaa !9
  %5290 = getelementptr inbounds %struct.perturb_vector, ptr %5289, i32 0, i32 0
  %5291 = load i32, ptr %5290, align 8, !tbaa !52
  %5292 = load i32, ptr %12, align 4, !tbaa !15
  %5293 = add nsw i32 %5291, %5292
  %5294 = sub nsw i32 %5293, 1
  %5295 = sext i32 %5294 to i64
  %5296 = getelementptr inbounds double, ptr %5288, i64 %5295
  %5297 = load double, ptr %5296, align 8, !tbaa !5
  %5298 = load i32, ptr %12, align 4, !tbaa !15
  %5299 = sitofp i32 %5298 to double
  %5300 = fadd double 1.000000e+00, %5299
  %5301 = load double, ptr %79, align 8, !tbaa !5
  %5302 = fmul double %5300, %5301
  %5303 = load ptr, ptr %8, align 8, !tbaa !9
  %5304 = load ptr, ptr %30, align 8, !tbaa !9
  %5305 = getelementptr inbounds %struct.perturb_vector, ptr %5304, i32 0, i32 0
  %5306 = load i32, ptr %5305, align 8, !tbaa !52
  %5307 = load i32, ptr %12, align 4, !tbaa !15
  %5308 = add nsw i32 %5306, %5307
  %5309 = sext i32 %5308 to i64
  %5310 = getelementptr inbounds double, ptr %5303, i64 %5309
  %5311 = load double, ptr %5310, align 8, !tbaa !5
  %5312 = fmul double %5302, %5311
  %5313 = fneg double %5312
  %5314 = call double @llvm.fmuladd.f64(double %5287, double %5297, double %5313)
  %5315 = load ptr, ptr %27, align 8, !tbaa !9
  %5316 = load ptr, ptr %23, align 8, !tbaa !9
  %5317 = getelementptr inbounds %struct.thermo, ptr %5316, i32 0, i32 37
  %5318 = load i32, ptr %5317, align 4, !tbaa !82
  %5319 = sext i32 %5318 to i64
  %5320 = getelementptr inbounds double, ptr %5315, i64 %5319
  %5321 = load double, ptr %5320, align 8, !tbaa !5
  %5322 = load ptr, ptr %8, align 8, !tbaa !9
  %5323 = load ptr, ptr %30, align 8, !tbaa !9
  %5324 = getelementptr inbounds %struct.perturb_vector, ptr %5323, i32 0, i32 0
  %5325 = load i32, ptr %5324, align 8, !tbaa !52
  %5326 = load i32, ptr %12, align 4, !tbaa !15
  %5327 = add nsw i32 %5325, %5326
  %5328 = sext i32 %5327 to i64
  %5329 = getelementptr inbounds double, ptr %5322, i64 %5328
  %5330 = load double, ptr %5329, align 8, !tbaa !5
  %5331 = fmul double %5321, %5330
  %5332 = fneg double %5331
  %5333 = call double @llvm.fmuladd.f64(double %5282, double %5314, double %5332)
  %5334 = load ptr, ptr %9, align 8, !tbaa !9
  %5335 = load ptr, ptr %30, align 8, !tbaa !9
  %5336 = getelementptr inbounds %struct.perturb_vector, ptr %5335, i32 0, i32 0
  %5337 = load i32, ptr %5336, align 8, !tbaa !52
  %5338 = load i32, ptr %12, align 4, !tbaa !15
  %5339 = add nsw i32 %5337, %5338
  %5340 = sext i32 %5339 to i64
  %5341 = getelementptr inbounds double, ptr %5334, i64 %5340
  store double %5333, ptr %5341, align 8, !tbaa !5
  %5342 = load double, ptr %18, align 8, !tbaa !5
  %5343 = fneg double %5342
  %5344 = load ptr, ptr %8, align 8, !tbaa !9
  %5345 = load ptr, ptr %30, align 8, !tbaa !9
  %5346 = getelementptr inbounds %struct.perturb_vector, ptr %5345, i32 0, i32 5
  %5347 = load i32, ptr %5346, align 4, !tbaa !85
  %5348 = add nsw i32 %5347, 1
  %5349 = sext i32 %5348 to i64
  %5350 = getelementptr inbounds double, ptr %5344, i64 %5349
  %5351 = load double, ptr %5350, align 8, !tbaa !5
  %5352 = load ptr, ptr %27, align 8, !tbaa !9
  %5353 = load ptr, ptr %23, align 8, !tbaa !9
  %5354 = getelementptr inbounds %struct.thermo, ptr %5353, i32 0, i32 37
  %5355 = load i32, ptr %5354, align 4, !tbaa !82
  %5356 = sext i32 %5355 to i64
  %5357 = getelementptr inbounds double, ptr %5352, i64 %5356
  %5358 = load double, ptr %5357, align 8, !tbaa !5
  %5359 = load ptr, ptr %8, align 8, !tbaa !9
  %5360 = load ptr, ptr %30, align 8, !tbaa !9
  %5361 = getelementptr inbounds %struct.perturb_vector, ptr %5360, i32 0, i32 5
  %5362 = load i32, ptr %5361, align 4, !tbaa !85
  %5363 = sext i32 %5362 to i64
  %5364 = getelementptr inbounds double, ptr %5359, i64 %5363
  %5365 = load double, ptr %5364, align 8, !tbaa !5
  %5366 = load double, ptr %60, align 8, !tbaa !5
  %5367 = call double @llvm.fmuladd.f64(double 0xC003988E1409212E, double %5366, double %5365)
  %5368 = fmul double %5358, %5367
  %5369 = fneg double %5368
  %5370 = call double @llvm.fmuladd.f64(double %5343, double %5351, double %5369)
  %5371 = load ptr, ptr %9, align 8, !tbaa !9
  %5372 = load ptr, ptr %30, align 8, !tbaa !9
  %5373 = getelementptr inbounds %struct.perturb_vector, ptr %5372, i32 0, i32 5
  %5374 = load i32, ptr %5373, align 4, !tbaa !85
  %5375 = sext i32 %5374 to i64
  %5376 = getelementptr inbounds double, ptr %5371, i64 %5375
  store double %5370, ptr %5376, align 8, !tbaa !5
  store i32 1, ptr %12, align 4, !tbaa !15
  br label %5377

5377:                                             ; preds = %5457, %5278
  %5378 = load i32, ptr %12, align 4, !tbaa !15
  %5379 = load ptr, ptr %30, align 8, !tbaa !9
  %5380 = getelementptr inbounds %struct.perturb_vector, ptr %5379, i32 0, i32 9
  %5381 = load i32, ptr %5380, align 4, !tbaa !93
  %5382 = icmp slt i32 %5378, %5381
  br i1 %5382, label %5383, label %5460

5383:                                             ; preds = %5377
  %5384 = load double, ptr %18, align 8, !tbaa !5
  %5385 = load i32, ptr %12, align 4, !tbaa !15
  %5386 = sitofp i32 %5385 to double
  %5387 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %5386, double 1.000000e+00)
  %5388 = fdiv double %5384, %5387
  %5389 = load i32, ptr %12, align 4, !tbaa !15
  %5390 = sitofp i32 %5389 to double
  %5391 = load ptr, ptr %29, align 8, !tbaa !9
  %5392 = load i32, ptr %12, align 4, !tbaa !15
  %5393 = sext i32 %5392 to i64
  %5394 = getelementptr inbounds double, ptr %5391, i64 %5393
  %5395 = load double, ptr %5394, align 8, !tbaa !5
  %5396 = fmul double %5390, %5395
  %5397 = load ptr, ptr %8, align 8, !tbaa !9
  %5398 = load ptr, ptr %30, align 8, !tbaa !9
  %5399 = getelementptr inbounds %struct.perturb_vector, ptr %5398, i32 0, i32 5
  %5400 = load i32, ptr %5399, align 4, !tbaa !85
  %5401 = load i32, ptr %12, align 4, !tbaa !15
  %5402 = add nsw i32 %5400, %5401
  %5403 = sub nsw i32 %5402, 1
  %5404 = sext i32 %5403 to i64
  %5405 = getelementptr inbounds double, ptr %5397, i64 %5404
  %5406 = load double, ptr %5405, align 8, !tbaa !5
  %5407 = load i32, ptr %12, align 4, !tbaa !15
  %5408 = sitofp i32 %5407 to double
  %5409 = fadd double %5408, 1.000000e+00
  %5410 = load ptr, ptr %29, align 8, !tbaa !9
  %5411 = load i32, ptr %12, align 4, !tbaa !15
  %5412 = add nsw i32 %5411, 1
  %5413 = sext i32 %5412 to i64
  %5414 = getelementptr inbounds double, ptr %5410, i64 %5413
  %5415 = load double, ptr %5414, align 8, !tbaa !5
  %5416 = fmul double %5409, %5415
  %5417 = load ptr, ptr %8, align 8, !tbaa !9
  %5418 = load ptr, ptr %30, align 8, !tbaa !9
  %5419 = getelementptr inbounds %struct.perturb_vector, ptr %5418, i32 0, i32 5
  %5420 = load i32, ptr %5419, align 4, !tbaa !85
  %5421 = load i32, ptr %12, align 4, !tbaa !15
  %5422 = add nsw i32 %5420, %5421
  %5423 = add nsw i32 %5422, 1
  %5424 = sext i32 %5423 to i64
  %5425 = getelementptr inbounds double, ptr %5417, i64 %5424
  %5426 = load double, ptr %5425, align 8, !tbaa !5
  %5427 = fmul double %5416, %5426
  %5428 = fneg double %5427
  %5429 = call double @llvm.fmuladd.f64(double %5396, double %5406, double %5428)
  %5430 = load ptr, ptr %27, align 8, !tbaa !9
  %5431 = load ptr, ptr %23, align 8, !tbaa !9
  %5432 = getelementptr inbounds %struct.thermo, ptr %5431, i32 0, i32 37
  %5433 = load i32, ptr %5432, align 4, !tbaa !82
  %5434 = sext i32 %5433 to i64
  %5435 = getelementptr inbounds double, ptr %5430, i64 %5434
  %5436 = load double, ptr %5435, align 8, !tbaa !5
  %5437 = load ptr, ptr %8, align 8, !tbaa !9
  %5438 = load ptr, ptr %30, align 8, !tbaa !9
  %5439 = getelementptr inbounds %struct.perturb_vector, ptr %5438, i32 0, i32 5
  %5440 = load i32, ptr %5439, align 4, !tbaa !85
  %5441 = load i32, ptr %12, align 4, !tbaa !15
  %5442 = add nsw i32 %5440, %5441
  %5443 = sext i32 %5442 to i64
  %5444 = getelementptr inbounds double, ptr %5437, i64 %5443
  %5445 = load double, ptr %5444, align 8, !tbaa !5
  %5446 = fmul double %5436, %5445
  %5447 = fneg double %5446
  %5448 = call double @llvm.fmuladd.f64(double %5388, double %5429, double %5447)
  %5449 = load ptr, ptr %9, align 8, !tbaa !9
  %5450 = load ptr, ptr %30, align 8, !tbaa !9
  %5451 = getelementptr inbounds %struct.perturb_vector, ptr %5450, i32 0, i32 5
  %5452 = load i32, ptr %5451, align 4, !tbaa !85
  %5453 = load i32, ptr %12, align 4, !tbaa !15
  %5454 = add nsw i32 %5452, %5453
  %5455 = sext i32 %5454 to i64
  %5456 = getelementptr inbounds double, ptr %5449, i64 %5455
  store double %5448, ptr %5456, align 8, !tbaa !5
  br label %5457

5457:                                             ; preds = %5383
  %5458 = load i32, ptr %12, align 4, !tbaa !15
  %5459 = add nsw i32 %5458, 1
  store i32 %5459, ptr %12, align 4, !tbaa !15
  br label %5377, !llvm.loop !179

5460:                                             ; preds = %5377
  %5461 = load ptr, ptr %30, align 8, !tbaa !9
  %5462 = getelementptr inbounds %struct.perturb_vector, ptr %5461, i32 0, i32 9
  %5463 = load i32, ptr %5462, align 4, !tbaa !93
  store i32 %5463, ptr %12, align 4, !tbaa !15
  %5464 = load double, ptr %18, align 8, !tbaa !5
  %5465 = load ptr, ptr %29, align 8, !tbaa !9
  %5466 = load i32, ptr %12, align 4, !tbaa !15
  %5467 = sext i32 %5466 to i64
  %5468 = getelementptr inbounds double, ptr %5465, i64 %5467
  %5469 = load double, ptr %5468, align 8, !tbaa !5
  %5470 = load ptr, ptr %8, align 8, !tbaa !9
  %5471 = load ptr, ptr %30, align 8, !tbaa !9
  %5472 = getelementptr inbounds %struct.perturb_vector, ptr %5471, i32 0, i32 5
  %5473 = load i32, ptr %5472, align 4, !tbaa !85
  %5474 = load i32, ptr %12, align 4, !tbaa !15
  %5475 = add nsw i32 %5473, %5474
  %5476 = sub nsw i32 %5475, 1
  %5477 = sext i32 %5476 to i64
  %5478 = getelementptr inbounds double, ptr %5470, i64 %5477
  %5479 = load double, ptr %5478, align 8, !tbaa !5
  %5480 = load i32, ptr %12, align 4, !tbaa !15
  %5481 = sitofp i32 %5480 to double
  %5482 = fadd double %5481, 1.000000e+00
  %5483 = load double, ptr %79, align 8, !tbaa !5
  %5484 = fmul double %5482, %5483
  %5485 = load ptr, ptr %8, align 8, !tbaa !9
  %5486 = load ptr, ptr %30, align 8, !tbaa !9
  %5487 = getelementptr inbounds %struct.perturb_vector, ptr %5486, i32 0, i32 5
  %5488 = load i32, ptr %5487, align 4, !tbaa !85
  %5489 = load i32, ptr %12, align 4, !tbaa !15
  %5490 = add nsw i32 %5488, %5489
  %5491 = sext i32 %5490 to i64
  %5492 = getelementptr inbounds double, ptr %5485, i64 %5491
  %5493 = load double, ptr %5492, align 8, !tbaa !5
  %5494 = fmul double %5484, %5493
  %5495 = fneg double %5494
  %5496 = call double @llvm.fmuladd.f64(double %5469, double %5479, double %5495)
  %5497 = load ptr, ptr %27, align 8, !tbaa !9
  %5498 = load ptr, ptr %23, align 8, !tbaa !9
  %5499 = getelementptr inbounds %struct.thermo, ptr %5498, i32 0, i32 37
  %5500 = load i32, ptr %5499, align 4, !tbaa !82
  %5501 = sext i32 %5500 to i64
  %5502 = getelementptr inbounds double, ptr %5497, i64 %5501
  %5503 = load double, ptr %5502, align 8, !tbaa !5
  %5504 = load ptr, ptr %8, align 8, !tbaa !9
  %5505 = load ptr, ptr %30, align 8, !tbaa !9
  %5506 = getelementptr inbounds %struct.perturb_vector, ptr %5505, i32 0, i32 5
  %5507 = load i32, ptr %5506, align 4, !tbaa !85
  %5508 = load i32, ptr %12, align 4, !tbaa !15
  %5509 = add nsw i32 %5507, %5508
  %5510 = sext i32 %5509 to i64
  %5511 = getelementptr inbounds double, ptr %5504, i64 %5510
  %5512 = load double, ptr %5511, align 8, !tbaa !5
  %5513 = fmul double %5503, %5512
  %5514 = fneg double %5513
  %5515 = call double @llvm.fmuladd.f64(double %5464, double %5496, double %5514)
  %5516 = load ptr, ptr %9, align 8, !tbaa !9
  %5517 = load ptr, ptr %30, align 8, !tbaa !9
  %5518 = getelementptr inbounds %struct.perturb_vector, ptr %5517, i32 0, i32 5
  %5519 = load i32, ptr %5518, align 4, !tbaa !85
  %5520 = load i32, ptr %12, align 4, !tbaa !15
  %5521 = add nsw i32 %5519, %5520
  %5522 = sext i32 %5521 to i64
  %5523 = getelementptr inbounds double, ptr %5516, i64 %5522
  store double %5515, ptr %5523, align 8, !tbaa !5
  br label %5524

5524:                                             ; preds = %5460, %4986
  br label %5525

5525:                                             ; preds = %5524, %4975
  %5526 = load ptr, ptr %24, align 8, !tbaa !9
  %5527 = getelementptr inbounds %struct.perturbs, ptr %5526, i32 0, i32 12
  %5528 = load i16, ptr %5527, align 4, !tbaa !180
  %5529 = sext i16 %5528 to i32
  %5530 = icmp eq i32 %5529, 1
  br i1 %5530, label %5531, label %5778

5531:                                             ; preds = %5525
  %5532 = load ptr, ptr %8, align 8, !tbaa !9
  %5533 = load ptr, ptr %30, align 8, !tbaa !9
  %5534 = getelementptr inbounds %struct.perturb_vector, ptr %5533, i32 0, i32 24
  %5535 = load i32, ptr %5534, align 8, !tbaa !136
  %5536 = sext i32 %5535 to i64
  %5537 = getelementptr inbounds double, ptr %5532, i64 %5536
  %5538 = load double, ptr %5537, align 8, !tbaa !5
  %5539 = load ptr, ptr %8, align 8, !tbaa !9
  %5540 = load ptr, ptr %30, align 8, !tbaa !9
  %5541 = getelementptr inbounds %struct.perturb_vector, ptr %5540, i32 0, i32 46
  %5542 = load i32, ptr %5541, align 4, !tbaa !177
  %5543 = sext i32 %5542 to i64
  %5544 = getelementptr inbounds double, ptr %5539, i64 %5543
  %5545 = load double, ptr %5544, align 8, !tbaa !5
  %5546 = fmul double 0x4003988E1409212E, %5545
  %5547 = call double @llvm.fmuladd.f64(double 0xBFF5555555555555, double %5538, double %5546)
  %5548 = load ptr, ptr %9, align 8, !tbaa !9
  %5549 = load ptr, ptr %30, align 8, !tbaa !9
  %5550 = getelementptr inbounds %struct.perturb_vector, ptr %5549, i32 0, i32 23
  %5551 = load i32, ptr %5550, align 4, !tbaa !138
  %5552 = sext i32 %5551 to i64
  %5553 = getelementptr inbounds double, ptr %5548, i64 %5552
  store double %5547, ptr %5553, align 8, !tbaa !5
  %5554 = load double, ptr %19, align 8, !tbaa !5
  %5555 = load ptr, ptr %8, align 8, !tbaa !9
  %5556 = load ptr, ptr %30, align 8, !tbaa !9
  %5557 = getelementptr inbounds %struct.perturb_vector, ptr %5556, i32 0, i32 23
  %5558 = load i32, ptr %5557, align 4, !tbaa !138
  %5559 = sext i32 %5558 to i64
  %5560 = getelementptr inbounds double, ptr %5555, i64 %5559
  %5561 = load double, ptr %5560, align 8, !tbaa !5
  %5562 = fdiv double %5561, 4.000000e+00
  %5563 = load double, ptr %81, align 8, !tbaa !5
  %5564 = load ptr, ptr %8, align 8, !tbaa !9
  %5565 = load ptr, ptr %30, align 8, !tbaa !9
  %5566 = getelementptr inbounds %struct.perturb_vector, ptr %5565, i32 0, i32 25
  %5567 = load i32, ptr %5566, align 4, !tbaa !139
  %5568 = sext i32 %5567 to i64
  %5569 = getelementptr inbounds double, ptr %5564, i64 %5568
  %5570 = load double, ptr %5569, align 8, !tbaa !5
  %5571 = fneg double %5563
  %5572 = call double @llvm.fmuladd.f64(double %5571, double %5570, double %5562)
  %5573 = fmul double %5554, %5572
  %5574 = load ptr, ptr %9, align 8, !tbaa !9
  %5575 = load ptr, ptr %30, align 8, !tbaa !9
  %5576 = getelementptr inbounds %struct.perturb_vector, ptr %5575, i32 0, i32 24
  %5577 = load i32, ptr %5576, align 8, !tbaa !136
  %5578 = sext i32 %5577 to i64
  %5579 = getelementptr inbounds double, ptr %5574, i64 %5578
  store double %5573, ptr %5579, align 8, !tbaa !5
  %5580 = load ptr, ptr %8, align 8, !tbaa !9
  %5581 = load ptr, ptr %30, align 8, !tbaa !9
  %5582 = getelementptr inbounds %struct.perturb_vector, ptr %5581, i32 0, i32 24
  %5583 = load i32, ptr %5582, align 8, !tbaa !136
  %5584 = sext i32 %5583 to i64
  %5585 = getelementptr inbounds double, ptr %5580, i64 %5584
  %5586 = load double, ptr %5585, align 8, !tbaa !5
  %5587 = load double, ptr %18, align 8, !tbaa !5
  %5588 = fmul double 3.000000e-01, %5587
  %5589 = load ptr, ptr %29, align 8, !tbaa !9
  %5590 = getelementptr inbounds double, ptr %5589, i64 3
  %5591 = load double, ptr %5590, align 8, !tbaa !5
  %5592 = fmul double %5588, %5591
  %5593 = load ptr, ptr %29, align 8, !tbaa !9
  %5594 = getelementptr inbounds double, ptr %5593, i64 2
  %5595 = load double, ptr %5594, align 8, !tbaa !5
  %5596 = fdiv double %5592, %5595
  %5597 = load ptr, ptr %8, align 8, !tbaa !9
  %5598 = load ptr, ptr %30, align 8, !tbaa !9
  %5599 = getelementptr inbounds %struct.perturb_vector, ptr %5598, i32 0, i32 25
  %5600 = load i32, ptr %5599, align 4, !tbaa !139
  %5601 = add nsw i32 %5600, 1
  %5602 = sext i32 %5601 to i64
  %5603 = getelementptr inbounds double, ptr %5597, i64 %5602
  %5604 = load double, ptr %5603, align 8, !tbaa !5
  %5605 = fmul double %5596, %5604
  %5606 = fneg double %5605
  %5607 = call double @llvm.fmuladd.f64(double 0x3FD1111111111111, double %5586, double %5606)
  %5608 = load ptr, ptr %9, align 8, !tbaa !9
  %5609 = load ptr, ptr %30, align 8, !tbaa !9
  %5610 = getelementptr inbounds %struct.perturb_vector, ptr %5609, i32 0, i32 25
  %5611 = load i32, ptr %5610, align 4, !tbaa !139
  %5612 = sext i32 %5611 to i64
  %5613 = getelementptr inbounds double, ptr %5608, i64 %5612
  store double %5607, ptr %5613, align 8, !tbaa !5
  store i32 3, ptr %12, align 4, !tbaa !15
  %5614 = load double, ptr %18, align 8, !tbaa !5
  %5615 = load i32, ptr %12, align 4, !tbaa !15
  %5616 = sitofp i32 %5615 to double
  %5617 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %5616, double 1.000000e+00)
  %5618 = fdiv double %5614, %5617
  %5619 = load i32, ptr %12, align 4, !tbaa !15
  %5620 = sitofp i32 %5619 to double
  %5621 = fmul double %5620, 2.000000e+00
  %5622 = load ptr, ptr %29, align 8, !tbaa !9
  %5623 = load i32, ptr %12, align 4, !tbaa !15
  %5624 = sext i32 %5623 to i64
  %5625 = getelementptr inbounds double, ptr %5622, i64 %5624
  %5626 = load double, ptr %5625, align 8, !tbaa !5
  %5627 = fmul double %5621, %5626
  %5628 = load ptr, ptr %29, align 8, !tbaa !9
  %5629 = getelementptr inbounds double, ptr %5628, i64 2
  %5630 = load double, ptr %5629, align 8, !tbaa !5
  %5631 = fmul double %5627, %5630
  %5632 = load ptr, ptr %8, align 8, !tbaa !9
  %5633 = load ptr, ptr %30, align 8, !tbaa !9
  %5634 = getelementptr inbounds %struct.perturb_vector, ptr %5633, i32 0, i32 25
  %5635 = load i32, ptr %5634, align 4, !tbaa !139
  %5636 = sext i32 %5635 to i64
  %5637 = getelementptr inbounds double, ptr %5632, i64 %5636
  %5638 = load double, ptr %5637, align 8, !tbaa !5
  %5639 = load i32, ptr %12, align 4, !tbaa !15
  %5640 = sitofp i32 %5639 to double
  %5641 = fadd double %5640, 1.000000e+00
  %5642 = load ptr, ptr %29, align 8, !tbaa !9
  %5643 = load i32, ptr %12, align 4, !tbaa !15
  %5644 = add nsw i32 %5643, 1
  %5645 = sext i32 %5644 to i64
  %5646 = getelementptr inbounds double, ptr %5642, i64 %5645
  %5647 = load double, ptr %5646, align 8, !tbaa !5
  %5648 = fmul double %5641, %5647
  %5649 = load ptr, ptr %8, align 8, !tbaa !9
  %5650 = load ptr, ptr %30, align 8, !tbaa !9
  %5651 = getelementptr inbounds %struct.perturb_vector, ptr %5650, i32 0, i32 26
  %5652 = load i32, ptr %5651, align 8, !tbaa !142
  %5653 = add nsw i32 %5652, 1
  %5654 = sext i32 %5653 to i64
  %5655 = getelementptr inbounds double, ptr %5649, i64 %5654
  %5656 = load double, ptr %5655, align 8, !tbaa !5
  %5657 = fmul double %5648, %5656
  %5658 = fneg double %5657
  %5659 = call double @llvm.fmuladd.f64(double %5631, double %5638, double %5658)
  %5660 = fmul double %5618, %5659
  %5661 = load ptr, ptr %9, align 8, !tbaa !9
  %5662 = load ptr, ptr %30, align 8, !tbaa !9
  %5663 = getelementptr inbounds %struct.perturb_vector, ptr %5662, i32 0, i32 26
  %5664 = load i32, ptr %5663, align 8, !tbaa !142
  %5665 = sext i32 %5664 to i64
  %5666 = getelementptr inbounds double, ptr %5661, i64 %5665
  store double %5660, ptr %5666, align 8, !tbaa !5
  store i32 4, ptr %12, align 4, !tbaa !15
  br label %5667

5667:                                             ; preds = %5729, %5531
  %5668 = load i32, ptr %12, align 4, !tbaa !15
  %5669 = load ptr, ptr %30, align 8, !tbaa !9
  %5670 = getelementptr inbounds %struct.perturb_vector, ptr %5669, i32 0, i32 27
  %5671 = load i32, ptr %5670, align 4, !tbaa !143
  %5672 = icmp slt i32 %5668, %5671
  br i1 %5672, label %5673, label %5732

5673:                                             ; preds = %5667
  %5674 = load double, ptr %18, align 8, !tbaa !5
  %5675 = load i32, ptr %12, align 4, !tbaa !15
  %5676 = sitofp i32 %5675 to double
  %5677 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %5676, double 1.000000e+00)
  %5678 = fdiv double %5674, %5677
  %5679 = load i32, ptr %12, align 4, !tbaa !15
  %5680 = sitofp i32 %5679 to double
  %5681 = load ptr, ptr %29, align 8, !tbaa !9
  %5682 = load i32, ptr %12, align 4, !tbaa !15
  %5683 = sext i32 %5682 to i64
  %5684 = getelementptr inbounds double, ptr %5681, i64 %5683
  %5685 = load double, ptr %5684, align 8, !tbaa !5
  %5686 = fmul double %5680, %5685
  %5687 = load ptr, ptr %8, align 8, !tbaa !9
  %5688 = load ptr, ptr %30, align 8, !tbaa !9
  %5689 = getelementptr inbounds %struct.perturb_vector, ptr %5688, i32 0, i32 23
  %5690 = load i32, ptr %5689, align 4, !tbaa !138
  %5691 = load i32, ptr %12, align 4, !tbaa !15
  %5692 = add nsw i32 %5690, %5691
  %5693 = sub nsw i32 %5692, 1
  %5694 = sext i32 %5693 to i64
  %5695 = getelementptr inbounds double, ptr %5687, i64 %5694
  %5696 = load double, ptr %5695, align 8, !tbaa !5
  %5697 = load i32, ptr %12, align 4, !tbaa !15
  %5698 = sitofp i32 %5697 to double
  %5699 = fadd double %5698, 1.000000e+00
  %5700 = load ptr, ptr %29, align 8, !tbaa !9
  %5701 = load i32, ptr %12, align 4, !tbaa !15
  %5702 = add nsw i32 %5701, 1
  %5703 = sext i32 %5702 to i64
  %5704 = getelementptr inbounds double, ptr %5700, i64 %5703
  %5705 = load double, ptr %5704, align 8, !tbaa !5
  %5706 = fmul double %5699, %5705
  %5707 = load ptr, ptr %8, align 8, !tbaa !9
  %5708 = load ptr, ptr %30, align 8, !tbaa !9
  %5709 = getelementptr inbounds %struct.perturb_vector, ptr %5708, i32 0, i32 23
  %5710 = load i32, ptr %5709, align 4, !tbaa !138
  %5711 = load i32, ptr %12, align 4, !tbaa !15
  %5712 = add nsw i32 %5710, %5711
  %5713 = add nsw i32 %5712, 1
  %5714 = sext i32 %5713 to i64
  %5715 = getelementptr inbounds double, ptr %5707, i64 %5714
  %5716 = load double, ptr %5715, align 8, !tbaa !5
  %5717 = fmul double %5706, %5716
  %5718 = fneg double %5717
  %5719 = call double @llvm.fmuladd.f64(double %5686, double %5696, double %5718)
  %5720 = fmul double %5678, %5719
  %5721 = load ptr, ptr %9, align 8, !tbaa !9
  %5722 = load ptr, ptr %30, align 8, !tbaa !9
  %5723 = getelementptr inbounds %struct.perturb_vector, ptr %5722, i32 0, i32 23
  %5724 = load i32, ptr %5723, align 4, !tbaa !138
  %5725 = load i32, ptr %12, align 4, !tbaa !15
  %5726 = add nsw i32 %5724, %5725
  %5727 = sext i32 %5726 to i64
  %5728 = getelementptr inbounds double, ptr %5721, i64 %5727
  store double %5720, ptr %5728, align 8, !tbaa !5
  br label %5729

5729:                                             ; preds = %5673
  %5730 = load i32, ptr %12, align 4, !tbaa !15
  %5731 = add nsw i32 %5730, 1
  store i32 %5731, ptr %12, align 4, !tbaa !15
  br label %5667, !llvm.loop !181

5732:                                             ; preds = %5667
  %5733 = load ptr, ptr %30, align 8, !tbaa !9
  %5734 = getelementptr inbounds %struct.perturb_vector, ptr %5733, i32 0, i32 27
  %5735 = load i32, ptr %5734, align 4, !tbaa !143
  store i32 %5735, ptr %12, align 4, !tbaa !15
  %5736 = load double, ptr %18, align 8, !tbaa !5
  %5737 = load ptr, ptr %29, align 8, !tbaa !9
  %5738 = load i32, ptr %12, align 4, !tbaa !15
  %5739 = sext i32 %5738 to i64
  %5740 = getelementptr inbounds double, ptr %5737, i64 %5739
  %5741 = load double, ptr %5740, align 8, !tbaa !5
  %5742 = load ptr, ptr %8, align 8, !tbaa !9
  %5743 = load ptr, ptr %30, align 8, !tbaa !9
  %5744 = getelementptr inbounds %struct.perturb_vector, ptr %5743, i32 0, i32 23
  %5745 = load i32, ptr %5744, align 4, !tbaa !138
  %5746 = load i32, ptr %12, align 4, !tbaa !15
  %5747 = add nsw i32 %5745, %5746
  %5748 = sub nsw i32 %5747, 1
  %5749 = sext i32 %5748 to i64
  %5750 = getelementptr inbounds double, ptr %5742, i64 %5749
  %5751 = load double, ptr %5750, align 8, !tbaa !5
  %5752 = load i32, ptr %12, align 4, !tbaa !15
  %5753 = sitofp i32 %5752 to double
  %5754 = fadd double 1.000000e+00, %5753
  %5755 = load double, ptr %79, align 8, !tbaa !5
  %5756 = fmul double %5754, %5755
  %5757 = load ptr, ptr %8, align 8, !tbaa !9
  %5758 = load ptr, ptr %30, align 8, !tbaa !9
  %5759 = getelementptr inbounds %struct.perturb_vector, ptr %5758, i32 0, i32 23
  %5760 = load i32, ptr %5759, align 4, !tbaa !138
  %5761 = load i32, ptr %12, align 4, !tbaa !15
  %5762 = add nsw i32 %5760, %5761
  %5763 = sext i32 %5762 to i64
  %5764 = getelementptr inbounds double, ptr %5757, i64 %5763
  %5765 = load double, ptr %5764, align 8, !tbaa !5
  %5766 = fmul double %5756, %5765
  %5767 = fneg double %5766
  %5768 = call double @llvm.fmuladd.f64(double %5741, double %5751, double %5767)
  %5769 = fmul double %5736, %5768
  %5770 = load ptr, ptr %9, align 8, !tbaa !9
  %5771 = load ptr, ptr %30, align 8, !tbaa !9
  %5772 = getelementptr inbounds %struct.perturb_vector, ptr %5771, i32 0, i32 23
  %5773 = load i32, ptr %5772, align 4, !tbaa !138
  %5774 = load i32, ptr %12, align 4, !tbaa !15
  %5775 = add nsw i32 %5773, %5774
  %5776 = sext i32 %5775 to i64
  %5777 = getelementptr inbounds double, ptr %5770, i64 %5776
  store double %5769, ptr %5777, align 8, !tbaa !5
  br label %5778

5778:                                             ; preds = %5732, %5525
  %5779 = load ptr, ptr %24, align 8, !tbaa !9
  %5780 = getelementptr inbounds %struct.perturbs, ptr %5779, i32 0, i32 13
  %5781 = load i16, ptr %5780, align 2, !tbaa !182
  %5782 = sext i16 %5781 to i32
  %5783 = icmp eq i32 %5782, 1
  br i1 %5783, label %5784, label %5992

5784:                                             ; preds = %5778
  %5785 = load ptr, ptr %30, align 8, !tbaa !9
  %5786 = getelementptr inbounds %struct.perturb_vector, ptr %5785, i32 0, i32 37
  %5787 = load i32, ptr %5786, align 4, !tbaa !148
  store i32 %5787, ptr %67, align 4, !tbaa !15
  store i32 0, ptr %66, align 4, !tbaa !15
  br label %5788

5788:                                             ; preds = %5988, %5784
  %5789 = load i32, ptr %66, align 4, !tbaa !15
  %5790 = load ptr, ptr %30, align 8, !tbaa !9
  %5791 = getelementptr inbounds %struct.perturb_vector, ptr %5790, i32 0, i32 38
  %5792 = load i32, ptr %5791, align 8, !tbaa !150
  %5793 = icmp slt i32 %5789, %5792
  br i1 %5793, label %5794, label %5991

5794:                                             ; preds = %5788
  store i32 0, ptr %65, align 4, !tbaa !15
  br label %5795

5795:                                             ; preds = %5984, %5794
  %5796 = load i32, ptr %65, align 4, !tbaa !15
  %5797 = load ptr, ptr %30, align 8, !tbaa !9
  %5798 = getelementptr inbounds %struct.perturb_vector, ptr %5797, i32 0, i32 40
  %5799 = load ptr, ptr %5798, align 8, !tbaa !157
  %5800 = load i32, ptr %66, align 4, !tbaa !15
  %5801 = sext i32 %5800 to i64
  %5802 = getelementptr inbounds i32, ptr %5799, i64 %5801
  %5803 = load i32, ptr %5802, align 4, !tbaa !15
  %5804 = icmp slt i32 %5796, %5803
  br i1 %5804, label %5805, label %5987

5805:                                             ; preds = %5795
  %5806 = load ptr, ptr %22, align 8, !tbaa !9
  %5807 = getelementptr inbounds %struct.background, ptr %5806, i32 0, i32 137
  %5808 = load ptr, ptr %5807, align 8, !tbaa !158
  %5809 = load i32, ptr %66, align 4, !tbaa !15
  %5810 = sext i32 %5809 to i64
  %5811 = getelementptr inbounds ptr, ptr %5808, i64 %5810
  %5812 = load ptr, ptr %5811, align 8, !tbaa !9
  %5813 = load i32, ptr %65, align 4, !tbaa !15
  %5814 = sext i32 %5813 to i64
  %5815 = getelementptr inbounds double, ptr %5812, i64 %5814
  %5816 = load double, ptr %5815, align 8, !tbaa !5
  store double %5816, ptr %70, align 8, !tbaa !5
  %5817 = load ptr, ptr %22, align 8, !tbaa !9
  %5818 = getelementptr inbounds %struct.background, ptr %5817, i32 0, i32 135
  %5819 = load ptr, ptr %5818, align 8, !tbaa !159
  %5820 = load i32, ptr %66, align 4, !tbaa !15
  %5821 = sext i32 %5820 to i64
  %5822 = getelementptr inbounds ptr, ptr %5819, i64 %5821
  %5823 = load ptr, ptr %5822, align 8, !tbaa !9
  %5824 = load i32, ptr %65, align 4, !tbaa !15
  %5825 = sext i32 %5824 to i64
  %5826 = getelementptr inbounds double, ptr %5823, i64 %5825
  %5827 = load double, ptr %5826, align 8, !tbaa !5
  store double %5827, ptr %68, align 8, !tbaa !5
  %5828 = load double, ptr %68, align 8, !tbaa !5
  %5829 = load double, ptr %68, align 8, !tbaa !5
  %5830 = load double, ptr %14, align 8, !tbaa !5
  %5831 = load ptr, ptr %22, align 8, !tbaa !9
  %5832 = getelementptr inbounds %struct.background, ptr %5831, i32 0, i32 30
  %5833 = load ptr, ptr %5832, align 8, !tbaa !160
  %5834 = load i32, ptr %66, align 4, !tbaa !15
  %5835 = sext i32 %5834 to i64
  %5836 = getelementptr inbounds double, ptr %5833, i64 %5835
  %5837 = load double, ptr %5836, align 8, !tbaa !5
  %5838 = fmul double %5830, %5837
  %5839 = load ptr, ptr %22, align 8, !tbaa !9
  %5840 = getelementptr inbounds %struct.background, ptr %5839, i32 0, i32 30
  %5841 = load ptr, ptr %5840, align 8, !tbaa !160
  %5842 = load i32, ptr %66, align 4, !tbaa !15
  %5843 = sext i32 %5842 to i64
  %5844 = getelementptr inbounds double, ptr %5841, i64 %5843
  %5845 = load double, ptr %5844, align 8, !tbaa !5
  %5846 = fmul double %5838, %5845
  %5847 = call double @llvm.fmuladd.f64(double %5828, double %5829, double %5846)
  %5848 = call double @sqrt(double noundef %5847) #5
  store double %5848, ptr %69, align 8, !tbaa !5
  %5849 = load double, ptr %18, align 8, !tbaa !5
  %5850 = load double, ptr %68, align 8, !tbaa !5
  %5851 = fmul double %5849, %5850
  %5852 = load double, ptr %69, align 8, !tbaa !5
  %5853 = fdiv double %5851, %5852
  store double %5853, ptr %71, align 8, !tbaa !5
  %5854 = load double, ptr %71, align 8, !tbaa !5
  %5855 = fneg double %5854
  %5856 = load ptr, ptr %8, align 8, !tbaa !9
  %5857 = load i32, ptr %67, align 4, !tbaa !15
  %5858 = add nsw i32 %5857, 1
  %5859 = sext i32 %5858 to i64
  %5860 = getelementptr inbounds double, ptr %5856, i64 %5859
  %5861 = load double, ptr %5860, align 8, !tbaa !5
  %5862 = load ptr, ptr %8, align 8, !tbaa !9
  %5863 = load ptr, ptr %30, align 8, !tbaa !9
  %5864 = getelementptr inbounds %struct.perturb_vector, ptr %5863, i32 0, i32 46
  %5865 = load i32, ptr %5864, align 4, !tbaa !177
  %5866 = sext i32 %5865 to i64
  %5867 = getelementptr inbounds double, ptr %5862, i64 %5866
  %5868 = load double, ptr %5867, align 8, !tbaa !5
  %5869 = fmul double 0x3FE3988E1409212E, %5868
  %5870 = load double, ptr %70, align 8, !tbaa !5
  %5871 = fmul double %5869, %5870
  %5872 = fneg double %5871
  %5873 = call double @llvm.fmuladd.f64(double %5855, double %5861, double %5872)
  %5874 = load ptr, ptr %9, align 8, !tbaa !9
  %5875 = load i32, ptr %67, align 4, !tbaa !15
  %5876 = sext i32 %5875 to i64
  %5877 = getelementptr inbounds double, ptr %5874, i64 %5876
  store double %5873, ptr %5877, align 8, !tbaa !5
  store i32 1, ptr %12, align 4, !tbaa !15
  br label %5878

5878:                                             ; preds = %5938, %5805
  %5879 = load i32, ptr %12, align 4, !tbaa !15
  %5880 = load ptr, ptr %30, align 8, !tbaa !9
  %5881 = getelementptr inbounds %struct.perturb_vector, ptr %5880, i32 0, i32 39
  %5882 = load ptr, ptr %5881, align 8, !tbaa !155
  %5883 = load i32, ptr %66, align 4, !tbaa !15
  %5884 = sext i32 %5883 to i64
  %5885 = getelementptr inbounds i32, ptr %5882, i64 %5884
  %5886 = load i32, ptr %5885, align 4, !tbaa !15
  %5887 = icmp slt i32 %5879, %5886
  br i1 %5887, label %5888, label %5941

5888:                                             ; preds = %5878
  %5889 = load double, ptr %71, align 8, !tbaa !5
  %5890 = load i32, ptr %12, align 4, !tbaa !15
  %5891 = sitofp i32 %5890 to double
  %5892 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %5891, double 1.000000e+00)
  %5893 = fdiv double %5889, %5892
  %5894 = load i32, ptr %12, align 4, !tbaa !15
  %5895 = sitofp i32 %5894 to double
  %5896 = load ptr, ptr %29, align 8, !tbaa !9
  %5897 = load i32, ptr %12, align 4, !tbaa !15
  %5898 = sext i32 %5897 to i64
  %5899 = getelementptr inbounds double, ptr %5896, i64 %5898
  %5900 = load double, ptr %5899, align 8, !tbaa !5
  %5901 = fmul double %5895, %5900
  %5902 = load ptr, ptr %8, align 8, !tbaa !9
  %5903 = load i32, ptr %67, align 4, !tbaa !15
  %5904 = load i32, ptr %12, align 4, !tbaa !15
  %5905 = sub nsw i32 %5904, 1
  %5906 = add nsw i32 %5903, %5905
  %5907 = sext i32 %5906 to i64
  %5908 = getelementptr inbounds double, ptr %5902, i64 %5907
  %5909 = load double, ptr %5908, align 8, !tbaa !5
  %5910 = load i32, ptr %12, align 4, !tbaa !15
  %5911 = sitofp i32 %5910 to double
  %5912 = fadd double %5911, 1.000000e+00
  %5913 = load ptr, ptr %29, align 8, !tbaa !9
  %5914 = load i32, ptr %12, align 4, !tbaa !15
  %5915 = add nsw i32 %5914, 1
  %5916 = sext i32 %5915 to i64
  %5917 = getelementptr inbounds double, ptr %5913, i64 %5916
  %5918 = load double, ptr %5917, align 8, !tbaa !5
  %5919 = fmul double %5912, %5918
  %5920 = load ptr, ptr %8, align 8, !tbaa !9
  %5921 = load i32, ptr %67, align 4, !tbaa !15
  %5922 = load i32, ptr %12, align 4, !tbaa !15
  %5923 = add nsw i32 %5922, 1
  %5924 = add nsw i32 %5921, %5923
  %5925 = sext i32 %5924 to i64
  %5926 = getelementptr inbounds double, ptr %5920, i64 %5925
  %5927 = load double, ptr %5926, align 8, !tbaa !5
  %5928 = fmul double %5919, %5927
  %5929 = fneg double %5928
  %5930 = call double @llvm.fmuladd.f64(double %5901, double %5909, double %5929)
  %5931 = fmul double %5893, %5930
  %5932 = load ptr, ptr %9, align 8, !tbaa !9
  %5933 = load i32, ptr %67, align 4, !tbaa !15
  %5934 = load i32, ptr %12, align 4, !tbaa !15
  %5935 = add nsw i32 %5933, %5934
  %5936 = sext i32 %5935 to i64
  %5937 = getelementptr inbounds double, ptr %5932, i64 %5936
  store double %5931, ptr %5937, align 8, !tbaa !5
  br label %5938

5938:                                             ; preds = %5888
  %5939 = load i32, ptr %12, align 4, !tbaa !15
  %5940 = add nsw i32 %5939, 1
  store i32 %5940, ptr %12, align 4, !tbaa !15
  br label %5878, !llvm.loop !183

5941:                                             ; preds = %5878
  %5942 = load double, ptr %71, align 8, !tbaa !5
  %5943 = load ptr, ptr %8, align 8, !tbaa !9
  %5944 = load i32, ptr %67, align 4, !tbaa !15
  %5945 = load i32, ptr %12, align 4, !tbaa !15
  %5946 = add nsw i32 %5944, %5945
  %5947 = sub nsw i32 %5946, 1
  %5948 = sext i32 %5947 to i64
  %5949 = getelementptr inbounds double, ptr %5943, i64 %5948
  %5950 = load double, ptr %5949, align 8, !tbaa !5
  %5951 = load i32, ptr %12, align 4, !tbaa !15
  %5952 = sitofp i32 %5951 to double
  %5953 = fadd double 1.000000e+00, %5952
  %5954 = load double, ptr %18, align 8, !tbaa !5
  %5955 = fmul double %5953, %5954
  %5956 = load double, ptr %79, align 8, !tbaa !5
  %5957 = fmul double %5955, %5956
  %5958 = load ptr, ptr %8, align 8, !tbaa !9
  %5959 = load i32, ptr %67, align 4, !tbaa !15
  %5960 = load i32, ptr %12, align 4, !tbaa !15
  %5961 = add nsw i32 %5959, %5960
  %5962 = sext i32 %5961 to i64
  %5963 = getelementptr inbounds double, ptr %5958, i64 %5962
  %5964 = load double, ptr %5963, align 8, !tbaa !5
  %5965 = fmul double %5957, %5964
  %5966 = fneg double %5965
  %5967 = call double @llvm.fmuladd.f64(double %5942, double %5950, double %5966)
  %5968 = load ptr, ptr %9, align 8, !tbaa !9
  %5969 = load i32, ptr %67, align 4, !tbaa !15
  %5970 = load i32, ptr %12, align 4, !tbaa !15
  %5971 = add nsw i32 %5969, %5970
  %5972 = sext i32 %5971 to i64
  %5973 = getelementptr inbounds double, ptr %5968, i64 %5972
  store double %5967, ptr %5973, align 8, !tbaa !5
  %5974 = load ptr, ptr %30, align 8, !tbaa !9
  %5975 = getelementptr inbounds %struct.perturb_vector, ptr %5974, i32 0, i32 39
  %5976 = load ptr, ptr %5975, align 8, !tbaa !155
  %5977 = load i32, ptr %66, align 4, !tbaa !15
  %5978 = sext i32 %5977 to i64
  %5979 = getelementptr inbounds i32, ptr %5976, i64 %5978
  %5980 = load i32, ptr %5979, align 4, !tbaa !15
  %5981 = add nsw i32 %5980, 1
  %5982 = load i32, ptr %67, align 4, !tbaa !15
  %5983 = add nsw i32 %5982, %5981
  store i32 %5983, ptr %67, align 4, !tbaa !15
  br label %5984

5984:                                             ; preds = %5941
  %5985 = load i32, ptr %65, align 4, !tbaa !15
  %5986 = add nsw i32 %5985, 1
  store i32 %5986, ptr %65, align 4, !tbaa !15
  br label %5795, !llvm.loop !184

5987:                                             ; preds = %5795
  br label %5988

5988:                                             ; preds = %5987
  %5989 = load i32, ptr %66, align 4, !tbaa !15
  %5990 = add nsw i32 %5989, 1
  store i32 %5990, ptr %66, align 4, !tbaa !15
  br label %5788, !llvm.loop !185

5991:                                             ; preds = %5788
  br label %5992

5992:                                             ; preds = %5991, %5778
  %5993 = load ptr, ptr %8, align 8, !tbaa !9
  %5994 = load ptr, ptr %30, align 8, !tbaa !9
  %5995 = getelementptr inbounds %struct.perturb_vector, ptr %5994, i32 0, i32 46
  %5996 = load i32, ptr %5995, align 4, !tbaa !177
  %5997 = sext i32 %5996 to i64
  %5998 = getelementptr inbounds double, ptr %5993, i64 %5997
  %5999 = load double, ptr %5998, align 8, !tbaa !5
  %6000 = load ptr, ptr %9, align 8, !tbaa !9
  %6001 = load ptr, ptr %30, align 8, !tbaa !9
  %6002 = getelementptr inbounds %struct.perturb_vector, ptr %6001, i32 0, i32 45
  %6003 = load i32, ptr %6002, align 8, !tbaa !186
  %6004 = sext i32 %6003 to i64
  %6005 = getelementptr inbounds double, ptr %6000, i64 %6004
  store double %5999, ptr %6005, align 8, !tbaa !5
  %6006 = load ptr, ptr %28, align 8, !tbaa !9
  %6007 = load ptr, ptr %25, align 8, !tbaa !9
  %6008 = getelementptr inbounds %struct.perturb_workspace, ptr %6007, i32 0, i32 7
  %6009 = load i32, ptr %6008, align 4, !tbaa !187
  %6010 = sext i32 %6009 to i64
  %6011 = getelementptr inbounds double, ptr %6006, i64 %6010
  %6012 = load double, ptr %6011, align 8, !tbaa !5
  %6013 = load ptr, ptr %9, align 8, !tbaa !9
  %6014 = load ptr, ptr %30, align 8, !tbaa !9
  %6015 = getelementptr inbounds %struct.perturb_vector, ptr %6014, i32 0, i32 46
  %6016 = load i32, ptr %6015, align 4, !tbaa !177
  %6017 = sext i32 %6016 to i64
  %6018 = getelementptr inbounds double, ptr %6013, i64 %6017
  store double %6012, ptr %6018, align 8, !tbaa !5
  br label %6019

6019:                                             ; preds = %5992, %4969, %4963
  store i32 0, ptr %6, align 4
  store i32 1, ptr %90, align 4
  br label %6020

6020:                                             ; preds = %6019, %2338, %747, %195, %176, %148
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  %6021 = load i32, ptr %6, align 4
  ret i32 %6021
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @perturb_einstein(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, double noundef, double noundef, ptr noundef, ptr noundef) #4

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @perturb_tca_slip_and_shear(ptr noundef, ptr noundef, ptr noundef) #4

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { 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 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !6, i64 48}
!12 = !{!"perturb_parameters_and_workspace", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !13, i64 32, !13, i64 36, !13, i64 40, !6, i64 48, !10, i64 56}
!13 = !{!"int", !7, i64 0}
!14 = !{!12, !13, i64 32}
!15 = !{!13, !13, i64 0}
!16 = !{!12, !10, i64 0}
!17 = !{!12, !10, i64 8}
!18 = !{!12, !10, i64 16}
!19 = !{!12, !10, i64 24}
!20 = !{!12, !10, i64 56}
!21 = !{!22, !10, i64 384}
!22 = !{!"perturb_workspace", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !10, i64 312, !13, i64 320, !23, i64 324, !13, i64 328, !13, i64 332, !13, i64 336, !13, i64 340, !13, i64 344, !13, i64 348, !13, i64 352, !13, i64 356, !13, i64 360, !10, i64 368, !13, i64 376, !10, i64 384}
!23 = !{!"short", !7, i64 0}
!24 = !{!22, !10, i64 48}
!25 = !{!22, !10, i64 56}
!26 = !{!22, !10, i64 64}
!27 = !{!22, !10, i64 72}
!28 = !{!29, !23, i64 842}
!29 = !{!"background", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !13, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !23, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !23, i64 176, !6, i64 184, !6, i64 192, !10, i64 200, !13, i64 208, !13, i64 212, !6, i64 216, !13, i64 224, !10, i64 232, !10, i64 240, !6, i64 248, !10, i64 256, !6, i64 264, !10, i64 272, !6, i64 280, !10, i64 288, !6, i64 296, !10, i64 304, !10, i64 312, !10, i64 320, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !13, i64 360, !10, i64 368, !6, i64 376, !6, i64 384, !6, i64 392, !6, i64 400, !6, i64 408, !6, i64 416, !6, i64 424, !6, i64 432, !6, i64 440, !6, i64 448, !6, i64 456, !13, i64 464, !13, i64 468, !13, i64 472, !13, i64 476, !13, i64 480, !13, i64 484, !13, i64 488, !13, i64 492, !13, i64 496, !13, i64 500, !13, i64 504, !13, i64 508, !13, i64 512, !13, i64 516, !13, i64 520, !13, i64 524, !13, i64 528, !13, i64 532, !13, i64 536, !13, i64 540, !13, i64 544, !13, i64 548, !13, i64 552, !13, i64 556, !13, i64 560, !13, i64 564, !13, i64 568, !13, i64 572, !13, i64 576, !13, i64 580, !13, i64 584, !13, i64 588, !13, i64 592, !13, i64 596, !13, i64 600, !13, i64 604, !13, i64 608, !13, i64 612, !13, i64 616, !13, i64 620, !13, i64 624, !13, i64 628, !10, i64 632, !10, i64 640, !10, i64 648, !10, i64 656, !10, i64 664, !13, i64 672, !13, i64 676, !13, i64 680, !13, i64 684, !13, i64 688, !13, i64 692, !13, i64 696, !13, i64 700, !13, i64 704, !13, i64 708, !13, i64 712, !13, i64 716, !13, i64 720, !23, i64 724, !23, i64 726, !23, i64 728, !23, i64 730, !23, i64 732, !23, i64 734, !23, i64 736, !23, i64 738, !23, i64 740, !23, i64 742, !23, i64 744, !10, i64 752, !10, i64 760, !10, i64 768, !10, i64 776, !10, i64 784, !10, i64 792, !10, i64 800, !10, i64 808, !10, i64 816, !10, i64 824, !10, i64 832, !23, i64 840, !23, i64 842, !23, i64 844, !23, i64 846, !23, i64 848, !23, i64 850, !7, i64 852, !23, i64 2900, !7, i64 2902}
!30 = !{!29, !23, i64 848}
!31 = !{!29, !13, i64 464}
!32 = !{!33, !23, i64 602}
!33 = !{!"thermo", !6, i64 0, !13, i64 8, !13, i64 12, !13, i64 16, !6, i64 24, !6, i64 32, !23, i64 40, !23, i64 42, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !13, i64 80, !10, i64 88, !10, i64 96, !6, i64 104, !13, i64 112, !10, i64 120, !10, i64 128, !6, i64 136, !13, i64 144, !10, i64 152, !10, i64 160, !6, i64 168, !23, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !13, i64 272, !13, i64 276, !13, i64 280, !13, i64 284, !13, i64 288, !13, i64 292, !13, i64 296, !13, i64 300, !13, i64 304, !13, i64 308, !13, i64 312, !13, i64 316, !13, i64 320, !13, i64 324, !13, i64 328, !13, i64 332, !13, i64 336, !13, i64 340, !13, i64 344, !13, i64 348, !13, i64 352, !13, i64 356, !13, i64 360, !13, i64 364, !13, i64 368, !13, i64 372, !13, i64 376, !10, i64 384, !10, i64 392, !10, i64 400, !6, i64 408, !6, i64 416, !6, i64 424, !6, i64 432, !6, i64 440, !6, i64 448, !6, i64 456, !6, i64 464, !6, i64 472, !6, i64 480, !6, i64 488, !6, i64 496, !6, i64 504, !6, i64 512, !6, i64 520, !6, i64 528, !6, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !6, i64 568, !6, i64 576, !6, i64 584, !6, i64 592, !23, i64 600, !23, i64 602, !23, i64 604, !7, i64 606}
!34 = !{!29, !13, i64 468}
!35 = !{!29, !13, i64 476}
!36 = !{!29, !13, i64 480}
!37 = !{!29, !23, i64 742}
!38 = !{!29, !13, i64 508}
!39 = !{!29, !13, i64 504}
!40 = !{!33, !13, i64 308}
!41 = !{!33, !6, i64 248}
!42 = !{!33, !6, i64 240}
!43 = !{!29, !6, i64 120}
!44 = !{!29, !6, i64 136}
!45 = !{!29, !23, i64 744}
!46 = !{!29, !6, i64 352}
!47 = !{!48, !23, i64 4}
!48 = !{!"perturbs", !23, i64 0, !23, i64 2, !23, i64 4, !23, i64 6, !23, i64 8, !23, i64 10, !23, i64 12, !23, i64 14, !23, i64 16, !23, i64 18, !23, i64 20, !13, i64 24, !23, i64 28, !23, i64 30, !23, i64 32, !23, i64 34, !23, i64 36, !23, i64 38, !23, i64 40, !23, i64 42, !23, i64 44, !23, i64 46, !23, i64 48, !23, i64 50, !23, i64 52, !23, i64 54, !23, i64 56, !23, i64 58, !23, i64 60, !13, i64 64, !13, i64 68, !13, i64 72, !13, i64 76, !6, i64 80, !13, i64 88, !13, i64 92, !7, i64 96, !7, i64 896, !13, i64 1696, !13, i64 1700, !13, i64 1704, !13, i64 1708, !13, i64 1712, !6, i64 1720, !13, i64 1728, !13, i64 1732, !7, i64 1736, !6, i64 1976, !6, i64 1984, !6, i64 1992, !10, i64 2000, !10, i64 2008, !13, i64 2016, !23, i64 2020, !23, i64 2022, !13, i64 2024, !13, i64 2028, !13, i64 2032, !13, i64 2036, !13, i64 2040, !13, i64 2044, !13, i64 2048, !13, i64 2052, !13, i64 2056, !13, i64 2060, !13, i64 2064, !10, i64 2072, !23, i64 2080, !23, i64 2082, !23, i64 2084, !23, i64 2086, !23, i64 2088, !23, i64 2090, !23, i64 2092, !23, i64 2094, !23, i64 2096, !23, i64 2098, !23, i64 2100, !23, i64 2102, !23, i64 2104, !23, i64 2106, !23, i64 2108, !23, i64 2110, !23, i64 2112, !23, i64 2114, !23, i64 2116, !23, i64 2118, !23, i64 2120, !23, i64 2122, !23, i64 2124, !23, i64 2126, !23, i64 2128, !23, i64 2130, !23, i64 2132, !23, i64 2134, !23, i64 2136, !23, i64 2138, !23, i64 2140, !23, i64 2142, !23, i64 2144, !23, i64 2146, !23, i64 2148, !23, i64 2150, !23, i64 2152, !23, i64 2154, !23, i64 2156, !23, i64 2158, !13, i64 2160, !13, i64 2164, !13, i64 2168, !13, i64 2172, !13, i64 2176, !13, i64 2180, !13, i64 2184, !13, i64 2188, !13, i64 2192, !13, i64 2196, !13, i64 2200, !13, i64 2204, !13, i64 2208, !13, i64 2212, !13, i64 2216, !13, i64 2220, !13, i64 2224, !13, i64 2228, !13, i64 2232, !13, i64 2236, !13, i64 2240, !13, i64 2244, !13, i64 2248, !13, i64 2252, !13, i64 2256, !13, i64 2260, !13, i64 2264, !13, i64 2268, !13, i64 2272, !13, i64 2276, !13, i64 2280, !13, i64 2284, !13, i64 2288, !13, i64 2292, !13, i64 2296, !13, i64 2300, !13, i64 2304, !13, i64 2308, !13, i64 2312, !13, i64 2316, !13, i64 2320, !13, i64 2324, !13, i64 2328, !13, i64 2332, !10, i64 2336, !10, i64 2344, !10, i64 2352, !10, i64 2360, !10, i64 2368, !6, i64 2376, !6, i64 2384, !10, i64 2392, !13, i64 2400, !6, i64 2408, !6, i64 2416, !6, i64 2424, !10, i64 2432, !10, i64 2440, !10, i64 2448, !10, i64 2456, !10, i64 2464, !10, i64 2472, !13, i64 2480, !10, i64 2488, !10, i64 2496, !10, i64 2504, !7, i64 2512, !7, i64 10512, !7, i64 18512, !13, i64 26512, !13, i64 26516, !13, i64 26520, !7, i64 26528, !7, i64 26768, !7, i64 27008, !7, i64 27248, !7, i64 27368, !7, i64 27488, !23, i64 27608, !7, i64 27610}
!49 = !{!48, !13, i64 2028}
!50 = !{!22, !10, i64 368}
!51 = !{!22, !13, i64 340}
!52 = !{!53, !13, i64 0}
!53 = !{!"perturb_vector", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !13, i64 72, !13, i64 76, !13, i64 80, !13, i64 84, !13, i64 88, !13, i64 92, !13, i64 96, !13, i64 100, !13, i64 104, !13, i64 108, !13, i64 112, !13, i64 116, !13, i64 120, !13, i64 124, !13, i64 128, !13, i64 132, !13, i64 136, !13, i64 140, !13, i64 144, !13, i64 148, !13, i64 152, !10, i64 160, !10, i64 168, !13, i64 176, !13, i64 180, !13, i64 184, !13, i64 188, !13, i64 192, !13, i64 196, !13, i64 200, !10, i64 208, !10, i64 216, !10, i64 224}
!54 = !{!53, !13, i64 4}
!55 = !{!29, !23, i64 740}
!56 = !{!22, !13, i64 348}
!57 = !{!53, !13, i64 112}
!58 = !{!53, !13, i64 116}
!59 = !{!53, !13, i64 40}
!60 = !{!53, !13, i64 44}
!61 = !{!33, !13, i64 352}
!62 = !{!48, !23, i64 20}
!63 = !{!22, !13, i64 336}
!64 = !{!53, !13, i64 132}
!65 = !{!33, !13, i64 348}
!66 = !{!53, !13, i64 136}
!67 = !{!33, !13, i64 272}
!68 = !{!29, !6, i64 0}
!69 = !{!29, !6, i64 24}
!70 = !{!33, !6, i64 0}
!71 = !{!29, !6, i64 456}
!72 = !{!33, !13, i64 344}
!73 = !{!48, !13, i64 2024}
!74 = !{!22, !13, i64 8}
!75 = !{!22, !13, i64 20}
!76 = !{!22, !13, i64 4}
!77 = !{!22, !13, i64 0}
!78 = !{!22, !6, i64 168}
!79 = !{!22, !6, i64 176}
!80 = !{!22, !6, i64 200}
!81 = !{!22, !6, i64 208}
!82 = !{!33, !13, i64 276}
!83 = !{!22, !6, i64 144}
!84 = !{!22, !6, i64 152}
!85 = !{!53, !13, i64 20}
!86 = !{!53, !13, i64 28}
!87 = !{!53, !13, i64 8}
!88 = !{!53, !13, i64 12}
!89 = !{!53, !13, i64 16}
!90 = distinct !{!90, !91}
!91 = !{!"llvm.loop.mustprogress"}
!92 = !{!53, !13, i64 24}
!93 = !{!53, !13, i64 36}
!94 = distinct !{!94, !91}
!95 = !{!29, !23, i64 724}
!96 = !{!53, !13, i64 52}
!97 = !{!53, !13, i64 48}
!98 = !{!53, !13, i64 60}
!99 = !{!53, !13, i64 56}
!100 = !{!22, !13, i64 344}
!101 = !{!33, !13, i64 336}
!102 = !{!33, !6, i64 256}
!103 = !{!29, !13, i64 472}
!104 = !{!48, !10, i64 2000}
!105 = !{!22, !6, i64 160}
!106 = !{!29, !6, i64 16}
!107 = !{!29, !23, i64 726}
!108 = !{!53, !13, i64 68}
!109 = !{!29, !6, i64 152}
!110 = !{!53, !13, i64 64}
!111 = !{!29, !23, i64 728}
!112 = !{!29, !13, i64 516}
!113 = !{!29, !13, i64 512}
!114 = !{!53, !13, i64 140}
!115 = !{!53, !13, i64 144}
!116 = distinct !{!116, !91}
!117 = !{!29, !23, i64 736}
!118 = !{!29, !23, i64 96}
!119 = !{!29, !6, i64 88}
!120 = !{!53, !13, i64 76}
!121 = !{!53, !13, i64 72}
!122 = !{!22, !6, i64 304}
!123 = !{!53, !13, i64 80}
!124 = !{!29, !23, i64 730}
!125 = !{!53, !13, i64 88}
!126 = !{!53, !13, i64 84}
!127 = !{!29, !13, i64 524}
!128 = !{!29, !13, i64 536}
!129 = !{!48, !13, i64 2016}
!130 = !{!53, !13, i64 120}
!131 = !{!48, !10, i64 2008}
!132 = !{!53, !13, i64 124}
!133 = !{!53, !13, i64 128}
!134 = distinct !{!134, !91}
!135 = !{!29, !23, i64 738}
!136 = !{!53, !13, i64 96}
!137 = !{!48, !6, i64 1976}
!138 = !{!53, !13, i64 92}
!139 = !{!53, !13, i64 100}
!140 = !{!22, !13, i64 352}
!141 = !{!48, !6, i64 1984}
!142 = !{!53, !13, i64 104}
!143 = !{!53, !13, i64 108}
!144 = distinct !{!144, !91}
!145 = !{!146, !13, i64 1696}
!146 = !{!"precision", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !7, i64 104, !6, i64 360, !13, i64 368, !6, i64 376, !13, i64 384, !13, i64 388, !6, i64 392, !13, i64 400, !6, i64 408, !13, i64 416, !6, i64 424, !6, i64 432, !6, i64 440, !6, i64 448, !6, i64 456, !6, i64 464, !6, i64 472, !6, i64 480, !6, i64 488, !6, i64 496, !6, i64 504, !6, i64 512, !6, i64 520, !6, i64 528, !6, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !6, i64 568, !6, i64 576, !6, i64 584, !6, i64 592, !6, i64 600, !6, i64 608, !6, i64 616, !13, i64 624, !7, i64 628, !7, i64 884, !7, i64 1140, !6, i64 1400, !6, i64 1408, !6, i64 1416, !6, i64 1424, !6, i64 1432, !6, i64 1440, !6, i64 1448, !6, i64 1456, !6, i64 1464, !6, i64 1472, !6, i64 1480, !6, i64 1488, !6, i64 1496, !6, i64 1504, !6, i64 1512, !6, i64 1520, !13, i64 1528, !6, i64 1536, !6, i64 1544, !13, i64 1552, !13, i64 1556, !13, i64 1560, !13, i64 1564, !13, i64 1568, !13, i64 1572, !13, i64 1576, !13, i64 1580, !6, i64 1584, !6, i64 1592, !6, i64 1600, !6, i64 1608, !6, i64 1616, !6, i64 1624, !6, i64 1632, !6, i64 1640, !13, i64 1648, !6, i64 1656, !6, i64 1664, !13, i64 1672, !6, i64 1680, !6, i64 1688, !13, i64 1696, !6, i64 1704, !13, i64 1712, !6, i64 1720, !6, i64 1728, !13, i64 1736, !6, i64 1744, !6, i64 1752, !6, i64 1760, !13, i64 1768, !6, i64 1776, !6, i64 1784, !6, i64 1792, !6, i64 1800, !6, i64 1808, !13, i64 1816, !6, i64 1824, !6, i64 1832, !6, i64 1840, !6, i64 1848, !6, i64 1856, !6, i64 1864, !6, i64 1872, !13, i64 1880, !6, i64 1888, !6, i64 1896, !6, i64 1904, !6, i64 1912, !6, i64 1920, !6, i64 1928, !6, i64 1936, !6, i64 1944, !6, i64 1952, !6, i64 1960, !6, i64 1968, !6, i64 1976, !6, i64 1984, !6, i64 1992, !6, i64 2000, !6, i64 2008, !6, i64 2016, !6, i64 2024, !6, i64 2032, !6, i64 2040, !6, i64 2048, !6, i64 2056, !6, i64 2064, !6, i64 2072, !6, i64 2080, !6, i64 2088, !6, i64 2096, !6, i64 2104, !6, i64 2112, !6, i64 2120, !6, i64 2128, !6, i64 2136, !6, i64 2144, !6, i64 2152, !6, i64 2160, !6, i64 2168, !6, i64 2176, !6, i64 2184, !6, i64 2192, !6, i64 2200, !6, i64 2208, !6, i64 2216, !6, i64 2224, !6, i64 2232, !6, i64 2240, !6, i64 2248, !13, i64 2256, !6, i64 2264, !6, i64 2272, !6, i64 2280, !6, i64 2288, !13, i64 2296, !6, i64 2304, !6, i64 2312, !13, i64 2320, !13, i64 2324, !13, i64 2328, !6, i64 2336, !6, i64 2344, !7, i64 2352}
!147 = !{!29, !23, i64 732}
!148 = !{!53, !13, i64 148}
!149 = !{!22, !13, i64 356}
!150 = !{!53, !13, i64 152}
!151 = !{!29, !13, i64 552}
!152 = !{!29, !13, i64 556}
!153 = !{!29, !13, i64 560}
!154 = !{!146, !13, i64 1712}
!155 = !{!53, !10, i64 160}
!156 = distinct !{!156, !91}
!157 = !{!53, !10, i64 168}
!158 = !{!29, !10, i64 808}
!159 = !{!29, !10, i64 792}
!160 = !{!29, !10, i64 232}
!161 = distinct !{!161, !91}
!162 = distinct !{!162, !91}
!163 = distinct !{!163, !91}
!164 = !{!22, !13, i64 16}
!165 = !{!53, !13, i64 176}
!166 = !{!53, !13, i64 180}
!167 = !{!48, !23, i64 6}
!168 = !{!48, !13, i64 2036}
!169 = !{!22, !13, i64 32}
!170 = !{!53, !13, i64 188}
!171 = !{!53, !13, i64 184}
!172 = distinct !{!172, !91}
!173 = distinct !{!173, !91}
!174 = !{!22, !13, i64 36}
!175 = !{!48, !23, i64 8}
!176 = !{!48, !13, i64 2032}
!177 = !{!53, !13, i64 196}
!178 = distinct !{!178, !91}
!179 = distinct !{!179, !91}
!180 = !{!48, !23, i64 28}
!181 = distinct !{!181, !91}
!182 = !{!48, !23, i64 30}
!183 = distinct !{!183, !91}
!184 = distinct !{!184, !91}
!185 = distinct !{!185, !91}
!186 = !{!53, !13, i64 192}
!187 = !{!22, !13, i64 28}


; 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 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.322 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.345 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.347 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.349 = external hidden unnamed_addr constant [132 x i8], align 1
@__func__.perturb_derivs = external hidden unnamed_addr constant [15 x i8], align 1
@.str.356 = external hidden unnamed_addr constant [50 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.357 = external hidden unnamed_addr constant [19 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 void @class_protect_sprintf(ptr noundef, ptr noundef, ...) local_unnamed_addr #1

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

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

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

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

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

declare i32 @background_at_tau(ptr noundef, double noundef, i16 noundef signext, i16 noundef signext, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @thermodynamics_at_z(ptr noundef, ptr noundef, double noundef, i16 noundef signext, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @perturb_derivs(double noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #5 {
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca [2048 x i8], align 16
  %10 = alloca [2048 x i8], align 16
  %11 = alloca [2048 x i8], align 16
  %12 = alloca [2048 x i8], align 16
  %13 = alloca [2048 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  %14 = getelementptr inbounds i8, ptr %3, i64 48
  %15 = load double, ptr %14, align 8, !tbaa !5
  %16 = fmul double %15, %15
  %17 = getelementptr inbounds i8, ptr %3, i64 32
  %18 = load i32, ptr %17, align 8, !tbaa !12
  %19 = load ptr, ptr %3, align 8, !tbaa !13
  %20 = getelementptr inbounds i8, ptr %3, i64 8
  %21 = load ptr, ptr %20, align 8, !tbaa !14
  %22 = getelementptr inbounds i8, ptr %3, i64 16
  %23 = load ptr, ptr %22, align 8, !tbaa !15
  %24 = getelementptr inbounds i8, ptr %3, i64 24
  %25 = load ptr, ptr %24, align 8, !tbaa !16
  %26 = getelementptr inbounds i8, ptr %3, i64 56
  %27 = load ptr, ptr %26, align 8, !tbaa !17
  %28 = getelementptr inbounds i8, ptr %27, i64 384
  %29 = load ptr, ptr %28, align 8, !tbaa !18
  %30 = getelementptr inbounds i8, ptr %27, i64 48
  %31 = load ptr, ptr %30, align 8, !tbaa !21
  %32 = getelementptr inbounds i8, ptr %27, i64 56
  %33 = load ptr, ptr %32, align 8, !tbaa !22
  %34 = getelementptr inbounds i8, ptr %27, i64 64
  %35 = load ptr, ptr %34, align 8, !tbaa !23
  %36 = getelementptr inbounds i8, ptr %27, i64 72
  %37 = load ptr, ptr %36, align 8, !tbaa !24
  %38 = getelementptr inbounds i8, ptr %21, i64 842
  %39 = load i16, ptr %38, align 2, !tbaa !25
  %40 = getelementptr inbounds i8, ptr %21, i64 848
  %41 = load i16, ptr %40, align 8, !tbaa !27
  %42 = getelementptr inbounds i8, ptr %27, i64 328
  %43 = tail call i32 @background_at_tau(ptr noundef %21, double noundef %0, i16 noundef signext %39, i16 noundef signext %41, ptr noundef nonnull %42, ptr noundef %31) #7
  %44 = icmp eq i32 %43, 1
  br i1 %44, label %45, label %47

45:                                               ; preds = %5
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %9) #7
  %46 = getelementptr inbounds i8, ptr %21, i64 2902
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %9, ptr noundef nonnull @.str, ptr noundef nonnull @.str.345, ptr noundef nonnull %46) #7
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %4, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.perturb_derivs, i32 noundef 8405, ptr noundef nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %9) #7
  br label %2961

47:                                               ; preds = %5
  %48 = getelementptr inbounds i8, ptr %21, i64 464
  %49 = load i32, ptr %48, align 8, !tbaa !28
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds double, ptr %31, i64 %50
  %52 = load double, ptr %51, align 8, !tbaa !29
  %53 = fdiv double 1.000000e+00, %52
  %54 = fadd double %53, -1.000000e+00
  %55 = getelementptr inbounds i8, ptr %23, i64 602
  %56 = load i16, ptr %55, align 2, !tbaa !30
  %57 = getelementptr inbounds i8, ptr %27, i64 332
  %58 = tail call i32 @thermodynamics_at_z(ptr noundef nonnull %21, ptr noundef %23, double noundef %54, i16 noundef signext %56, ptr noundef nonnull %57, ptr noundef %31, ptr noundef %33) #7
  %59 = icmp eq i32 %58, 1
  br i1 %59, label %60, label %62

60:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %10) #7
  %61 = getelementptr inbounds i8, ptr %23, i64 606
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %10, ptr noundef nonnull @.str, ptr noundef nonnull @.str.349, ptr noundef nonnull %61) #7
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %4, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.perturb_derivs, i32 noundef 8415, ptr noundef nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %10) #7
  br label %2961

62:                                               ; preds = %47
  %63 = tail call i32 @perturb_einstein(ptr noundef %19, ptr noundef nonnull %21, ptr noundef nonnull %23, ptr noundef %25, i32 noundef %18, double noundef %15, double noundef %0, ptr noundef %1, ptr noundef nonnull %27)
  %64 = icmp eq i32 %63, 1
  br i1 %64, label %65, label %67

65:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %11) #7
  %66 = getelementptr inbounds i8, ptr %25, i64 27610
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %11, ptr noundef nonnull @.str, ptr noundef nonnull @.str.347, ptr noundef nonnull %66) #7
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %4, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.perturb_derivs, i32 noundef 8428, ptr noundef nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %11) #7
  br label %2961

67:                                               ; preds = %62
  %68 = load i32, ptr %48, align 8, !tbaa !28
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds double, ptr %31, i64 %69
  %71 = load double, ptr %70, align 8, !tbaa !29
  %72 = fmul double %71, %71
  %73 = getelementptr inbounds i8, ptr %21, i64 468
  %74 = load i32, ptr %73, align 4, !tbaa !32
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds double, ptr %31, i64 %75
  %77 = load double, ptr %76, align 8, !tbaa !29
  %78 = fmul double %71, %77
  %79 = getelementptr inbounds i8, ptr %21, i64 476
  %80 = load i32, ptr %79, align 4, !tbaa !33
  %81 = sext i32 %80 to i64
  %82 = getelementptr inbounds double, ptr %31, i64 %81
  %83 = load double, ptr %82, align 8, !tbaa !29
  %84 = fmul double %83, 0x3FF5555555555555
  %85 = getelementptr inbounds i8, ptr %21, i64 480
  %86 = load i32, ptr %85, align 8, !tbaa !34
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds double, ptr %31, i64 %87
  %89 = load double, ptr %88, align 8, !tbaa !29
  %90 = fdiv double %84, %89
  %91 = getelementptr inbounds i8, ptr %21, i64 742
  %92 = load i16, ptr %91, align 2, !tbaa !35
  %93 = icmp eq i16 %92, 1
  br i1 %93, label %94, label %124

94:                                               ; preds = %67
  %95 = getelementptr inbounds i8, ptr %21, i64 508
  %96 = load i32, ptr %95, align 4, !tbaa !36
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds double, ptr %31, i64 %97
  %99 = load double, ptr %98, align 8, !tbaa !29
  %100 = fmul double %99, 0x3FF5555555555555
  %101 = getelementptr inbounds i8, ptr %21, i64 504
  %102 = load i32, ptr %101, align 8, !tbaa !37
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds double, ptr %31, i64 %103
  %105 = load double, ptr %104, align 8, !tbaa !29
  %106 = fdiv double %100, %105
  %107 = getelementptr inbounds i8, ptr %23, i64 308
  %108 = load i32, ptr %107, align 4, !tbaa !38
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds double, ptr %33, i64 %109
  %111 = load double, ptr %110, align 8, !tbaa !29
  %112 = getelementptr inbounds i8, ptr %23, i64 248
  %113 = load double, ptr %112, align 8, !tbaa !39
  %114 = getelementptr inbounds i8, ptr %23, i64 240
  %115 = load double, ptr %114, align 8, !tbaa !40
  %116 = fdiv double %113, %115
  %117 = getelementptr inbounds i8, ptr %21, i64 120
  %118 = load double, ptr %117, align 8, !tbaa !41
  %119 = fmul double %116, %118
  %120 = getelementptr inbounds i8, ptr %21, i64 136
  %121 = load double, ptr %120, align 8, !tbaa !42
  %122 = fdiv double %119, %121
  %123 = fmul double %111, %122
  br label %124

124:                                              ; preds = %94, %67
  %.01767 = phi double [ %106, %94 ], [ 0.000000e+00, %67 ]
  %.01766 = phi double [ %111, %94 ], [ 0.000000e+00, %67 ]
  %.01765 = phi double [ %123, %94 ], [ 0.000000e+00, %67 ]
  %125 = getelementptr inbounds i8, ptr %21, i64 744
  %126 = load i16, ptr %125, align 8, !tbaa !43
  %127 = icmp eq i16 %126, 0
  br i1 %127, label %128, label %131

128:                                              ; preds = %124
  %129 = fmul double %15, %0
  %130 = fdiv double 1.000000e+00, %129
  br label %144

131:                                              ; preds = %124
  %132 = getelementptr inbounds i8, ptr %21, i64 352
  %133 = load double, ptr %132, align 8, !tbaa !44
  %134 = tail call double @llvm.fabs.f64(double %133)
  %sqrt = tail call double @llvm.sqrt.f64(double %134)
  %135 = fcmp olt double %133, 0.000000e+00
  %136 = fdiv double %sqrt, %15
  %137 = fmul double %sqrt, %0
  br i1 %135, label %138, label %141

138:                                              ; preds = %131
  %139 = tail call double @tanh(double noundef %137) #7
  %140 = fdiv double %136, %139
  br label %144

141:                                              ; preds = %131
  %142 = tail call double @tan(double noundef %137) #7
  %143 = fdiv double %136, %142
  br label %144

144:                                              ; preds = %138, %141, %128
  %.01775 = phi double [ %130, %128 ], [ %140, %138 ], [ %143, %141 ]
  %145 = getelementptr inbounds i8, ptr %21, i64 352
  %146 = load double, ptr %145, align 8, !tbaa !44
  %147 = fmul double %146, 3.000000e+00
  %148 = fdiv double %147, %16
  %149 = fsub double 1.000000e+00, %148
  %150 = getelementptr inbounds i8, ptr %25, i64 4
  %151 = load i16, ptr %150, align 4, !tbaa !45
  %152 = icmp eq i16 %151, 1
  br i1 %152, label %153, label %1975

153:                                              ; preds = %144
  %154 = getelementptr inbounds i8, ptr %25, i64 2028
  %155 = load i32, ptr %154, align 4, !tbaa !47
  %156 = icmp eq i32 %18, %155
  br i1 %156, label %157, label %1975

157:                                              ; preds = %153
  %158 = getelementptr inbounds i8, ptr %27, i64 368
  %159 = load ptr, ptr %158, align 8, !tbaa !48
  %160 = getelementptr inbounds i8, ptr %27, i64 340
  %161 = load i32, ptr %160, align 4, !tbaa !49
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds i32, ptr %159, i64 %162
  %164 = load i32, ptr %163, align 4, !tbaa !50
  %165 = icmp eq i32 %164, 0
  br i1 %165, label %166, label %176

166:                                              ; preds = %157
  %167 = load i32, ptr %37, align 8, !tbaa !51
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds double, ptr %1, i64 %168
  %170 = load double, ptr %169, align 8, !tbaa !29
  %171 = getelementptr inbounds i8, ptr %37, i64 4
  %172 = load i32, ptr %171, align 4, !tbaa !53
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds double, ptr %1, i64 %173
  %175 = load double, ptr %174, align 8, !tbaa !29
  br label %176

176:                                              ; preds = %166, %157
  %.01773 = phi double [ %175, %166 ], [ 0.000000e+00, %157 ]
  %.01770 = phi double [ %170, %166 ], [ 0.000000e+00, %157 ]
  %177 = getelementptr inbounds i8, ptr %21, i64 740
  %178 = load i16, ptr %177, align 4, !tbaa !54
  %179 = icmp eq i16 %178, 1
  br i1 %179, label %180, label %198

180:                                              ; preds = %176
  %181 = getelementptr inbounds i8, ptr %27, i64 348
  %182 = load i32, ptr %181, align 4, !tbaa !55
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i32, ptr %159, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !50
  %186 = icmp eq i32 %185, 0
  br i1 %186, label %187, label %198

187:                                              ; preds = %180
  %188 = getelementptr inbounds i8, ptr %37, i64 112
  %189 = load i32, ptr %188, align 8, !tbaa !56
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds double, ptr %1, i64 %190
  %192 = load double, ptr %191, align 8, !tbaa !29
  %193 = getelementptr inbounds i8, ptr %37, i64 116
  %194 = load i32, ptr %193, align 4, !tbaa !57
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds double, ptr %1, i64 %195
  %197 = load double, ptr %196, align 8, !tbaa !29
  br label %198

198:                                              ; preds = %180, %187, %176
  %.01786 = phi double [ %197, %187 ], [ 0.000000e+00, %180 ], [ 0.000000e+00, %176 ]
  %.01784 = phi double [ %192, %187 ], [ 0.000000e+00, %180 ], [ 0.000000e+00, %176 ]
  %199 = getelementptr inbounds i8, ptr %37, i64 40
  %200 = load i32, ptr %199, align 8, !tbaa !58
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds double, ptr %1, i64 %201
  %203 = load double, ptr %202, align 8, !tbaa !29
  %204 = getelementptr inbounds i8, ptr %37, i64 44
  %205 = load i32, ptr %204, align 4, !tbaa !59
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds double, ptr %1, i64 %206
  %208 = load double, ptr %207, align 8, !tbaa !29
  %209 = getelementptr inbounds i8, ptr %23, i64 352
  %210 = load i32, ptr %209, align 8, !tbaa !60
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds double, ptr %33, i64 %211
  %213 = load double, ptr %212, align 8, !tbaa !29
  %214 = fmul double %203, %213
  %215 = getelementptr inbounds i8, ptr %25, i64 20
  %216 = load i16, ptr %215, align 4, !tbaa !61
  %217 = icmp eq i16 %216, 1
  br i1 %217, label %218, label %290

218:                                              ; preds = %198
  %219 = getelementptr inbounds i8, ptr %27, i64 336
  %220 = load i32, ptr %219, align 8, !tbaa !62
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds i32, ptr %159, i64 %221
  %223 = load i32, ptr %222, align 4, !tbaa !50
  %224 = icmp eq i32 %223, 1
  br i1 %224, label %225, label %290

225:                                              ; preds = %218
  %226 = load ptr, ptr %36, align 8, !tbaa !24
  %227 = getelementptr inbounds i8, ptr %226, i64 132
  %228 = load i32, ptr %227, align 4, !tbaa !63
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds double, ptr %1, i64 %229
  %231 = load double, ptr %230, align 8, !tbaa !29
  %232 = getelementptr inbounds i8, ptr %23, i64 348
  %233 = load i32, ptr %232, align 4, !tbaa !64
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds double, ptr %33, i64 %234
  %236 = load double, ptr %235, align 8, !tbaa !29
  %237 = fadd double %203, %231
  %238 = fmul double %237, %236
  %239 = getelementptr inbounds i8, ptr %226, i64 136
  %240 = load i32, ptr %239, align 8, !tbaa !65
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds double, ptr %1, i64 %241
  %243 = load double, ptr %242, align 8, !tbaa !29
  %244 = getelementptr inbounds i8, ptr %23, i64 272
  %245 = load i32, ptr %244, align 8, !tbaa !66
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds double, ptr %33, i64 %246
  %248 = load double, ptr %247, align 8, !tbaa !29
  %249 = load double, ptr %21, align 8, !tbaa !67
  %250 = fmul double %249, 0x41B1DE784A000000
  %251 = fdiv double %250, 0x449A22FF260E3826
  %252 = fmul double %251, 3.000000e+00
  %253 = fmul double %251, %252
  %254 = getelementptr inbounds i8, ptr %21, i64 24
  %255 = load double, ptr %254, align 8, !tbaa !68
  %256 = fmul double %255, %253
  %257 = load double, ptr %23, align 8, !tbaa !69
  %258 = fsub double 1.000000e+00, %257
  %259 = fmul double %258, %256
  %260 = fdiv double %259, 0x388DDA356D683EDB
  %261 = getelementptr inbounds i8, ptr %21, i64 456
  %262 = load double, ptr %261, align 8, !tbaa !70
  %263 = fdiv double %262, %71
  %264 = fmul double %263, %263
  %265 = fmul double %263, %264
  %266 = fmul double %265, %260
  %267 = fmul double %258, 3.971500e+00
  %268 = fdiv double %257, %267
  %269 = getelementptr inbounds i8, ptr %23, i64 344
  %270 = load i32, ptr %269, align 8, !tbaa !71
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds double, ptr %33, i64 %271
  %273 = load double, ptr %272, align 8, !tbaa !29
  %274 = fmul double %273, 1.000000e-04
  %275 = tail call double @pow(double noundef %274, double noundef -6.166000e-01) #7
  %276 = fmul double %275, 4.912260e-19
  %277 = tail call double @pow(double noundef %274, double noundef 5.300000e-01) #7
  %278 = tail call double @llvm.fmuladd.f64(double %277, double 6.703000e-01, double 1.000000e+00)
  %279 = fdiv double %276, %278
  %280 = tail call double @pow(double noundef %274, double noundef 5.300000e-01) #7
  %281 = fmul double %280, 6.703000e-01
  %282 = tail call double @pow(double noundef %274, double noundef 5.300000e-01) #7
  %283 = insertelement <2 x double> poison, double %281, i64 0
  %284 = insertelement <2 x double> %283, double %282, i64 1
  %285 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %284, <2 x double> <double -1.146600e+00, double 6.703000e-01>, <2 x double> <double -6.166000e-01, double 1.000000e+00>)
  %286 = extractelement <2 x double> %285, i64 0
  %287 = extractelement <2 x double> %285, i64 1
  %288 = fdiv double %286, %287
  %289 = fmul double %231, %288
  br label %290

290:                                              ; preds = %225, %218, %198
  %.01814 = phi double [ %266, %225 ], [ 0.000000e+00, %218 ], [ 0.000000e+00, %198 ]
  %.01813 = phi double [ %268, %225 ], [ 0.000000e+00, %218 ], [ 0.000000e+00, %198 ]
  %.01812 = phi double [ %231, %225 ], [ 0.000000e+00, %218 ], [ 0.000000e+00, %198 ]
  %.01811 = phi double [ %243, %225 ], [ 0.000000e+00, %218 ], [ 0.000000e+00, %198 ]
  %.01810 = phi double [ %248, %225 ], [ 0.000000e+00, %218 ], [ 0.000000e+00, %198 ]
  %.01809 = phi double [ %279, %225 ], [ 0.000000e+00, %218 ], [ 0.000000e+00, %198 ]
  %.01808 = phi double [ %289, %225 ], [ 0.000000e+00, %218 ], [ 0.000000e+00, %198 ]
  %.01807 = phi double [ 0x3E6B286416326EA5, %225 ], [ 0.000000e+00, %218 ], [ 0.000000e+00, %198 ]
  %.01788 = phi double [ %238, %225 ], [ %214, %218 ], [ %214, %198 ]
  %291 = getelementptr inbounds i8, ptr %25, i64 2024
  %292 = load i32, ptr %291, align 8, !tbaa !72
  switch i32 %292, label %318 [
    i32 1, label %.thread
    i32 0, label %305
  ]

.thread:                                          ; preds = %290
  %293 = getelementptr inbounds i8, ptr %27, i64 8
  %294 = load i32, ptr %293, align 8, !tbaa !73
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds double, ptr %35, i64 %295
  %297 = load double, ptr %296, align 8, !tbaa !29
  %298 = fmul double %297, 5.000000e-01
  %299 = getelementptr inbounds i8, ptr %27, i64 20
  %300 = load i32, ptr %299, align 4, !tbaa !74
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds double, ptr %35, i64 %301
  %303 = load double, ptr %302, align 8, !tbaa !29
  %304 = fmul double %16, %303
  br label %318

305:                                              ; preds = %290
  %306 = getelementptr inbounds i8, ptr %27, i64 4
  %307 = load i32, ptr %306, align 4, !tbaa !75
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds double, ptr %35, i64 %308
  %310 = load double, ptr %309, align 8, !tbaa !29
  %311 = fmul double %310, -3.000000e+00
  %312 = load i32, ptr %27, align 8, !tbaa !76
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds double, ptr %35, i64 %313
  %315 = load double, ptr %314, align 8, !tbaa !29
  %316 = fmul double %16, %315
  %317 = fmul double %310, -6.000000e+00
  br label %318

318:                                              ; preds = %290, %.thread, %305
  %.11806 = phi double [ %317, %305 ], [ %298, %.thread ], [ 0.000000e+00, %290 ]
  %.11804 = phi double [ 0.000000e+00, %305 ], [ %304, %.thread ], [ 0.000000e+00, %290 ]
  %.11802 = phi double [ %316, %305 ], [ 0.000000e+00, %.thread ], [ 0.000000e+00, %290 ]
  %.11790 = phi double [ %311, %305 ], [ %298, %.thread ], [ 0.000000e+00, %290 ]
  %319 = load ptr, ptr %158, align 8, !tbaa !48
  %320 = load i32, ptr %160, align 4, !tbaa !49
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds i32, ptr %319, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !50
  %324 = icmp eq i32 %323, 1
  br i1 %324, label %325, label %330

325:                                              ; preds = %318
  %326 = getelementptr inbounds i8, ptr %27, i64 168
  %327 = load double, ptr %326, align 8, !tbaa !77
  %328 = getelementptr inbounds i8, ptr %27, i64 176
  %329 = load double, ptr %328, align 8, !tbaa !78
  br label %330

330:                                              ; preds = %325, %318
  %.11774 = phi double [ %329, %325 ], [ %.01773, %318 ]
  %.11771 = phi double [ %327, %325 ], [ %.01770, %318 ]
  %331 = load i16, ptr %177, align 4, !tbaa !54
  %332 = icmp eq i16 %331, 1
  br i1 %332, label %333, label %345

333:                                              ; preds = %330
  %334 = getelementptr inbounds i8, ptr %27, i64 348
  %335 = load i32, ptr %334, align 4, !tbaa !55
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds i32, ptr %319, i64 %336
  %338 = load i32, ptr %337, align 4, !tbaa !50
  %339 = icmp eq i32 %338, 1
  br i1 %339, label %340, label %345

340:                                              ; preds = %333
  %341 = getelementptr inbounds i8, ptr %27, i64 200
  %342 = load double, ptr %341, align 8, !tbaa !79
  %343 = getelementptr inbounds i8, ptr %27, i64 208
  %344 = load double, ptr %343, align 8, !tbaa !80
  br label %345

345:                                              ; preds = %333, %340, %330
  %.11787 = phi double [ %344, %340 ], [ %.01786, %333 ], [ %.01786, %330 ]
  %.11785 = phi double [ %342, %340 ], [ %.01784, %333 ], [ %.01784, %330 ]
  %346 = icmp eq i32 %323, 0
  br i1 %346, label %347, label %353

347:                                              ; preds = %345
  %348 = fadd double %.11790, %.11774
  %349 = fmul double %348, 0xBFF5555555555555
  %350 = load i32, ptr %37, align 8, !tbaa !51
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds double, ptr %2, i64 %351
  store double %349, ptr %352, align 8, !tbaa !29
  br label %353

353:                                              ; preds = %347, %345
  %354 = fadd double %208, %.11790
  %355 = fneg double %354
  %356 = load i32, ptr %199, align 8, !tbaa !58
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds double, ptr %2, i64 %357
  store double %355, ptr %358, align 8, !tbaa !29
  %359 = getelementptr inbounds i8, ptr %27, i64 336
  %360 = load i32, ptr %359, align 8, !tbaa !62
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds i32, ptr %319, i64 %361
  %363 = load i32, ptr %362, align 4, !tbaa !50
  %364 = icmp eq i32 %363, 1
  br i1 %364, label %365, label %380

365:                                              ; preds = %353
  %366 = fneg double %78
  %367 = tail call double @llvm.fmuladd.f64(double %366, double %208, double %.11802)
  %368 = tail call double @llvm.fmuladd.f64(double %16, double %.01788, double %367)
  %369 = getelementptr inbounds i8, ptr %23, i64 276
  %370 = load i32, ptr %369, align 4, !tbaa !81
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds double, ptr %33, i64 %371
  %373 = load double, ptr %372, align 8, !tbaa !29
  %374 = fmul double %90, %373
  %375 = fsub double %.11774, %208
  %376 = tail call double @llvm.fmuladd.f64(double %374, double %375, double %368)
  %377 = load i32, ptr %204, align 4, !tbaa !59
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds double, ptr %2, i64 %378
  store double %376, ptr %379, align 8, !tbaa !29
  br label %403

380:                                              ; preds = %353
  %381 = tail call i32 @perturb_tca_slip_and_shear(ptr noundef nonnull %1, ptr noundef nonnull %3, ptr noundef %4)
  %382 = icmp eq i32 %381, 1
  br i1 %382, label %383, label %384

383:                                              ; preds = %380
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %12) #7
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %12, ptr noundef nonnull @.str, ptr noundef nonnull @.str.356, ptr noundef %4) #7
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %4, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.perturb_derivs, i32 noundef 8600, ptr noundef nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %12) #7
  br label %2961

384:                                              ; preds = %380
  %385 = fneg double %78
  %386 = fmul double %.11771, 2.500000e-01
  %387 = getelementptr inbounds i8, ptr %27, i64 144
  %388 = load double, ptr %387, align 8, !tbaa !82
  %389 = fneg double %149
  %390 = tail call double @llvm.fmuladd.f64(double %389, double %388, double %386)
  %391 = tail call double @llvm.fmuladd.f64(double %90, double %390, double %.01788)
  %392 = fmul double %16, %391
  %393 = tail call double @llvm.fmuladd.f64(double %385, double %208, double %392)
  %394 = getelementptr inbounds i8, ptr %27, i64 152
  %395 = load double, ptr %394, align 8, !tbaa !83
  %396 = tail call double @llvm.fmuladd.f64(double %90, double %395, double %393)
  %397 = fadd double %90, 1.000000e+00
  %398 = fdiv double %396, %397
  %399 = fadd double %.11802, %398
  %400 = load i32, ptr %204, align 4, !tbaa !59
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds double, ptr %2, i64 %401
  store double %399, ptr %402, align 8, !tbaa !29
  %.pre = load ptr, ptr %158, align 8, !tbaa !48
  %.pre2011 = load i32, ptr %160, align 4, !tbaa !49
  %.phi.trans.insert = sext i32 %.pre2011 to i64
  %.phi.trans.insert2012 = getelementptr inbounds i32, ptr %.pre, i64 %.phi.trans.insert
  %.pre2013 = load i32, ptr %.phi.trans.insert2012, align 4, !tbaa !50
  br label %403

403:                                              ; preds = %384, %365
  %404 = phi double [ %399, %384 ], [ %376, %365 ]
  %405 = phi i32 [ %.pre2013, %384 ], [ %323, %365 ]
  %406 = phi ptr [ %.pre, %384 ], [ %319, %365 ]
  %407 = icmp eq i32 %405, 0
  br i1 %407, label %408, label %733

408:                                              ; preds = %403
  %409 = load i32, ptr %359, align 8, !tbaa !62
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds i32, ptr %406, i64 %410
  %412 = load i32, ptr %411, align 4, !tbaa !50
  %413 = icmp eq i32 %412, 1
  br i1 %413, label %414, label %714

414:                                              ; preds = %408
  %415 = getelementptr inbounds i8, ptr %37, i64 20
  %416 = load i32, ptr %415, align 4, !tbaa !84
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds double, ptr %1, i64 %417
  %419 = load double, ptr %418, align 8, !tbaa !29
  %420 = getelementptr inbounds i8, ptr %37, i64 28
  %421 = load i32, ptr %420, align 4, !tbaa !85
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds double, ptr %1, i64 %422
  %424 = load double, ptr %423, align 8, !tbaa !29
  %425 = fadd double %419, %424
  %426 = getelementptr inbounds i8, ptr %29, i64 16
  %427 = load double, ptr %426, align 8, !tbaa !29
  %428 = fmul double %427, 2.000000e+00
  %429 = getelementptr inbounds i8, ptr %37, i64 8
  %430 = load i32, ptr %429, align 8, !tbaa !86
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds double, ptr %1, i64 %431
  %433 = load double, ptr %432, align 8, !tbaa !29
  %434 = tail call double @llvm.fmuladd.f64(double %428, double %433, double %425)
  %435 = fmul double %434, 1.250000e-01
  %436 = fmul double %.11771, 2.500000e-01
  %437 = fneg double %149
  %438 = tail call double @llvm.fmuladd.f64(double %437, double %433, double %436)
  %439 = tail call double @llvm.fmuladd.f64(double %16, double %438, double %.11802)
  %440 = getelementptr inbounds i8, ptr %23, i64 276
  %441 = load i32, ptr %440, align 4, !tbaa !81
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds double, ptr %33, i64 %442
  %444 = load double, ptr %443, align 8, !tbaa !29
  %445 = fsub double %208, %.11774
  %446 = tail call double @llvm.fmuladd.f64(double %444, double %445, double %439)
  %447 = getelementptr inbounds i8, ptr %37, i64 4
  %448 = load i32, ptr %447, align 4, !tbaa !53
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds double, ptr %2, i64 %449
  store double %446, ptr %450, align 8, !tbaa !29
  %451 = fadd double %.11804, %.11774
  %452 = getelementptr inbounds i8, ptr %29, i64 24
  %453 = load double, ptr %452, align 8, !tbaa !29
  %454 = load double, ptr %426, align 8, !tbaa !29
  %455 = getelementptr inbounds i8, ptr %37, i64 12
  %456 = load i32, ptr %455, align 4, !tbaa !87
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds double, ptr %1, i64 %457
  %459 = load double, ptr %458, align 8, !tbaa !29
  %460 = fmul double %15, -6.000000e-01
  %461 = fmul double %460, %453
  %462 = fdiv double %461, %454
  %463 = fmul double %462, %459
  %464 = tail call double @llvm.fmuladd.f64(double %451, double 0x3FE1111111111111, double %463)
  %465 = load double, ptr %443, align 8, !tbaa !29
  %466 = load double, ptr %432, align 8, !tbaa !29
  %467 = fdiv double -8.000000e-01, %454
  %468 = fmul double %435, %467
  %469 = tail call double @llvm.fmuladd.f64(double %466, double 2.000000e+00, double %468)
  %470 = fneg double %465
  %471 = tail call double @llvm.fmuladd.f64(double %470, double %469, double %464)
  %472 = fmul double %471, 5.000000e-01
  %473 = getelementptr inbounds double, ptr %2, i64 %431
  store double %472, ptr %473, align 8, !tbaa !29
  %474 = fdiv double %15, 7.000000e+00
  %475 = load double, ptr %452, align 8, !tbaa !29
  %476 = fmul double %475, 3.000000e+00
  %477 = fmul double %476, 2.000000e+00
  %478 = load double, ptr %426, align 8, !tbaa !29
  %479 = fmul double %478, %477
  %480 = load double, ptr %432, align 8, !tbaa !29
  %481 = getelementptr inbounds i8, ptr %29, i64 32
  %482 = load double, ptr %481, align 8, !tbaa !29
  %483 = getelementptr i8, ptr %458, i64 8
  %484 = load double, ptr %483, align 8, !tbaa !29
  %485 = fmul double %482, -4.000000e+00
  %486 = fmul double %485, %484
  %487 = tail call double @llvm.fmuladd.f64(double %479, double %480, double %486)
  %488 = load double, ptr %443, align 8, !tbaa !29
  %489 = load double, ptr %458, align 8, !tbaa !29
  %490 = fneg double %488
  %491 = fmul double %489, %490
  %492 = tail call double @llvm.fmuladd.f64(double %474, double %487, double %491)
  %493 = getelementptr inbounds double, ptr %2, i64 %457
  store double %492, ptr %493, align 8, !tbaa !29
  %494 = getelementptr inbounds i8, ptr %37, i64 16
  %495 = load i32, ptr %494, align 8, !tbaa !88
  %496 = icmp sgt i32 %495, 4
  %.pre2014 = load i32, ptr %37, align 8, !tbaa !51
  br i1 %496, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %414
  %497 = sext i32 %.pre2014 to i64
  %wide.trip.count = zext nneg i32 %495 to i64
  %498 = add nsw i64 %wide.trip.count, -4
  %min.iters.check = icmp ult i64 %498, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph
  %499 = shl nsw i64 %497, 3
  %500 = getelementptr i8, ptr %2, i64 %499
  %scevgep = getelementptr i8, ptr %500, i64 32
  %501 = shl nuw nsw i64 %wide.trip.count, 3
  %502 = getelementptr i8, ptr %2, i64 %499
  %scevgep2093 = getelementptr i8, ptr %502, i64 %501
  %scevgep2094 = getelementptr i8, ptr %29, i64 32
  %503 = getelementptr i8, ptr %29, i64 %501
  %scevgep2095 = getelementptr i8, ptr %503, i64 8
  %504 = getelementptr i8, ptr %1, i64 %499
  %scevgep2096 = getelementptr i8, ptr %504, i64 24
  %505 = getelementptr i8, ptr %1, i64 %499
  %506 = getelementptr i8, ptr %505, i64 %501
  %scevgep2097 = getelementptr i8, ptr %506, i64 8
  %507 = shl nsw i64 %442, 3
  %508 = getelementptr i8, ptr %33, i64 %507
  %scevgep2098 = getelementptr i8, ptr %508, i64 8
  %bound0 = icmp ult ptr %scevgep, %scevgep2095
  %bound1 = icmp ult ptr %scevgep2094, %scevgep2093
  %found.conflict = and i1 %bound0, %bound1
  %bound02099 = icmp ult ptr %scevgep, %scevgep2097
  %bound12100 = icmp ult ptr %scevgep2096, %scevgep2093
  %found.conflict2101 = and i1 %bound02099, %bound12100
  %conflict.rdx = or i1 %found.conflict, %found.conflict2101
  %bound02102 = icmp ult ptr %scevgep, %scevgep2098
  %bound12103 = icmp ult ptr %443, %scevgep2093
  %found.conflict2104 = and i1 %bound02102, %bound12103
  %conflict.rdx2105 = or i1 %conflict.rdx, %found.conflict2104
  br i1 %conflict.rdx2105, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %498, -2
  %ind.end = add nsw i64 %n.vec, 4
  %broadcast.splatinsert = insertelement <2 x double> poison, double %15, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %509 = load double, ptr %443, align 8, !tbaa !29, !alias.scope !89
  %broadcast.splatinsert2110 = insertelement <2 x double> poison, double %509, i64 0
  %broadcast.splat2111 = shufflevector <2 x double> %broadcast.splatinsert2110, <2 x double> poison, <2 x i32> zeroinitializer
  %510 = fneg <2 x double> %broadcast.splat2111
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <2 x i32> [ <i32 4, i32 5>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %offset.idx = add i64 %index, 4
  %511 = uitofp <2 x i32> %vec.ind to <2 x double>
  %512 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %511, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %513 = fdiv <2 x double> %broadcast.splat, %512
  %514 = getelementptr inbounds double, ptr %29, i64 %offset.idx
  %wide.load = load <2 x double>, ptr %514, align 8, !tbaa !29, !alias.scope !92
  %515 = fmul <2 x double> %wide.load, %511
  %516 = add nsw i64 %offset.idx, %497
  %517 = getelementptr double, ptr %1, i64 %516
  %518 = getelementptr i8, ptr %517, i64 -8
  %wide.load2106 = load <2 x double>, ptr %518, align 8, !tbaa !29, !alias.scope !94
  %519 = insertelement <2 x i64> poison, i64 %index, i64 0
  %520 = shufflevector <2 x i64> %519, <2 x i64> poison, <2 x i32> zeroinitializer
  %521 = add <2 x i64> %520, <i64 5, i64 6>
  %522 = trunc <2 x i64> %521 to <2 x i32>
  %523 = uitofp <2 x i32> %522 to <2 x double>
  %524 = extractelement <2 x i64> %521, i64 0
  %525 = getelementptr inbounds double, ptr %29, i64 %524
  %wide.load2107 = load <2 x double>, ptr %525, align 8, !tbaa !29, !alias.scope !92
  %526 = getelementptr i8, ptr %517, i64 8
  %wide.load2108 = load <2 x double>, ptr %526, align 8, !tbaa !29, !alias.scope !94
  %527 = fneg <2 x double> %wide.load2107
  %528 = fmul <2 x double> %523, %527
  %529 = fmul <2 x double> %528, %wide.load2108
  %530 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %515, <2 x double> %wide.load2106, <2 x double> %529)
  %wide.load2109 = load <2 x double>, ptr %517, align 8, !tbaa !29, !alias.scope !94
  %531 = fmul <2 x double> %wide.load2109, %510
  %532 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %513, <2 x double> %530, <2 x double> %531)
  %533 = getelementptr inbounds double, ptr %2, i64 %516
  store <2 x double> %532, ptr %533, align 8, !tbaa !29, !alias.scope !96, !noalias !98
  %index.next = add nuw i64 %index, 2
  %vec.ind.next = add <2 x i32> %vec.ind, <i32 2, i32 2>
  %534 = icmp eq i64 %index.next, %n.vec
  br i1 %534, label %middle.block, label %vector.body, !llvm.loop !99

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %498, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph
  %indvars.iv.ph = phi i64 [ 4, %vector.memcheck ], [ 4, %.lr.ph ], [ %ind.end, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %535 = trunc nuw nsw i64 %indvars.iv to i32
  %536 = uitofp nneg i32 %535 to double
  %537 = tail call double @llvm.fmuladd.f64(double %536, double 2.000000e+00, double 1.000000e+00)
  %538 = fdiv double %15, %537
  %539 = getelementptr inbounds double, ptr %29, i64 %indvars.iv
  %540 = load double, ptr %539, align 8, !tbaa !29
  %541 = fmul double %540, %536
  %542 = add nsw i64 %indvars.iv, %497
  %543 = getelementptr double, ptr %1, i64 %542
  %544 = getelementptr i8, ptr %543, i64 -8
  %545 = load double, ptr %544, align 8, !tbaa !29
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %546 = trunc nuw nsw i64 %indvars.iv.next to i32
  %547 = uitofp nneg i32 %546 to double
  %548 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next
  %549 = load double, ptr %548, align 8, !tbaa !29
  %550 = getelementptr i8, ptr %543, i64 8
  %551 = load double, ptr %550, align 8, !tbaa !29
  %552 = fneg double %549
  %553 = fmul double %547, %552
  %554 = fmul double %553, %551
  %555 = tail call double @llvm.fmuladd.f64(double %541, double %545, double %554)
  %556 = load double, ptr %443, align 8, !tbaa !29
  %557 = load double, ptr %543, align 8, !tbaa !29
  %558 = fneg double %556
  %559 = fmul double %557, %558
  %560 = tail call double @llvm.fmuladd.f64(double %538, double %555, double %559)
  %561 = getelementptr inbounds double, ptr %2, i64 %542
  store double %560, ptr %561, align 8, !tbaa !29
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph, !llvm.loop !103

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %414
  %562 = sext i32 %495 to i64
  %563 = getelementptr inbounds double, ptr %29, i64 %562
  %564 = load double, ptr %563, align 8, !tbaa !29
  %565 = add nsw i32 %.pre2014, %495
  %566 = sext i32 %565 to i64
  %567 = getelementptr double, ptr %1, i64 %566
  %568 = getelementptr i8, ptr %567, i64 -8
  %569 = load double, ptr %568, align 8, !tbaa !29
  %570 = sitofp i32 %495 to double
  %571 = fadd double %570, 1.000000e+00
  %572 = load double, ptr %567, align 8, !tbaa !29
  %573 = fneg double %571
  %574 = fmul double %.01775, %573
  %575 = fmul double %574, %572
  %576 = tail call double @llvm.fmuladd.f64(double %564, double %569, double %575)
  %577 = load double, ptr %443, align 8, !tbaa !29
  %578 = fneg double %577
  %579 = fmul double %572, %578
  %580 = tail call double @llvm.fmuladd.f64(double %15, double %576, double %579)
  %581 = getelementptr inbounds double, ptr %2, i64 %566
  store double %580, ptr %581, align 8, !tbaa !29
  %582 = fneg double %15
  %583 = getelementptr i8, ptr %418, i64 8
  %584 = load double, ptr %583, align 8, !tbaa !29
  %585 = load double, ptr %443, align 8, !tbaa !29
  %586 = load double, ptr %418, align 8, !tbaa !29
  %587 = tail call double @llvm.fmuladd.f64(double %435, double -4.000000e+00, double %586)
  %588 = fneg double %585
  %589 = fmul double %587, %588
  %590 = tail call double @llvm.fmuladd.f64(double %582, double %584, double %589)
  %591 = getelementptr inbounds double, ptr %2, i64 %417
  store double %590, ptr %591, align 8, !tbaa !29
  %592 = fdiv double %15, 3.000000e+00
  %593 = getelementptr inbounds i8, ptr %37, i64 24
  %594 = load i32, ptr %593, align 8, !tbaa !104
  %595 = sext i32 %594 to i64
  %596 = getelementptr double, ptr %1, i64 %595
  %597 = getelementptr i8, ptr %596, i64 -8
  %598 = load double, ptr %597, align 8, !tbaa !29
  %599 = load double, ptr %426, align 8, !tbaa !29
  %600 = getelementptr i8, ptr %596, i64 8
  %601 = load double, ptr %600, align 8, !tbaa !29
  %602 = fmul double %599, -2.000000e+00
  %603 = tail call double @llvm.fmuladd.f64(double %602, double %601, double %598)
  %604 = load double, ptr %443, align 8, !tbaa !29
  %605 = load double, ptr %596, align 8, !tbaa !29
  %606 = fneg double %604
  %607 = fmul double %605, %606
  %608 = tail call double @llvm.fmuladd.f64(double %592, double %603, double %607)
  %609 = getelementptr inbounds double, ptr %2, i64 %595
  store double %608, ptr %609, align 8, !tbaa !29
  %610 = fdiv double %15, 5.000000e+00
  %611 = load double, ptr %426, align 8, !tbaa !29
  %612 = fmul double %611, 2.000000e+00
  %613 = getelementptr i8, ptr %423, i64 -8
  %614 = load double, ptr %613, align 8, !tbaa !29
  %615 = load double, ptr %452, align 8, !tbaa !29
  %616 = getelementptr i8, ptr %423, i64 8
  %617 = load double, ptr %616, align 8, !tbaa !29
  %618 = fmul double %615, -3.000000e+00
  %619 = fmul double %618, %617
  %620 = tail call double @llvm.fmuladd.f64(double %612, double %614, double %619)
  %621 = load double, ptr %443, align 8, !tbaa !29
  %622 = load double, ptr %423, align 8, !tbaa !29
  %623 = tail call double @llvm.fmuladd.f64(double %435, double -8.000000e-01, double %622)
  %624 = fneg double %621
  %625 = fmul double %623, %624
  %626 = tail call double @llvm.fmuladd.f64(double %610, double %620, double %625)
  %627 = getelementptr inbounds double, ptr %2, i64 %422
  store double %626, ptr %627, align 8, !tbaa !29
  %628 = getelementptr inbounds i8, ptr %37, i64 36
  %629 = load i32, ptr %628, align 4, !tbaa !105
  %630 = icmp sgt i32 %629, 3
  br i1 %630, label %.lr.ph1860.preheader, label %._crit_edge1861

.lr.ph1860.preheader:                             ; preds = %._crit_edge
  %wide.trip.count1942 = zext nneg i32 %629 to i64
  %631 = add nsw i64 %wide.trip.count1942, -3
  %min.iters.check2133 = icmp ult i64 %631, 4
  br i1 %min.iters.check2133, label %.lr.ph1860.preheader2532, label %vector.memcheck2112

vector.memcheck2112:                              ; preds = %.lr.ph1860.preheader
  %632 = shl nsw i64 %417, 3
  %633 = getelementptr i8, ptr %2, i64 %632
  %scevgep2113 = getelementptr i8, ptr %633, i64 24
  %634 = shl nuw nsw i64 %wide.trip.count1942, 3
  %635 = getelementptr i8, ptr %2, i64 %632
  %scevgep2114 = getelementptr i8, ptr %635, i64 %634
  %scevgep2115 = getelementptr i8, ptr %29, i64 24
  %636 = getelementptr i8, ptr %29, i64 %634
  %scevgep2116 = getelementptr i8, ptr %636, i64 8
  %637 = getelementptr i8, ptr %1, i64 %632
  %scevgep2117 = getelementptr i8, ptr %637, i64 16
  %638 = getelementptr i8, ptr %1, i64 %632
  %639 = getelementptr i8, ptr %638, i64 %634
  %scevgep2118 = getelementptr i8, ptr %639, i64 8
  %640 = shl nsw i64 %442, 3
  %641 = getelementptr i8, ptr %33, i64 %640
  %scevgep2119 = getelementptr i8, ptr %641, i64 8
  %bound02120 = icmp ult ptr %scevgep2113, %scevgep2116
  %bound12121 = icmp ult ptr %scevgep2115, %scevgep2114
  %found.conflict2122 = and i1 %bound02120, %bound12121
  %bound02123 = icmp ult ptr %scevgep2113, %scevgep2118
  %bound12124 = icmp ult ptr %scevgep2117, %scevgep2114
  %found.conflict2125 = and i1 %bound02123, %bound12124
  %conflict.rdx2126 = or i1 %found.conflict2122, %found.conflict2125
  %bound02127 = icmp ult ptr %scevgep2113, %scevgep2119
  %bound12128 = icmp ult ptr %443, %scevgep2114
  %found.conflict2129 = and i1 %bound02127, %bound12128
  %conflict.rdx2130 = or i1 %conflict.rdx2126, %found.conflict2129
  br i1 %conflict.rdx2130, label %.lr.ph1860.preheader2532, label %vector.ph2134

vector.ph2134:                                    ; preds = %vector.memcheck2112
  %n.vec2136 = and i64 %631, -2
  %ind.end2137 = add nsw i64 %n.vec2136, 3
  %broadcast.splatinsert2144 = insertelement <2 x double> poison, double %15, i64 0
  %broadcast.splat2145 = shufflevector <2 x double> %broadcast.splatinsert2144, <2 x double> poison, <2 x i32> zeroinitializer
  %642 = load double, ptr %443, align 8, !tbaa !29, !alias.scope !106
  %broadcast.splatinsert2151 = insertelement <2 x double> poison, double %642, i64 0
  %broadcast.splat2152 = shufflevector <2 x double> %broadcast.splatinsert2151, <2 x double> poison, <2 x i32> zeroinitializer
  %643 = fneg <2 x double> %broadcast.splat2152
  br label %vector.body2139

vector.body2139:                                  ; preds = %vector.body2139, %vector.ph2134
  %index2140 = phi i64 [ 0, %vector.ph2134 ], [ %index.next2153, %vector.body2139 ]
  %vec.ind2141 = phi <2 x i32> [ <i32 3, i32 4>, %vector.ph2134 ], [ %vec.ind.next2142, %vector.body2139 ]
  %offset.idx2143 = add i64 %index2140, 3
  %644 = uitofp <2 x i32> %vec.ind2141 to <2 x double>
  %645 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %644, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %646 = fdiv <2 x double> %broadcast.splat2145, %645
  %647 = getelementptr inbounds double, ptr %29, i64 %offset.idx2143
  %wide.load2146 = load <2 x double>, ptr %647, align 8, !tbaa !29, !alias.scope !109
  %648 = fmul <2 x double> %wide.load2146, %644
  %649 = add nsw i64 %offset.idx2143, %417
  %650 = getelementptr double, ptr %1, i64 %649
  %651 = getelementptr i8, ptr %650, i64 -8
  %wide.load2147 = load <2 x double>, ptr %651, align 8, !tbaa !29, !alias.scope !111
  %652 = insertelement <2 x i64> poison, i64 %index2140, i64 0
  %653 = shufflevector <2 x i64> %652, <2 x i64> poison, <2 x i32> zeroinitializer
  %654 = add <2 x i64> %653, <i64 4, i64 5>
  %655 = trunc <2 x i64> %654 to <2 x i32>
  %656 = uitofp <2 x i32> %655 to <2 x double>
  %657 = extractelement <2 x i64> %654, i64 0
  %658 = getelementptr inbounds double, ptr %29, i64 %657
  %wide.load2148 = load <2 x double>, ptr %658, align 8, !tbaa !29, !alias.scope !109
  %659 = getelementptr i8, ptr %650, i64 8
  %wide.load2149 = load <2 x double>, ptr %659, align 8, !tbaa !29, !alias.scope !111
  %660 = fneg <2 x double> %wide.load2148
  %661 = fmul <2 x double> %656, %660
  %662 = fmul <2 x double> %661, %wide.load2149
  %663 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %648, <2 x double> %wide.load2147, <2 x double> %662)
  %wide.load2150 = load <2 x double>, ptr %650, align 8, !tbaa !29, !alias.scope !111
  %664 = fmul <2 x double> %wide.load2150, %643
  %665 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %646, <2 x double> %663, <2 x double> %664)
  %666 = getelementptr inbounds double, ptr %2, i64 %649
  store <2 x double> %665, ptr %666, align 8, !tbaa !29, !alias.scope !113, !noalias !115
  %index.next2153 = add nuw i64 %index2140, 2
  %vec.ind.next2142 = add <2 x i32> %vec.ind2141, <i32 2, i32 2>
  %667 = icmp eq i64 %index.next2153, %n.vec2136
  br i1 %667, label %middle.block2131, label %vector.body2139, !llvm.loop !116

middle.block2131:                                 ; preds = %vector.body2139
  %cmp.n2154 = icmp eq i64 %631, %n.vec2136
  br i1 %cmp.n2154, label %._crit_edge1861, label %.lr.ph1860.preheader2532

.lr.ph1860.preheader2532:                         ; preds = %middle.block2131, %vector.memcheck2112, %.lr.ph1860.preheader
  %indvars.iv1939.ph = phi i64 [ 3, %vector.memcheck2112 ], [ 3, %.lr.ph1860.preheader ], [ %ind.end2137, %middle.block2131 ]
  br label %.lr.ph1860

.lr.ph1860:                                       ; preds = %.lr.ph1860.preheader2532, %.lr.ph1860
  %indvars.iv1939 = phi i64 [ %indvars.iv.next1940, %.lr.ph1860 ], [ %indvars.iv1939.ph, %.lr.ph1860.preheader2532 ]
  %668 = trunc nuw nsw i64 %indvars.iv1939 to i32
  %669 = uitofp nneg i32 %668 to double
  %670 = tail call double @llvm.fmuladd.f64(double %669, double 2.000000e+00, double 1.000000e+00)
  %671 = fdiv double %15, %670
  %672 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1939
  %673 = load double, ptr %672, align 8, !tbaa !29
  %674 = fmul double %673, %669
  %675 = add nsw i64 %indvars.iv1939, %417
  %676 = getelementptr double, ptr %1, i64 %675
  %677 = getelementptr i8, ptr %676, i64 -8
  %678 = load double, ptr %677, align 8, !tbaa !29
  %indvars.iv.next1940 = add nuw nsw i64 %indvars.iv1939, 1
  %679 = trunc nuw nsw i64 %indvars.iv.next1940 to i32
  %680 = uitofp nneg i32 %679 to double
  %681 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1940
  %682 = load double, ptr %681, align 8, !tbaa !29
  %683 = getelementptr i8, ptr %676, i64 8
  %684 = load double, ptr %683, align 8, !tbaa !29
  %685 = fneg double %682
  %686 = fmul double %680, %685
  %687 = fmul double %686, %684
  %688 = tail call double @llvm.fmuladd.f64(double %674, double %678, double %687)
  %689 = load double, ptr %443, align 8, !tbaa !29
  %690 = load double, ptr %676, align 8, !tbaa !29
  %691 = fneg double %689
  %692 = fmul double %690, %691
  %693 = tail call double @llvm.fmuladd.f64(double %671, double %688, double %692)
  %694 = getelementptr inbounds double, ptr %2, i64 %675
  store double %693, ptr %694, align 8, !tbaa !29
  %exitcond1943.not = icmp eq i64 %indvars.iv.next1940, %wide.trip.count1942
  br i1 %exitcond1943.not, label %._crit_edge1861, label %.lr.ph1860, !llvm.loop !117

._crit_edge1861:                                  ; preds = %.lr.ph1860, %middle.block2131, %._crit_edge
  %695 = sext i32 %629 to i64
  %696 = getelementptr inbounds double, ptr %29, i64 %695
  %697 = load double, ptr %696, align 8, !tbaa !29
  %698 = add nsw i32 %629, %416
  %699 = sext i32 %698 to i64
  %700 = getelementptr double, ptr %1, i64 %699
  %701 = getelementptr i8, ptr %700, i64 -8
  %702 = load double, ptr %701, align 8, !tbaa !29
  %703 = add nsw i32 %629, 1
  %704 = sitofp i32 %703 to double
  %705 = load double, ptr %700, align 8, !tbaa !29
  %706 = fneg double %.01775
  %707 = fmul double %706, %704
  %708 = fmul double %707, %705
  %709 = tail call double @llvm.fmuladd.f64(double %697, double %702, double %708)
  %710 = load double, ptr %443, align 8, !tbaa !29
  %711 = fneg double %710
  %712 = fmul double %705, %711
  %713 = tail call double @llvm.fmuladd.f64(double %15, double %709, double %712)
  br label %.sink.split

714:                                              ; preds = %408
  %715 = tail call double @llvm.fmuladd.f64(double %78, double %208, double %404)
  %716 = fneg double %16
  %717 = tail call double @llvm.fmuladd.f64(double %716, double %.01788, double %715)
  %718 = fneg double %717
  %719 = fdiv double %718, %90
  %720 = getelementptr inbounds i8, ptr %27, i64 144
  %721 = load double, ptr %720, align 8, !tbaa !82
  %722 = fneg double %149
  %723 = fmul double %721, %722
  %724 = tail call double @llvm.fmuladd.f64(double %.11771, double 2.500000e-01, double %723)
  %725 = tail call double @llvm.fmuladd.f64(double %16, double %724, double %719)
  %726 = fadd double %90, 1.000000e+00
  %727 = fdiv double %726, %90
  %728 = tail call double @llvm.fmuladd.f64(double %727, double %.11802, double %725)
  %729 = getelementptr inbounds i8, ptr %37, i64 4
  %730 = load i32, ptr %729, align 4, !tbaa !53
  %731 = sext i32 %730 to i64
  br label %.sink.split

.sink.split:                                      ; preds = %714, %._crit_edge1861
  %.sink2043 = phi i64 [ %699, %._crit_edge1861 ], [ %731, %714 ]
  %.sink = phi double [ %713, %._crit_edge1861 ], [ %728, %714 ]
  %732 = getelementptr inbounds double, ptr %2, i64 %.sink2043
  store double %.sink, ptr %732, align 8, !tbaa !29
  br label %733

733:                                              ; preds = %.sink.split, %403
  %734 = getelementptr inbounds i8, ptr %21, i64 724
  %735 = load i16, ptr %734, align 4, !tbaa !118
  %736 = icmp eq i16 %735, 1
  br i1 %736, label %737, label %759

737:                                              ; preds = %733
  %738 = load i32, ptr %291, align 8, !tbaa !72
  switch i32 %738, label %759 [
    i32 0, label %.thread1833
    i32 1, label %753
  ]

.thread1833:                                      ; preds = %737
  %739 = getelementptr inbounds i8, ptr %37, i64 52
  %740 = load i32, ptr %739, align 4, !tbaa !119
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds double, ptr %1, i64 %741
  %743 = load double, ptr %742, align 8, !tbaa !29
  %744 = fadd double %.11790, %743
  %745 = fneg double %744
  %746 = getelementptr inbounds i8, ptr %37, i64 48
  %747 = load i32, ptr %746, align 8, !tbaa !120
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds double, ptr %2, i64 %748
  store double %745, ptr %749, align 8, !tbaa !29
  %750 = fneg double %78
  %751 = load double, ptr %742, align 8, !tbaa !29
  %752 = tail call double @llvm.fmuladd.f64(double %750, double %751, double %.11802)
  br label %.sink.split2044

753:                                              ; preds = %737
  %754 = fneg double %.11790
  %755 = getelementptr inbounds i8, ptr %37, i64 48
  %756 = load i32, ptr %755, align 8, !tbaa !120
  %757 = sext i32 %756 to i64
  br label %.sink.split2044

.sink.split2044:                                  ; preds = %753, %.thread1833
  %.sink2047 = phi i64 [ %741, %.thread1833 ], [ %757, %753 ]
  %.sink2045 = phi double [ %752, %.thread1833 ], [ %754, %753 ]
  %758 = getelementptr inbounds double, ptr %2, i64 %.sink2047
  store double %.sink2045, ptr %758, align 8, !tbaa !29
  br label %759

759:                                              ; preds = %.sink.split2044, %737, %733
  %760 = load i16, ptr %177, align 4, !tbaa !54
  %761 = icmp eq i16 %760, 1
  br i1 %761, label %762, label %776

762:                                              ; preds = %759
  %763 = getelementptr inbounds i8, ptr %27, i64 348
  %764 = load i32, ptr %763, align 4, !tbaa !55
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds i32, ptr %406, i64 %765
  %767 = load i32, ptr %766, align 4, !tbaa !50
  %768 = icmp eq i32 %767, 0
  br i1 %768, label %769, label %776

769:                                              ; preds = %762
  %770 = fadd double %.11790, %.11787
  %771 = fmul double %770, 0xBFF5555555555555
  %772 = getelementptr inbounds i8, ptr %37, i64 112
  %773 = load i32, ptr %772, align 8, !tbaa !56
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds double, ptr %2, i64 %774
  store double %771, ptr %775, align 8, !tbaa !29
  br label %776

776:                                              ; preds = %762, %769, %759
  %777 = load i16, ptr %91, align 2, !tbaa !35
  %778 = icmp eq i16 %777, 1
  br i1 %778, label %779, label %880

779:                                              ; preds = %776
  %780 = getelementptr inbounds i8, ptr %37, i64 60
  %781 = load i32, ptr %780, align 4, !tbaa !121
  %782 = sext i32 %781 to i64
  %783 = getelementptr inbounds double, ptr %1, i64 %782
  %784 = load double, ptr %783, align 8, !tbaa !29
  %785 = fadd double %.11790, %784
  %786 = fneg double %785
  %787 = getelementptr inbounds i8, ptr %37, i64 56
  %788 = load i32, ptr %787, align 8, !tbaa !122
  %789 = sext i32 %788 to i64
  %790 = getelementptr inbounds double, ptr %2, i64 %789
  store double %786, ptr %790, align 8, !tbaa !29
  %791 = getelementptr inbounds i8, ptr %27, i64 344
  %792 = load i32, ptr %791, align 8, !tbaa !123
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds i32, ptr %406, i64 %793
  %795 = load i32, ptr %794, align 4, !tbaa !50
  %796 = icmp eq i32 %795, 1
  br i1 %796, label %797, label %817

797:                                              ; preds = %779
  %798 = fneg double %78
  %799 = load double, ptr %783, align 8, !tbaa !29
  %800 = tail call double @llvm.fmuladd.f64(double %798, double %799, double %.11802)
  %801 = getelementptr inbounds double, ptr %2, i64 %782
  store double %800, ptr %801, align 8, !tbaa !29
  %802 = fmul double %.01767, %.01766
  %803 = load double, ptr %783, align 8, !tbaa !29
  %804 = fsub double %803, %.11787
  %805 = getelementptr inbounds i8, ptr %23, i64 336
  %806 = load i32, ptr %805, align 8, !tbaa !124
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds double, ptr %33, i64 %807
  %809 = load double, ptr %808, align 8, !tbaa !29
  %810 = getelementptr inbounds double, ptr %1, i64 %789
  %811 = load double, ptr %810, align 8, !tbaa !29
  %812 = fneg double %16
  %813 = fmul double %809, %812
  %814 = fmul double %813, %811
  %815 = tail call double @llvm.fmuladd.f64(double %802, double %804, double %814)
  %816 = fsub double %800, %815
  store double %816, ptr %801, align 8, !tbaa !29
  br label %880

817:                                              ; preds = %779
  %818 = getelementptr inbounds i8, ptr %23, i64 256
  %819 = load double, ptr %818, align 8, !tbaa !125
  %820 = fadd double %.01767, 1.000000e+00
  %821 = fdiv double 2.000000e+00, %820
  %822 = fsub double %819, %821
  %823 = fmul double %78, %822
  %824 = load double, ptr %783, align 8, !tbaa !29
  %825 = fsub double %824, %.11787
  %826 = fdiv double 1.000000e+00, %820
  %827 = fdiv double %826, %.01766
  %828 = getelementptr inbounds i8, ptr %21, i64 472
  %829 = load i32, ptr %828, align 8, !tbaa !126
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds double, ptr %31, i64 %830
  %832 = load double, ptr %831, align 8, !tbaa !29
  %833 = fmul double %78, 2.000000e+00
  %834 = fmul double %78, %833
  %835 = tail call double @llvm.fmuladd.f64(double %832, double %71, double %834)
  %836 = fneg double %835
  %837 = fmul double %16, 5.000000e-01
  %838 = tail call double @llvm.fmuladd.f64(double %837, double %.11785, double %.11802)
  %839 = fneg double %78
  %840 = fmul double %838, %839
  %841 = tail call double @llvm.fmuladd.f64(double %836, double %824, double %840)
  %842 = getelementptr inbounds i8, ptr %23, i64 336
  %843 = load i32, ptr %842, align 8, !tbaa !124
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds double, ptr %33, i64 %844
  %846 = load double, ptr %845, align 8, !tbaa !29
  %847 = getelementptr inbounds i8, ptr %37, i64 112
  %848 = load i32, ptr %847, align 8, !tbaa !56
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds double, ptr %2, i64 %849
  %851 = load double, ptr %850, align 8, !tbaa !29
  %852 = fmul double %851, -2.500000e-01
  %853 = tail call double @llvm.fmuladd.f64(double %846, double %786, double %852)
  %854 = tail call double @llvm.fmuladd.f64(double %16, double %853, double %841)
  %855 = fmul double %827, %854
  %856 = tail call double @llvm.fmuladd.f64(double %823, double %825, double %855)
  %857 = fdiv double 0x3FD1111111111111, %.01766
  %858 = getelementptr inbounds i8, ptr %25, i64 2000
  %859 = load ptr, ptr %858, align 8, !tbaa !127
  %860 = load double, ptr %859, align 8, !tbaa !29
  %861 = fdiv double %857, %860
  %862 = fadd double %.11804, %824
  %863 = fmul double %862, %861
  %864 = getelementptr inbounds i8, ptr %27, i64 160
  store double %863, ptr %864, align 8, !tbaa !128
  %865 = load double, ptr %783, align 8, !tbaa !29
  %866 = load double, ptr %845, align 8, !tbaa !29
  %867 = fmul double %16, %866
  %868 = getelementptr inbounds double, ptr %1, i64 %789
  %869 = load double, ptr %868, align 8, !tbaa !29
  %870 = fmul double %867, %869
  %871 = tail call double @llvm.fmuladd.f64(double %839, double %865, double %870)
  %872 = fmul double %16, %.01767
  %873 = fmul double %.11785, 2.500000e-01
  %874 = fsub double %873, %863
  %875 = tail call double @llvm.fmuladd.f64(double %872, double %874, double %871)
  %876 = tail call double @llvm.fmuladd.f64(double %826, double %875, double %.11802)
  %877 = fdiv double %.01767, %820
  %878 = tail call double @llvm.fmuladd.f64(double %877, double %856, double %876)
  %879 = getelementptr inbounds double, ptr %2, i64 %782
  store double %878, ptr %879, align 8, !tbaa !29
  br label %880

880:                                              ; preds = %797, %817, %776
  %.0 = phi double [ 0.000000e+00, %797 ], [ %856, %817 ], [ 0.000000e+00, %776 ]
  %881 = load i16, ptr %215, align 4, !tbaa !61
  %882 = icmp eq i16 %881, 1
  br i1 %882, label %883, label %946

883:                                              ; preds = %880
  %884 = load i32, ptr %359, align 8, !tbaa !62
  %885 = sext i32 %884 to i64
  %886 = getelementptr inbounds i32, ptr %406, i64 %885
  %887 = load i32, ptr %886, align 4, !tbaa !50
  %888 = icmp eq i32 %887, 1
  br i1 %888, label %889, label %946

889:                                              ; preds = %883
  %890 = fneg double %.01809
  %891 = fmul double %71, %890
  %892 = fmul double %.01810, %891
  %893 = fmul double %.01814, %892
  %894 = fadd double %.01811, %.01808
  %895 = fadd double %203, %894
  %896 = fmul double %893, %895
  %897 = fmul double %896, 0x449A22FF260E3826
  %898 = fdiv double %897, 0x41B1DE784A000000
  %899 = load ptr, ptr %36, align 8, !tbaa !24
  %900 = getelementptr inbounds i8, ptr %899, i64 136
  %901 = load i32, ptr %900, align 8, !tbaa !65
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds double, ptr %2, i64 %902
  store double %898, ptr %903, align 8, !tbaa !29
  %904 = getelementptr inbounds i8, ptr %899, i64 40
  %905 = load i32, ptr %904, align 8, !tbaa !58
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds double, ptr %2, i64 %906
  %908 = load double, ptr %907, align 8, !tbaa !29
  %909 = getelementptr inbounds i8, ptr %21, i64 16
  %910 = load double, ptr %909, align 8, !tbaa !129
  %911 = fdiv double %910, %71
  %912 = tail call double @pow(double noundef %911, double noundef 4.000000e+00) #7
  %913 = fadd double %.01810, 1.000000e+00
  %914 = fadd double %.01813, %913
  %915 = load double, ptr %909, align 8, !tbaa !129
  %916 = getelementptr inbounds i8, ptr %21, i64 456
  %917 = load double, ptr %916, align 8, !tbaa !70
  %918 = fmul double %915, %917
  %919 = fdiv double %918, %71
  %920 = getelementptr inbounds i8, ptr %23, i64 344
  %921 = load i32, ptr %920, align 8, !tbaa !71
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds double, ptr %33, i64 %922
  %924 = load double, ptr %923, align 8, !tbaa !29
  %925 = fdiv double %919, %924
  %926 = fsub double 1.000000e+00, %925
  %927 = fadd double %.01813, 1.000000e+00
  %928 = fmul double %927, %.01811
  %929 = fdiv double %928, %914
  %930 = fadd double %929, %.11771
  %931 = tail call double @llvm.fmuladd.f64(double %.11771, double -2.500000e-01, double %.01812)
  %932 = fmul double %931, %925
  %933 = tail call double @llvm.fmuladd.f64(double %926, double %930, double %932)
  %934 = fneg double %71
  %935 = fmul double %.01807, %934
  %936 = fmul double %935, %912
  %937 = fmul double %.01810, %936
  %938 = fdiv double %937, %914
  %939 = fmul double %938, %933
  %940 = tail call double @llvm.fmuladd.f64(double %908, double 0x3FE5555555555555, double %939)
  %941 = load ptr, ptr %36, align 8, !tbaa !24
  %942 = getelementptr inbounds i8, ptr %941, i64 132
  %943 = load i32, ptr %942, align 4, !tbaa !63
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds double, ptr %2, i64 %944
  store double %940, ptr %945, align 8, !tbaa !29
  br label %946

946:                                              ; preds = %889, %883, %880
  %947 = getelementptr inbounds i8, ptr %21, i64 726
  %948 = load i16, ptr %947, align 2, !tbaa !130
  %949 = icmp eq i16 %948, 1
  br i1 %949, label %950, label %1141

950:                                              ; preds = %946
  %951 = getelementptr inbounds i8, ptr %37, i64 68
  %952 = load i32, ptr %951, align 4, !tbaa !131
  %953 = sext i32 %952 to i64
  %954 = getelementptr inbounds double, ptr %1, i64 %953
  %955 = load double, ptr %954, align 8, !tbaa !29
  %956 = fadd double %.11790, %955
  %957 = fneg double %956
  %958 = getelementptr inbounds i8, ptr %21, i64 152
  %959 = load double, ptr %958, align 8, !tbaa !132
  %960 = fneg double %71
  %961 = fmul double %959, %960
  %962 = fdiv double %961, %16
  %963 = tail call double @llvm.fmuladd.f64(double %962, double %.11802, double %957)
  %964 = getelementptr inbounds i8, ptr %37, i64 64
  %965 = load i32, ptr %964, align 8, !tbaa !133
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds double, ptr %2, i64 %966
  store double %963, ptr %967, align 8, !tbaa !29
  %968 = fneg double %78
  %969 = load double, ptr %954, align 8, !tbaa !29
  %970 = tail call double @llvm.fmuladd.f64(double %968, double %969, double %.11802)
  %971 = getelementptr inbounds double, ptr %2, i64 %953
  store double %970, ptr %971, align 8, !tbaa !29
  %972 = getelementptr inbounds i8, ptr %21, i64 728
  %973 = load i16, ptr %972, align 8, !tbaa !134
  %974 = icmp eq i16 %973, 1
  br i1 %974, label %975, label %1141

975:                                              ; preds = %950
  %976 = getelementptr inbounds i8, ptr %21, i64 456
  %977 = load double, ptr %976, align 8, !tbaa !70
  %978 = fdiv double %71, %977
  %square = fmul double %978, %978
  %979 = load double, ptr %21, align 8, !tbaa !67
  %980 = fdiv double %square, %979
  %square1829 = fmul double %980, %980
  %981 = getelementptr inbounds i8, ptr %21, i64 516
  %982 = load i32, ptr %981, align 4, !tbaa !135
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds double, ptr %31, i64 %983
  %985 = load double, ptr %984, align 8, !tbaa !29
  %986 = fmul double %985, %square1829
  %987 = load double, ptr %958, align 8, !tbaa !132
  %988 = getelementptr inbounds i8, ptr %21, i64 512
  %989 = load i32, ptr %988, align 8, !tbaa !136
  %990 = sext i32 %989 to i64
  %991 = getelementptr inbounds double, ptr %31, i64 %990
  %992 = load double, ptr %991, align 8, !tbaa !29
  %993 = fmul double %987, %992
  %994 = tail call double @pow(double noundef %71, double noundef 5.000000e+00) #7
  %995 = fmul double %993, %994
  %996 = load double, ptr %21, align 8, !tbaa !67
  %square1830 = fmul double %996, %996
  %997 = fdiv double %995, %square1830
  %998 = fneg double %15
  %999 = getelementptr inbounds i8, ptr %37, i64 140
  %1000 = load i32, ptr %999, align 4, !tbaa !137
  %1001 = sext i32 %1000 to i64
  %1002 = getelementptr double, ptr %1, i64 %1001
  %1003 = getelementptr i8, ptr %1002, i64 8
  %1004 = load double, ptr %1003, align 8, !tbaa !29
  %1005 = fmul double %.11790, 0xBFF5555555555555
  %1006 = fmul double %1005, %986
  %1007 = tail call double @llvm.fmuladd.f64(double %998, double %1004, double %1006)
  %1008 = load i32, ptr %964, align 8, !tbaa !133
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds double, ptr %1, i64 %1009
  %1011 = load double, ptr %1010, align 8, !tbaa !29
  %1012 = fdiv double %.11802, %16
  %1013 = fadd double %1012, %1011
  %1014 = tail call double @llvm.fmuladd.f64(double %997, double %1013, double %1007)
  %1015 = getelementptr inbounds double, ptr %2, i64 %1001
  store double %1014, ptr %1015, align 8, !tbaa !29
  %1016 = fdiv double %15, 3.000000e+00
  %1017 = load double, ptr %1002, align 8, !tbaa !29
  %1018 = getelementptr i8, ptr %1002, i64 16
  %1019 = load double, ptr %1018, align 8, !tbaa !29
  %1020 = fmul double %15, 0xBFE5555555555555
  %1021 = fmul double %1020, %1019
  %1022 = fmul double %149, %1021
  %1023 = tail call double @llvm.fmuladd.f64(double %1016, double %1017, double %1022)
  %1024 = fmul double %.11802, 4.000000e+00
  %1025 = fmul double %15, 3.000000e+00
  %1026 = fdiv double %1024, %1025
  %1027 = tail call double @llvm.fmuladd.f64(double %1026, double %986, double %1023)
  %1028 = fdiv double %997, %15
  %1029 = load i32, ptr %951, align 4, !tbaa !131
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds double, ptr %1, i64 %1030
  %1032 = load double, ptr %1031, align 8, !tbaa !29
  %1033 = tail call double @llvm.fmuladd.f64(double %1028, double %1032, double %1027)
  %1034 = getelementptr i8, ptr %1015, i64 8
  store double %1033, ptr %1034, align 8, !tbaa !29
  %1035 = fmul double %15, 7.500000e-01
  %1036 = load double, ptr %1003, align 8, !tbaa !29
  %1037 = fmul double %.11804, %986
  %1038 = tail call double @llvm.fmuladd.f64(double %1035, double %1036, double %1037)
  %1039 = getelementptr inbounds i8, ptr %29, i64 24
  %1040 = load double, ptr %1039, align 8, !tbaa !29
  %1041 = getelementptr inbounds i8, ptr %29, i64 16
  %1042 = load double, ptr %1041, align 8, !tbaa !29
  %1043 = getelementptr i8, ptr %1002, i64 24
  %1044 = load double, ptr %1043, align 8, !tbaa !29
  %1045 = fmul double %15, -6.000000e-01
  %1046 = fmul double %1045, %1040
  %1047 = fdiv double %1046, %1042
  %1048 = fmul double %1047, %1044
  %1049 = tail call double @llvm.fmuladd.f64(double %1038, double 0x3FE1111111111111, double %1048)
  %1050 = getelementptr i8, ptr %1015, i64 16
  store double %1049, ptr %1050, align 8, !tbaa !29
  %1051 = fdiv double %15, 7.000000e+00
  %1052 = load double, ptr %1039, align 8, !tbaa !29
  %1053 = fmul double %1052, 3.000000e+00
  %1054 = load double, ptr %1041, align 8, !tbaa !29
  %1055 = fmul double %1053, %1054
  %1056 = load double, ptr %1018, align 8, !tbaa !29
  %1057 = getelementptr inbounds i8, ptr %29, i64 32
  %1058 = load double, ptr %1057, align 8, !tbaa !29
  %1059 = getelementptr i8, ptr %1002, i64 32
  %1060 = load double, ptr %1059, align 8, !tbaa !29
  %1061 = fmul double %1058, -4.000000e+00
  %1062 = fmul double %1061, %1060
  %1063 = tail call double @llvm.fmuladd.f64(double %1055, double %1056, double %1062)
  %1064 = fmul double %1051, %1063
  %1065 = getelementptr i8, ptr %1015, i64 24
  store double %1064, ptr %1065, align 8, !tbaa !29
  %1066 = getelementptr inbounds i8, ptr %37, i64 144
  %1067 = load i32, ptr %1066, align 8, !tbaa !138
  %1068 = icmp sgt i32 %1067, 4
  br i1 %1068, label %.lr.ph1865.preheader, label %._crit_edge1866

.lr.ph1865.preheader:                             ; preds = %975
  %wide.trip.count1947 = zext nneg i32 %1067 to i64
  %1069 = add nsw i64 %wide.trip.count1947, -4
  %min.iters.check2171 = icmp ult i64 %1069, 4
  br i1 %min.iters.check2171, label %.lr.ph1865.preheader2531, label %vector.memcheck2155

vector.memcheck2155:                              ; preds = %.lr.ph1865.preheader
  %1070 = shl nsw i64 %1001, 3
  %1071 = getelementptr i8, ptr %2, i64 %1070
  %scevgep2156 = getelementptr i8, ptr %1071, i64 32
  %1072 = shl nuw nsw i64 %wide.trip.count1947, 3
  %1073 = getelementptr i8, ptr %2, i64 %1070
  %scevgep2157 = getelementptr i8, ptr %1073, i64 %1072
  %scevgep2158 = getelementptr i8, ptr %29, i64 32
  %1074 = getelementptr i8, ptr %29, i64 %1072
  %scevgep2159 = getelementptr i8, ptr %1074, i64 8
  %1075 = getelementptr i8, ptr %1, i64 %1070
  %scevgep2160 = getelementptr i8, ptr %1075, i64 24
  %1076 = getelementptr i8, ptr %1, i64 %1070
  %1077 = getelementptr i8, ptr %1076, i64 %1072
  %scevgep2161 = getelementptr i8, ptr %1077, i64 8
  %bound02162 = icmp ult ptr %scevgep2156, %scevgep2159
  %bound12163 = icmp ult ptr %scevgep2158, %scevgep2157
  %found.conflict2164 = and i1 %bound02162, %bound12163
  %bound02165 = icmp ult ptr %scevgep2156, %scevgep2161
  %bound12166 = icmp ult ptr %scevgep2160, %scevgep2157
  %found.conflict2167 = and i1 %bound02165, %bound12166
  %conflict.rdx2168 = or i1 %found.conflict2164, %found.conflict2167
  br i1 %conflict.rdx2168, label %.lr.ph1865.preheader2531, label %vector.ph2172

vector.ph2172:                                    ; preds = %vector.memcheck2155
  %n.vec2174 = and i64 %1069, -2
  %ind.end2175 = add nsw i64 %n.vec2174, 4
  %broadcast.splatinsert2182 = insertelement <2 x double> poison, double %15, i64 0
  %broadcast.splat2183 = shufflevector <2 x double> %broadcast.splatinsert2182, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body2177

vector.body2177:                                  ; preds = %vector.body2177, %vector.ph2172
  %index2178 = phi i64 [ 0, %vector.ph2172 ], [ %index.next2188, %vector.body2177 ]
  %vec.ind2179 = phi <2 x i32> [ <i32 4, i32 5>, %vector.ph2172 ], [ %vec.ind.next2180, %vector.body2177 ]
  %offset.idx2181 = add i64 %index2178, 4
  %1078 = uitofp <2 x i32> %vec.ind2179 to <2 x double>
  %1079 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1078, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %1080 = fdiv <2 x double> %broadcast.splat2183, %1079
  %1081 = getelementptr inbounds double, ptr %29, i64 %offset.idx2181
  %wide.load2184 = load <2 x double>, ptr %1081, align 8, !tbaa !29, !alias.scope !139
  %1082 = fmul <2 x double> %wide.load2184, %1078
  %1083 = add nsw i64 %offset.idx2181, %1001
  %1084 = getelementptr double, ptr %1, i64 %1083
  %1085 = getelementptr i8, ptr %1084, i64 -8
  %wide.load2185 = load <2 x double>, ptr %1085, align 8, !tbaa !29, !alias.scope !142
  %1086 = insertelement <2 x i64> poison, i64 %index2178, i64 0
  %1087 = shufflevector <2 x i64> %1086, <2 x i64> poison, <2 x i32> zeroinitializer
  %1088 = add <2 x i64> %1087, <i64 5, i64 6>
  %1089 = trunc <2 x i64> %1088 to <2 x i32>
  %1090 = uitofp <2 x i32> %1089 to <2 x double>
  %1091 = extractelement <2 x i64> %1088, i64 0
  %1092 = getelementptr inbounds double, ptr %29, i64 %1091
  %wide.load2186 = load <2 x double>, ptr %1092, align 8, !tbaa !29, !alias.scope !139
  %1093 = getelementptr i8, ptr %1084, i64 8
  %wide.load2187 = load <2 x double>, ptr %1093, align 8, !tbaa !29, !alias.scope !142
  %1094 = fneg <2 x double> %wide.load2186
  %1095 = fmul <2 x double> %1090, %1094
  %1096 = fmul <2 x double> %1095, %wide.load2187
  %1097 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1082, <2 x double> %wide.load2185, <2 x double> %1096)
  %1098 = fmul <2 x double> %1080, %1097
  %1099 = getelementptr inbounds double, ptr %2, i64 %1083
  store <2 x double> %1098, ptr %1099, align 8, !tbaa !29, !alias.scope !144, !noalias !146
  %index.next2188 = add nuw i64 %index2178, 2
  %vec.ind.next2180 = add <2 x i32> %vec.ind2179, <i32 2, i32 2>
  %1100 = icmp eq i64 %index.next2188, %n.vec2174
  br i1 %1100, label %middle.block2169, label %vector.body2177, !llvm.loop !147

middle.block2169:                                 ; preds = %vector.body2177
  %cmp.n2189 = icmp eq i64 %1069, %n.vec2174
  br i1 %cmp.n2189, label %._crit_edge1866, label %.lr.ph1865.preheader2531

.lr.ph1865.preheader2531:                         ; preds = %middle.block2169, %vector.memcheck2155, %.lr.ph1865.preheader
  %indvars.iv1944.ph = phi i64 [ 4, %vector.memcheck2155 ], [ 4, %.lr.ph1865.preheader ], [ %ind.end2175, %middle.block2169 ]
  br label %.lr.ph1865

.lr.ph1865:                                       ; preds = %.lr.ph1865.preheader2531, %.lr.ph1865
  %indvars.iv1944 = phi i64 [ %indvars.iv.next1945, %.lr.ph1865 ], [ %indvars.iv1944.ph, %.lr.ph1865.preheader2531 ]
  %1101 = trunc nuw nsw i64 %indvars.iv1944 to i32
  %1102 = uitofp nneg i32 %1101 to double
  %1103 = tail call double @llvm.fmuladd.f64(double %1102, double 2.000000e+00, double 1.000000e+00)
  %1104 = fdiv double %15, %1103
  %1105 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1944
  %1106 = load double, ptr %1105, align 8, !tbaa !29
  %1107 = fmul double %1106, %1102
  %1108 = add nsw i64 %indvars.iv1944, %1001
  %1109 = getelementptr double, ptr %1, i64 %1108
  %1110 = getelementptr i8, ptr %1109, i64 -8
  %1111 = load double, ptr %1110, align 8, !tbaa !29
  %indvars.iv.next1945 = add nuw nsw i64 %indvars.iv1944, 1
  %1112 = trunc nuw nsw i64 %indvars.iv.next1945 to i32
  %1113 = uitofp nneg i32 %1112 to double
  %1114 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1945
  %1115 = load double, ptr %1114, align 8, !tbaa !29
  %1116 = getelementptr i8, ptr %1109, i64 8
  %1117 = load double, ptr %1116, align 8, !tbaa !29
  %1118 = fneg double %1115
  %1119 = fmul double %1113, %1118
  %1120 = fmul double %1119, %1117
  %1121 = tail call double @llvm.fmuladd.f64(double %1107, double %1111, double %1120)
  %1122 = fmul double %1104, %1121
  %1123 = getelementptr inbounds double, ptr %2, i64 %1108
  store double %1122, ptr %1123, align 8, !tbaa !29
  %exitcond1948.not = icmp eq i64 %indvars.iv.next1945, %wide.trip.count1947
  br i1 %exitcond1948.not, label %._crit_edge1866, label %.lr.ph1865, !llvm.loop !148

._crit_edge1866:                                  ; preds = %.lr.ph1865, %middle.block2169, %975
  %1124 = sext i32 %1067 to i64
  %1125 = getelementptr inbounds double, ptr %29, i64 %1124
  %1126 = load double, ptr %1125, align 8, !tbaa !29
  %1127 = add nsw i32 %1067, %1000
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr double, ptr %1, i64 %1128
  %1130 = getelementptr i8, ptr %1129, i64 -8
  %1131 = load double, ptr %1130, align 8, !tbaa !29
  %1132 = sitofp i32 %1067 to double
  %1133 = fadd double %1132, 1.000000e+00
  %1134 = load double, ptr %1129, align 8, !tbaa !29
  %1135 = fneg double %1133
  %1136 = fmul double %.01775, %1135
  %1137 = fmul double %1136, %1134
  %1138 = tail call double @llvm.fmuladd.f64(double %1126, double %1131, double %1137)
  %1139 = fmul double %15, %1138
  %1140 = getelementptr inbounds double, ptr %2, i64 %1128
  store double %1139, ptr %1140, align 8, !tbaa !29
  br label %1141

1141:                                             ; preds = %946, %._crit_edge1866, %950
  %1142 = getelementptr inbounds i8, ptr %21, i64 736
  %1143 = load i16, ptr %1142, align 8, !tbaa !149
  %1144 = icmp eq i16 %1143, 1
  br i1 %1144, label %1145, label %1210

1145:                                             ; preds = %1141
  %1146 = getelementptr inbounds i8, ptr %21, i64 96
  %1147 = load i16, ptr %1146, align 8, !tbaa !150
  %1148 = icmp eq i16 %1147, 0
  br i1 %1148, label %1149, label %1203

1149:                                             ; preds = %1145
  %1150 = call i32 @background_w_fld(ptr noundef nonnull %21, double noundef %71, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %8) #7
  %1151 = icmp eq i32 %1150, 1
  br i1 %1151, label %1152, label %1155

1152:                                             ; preds = %1149
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %13) #7
  %1153 = getelementptr inbounds i8, ptr %21, i64 2902
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %13, ptr noundef nonnull @.str, ptr noundef nonnull @.str.322, ptr noundef nonnull %1153) #7
  %1154 = getelementptr inbounds i8, ptr %25, i64 27610
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %1154, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.perturb_derivs, i32 noundef 8829, ptr noundef nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %13) #7
  br label %2961

1155:                                             ; preds = %1149
  %1156 = load double, ptr %7, align 8, !tbaa !29
  %1157 = fmul double %78, %1156
  %1158 = fmul double %71, %1157
  %1159 = load double, ptr %6, align 8, !tbaa !29
  %1160 = fdiv double %1158, 3.000000e+00
  %1161 = fadd double %1159, 1.000000e+00
  %1162 = fdiv double %1160, %1161
  %1163 = fdiv double %1162, %78
  %1164 = fsub double %1159, %1163
  %1165 = getelementptr inbounds i8, ptr %21, i64 88
  %1166 = load double, ptr %1165, align 8, !tbaa !151
  %1167 = fneg double %1161
  %1168 = getelementptr inbounds i8, ptr %37, i64 76
  %1169 = load i32, ptr %1168, align 4, !tbaa !152
  %1170 = sext i32 %1169 to i64
  %1171 = getelementptr inbounds double, ptr %1, i64 %1170
  %1172 = load double, ptr %1171, align 8, !tbaa !29
  %1173 = fadd double %.11790, %1172
  %1174 = fsub double %1166, %1159
  %1175 = getelementptr inbounds i8, ptr %37, i64 72
  %1176 = load i32, ptr %1175, align 8, !tbaa !153
  %1177 = sext i32 %1176 to i64
  %1178 = getelementptr inbounds double, ptr %1, i64 %1177
  %1179 = load double, ptr %1178, align 8, !tbaa !29
  %1180 = fmul double %1174, -3.000000e+00
  %1181 = fmul double %78, %1180
  %1182 = fmul double %1181, %1179
  %1183 = call double @llvm.fmuladd.f64(double %1167, double %1173, double %1182)
  %1184 = fmul double %1161, 9.000000e+00
  %1185 = fsub double %1166, %1164
  %1186 = fmul double %1184, %1185
  %1187 = fmul double %78, %1186
  %1188 = fmul double %78, %1187
  %1189 = fmul double %1172, %1188
  %1190 = fdiv double %1189, %16
  %1191 = fsub double %1183, %1190
  %1192 = getelementptr inbounds double, ptr %2, i64 %1177
  store double %1191, ptr %1192, align 8, !tbaa !29
  %1193 = call double @llvm.fmuladd.f64(double %1166, double -3.000000e+00, double 1.000000e+00)
  %1194 = fneg double %1193
  %1195 = fmul double %78, %1194
  %1196 = load double, ptr %1171, align 8, !tbaa !29
  %1197 = fmul double %16, %1166
  %1198 = fdiv double %1197, %1161
  %1199 = load double, ptr %1178, align 8, !tbaa !29
  %1200 = fmul double %1198, %1199
  %1201 = call double @llvm.fmuladd.f64(double %1195, double %1196, double %1200)
  %1202 = fadd double %.11802, %1201
  br label %.sink.split2048

1203:                                             ; preds = %1145
  %1204 = getelementptr inbounds i8, ptr %27, i64 304
  %1205 = load double, ptr %1204, align 8, !tbaa !154
  %1206 = getelementptr inbounds i8, ptr %37, i64 80
  %1207 = load i32, ptr %1206, align 8, !tbaa !155
  %1208 = sext i32 %1207 to i64
  br label %.sink.split2048

.sink.split2048:                                  ; preds = %1203, %1155
  %.sink2051 = phi i64 [ %1170, %1155 ], [ %1208, %1203 ]
  %.sink2049 = phi double [ %1202, %1155 ], [ %1205, %1203 ]
  %1209 = getelementptr inbounds double, ptr %2, i64 %.sink2051
  store double %.sink2049, ptr %1209, align 8, !tbaa !29
  br label %1210

1210:                                             ; preds = %.sink.split2048, %1141
  %1211 = getelementptr inbounds i8, ptr %21, i64 730
  %1212 = load i16, ptr %1211, align 2, !tbaa !156
  %1213 = icmp eq i16 %1212, 1
  br i1 %1213, label %1214, label %1244

1214:                                             ; preds = %1210
  %1215 = getelementptr inbounds i8, ptr %37, i64 88
  %1216 = load i32, ptr %1215, align 8, !tbaa !157
  %1217 = sext i32 %1216 to i64
  %1218 = getelementptr inbounds double, ptr %1, i64 %1217
  %1219 = load double, ptr %1218, align 8, !tbaa !29
  %1220 = getelementptr inbounds i8, ptr %37, i64 84
  %1221 = load i32, ptr %1220, align 4, !tbaa !158
  %1222 = sext i32 %1221 to i64
  %1223 = getelementptr inbounds double, ptr %2, i64 %1222
  store double %1219, ptr %1223, align 8, !tbaa !29
  %1224 = fmul double %78, -2.000000e+00
  %1225 = getelementptr inbounds i8, ptr %21, i64 524
  %1226 = load i32, ptr %1225, align 4, !tbaa !159
  %1227 = sext i32 %1226 to i64
  %1228 = getelementptr inbounds double, ptr %31, i64 %1227
  %1229 = load double, ptr %1228, align 8, !tbaa !29
  %1230 = fneg double %.11790
  %1231 = fmul double %1229, %1230
  %1232 = call double @llvm.fmuladd.f64(double %1224, double %1219, double %1231)
  %1233 = getelementptr inbounds i8, ptr %21, i64 536
  %1234 = load i32, ptr %1233, align 8, !tbaa !160
  %1235 = sext i32 %1234 to i64
  %1236 = getelementptr inbounds double, ptr %31, i64 %1235
  %1237 = load double, ptr %1236, align 8, !tbaa !29
  %1238 = call double @llvm.fmuladd.f64(double %72, double %1237, double %16)
  %1239 = getelementptr inbounds double, ptr %1, i64 %1222
  %1240 = load double, ptr %1239, align 8, !tbaa !29
  %1241 = fneg double %1238
  %1242 = call double @llvm.fmuladd.f64(double %1241, double %1240, double %1232)
  %1243 = getelementptr inbounds double, ptr %2, i64 %1217
  store double %1242, ptr %1243, align 8, !tbaa !29
  br label %1244

1244:                                             ; preds = %1214, %1210
  %1245 = load i16, ptr %177, align 4, !tbaa !54
  %1246 = icmp eq i16 %1245, 1
  br i1 %1246, label %1247, label %1497

1247:                                             ; preds = %1244
  %1248 = load ptr, ptr %158, align 8, !tbaa !48
  %1249 = getelementptr inbounds i8, ptr %27, i64 348
  %1250 = load i32, ptr %1249, align 4, !tbaa !55
  %1251 = sext i32 %1250 to i64
  %1252 = getelementptr inbounds i32, ptr %1248, i64 %1251
  %1253 = load i32, ptr %1252, align 4, !tbaa !50
  %1254 = icmp eq i32 %1253, 0
  br i1 %1254, label %1255, label %1497

1255:                                             ; preds = %1247
  %1256 = load i16, ptr %91, align 2, !tbaa !35
  switch i16 %1256, label %1457 [
    i16 0, label %1264
    i16 1, label %1257
  ]

1257:                                             ; preds = %1255
  %1258 = getelementptr inbounds i8, ptr %27, i64 344
  %1259 = load i32, ptr %1258, align 8, !tbaa !123
  %1260 = sext i32 %1259 to i64
  %1261 = getelementptr inbounds i32, ptr %1248, i64 %1260
  %1262 = load i32, ptr %1261, align 4, !tbaa !50
  %1263 = icmp eq i32 %1262, 1
  br i1 %1263, label %1264, label %1457

1264:                                             ; preds = %1255, %1257
  %1265 = getelementptr inbounds i8, ptr %25, i64 2016
  %1266 = load i32, ptr %1265, align 8, !tbaa !161
  %1267 = icmp eq i32 %1266, 0
  br i1 %1267, label %1268, label %1283

1268:                                             ; preds = %1264
  %1269 = getelementptr inbounds i8, ptr %37, i64 112
  %1270 = load i32, ptr %1269, align 8, !tbaa !56
  %1271 = sext i32 %1270 to i64
  %1272 = getelementptr inbounds double, ptr %1, i64 %1271
  %1273 = load double, ptr %1272, align 8, !tbaa !29
  %1274 = fmul double %1273, 2.500000e-01
  %1275 = getelementptr inbounds i8, ptr %37, i64 120
  %1276 = load i32, ptr %1275, align 8, !tbaa !162
  %1277 = sext i32 %1276 to i64
  %1278 = getelementptr inbounds double, ptr %1, i64 %1277
  %1279 = load double, ptr %1278, align 8, !tbaa !29
  %1280 = fneg double %149
  %1281 = call double @llvm.fmuladd.f64(double %1280, double %1279, double %1274)
  %1282 = call double @llvm.fmuladd.f64(double %16, double %1281, double %.11802)
  br label %1291

1283:                                             ; preds = %1264
  %1284 = fmul double %16, 2.500000e-01
  %1285 = getelementptr inbounds i8, ptr %37, i64 112
  %1286 = load i32, ptr %1285, align 8, !tbaa !56
  %1287 = sext i32 %1286 to i64
  %1288 = getelementptr inbounds double, ptr %1, i64 %1287
  %1289 = load double, ptr %1288, align 8, !tbaa !29
  %1290 = call double @llvm.fmuladd.f64(double %1284, double %1289, double %.11802)
  br label %1291

1291:                                             ; preds = %1283, %1268
  %.sink2052 = phi double [ %1290, %1283 ], [ %1282, %1268 ]
  %1292 = phi i32 [ %1286, %1283 ], [ %1270, %1268 ]
  %1293 = getelementptr inbounds i8, ptr %37, i64 116
  %1294 = load i32, ptr %1293, align 4, !tbaa !57
  %1295 = sext i32 %1294 to i64
  %1296 = getelementptr inbounds double, ptr %2, i64 %1295
  store double %.sink2052, ptr %1296, align 8, !tbaa !29
  %1297 = icmp eq i16 %1256, 1
  br i1 %1297, label %1298, label %1310

1298:                                             ; preds = %1291
  %1299 = getelementptr inbounds i8, ptr %37, i64 60
  %1300 = load i32, ptr %1299, align 4, !tbaa !121
  %1301 = sext i32 %1300 to i64
  %1302 = getelementptr inbounds double, ptr %1, i64 %1301
  %1303 = load double, ptr %1302, align 8, !tbaa !29
  %1304 = sext i32 %1294 to i64
  %1305 = getelementptr inbounds double, ptr %1, i64 %1304
  %1306 = load double, ptr %1305, align 8, !tbaa !29
  %1307 = fsub double %1303, %1306
  %1308 = getelementptr inbounds double, ptr %2, i64 %1304
  %1309 = call double @llvm.fmuladd.f64(double %.01766, double %1307, double %.sink2052)
  store double %1309, ptr %1308, align 8, !tbaa !29
  br label %1310

1310:                                             ; preds = %1298, %1291
  br i1 %1267, label %1311, label %1497

1311:                                             ; preds = %1310
  %1312 = sext i32 %1294 to i64
  %1313 = getelementptr inbounds double, ptr %1, i64 %1312
  %1314 = load double, ptr %1313, align 8, !tbaa !29
  %1315 = fadd double %.11804, %1314
  %1316 = getelementptr inbounds i8, ptr %29, i64 24
  %1317 = load double, ptr %1316, align 8, !tbaa !29
  %1318 = getelementptr inbounds i8, ptr %29, i64 16
  %1319 = load double, ptr %1318, align 8, !tbaa !29
  %1320 = getelementptr inbounds i8, ptr %37, i64 120
  %1321 = load i32, ptr %1320, align 8, !tbaa !162
  %1322 = sext i32 %1321 to i64
  %1323 = getelementptr double, ptr %1, i64 %1322
  %1324 = getelementptr i8, ptr %1323, i64 8
  %1325 = load double, ptr %1324, align 8, !tbaa !29
  %1326 = fmul double %15, -6.000000e-01
  %1327 = fmul double %1326, %1317
  %1328 = fdiv double %1327, %1319
  %1329 = fmul double %1328, %1325
  %1330 = call double @llvm.fmuladd.f64(double %1315, double 0x3FE1111111111111, double %1329)
  %1331 = fmul double %1330, 5.000000e-01
  %1332 = getelementptr inbounds double, ptr %2, i64 %1322
  store double %1331, ptr %1332, align 8, !tbaa !29
  br i1 %1297, label %1333, label %1345

1333:                                             ; preds = %1311
  %1334 = getelementptr inbounds i8, ptr %25, i64 2000
  %1335 = load ptr, ptr %1334, align 8, !tbaa !127
  %1336 = load double, ptr %1335, align 8, !tbaa !29
  %1337 = getelementptr inbounds i8, ptr %25, i64 2008
  %1338 = load ptr, ptr %1337, align 8, !tbaa !163
  %1339 = load double, ptr %1338, align 8, !tbaa !29
  %1340 = fmul double %.01765, %1339
  %1341 = call double @llvm.fmuladd.f64(double %1336, double %.01766, double %1340)
  %1342 = load double, ptr %1323, align 8, !tbaa !29
  %1343 = fneg double %1341
  %1344 = call double @llvm.fmuladd.f64(double %1343, double %1342, double %1331)
  store double %1344, ptr %1332, align 8, !tbaa !29
  br label %1345

1345:                                             ; preds = %1333, %1311
  %1346 = fdiv double %15, 7.000000e+00
  %1347 = load double, ptr %1316, align 8, !tbaa !29
  %1348 = fmul double %1347, 6.000000e+00
  %1349 = load double, ptr %1318, align 8, !tbaa !29
  %1350 = fmul double %1348, %1349
  %1351 = load double, ptr %1323, align 8, !tbaa !29
  %1352 = getelementptr inbounds i8, ptr %29, i64 32
  %1353 = load double, ptr %1352, align 8, !tbaa !29
  %1354 = getelementptr inbounds i8, ptr %37, i64 124
  %1355 = load i32, ptr %1354, align 4, !tbaa !164
  %1356 = sext i32 %1355 to i64
  %1357 = getelementptr double, ptr %1, i64 %1356
  %1358 = getelementptr i8, ptr %1357, i64 8
  %1359 = load double, ptr %1358, align 8, !tbaa !29
  %1360 = fmul double %1353, -4.000000e+00
  %1361 = fmul double %1360, %1359
  %1362 = call double @llvm.fmuladd.f64(double %1350, double %1351, double %1361)
  %1363 = fmul double %1346, %1362
  %1364 = getelementptr inbounds double, ptr %2, i64 %1356
  store double %1363, ptr %1364, align 8, !tbaa !29
  br i1 %1297, label %1365, label %1379

1365:                                             ; preds = %1345
  %1366 = getelementptr inbounds i8, ptr %25, i64 2000
  %1367 = load ptr, ptr %1366, align 8, !tbaa !127
  %1368 = getelementptr inbounds i8, ptr %1367, i64 8
  %1369 = load double, ptr %1368, align 8, !tbaa !29
  %1370 = getelementptr inbounds i8, ptr %25, i64 2008
  %1371 = load ptr, ptr %1370, align 8, !tbaa !163
  %1372 = getelementptr inbounds i8, ptr %1371, i64 8
  %1373 = load double, ptr %1372, align 8, !tbaa !29
  %1374 = fmul double %.01765, %1373
  %1375 = call double @llvm.fmuladd.f64(double %1369, double %.01766, double %1374)
  %1376 = load double, ptr %1357, align 8, !tbaa !29
  %1377 = fneg double %1375
  %1378 = call double @llvm.fmuladd.f64(double %1377, double %1376, double %1363)
  store double %1378, ptr %1364, align 8, !tbaa !29
  br label %1379

1379:                                             ; preds = %1365, %1345
  %1380 = getelementptr inbounds i8, ptr %37, i64 128
  %1381 = load i32, ptr %1380, align 8, !tbaa !165
  %1382 = icmp sgt i32 %1381, 4
  br i1 %1382, label %.lr.ph1870, label %._crit_edge1871

.lr.ph1870:                                       ; preds = %1379
  %1383 = getelementptr inbounds i8, ptr %25, i64 2000
  %1384 = getelementptr inbounds i8, ptr %25, i64 2008
  %1385 = sext i32 %1292 to i64
  %wide.trip.count1952 = zext nneg i32 %1381 to i64
  br label %1386

1386:                                             ; preds = %.lr.ph1870, %1423
  %indvars.iv1949 = phi i64 [ 4, %.lr.ph1870 ], [ %indvars.iv.next1950, %1423 ]
  %1387 = trunc nuw nsw i64 %indvars.iv1949 to i32
  %1388 = uitofp nneg i32 %1387 to double
  %1389 = call double @llvm.fmuladd.f64(double %1388, double 2.000000e+00, double 1.000000e+00)
  %1390 = fdiv double %15, %1389
  %1391 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1949
  %1392 = load double, ptr %1391, align 8, !tbaa !29
  %1393 = fmul double %1392, %1388
  %1394 = add nsw i64 %indvars.iv1949, %1385
  %1395 = getelementptr double, ptr %1, i64 %1394
  %1396 = getelementptr i8, ptr %1395, i64 -8
  %1397 = load double, ptr %1396, align 8, !tbaa !29
  %indvars.iv.next1950 = add nuw nsw i64 %indvars.iv1949, 1
  %1398 = trunc nuw nsw i64 %indvars.iv.next1950 to i32
  %1399 = uitofp nneg i32 %1398 to double
  %1400 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1950
  %1401 = load double, ptr %1400, align 8, !tbaa !29
  %1402 = getelementptr i8, ptr %1395, i64 8
  %1403 = load double, ptr %1402, align 8, !tbaa !29
  %1404 = fneg double %1401
  %1405 = fmul double %1399, %1404
  %1406 = fmul double %1405, %1403
  %1407 = call double @llvm.fmuladd.f64(double %1393, double %1397, double %1406)
  %1408 = fmul double %1390, %1407
  %1409 = getelementptr inbounds double, ptr %2, i64 %1394
  store double %1408, ptr %1409, align 8, !tbaa !29
  br i1 %1297, label %1410, label %1423

1410:                                             ; preds = %1386
  %1411 = load ptr, ptr %1383, align 8, !tbaa !127
  %1412 = add nsw i64 %indvars.iv1949, -2
  %1413 = getelementptr inbounds double, ptr %1411, i64 %1412
  %1414 = load double, ptr %1413, align 8, !tbaa !29
  %1415 = load ptr, ptr %1384, align 8, !tbaa !163
  %1416 = getelementptr inbounds double, ptr %1415, i64 %1412
  %1417 = load double, ptr %1416, align 8, !tbaa !29
  %1418 = fmul double %.01765, %1417
  %1419 = call double @llvm.fmuladd.f64(double %1414, double %.01766, double %1418)
  %1420 = load double, ptr %1395, align 8, !tbaa !29
  %1421 = fneg double %1419
  %1422 = call double @llvm.fmuladd.f64(double %1421, double %1420, double %1408)
  store double %1422, ptr %1409, align 8, !tbaa !29
  br label %1423

1423:                                             ; preds = %1386, %1410
  %exitcond1953.not = icmp eq i64 %indvars.iv.next1950, %wide.trip.count1952
  br i1 %exitcond1953.not, label %._crit_edge1871, label %1386, !llvm.loop !166

._crit_edge1871:                                  ; preds = %1423, %1379
  %1424 = sext i32 %1381 to i64
  %1425 = getelementptr inbounds double, ptr %29, i64 %1424
  %1426 = load double, ptr %1425, align 8, !tbaa !29
  %1427 = add nsw i32 %1292, %1381
  %1428 = sext i32 %1427 to i64
  %1429 = getelementptr double, ptr %1, i64 %1428
  %1430 = getelementptr i8, ptr %1429, i64 -8
  %1431 = load double, ptr %1430, align 8, !tbaa !29
  %1432 = sitofp i32 %1381 to double
  %1433 = fadd double %1432, 1.000000e+00
  %1434 = load double, ptr %1429, align 8, !tbaa !29
  %1435 = fneg double %1433
  %1436 = fmul double %.01775, %1435
  %1437 = fmul double %1436, %1434
  %1438 = call double @llvm.fmuladd.f64(double %1426, double %1431, double %1437)
  %1439 = fmul double %15, %1438
  %1440 = getelementptr inbounds double, ptr %2, i64 %1428
  store double %1439, ptr %1440, align 8, !tbaa !29
  br i1 %1297, label %1441, label %1497

1441:                                             ; preds = %._crit_edge1871
  %1442 = getelementptr inbounds i8, ptr %25, i64 2000
  %1443 = load ptr, ptr %1442, align 8, !tbaa !127
  %1444 = add nsw i32 %1381, -2
  %1445 = sext i32 %1444 to i64
  %1446 = getelementptr inbounds double, ptr %1443, i64 %1445
  %1447 = load double, ptr %1446, align 8, !tbaa !29
  %1448 = getelementptr inbounds i8, ptr %25, i64 2008
  %1449 = load ptr, ptr %1448, align 8, !tbaa !163
  %1450 = getelementptr inbounds double, ptr %1449, i64 %1445
  %1451 = load double, ptr %1450, align 8, !tbaa !29
  %1452 = fmul double %.01765, %1451
  %1453 = call double @llvm.fmuladd.f64(double %1447, double %.01766, double %1452)
  %1454 = load double, ptr %1429, align 8, !tbaa !29
  %1455 = fneg double %1453
  %1456 = call double @llvm.fmuladd.f64(double %1455, double %1454, double %1439)
  store double %1456, ptr %1440, align 8, !tbaa !29
  br label %1497

1457:                                             ; preds = %1255, %1257
  %1458 = fadd double %.01767, 1.000000e+00
  %1459 = fdiv double 1.000000e+00, %1458
  %1460 = fneg double %78
  %1461 = getelementptr inbounds i8, ptr %37, i64 60
  %1462 = load i32, ptr %1461, align 4, !tbaa !121
  %1463 = sext i32 %1462 to i64
  %1464 = getelementptr inbounds double, ptr %1, i64 %1463
  %1465 = load double, ptr %1464, align 8, !tbaa !29
  %1466 = getelementptr inbounds i8, ptr %23, i64 336
  %1467 = load i32, ptr %1466, align 8, !tbaa !124
  %1468 = sext i32 %1467 to i64
  %1469 = getelementptr inbounds double, ptr %33, i64 %1468
  %1470 = load double, ptr %1469, align 8, !tbaa !29
  %1471 = fmul double %16, %1470
  %1472 = getelementptr inbounds i8, ptr %37, i64 56
  %1473 = load i32, ptr %1472, align 8, !tbaa !122
  %1474 = sext i32 %1473 to i64
  %1475 = getelementptr inbounds double, ptr %1, i64 %1474
  %1476 = load double, ptr %1475, align 8, !tbaa !29
  %1477 = fmul double %1471, %1476
  %1478 = call double @llvm.fmuladd.f64(double %1460, double %1465, double %1477)
  %1479 = fmul double %16, %.01767
  %1480 = getelementptr inbounds i8, ptr %37, i64 112
  %1481 = load i32, ptr %1480, align 8, !tbaa !56
  %1482 = sext i32 %1481 to i64
  %1483 = getelementptr inbounds double, ptr %1, i64 %1482
  %1484 = load double, ptr %1483, align 8, !tbaa !29
  %1485 = getelementptr inbounds i8, ptr %27, i64 160
  %1486 = load double, ptr %1485, align 8, !tbaa !128
  %1487 = fneg double %1486
  %1488 = call double @llvm.fmuladd.f64(double %1484, double 2.500000e-01, double %1487)
  %1489 = call double @llvm.fmuladd.f64(double %1479, double %1488, double %1478)
  %1490 = call double @llvm.fmuladd.f64(double %1459, double %1489, double %.11802)
  %1491 = fneg double %1459
  %1492 = call double @llvm.fmuladd.f64(double %1491, double %.0, double %1490)
  %1493 = getelementptr inbounds i8, ptr %37, i64 116
  %1494 = load i32, ptr %1493, align 4, !tbaa !57
  %1495 = sext i32 %1494 to i64
  %1496 = getelementptr inbounds double, ptr %2, i64 %1495
  store double %1492, ptr %1496, align 8, !tbaa !29
  br label %1497

1497:                                             ; preds = %1247, %1310, %1441, %._crit_edge1871, %1457, %1244
  %1498 = getelementptr inbounds i8, ptr %21, i64 738
  %1499 = load i16, ptr %1498, align 2, !tbaa !167
  %1500 = icmp eq i16 %1499, 1
  br i1 %1500, label %1501, label %.thread1836

1501:                                             ; preds = %1497
  %1502 = load ptr, ptr %158, align 8, !tbaa !48
  %1503 = load i32, ptr %160, align 4, !tbaa !49
  %1504 = sext i32 %1503 to i64
  %1505 = getelementptr inbounds i32, ptr %1502, i64 %1504
  %1506 = load i32, ptr %1505, align 4, !tbaa !50
  %1507 = icmp eq i32 %1506, 0
  br i1 %1507, label %1508, label %.thread1836

1508:                                             ; preds = %1501
  %1509 = getelementptr inbounds i8, ptr %37, i64 96
  %1510 = load i32, ptr %1509, align 8, !tbaa !168
  %1511 = sext i32 %1510 to i64
  %1512 = getelementptr inbounds double, ptr %1, i64 %1511
  %1513 = load double, ptr %1512, align 8, !tbaa !29
  %1514 = fadd double %.11790, %1513
  %1515 = getelementptr inbounds i8, ptr %25, i64 1976
  %1516 = load double, ptr %1515, align 8, !tbaa !169
  %1517 = fsub double 1.000000e+00, %1516
  %1518 = fmul double %78, %1517
  %1519 = getelementptr inbounds i8, ptr %37, i64 92
  %1520 = load i32, ptr %1519, align 4, !tbaa !170
  %1521 = sext i32 %1520 to i64
  %1522 = getelementptr inbounds double, ptr %1, i64 %1521
  %1523 = load double, ptr %1522, align 8, !tbaa !29
  %1524 = fmul double %78, 4.000000e+00
  %1525 = fmul double %1524, %1513
  %1526 = fdiv double %1525, %15
  %1527 = fdiv double %1526, %15
  %1528 = fadd double %1523, %1527
  %1529 = fmul double %1518, %1528
  %1530 = call double @llvm.fmuladd.f64(double %1514, double 0xBFF5555555555555, double %1529)
  %1531 = getelementptr inbounds double, ptr %2, i64 %1521
  store double %1530, ptr %1531, align 8, !tbaa !29
  %1532 = load double, ptr %1515, align 8, !tbaa !169
  %1533 = load double, ptr %1522, align 8, !tbaa !29
  %1534 = fmul double %1532, %1533
  %1535 = fmul double %1534, 2.500000e-01
  %1536 = getelementptr inbounds i8, ptr %37, i64 100
  %1537 = load i32, ptr %1536, align 4, !tbaa !171
  %1538 = sext i32 %1537 to i64
  %1539 = getelementptr inbounds double, ptr %1, i64 %1538
  %1540 = load double, ptr %1539, align 8, !tbaa !29
  %1541 = fneg double %149
  %1542 = call double @llvm.fmuladd.f64(double %1541, double %1540, double %1535)
  %1543 = call double @llvm.fmuladd.f64(double %16, double %1542, double %.11802)
  %1544 = fsub double 1.000000e+00, %1532
  %1545 = load double, ptr %1512, align 8, !tbaa !29
  %1546 = fneg double %1544
  %1547 = fmul double %78, %1546
  %1548 = call double @llvm.fmuladd.f64(double %1547, double %1545, double %1543)
  %1549 = getelementptr inbounds double, ptr %2, i64 %1511
  store double %1548, ptr %1549, align 8, !tbaa !29
  %1550 = getelementptr inbounds i8, ptr %27, i64 352
  %1551 = load i32, ptr %1550, align 8, !tbaa !172
  %1552 = sext i32 %1551 to i64
  %1553 = getelementptr inbounds i32, ptr %1502, i64 %1552
  %1554 = load i32, ptr %1553, align 4, !tbaa !50
  %1555 = icmp eq i32 %1554, 0
  br i1 %1555, label %1556, label %1671

1556:                                             ; preds = %1508
  %1557 = load double, ptr %1512, align 8, !tbaa !29
  %1558 = fadd double %.11804, %1557
  %1559 = getelementptr inbounds i8, ptr %29, i64 24
  %1560 = load double, ptr %1559, align 8, !tbaa !29
  %1561 = getelementptr inbounds i8, ptr %29, i64 16
  %1562 = load double, ptr %1561, align 8, !tbaa !29
  %1563 = getelementptr i8, ptr %1539, i64 8
  %1564 = load double, ptr %1563, align 8, !tbaa !29
  %1565 = fmul double %15, -6.000000e-01
  %1566 = fmul double %1565, %1560
  %1567 = fdiv double %1566, %1562
  %1568 = fmul double %1567, %1564
  %1569 = call double @llvm.fmuladd.f64(double %1558, double 0x3FE1111111111111, double %1568)
  %1570 = getelementptr inbounds i8, ptr %25, i64 1984
  %1571 = load double, ptr %1570, align 8, !tbaa !173
  %1572 = fsub double 1.000000e+00, %1571
  %1573 = fmul double %1558, 0x3FE1111111111111
  %1574 = fneg double %1572
  %1575 = call double @llvm.fmuladd.f64(double %1574, double %1573, double %1569)
  %1576 = fmul double %1575, 5.000000e-01
  %1577 = getelementptr inbounds double, ptr %2, i64 %1538
  store double %1576, ptr %1577, align 8, !tbaa !29
  %1578 = fdiv double %15, 7.000000e+00
  %1579 = load double, ptr %1559, align 8, !tbaa !29
  %1580 = fmul double %1579, 6.000000e+00
  %1581 = load double, ptr %1561, align 8, !tbaa !29
  %1582 = fmul double %1580, %1581
  %1583 = load double, ptr %1539, align 8, !tbaa !29
  %1584 = getelementptr inbounds i8, ptr %29, i64 32
  %1585 = load double, ptr %1584, align 8, !tbaa !29
  %1586 = getelementptr inbounds i8, ptr %37, i64 104
  %1587 = load i32, ptr %1586, align 8, !tbaa !174
  %1588 = sext i32 %1587 to i64
  %1589 = getelementptr double, ptr %1, i64 %1588
  %1590 = getelementptr i8, ptr %1589, i64 8
  %1591 = load double, ptr %1590, align 8, !tbaa !29
  %1592 = fmul double %1585, -4.000000e+00
  %1593 = fmul double %1592, %1591
  %1594 = call double @llvm.fmuladd.f64(double %1582, double %1583, double %1593)
  %1595 = fmul double %1578, %1594
  %1596 = getelementptr inbounds double, ptr %2, i64 %1588
  store double %1595, ptr %1596, align 8, !tbaa !29
  %1597 = getelementptr inbounds i8, ptr %37, i64 108
  %1598 = load i32, ptr %1597, align 4, !tbaa !175
  %1599 = icmp sgt i32 %1598, 4
  br i1 %1599, label %.lr.ph1875.preheader, label %._crit_edge1876

.lr.ph1875.preheader:                             ; preds = %1556
  %wide.trip.count1957 = zext nneg i32 %1598 to i64
  %1600 = add nsw i64 %wide.trip.count1957, -4
  %min.iters.check2206 = icmp ult i64 %1600, 4
  br i1 %min.iters.check2206, label %.lr.ph1875.preheader2530, label %vector.memcheck2190

vector.memcheck2190:                              ; preds = %.lr.ph1875.preheader
  %1601 = shl nsw i64 %1521, 3
  %1602 = getelementptr i8, ptr %2, i64 %1601
  %scevgep2191 = getelementptr i8, ptr %1602, i64 32
  %1603 = shl nuw nsw i64 %wide.trip.count1957, 3
  %1604 = getelementptr i8, ptr %2, i64 %1601
  %scevgep2192 = getelementptr i8, ptr %1604, i64 %1603
  %scevgep2193 = getelementptr i8, ptr %29, i64 32
  %1605 = getelementptr i8, ptr %29, i64 %1603
  %scevgep2194 = getelementptr i8, ptr %1605, i64 8
  %1606 = getelementptr i8, ptr %1, i64 %1601
  %scevgep2195 = getelementptr i8, ptr %1606, i64 24
  %1607 = getelementptr i8, ptr %1, i64 %1601
  %1608 = getelementptr i8, ptr %1607, i64 %1603
  %scevgep2196 = getelementptr i8, ptr %1608, i64 8
  %bound02197 = icmp ult ptr %scevgep2191, %scevgep2194
  %bound12198 = icmp ult ptr %scevgep2193, %scevgep2192
  %found.conflict2199 = and i1 %bound02197, %bound12198
  %bound02200 = icmp ult ptr %scevgep2191, %scevgep2196
  %bound12201 = icmp ult ptr %scevgep2195, %scevgep2192
  %found.conflict2202 = and i1 %bound02200, %bound12201
  %conflict.rdx2203 = or i1 %found.conflict2199, %found.conflict2202
  br i1 %conflict.rdx2203, label %.lr.ph1875.preheader2530, label %vector.ph2207

vector.ph2207:                                    ; preds = %vector.memcheck2190
  %n.vec2209 = and i64 %1600, -2
  %ind.end2210 = add nsw i64 %n.vec2209, 4
  %broadcast.splatinsert2217 = insertelement <2 x double> poison, double %15, i64 0
  %broadcast.splat2218 = shufflevector <2 x double> %broadcast.splatinsert2217, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body2212

vector.body2212:                                  ; preds = %vector.body2212, %vector.ph2207
  %index2213 = phi i64 [ 0, %vector.ph2207 ], [ %index.next2223, %vector.body2212 ]
  %vec.ind2214 = phi <2 x i32> [ <i32 4, i32 5>, %vector.ph2207 ], [ %vec.ind.next2215, %vector.body2212 ]
  %offset.idx2216 = add i64 %index2213, 4
  %1609 = uitofp <2 x i32> %vec.ind2214 to <2 x double>
  %1610 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1609, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %1611 = fdiv <2 x double> %broadcast.splat2218, %1610
  %1612 = getelementptr inbounds double, ptr %29, i64 %offset.idx2216
  %wide.load2219 = load <2 x double>, ptr %1612, align 8, !tbaa !29, !alias.scope !176
  %1613 = fmul <2 x double> %wide.load2219, %1609
  %1614 = add nsw i64 %offset.idx2216, %1521
  %1615 = getelementptr double, ptr %1, i64 %1614
  %1616 = getelementptr i8, ptr %1615, i64 -8
  %wide.load2220 = load <2 x double>, ptr %1616, align 8, !tbaa !29, !alias.scope !179
  %1617 = insertelement <2 x i64> poison, i64 %index2213, i64 0
  %1618 = shufflevector <2 x i64> %1617, <2 x i64> poison, <2 x i32> zeroinitializer
  %1619 = add <2 x i64> %1618, <i64 5, i64 6>
  %1620 = trunc <2 x i64> %1619 to <2 x i32>
  %1621 = uitofp <2 x i32> %1620 to <2 x double>
  %1622 = extractelement <2 x i64> %1619, i64 0
  %1623 = getelementptr inbounds double, ptr %29, i64 %1622
  %wide.load2221 = load <2 x double>, ptr %1623, align 8, !tbaa !29, !alias.scope !176
  %1624 = getelementptr i8, ptr %1615, i64 8
  %wide.load2222 = load <2 x double>, ptr %1624, align 8, !tbaa !29, !alias.scope !179
  %1625 = fneg <2 x double> %wide.load2221
  %1626 = fmul <2 x double> %1621, %1625
  %1627 = fmul <2 x double> %1626, %wide.load2222
  %1628 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1613, <2 x double> %wide.load2220, <2 x double> %1627)
  %1629 = fmul <2 x double> %1611, %1628
  %1630 = getelementptr inbounds double, ptr %2, i64 %1614
  store <2 x double> %1629, ptr %1630, align 8, !tbaa !29, !alias.scope !181, !noalias !183
  %index.next2223 = add nuw i64 %index2213, 2
  %vec.ind.next2215 = add <2 x i32> %vec.ind2214, <i32 2, i32 2>
  %1631 = icmp eq i64 %index.next2223, %n.vec2209
  br i1 %1631, label %middle.block2204, label %vector.body2212, !llvm.loop !184

middle.block2204:                                 ; preds = %vector.body2212
  %cmp.n2224 = icmp eq i64 %1600, %n.vec2209
  br i1 %cmp.n2224, label %._crit_edge1876, label %.lr.ph1875.preheader2530

.lr.ph1875.preheader2530:                         ; preds = %middle.block2204, %vector.memcheck2190, %.lr.ph1875.preheader
  %indvars.iv1954.ph = phi i64 [ 4, %vector.memcheck2190 ], [ 4, %.lr.ph1875.preheader ], [ %ind.end2210, %middle.block2204 ]
  br label %.lr.ph1875

.lr.ph1875:                                       ; preds = %.lr.ph1875.preheader2530, %.lr.ph1875
  %indvars.iv1954 = phi i64 [ %indvars.iv.next1955, %.lr.ph1875 ], [ %indvars.iv1954.ph, %.lr.ph1875.preheader2530 ]
  %1632 = trunc nuw nsw i64 %indvars.iv1954 to i32
  %1633 = uitofp nneg i32 %1632 to double
  %1634 = call double @llvm.fmuladd.f64(double %1633, double 2.000000e+00, double 1.000000e+00)
  %1635 = fdiv double %15, %1634
  %1636 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1954
  %1637 = load double, ptr %1636, align 8, !tbaa !29
  %1638 = fmul double %1637, %1633
  %1639 = add nsw i64 %indvars.iv1954, %1521
  %1640 = getelementptr double, ptr %1, i64 %1639
  %1641 = getelementptr i8, ptr %1640, i64 -8
  %1642 = load double, ptr %1641, align 8, !tbaa !29
  %indvars.iv.next1955 = add nuw nsw i64 %indvars.iv1954, 1
  %1643 = trunc nuw nsw i64 %indvars.iv.next1955 to i32
  %1644 = uitofp nneg i32 %1643 to double
  %1645 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1955
  %1646 = load double, ptr %1645, align 8, !tbaa !29
  %1647 = getelementptr i8, ptr %1640, i64 8
  %1648 = load double, ptr %1647, align 8, !tbaa !29
  %1649 = fneg double %1646
  %1650 = fmul double %1644, %1649
  %1651 = fmul double %1650, %1648
  %1652 = call double @llvm.fmuladd.f64(double %1638, double %1642, double %1651)
  %1653 = fmul double %1635, %1652
  %1654 = getelementptr inbounds double, ptr %2, i64 %1639
  store double %1653, ptr %1654, align 8, !tbaa !29
  %exitcond1958.not = icmp eq i64 %indvars.iv.next1955, %wide.trip.count1957
  br i1 %exitcond1958.not, label %._crit_edge1876, label %.lr.ph1875, !llvm.loop !185

._crit_edge1876:                                  ; preds = %.lr.ph1875, %middle.block2204, %1556
  %1655 = sext i32 %1598 to i64
  %1656 = getelementptr inbounds double, ptr %29, i64 %1655
  %1657 = load double, ptr %1656, align 8, !tbaa !29
  %1658 = add nsw i32 %1598, %1520
  %1659 = sext i32 %1658 to i64
  %1660 = getelementptr double, ptr %1, i64 %1659
  %1661 = getelementptr i8, ptr %1660, i64 -8
  %1662 = load double, ptr %1661, align 8, !tbaa !29
  %1663 = sitofp i32 %1598 to double
  %1664 = fadd double %1663, 1.000000e+00
  %1665 = load double, ptr %1660, align 8, !tbaa !29
  %1666 = fneg double %1664
  %1667 = fmul double %.01775, %1666
  %1668 = fmul double %1667, %1665
  %1669 = call double @llvm.fmuladd.f64(double %1657, double %1662, double %1668)
  %1670 = fmul double %15, %1669
  br label %.thread1836.sink.split

1671:                                             ; preds = %1508
  %1672 = getelementptr inbounds i8, ptr %19, i64 1696
  %1673 = load i32, ptr %1672, align 8, !tbaa !186
  switch i32 %1673, label %.thread1836 [
    i32 0, label %.thread1835
    i32 1, label %1680
    i32 2, label %1687
  ]

.thread1835:                                      ; preds = %1671
  %1674 = fdiv double -3.000000e+00, %0
  %1675 = load double, ptr %1539, align 8, !tbaa !29
  %1676 = load double, ptr %1512, align 8, !tbaa !29
  %1677 = fadd double %.11804, %1676
  %1678 = fmul double %1677, 0x3FE5555555555555
  %1679 = call double @llvm.fmuladd.f64(double %1674, double %1675, double %1678)
  br label %.thread1836.sink.split

1680:                                             ; preds = %1671
  %1681 = fmul double %78, -3.000000e+00
  %1682 = load double, ptr %1539, align 8, !tbaa !29
  %1683 = load double, ptr %1512, align 8, !tbaa !29
  %1684 = fadd double %.11804, %1683
  %1685 = fmul double %1684, 0x3FE5555555555555
  %1686 = call double @llvm.fmuladd.f64(double %1681, double %1682, double %1685)
  br label %.thread1836.sink.split

1687:                                             ; preds = %1671
  %1688 = fdiv double -3.000000e+00, %0
  %1689 = load double, ptr %1539, align 8, !tbaa !29
  %1690 = load double, ptr %1512, align 8, !tbaa !29
  %1691 = fadd double %.11806, %1690
  %1692 = fmul double %1691, 0x3FE5555555555555
  %1693 = call double @llvm.fmuladd.f64(double %1688, double %1689, double %1692)
  br label %.thread1836.sink.split

.thread1836.sink.split:                           ; preds = %._crit_edge1876, %1687, %.thread1835, %1680
  %.sink2059 = phi i64 [ %1538, %1680 ], [ %1538, %.thread1835 ], [ %1538, %1687 ], [ %1659, %._crit_edge1876 ]
  %.sink2057 = phi double [ %1686, %1680 ], [ %1679, %.thread1835 ], [ %1693, %1687 ], [ %1670, %._crit_edge1876 ]
  %1694 = getelementptr inbounds double, ptr %2, i64 %.sink2059
  store double %.sink2057, ptr %1694, align 8, !tbaa !29
  br label %.thread1836

.thread1836:                                      ; preds = %.thread1836.sink.split, %1671, %1501, %1497
  %1695 = getelementptr inbounds i8, ptr %21, i64 732
  %1696 = load i16, ptr %1695, align 4, !tbaa !188
  %1697 = icmp eq i16 %1696, 1
  br i1 %1697, label %1698, label %.loopexit1842

1698:                                             ; preds = %.thread1836
  %1699 = getelementptr inbounds i8, ptr %37, i64 148
  %1700 = load i32, ptr %1699, align 4, !tbaa !189
  %1701 = load ptr, ptr %158, align 8, !tbaa !48
  %1702 = getelementptr inbounds i8, ptr %27, i64 356
  %1703 = load i32, ptr %1702, align 4, !tbaa !190
  %1704 = sext i32 %1703 to i64
  %1705 = getelementptr inbounds i32, ptr %1701, i64 %1704
  %1706 = load i32, ptr %1705, align 4, !tbaa !50
  %1707 = icmp eq i32 %1706, 1
  %1708 = getelementptr inbounds i8, ptr %37, i64 152
  %1709 = load i32, ptr %1708, align 8, !tbaa !191
  %1710 = icmp sgt i32 %1709, 0
  br i1 %1707, label %.preheader1841, label %.preheader1844

.preheader1844:                                   ; preds = %1698
  br i1 %1710, label %.preheader1843.lr.ph, label %.loopexit1842

.preheader1843.lr.ph:                             ; preds = %.preheader1844
  %1711 = getelementptr inbounds i8, ptr %37, i64 168
  %1712 = getelementptr inbounds i8, ptr %21, i64 808
  %1713 = getelementptr inbounds i8, ptr %21, i64 792
  %1714 = getelementptr inbounds i8, ptr %21, i64 232
  %1715 = getelementptr inbounds i8, ptr %29, i64 16
  %1716 = getelementptr inbounds i8, ptr %29, i64 24
  %1717 = getelementptr inbounds i8, ptr %37, i64 160
  %1718 = fneg double %15
  %.pre2015 = load ptr, ptr %1711, align 8, !tbaa !192
  %scevgep2226 = getelementptr i8, ptr %2, i64 24
  %scevgep2229 = getelementptr i8, ptr %29, i64 8
  %scevgep2231 = getelementptr i8, ptr %1, i64 32
  %scevgep2233 = getelementptr i8, ptr %1, i64 8
  %scevgep2236 = getelementptr i8, ptr %1, i64 -24
  br label %.preheader1843

.preheader1841:                                   ; preds = %1698
  br i1 %1710, label %.lr.ph1895, label %.loopexit1842

.lr.ph1895:                                       ; preds = %.preheader1841
  %1719 = getelementptr inbounds i8, ptr %21, i64 552
  %1720 = load i32, ptr %1719, align 8, !tbaa !193
  %1721 = getelementptr inbounds i8, ptr %21, i64 556
  %1722 = load i32, ptr %1721, align 4, !tbaa !194
  %1723 = getelementptr inbounds i8, ptr %21, i64 560
  %1724 = load i32, ptr %1723, align 8, !tbaa !195
  %1725 = getelementptr inbounds i8, ptr %19, i64 1712
  %1726 = load i32, ptr %1725, align 8, !tbaa !196
  %1727 = icmp eq i32 %1726, 0
  %1728 = icmp eq i32 %1726, 1
  %1729 = icmp eq i32 %1726, 2
  %1730 = icmp ult i32 %1726, 3
  %1731 = fmul double %78, -3.000000e+00
  %1732 = fneg double %78
  %1733 = fneg double %16
  %1734 = fdiv double 1.000000e+00, %0
  %1735 = getelementptr inbounds i8, ptr %29, i64 16
  %1736 = getelementptr inbounds i8, ptr %37, i64 160
  %1737 = load ptr, ptr %1736, align 8, !tbaa !197
  %1738 = sext i32 %1720 to i64
  %1739 = sext i32 %1722 to i64
  %1740 = sext i32 %1724 to i64
  %wide.trip.count1973 = zext nneg i32 %1709 to i64
  %invariant.gep2032 = getelementptr double, ptr %31, i64 %1738
  %invariant.gep2034 = getelementptr double, ptr %31, i64 %1739
  %invariant.gep2036 = getelementptr double, ptr %31, i64 %1740
  br label %1741

1741:                                             ; preds = %.lr.ph1895, %.thread1839
  %indvars.iv1970 = phi i64 [ 0, %.lr.ph1895 ], [ %indvars.iv.next1971, %.thread1839 ]
  %.017761894 = phi double [ 0.000000e+00, %.lr.ph1895 ], [ %.31779, %.thread1839 ]
  %.017801893 = phi double [ 0.000000e+00, %.lr.ph1895 ], [ %.31783, %.thread1839 ]
  %.017911892 = phi i32 [ %1700, %.lr.ph1895 ], [ %1811, %.thread1839 ]
  %gep2033 = getelementptr double, ptr %invariant.gep2032, i64 %indvars.iv1970
  %1742 = load double, ptr %gep2033, align 8, !tbaa !29
  %gep2035 = getelementptr double, ptr %invariant.gep2034, i64 %indvars.iv1970
  %1743 = load double, ptr %gep2035, align 8, !tbaa !29
  %gep2037 = getelementptr double, ptr %invariant.gep2036, i64 %indvars.iv1970
  %1744 = load double, ptr %gep2037, align 8, !tbaa !29
  %1745 = fdiv double %1743, %1742
  %1746 = fdiv double %1745, 3.000000e+00
  %1747 = fadd double %1745, 1.000000e+00
  %1748 = fdiv double %1746, %1747
  %1749 = fdiv double %1744, %1743
  %1750 = fsub double 5.000000e+00, %1749
  %1751 = fmul double %1748, %1750
  %1752 = fmul double %1745, 3.000000e+00
  %1753 = fmul double %1752, %1751
  %.11777 = select i1 %1727, double %1753, double %.017761894
  %.21778 = select i1 %1728, double %1745, double %.11777
  %.31783 = select i1 %1730, double %1751, double %.017801893
  %.31779 = select i1 %1729, double %1753, double %.21778
  %1754 = fneg double %1747
  %1755 = add nsw i32 %.017911892, 1
  %1756 = sext i32 %1755 to i64
  %1757 = getelementptr inbounds double, ptr %1, i64 %1756
  %1758 = load double, ptr %1757, align 8, !tbaa !29
  %1759 = fadd double %.11790, %1758
  %1760 = fsub double %.31783, %1745
  %1761 = sext i32 %.017911892 to i64
  %1762 = getelementptr inbounds double, ptr %1, i64 %1761
  %1763 = load double, ptr %1762, align 8, !tbaa !29
  %1764 = fmul double %1731, %1760
  %1765 = fmul double %1763, %1764
  %1766 = call double @llvm.fmuladd.f64(double %1754, double %1759, double %1765)
  %1767 = getelementptr inbounds double, ptr %2, i64 %1761
  store double %1766, ptr %1767, align 8, !tbaa !29
  %1768 = call double @llvm.fmuladd.f64(double %1751, double -3.000000e+00, double 1.000000e+00)
  %1769 = fmul double %1768, %1732
  %1770 = load double, ptr %1757, align 8, !tbaa !29
  %1771 = fdiv double %.31783, %1747
  %1772 = fmul double %16, %1771
  %1773 = load double, ptr %1762, align 8, !tbaa !29
  %1774 = fmul double %1772, %1773
  %1775 = call double @llvm.fmuladd.f64(double %1769, double %1770, double %1774)
  %1776 = add nsw i32 %.017911892, 2
  %1777 = sext i32 %1776 to i64
  %1778 = getelementptr inbounds double, ptr %1, i64 %1777
  %1779 = load double, ptr %1778, align 8, !tbaa !29
  %1780 = call double @llvm.fmuladd.f64(double %1733, double %1779, double %1775)
  %1781 = fadd double %.11802, %1780
  %1782 = getelementptr inbounds double, ptr %2, i64 %1756
  store double %1781, ptr %1782, align 8, !tbaa !29
  br i1 %1727, label %.thread1837, label %1788

.thread1837:                                      ; preds = %1741
  %1783 = fsub double 0x3FE5555555555555, %1751
  %1784 = fdiv double %1749, 3.000000e+00
  %1785 = fsub double %1783, %1784
  %1786 = call double @llvm.fmuladd.f64(double %78, double %1785, double %1734)
  %1787 = fmul double %1786, -3.000000e+00
  br label %.thread1839.sink.split

1788:                                             ; preds = %1741
  br i1 %1728, label %1789, label %1792

1789:                                             ; preds = %1788
  %1790 = fmul double %1731, %1751
  %1791 = fdiv double %1790, %1745
  br label %.thread1839.sink.split

1792:                                             ; preds = %1788
  br i1 %1729, label %1793, label %.thread1839

1793:                                             ; preds = %1792
  %1794 = fsub double 0x3FE5555555555555, %1751
  %1795 = fdiv double %1749, 3.000000e+00
  %1796 = fsub double %1794, %1795
  %1797 = call double @llvm.fmuladd.f64(double %78, double %1796, double %1734)
  %1798 = fmul double %1797, -3.000000e+00
  br label %.thread1839.sink.split

.thread1839.sink.split:                           ; preds = %1793, %.thread1837, %1789
  %.sink2071 = phi double [ %1745, %1789 ], [ %.11777, %.thread1837 ], [ %1753, %1793 ]
  %.11804.sink = phi double [ %.11804, %1789 ], [ %.11804, %.thread1837 ], [ %.11806, %1793 ]
  %.sink2062 = phi double [ %1791, %1789 ], [ %1787, %.thread1837 ], [ %1798, %1793 ]
  %1799 = load double, ptr %1778, align 8, !tbaa !29
  %1800 = fmul double %.sink2071, 0x4005555555555555
  %1801 = fdiv double %1800, %1747
  %1802 = load double, ptr %1735, align 8, !tbaa !29
  %1803 = fmul double %1801, %1802
  %1804 = load double, ptr %1757, align 8, !tbaa !29
  %1805 = fadd double %.11804.sink, %1804
  %1806 = fmul double %1803, %1805
  %1807 = call double @llvm.fmuladd.f64(double %.sink2062, double %1799, double %1806)
  %1808 = getelementptr inbounds double, ptr %2, i64 %1777
  store double %1807, ptr %1808, align 8, !tbaa !29
  br label %.thread1839

.thread1839:                                      ; preds = %.thread1839.sink.split, %1792
  %1809 = getelementptr inbounds i32, ptr %1737, i64 %indvars.iv1970
  %1810 = load i32, ptr %1809, align 4, !tbaa !50
  %1811 = add i32 %1755, %1810
  %indvars.iv.next1971 = add nuw nsw i64 %indvars.iv1970, 1
  %exitcond1974.not = icmp eq i64 %indvars.iv.next1971, %wide.trip.count1973
  br i1 %exitcond1974.not, label %.loopexit1842, label %1741, !llvm.loop !198

.preheader1843:                                   ; preds = %.preheader1843.lr.ph, %._crit_edge1887
  %1812 = phi i32 [ %1709, %.preheader1843.lr.ph ], [ %1965, %._crit_edge1887 ]
  %1813 = phi ptr [ %.pre2015, %.preheader1843.lr.ph ], [ %1966, %._crit_edge1887 ]
  %indvars.iv1967 = phi i64 [ 0, %.preheader1843.lr.ph ], [ %indvars.iv.next1968, %._crit_edge1887 ]
  %.117921890 = phi i32 [ %1700, %.preheader1843.lr.ph ], [ %.21793.lcssa, %._crit_edge1887 ]
  %1814 = getelementptr inbounds i32, ptr %1813, i64 %indvars.iv1967
  %1815 = load i32, ptr %1814, align 4, !tbaa !50
  %1816 = icmp sgt i32 %1815, 0
  br i1 %1816, label %.lr.ph1886, label %._crit_edge1887

.lr.ph1886:                                       ; preds = %.preheader1843, %._crit_edge1881
  %indvars.iv1964 = phi i64 [ %indvars.iv.next1965, %._crit_edge1881 ], [ 0, %.preheader1843 ]
  %.217931885 = phi i32 [ %1959, %._crit_edge1881 ], [ %.117921890, %.preheader1843 ]
  %1817 = load ptr, ptr %1712, align 8, !tbaa !199
  %1818 = getelementptr inbounds ptr, ptr %1817, i64 %indvars.iv1967
  %1819 = load ptr, ptr %1818, align 8, !tbaa !200
  %1820 = getelementptr inbounds double, ptr %1819, i64 %indvars.iv1964
  %1821 = load double, ptr %1820, align 8, !tbaa !29
  %1822 = load ptr, ptr %1713, align 8, !tbaa !201
  %1823 = getelementptr inbounds ptr, ptr %1822, i64 %indvars.iv1967
  %1824 = load ptr, ptr %1823, align 8, !tbaa !200
  %1825 = getelementptr inbounds double, ptr %1824, i64 %indvars.iv1964
  %1826 = load double, ptr %1825, align 8, !tbaa !29
  %1827 = load ptr, ptr %1714, align 8, !tbaa !202
  %1828 = getelementptr inbounds double, ptr %1827, i64 %indvars.iv1967
  %1829 = load double, ptr %1828, align 8, !tbaa !29
  %1830 = fmul double %72, %1829
  %1831 = fmul double %1829, %1830
  %1832 = call double @llvm.fmuladd.f64(double %1826, double %1826, double %1831)
  %1833 = call double @sqrt(double noundef %1832) #7
  %1834 = fmul double %15, %1826
  %1835 = fdiv double %1834, %1833
  %1836 = fneg double %1835
  %1837 = add i32 %.217931885, 1
  %1838 = sext i32 %1837 to i64
  %1839 = getelementptr inbounds double, ptr %1, i64 %1838
  %1840 = load double, ptr %1839, align 8, !tbaa !29
  %1841 = fmul double %.11790, %1821
  %1842 = fdiv double %1841, 3.000000e+00
  %1843 = call double @llvm.fmuladd.f64(double %1836, double %1840, double %1842)
  %1844 = sext i32 %.217931885 to i64
  %1845 = getelementptr inbounds double, ptr %2, i64 %1844
  store double %1843, ptr %1845, align 8, !tbaa !29
  %1846 = fdiv double %1835, 3.000000e+00
  %1847 = getelementptr inbounds double, ptr %1, i64 %1844
  %1848 = load double, ptr %1847, align 8, !tbaa !29
  %1849 = load double, ptr %1715, align 8, !tbaa !29
  %1850 = add nsw i32 %.217931885, 2
  %1851 = sext i32 %1850 to i64
  %1852 = getelementptr inbounds double, ptr %1, i64 %1851
  %1853 = load double, ptr %1852, align 8, !tbaa !29
  %1854 = fmul double %1849, -2.000000e+00
  %1855 = call double @llvm.fmuladd.f64(double %1854, double %1853, double %1848)
  %1856 = fmul double %1826, 3.000000e+00
  %1857 = fmul double %15, %1856
  %1858 = fneg double %1833
  %1859 = fmul double %.11802, %1858
  %1860 = fdiv double %1859, %1857
  %1861 = fmul double %1821, %1860
  %1862 = call double @llvm.fmuladd.f64(double %1846, double %1855, double %1861)
  %1863 = getelementptr inbounds double, ptr %2, i64 %1838
  store double %1862, ptr %1863, align 8, !tbaa !29
  %1864 = fdiv double %1835, 5.000000e+00
  %1865 = load double, ptr %1715, align 8, !tbaa !29
  %1866 = fmul double %1865, 2.000000e+00
  %1867 = load double, ptr %1839, align 8, !tbaa !29
  %1868 = load double, ptr %1716, align 8, !tbaa !29
  %1869 = getelementptr i8, ptr %1847, i64 24
  %1870 = load double, ptr %1869, align 8, !tbaa !29
  %1871 = fmul double %1868, -3.000000e+00
  %1872 = fmul double %1871, %1870
  %1873 = call double @llvm.fmuladd.f64(double %1866, double %1867, double %1872)
  %1874 = fmul double %.11804, %1865
  %1875 = fmul double %1874, 2.000000e+00
  %1876 = fdiv double %1875, -1.500000e+01
  %1877 = fmul double %1821, %1876
  %1878 = call double @llvm.fmuladd.f64(double %1864, double %1873, double %1877)
  %1879 = getelementptr inbounds double, ptr %2, i64 %1851
  store double %1878, ptr %1879, align 8, !tbaa !29
  %1880 = load ptr, ptr %1717, align 8, !tbaa !197
  %1881 = getelementptr inbounds i32, ptr %1880, i64 %indvars.iv1967
  %1882 = load i32, ptr %1881, align 4, !tbaa !50
  %1883 = icmp sgt i32 %1882, 3
  br i1 %1883, label %.lr.ph1880, label %._crit_edge1881

.lr.ph1880:                                       ; preds = %.lr.ph1886
  %1884 = add i32 %.217931885, -1
  %wide.trip.count1962 = zext nneg i32 %1882 to i64
  %invariant.gep2028 = getelementptr double, ptr %1, i64 %1844
  %invariant.gep2030 = getelementptr double, ptr %2, i64 %1844
  %1885 = add nsw i64 %wide.trip.count1962, -3
  %min.iters.check2251 = icmp ult i64 %1885, 4
  br i1 %min.iters.check2251, label %scalar.ph2250.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph1880
  %1886 = add nsw i64 %wide.trip.count1962, -4
  %1887 = add i32 %.217931885, 2
  %1888 = trunc i64 %1886 to i32
  %1889 = add i32 %1887, %1888
  %1890 = icmp slt i32 %1889, %1887
  %1891 = icmp ugt i64 %1886, 4294967295
  %1892 = or i1 %1890, %1891
  br i1 %1892, label %scalar.ph2250.preheader, label %vector.memcheck2225

vector.memcheck2225:                              ; preds = %vector.scevcheck
  %1893 = shl nsw i64 %1844, 3
  %scevgep2227 = getelementptr i8, ptr %scevgep2226, i64 %1893
  %1894 = shl nuw nsw i64 %wide.trip.count1962, 3
  %1895 = add nsw i64 %1893, %1894
  %scevgep2228 = getelementptr i8, ptr %2, i64 %1895
  %scevgep2230 = getelementptr i8, ptr %scevgep2229, i64 %1894
  %scevgep2232 = getelementptr i8, ptr %scevgep2231, i64 %1893
  %scevgep2234 = getelementptr i8, ptr %scevgep2233, i64 %1895
  %1896 = add i32 %.217931885, 2
  %1897 = sext i32 %1896 to i64
  %1898 = shl nsw i64 %1897, 3
  %scevgep2235 = getelementptr i8, ptr %1, i64 %1898
  %1899 = getelementptr i8, ptr %scevgep2236, i64 %1898
  %scevgep2237 = getelementptr i8, ptr %1899, i64 %1894
  %bound02238 = icmp ult ptr %scevgep2227, %scevgep2230
  %bound12239 = icmp ult ptr %1716, %scevgep2228
  %found.conflict2240 = and i1 %bound02238, %bound12239
  %bound02241 = icmp ult ptr %scevgep2227, %scevgep2234
  %bound12242 = icmp ult ptr %scevgep2232, %scevgep2228
  %found.conflict2243 = and i1 %bound02241, %bound12242
  %conflict.rdx2244 = or i1 %found.conflict2240, %found.conflict2243
  %bound02245 = icmp ult ptr %scevgep2227, %scevgep2237
  %bound12246 = icmp ult ptr %scevgep2235, %scevgep2228
  %found.conflict2247 = and i1 %bound02245, %bound12246
  %conflict.rdx2248 = or i1 %conflict.rdx2244, %found.conflict2247
  br i1 %conflict.rdx2248, label %scalar.ph2250.preheader, label %vector.ph2252

vector.ph2252:                                    ; preds = %vector.memcheck2225
  %n.vec2254 = and i64 %1885, -2
  %ind.end2255 = add nsw i64 %n.vec2254, 3
  %broadcast.splatinsert2263 = insertelement <2 x double> poison, double %1835, i64 0
  %broadcast.splat2264 = shufflevector <2 x double> %broadcast.splatinsert2263, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body2257

vector.body2257:                                  ; preds = %vector.body2257, %vector.ph2252
  %index2258 = phi i64 [ 0, %vector.ph2252 ], [ %index.next2269, %vector.body2257 ]
  %vec.ind2259 = phi <2 x i32> [ <i32 3, i32 4>, %vector.ph2252 ], [ %vec.ind.next2260, %vector.body2257 ]
  %offset.idx2261 = add i64 %index2258, 3
  %1900 = trunc i64 %index2258 to i32
  %1901 = add i32 %1900, 3
  %1902 = uitofp <2 x i32> %vec.ind2259 to <2 x double>
  %1903 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1902, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %1904 = fdiv <2 x double> %broadcast.splat2264, %1903
  %1905 = getelementptr inbounds double, ptr %29, i64 %offset.idx2261
  %wide.load2265 = load <2 x double>, ptr %1905, align 8, !tbaa !29, !alias.scope !203
  %1906 = fmul <2 x double> %wide.load2265, %1902
  %1907 = add i32 %1884, %1901
  %1908 = sext i32 %1907 to i64
  %1909 = getelementptr inbounds double, ptr %1, i64 %1908
  %wide.load2266 = load <2 x double>, ptr %1909, align 8, !tbaa !29, !alias.scope !206
  %1910 = insertelement <2 x i64> poison, i64 %index2258, i64 0
  %1911 = shufflevector <2 x i64> %1910, <2 x i64> poison, <2 x i32> zeroinitializer
  %1912 = add <2 x i64> %1911, <i64 4, i64 5>
  %1913 = trunc <2 x i64> %1912 to <2 x i32>
  %1914 = uitofp <2 x i32> %1913 to <2 x double>
  %1915 = extractelement <2 x i64> %1912, i64 0
  %1916 = getelementptr inbounds double, ptr %29, i64 %1915
  %wide.load2267 = load <2 x double>, ptr %1916, align 8, !tbaa !29, !alias.scope !203
  %1917 = getelementptr double, ptr %invariant.gep2028, i64 %1915
  %wide.load2268 = load <2 x double>, ptr %1917, align 8, !tbaa !29, !alias.scope !208
  %1918 = fneg <2 x double> %wide.load2267
  %1919 = fmul <2 x double> %1914, %1918
  %1920 = fmul <2 x double> %1919, %wide.load2268
  %1921 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1906, <2 x double> %wide.load2266, <2 x double> %1920)
  %1922 = fmul <2 x double> %1904, %1921
  %1923 = getelementptr double, ptr %invariant.gep2030, i64 %offset.idx2261
  store <2 x double> %1922, ptr %1923, align 8, !tbaa !29, !alias.scope !210, !noalias !212
  %index.next2269 = add nuw i64 %index2258, 2
  %vec.ind.next2260 = add <2 x i32> %vec.ind2259, <i32 2, i32 2>
  %1924 = icmp eq i64 %index.next2269, %n.vec2254
  br i1 %1924, label %middle.block2249, label %vector.body2257, !llvm.loop !213

middle.block2249:                                 ; preds = %vector.body2257
  %cmp.n2270 = icmp eq i64 %1885, %n.vec2254
  br i1 %cmp.n2270, label %._crit_edge1881, label %scalar.ph2250.preheader

scalar.ph2250.preheader:                          ; preds = %middle.block2249, %vector.memcheck2225, %vector.scevcheck, %.lr.ph1880
  %indvars.iv1959.ph = phi i64 [ 3, %vector.memcheck2225 ], [ 3, %vector.scevcheck ], [ 3, %.lr.ph1880 ], [ %ind.end2255, %middle.block2249 ]
  br label %scalar.ph2250

scalar.ph2250:                                    ; preds = %scalar.ph2250.preheader, %scalar.ph2250
  %indvars.iv1959 = phi i64 [ %indvars.iv.next1960, %scalar.ph2250 ], [ %indvars.iv1959.ph, %scalar.ph2250.preheader ]
  %1925 = trunc nuw nsw i64 %indvars.iv1959 to i32
  %1926 = uitofp nneg i32 %1925 to double
  %1927 = call double @llvm.fmuladd.f64(double %1926, double 2.000000e+00, double 1.000000e+00)
  %1928 = fdiv double %1835, %1927
  %1929 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1959
  %1930 = load double, ptr %1929, align 8, !tbaa !29
  %1931 = fmul double %1930, %1926
  %1932 = add i32 %1884, %1925
  %1933 = sext i32 %1932 to i64
  %1934 = getelementptr inbounds double, ptr %1, i64 %1933
  %1935 = load double, ptr %1934, align 8, !tbaa !29
  %indvars.iv.next1960 = add nuw nsw i64 %indvars.iv1959, 1
  %1936 = trunc nuw nsw i64 %indvars.iv.next1960 to i32
  %1937 = uitofp nneg i32 %1936 to double
  %1938 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1960
  %1939 = load double, ptr %1938, align 8, !tbaa !29
  %gep2029 = getelementptr double, ptr %invariant.gep2028, i64 %indvars.iv.next1960
  %1940 = load double, ptr %gep2029, align 8, !tbaa !29
  %1941 = fneg double %1939
  %1942 = fmul double %1937, %1941
  %1943 = fmul double %1942, %1940
  %1944 = call double @llvm.fmuladd.f64(double %1931, double %1935, double %1943)
  %1945 = fmul double %1928, %1944
  %gep2031 = getelementptr double, ptr %invariant.gep2030, i64 %indvars.iv1959
  store double %1945, ptr %gep2031, align 8, !tbaa !29
  %exitcond1963.not = icmp eq i64 %indvars.iv.next1960, %wide.trip.count1962
  br i1 %exitcond1963.not, label %._crit_edge1881, label %scalar.ph2250, !llvm.loop !214

._crit_edge1881:                                  ; preds = %scalar.ph2250, %middle.block2249, %.lr.ph1886
  %.5.lcssa = phi i32 [ 3, %.lr.ph1886 ], [ %1882, %middle.block2249 ], [ %1882, %scalar.ph2250 ]
  %1946 = add nsw i32 %.5.lcssa, %.217931885
  %1947 = sext i32 %1946 to i64
  %1948 = getelementptr double, ptr %1, i64 %1947
  %1949 = getelementptr i8, ptr %1948, i64 -8
  %1950 = load double, ptr %1949, align 8, !tbaa !29
  %1951 = add nuw i32 %.5.lcssa, 1
  %1952 = uitofp i32 %1951 to double
  %1953 = load double, ptr %1948, align 8, !tbaa !29
  %1954 = fmul double %1718, %1952
  %1955 = fmul double %.01775, %1954
  %1956 = fmul double %1955, %1953
  %1957 = call double @llvm.fmuladd.f64(double %1835, double %1950, double %1956)
  %1958 = getelementptr inbounds double, ptr %2, i64 %1947
  store double %1957, ptr %1958, align 8, !tbaa !29
  %1959 = add i32 %1837, %1882
  %indvars.iv.next1965 = add nuw nsw i64 %indvars.iv1964, 1
  %1960 = load ptr, ptr %1711, align 8, !tbaa !192
  %1961 = getelementptr inbounds i32, ptr %1960, i64 %indvars.iv1967
  %1962 = load i32, ptr %1961, align 4, !tbaa !50
  %1963 = sext i32 %1962 to i64
  %1964 = icmp slt i64 %indvars.iv.next1965, %1963
  br i1 %1964, label %.lr.ph1886, label %._crit_edge1887.loopexit, !llvm.loop !215

._crit_edge1887.loopexit:                         ; preds = %._crit_edge1881
  %.pre2016 = load i32, ptr %1708, align 8, !tbaa !191
  br label %._crit_edge1887

._crit_edge1887:                                  ; preds = %._crit_edge1887.loopexit, %.preheader1843
  %1965 = phi i32 [ %1812, %.preheader1843 ], [ %.pre2016, %._crit_edge1887.loopexit ]
  %1966 = phi ptr [ %1813, %.preheader1843 ], [ %1960, %._crit_edge1887.loopexit ]
  %.21793.lcssa = phi i32 [ %.117921890, %.preheader1843 ], [ %1959, %._crit_edge1887.loopexit ]
  %indvars.iv.next1968 = add nuw nsw i64 %indvars.iv1967, 1
  %1967 = sext i32 %1965 to i64
  %1968 = icmp slt i64 %indvars.iv.next1968, %1967
  br i1 %1968, label %.preheader1843, label %.loopexit1842, !llvm.loop !216

.loopexit1842:                                    ; preds = %._crit_edge1887, %.thread1839, %.preheader1844, %.preheader1841, %.thread1836
  %1969 = load i32, ptr %291, align 8, !tbaa !72
  switch i32 %1969, label %1975 [
    i32 1, label %.sink.split2072
    i32 0, label %1970
  ]

1970:                                             ; preds = %.loopexit1842
  br label %.sink.split2072

.sink.split2072:                                  ; preds = %.loopexit1842, %1970
  %.sink2518 = phi i64 [ 4, %1970 ], [ 16, %.loopexit1842 ]
  %.sink2517 = phi i64 [ 180, %1970 ], [ 176, %.loopexit1842 ]
  %1971 = getelementptr inbounds i8, ptr %27, i64 %.sink2518
  %1972 = getelementptr inbounds i8, ptr %37, i64 %.sink2517
  %.pn.in = load i32, ptr %1971, align 4, !tbaa !50
  %.pn = sext i32 %.pn.in to i64
  %.sink2073.in = getelementptr inbounds double, ptr %35, i64 %.pn
  %.sink2073 = load double, ptr %.sink2073.in, align 8, !tbaa !29
  %.sink2076 = load i32, ptr %1972, align 4, !tbaa !50
  %1973 = sext i32 %.sink2076 to i64
  %1974 = getelementptr inbounds double, ptr %2, i64 %1973
  store double %.sink2073, ptr %1974, align 8, !tbaa !29
  br label %1975

1975:                                             ; preds = %.sink.split2072, %.loopexit1842, %153, %144
  %.21772 = phi double [ 0.000000e+00, %153 ], [ 0.000000e+00, %144 ], [ %.11771, %.loopexit1842 ], [ %.11771, %.sink.split2072 ]
  %1976 = getelementptr inbounds i8, ptr %25, i64 6
  %1977 = load i16, ptr %1976, align 2, !tbaa !217
  %1978 = icmp eq i16 %1977, 1
  br i1 %1978, label %1979, label %2367

1979:                                             ; preds = %1975
  %1980 = getelementptr inbounds i8, ptr %25, i64 2036
  %1981 = load i32, ptr %1980, align 4, !tbaa !218
  %1982 = icmp eq i32 %18, %1981
  br i1 %1982, label %1983, label %2367

1983:                                             ; preds = %1979
  %1984 = load ptr, ptr @stderr, align 8, !tbaa !200
  %1985 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1984, ptr noundef nonnull @.str.357) #8
  %1986 = load double, ptr %145, align 8, !tbaa !44
  %1987 = fmul double %1986, 2.000000e+00
  %1988 = fdiv double %1987, %16
  %1989 = fsub double 1.000000e+00, %1988
  %1990 = call double @sqrt(double noundef %1989) #7
  %1991 = getelementptr inbounds i8, ptr %23, i64 352
  %1992 = load i32, ptr %1991, align 8, !tbaa !60
  %1993 = sext i32 %1992 to i64
  %1994 = getelementptr inbounds double, ptr %33, i64 %1993
  %1995 = load double, ptr %1994, align 8, !tbaa !29
  %1996 = getelementptr inbounds i8, ptr %25, i64 2024
  %1997 = load i32, ptr %1996, align 8, !tbaa !72
  switch i32 %1997, label %2048 [
    i32 1, label %1998
    i32 0, label %2016
  ]

1998:                                             ; preds = %1983
  %1999 = call double @llvm.fmuladd.f64(double %1995, double -3.000000e+00, double 1.000000e+00)
  %2000 = fneg double %1999
  %2001 = fmul double %78, %2000
  %2002 = getelementptr inbounds i8, ptr %37, i64 44
  %2003 = load i32, ptr %2002, align 4, !tbaa !59
  %2004 = sext i32 %2003 to i64
  %2005 = getelementptr inbounds double, ptr %1, i64 %2004
  %2006 = load double, ptr %2005, align 8, !tbaa !29
  %2007 = getelementptr inbounds i8, ptr %23, i64 276
  %2008 = load i32, ptr %2007, align 4, !tbaa !81
  %2009 = sext i32 %2008 to i64
  %2010 = getelementptr inbounds double, ptr %33, i64 %2009
  %2011 = load double, ptr %2010, align 8, !tbaa !29
  %2012 = call double @llvm.fmuladd.f64(double %.21772, double 0x3FD6A09E667F3BCD, double %2006)
  %2013 = fneg double %2011
  %2014 = fmul double %2012, %2013
  %2015 = call double @llvm.fmuladd.f64(double %2001, double %2006, double %2014)
  br label %.sink.split2077

2016:                                             ; preds = %1983
  %2017 = call double @llvm.fmuladd.f64(double %1995, double -3.000000e+00, double 1.000000e+00)
  %2018 = fneg double %2017
  %2019 = fmul double %78, %2018
  %2020 = getelementptr inbounds i8, ptr %37, i64 44
  %2021 = load i32, ptr %2020, align 4, !tbaa !59
  %2022 = sext i32 %2021 to i64
  %2023 = getelementptr inbounds double, ptr %1, i64 %2022
  %2024 = load double, ptr %2023, align 8, !tbaa !29
  %2025 = getelementptr inbounds i8, ptr %23, i64 276
  %2026 = load i32, ptr %2025, align 4, !tbaa !81
  %2027 = sext i32 %2026 to i64
  %2028 = getelementptr inbounds double, ptr %33, i64 %2027
  %2029 = load double, ptr %2028, align 8, !tbaa !29
  %2030 = call double @llvm.fmuladd.f64(double %2024, double 0x4006A09E667F3BCD, double %.21772)
  %2031 = fmul double %2029, 0xBFD6A09E667F3BCD
  %2032 = fmul double %2030, %2031
  %2033 = call double @llvm.fmuladd.f64(double %2019, double %2024, double %2032)
  %2034 = getelementptr inbounds i8, ptr %27, i64 32
  %2035 = load i32, ptr %2034, align 8, !tbaa !219
  %2036 = sext i32 %2035 to i64
  %2037 = getelementptr inbounds double, ptr %35, i64 %2036
  %2038 = load double, ptr %2037, align 8, !tbaa !29
  %2039 = fadd double %2038, %2033
  %2040 = fmul double %78, %2017
  %2041 = getelementptr inbounds i8, ptr %37, i64 188
  %2042 = load i32, ptr %2041, align 4, !tbaa !220
  %2043 = sext i32 %2042 to i64
  %2044 = getelementptr inbounds double, ptr %1, i64 %2043
  %2045 = load double, ptr %2044, align 8, !tbaa !29
  %2046 = call double @llvm.fmuladd.f64(double %2040, double %2045, double %2039)
  br label %.sink.split2077

.sink.split2077:                                  ; preds = %1998, %2016
  %.sink2080 = phi i64 [ %2022, %2016 ], [ %2004, %1998 ]
  %.sink2078 = phi double [ %2046, %2016 ], [ %2015, %1998 ]
  %2047 = getelementptr inbounds double, ptr %2, i64 %.sink2080
  store double %.sink2078, ptr %2047, align 8, !tbaa !29
  br label %2048

2048:                                             ; preds = %.sink.split2077, %1983
  %2049 = load i32, ptr %37, align 8, !tbaa !51
  %2050 = sext i32 %2049 to i64
  %2051 = getelementptr inbounds double, ptr %1, i64 %2050
  %2052 = load double, ptr %2051, align 8, !tbaa !29
  %2053 = getelementptr inbounds i8, ptr %37, i64 4
  %2054 = load i32, ptr %2053, align 4, !tbaa !53
  %2055 = sext i32 %2054 to i64
  %2056 = getelementptr inbounds double, ptr %1, i64 %2055
  %2057 = load double, ptr %2056, align 8, !tbaa !29
  %2058 = getelementptr inbounds i8, ptr %37, i64 8
  %2059 = load i32, ptr %2058, align 8, !tbaa !86
  %2060 = sext i32 %2059 to i64
  %2061 = getelementptr inbounds double, ptr %1, i64 %2060
  %2062 = load double, ptr %2061, align 8, !tbaa !29
  %2063 = fmul double %15, 3.000000e+00
  %2064 = fdiv double 4.000000e+00, %2063
  %2065 = getelementptr i8, ptr %2051, i64 24
  %2066 = load double, ptr %2065, align 8, !tbaa !29
  %2067 = call double @llvm.fmuladd.f64(double %2064, double %2057, double %2066)
  %2068 = getelementptr inbounds i8, ptr %37, i64 20
  %2069 = load i32, ptr %2068, align 4, !tbaa !84
  %2070 = sext i32 %2069 to i64
  %2071 = getelementptr inbounds double, ptr %1, i64 %2070
  %2072 = load double, ptr %2071, align 8, !tbaa !29
  %2073 = call double @llvm.fmuladd.f64(double %2072, double 2.000000e+00, double %2067)
  %2074 = getelementptr inbounds i8, ptr %37, i64 28
  %2075 = load i32, ptr %2074, align 4, !tbaa !85
  %2076 = sext i32 %2075 to i64
  %2077 = getelementptr inbounds double, ptr %1, i64 %2076
  %2078 = load double, ptr %2077, align 8, !tbaa !29
  %2079 = call double @llvm.fmuladd.f64(double %2078, double 0x3FF6DB6DB6DB6DB7, double %2073)
  %2080 = getelementptr i8, ptr %2071, i64 32
  %2081 = load double, ptr %2080, align 8, !tbaa !29
  %2082 = call double @llvm.fmuladd.f64(double %2081, double 0xBFE2492492492492, double %2079)
  %2083 = fmul double %2082, 0xBFAF5A7CECDB684A
  %.phi.trans.insert2018 = getelementptr inbounds i8, ptr %23, i64 276
  %.pre2019 = load i32, ptr %.phi.trans.insert2018, align 4, !tbaa !81
  %.pre2022 = sext i32 %.pre2019 to i64
  switch i32 %1997, label %._crit_edge2017 [
    i32 1, label %2084
    i32 0, label %2114
  ]

2084:                                             ; preds = %2048
  %2085 = getelementptr inbounds double, ptr %33, i64 %.pre2022
  %2086 = load double, ptr %2085, align 8, !tbaa !29
  %2087 = getelementptr inbounds i8, ptr %37, i64 44
  %2088 = load i32, ptr %2087, align 4, !tbaa !59
  %2089 = sext i32 %2088 to i64
  %2090 = getelementptr inbounds double, ptr %1, i64 %2089
  %2091 = load double, ptr %2090, align 8, !tbaa !29
  %2092 = call double @llvm.fmuladd.f64(double %2091, double 0x4006A09E667F3BCD, double %2052)
  %2093 = fneg double %2086
  %2094 = fmul double %2092, %2093
  %2095 = call double @llvm.fmuladd.f64(double %2057, double 0xBFF5555555555555, double %2094)
  %2096 = getelementptr inbounds double, ptr %2, i64 %2050
  store double %2095, ptr %2096, align 8, !tbaa !29
  %2097 = fmul double %2052, 2.500000e-01
  %2098 = getelementptr inbounds i8, ptr %29, i64 16
  %2099 = load double, ptr %2098, align 8, !tbaa !29
  %2100 = fneg double %2099
  %2101 = call double @llvm.fmuladd.f64(double %2100, double %2062, double %2097)
  %2102 = load double, ptr %2085, align 8, !tbaa !29
  %2103 = call double @llvm.fmuladd.f64(double %2083, double 0x3FFA20BD700C2C3F, double %2057)
  %2104 = fneg double %2102
  %2105 = fmul double %2103, %2104
  %2106 = call double @llvm.fmuladd.f64(double %16, double %2101, double %2105)
  %2107 = fmul double %1990, 0x3FEE2B7DDDFEFA65
  %2108 = getelementptr inbounds i8, ptr %37, i64 184
  %2109 = load i32, ptr %2108, align 8, !tbaa !221
  %2110 = sext i32 %2109 to i64
  %2111 = getelementptr inbounds double, ptr %1, i64 %2110
  %2112 = load double, ptr %2111, align 8, !tbaa !29
  %2113 = call double @llvm.fmuladd.f64(double %2107, double %2112, double %2106)
  br label %._crit_edge2017.sink.split

2114:                                             ; preds = %2048
  %2115 = getelementptr inbounds double, ptr %33, i64 %.pre2022
  %2116 = load double, ptr %2115, align 8, !tbaa !29
  %2117 = getelementptr inbounds i8, ptr %37, i64 44
  %2118 = load i32, ptr %2117, align 4, !tbaa !59
  %2119 = sext i32 %2118 to i64
  %2120 = getelementptr inbounds double, ptr %1, i64 %2119
  %2121 = load double, ptr %2120, align 8, !tbaa !29
  %2122 = call double @llvm.fmuladd.f64(double %2121, double 0x4006A09E667F3BCD, double %2052)
  %2123 = fneg double %2116
  %2124 = fmul double %2122, %2123
  %2125 = call double @llvm.fmuladd.f64(double %2057, double 0xBFF5555555555555, double %2124)
  %2126 = getelementptr inbounds i8, ptr %27, i64 32
  %2127 = load i32, ptr %2126, align 8, !tbaa !219
  %2128 = sext i32 %2127 to i64
  %2129 = getelementptr inbounds double, ptr %35, i64 %2128
  %2130 = load double, ptr %2129, align 8, !tbaa !29
  %2131 = call double @llvm.fmuladd.f64(double %2130, double 0xC006A09E667F3BCD, double %2125)
  %2132 = getelementptr inbounds double, ptr %2, i64 %2050
  store double %2131, ptr %2132, align 8, !tbaa !29
  %2133 = fmul double %2052, 2.500000e-01
  %2134 = getelementptr inbounds i8, ptr %29, i64 16
  %2135 = load double, ptr %2134, align 8, !tbaa !29
  %2136 = fneg double %2135
  %2137 = call double @llvm.fmuladd.f64(double %2136, double %2062, double %2133)
  %2138 = load double, ptr %2115, align 8, !tbaa !29
  %2139 = call double @llvm.fmuladd.f64(double %2083, double 0x3FFA20BD700C2C3F, double %2057)
  %2140 = fneg double %2138
  %2141 = fmul double %2139, %2140
  %2142 = call double @llvm.fmuladd.f64(double %16, double %2137, double %2141)
  br label %._crit_edge2017.sink.split

._crit_edge2017.sink.split:                       ; preds = %2084, %2114
  %.sink2086 = phi double [ %2142, %2114 ], [ %2113, %2084 ]
  %2143 = getelementptr inbounds double, ptr %2, i64 %2055
  store double %.sink2086, ptr %2143, align 8, !tbaa !29
  br label %._crit_edge2017

._crit_edge2017:                                  ; preds = %._crit_edge2017.sink.split, %2048
  %2144 = getelementptr inbounds i8, ptr %29, i64 16
  %2145 = load double, ptr %2144, align 8, !tbaa !29
  %2146 = fmul double %2145, 0x3FD1111111111111
  %2147 = getelementptr inbounds i8, ptr %29, i64 24
  %2148 = load double, ptr %2147, align 8, !tbaa !29
  %2149 = getelementptr i8, ptr %2061, i64 8
  %2150 = load double, ptr %2149, align 8, !tbaa !29
  %2151 = fmul double %15, -3.000000e-01
  %2152 = fmul double %2151, %2148
  %2153 = fmul double %2152, %2150
  %2154 = call double @llvm.fmuladd.f64(double %2146, double %2057, double %2153)
  %2155 = getelementptr inbounds double, ptr %33, i64 %.pre2022
  %2156 = load double, ptr %2155, align 8, !tbaa !29
  %2157 = fneg double %2156
  %2158 = call double @llvm.fmuladd.f64(double %2157, double %2062, double %2154)
  %2159 = getelementptr inbounds double, ptr %2, i64 %2060
  store double %2158, ptr %2159, align 8, !tbaa !29
  %2160 = fdiv double %15, 7.000000e+00
  %2161 = load double, ptr %2147, align 8, !tbaa !29
  %2162 = fmul double %2161, 6.000000e+00
  %2163 = getelementptr inbounds i8, ptr %29, i64 32
  %2164 = load double, ptr %2163, align 8, !tbaa !29
  %2165 = getelementptr inbounds i8, ptr %37, i64 12
  %2166 = load i32, ptr %2165, align 4, !tbaa !87
  %2167 = sext i32 %2166 to i64
  %2168 = getelementptr double, ptr %1, i64 %2167
  %2169 = getelementptr i8, ptr %2168, i64 8
  %2170 = load double, ptr %2169, align 8, !tbaa !29
  %2171 = fmul double %2164, -4.000000e+00
  %2172 = fmul double %2171, %2170
  %2173 = call double @llvm.fmuladd.f64(double %2162, double %2062, double %2172)
  %2174 = load double, ptr %2155, align 8, !tbaa !29
  %2175 = load double, ptr %2168, align 8, !tbaa !29
  %2176 = fneg double %2174
  %2177 = fmul double %2175, %2176
  %2178 = call double @llvm.fmuladd.f64(double %2160, double %2173, double %2177)
  %2179 = getelementptr inbounds double, ptr %2, i64 %2167
  store double %2178, ptr %2179, align 8, !tbaa !29
  %2180 = getelementptr inbounds i8, ptr %37, i64 16
  %2181 = load i32, ptr %2180, align 8, !tbaa !88
  %2182 = icmp sgt i32 %2181, 4
  br i1 %2182, label %.lr.ph1898.preheader, label %._crit_edge1899

.lr.ph1898.preheader:                             ; preds = %._crit_edge2017
  %wide.trip.count1978 = zext nneg i32 %2181 to i64
  %2183 = add nsw i64 %wide.trip.count1978, -4
  %min.iters.check2292 = icmp ult i64 %2183, 4
  br i1 %min.iters.check2292, label %.lr.ph1898.preheader2526, label %vector.memcheck2271

vector.memcheck2271:                              ; preds = %.lr.ph1898.preheader
  %2184 = shl nsw i64 %2050, 3
  %2185 = getelementptr i8, ptr %2, i64 %2184
  %scevgep2272 = getelementptr i8, ptr %2185, i64 32
  %2186 = shl nuw nsw i64 %wide.trip.count1978, 3
  %2187 = getelementptr i8, ptr %2, i64 %2184
  %scevgep2273 = getelementptr i8, ptr %2187, i64 %2186
  %scevgep2274 = getelementptr i8, ptr %29, i64 32
  %2188 = getelementptr i8, ptr %29, i64 %2186
  %scevgep2275 = getelementptr i8, ptr %2188, i64 8
  %2189 = getelementptr i8, ptr %1, i64 %2184
  %scevgep2276 = getelementptr i8, ptr %2189, i64 24
  %2190 = getelementptr i8, ptr %1, i64 %2184
  %2191 = getelementptr i8, ptr %2190, i64 %2186
  %scevgep2277 = getelementptr i8, ptr %2191, i64 8
  %2192 = shl nsw i64 %.pre2022, 3
  %2193 = getelementptr i8, ptr %33, i64 %2192
  %scevgep2278 = getelementptr i8, ptr %2193, i64 8
  %bound02279 = icmp ult ptr %scevgep2272, %scevgep2275
  %bound12280 = icmp ult ptr %scevgep2274, %scevgep2273
  %found.conflict2281 = and i1 %bound02279, %bound12280
  %bound02282 = icmp ult ptr %scevgep2272, %scevgep2277
  %bound12283 = icmp ult ptr %scevgep2276, %scevgep2273
  %found.conflict2284 = and i1 %bound02282, %bound12283
  %conflict.rdx2285 = or i1 %found.conflict2281, %found.conflict2284
  %bound02286 = icmp ult ptr %scevgep2272, %scevgep2278
  %bound12287 = icmp ult ptr %2155, %scevgep2273
  %found.conflict2288 = and i1 %bound02286, %bound12287
  %conflict.rdx2289 = or i1 %conflict.rdx2285, %found.conflict2288
  br i1 %conflict.rdx2289, label %.lr.ph1898.preheader2526, label %vector.ph2293

vector.ph2293:                                    ; preds = %vector.memcheck2271
  %n.vec2295 = and i64 %2183, -2
  %ind.end2296 = add nsw i64 %n.vec2295, 4
  %broadcast.splatinsert2303 = insertelement <2 x double> poison, double %15, i64 0
  %broadcast.splat2304 = shufflevector <2 x double> %broadcast.splatinsert2303, <2 x double> poison, <2 x i32> zeroinitializer
  %2194 = load double, ptr %2155, align 8, !tbaa !29, !alias.scope !222
  %broadcast.splatinsert2310 = insertelement <2 x double> poison, double %2194, i64 0
  %broadcast.splat2311 = shufflevector <2 x double> %broadcast.splatinsert2310, <2 x double> poison, <2 x i32> zeroinitializer
  %2195 = fneg <2 x double> %broadcast.splat2311
  br label %vector.body2298

vector.body2298:                                  ; preds = %vector.body2298, %vector.ph2293
  %index2299 = phi i64 [ 0, %vector.ph2293 ], [ %index.next2312, %vector.body2298 ]
  %vec.ind2300 = phi <2 x i32> [ <i32 4, i32 5>, %vector.ph2293 ], [ %vec.ind.next2301, %vector.body2298 ]
  %offset.idx2302 = add i64 %index2299, 4
  %2196 = uitofp <2 x i32> %vec.ind2300 to <2 x double>
  %2197 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2196, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %2198 = fdiv <2 x double> %broadcast.splat2304, %2197
  %2199 = getelementptr inbounds double, ptr %29, i64 %offset.idx2302
  %wide.load2305 = load <2 x double>, ptr %2199, align 8, !tbaa !29, !alias.scope !225
  %2200 = fmul <2 x double> %wide.load2305, %2196
  %2201 = add nsw i64 %offset.idx2302, %2050
  %2202 = getelementptr double, ptr %1, i64 %2201
  %2203 = getelementptr i8, ptr %2202, i64 -8
  %wide.load2306 = load <2 x double>, ptr %2203, align 8, !tbaa !29, !alias.scope !227
  %2204 = insertelement <2 x i64> poison, i64 %index2299, i64 0
  %2205 = shufflevector <2 x i64> %2204, <2 x i64> poison, <2 x i32> zeroinitializer
  %2206 = add <2 x i64> %2205, <i64 5, i64 6>
  %2207 = trunc <2 x i64> %2206 to <2 x i32>
  %2208 = uitofp <2 x i32> %2207 to <2 x double>
  %2209 = extractelement <2 x i64> %2206, i64 0
  %2210 = getelementptr inbounds double, ptr %29, i64 %2209
  %wide.load2307 = load <2 x double>, ptr %2210, align 8, !tbaa !29, !alias.scope !225
  %2211 = getelementptr i8, ptr %2202, i64 8
  %wide.load2308 = load <2 x double>, ptr %2211, align 8, !tbaa !29, !alias.scope !227
  %2212 = fneg <2 x double> %wide.load2307
  %2213 = fmul <2 x double> %2208, %2212
  %2214 = fmul <2 x double> %2213, %wide.load2308
  %2215 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2200, <2 x double> %wide.load2306, <2 x double> %2214)
  %wide.load2309 = load <2 x double>, ptr %2202, align 8, !tbaa !29, !alias.scope !227
  %2216 = fmul <2 x double> %wide.load2309, %2195
  %2217 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2198, <2 x double> %2215, <2 x double> %2216)
  %2218 = getelementptr inbounds double, ptr %2, i64 %2201
  store <2 x double> %2217, ptr %2218, align 8, !tbaa !29, !alias.scope !229, !noalias !231
  %index.next2312 = add nuw i64 %index2299, 2
  %vec.ind.next2301 = add <2 x i32> %vec.ind2300, <i32 2, i32 2>
  %2219 = icmp eq i64 %index.next2312, %n.vec2295
  br i1 %2219, label %middle.block2290, label %vector.body2298, !llvm.loop !232

middle.block2290:                                 ; preds = %vector.body2298
  %cmp.n2313 = icmp eq i64 %2183, %n.vec2295
  br i1 %cmp.n2313, label %._crit_edge1899, label %.lr.ph1898.preheader2526

.lr.ph1898.preheader2526:                         ; preds = %middle.block2290, %vector.memcheck2271, %.lr.ph1898.preheader
  %indvars.iv1975.ph = phi i64 [ 4, %vector.memcheck2271 ], [ 4, %.lr.ph1898.preheader ], [ %ind.end2296, %middle.block2290 ]
  br label %.lr.ph1898

.lr.ph1898:                                       ; preds = %.lr.ph1898.preheader2526, %.lr.ph1898
  %indvars.iv1975 = phi i64 [ %indvars.iv.next1976, %.lr.ph1898 ], [ %indvars.iv1975.ph, %.lr.ph1898.preheader2526 ]
  %2220 = trunc nuw nsw i64 %indvars.iv1975 to i32
  %2221 = uitofp nneg i32 %2220 to double
  %2222 = call double @llvm.fmuladd.f64(double %2221, double 2.000000e+00, double 1.000000e+00)
  %2223 = fdiv double %15, %2222
  %2224 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1975
  %2225 = load double, ptr %2224, align 8, !tbaa !29
  %2226 = fmul double %2225, %2221
  %2227 = add nsw i64 %indvars.iv1975, %2050
  %2228 = getelementptr double, ptr %1, i64 %2227
  %2229 = getelementptr i8, ptr %2228, i64 -8
  %2230 = load double, ptr %2229, align 8, !tbaa !29
  %indvars.iv.next1976 = add nuw nsw i64 %indvars.iv1975, 1
  %2231 = trunc nuw nsw i64 %indvars.iv.next1976 to i32
  %2232 = uitofp nneg i32 %2231 to double
  %2233 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1976
  %2234 = load double, ptr %2233, align 8, !tbaa !29
  %2235 = getelementptr i8, ptr %2228, i64 8
  %2236 = load double, ptr %2235, align 8, !tbaa !29
  %2237 = fneg double %2234
  %2238 = fmul double %2232, %2237
  %2239 = fmul double %2238, %2236
  %2240 = call double @llvm.fmuladd.f64(double %2226, double %2230, double %2239)
  %2241 = load double, ptr %2155, align 8, !tbaa !29
  %2242 = load double, ptr %2228, align 8, !tbaa !29
  %2243 = fneg double %2241
  %2244 = fmul double %2242, %2243
  %2245 = call double @llvm.fmuladd.f64(double %2223, double %2240, double %2244)
  %2246 = getelementptr inbounds double, ptr %2, i64 %2227
  store double %2245, ptr %2246, align 8, !tbaa !29
  %exitcond1979.not = icmp eq i64 %indvars.iv.next1976, %wide.trip.count1978
  br i1 %exitcond1979.not, label %._crit_edge1899, label %.lr.ph1898, !llvm.loop !233

._crit_edge1899:                                  ; preds = %.lr.ph1898, %middle.block2290, %._crit_edge2017
  %2247 = sext i32 %2181 to i64
  %2248 = getelementptr inbounds double, ptr %29, i64 %2247
  %2249 = load double, ptr %2248, align 8, !tbaa !29
  %2250 = add nsw i32 %2181, %2049
  %2251 = sext i32 %2250 to i64
  %2252 = getelementptr double, ptr %1, i64 %2251
  %2253 = getelementptr i8, ptr %2252, i64 -8
  %2254 = load double, ptr %2253, align 8, !tbaa !29
  %2255 = sitofp i32 %2181 to double
  %2256 = fadd double %2255, 1.000000e+00
  %2257 = load double, ptr %2252, align 8, !tbaa !29
  %2258 = fneg double %2256
  %2259 = fmul double %.01775, %2258
  %2260 = fmul double %2259, %2257
  %2261 = call double @llvm.fmuladd.f64(double %2249, double %2254, double %2260)
  %2262 = load double, ptr %2155, align 8, !tbaa !29
  %2263 = fneg double %2262
  %2264 = fmul double %2257, %2263
  %2265 = call double @llvm.fmuladd.f64(double %15, double %2261, double %2264)
  %2266 = getelementptr inbounds double, ptr %2, i64 %2251
  store double %2265, ptr %2266, align 8, !tbaa !29
  %2267 = fneg double %15
  %2268 = getelementptr i8, ptr %2071, i64 8
  %2269 = load double, ptr %2268, align 8, !tbaa !29
  %2270 = load double, ptr %2155, align 8, !tbaa !29
  %2271 = load double, ptr %2071, align 8, !tbaa !29
  %2272 = call double @llvm.fmuladd.f64(double %2083, double 0xC003988E1409212E, double %2271)
  %2273 = fneg double %2270
  %2274 = fmul double %2272, %2273
  %2275 = call double @llvm.fmuladd.f64(double %2267, double %2269, double %2274)
  %2276 = getelementptr inbounds double, ptr %2, i64 %2070
  store double %2275, ptr %2276, align 8, !tbaa !29
  %2277 = getelementptr inbounds i8, ptr %37, i64 36
  %2278 = load i32, ptr %2277, align 4, !tbaa !105
  %2279 = icmp sgt i32 %2278, 1
  br i1 %2279, label %.lr.ph1903.preheader, label %._crit_edge1904

.lr.ph1903.preheader:                             ; preds = %._crit_edge1899
  %wide.trip.count1983 = zext nneg i32 %2278 to i64
  %2280 = add nsw i64 %wide.trip.count1983, -1
  %min.iters.check2335 = icmp ult i32 %2278, 5
  br i1 %min.iters.check2335, label %.lr.ph1903.preheader2525, label %vector.memcheck2314

vector.memcheck2314:                              ; preds = %.lr.ph1903.preheader
  %2281 = shl nsw i64 %2070, 3
  %2282 = getelementptr i8, ptr %2, i64 %2281
  %2283 = shl nuw nsw i64 %wide.trip.count1983, 3
  %2284 = add nsw i64 %2281, %2283
  %scevgep2316 = getelementptr i8, ptr %2, i64 %2284
  %scevgep2317 = getelementptr i8, ptr %29, i64 8
  %2285 = getelementptr i8, ptr %29, i64 %2283
  %scevgep2319 = getelementptr i8, ptr %1, i64 %2281
  %2286 = getelementptr i8, ptr %1, i64 %2284
  %2287 = shl nsw i64 %.pre2022, 3
  %2288 = getelementptr i8, ptr %33, i64 %2287
  %bound02322 = icmp ult ptr %2282, %2285
  %bound12323 = icmp ult ptr %scevgep2317, %scevgep2316
  %found.conflict2324 = and i1 %bound02322, %bound12323
  %bound02325 = icmp ult ptr %2282, %2286
  %bound12326 = icmp ult ptr %scevgep2319, %scevgep2316
  %found.conflict2327 = and i1 %bound02325, %bound12326
  %conflict.rdx2328 = or i1 %found.conflict2324, %found.conflict2327
  %bound02329 = icmp ult ptr %2282, %2288
  %bound12330 = icmp ult ptr %2155, %scevgep2316
  %found.conflict2331 = and i1 %bound02329, %bound12330
  %conflict.rdx2332 = or i1 %conflict.rdx2328, %found.conflict2331
  br i1 %conflict.rdx2332, label %.lr.ph1903.preheader2525, label %vector.ph2336

vector.ph2336:                                    ; preds = %vector.memcheck2314
  %n.vec2338 = and i64 %2280, -2
  %ind.end2339 = or i64 %2280, 1
  %broadcast.splatinsert2346 = insertelement <2 x double> poison, double %15, i64 0
  %broadcast.splat2347 = shufflevector <2 x double> %broadcast.splatinsert2346, <2 x double> poison, <2 x i32> zeroinitializer
  %2289 = load double, ptr %2155, align 8, !tbaa !29, !alias.scope !234
  %broadcast.splatinsert2353 = insertelement <2 x double> poison, double %2289, i64 0
  %broadcast.splat2354 = shufflevector <2 x double> %broadcast.splatinsert2353, <2 x double> poison, <2 x i32> zeroinitializer
  %2290 = fneg <2 x double> %broadcast.splat2354
  br label %vector.body2341

vector.body2341:                                  ; preds = %vector.body2341, %vector.ph2336
  %index2342 = phi i64 [ 0, %vector.ph2336 ], [ %index.next2355, %vector.body2341 ]
  %vec.ind2343 = phi <2 x i32> [ <i32 1, i32 2>, %vector.ph2336 ], [ %vec.ind.next2344, %vector.body2341 ]
  %offset.idx2345 = or disjoint i64 %index2342, 1
  %2291 = uitofp <2 x i32> %vec.ind2343 to <2 x double>
  %2292 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2291, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %2293 = fdiv <2 x double> %broadcast.splat2347, %2292
  %2294 = getelementptr inbounds double, ptr %29, i64 %offset.idx2345
  %wide.load2348 = load <2 x double>, ptr %2294, align 8, !tbaa !29, !alias.scope !237
  %2295 = fmul <2 x double> %wide.load2348, %2291
  %2296 = add nsw i64 %offset.idx2345, %2070
  %2297 = getelementptr double, ptr %1, i64 %2296
  %2298 = getelementptr i8, ptr %2297, i64 -8
  %wide.load2349 = load <2 x double>, ptr %2298, align 8, !tbaa !29, !alias.scope !239
  %2299 = insertelement <2 x i64> poison, i64 %index2342, i64 0
  %2300 = shufflevector <2 x i64> %2299, <2 x i64> poison, <2 x i32> zeroinitializer
  %2301 = add <2 x i64> %2300, <i64 2, i64 3>
  %2302 = trunc <2 x i64> %2301 to <2 x i32>
  %2303 = uitofp <2 x i32> %2302 to <2 x double>
  %2304 = extractelement <2 x i64> %2301, i64 0
  %2305 = getelementptr inbounds double, ptr %29, i64 %2304
  %wide.load2350 = load <2 x double>, ptr %2305, align 8, !tbaa !29, !alias.scope !237
  %2306 = getelementptr i8, ptr %2297, i64 8
  %wide.load2351 = load <2 x double>, ptr %2306, align 8, !tbaa !29, !alias.scope !239
  %2307 = fneg <2 x double> %wide.load2350
  %2308 = fmul <2 x double> %2303, %2307
  %2309 = fmul <2 x double> %2308, %wide.load2351
  %2310 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2295, <2 x double> %wide.load2349, <2 x double> %2309)
  %wide.load2352 = load <2 x double>, ptr %2297, align 8, !tbaa !29, !alias.scope !239
  %2311 = fmul <2 x double> %wide.load2352, %2290
  %2312 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2293, <2 x double> %2310, <2 x double> %2311)
  %2313 = getelementptr inbounds double, ptr %2, i64 %2296
  store <2 x double> %2312, ptr %2313, align 8, !tbaa !29, !alias.scope !241, !noalias !243
  %index.next2355 = add nuw i64 %index2342, 2
  %vec.ind.next2344 = add <2 x i32> %vec.ind2343, <i32 2, i32 2>
  %2314 = icmp eq i64 %index.next2355, %n.vec2338
  br i1 %2314, label %middle.block2333, label %vector.body2341, !llvm.loop !244

middle.block2333:                                 ; preds = %vector.body2341
  %cmp.n2356 = icmp eq i64 %2280, %n.vec2338
  br i1 %cmp.n2356, label %._crit_edge1904, label %.lr.ph1903.preheader2525

.lr.ph1903.preheader2525:                         ; preds = %middle.block2333, %vector.memcheck2314, %.lr.ph1903.preheader
  %indvars.iv1980.ph = phi i64 [ 1, %vector.memcheck2314 ], [ 1, %.lr.ph1903.preheader ], [ %ind.end2339, %middle.block2333 ]
  br label %.lr.ph1903

.lr.ph1903:                                       ; preds = %.lr.ph1903.preheader2525, %.lr.ph1903
  %indvars.iv1980 = phi i64 [ %indvars.iv.next1981, %.lr.ph1903 ], [ %indvars.iv1980.ph, %.lr.ph1903.preheader2525 ]
  %2315 = trunc nuw nsw i64 %indvars.iv1980 to i32
  %2316 = uitofp nneg i32 %2315 to double
  %2317 = call double @llvm.fmuladd.f64(double %2316, double 2.000000e+00, double 1.000000e+00)
  %2318 = fdiv double %15, %2317
  %2319 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1980
  %2320 = load double, ptr %2319, align 8, !tbaa !29
  %2321 = fmul double %2320, %2316
  %2322 = add nsw i64 %indvars.iv1980, %2070
  %2323 = getelementptr double, ptr %1, i64 %2322
  %2324 = getelementptr i8, ptr %2323, i64 -8
  %2325 = load double, ptr %2324, align 8, !tbaa !29
  %indvars.iv.next1981 = add nuw nsw i64 %indvars.iv1980, 1
  %2326 = trunc nuw nsw i64 %indvars.iv.next1981 to i32
  %2327 = uitofp nneg i32 %2326 to double
  %2328 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1981
  %2329 = load double, ptr %2328, align 8, !tbaa !29
  %2330 = getelementptr i8, ptr %2323, i64 8
  %2331 = load double, ptr %2330, align 8, !tbaa !29
  %2332 = fneg double %2329
  %2333 = fmul double %2327, %2332
  %2334 = fmul double %2333, %2331
  %2335 = call double @llvm.fmuladd.f64(double %2321, double %2325, double %2334)
  %2336 = load double, ptr %2155, align 8, !tbaa !29
  %2337 = load double, ptr %2323, align 8, !tbaa !29
  %2338 = fneg double %2336
  %2339 = fmul double %2337, %2338
  %2340 = call double @llvm.fmuladd.f64(double %2318, double %2335, double %2339)
  %2341 = getelementptr inbounds double, ptr %2, i64 %2322
  store double %2340, ptr %2341, align 8, !tbaa !29
  %exitcond1984.not = icmp eq i64 %indvars.iv.next1981, %wide.trip.count1983
  br i1 %exitcond1984.not, label %._crit_edge1904, label %.lr.ph1903, !llvm.loop !245

._crit_edge1904:                                  ; preds = %.lr.ph1903, %middle.block2333, %._crit_edge1899
  %2342 = sext i32 %2278 to i64
  %2343 = getelementptr inbounds double, ptr %29, i64 %2342
  %2344 = load double, ptr %2343, align 8, !tbaa !29
  %2345 = add nsw i32 %2278, %2069
  %2346 = sext i32 %2345 to i64
  %2347 = getelementptr double, ptr %1, i64 %2346
  %2348 = getelementptr i8, ptr %2347, i64 -8
  %2349 = load double, ptr %2348, align 8, !tbaa !29
  %2350 = sitofp i32 %2278 to double
  %2351 = fadd double %2350, 1.000000e+00
  %2352 = load double, ptr %2347, align 8, !tbaa !29
  %2353 = fneg double %2351
  %2354 = fmul double %.01775, %2353
  %2355 = fmul double %2354, %2352
  %2356 = call double @llvm.fmuladd.f64(double %2344, double %2349, double %2355)
  %2357 = load double, ptr %2155, align 8, !tbaa !29
  %2358 = fneg double %2357
  %2359 = fmul double %2352, %2358
  %2360 = call double @llvm.fmuladd.f64(double %15, double %2356, double %2359)
  %2361 = getelementptr inbounds double, ptr %2, i64 %2346
  store double %2360, ptr %2361, align 8, !tbaa !29
  switch i32 %1997, label %2367 [
    i32 1, label %.sink.split2081
    i32 0, label %2362
  ]

2362:                                             ; preds = %._crit_edge1904
  br label %.sink.split2081

.sink.split2081:                                  ; preds = %._crit_edge1904, %2362
  %.sink2520 = phi i64 [ 32, %2362 ], [ 36, %._crit_edge1904 ]
  %.sink2519 = phi i64 [ 188, %2362 ], [ 184, %._crit_edge1904 ]
  %2363 = getelementptr inbounds i8, ptr %27, i64 %.sink2520
  %2364 = getelementptr inbounds i8, ptr %37, i64 %.sink2519
  %.pn2088.in = load i32, ptr %2363, align 4, !tbaa !50
  %.pn2088 = sext i32 %.pn2088.in to i64
  %.sink2082.in = getelementptr inbounds double, ptr %35, i64 %.pn2088
  %.sink2082 = load double, ptr %.sink2082.in, align 8, !tbaa !29
  %.sink2085 = load i32, ptr %2364, align 4, !tbaa !50
  %2365 = sext i32 %.sink2085 to i64
  %2366 = getelementptr inbounds double, ptr %2, i64 %2365
  store double %.sink2082, ptr %2366, align 8, !tbaa !29
  br label %2367

2367:                                             ; preds = %.sink.split2081, %._crit_edge1904, %1979, %1975
  %2368 = getelementptr inbounds i8, ptr %25, i64 8
  %2369 = load i16, ptr %2368, align 8, !tbaa !246
  %2370 = icmp eq i16 %2369, 1
  br i1 %2370, label %2371, label %2961

2371:                                             ; preds = %2367
  %2372 = getelementptr inbounds i8, ptr %25, i64 2032
  %2373 = load i32, ptr %2372, align 8, !tbaa !247
  %2374 = icmp eq i32 %18, %2373
  br i1 %2374, label %2375, label %2961

2375:                                             ; preds = %2371
  %2376 = getelementptr inbounds i8, ptr %27, i64 368
  %2377 = load ptr, ptr %2376, align 8, !tbaa !48
  %2378 = getelementptr inbounds i8, ptr %27, i64 340
  %2379 = load i32, ptr %2378, align 4, !tbaa !49
  %2380 = sext i32 %2379 to i64
  %2381 = getelementptr inbounds i32, ptr %2377, i64 %2380
  %2382 = load i32, ptr %2381, align 4, !tbaa !50
  %2383 = icmp eq i32 %2382, 0
  br i1 %2383, label %2384, label %2669

2384:                                             ; preds = %2375
  %2385 = getelementptr inbounds i8, ptr %27, i64 336
  %2386 = load i32, ptr %2385, align 8, !tbaa !62
  %2387 = sext i32 %2386 to i64
  %2388 = getelementptr inbounds i32, ptr %2377, i64 %2387
  %2389 = load i32, ptr %2388, align 4, !tbaa !50
  %2390 = icmp eq i32 %2389, 1
  br i1 %2390, label %2391, label %2669

2391:                                             ; preds = %2384
  %2392 = load i32, ptr %37, align 8, !tbaa !51
  %2393 = sext i32 %2392 to i64
  %2394 = getelementptr inbounds double, ptr %1, i64 %2393
  %2395 = load double, ptr %2394, align 8, !tbaa !29
  %2396 = getelementptr inbounds i8, ptr %37, i64 4
  %2397 = load i32, ptr %2396, align 4, !tbaa !53
  %2398 = sext i32 %2397 to i64
  %2399 = getelementptr inbounds double, ptr %1, i64 %2398
  %2400 = load double, ptr %2399, align 8, !tbaa !29
  %2401 = getelementptr inbounds i8, ptr %37, i64 8
  %2402 = load i32, ptr %2401, align 8, !tbaa !86
  %2403 = sext i32 %2402 to i64
  %2404 = getelementptr inbounds double, ptr %1, i64 %2403
  %2405 = load double, ptr %2404, align 8, !tbaa !29
  %2406 = fmul double %2405, 0x3FD2492492492492
  %2407 = call double @llvm.fmuladd.f64(double %2395, double 1.000000e-01, double %2406)
  %2408 = getelementptr i8, ptr %2394, i64 32
  %2409 = load double, ptr %2408, align 8, !tbaa !29
  %2410 = call double @llvm.fmuladd.f64(double %2409, double 0x3FA5F15F15F15F16, double %2407)
  %2411 = getelementptr inbounds i8, ptr %37, i64 20
  %2412 = load i32, ptr %2411, align 4, !tbaa !84
  %2413 = sext i32 %2412 to i64
  %2414 = getelementptr inbounds double, ptr %1, i64 %2413
  %2415 = load double, ptr %2414, align 8, !tbaa !29
  %2416 = call double @llvm.fmuladd.f64(double %2415, double -6.000000e-01, double %2410)
  %2417 = getelementptr inbounds i8, ptr %37, i64 28
  %2418 = load i32, ptr %2417, align 4, !tbaa !85
  %2419 = sext i32 %2418 to i64
  %2420 = getelementptr inbounds double, ptr %1, i64 %2419
  %2421 = load double, ptr %2420, align 8, !tbaa !29
  %2422 = call double @llvm.fmuladd.f64(double %2421, double 0x3FEB6DB6DB6DB6DB, double %2416)
  %2423 = getelementptr i8, ptr %2414, i64 32
  %2424 = load double, ptr %2423, align 8, !tbaa !29
  %2425 = call double @llvm.fmuladd.f64(double %2424, double 0xBFA5F15F15F15F16, double %2422)
  %2426 = fmul double %2425, 0xBFDA20BD700C2C3F
  %2427 = getelementptr inbounds i8, ptr %23, i64 276
  %2428 = load i32, ptr %2427, align 4, !tbaa !81
  %2429 = sext i32 %2428 to i64
  %2430 = getelementptr inbounds double, ptr %33, i64 %2429
  %2431 = load double, ptr %2430, align 8, !tbaa !29
  %2432 = call double @llvm.fmuladd.f64(double %2426, double 0x4003988E1409212E, double %2395)
  %2433 = fneg double %2431
  %2434 = fmul double %2432, %2433
  %2435 = call double @llvm.fmuladd.f64(double %2400, double 0xBFF5555555555555, double %2434)
  %2436 = getelementptr inbounds i8, ptr %37, i64 196
  %2437 = load i32, ptr %2436, align 4, !tbaa !248
  %2438 = sext i32 %2437 to i64
  %2439 = getelementptr inbounds double, ptr %1, i64 %2438
  %2440 = load double, ptr %2439, align 8, !tbaa !29
  %2441 = call double @llvm.fmuladd.f64(double %2440, double 0x4003988E1409212E, double %2435)
  %2442 = getelementptr inbounds double, ptr %2, i64 %2393
  store double %2441, ptr %2442, align 8, !tbaa !29
  %2443 = fmul double %2395, 2.500000e-01
  %2444 = getelementptr inbounds i8, ptr %29, i64 16
  %2445 = load double, ptr %2444, align 8, !tbaa !29
  %2446 = fneg double %2445
  %2447 = call double @llvm.fmuladd.f64(double %2446, double %2405, double %2443)
  %2448 = load double, ptr %2430, align 8, !tbaa !29
  %2449 = fneg double %2448
  %2450 = fmul double %2400, %2449
  %2451 = call double @llvm.fmuladd.f64(double %16, double %2447, double %2450)
  %2452 = getelementptr inbounds double, ptr %2, i64 %2398
  store double %2451, ptr %2452, align 8, !tbaa !29
  %2453 = load double, ptr %2444, align 8, !tbaa !29
  %2454 = fmul double %2453, 0x3FD1111111111111
  %2455 = getelementptr inbounds i8, ptr %29, i64 24
  %2456 = load double, ptr %2455, align 8, !tbaa !29
  %2457 = getelementptr i8, ptr %2404, i64 8
  %2458 = load double, ptr %2457, align 8, !tbaa !29
  %2459 = fmul double %15, -3.000000e-01
  %2460 = fmul double %2459, %2456
  %2461 = fmul double %2460, %2458
  %2462 = call double @llvm.fmuladd.f64(double %2454, double %2400, double %2461)
  %2463 = load double, ptr %2430, align 8, !tbaa !29
  %2464 = fneg double %2463
  %2465 = call double @llvm.fmuladd.f64(double %2464, double %2405, double %2462)
  %2466 = getelementptr inbounds double, ptr %2, i64 %2403
  store double %2465, ptr %2466, align 8, !tbaa !29
  %2467 = fdiv double %15, 7.000000e+00
  %2468 = load double, ptr %2455, align 8, !tbaa !29
  %2469 = fmul double %2468, 6.000000e+00
  %2470 = getelementptr inbounds i8, ptr %29, i64 32
  %2471 = load double, ptr %2470, align 8, !tbaa !29
  %2472 = getelementptr inbounds i8, ptr %37, i64 12
  %2473 = load i32, ptr %2472, align 4, !tbaa !87
  %2474 = sext i32 %2473 to i64
  %2475 = getelementptr double, ptr %1, i64 %2474
  %2476 = getelementptr i8, ptr %2475, i64 8
  %2477 = load double, ptr %2476, align 8, !tbaa !29
  %2478 = fmul double %2471, -4.000000e+00
  %2479 = fmul double %2478, %2477
  %2480 = call double @llvm.fmuladd.f64(double %2469, double %2405, double %2479)
  %2481 = load double, ptr %2430, align 8, !tbaa !29
  %2482 = load double, ptr %2475, align 8, !tbaa !29
  %2483 = fneg double %2481
  %2484 = fmul double %2482, %2483
  %2485 = call double @llvm.fmuladd.f64(double %2467, double %2480, double %2484)
  %2486 = getelementptr inbounds double, ptr %2, i64 %2474
  store double %2485, ptr %2486, align 8, !tbaa !29
  %2487 = getelementptr inbounds i8, ptr %37, i64 16
  %2488 = load i32, ptr %2487, align 8, !tbaa !88
  %2489 = icmp sgt i32 %2488, 4
  br i1 %2489, label %.lr.ph1908.preheader, label %._crit_edge1909

.lr.ph1908.preheader:                             ; preds = %2391
  %wide.trip.count1988 = zext nneg i32 %2488 to i64
  %2490 = add nsw i64 %wide.trip.count1988, -4
  %min.iters.check2378 = icmp ult i64 %2490, 4
  br i1 %min.iters.check2378, label %.lr.ph1908.preheader2524, label %vector.memcheck2357

vector.memcheck2357:                              ; preds = %.lr.ph1908.preheader
  %2491 = shl nsw i64 %2393, 3
  %2492 = getelementptr i8, ptr %2, i64 %2491
  %scevgep2358 = getelementptr i8, ptr %2492, i64 32
  %2493 = shl nuw nsw i64 %wide.trip.count1988, 3
  %2494 = getelementptr i8, ptr %2, i64 %2491
  %scevgep2359 = getelementptr i8, ptr %2494, i64 %2493
  %scevgep2360 = getelementptr i8, ptr %29, i64 32
  %2495 = getelementptr i8, ptr %29, i64 %2493
  %scevgep2361 = getelementptr i8, ptr %2495, i64 8
  %2496 = getelementptr i8, ptr %1, i64 %2491
  %scevgep2362 = getelementptr i8, ptr %2496, i64 24
  %2497 = getelementptr i8, ptr %1, i64 %2491
  %2498 = getelementptr i8, ptr %2497, i64 %2493
  %scevgep2363 = getelementptr i8, ptr %2498, i64 8
  %2499 = shl nsw i64 %2429, 3
  %2500 = getelementptr i8, ptr %33, i64 %2499
  %scevgep2364 = getelementptr i8, ptr %2500, i64 8
  %bound02365 = icmp ult ptr %scevgep2358, %scevgep2361
  %bound12366 = icmp ult ptr %scevgep2360, %scevgep2359
  %found.conflict2367 = and i1 %bound02365, %bound12366
  %bound02368 = icmp ult ptr %scevgep2358, %scevgep2363
  %bound12369 = icmp ult ptr %scevgep2362, %scevgep2359
  %found.conflict2370 = and i1 %bound02368, %bound12369
  %conflict.rdx2371 = or i1 %found.conflict2367, %found.conflict2370
  %bound02372 = icmp ult ptr %scevgep2358, %scevgep2364
  %bound12373 = icmp ult ptr %2430, %scevgep2359
  %found.conflict2374 = and i1 %bound02372, %bound12373
  %conflict.rdx2375 = or i1 %conflict.rdx2371, %found.conflict2374
  br i1 %conflict.rdx2375, label %.lr.ph1908.preheader2524, label %vector.ph2379

vector.ph2379:                                    ; preds = %vector.memcheck2357
  %n.vec2381 = and i64 %2490, -2
  %ind.end2382 = add nsw i64 %n.vec2381, 4
  %broadcast.splatinsert2389 = insertelement <2 x double> poison, double %15, i64 0
  %broadcast.splat2390 = shufflevector <2 x double> %broadcast.splatinsert2389, <2 x double> poison, <2 x i32> zeroinitializer
  %2501 = load double, ptr %2430, align 8, !tbaa !29, !alias.scope !249
  %broadcast.splatinsert2396 = insertelement <2 x double> poison, double %2501, i64 0
  %broadcast.splat2397 = shufflevector <2 x double> %broadcast.splatinsert2396, <2 x double> poison, <2 x i32> zeroinitializer
  %2502 = fneg <2 x double> %broadcast.splat2397
  br label %vector.body2384

vector.body2384:                                  ; preds = %vector.body2384, %vector.ph2379
  %index2385 = phi i64 [ 0, %vector.ph2379 ], [ %index.next2398, %vector.body2384 ]
  %vec.ind2386 = phi <2 x i32> [ <i32 4, i32 5>, %vector.ph2379 ], [ %vec.ind.next2387, %vector.body2384 ]
  %offset.idx2388 = add i64 %index2385, 4
  %2503 = uitofp <2 x i32> %vec.ind2386 to <2 x double>
  %2504 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2503, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %2505 = fdiv <2 x double> %broadcast.splat2390, %2504
  %2506 = getelementptr inbounds double, ptr %29, i64 %offset.idx2388
  %wide.load2391 = load <2 x double>, ptr %2506, align 8, !tbaa !29, !alias.scope !252
  %2507 = fmul <2 x double> %wide.load2391, %2503
  %2508 = add nsw i64 %offset.idx2388, %2393
  %2509 = getelementptr double, ptr %1, i64 %2508
  %2510 = getelementptr i8, ptr %2509, i64 -8
  %wide.load2392 = load <2 x double>, ptr %2510, align 8, !tbaa !29, !alias.scope !254
  %2511 = insertelement <2 x i64> poison, i64 %index2385, i64 0
  %2512 = shufflevector <2 x i64> %2511, <2 x i64> poison, <2 x i32> zeroinitializer
  %2513 = add <2 x i64> %2512, <i64 5, i64 6>
  %2514 = trunc <2 x i64> %2513 to <2 x i32>
  %2515 = uitofp <2 x i32> %2514 to <2 x double>
  %2516 = extractelement <2 x i64> %2513, i64 0
  %2517 = getelementptr inbounds double, ptr %29, i64 %2516
  %wide.load2393 = load <2 x double>, ptr %2517, align 8, !tbaa !29, !alias.scope !252
  %2518 = getelementptr i8, ptr %2509, i64 8
  %wide.load2394 = load <2 x double>, ptr %2518, align 8, !tbaa !29, !alias.scope !254
  %2519 = fneg <2 x double> %wide.load2393
  %2520 = fmul <2 x double> %2515, %2519
  %2521 = fmul <2 x double> %2520, %wide.load2394
  %2522 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2507, <2 x double> %wide.load2392, <2 x double> %2521)
  %wide.load2395 = load <2 x double>, ptr %2509, align 8, !tbaa !29, !alias.scope !254
  %2523 = fmul <2 x double> %wide.load2395, %2502
  %2524 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2505, <2 x double> %2522, <2 x double> %2523)
  %2525 = getelementptr inbounds double, ptr %2, i64 %2508
  store <2 x double> %2524, ptr %2525, align 8, !tbaa !29, !alias.scope !256, !noalias !258
  %index.next2398 = add nuw i64 %index2385, 2
  %vec.ind.next2387 = add <2 x i32> %vec.ind2386, <i32 2, i32 2>
  %2526 = icmp eq i64 %index.next2398, %n.vec2381
  br i1 %2526, label %middle.block2376, label %vector.body2384, !llvm.loop !259

middle.block2376:                                 ; preds = %vector.body2384
  %cmp.n2399 = icmp eq i64 %2490, %n.vec2381
  br i1 %cmp.n2399, label %._crit_edge1909, label %.lr.ph1908.preheader2524

.lr.ph1908.preheader2524:                         ; preds = %middle.block2376, %vector.memcheck2357, %.lr.ph1908.preheader
  %indvars.iv1985.ph = phi i64 [ 4, %vector.memcheck2357 ], [ 4, %.lr.ph1908.preheader ], [ %ind.end2382, %middle.block2376 ]
  br label %.lr.ph1908

.lr.ph1908:                                       ; preds = %.lr.ph1908.preheader2524, %.lr.ph1908
  %indvars.iv1985 = phi i64 [ %indvars.iv.next1986, %.lr.ph1908 ], [ %indvars.iv1985.ph, %.lr.ph1908.preheader2524 ]
  %2527 = trunc nuw nsw i64 %indvars.iv1985 to i32
  %2528 = uitofp nneg i32 %2527 to double
  %2529 = call double @llvm.fmuladd.f64(double %2528, double 2.000000e+00, double 1.000000e+00)
  %2530 = fdiv double %15, %2529
  %2531 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1985
  %2532 = load double, ptr %2531, align 8, !tbaa !29
  %2533 = fmul double %2532, %2528
  %2534 = add nsw i64 %indvars.iv1985, %2393
  %2535 = getelementptr double, ptr %1, i64 %2534
  %2536 = getelementptr i8, ptr %2535, i64 -8
  %2537 = load double, ptr %2536, align 8, !tbaa !29
  %indvars.iv.next1986 = add nuw nsw i64 %indvars.iv1985, 1
  %2538 = trunc nuw nsw i64 %indvars.iv.next1986 to i32
  %2539 = uitofp nneg i32 %2538 to double
  %2540 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1986
  %2541 = load double, ptr %2540, align 8, !tbaa !29
  %2542 = getelementptr i8, ptr %2535, i64 8
  %2543 = load double, ptr %2542, align 8, !tbaa !29
  %2544 = fneg double %2541
  %2545 = fmul double %2539, %2544
  %2546 = fmul double %2545, %2543
  %2547 = call double @llvm.fmuladd.f64(double %2533, double %2537, double %2546)
  %2548 = load double, ptr %2430, align 8, !tbaa !29
  %2549 = load double, ptr %2535, align 8, !tbaa !29
  %2550 = fneg double %2548
  %2551 = fmul double %2549, %2550
  %2552 = call double @llvm.fmuladd.f64(double %2530, double %2547, double %2551)
  %2553 = getelementptr inbounds double, ptr %2, i64 %2534
  store double %2552, ptr %2553, align 8, !tbaa !29
  %exitcond1989.not = icmp eq i64 %indvars.iv.next1986, %wide.trip.count1988
  br i1 %exitcond1989.not, label %._crit_edge1909, label %.lr.ph1908, !llvm.loop !260

._crit_edge1909:                                  ; preds = %.lr.ph1908, %middle.block2376, %2391
  %2554 = sext i32 %2488 to i64
  %2555 = getelementptr inbounds double, ptr %29, i64 %2554
  %2556 = load double, ptr %2555, align 8, !tbaa !29
  %2557 = add nsw i32 %2488, %2392
  %2558 = sext i32 %2557 to i64
  %2559 = getelementptr double, ptr %1, i64 %2558
  %2560 = getelementptr i8, ptr %2559, i64 -8
  %2561 = load double, ptr %2560, align 8, !tbaa !29
  %2562 = sitofp i32 %2488 to double
  %2563 = fadd double %2562, 1.000000e+00
  %2564 = load double, ptr %2559, align 8, !tbaa !29
  %2565 = fneg double %2563
  %2566 = fmul double %.01775, %2565
  %2567 = fmul double %2566, %2564
  %2568 = call double @llvm.fmuladd.f64(double %2556, double %2561, double %2567)
  %2569 = load double, ptr %2430, align 8, !tbaa !29
  %2570 = fneg double %2569
  %2571 = fmul double %2564, %2570
  %2572 = call double @llvm.fmuladd.f64(double %15, double %2568, double %2571)
  %2573 = getelementptr inbounds double, ptr %2, i64 %2558
  store double %2572, ptr %2573, align 8, !tbaa !29
  %2574 = fneg double %15
  %2575 = getelementptr i8, ptr %2414, i64 8
  %2576 = load double, ptr %2575, align 8, !tbaa !29
  %2577 = load double, ptr %2430, align 8, !tbaa !29
  %2578 = load double, ptr %2414, align 8, !tbaa !29
  %2579 = call double @llvm.fmuladd.f64(double %2426, double 0xC003988E1409212E, double %2578)
  %2580 = fneg double %2577
  %2581 = fmul double %2579, %2580
  %2582 = call double @llvm.fmuladd.f64(double %2574, double %2576, double %2581)
  %2583 = getelementptr inbounds double, ptr %2, i64 %2413
  store double %2582, ptr %2583, align 8, !tbaa !29
  %2584 = getelementptr inbounds i8, ptr %37, i64 36
  %2585 = load i32, ptr %2584, align 4, !tbaa !105
  %2586 = icmp sgt i32 %2585, 1
  br i1 %2586, label %.lr.ph1913.preheader, label %._crit_edge1914

.lr.ph1913.preheader:                             ; preds = %._crit_edge1909
  %wide.trip.count1993 = zext nneg i32 %2585 to i64
  %2587 = add nsw i64 %wide.trip.count1993, -1
  %min.iters.check2421 = icmp ult i32 %2585, 5
  br i1 %min.iters.check2421, label %.lr.ph1913.preheader2523, label %vector.memcheck2400

vector.memcheck2400:                              ; preds = %.lr.ph1913.preheader
  %2588 = shl nsw i64 %2413, 3
  %2589 = getelementptr i8, ptr %2, i64 %2588
  %2590 = shl nuw nsw i64 %wide.trip.count1993, 3
  %2591 = add nsw i64 %2588, %2590
  %scevgep2402 = getelementptr i8, ptr %2, i64 %2591
  %scevgep2403 = getelementptr i8, ptr %29, i64 8
  %2592 = getelementptr i8, ptr %29, i64 %2590
  %scevgep2405 = getelementptr i8, ptr %1, i64 %2588
  %2593 = getelementptr i8, ptr %1, i64 %2591
  %2594 = shl nsw i64 %2429, 3
  %2595 = getelementptr i8, ptr %33, i64 %2594
  %bound02408 = icmp ult ptr %2589, %2592
  %bound12409 = icmp ult ptr %scevgep2403, %scevgep2402
  %found.conflict2410 = and i1 %bound02408, %bound12409
  %bound02411 = icmp ult ptr %2589, %2593
  %bound12412 = icmp ult ptr %scevgep2405, %scevgep2402
  %found.conflict2413 = and i1 %bound02411, %bound12412
  %conflict.rdx2414 = or i1 %found.conflict2410, %found.conflict2413
  %bound02415 = icmp ult ptr %2589, %2595
  %bound12416 = icmp ult ptr %2430, %scevgep2402
  %found.conflict2417 = and i1 %bound02415, %bound12416
  %conflict.rdx2418 = or i1 %conflict.rdx2414, %found.conflict2417
  br i1 %conflict.rdx2418, label %.lr.ph1913.preheader2523, label %vector.ph2422

vector.ph2422:                                    ; preds = %vector.memcheck2400
  %n.vec2424 = and i64 %2587, -2
  %ind.end2425 = or i64 %2587, 1
  %broadcast.splatinsert2432 = insertelement <2 x double> poison, double %15, i64 0
  %broadcast.splat2433 = shufflevector <2 x double> %broadcast.splatinsert2432, <2 x double> poison, <2 x i32> zeroinitializer
  %2596 = load double, ptr %2430, align 8, !tbaa !29, !alias.scope !261
  %broadcast.splatinsert2439 = insertelement <2 x double> poison, double %2596, i64 0
  %broadcast.splat2440 = shufflevector <2 x double> %broadcast.splatinsert2439, <2 x double> poison, <2 x i32> zeroinitializer
  %2597 = fneg <2 x double> %broadcast.splat2440
  br label %vector.body2427

vector.body2427:                                  ; preds = %vector.body2427, %vector.ph2422
  %index2428 = phi i64 [ 0, %vector.ph2422 ], [ %index.next2441, %vector.body2427 ]
  %vec.ind2429 = phi <2 x i32> [ <i32 1, i32 2>, %vector.ph2422 ], [ %vec.ind.next2430, %vector.body2427 ]
  %offset.idx2431 = or disjoint i64 %index2428, 1
  %2598 = uitofp <2 x i32> %vec.ind2429 to <2 x double>
  %2599 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2598, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %2600 = fdiv <2 x double> %broadcast.splat2433, %2599
  %2601 = getelementptr inbounds double, ptr %29, i64 %offset.idx2431
  %wide.load2434 = load <2 x double>, ptr %2601, align 8, !tbaa !29, !alias.scope !264
  %2602 = fmul <2 x double> %wide.load2434, %2598
  %2603 = add nsw i64 %offset.idx2431, %2413
  %2604 = getelementptr double, ptr %1, i64 %2603
  %2605 = getelementptr i8, ptr %2604, i64 -8
  %wide.load2435 = load <2 x double>, ptr %2605, align 8, !tbaa !29, !alias.scope !266
  %2606 = insertelement <2 x i64> poison, i64 %index2428, i64 0
  %2607 = shufflevector <2 x i64> %2606, <2 x i64> poison, <2 x i32> zeroinitializer
  %2608 = add <2 x i64> %2607, <i64 2, i64 3>
  %2609 = trunc <2 x i64> %2608 to <2 x i32>
  %2610 = uitofp <2 x i32> %2609 to <2 x double>
  %2611 = extractelement <2 x i64> %2608, i64 0
  %2612 = getelementptr inbounds double, ptr %29, i64 %2611
  %wide.load2436 = load <2 x double>, ptr %2612, align 8, !tbaa !29, !alias.scope !264
  %2613 = getelementptr i8, ptr %2604, i64 8
  %wide.load2437 = load <2 x double>, ptr %2613, align 8, !tbaa !29, !alias.scope !266
  %2614 = fneg <2 x double> %wide.load2436
  %2615 = fmul <2 x double> %2610, %2614
  %2616 = fmul <2 x double> %2615, %wide.load2437
  %2617 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2602, <2 x double> %wide.load2435, <2 x double> %2616)
  %wide.load2438 = load <2 x double>, ptr %2604, align 8, !tbaa !29, !alias.scope !266
  %2618 = fmul <2 x double> %wide.load2438, %2597
  %2619 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2600, <2 x double> %2617, <2 x double> %2618)
  %2620 = getelementptr inbounds double, ptr %2, i64 %2603
  store <2 x double> %2619, ptr %2620, align 8, !tbaa !29, !alias.scope !268, !noalias !270
  %index.next2441 = add nuw i64 %index2428, 2
  %vec.ind.next2430 = add <2 x i32> %vec.ind2429, <i32 2, i32 2>
  %2621 = icmp eq i64 %index.next2441, %n.vec2424
  br i1 %2621, label %middle.block2419, label %vector.body2427, !llvm.loop !271

middle.block2419:                                 ; preds = %vector.body2427
  %cmp.n2442 = icmp eq i64 %2587, %n.vec2424
  br i1 %cmp.n2442, label %._crit_edge1914, label %.lr.ph1913.preheader2523

.lr.ph1913.preheader2523:                         ; preds = %middle.block2419, %vector.memcheck2400, %.lr.ph1913.preheader
  %indvars.iv1990.ph = phi i64 [ 1, %vector.memcheck2400 ], [ 1, %.lr.ph1913.preheader ], [ %ind.end2425, %middle.block2419 ]
  br label %.lr.ph1913

.lr.ph1913:                                       ; preds = %.lr.ph1913.preheader2523, %.lr.ph1913
  %indvars.iv1990 = phi i64 [ %indvars.iv.next1991, %.lr.ph1913 ], [ %indvars.iv1990.ph, %.lr.ph1913.preheader2523 ]
  %2622 = trunc nuw nsw i64 %indvars.iv1990 to i32
  %2623 = uitofp nneg i32 %2622 to double
  %2624 = call double @llvm.fmuladd.f64(double %2623, double 2.000000e+00, double 1.000000e+00)
  %2625 = fdiv double %15, %2624
  %2626 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1990
  %2627 = load double, ptr %2626, align 8, !tbaa !29
  %2628 = fmul double %2627, %2623
  %2629 = add nsw i64 %indvars.iv1990, %2413
  %2630 = getelementptr double, ptr %1, i64 %2629
  %2631 = getelementptr i8, ptr %2630, i64 -8
  %2632 = load double, ptr %2631, align 8, !tbaa !29
  %indvars.iv.next1991 = add nuw nsw i64 %indvars.iv1990, 1
  %2633 = trunc nuw nsw i64 %indvars.iv.next1991 to i32
  %2634 = uitofp nneg i32 %2633 to double
  %2635 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1991
  %2636 = load double, ptr %2635, align 8, !tbaa !29
  %2637 = getelementptr i8, ptr %2630, i64 8
  %2638 = load double, ptr %2637, align 8, !tbaa !29
  %2639 = fneg double %2636
  %2640 = fmul double %2634, %2639
  %2641 = fmul double %2640, %2638
  %2642 = call double @llvm.fmuladd.f64(double %2628, double %2632, double %2641)
  %2643 = load double, ptr %2430, align 8, !tbaa !29
  %2644 = load double, ptr %2630, align 8, !tbaa !29
  %2645 = fneg double %2643
  %2646 = fmul double %2644, %2645
  %2647 = call double @llvm.fmuladd.f64(double %2625, double %2642, double %2646)
  %2648 = getelementptr inbounds double, ptr %2, i64 %2629
  store double %2647, ptr %2648, align 8, !tbaa !29
  %exitcond1994.not = icmp eq i64 %indvars.iv.next1991, %wide.trip.count1993
  br i1 %exitcond1994.not, label %._crit_edge1914, label %.lr.ph1913, !llvm.loop !272

._crit_edge1914:                                  ; preds = %.lr.ph1913, %middle.block2419, %._crit_edge1909
  %2649 = sext i32 %2585 to i64
  %2650 = getelementptr inbounds double, ptr %29, i64 %2649
  %2651 = load double, ptr %2650, align 8, !tbaa !29
  %2652 = add nsw i32 %2585, %2412
  %2653 = sext i32 %2652 to i64
  %2654 = getelementptr double, ptr %1, i64 %2653
  %2655 = getelementptr i8, ptr %2654, i64 -8
  %2656 = load double, ptr %2655, align 8, !tbaa !29
  %2657 = sitofp i32 %2585 to double
  %2658 = fadd double %2657, 1.000000e+00
  %2659 = load double, ptr %2654, align 8, !tbaa !29
  %2660 = fneg double %2658
  %2661 = fmul double %.01775, %2660
  %2662 = fmul double %2661, %2659
  %2663 = call double @llvm.fmuladd.f64(double %2651, double %2656, double %2662)
  %2664 = load double, ptr %2430, align 8, !tbaa !29
  %2665 = fneg double %2664
  %2666 = fmul double %2659, %2665
  %2667 = call double @llvm.fmuladd.f64(double %15, double %2663, double %2666)
  %2668 = getelementptr inbounds double, ptr %2, i64 %2653
  store double %2667, ptr %2668, align 8, !tbaa !29
  br label %2669

2669:                                             ; preds = %2384, %._crit_edge1914, %2375
  %2670 = getelementptr inbounds i8, ptr %25, i64 28
  %2671 = load i16, ptr %2670, align 4, !tbaa !273
  %2672 = icmp eq i16 %2671, 1
  br i1 %2672, label %2673, label %2809

2673:                                             ; preds = %2669
  %2674 = getelementptr inbounds i8, ptr %37, i64 96
  %2675 = load i32, ptr %2674, align 8, !tbaa !168
  %2676 = sext i32 %2675 to i64
  %2677 = getelementptr inbounds double, ptr %1, i64 %2676
  %2678 = load double, ptr %2677, align 8, !tbaa !29
  %2679 = getelementptr inbounds i8, ptr %37, i64 196
  %2680 = load i32, ptr %2679, align 4, !tbaa !248
  %2681 = sext i32 %2680 to i64
  %2682 = getelementptr inbounds double, ptr %1, i64 %2681
  %2683 = load double, ptr %2682, align 8, !tbaa !29
  %2684 = fmul double %2683, 0x4003988E1409212E
  %2685 = call double @llvm.fmuladd.f64(double %2678, double 0xBFF5555555555555, double %2684)
  %2686 = getelementptr inbounds i8, ptr %37, i64 92
  %2687 = load i32, ptr %2686, align 4, !tbaa !170
  %2688 = sext i32 %2687 to i64
  %2689 = getelementptr inbounds double, ptr %2, i64 %2688
  store double %2685, ptr %2689, align 8, !tbaa !29
  %2690 = getelementptr inbounds double, ptr %1, i64 %2688
  %2691 = load double, ptr %2690, align 8, !tbaa !29
  %2692 = fmul double %2691, 2.500000e-01
  %2693 = getelementptr inbounds i8, ptr %37, i64 100
  %2694 = load i32, ptr %2693, align 4, !tbaa !171
  %2695 = sext i32 %2694 to i64
  %2696 = getelementptr inbounds double, ptr %1, i64 %2695
  %2697 = load double, ptr %2696, align 8, !tbaa !29
  %2698 = fneg double %149
  %2699 = call double @llvm.fmuladd.f64(double %2698, double %2697, double %2692)
  %2700 = fmul double %16, %2699
  %2701 = getelementptr inbounds double, ptr %2, i64 %2676
  store double %2700, ptr %2701, align 8, !tbaa !29
  %2702 = load double, ptr %2677, align 8, !tbaa !29
  %2703 = getelementptr inbounds i8, ptr %29, i64 24
  %2704 = load double, ptr %2703, align 8, !tbaa !29
  %2705 = getelementptr inbounds i8, ptr %29, i64 16
  %2706 = load double, ptr %2705, align 8, !tbaa !29
  %2707 = getelementptr i8, ptr %2696, i64 8
  %2708 = load double, ptr %2707, align 8, !tbaa !29
  %2709 = fmul double %15, -3.000000e-01
  %2710 = fmul double %2709, %2704
  %2711 = fdiv double %2710, %2706
  %2712 = fmul double %2711, %2708
  %2713 = call double @llvm.fmuladd.f64(double %2702, double 0x3FD1111111111111, double %2712)
  %2714 = getelementptr inbounds double, ptr %2, i64 %2695
  store double %2713, ptr %2714, align 8, !tbaa !29
  %2715 = fdiv double %15, 7.000000e+00
  %2716 = load double, ptr %2703, align 8, !tbaa !29
  %2717 = fmul double %2716, 6.000000e+00
  %2718 = load double, ptr %2705, align 8, !tbaa !29
  %2719 = fmul double %2717, %2718
  %2720 = load double, ptr %2696, align 8, !tbaa !29
  %2721 = getelementptr inbounds i8, ptr %29, i64 32
  %2722 = load double, ptr %2721, align 8, !tbaa !29
  %2723 = getelementptr inbounds i8, ptr %37, i64 104
  %2724 = load i32, ptr %2723, align 8, !tbaa !174
  %2725 = sext i32 %2724 to i64
  %2726 = getelementptr double, ptr %1, i64 %2725
  %2727 = getelementptr i8, ptr %2726, i64 8
  %2728 = load double, ptr %2727, align 8, !tbaa !29
  %2729 = fmul double %2722, -4.000000e+00
  %2730 = fmul double %2729, %2728
  %2731 = call double @llvm.fmuladd.f64(double %2719, double %2720, double %2730)
  %2732 = fmul double %2715, %2731
  %2733 = getelementptr inbounds double, ptr %2, i64 %2725
  store double %2732, ptr %2733, align 8, !tbaa !29
  %2734 = getelementptr inbounds i8, ptr %37, i64 108
  %2735 = load i32, ptr %2734, align 4, !tbaa !175
  %2736 = icmp sgt i32 %2735, 4
  br i1 %2736, label %.lr.ph1918.preheader, label %._crit_edge1919

.lr.ph1918.preheader:                             ; preds = %2673
  %wide.trip.count1998 = zext nneg i32 %2735 to i64
  %2737 = add nsw i64 %wide.trip.count1998, -4
  %min.iters.check2459 = icmp ult i64 %2737, 4
  br i1 %min.iters.check2459, label %.lr.ph1918.preheader2522, label %vector.memcheck2443

vector.memcheck2443:                              ; preds = %.lr.ph1918.preheader
  %2738 = shl nsw i64 %2688, 3
  %2739 = getelementptr i8, ptr %2, i64 %2738
  %scevgep2444 = getelementptr i8, ptr %2739, i64 32
  %2740 = shl nuw nsw i64 %wide.trip.count1998, 3
  %2741 = getelementptr i8, ptr %2, i64 %2738
  %scevgep2445 = getelementptr i8, ptr %2741, i64 %2740
  %scevgep2446 = getelementptr i8, ptr %29, i64 32
  %2742 = getelementptr i8, ptr %29, i64 %2740
  %scevgep2447 = getelementptr i8, ptr %2742, i64 8
  %2743 = getelementptr i8, ptr %1, i64 %2738
  %scevgep2448 = getelementptr i8, ptr %2743, i64 24
  %2744 = getelementptr i8, ptr %1, i64 %2738
  %2745 = getelementptr i8, ptr %2744, i64 %2740
  %scevgep2449 = getelementptr i8, ptr %2745, i64 8
  %bound02450 = icmp ult ptr %scevgep2444, %scevgep2447
  %bound12451 = icmp ult ptr %scevgep2446, %scevgep2445
  %found.conflict2452 = and i1 %bound02450, %bound12451
  %bound02453 = icmp ult ptr %scevgep2444, %scevgep2449
  %bound12454 = icmp ult ptr %scevgep2448, %scevgep2445
  %found.conflict2455 = and i1 %bound02453, %bound12454
  %conflict.rdx2456 = or i1 %found.conflict2452, %found.conflict2455
  br i1 %conflict.rdx2456, label %.lr.ph1918.preheader2522, label %vector.ph2460

vector.ph2460:                                    ; preds = %vector.memcheck2443
  %n.vec2462 = and i64 %2737, -2
  %ind.end2463 = add nsw i64 %n.vec2462, 4
  %broadcast.splatinsert2470 = insertelement <2 x double> poison, double %15, i64 0
  %broadcast.splat2471 = shufflevector <2 x double> %broadcast.splatinsert2470, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body2465

vector.body2465:                                  ; preds = %vector.body2465, %vector.ph2460
  %index2466 = phi i64 [ 0, %vector.ph2460 ], [ %index.next2476, %vector.body2465 ]
  %vec.ind2467 = phi <2 x i32> [ <i32 4, i32 5>, %vector.ph2460 ], [ %vec.ind.next2468, %vector.body2465 ]
  %offset.idx2469 = add i64 %index2466, 4
  %2746 = uitofp <2 x i32> %vec.ind2467 to <2 x double>
  %2747 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2746, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %2748 = fdiv <2 x double> %broadcast.splat2471, %2747
  %2749 = getelementptr inbounds double, ptr %29, i64 %offset.idx2469
  %wide.load2472 = load <2 x double>, ptr %2749, align 8, !tbaa !29, !alias.scope !274
  %2750 = fmul <2 x double> %wide.load2472, %2746
  %2751 = add nsw i64 %offset.idx2469, %2688
  %2752 = getelementptr double, ptr %1, i64 %2751
  %2753 = getelementptr i8, ptr %2752, i64 -8
  %wide.load2473 = load <2 x double>, ptr %2753, align 8, !tbaa !29, !alias.scope !277
  %2754 = insertelement <2 x i64> poison, i64 %index2466, i64 0
  %2755 = shufflevector <2 x i64> %2754, <2 x i64> poison, <2 x i32> zeroinitializer
  %2756 = add <2 x i64> %2755, <i64 5, i64 6>
  %2757 = trunc <2 x i64> %2756 to <2 x i32>
  %2758 = uitofp <2 x i32> %2757 to <2 x double>
  %2759 = extractelement <2 x i64> %2756, i64 0
  %2760 = getelementptr inbounds double, ptr %29, i64 %2759
  %wide.load2474 = load <2 x double>, ptr %2760, align 8, !tbaa !29, !alias.scope !274
  %2761 = getelementptr i8, ptr %2752, i64 8
  %wide.load2475 = load <2 x double>, ptr %2761, align 8, !tbaa !29, !alias.scope !277
  %2762 = fneg <2 x double> %wide.load2474
  %2763 = fmul <2 x double> %2758, %2762
  %2764 = fmul <2 x double> %2763, %wide.load2475
  %2765 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2750, <2 x double> %wide.load2473, <2 x double> %2764)
  %2766 = fmul <2 x double> %2748, %2765
  %2767 = getelementptr inbounds double, ptr %2, i64 %2751
  store <2 x double> %2766, ptr %2767, align 8, !tbaa !29, !alias.scope !279, !noalias !281
  %index.next2476 = add nuw i64 %index2466, 2
  %vec.ind.next2468 = add <2 x i32> %vec.ind2467, <i32 2, i32 2>
  %2768 = icmp eq i64 %index.next2476, %n.vec2462
  br i1 %2768, label %middle.block2457, label %vector.body2465, !llvm.loop !282

middle.block2457:                                 ; preds = %vector.body2465
  %cmp.n2477 = icmp eq i64 %2737, %n.vec2462
  br i1 %cmp.n2477, label %._crit_edge1919, label %.lr.ph1918.preheader2522

.lr.ph1918.preheader2522:                         ; preds = %middle.block2457, %vector.memcheck2443, %.lr.ph1918.preheader
  %indvars.iv1995.ph = phi i64 [ 4, %vector.memcheck2443 ], [ 4, %.lr.ph1918.preheader ], [ %ind.end2463, %middle.block2457 ]
  br label %.lr.ph1918

.lr.ph1918:                                       ; preds = %.lr.ph1918.preheader2522, %.lr.ph1918
  %indvars.iv1995 = phi i64 [ %indvars.iv.next1996, %.lr.ph1918 ], [ %indvars.iv1995.ph, %.lr.ph1918.preheader2522 ]
  %2769 = trunc nuw nsw i64 %indvars.iv1995 to i32
  %2770 = uitofp nneg i32 %2769 to double
  %2771 = call double @llvm.fmuladd.f64(double %2770, double 2.000000e+00, double 1.000000e+00)
  %2772 = fdiv double %15, %2771
  %2773 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1995
  %2774 = load double, ptr %2773, align 8, !tbaa !29
  %2775 = fmul double %2774, %2770
  %2776 = add nsw i64 %indvars.iv1995, %2688
  %2777 = getelementptr double, ptr %1, i64 %2776
  %2778 = getelementptr i8, ptr %2777, i64 -8
  %2779 = load double, ptr %2778, align 8, !tbaa !29
  %indvars.iv.next1996 = add nuw nsw i64 %indvars.iv1995, 1
  %2780 = trunc nuw nsw i64 %indvars.iv.next1996 to i32
  %2781 = uitofp nneg i32 %2780 to double
  %2782 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1996
  %2783 = load double, ptr %2782, align 8, !tbaa !29
  %2784 = getelementptr i8, ptr %2777, i64 8
  %2785 = load double, ptr %2784, align 8, !tbaa !29
  %2786 = fneg double %2783
  %2787 = fmul double %2781, %2786
  %2788 = fmul double %2787, %2785
  %2789 = call double @llvm.fmuladd.f64(double %2775, double %2779, double %2788)
  %2790 = fmul double %2772, %2789
  %2791 = getelementptr inbounds double, ptr %2, i64 %2776
  store double %2790, ptr %2791, align 8, !tbaa !29
  %exitcond1999.not = icmp eq i64 %indvars.iv.next1996, %wide.trip.count1998
  br i1 %exitcond1999.not, label %._crit_edge1919, label %.lr.ph1918, !llvm.loop !283

._crit_edge1919:                                  ; preds = %.lr.ph1918, %middle.block2457, %2673
  %2792 = sext i32 %2735 to i64
  %2793 = getelementptr inbounds double, ptr %29, i64 %2792
  %2794 = load double, ptr %2793, align 8, !tbaa !29
  %2795 = add nsw i32 %2735, %2687
  %2796 = sext i32 %2795 to i64
  %2797 = getelementptr double, ptr %1, i64 %2796
  %2798 = getelementptr i8, ptr %2797, i64 -8
  %2799 = load double, ptr %2798, align 8, !tbaa !29
  %2800 = sitofp i32 %2735 to double
  %2801 = fadd double %2800, 1.000000e+00
  %2802 = load double, ptr %2797, align 8, !tbaa !29
  %2803 = fneg double %2801
  %2804 = fmul double %.01775, %2803
  %2805 = fmul double %2804, %2802
  %2806 = call double @llvm.fmuladd.f64(double %2794, double %2799, double %2805)
  %2807 = fmul double %15, %2806
  %2808 = getelementptr inbounds double, ptr %2, i64 %2796
  store double %2807, ptr %2808, align 8, !tbaa !29
  br label %2809

2809:                                             ; preds = %._crit_edge1919, %2669
  %2810 = getelementptr inbounds i8, ptr %25, i64 30
  %2811 = load i16, ptr %2810, align 2, !tbaa !284
  %2812 = icmp eq i16 %2811, 1
  br i1 %2812, label %2813, label %.loopexit

2813:                                             ; preds = %2809
  %2814 = getelementptr inbounds i8, ptr %37, i64 152
  %2815 = load i32, ptr %2814, align 8, !tbaa !191
  %2816 = icmp sgt i32 %2815, 0
  br i1 %2816, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %2813
  %2817 = getelementptr inbounds i8, ptr %37, i64 148
  %2818 = load i32, ptr %2817, align 4, !tbaa !189
  %2819 = getelementptr inbounds i8, ptr %37, i64 168
  %invariant.gep = getelementptr i8, ptr %1, i64 8
  %2820 = getelementptr inbounds i8, ptr %21, i64 808
  %2821 = getelementptr inbounds i8, ptr %21, i64 792
  %2822 = getelementptr inbounds i8, ptr %21, i64 232
  %2823 = getelementptr inbounds i8, ptr %37, i64 196
  %2824 = getelementptr inbounds i8, ptr %37, i64 160
  %2825 = fneg double %15
  %.pre2020 = load ptr, ptr %2819, align 8, !tbaa !192
  %scevgep2480 = getelementptr i8, ptr %2, i64 8
  %scevgep2483 = getelementptr i8, ptr %29, i64 8
  %scevgep2484 = getelementptr i8, ptr %29, i64 8
  %scevgep2486 = getelementptr i8, ptr %1, i64 8
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge1930
  %2826 = phi i32 [ %2815, %.preheader.lr.ph ], [ %2942, %._crit_edge1930 ]
  %2827 = phi ptr [ %.pre2020, %.preheader.lr.ph ], [ %2943, %._crit_edge1930 ]
  %indvars.iv2008 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next2009, %._crit_edge1930 ]
  %.317941933 = phi i32 [ %2818, %.preheader.lr.ph ], [ %.41795.lcssa, %._crit_edge1930 ]
  %2828 = getelementptr inbounds i32, ptr %2827, i64 %indvars.iv2008
  %2829 = load i32, ptr %2828, align 4, !tbaa !50
  %2830 = icmp sgt i32 %2829, 0
  br i1 %2830, label %.lr.ph1929, label %._crit_edge1930

.lr.ph1929:                                       ; preds = %.preheader, %._crit_edge1924
  %indvars.iv2005 = phi i64 [ %indvars.iv.next2006, %._crit_edge1924 ], [ 0, %.preheader ]
  %.417951928 = phi i32 [ %2936, %._crit_edge1924 ], [ %.317941933, %.preheader ]
  %2831 = load ptr, ptr %2820, align 8, !tbaa !199
  %2832 = getelementptr inbounds ptr, ptr %2831, i64 %indvars.iv2008
  %2833 = load ptr, ptr %2832, align 8, !tbaa !200
  %2834 = getelementptr inbounds double, ptr %2833, i64 %indvars.iv2005
  %2835 = load double, ptr %2834, align 8, !tbaa !29
  %2836 = load ptr, ptr %2821, align 8, !tbaa !201
  %2837 = getelementptr inbounds ptr, ptr %2836, i64 %indvars.iv2008
  %2838 = load ptr, ptr %2837, align 8, !tbaa !200
  %2839 = getelementptr inbounds double, ptr %2838, i64 %indvars.iv2005
  %2840 = load double, ptr %2839, align 8, !tbaa !29
  %2841 = load ptr, ptr %2822, align 8, !tbaa !202
  %2842 = getelementptr inbounds double, ptr %2841, i64 %indvars.iv2008
  %2843 = load double, ptr %2842, align 8, !tbaa !29
  %2844 = fmul double %72, %2843
  %2845 = fmul double %2843, %2844
  %2846 = call double @llvm.fmuladd.f64(double %2840, double %2840, double %2845)
  %2847 = call double @sqrt(double noundef %2846) #7
  %2848 = fmul double %15, %2840
  %2849 = fdiv double %2848, %2847
  %2850 = fneg double %2849
  %2851 = sext i32 %.417951928 to i64
  %gep = getelementptr double, ptr %invariant.gep, i64 %2851
  %2852 = load double, ptr %gep, align 8, !tbaa !29
  %2853 = load i32, ptr %2823, align 4, !tbaa !248
  %2854 = sext i32 %2853 to i64
  %2855 = getelementptr inbounds double, ptr %1, i64 %2854
  %2856 = load double, ptr %2855, align 8, !tbaa !29
  %2857 = fmul double %2856, 0xBFE3988E1409212E
  %2858 = fmul double %2835, %2857
  %2859 = call double @llvm.fmuladd.f64(double %2850, double %2852, double %2858)
  %2860 = getelementptr inbounds double, ptr %2, i64 %2851
  store double %2859, ptr %2860, align 8, !tbaa !29
  %2861 = load ptr, ptr %2824, align 8, !tbaa !197
  %2862 = getelementptr inbounds i32, ptr %2861, i64 %indvars.iv2008
  %2863 = load i32, ptr %2862, align 4, !tbaa !50
  %2864 = icmp sgt i32 %2863, 1
  br i1 %2864, label %.lr.ph1923, label %._crit_edge1924

.lr.ph1923:                                       ; preds = %.lr.ph1929
  %2865 = add i32 %.417951928, -1
  %wide.trip.count2003 = zext nneg i32 %2863 to i64
  %invariant.gep2038 = getelementptr double, ptr %1, i64 %2851
  %invariant.gep2040 = getelementptr double, ptr %2, i64 %2851
  %2866 = add nsw i64 %wide.trip.count2003, -1
  %min.iters.check2497 = icmp eq i32 %2863, 2
  br i1 %min.iters.check2497, label %scalar.ph2496.preheader, label %vector.scevcheck2478

vector.scevcheck2478:                             ; preds = %.lr.ph1923
  %2867 = add nsw i64 %wide.trip.count2003, -2
  %2868 = trunc i64 %2867 to i32
  %2869 = add i32 %.417951928, %2868
  %2870 = icmp slt i32 %2869, %.417951928
  %2871 = icmp ugt i64 %2867, 4294967295
  %2872 = or i1 %2870, %2871
  br i1 %2872, label %scalar.ph2496.preheader, label %vector.memcheck2479

vector.memcheck2479:                              ; preds = %vector.scevcheck2478
  %2873 = shl nsw i64 %2851, 3
  %scevgep2481 = getelementptr i8, ptr %scevgep2480, i64 %2873
  %2874 = shl nuw nsw i64 %wide.trip.count2003, 3
  %2875 = add nsw i64 %2873, %2874
  %scevgep2482 = getelementptr i8, ptr %2, i64 %2875
  %scevgep2485 = getelementptr i8, ptr %scevgep2484, i64 %2874
  %scevgep2487 = getelementptr i8, ptr %scevgep2486, i64 %2875
  %bound02488 = icmp ult ptr %scevgep2481, %scevgep2485
  %bound12489 = icmp ult ptr %scevgep2483, %scevgep2482
  %found.conflict2490 = and i1 %bound02488, %bound12489
  %bound02491 = icmp ult ptr %scevgep2481, %scevgep2487
  %bound12492 = icmp ult ptr %invariant.gep2038, %scevgep2482
  %found.conflict2493 = and i1 %bound02491, %bound12492
  %conflict.rdx2494 = or i1 %found.conflict2490, %found.conflict2493
  br i1 %conflict.rdx2494, label %scalar.ph2496.preheader, label %vector.ph2498

vector.ph2498:                                    ; preds = %vector.memcheck2479
  %n.vec2500 = and i64 %2866, -2
  %ind.end2501 = or i64 %2866, 1
  %broadcast.splatinsert2509 = insertelement <2 x double> poison, double %2849, i64 0
  %broadcast.splat2510 = shufflevector <2 x double> %broadcast.splatinsert2509, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body2503

vector.body2503:                                  ; preds = %vector.body2503, %vector.ph2498
  %index2504 = phi i64 [ 0, %vector.ph2498 ], [ %index.next2515, %vector.body2503 ]
  %vec.ind2505 = phi <2 x i32> [ <i32 1, i32 2>, %vector.ph2498 ], [ %vec.ind.next2506, %vector.body2503 ]
  %offset.idx2507 = or disjoint i64 %index2504, 1
  %2876 = trunc i64 %index2504 to i32
  %2877 = or disjoint i32 %2876, 1
  %2878 = uitofp <2 x i32> %vec.ind2505 to <2 x double>
  %2879 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2878, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %2880 = fdiv <2 x double> %broadcast.splat2510, %2879
  %2881 = getelementptr inbounds double, ptr %29, i64 %offset.idx2507
  %wide.load2511 = load <2 x double>, ptr %2881, align 8, !tbaa !29, !alias.scope !285
  %2882 = fmul <2 x double> %wide.load2511, %2878
  %2883 = add i32 %2865, %2877
  %2884 = sext i32 %2883 to i64
  %2885 = getelementptr inbounds double, ptr %1, i64 %2884
  %wide.load2512 = load <2 x double>, ptr %2885, align 8, !tbaa !29, !alias.scope !288
  %2886 = insertelement <2 x i64> poison, i64 %index2504, i64 0
  %2887 = shufflevector <2 x i64> %2886, <2 x i64> poison, <2 x i32> zeroinitializer
  %2888 = add <2 x i64> %2887, <i64 2, i64 3>
  %2889 = trunc <2 x i64> %2888 to <2 x i32>
  %2890 = uitofp <2 x i32> %2889 to <2 x double>
  %2891 = extractelement <2 x i64> %2888, i64 0
  %2892 = getelementptr inbounds double, ptr %29, i64 %2891
  %wide.load2513 = load <2 x double>, ptr %2892, align 8, !tbaa !29, !alias.scope !285
  %2893 = getelementptr double, ptr %invariant.gep2038, i64 %2891
  %wide.load2514 = load <2 x double>, ptr %2893, align 8, !tbaa !29, !alias.scope !288
  %2894 = fneg <2 x double> %wide.load2513
  %2895 = fmul <2 x double> %2890, %2894
  %2896 = fmul <2 x double> %2895, %wide.load2514
  %2897 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2882, <2 x double> %wide.load2512, <2 x double> %2896)
  %2898 = fmul <2 x double> %2880, %2897
  %2899 = getelementptr double, ptr %invariant.gep2040, i64 %offset.idx2507
  store <2 x double> %2898, ptr %2899, align 8, !tbaa !29, !alias.scope !290, !noalias !292
  %index.next2515 = add nuw i64 %index2504, 2
  %vec.ind.next2506 = add <2 x i32> %vec.ind2505, <i32 2, i32 2>
  %2900 = icmp eq i64 %index.next2515, %n.vec2500
  br i1 %2900, label %middle.block2495, label %vector.body2503, !llvm.loop !293

middle.block2495:                                 ; preds = %vector.body2503
  %cmp.n2516 = icmp eq i64 %2866, %n.vec2500
  br i1 %cmp.n2516, label %._crit_edge1924, label %scalar.ph2496.preheader

scalar.ph2496.preheader:                          ; preds = %middle.block2495, %vector.memcheck2479, %vector.scevcheck2478, %.lr.ph1923
  %indvars.iv2000.ph = phi i64 [ 1, %vector.memcheck2479 ], [ 1, %vector.scevcheck2478 ], [ 1, %.lr.ph1923 ], [ %ind.end2501, %middle.block2495 ]
  br label %scalar.ph2496

scalar.ph2496:                                    ; preds = %scalar.ph2496.preheader, %scalar.ph2496
  %indvars.iv2000 = phi i64 [ %indvars.iv.next2001, %scalar.ph2496 ], [ %indvars.iv2000.ph, %scalar.ph2496.preheader ]
  %2901 = trunc nuw nsw i64 %indvars.iv2000 to i32
  %2902 = uitofp nneg i32 %2901 to double
  %2903 = call double @llvm.fmuladd.f64(double %2902, double 2.000000e+00, double 1.000000e+00)
  %2904 = fdiv double %2849, %2903
  %2905 = getelementptr inbounds double, ptr %29, i64 %indvars.iv2000
  %2906 = load double, ptr %2905, align 8, !tbaa !29
  %2907 = fmul double %2906, %2902
  %2908 = add i32 %2865, %2901
  %2909 = sext i32 %2908 to i64
  %2910 = getelementptr inbounds double, ptr %1, i64 %2909
  %2911 = load double, ptr %2910, align 8, !tbaa !29
  %indvars.iv.next2001 = add nuw nsw i64 %indvars.iv2000, 1
  %2912 = trunc nuw nsw i64 %indvars.iv.next2001 to i32
  %2913 = uitofp nneg i32 %2912 to double
  %2914 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next2001
  %2915 = load double, ptr %2914, align 8, !tbaa !29
  %gep2039 = getelementptr double, ptr %invariant.gep2038, i64 %indvars.iv.next2001
  %2916 = load double, ptr %gep2039, align 8, !tbaa !29
  %2917 = fneg double %2915
  %2918 = fmul double %2913, %2917
  %2919 = fmul double %2918, %2916
  %2920 = call double @llvm.fmuladd.f64(double %2907, double %2911, double %2919)
  %2921 = fmul double %2904, %2920
  %gep2041 = getelementptr double, ptr %invariant.gep2040, i64 %indvars.iv2000
  store double %2921, ptr %gep2041, align 8, !tbaa !29
  %exitcond2004.not = icmp eq i64 %indvars.iv.next2001, %wide.trip.count2003
  br i1 %exitcond2004.not, label %._crit_edge1924, label %scalar.ph2496, !llvm.loop !294

._crit_edge1924:                                  ; preds = %scalar.ph2496, %middle.block2495, %.lr.ph1929
  %.11.lcssa = phi i32 [ 1, %.lr.ph1929 ], [ %2863, %middle.block2495 ], [ %2863, %scalar.ph2496 ]
  %2922 = add nsw i32 %.11.lcssa, %.417951928
  %2923 = sext i32 %2922 to i64
  %2924 = getelementptr double, ptr %1, i64 %2923
  %2925 = getelementptr i8, ptr %2924, i64 -8
  %2926 = load double, ptr %2925, align 8, !tbaa !29
  %2927 = add nuw i32 %.11.lcssa, 1
  %2928 = uitofp i32 %2927 to double
  %2929 = load double, ptr %2924, align 8, !tbaa !29
  %2930 = fmul double %2825, %2928
  %2931 = fmul double %.01775, %2930
  %2932 = fmul double %2931, %2929
  %2933 = call double @llvm.fmuladd.f64(double %2849, double %2926, double %2932)
  %2934 = getelementptr inbounds double, ptr %2, i64 %2923
  store double %2933, ptr %2934, align 8, !tbaa !29
  %2935 = add i32 %.417951928, 1
  %2936 = add i32 %2935, %2863
  %indvars.iv.next2006 = add nuw nsw i64 %indvars.iv2005, 1
  %2937 = load ptr, ptr %2819, align 8, !tbaa !192
  %2938 = getelementptr inbounds i32, ptr %2937, i64 %indvars.iv2008
  %2939 = load i32, ptr %2938, align 4, !tbaa !50
  %2940 = sext i32 %2939 to i64
  %2941 = icmp slt i64 %indvars.iv.next2006, %2940
  br i1 %2941, label %.lr.ph1929, label %._crit_edge1930.loopexit, !llvm.loop !295

._crit_edge1930.loopexit:                         ; preds = %._crit_edge1924
  %.pre2021 = load i32, ptr %2814, align 8, !tbaa !191
  br label %._crit_edge1930

._crit_edge1930:                                  ; preds = %._crit_edge1930.loopexit, %.preheader
  %2942 = phi i32 [ %2826, %.preheader ], [ %.pre2021, %._crit_edge1930.loopexit ]
  %2943 = phi ptr [ %2827, %.preheader ], [ %2937, %._crit_edge1930.loopexit ]
  %.41795.lcssa = phi i32 [ %.317941933, %.preheader ], [ %2936, %._crit_edge1930.loopexit ]
  %indvars.iv.next2009 = add nuw nsw i64 %indvars.iv2008, 1
  %2944 = sext i32 %2942 to i64
  %2945 = icmp slt i64 %indvars.iv.next2009, %2944
  br i1 %2945, label %.preheader, label %.loopexit, !llvm.loop !296

.loopexit:                                        ; preds = %._crit_edge1930, %2813, %2809
  %2946 = getelementptr inbounds i8, ptr %37, i64 196
  %2947 = load i32, ptr %2946, align 4, !tbaa !248
  %2948 = sext i32 %2947 to i64
  %2949 = getelementptr inbounds double, ptr %1, i64 %2948
  %2950 = load double, ptr %2949, align 8, !tbaa !29
  %2951 = getelementptr inbounds i8, ptr %37, i64 192
  %2952 = load i32, ptr %2951, align 8, !tbaa !297
  %2953 = sext i32 %2952 to i64
  %2954 = getelementptr inbounds double, ptr %2, i64 %2953
  store double %2950, ptr %2954, align 8, !tbaa !29
  %2955 = getelementptr inbounds i8, ptr %27, i64 28
  %2956 = load i32, ptr %2955, align 4, !tbaa !298
  %2957 = sext i32 %2956 to i64
  %2958 = getelementptr inbounds double, ptr %35, i64 %2957
  %2959 = load double, ptr %2958, align 8, !tbaa !29
  %2960 = getelementptr inbounds double, ptr %2, i64 %2948
  store double %2959, ptr %2960, align 8, !tbaa !29
  br label %2961

2961:                                             ; preds = %2367, %2371, %.loopexit, %1152, %383, %65, %60, %45
  %.01768 = phi i32 [ 1, %45 ], [ 1, %60 ], [ 1, %65 ], [ 1, %1152 ], [ 1, %383 ], [ 0, %.loopexit ], [ 0, %2371 ], [ 0, %2367 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  ret i32 %.01768
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @perturb_einstein(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, double noundef, double noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @perturb_tca_slip_and_shear(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

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

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

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 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 #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { cold 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, !11, i64 48}
!6 = !{!"perturb_parameters_and_workspace", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !11, i64 48, !7, i64 56}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!6, !10, i64 32}
!13 = !{!6, !7, i64 0}
!14 = !{!6, !7, i64 8}
!15 = !{!6, !7, i64 16}
!16 = !{!6, !7, i64 24}
!17 = !{!6, !7, i64 56}
!18 = !{!19, !7, i64 384}
!19 = !{!"perturb_workspace", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !11, i64 176, !11, i64 184, !11, i64 192, !11, i64 200, !11, i64 208, !7, i64 216, !7, i64 224, !7, i64 232, !11, i64 240, !11, i64 248, !11, i64 256, !11, i64 264, !11, i64 272, !11, i64 280, !11, i64 288, !11, i64 296, !11, i64 304, !7, i64 312, !10, i64 320, !20, i64 324, !10, i64 328, !10, i64 332, !10, i64 336, !10, i64 340, !10, i64 344, !10, i64 348, !10, i64 352, !10, i64 356, !10, i64 360, !7, i64 368, !10, i64 376, !7, i64 384}
!20 = !{!"short", !8, i64 0}
!21 = !{!19, !7, i64 48}
!22 = !{!19, !7, i64 56}
!23 = !{!19, !7, i64 64}
!24 = !{!19, !7, i64 72}
!25 = !{!26, !20, i64 842}
!26 = !{!"background", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !10, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !20, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !20, i64 176, !11, i64 184, !11, i64 192, !7, i64 200, !10, i64 208, !10, i64 212, !11, i64 216, !10, i64 224, !7, i64 232, !7, i64 240, !11, i64 248, !7, i64 256, !11, i64 264, !7, i64 272, !11, i64 280, !7, i64 288, !11, i64 296, !7, i64 304, !7, i64 312, !7, i64 320, !11, i64 328, !11, i64 336, !11, i64 344, !11, i64 352, !10, i64 360, !7, i64 368, !11, i64 376, !11, i64 384, !11, i64 392, !11, i64 400, !11, i64 408, !11, i64 416, !11, i64 424, !11, i64 432, !11, i64 440, !11, i64 448, !11, i64 456, !10, i64 464, !10, i64 468, !10, i64 472, !10, i64 476, !10, i64 480, !10, i64 484, !10, i64 488, !10, i64 492, !10, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !10, i64 512, !10, i64 516, !10, i64 520, !10, i64 524, !10, i64 528, !10, i64 532, !10, i64 536, !10, i64 540, !10, i64 544, !10, i64 548, !10, i64 552, !10, i64 556, !10, i64 560, !10, i64 564, !10, i64 568, !10, i64 572, !10, i64 576, !10, i64 580, !10, i64 584, !10, i64 588, !10, i64 592, !10, i64 596, !10, i64 600, !10, i64 604, !10, i64 608, !10, i64 612, !10, i64 616, !10, i64 620, !10, i64 624, !10, i64 628, !7, i64 632, !7, i64 640, !7, i64 648, !7, i64 656, !7, i64 664, !10, i64 672, !10, i64 676, !10, i64 680, !10, i64 684, !10, i64 688, !10, i64 692, !10, i64 696, !10, i64 700, !10, i64 704, !10, i64 708, !10, i64 712, !10, i64 716, !10, i64 720, !20, i64 724, !20, i64 726, !20, i64 728, !20, i64 730, !20, i64 732, !20, i64 734, !20, i64 736, !20, i64 738, !20, i64 740, !20, i64 742, !20, i64 744, !7, i64 752, !7, i64 760, !7, i64 768, !7, i64 776, !7, i64 784, !7, i64 792, !7, i64 800, !7, i64 808, !7, i64 816, !7, i64 824, !7, i64 832, !20, i64 840, !20, i64 842, !20, i64 844, !20, i64 846, !20, i64 848, !20, i64 850, !8, i64 852, !20, i64 2900, !8, i64 2902}
!27 = !{!26, !20, i64 848}
!28 = !{!26, !10, i64 464}
!29 = !{!11, !11, i64 0}
!30 = !{!31, !20, i64 602}
!31 = !{!"thermo", !11, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !11, i64 24, !11, i64 32, !20, i64 40, !20, i64 42, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !10, i64 80, !7, i64 88, !7, i64 96, !11, i64 104, !10, i64 112, !7, i64 120, !7, i64 128, !11, i64 136, !10, i64 144, !7, i64 152, !7, i64 160, !11, i64 168, !20, i64 176, !11, i64 184, !11, i64 192, !11, i64 200, !11, i64 208, !11, i64 216, !11, i64 224, !11, i64 232, !11, i64 240, !11, i64 248, !11, i64 256, !11, i64 264, !10, i64 272, !10, i64 276, !10, i64 280, !10, i64 284, !10, i64 288, !10, i64 292, !10, i64 296, !10, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !10, i64 316, !10, i64 320, !10, i64 324, !10, i64 328, !10, i64 332, !10, i64 336, !10, i64 340, !10, i64 344, !10, i64 348, !10, i64 352, !10, i64 356, !10, i64 360, !10, i64 364, !10, i64 368, !10, i64 372, !10, i64 376, !7, i64 384, !7, i64 392, !7, i64 400, !11, i64 408, !11, i64 416, !11, i64 424, !11, i64 432, !11, i64 440, !11, i64 448, !11, i64 456, !11, i64 464, !11, i64 472, !11, i64 480, !11, i64 488, !11, i64 496, !11, i64 504, !11, i64 512, !11, i64 520, !11, i64 528, !11, i64 536, !11, i64 544, !11, i64 552, !11, i64 560, !11, i64 568, !11, i64 576, !11, i64 584, !11, i64 592, !20, i64 600, !20, i64 602, !20, i64 604, !8, i64 606}
!32 = !{!26, !10, i64 468}
!33 = !{!26, !10, i64 476}
!34 = !{!26, !10, i64 480}
!35 = !{!26, !20, i64 742}
!36 = !{!26, !10, i64 508}
!37 = !{!26, !10, i64 504}
!38 = !{!31, !10, i64 308}
!39 = !{!31, !11, i64 248}
!40 = !{!31, !11, i64 240}
!41 = !{!26, !11, i64 120}
!42 = !{!26, !11, i64 136}
!43 = !{!26, !20, i64 744}
!44 = !{!26, !11, i64 352}
!45 = !{!46, !20, i64 4}
!46 = !{!"perturbs", !20, i64 0, !20, i64 2, !20, i64 4, !20, i64 6, !20, i64 8, !20, i64 10, !20, i64 12, !20, i64 14, !20, i64 16, !20, i64 18, !20, i64 20, !10, i64 24, !20, i64 28, !20, i64 30, !20, i64 32, !20, i64 34, !20, i64 36, !20, i64 38, !20, i64 40, !20, i64 42, !20, i64 44, !20, i64 46, !20, i64 48, !20, i64 50, !20, i64 52, !20, i64 54, !20, i64 56, !20, i64 58, !20, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !11, i64 80, !10, i64 88, !10, i64 92, !8, i64 96, !8, i64 896, !10, i64 1696, !10, i64 1700, !10, i64 1704, !10, i64 1708, !10, i64 1712, !11, i64 1720, !10, i64 1728, !10, i64 1732, !8, i64 1736, !11, i64 1976, !11, i64 1984, !11, i64 1992, !7, i64 2000, !7, i64 2008, !10, i64 2016, !20, i64 2020, !20, i64 2022, !10, i64 2024, !10, i64 2028, !10, i64 2032, !10, i64 2036, !10, i64 2040, !10, i64 2044, !10, i64 2048, !10, i64 2052, !10, i64 2056, !10, i64 2060, !10, i64 2064, !7, i64 2072, !20, i64 2080, !20, i64 2082, !20, i64 2084, !20, i64 2086, !20, i64 2088, !20, i64 2090, !20, i64 2092, !20, i64 2094, !20, i64 2096, !20, i64 2098, !20, i64 2100, !20, i64 2102, !20, i64 2104, !20, i64 2106, !20, i64 2108, !20, i64 2110, !20, i64 2112, !20, i64 2114, !20, i64 2116, !20, i64 2118, !20, i64 2120, !20, i64 2122, !20, i64 2124, !20, i64 2126, !20, i64 2128, !20, i64 2130, !20, i64 2132, !20, i64 2134, !20, i64 2136, !20, i64 2138, !20, i64 2140, !20, i64 2142, !20, i64 2144, !20, i64 2146, !20, i64 2148, !20, i64 2150, !20, i64 2152, !20, i64 2154, !20, i64 2156, !20, i64 2158, !10, i64 2160, !10, i64 2164, !10, i64 2168, !10, i64 2172, !10, i64 2176, !10, i64 2180, !10, i64 2184, !10, i64 2188, !10, i64 2192, !10, i64 2196, !10, i64 2200, !10, i64 2204, !10, i64 2208, !10, i64 2212, !10, i64 2216, !10, i64 2220, !10, i64 2224, !10, i64 2228, !10, i64 2232, !10, i64 2236, !10, i64 2240, !10, i64 2244, !10, i64 2248, !10, i64 2252, !10, i64 2256, !10, i64 2260, !10, i64 2264, !10, i64 2268, !10, i64 2272, !10, i64 2276, !10, i64 2280, !10, i64 2284, !10, i64 2288, !10, i64 2292, !10, i64 2296, !10, i64 2300, !10, i64 2304, !10, i64 2308, !10, i64 2312, !10, i64 2316, !10, i64 2320, !10, i64 2324, !10, i64 2328, !10, i64 2332, !7, i64 2336, !7, i64 2344, !7, i64 2352, !7, i64 2360, !7, i64 2368, !11, i64 2376, !11, i64 2384, !7, i64 2392, !10, i64 2400, !11, i64 2408, !11, i64 2416, !11, i64 2424, !7, i64 2432, !7, i64 2440, !7, i64 2448, !7, i64 2456, !7, i64 2464, !7, i64 2472, !10, i64 2480, !7, i64 2488, !7, i64 2496, !7, i64 2504, !8, i64 2512, !8, i64 10512, !8, i64 18512, !10, i64 26512, !10, i64 26516, !10, i64 26520, !8, i64 26528, !8, i64 26768, !8, i64 27008, !8, i64 27248, !8, i64 27368, !8, i64 27488, !20, i64 27608, !8, i64 27610}
!47 = !{!46, !10, i64 2028}
!48 = !{!19, !7, i64 368}
!49 = !{!19, !10, i64 340}
!50 = !{!10, !10, i64 0}
!51 = !{!52, !10, i64 0}
!52 = !{!"perturb_vector", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !7, i64 160, !7, i64 168, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200, !7, i64 208, !7, i64 216, !7, i64 224}
!53 = !{!52, !10, i64 4}
!54 = !{!26, !20, i64 740}
!55 = !{!19, !10, i64 348}
!56 = !{!52, !10, i64 112}
!57 = !{!52, !10, i64 116}
!58 = !{!52, !10, i64 40}
!59 = !{!52, !10, i64 44}
!60 = !{!31, !10, i64 352}
!61 = !{!46, !20, i64 20}
!62 = !{!19, !10, i64 336}
!63 = !{!52, !10, i64 132}
!64 = !{!31, !10, i64 348}
!65 = !{!52, !10, i64 136}
!66 = !{!31, !10, i64 272}
!67 = !{!26, !11, i64 0}
!68 = !{!26, !11, i64 24}
!69 = !{!31, !11, i64 0}
!70 = !{!26, !11, i64 456}
!71 = !{!31, !10, i64 344}
!72 = !{!46, !10, i64 2024}
!73 = !{!19, !10, i64 8}
!74 = !{!19, !10, i64 20}
!75 = !{!19, !10, i64 4}
!76 = !{!19, !10, i64 0}
!77 = !{!19, !11, i64 168}
!78 = !{!19, !11, i64 176}
!79 = !{!19, !11, i64 200}
!80 = !{!19, !11, i64 208}
!81 = !{!31, !10, i64 276}
!82 = !{!19, !11, i64 144}
!83 = !{!19, !11, i64 152}
!84 = !{!52, !10, i64 20}
!85 = !{!52, !10, i64 28}
!86 = !{!52, !10, i64 8}
!87 = !{!52, !10, i64 12}
!88 = !{!52, !10, i64 16}
!89 = !{!90}
!90 = distinct !{!90, !91}
!91 = distinct !{!91, !"LVerDomain"}
!92 = !{!93}
!93 = distinct !{!93, !91}
!94 = !{!95}
!95 = distinct !{!95, !91}
!96 = !{!97}
!97 = distinct !{!97, !91}
!98 = !{!93, !95, !90}
!99 = distinct !{!99, !100, !101, !102}
!100 = !{!"llvm.loop.mustprogress"}
!101 = !{!"llvm.loop.isvectorized", i32 1}
!102 = !{!"llvm.loop.unroll.runtime.disable"}
!103 = distinct !{!103, !100, !101}
!104 = !{!52, !10, i64 24}
!105 = !{!52, !10, i64 36}
!106 = !{!107}
!107 = distinct !{!107, !108}
!108 = distinct !{!108, !"LVerDomain"}
!109 = !{!110}
!110 = distinct !{!110, !108}
!111 = !{!112}
!112 = distinct !{!112, !108}
!113 = !{!114}
!114 = distinct !{!114, !108}
!115 = !{!110, !112, !107}
!116 = distinct !{!116, !100, !101, !102}
!117 = distinct !{!117, !100, !101}
!118 = !{!26, !20, i64 724}
!119 = !{!52, !10, i64 52}
!120 = !{!52, !10, i64 48}
!121 = !{!52, !10, i64 60}
!122 = !{!52, !10, i64 56}
!123 = !{!19, !10, i64 344}
!124 = !{!31, !10, i64 336}
!125 = !{!31, !11, i64 256}
!126 = !{!26, !10, i64 472}
!127 = !{!46, !7, i64 2000}
!128 = !{!19, !11, i64 160}
!129 = !{!26, !11, i64 16}
!130 = !{!26, !20, i64 726}
!131 = !{!52, !10, i64 68}
!132 = !{!26, !11, i64 152}
!133 = !{!52, !10, i64 64}
!134 = !{!26, !20, i64 728}
!135 = !{!26, !10, i64 516}
!136 = !{!26, !10, i64 512}
!137 = !{!52, !10, i64 140}
!138 = !{!52, !10, i64 144}
!139 = !{!140}
!140 = distinct !{!140, !141}
!141 = distinct !{!141, !"LVerDomain"}
!142 = !{!143}
!143 = distinct !{!143, !141}
!144 = !{!145}
!145 = distinct !{!145, !141}
!146 = !{!140, !143}
!147 = distinct !{!147, !100, !101, !102}
!148 = distinct !{!148, !100, !101}
!149 = !{!26, !20, i64 736}
!150 = !{!26, !20, i64 96}
!151 = !{!26, !11, i64 88}
!152 = !{!52, !10, i64 76}
!153 = !{!52, !10, i64 72}
!154 = !{!19, !11, i64 304}
!155 = !{!52, !10, i64 80}
!156 = !{!26, !20, i64 730}
!157 = !{!52, !10, i64 88}
!158 = !{!52, !10, i64 84}
!159 = !{!26, !10, i64 524}
!160 = !{!26, !10, i64 536}
!161 = !{!46, !10, i64 2016}
!162 = !{!52, !10, i64 120}
!163 = !{!46, !7, i64 2008}
!164 = !{!52, !10, i64 124}
!165 = !{!52, !10, i64 128}
!166 = distinct !{!166, !100}
!167 = !{!26, !20, i64 738}
!168 = !{!52, !10, i64 96}
!169 = !{!46, !11, i64 1976}
!170 = !{!52, !10, i64 92}
!171 = !{!52, !10, i64 100}
!172 = !{!19, !10, i64 352}
!173 = !{!46, !11, i64 1984}
!174 = !{!52, !10, i64 104}
!175 = !{!52, !10, i64 108}
!176 = !{!177}
!177 = distinct !{!177, !178}
!178 = distinct !{!178, !"LVerDomain"}
!179 = !{!180}
!180 = distinct !{!180, !178}
!181 = !{!182}
!182 = distinct !{!182, !178}
!183 = !{!177, !180}
!184 = distinct !{!184, !100, !101, !102}
!185 = distinct !{!185, !100, !101}
!186 = !{!187, !10, i64 1696}
!187 = !{!"precision", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !8, i64 104, !11, i64 360, !10, i64 368, !11, i64 376, !10, i64 384, !10, i64 388, !11, i64 392, !10, i64 400, !11, i64 408, !10, i64 416, !11, i64 424, !11, i64 432, !11, i64 440, !11, i64 448, !11, i64 456, !11, i64 464, !11, i64 472, !11, i64 480, !11, i64 488, !11, i64 496, !11, i64 504, !11, i64 512, !11, i64 520, !11, i64 528, !11, i64 536, !11, i64 544, !11, i64 552, !11, i64 560, !11, i64 568, !11, i64 576, !11, i64 584, !11, i64 592, !11, i64 600, !11, i64 608, !11, i64 616, !10, i64 624, !8, i64 628, !8, i64 884, !8, i64 1140, !11, i64 1400, !11, i64 1408, !11, i64 1416, !11, i64 1424, !11, i64 1432, !11, i64 1440, !11, i64 1448, !11, i64 1456, !11, i64 1464, !11, i64 1472, !11, i64 1480, !11, i64 1488, !11, i64 1496, !11, i64 1504, !11, i64 1512, !11, i64 1520, !10, i64 1528, !11, i64 1536, !11, i64 1544, !10, i64 1552, !10, i64 1556, !10, i64 1560, !10, i64 1564, !10, i64 1568, !10, i64 1572, !10, i64 1576, !10, i64 1580, !11, i64 1584, !11, i64 1592, !11, i64 1600, !11, i64 1608, !11, i64 1616, !11, i64 1624, !11, i64 1632, !11, i64 1640, !10, i64 1648, !11, i64 1656, !11, i64 1664, !10, i64 1672, !11, i64 1680, !11, i64 1688, !10, i64 1696, !11, i64 1704, !10, i64 1712, !11, i64 1720, !11, i64 1728, !10, i64 1736, !11, i64 1744, !11, i64 1752, !11, i64 1760, !10, i64 1768, !11, i64 1776, !11, i64 1784, !11, i64 1792, !11, i64 1800, !11, i64 1808, !10, i64 1816, !11, i64 1824, !11, i64 1832, !11, i64 1840, !11, i64 1848, !11, i64 1856, !11, i64 1864, !11, i64 1872, !10, i64 1880, !11, i64 1888, !11, i64 1896, !11, i64 1904, !11, i64 1912, !11, i64 1920, !11, i64 1928, !11, i64 1936, !11, i64 1944, !11, i64 1952, !11, i64 1960, !11, i64 1968, !11, i64 1976, !11, i64 1984, !11, i64 1992, !11, i64 2000, !11, i64 2008, !11, i64 2016, !11, i64 2024, !11, i64 2032, !11, i64 2040, !11, i64 2048, !11, i64 2056, !11, i64 2064, !11, i64 2072, !11, i64 2080, !11, i64 2088, !11, i64 2096, !11, i64 2104, !11, i64 2112, !11, i64 2120, !11, i64 2128, !11, i64 2136, !11, i64 2144, !11, i64 2152, !11, i64 2160, !11, i64 2168, !11, i64 2176, !11, i64 2184, !11, i64 2192, !11, i64 2200, !11, i64 2208, !11, i64 2216, !11, i64 2224, !11, i64 2232, !11, i64 2240, !11, i64 2248, !10, i64 2256, !11, i64 2264, !11, i64 2272, !11, i64 2280, !11, i64 2288, !10, i64 2296, !11, i64 2304, !11, i64 2312, !10, i64 2320, !10, i64 2324, !10, i64 2328, !11, i64 2336, !11, i64 2344, !8, i64 2352}
!188 = !{!26, !20, i64 732}
!189 = !{!52, !10, i64 148}
!190 = !{!19, !10, i64 356}
!191 = !{!52, !10, i64 152}
!192 = !{!52, !7, i64 168}
!193 = !{!26, !10, i64 552}
!194 = !{!26, !10, i64 556}
!195 = !{!26, !10, i64 560}
!196 = !{!187, !10, i64 1712}
!197 = !{!52, !7, i64 160}
!198 = distinct !{!198, !100}
!199 = !{!26, !7, i64 808}
!200 = !{!7, !7, i64 0}
!201 = !{!26, !7, i64 792}
!202 = !{!26, !7, i64 232}
!203 = !{!204}
!204 = distinct !{!204, !205}
!205 = distinct !{!205, !"LVerDomain"}
!206 = !{!207}
!207 = distinct !{!207, !205}
!208 = !{!209}
!209 = distinct !{!209, !205}
!210 = !{!211}
!211 = distinct !{!211, !205}
!212 = !{!204, !209, !207}
!213 = distinct !{!213, !100, !101, !102}
!214 = distinct !{!214, !100, !101}
!215 = distinct !{!215, !100}
!216 = distinct !{!216, !100}
!217 = !{!46, !20, i64 6}
!218 = !{!46, !10, i64 2036}
!219 = !{!19, !10, i64 32}
!220 = !{!52, !10, i64 188}
!221 = !{!52, !10, i64 184}
!222 = !{!223}
!223 = distinct !{!223, !224}
!224 = distinct !{!224, !"LVerDomain"}
!225 = !{!226}
!226 = distinct !{!226, !224}
!227 = !{!228}
!228 = distinct !{!228, !224}
!229 = !{!230}
!230 = distinct !{!230, !224}
!231 = !{!226, !228, !223}
!232 = distinct !{!232, !100, !101, !102}
!233 = distinct !{!233, !100, !101}
!234 = !{!235}
!235 = distinct !{!235, !236}
!236 = distinct !{!236, !"LVerDomain"}
!237 = !{!238}
!238 = distinct !{!238, !236}
!239 = !{!240}
!240 = distinct !{!240, !236}
!241 = !{!242}
!242 = distinct !{!242, !236}
!243 = !{!238, !240, !235}
!244 = distinct !{!244, !100, !101, !102}
!245 = distinct !{!245, !100, !101}
!246 = !{!46, !20, i64 8}
!247 = !{!46, !10, i64 2032}
!248 = !{!52, !10, i64 196}
!249 = !{!250}
!250 = distinct !{!250, !251}
!251 = distinct !{!251, !"LVerDomain"}
!252 = !{!253}
!253 = distinct !{!253, !251}
!254 = !{!255}
!255 = distinct !{!255, !251}
!256 = !{!257}
!257 = distinct !{!257, !251}
!258 = !{!253, !255, !250}
!259 = distinct !{!259, !100, !101, !102}
!260 = distinct !{!260, !100, !101}
!261 = !{!262}
!262 = distinct !{!262, !263}
!263 = distinct !{!263, !"LVerDomain"}
!264 = !{!265}
!265 = distinct !{!265, !263}
!266 = !{!267}
!267 = distinct !{!267, !263}
!268 = !{!269}
!269 = distinct !{!269, !263}
!270 = !{!265, !267, !262}
!271 = distinct !{!271, !100, !101, !102}
!272 = distinct !{!272, !100, !101}
!273 = !{!46, !20, i64 28}
!274 = !{!275}
!275 = distinct !{!275, !276}
!276 = distinct !{!276, !"LVerDomain"}
!277 = !{!278}
!278 = distinct !{!278, !276}
!279 = !{!280}
!280 = distinct !{!280, !276}
!281 = !{!275, !278}
!282 = distinct !{!282, !100, !101, !102}
!283 = distinct !{!283, !100, !101}
!284 = !{!46, !20, i64 30}
!285 = !{!286}
!286 = distinct !{!286, !287}
!287 = distinct !{!287, !"LVerDomain"}
!288 = !{!289}
!289 = distinct !{!289, !287}
!290 = !{!291}
!291 = distinct !{!291, !287}
!292 = !{!286, !289}
!293 = distinct !{!293, !100, !101, !102}
!294 = distinct !{!294, !100, !101}
!295 = distinct !{!295, !100}
!296 = distinct !{!296, !100}
!297 = !{!52, !10, i64 192}
!298 = !{!19, !10, i64 28}


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