; LLVM IR from CLASS-SZ/class_sz :: class-sz/tools (hyperspherical)

; 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.HypersphericalInterpolationStructure = type { i32, double, double, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr }

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @hyperspherical_Hermite_interpolation_vector(ptr noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) #2 {
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, 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 ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca double, align 8
  %64 = alloca double, align 8
  %65 = alloca double, align 8
  %66 = alloca double, align 8
  %67 = alloca double, align 8
  %68 = alloca double, align 8
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca ptr, align 8
  %75 = alloca ptr, align 8
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store i32 %1, ptr %9, align 4, !tbaa !9
  store i32 %2, ptr %10, align 4, !tbaa !9
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  store ptr %6, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  store i32 1, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  store i32 1, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  store i32 1, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  store i32 1, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  store double 0.000000e+00, ptr %19, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  store double 0.000000e+00, ptr %20, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  store double 0.000000e+00, ptr %21, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  store double 0.000000e+00, ptr %22, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  store double 0.000000e+00, ptr %23, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  store double 0.000000e+00, ptr %24, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  store double 0.000000e+00, ptr %31, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  store double 0.000000e+00, ptr %32, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  store double 0.000000e+00, ptr %33, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  store double 0.000000e+00, ptr %34, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  store double 0.000000e+00, ptr %37, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  store double 0.000000e+00, ptr %38, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  store double 0.000000e+00, ptr %39, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  store double 0.000000e+00, ptr %40, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #3
  store double 0.000000e+00, ptr %41, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  store double 0.000000e+00, ptr %42, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  store double 0.000000e+00, ptr %43, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  store double 0.000000e+00, ptr %44, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #3
  store double 0.000000e+00, ptr %46, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #3
  store double 0.000000e+00, ptr %47, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #3
  store double 0.000000e+00, ptr %48, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #3
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #3
  store double 0.000000e+00, ptr %50, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #3
  store double 0.000000e+00, ptr %51, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #3
  store double 0.000000e+00, ptr %52, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #3
  store double 0.000000e+00, ptr %53, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #3
  store double 0.000000e+00, ptr %54, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #3
  store double 0.000000e+00, ptr %55, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #3
  store i32 0, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #3
  store i32 1, ptr %76, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #3
  store i32 1, ptr %77, align 4, !tbaa !9
  %78 = load ptr, ptr %12, align 8, !tbaa !5
  %79 = icmp eq ptr %78, null
  br i1 %79, label %80, label %81

80:                                               ; preds = %7
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %82

81:                                               ; preds = %7
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %81, %80
  %83 = load ptr, ptr %13, align 8, !tbaa !5
  %84 = icmp eq ptr %83, null
  br i1 %84, label %85, label %86

85:                                               ; preds = %82
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %87

86:                                               ; preds = %82
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %87

87:                                               ; preds = %86, %85
  %88 = load ptr, ptr %14, align 8, !tbaa !5
  %89 = icmp eq ptr %88, null
  br i1 %89, label %90, label %91

90:                                               ; preds = %87
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %92

91:                                               ; preds = %87
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %92

92:                                               ; preds = %91, %90
  %93 = load i32, ptr %16, align 4, !tbaa !9
  %94 = icmp eq i32 %93, 1
  br i1 %94, label %98, label %95

95:                                               ; preds = %92
  %96 = load i32, ptr %17, align 4, !tbaa !9
  %97 = icmp eq i32 %96, 1
  br i1 %97, label %98, label %99

98:                                               ; preds = %95, %92
  store i32 1, ptr %18, align 4, !tbaa !9
  br label %100

99:                                               ; preds = %95
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %100

100:                                              ; preds = %99, %98
  %101 = load ptr, ptr %8, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %101, i32 0, i32 8
  %103 = load ptr, ptr %102, align 8, !tbaa !13
  store ptr %103, ptr %58, align 8, !tbaa !5
  %104 = load ptr, ptr %8, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %104, i32 0, i32 9
  %106 = load ptr, ptr %105, align 8, !tbaa !15
  store ptr %106, ptr %59, align 8, !tbaa !5
  %107 = load ptr, ptr %8, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %107, i32 0, i32 10
  %109 = load ptr, ptr %108, align 8, !tbaa !16
  store ptr %109, ptr %60, align 8, !tbaa !5
  %110 = load ptr, ptr %8, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %110, i32 0, i32 1
  %112 = load double, ptr %111, align 8, !tbaa !17
  store double %112, ptr %56, align 8, !tbaa !11
  %113 = load double, ptr %56, align 8, !tbaa !11
  %114 = load double, ptr %56, align 8, !tbaa !11
  %115 = fmul double %113, %114
  store double %115, ptr %57, align 8, !tbaa !11
  %116 = load ptr, ptr %8, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %116, i32 0, i32 2
  %118 = load double, ptr %117, align 8, !tbaa !18
  store double %118, ptr %63, align 8, !tbaa !11
  %119 = load double, ptr %63, align 8, !tbaa !11
  %120 = load double, ptr %63, align 8, !tbaa !11
  %121 = fmul double %119, %120
  store double %121, ptr %64, align 8, !tbaa !11
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %122, i32 0, i32 0
  %124 = load i32, ptr %123, align 8, !tbaa !19
  store i32 %124, ptr %69, align 4, !tbaa !9
  %125 = load ptr, ptr %8, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %125, i32 0, i32 7
  %127 = load i32, ptr %126, align 8, !tbaa !20
  store i32 %127, ptr %72, align 4, !tbaa !9
  %128 = load ptr, ptr %8, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %128, i32 0, i32 11
  %130 = load ptr, ptr %129, align 8, !tbaa !21
  %131 = load i32, ptr %10, align 4, !tbaa !9
  %132 = load i32, ptr %72, align 4, !tbaa !9
  %133 = mul nsw i32 %131, %132
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds double, ptr %130, i64 %134
  store ptr %135, ptr %74, align 8, !tbaa !5
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %136, i32 0, i32 12
  %138 = load ptr, ptr %137, align 8, !tbaa !22
  %139 = load i32, ptr %10, align 4, !tbaa !9
  %140 = load i32, ptr %72, align 4, !tbaa !9
  %141 = mul nsw i32 %139, %140
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds double, ptr %138, i64 %142
  store ptr %143, ptr %75, align 8, !tbaa !5
  %144 = load ptr, ptr %8, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %144, i32 0, i32 5
  %146 = load ptr, ptr %145, align 8, !tbaa !23
  %147 = load i32, ptr %10, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds i32, ptr %146, i64 %148
  %150 = load i32, ptr %149, align 4, !tbaa !9
  store i32 %150, ptr %70, align 4, !tbaa !9
  %151 = load i32, ptr %70, align 4, !tbaa !9
  %152 = sitofp i32 %151 to double
  %153 = load i32, ptr %70, align 4, !tbaa !9
  %154 = sitofp i32 %153 to double
  %155 = fadd double %154, 1.000000e+00
  %156 = fmul double %152, %155
  store double %156, ptr %65, align 8, !tbaa !11
  %157 = load ptr, ptr %58, align 8, !tbaa !5
  %158 = getelementptr inbounds double, ptr %157, i64 0
  %159 = load double, ptr %158, align 8, !tbaa !11
  store double %159, ptr %61, align 8, !tbaa !11
  %160 = load ptr, ptr %58, align 8, !tbaa !5
  %161 = load i32, ptr %72, align 4, !tbaa !9
  %162 = sub nsw i32 %161, 1
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds double, ptr %160, i64 %163
  %165 = load double, ptr %164, align 8, !tbaa !11
  store double %165, ptr %62, align 8, !tbaa !11
  %166 = load double, ptr %62, align 8, !tbaa !11
  store double %166, ptr %66, align 8, !tbaa !11
  %167 = load double, ptr %61, align 8, !tbaa !11
  store double %167, ptr %67, align 8, !tbaa !11
  %168 = load double, ptr %61, align 8, !tbaa !11
  store double %168, ptr %68, align 8, !tbaa !11
  store i32 0, ptr %71, align 4, !tbaa !9
  br label %169

169:                                              ; preds = %816, %100
  %170 = load i32, ptr %71, align 4, !tbaa !9
  %171 = load i32, ptr %9, align 4, !tbaa !9
  %172 = icmp slt i32 %170, %171
  br i1 %172, label %173, label %819

173:                                              ; preds = %169
  %174 = load ptr, ptr %11, align 8, !tbaa !5
  %175 = load i32, ptr %71, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds double, ptr %174, i64 %176
  %178 = load double, ptr %177, align 8, !tbaa !11
  store double %178, ptr %25, align 8, !tbaa !11
  %179 = load ptr, ptr %8, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %179, i32 0, i32 0
  %181 = load i32, ptr %180, align 8, !tbaa !19
  %182 = icmp eq i32 %181, 1
  br i1 %182, label %183, label %197

183:                                              ; preds = %173
  %184 = load ptr, ptr %8, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %184, i32 0, i32 5
  %186 = load ptr, ptr %185, align 8, !tbaa !23
  %187 = load i32, ptr %10, align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %186, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !9
  %191 = load ptr, ptr %8, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.HypersphericalInterpolationStructure, ptr %191, i32 0, i32 1
  %193 = load double, ptr %192, align 8, !tbaa !17
  %194 = fadd double %193, 2.000000e-01
  %195 = fptosi double %194 to i32
  %196 = call i32 @ClosedModY(i32 noundef %190, i32 noundef %195, ptr noundef %25, ptr noundef %76, ptr noundef %77)
  br label %197

197:                                              ; preds = %183, %173
  %198 = load double, ptr %25, align 8, !tbaa !11
  %199 = load double, ptr %61, align 8, !tbaa !11
  %200 = fcmp olt double %198, %199
  br i1 %200, label %205, label %201

201:                                              ; preds = %197
  %202 = load double, ptr %25, align 8, !tbaa !11
  %203 = load double, ptr %62, align 8, !tbaa !11
  %204 = fcmp ogt double %202, %203
  br i1 %204, label %205, label %230

205:                                              ; preds = %201, %197
  %206 = load i32, ptr %15, align 4, !tbaa !9
  %207 = icmp eq i32 %206, 1
  br i1 %207, label %208, label %213

208:                                              ; preds = %205
  %209 = load ptr, ptr %12, align 8, !tbaa !5
  %210 = load i32, ptr %71, align 4, !tbaa !9
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds double, ptr %209, i64 %211
  store double 0.000000e+00, ptr %212, align 8, !tbaa !11
  br label %213

213:                                              ; preds = %208, %205
  %214 = load i32, ptr %16, align 4, !tbaa !9
  %215 = icmp eq i32 %214, 1
  br i1 %215, label %216, label %221

216:                                              ; preds = %213
  %217 = load ptr, ptr %13, align 8, !tbaa !5
  %218 = load i32, ptr %71, align 4, !tbaa !9
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds double, ptr %217, i64 %219
  store double 0.000000e+00, ptr %220, align 8, !tbaa !11
  br label %221

221:                                              ; preds = %216, %213
  %222 = load i32, ptr %17, align 4, !tbaa !9
  %223 = icmp eq i32 %222, 1
  br i1 %223, label %224, label %229

224:                                              ; preds = %221
  %225 = load ptr, ptr %14, align 8, !tbaa !5
  %226 = load i32, ptr %71, align 4, !tbaa !9
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds double, ptr %225, i64 %227
  store double 0.000000e+00, ptr %228, align 8, !tbaa !11
  br label %229

229:                                              ; preds = %224, %221
  br label %816

230:                                              ; preds = %201
  %231 = load double, ptr %25, align 8, !tbaa !11
  %232 = load double, ptr %67, align 8, !tbaa !11
  %233 = fcmp ogt double %231, %232
  br i1 %233, label %238, label %234

234:                                              ; preds = %230
  %235 = load double, ptr %25, align 8, !tbaa !11
  %236 = load double, ptr %66, align 8, !tbaa !11
  %237 = fcmp olt double %235, %236
  br i1 %237, label %238, label %717

238:                                              ; preds = %234, %230
  %239 = load double, ptr %25, align 8, !tbaa !11
  %240 = load double, ptr %68, align 8, !tbaa !11
  %241 = fcmp ogt double %239, %240
  br i1 %241, label %246, label %242

242:                                              ; preds = %238
  %243 = load double, ptr %25, align 8, !tbaa !11
  %244 = load double, ptr %66, align 8, !tbaa !11
  %245 = fcmp olt double %243, %244
  br i1 %245, label %246, label %382

246:                                              ; preds = %242, %238
  %247 = load double, ptr %25, align 8, !tbaa !11
  %248 = load double, ptr %61, align 8, !tbaa !11
  %249 = fsub double %247, %248
  %250 = load double, ptr %63, align 8, !tbaa !11
  %251 = fdiv double %249, %250
  %252 = fptosi double %251 to i32
  %253 = add nsw i32 %252, 1
  store i32 %253, ptr %73, align 4, !tbaa !9
  %254 = load i32, ptr %73, align 4, !tbaa !9
  %255 = icmp slt i32 1, %254
  br i1 %255, label %256, label %258

256:                                              ; preds = %246
  %257 = load i32, ptr %73, align 4, !tbaa !9
  br label %259

258:                                              ; preds = %246
  br label %259

259:                                              ; preds = %258, %256
  %260 = phi i32 [ %257, %256 ], [ 1, %258 ]
  store i32 %260, ptr %73, align 4, !tbaa !9
  %261 = load i32, ptr %72, align 4, !tbaa !9
  %262 = sub nsw i32 %261, 1
  %263 = load i32, ptr %73, align 4, !tbaa !9
  %264 = icmp slt i32 %262, %263
  br i1 %264, label %265, label %268

265:                                              ; preds = %259
  %266 = load i32, ptr %72, align 4, !tbaa !9
  %267 = sub nsw i32 %266, 1
  br label %270

268:                                              ; preds = %259
  %269 = load i32, ptr %73, align 4, !tbaa !9
  br label %270

270:                                              ; preds = %268, %265
  %271 = phi i32 [ %267, %265 ], [ %269, %268 ]
  store i32 %271, ptr %73, align 4, !tbaa !9
  %272 = load ptr, ptr %60, align 8, !tbaa !5
  %273 = load i32, ptr %73, align 4, !tbaa !9
  %274 = sub nsw i32 %273, 1
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds double, ptr %272, i64 %275
  %277 = load double, ptr %276, align 8, !tbaa !11
  store double %277, ptr %31, align 8, !tbaa !11
  %278 = load ptr, ptr %59, align 8, !tbaa !5
  %279 = load i32, ptr %73, align 4, !tbaa !9
  %280 = sub nsw i32 %279, 1
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds double, ptr %278, i64 %281
  %283 = load double, ptr %282, align 8, !tbaa !11
  store double %283, ptr %33, align 8, !tbaa !11
  %284 = load double, ptr %33, align 8, !tbaa !11
  %285 = load double, ptr %33, align 8, !tbaa !11
  %286 = fmul double %284, %285
  store double %286, ptr %35, align 8, !tbaa !11
  %287 = load ptr, ptr %74, align 8, !tbaa !5
  %288 = load i32, ptr %73, align 4, !tbaa !9
  %289 = sub nsw i32 %288, 1
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds double, ptr %287, i64 %290
  %292 = load double, ptr %291, align 8, !tbaa !11
  store double %292, ptr %19, align 8, !tbaa !11
  %293 = load ptr, ptr %75, align 8, !tbaa !5
  %294 = load i32, ptr %73, align 4, !tbaa !9
  %295 = sub nsw i32 %294, 1
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds double, ptr %293, i64 %296
  %298 = load double, ptr %297, align 8, !tbaa !11
  store double %298, ptr %21, align 8, !tbaa !11
  %299 = load double, ptr %21, align 8, !tbaa !11
  %300 = fmul double -2.000000e+00, %299
  %301 = load double, ptr %31, align 8, !tbaa !11
  %302 = load double, ptr %19, align 8, !tbaa !11
  %303 = load double, ptr %65, align 8, !tbaa !11
  %304 = load double, ptr %35, align 8, !tbaa !11
  %305 = fdiv double %303, %304
  %306 = load double, ptr %57, align 8, !tbaa !11
  %307 = fsub double %305, %306
  %308 = load i32, ptr %69, align 4, !tbaa !9
  %309 = sitofp i32 %308 to double
  %310 = fadd double %307, %309
  %311 = fmul double %302, %310
  %312 = call double @llvm.fmuladd.f64(double %300, double %301, double %311)
  store double %312, ptr %23, align 8, !tbaa !11
  %313 = load i32, ptr %18, align 4, !tbaa !9
  %314 = icmp eq i32 %313, 1
  br i1 %314, label %315, label %340

315:                                              ; preds = %270
  %316 = load double, ptr %31, align 8, !tbaa !11
  %317 = fmul double -2.000000e+00, %316
  %318 = load double, ptr %23, align 8, !tbaa !11
  %319 = load double, ptr %19, align 8, !tbaa !11
  %320 = fmul double 2.000000e+00, %319
  %321 = load double, ptr %65, align 8, !tbaa !11
  %322 = fmul double %320, %321
  %323 = load double, ptr %31, align 8, !tbaa !11
  %324 = fmul double %322, %323
  %325 = load double, ptr %35, align 8, !tbaa !11
  %326 = fdiv double %324, %325
  %327 = fneg double %326
  %328 = call double @llvm.fmuladd.f64(double %317, double %318, double %327)
  %329 = load double, ptr %21, align 8, !tbaa !11
  %330 = load i32, ptr %69, align 4, !tbaa !9
  %331 = sitofp i32 %330 to double
  %332 = load double, ptr %57, align 8, !tbaa !11
  %333 = fsub double %331, %332
  %334 = load double, ptr %65, align 8, !tbaa !11
  %335 = fadd double 2.000000e+00, %334
  %336 = load double, ptr %35, align 8, !tbaa !11
  %337 = fdiv double %335, %336
  %338 = fadd double %333, %337
  %339 = call double @llvm.fmuladd.f64(double %329, double %338, double %328)
  store double %339, ptr %37, align 8, !tbaa !11
  br label %340

340:                                              ; preds = %315, %270
  %341 = load i32, ptr %17, align 4, !tbaa !9
  %342 = icmp eq i32 %341, 1
  br i1 %342, label %343, label %381

343:                                              ; preds = %340
  %344 = load double, ptr %31, align 8, !tbaa !11
  %345 = fmul double -2.000000e+00, %344
  %346 = load double, ptr %37, align 8, !tbaa !11
  %347 = load double, ptr %23, align 8, !tbaa !11
  %348 = load i32, ptr %69, align 4, !tbaa !9
  %349 = sitofp i32 %348 to double
  %350 = load double, ptr %57, align 8, !tbaa !11
  %351 = fsub double %349, %350
  %352 = load double, ptr %65, align 8, !tbaa !11
  %353 = fadd double 4.000000e+00, %352
  %354 = load double, ptr %35, align 8, !tbaa !11
  %355 = fdiv double %353, %354
  %356 = fadd double %351, %355
  %357 = fmul double %347, %356
  %358 = call double @llvm.fmuladd.f64(double %345, double %346, double %357)
  %359 = load double, ptr %21, align 8, !tbaa !11
  %360 = load double, ptr %65, align 8, !tbaa !11
  %361 = fadd double 1.000000e+00, %360
  %362 = fmul double -4.000000e+00, %361
  %363 = load double, ptr %31, align 8, !tbaa !11
  %364 = fmul double %362, %363
  %365 = load double, ptr %35, align 8, !tbaa !11
  %366 = fdiv double %364, %365
  %367 = call double @llvm.fmuladd.f64(double %359, double %366, double %358)
  %368 = load double, ptr %19, align 8, !tbaa !11
  %369 = load double, ptr %65, align 8, !tbaa !11
  %370 = fmul double 2.000000e+00, %369
  %371 = load double, ptr %35, align 8, !tbaa !11
  %372 = fdiv double %370, %371
  %373 = load double, ptr %31, align 8, !tbaa !11
  %374 = fmul double 2.000000e+00, %373
  %375 = load double, ptr %31, align 8, !tbaa !11
  %376 = load double, ptr %35, align 8, !tbaa !11
  %377 = fdiv double 1.000000e+00, %376
  %378 = call double @llvm.fmuladd.f64(double %374, double %375, double %377)
  %379 = fmul double %372, %378
  %380 = call double @llvm.fmuladd.f64(double %368, double %379, double %367)
  store double %380, ptr %39, align 8, !tbaa !11
  br label %381

381:                                              ; preds = %343, %340
  br label %392

382:                                              ; preds = %242
  %383 = load i32, ptr %73, align 4, !tbaa !9
  %384 = add nsw i32 %383, 1
  store i32 %384, ptr %73, align 4, !tbaa !9
  %385 = load double, ptr %20, align 8, !tbaa !11
  store double %385, ptr %19, align 8, !tbaa !11
  %386 = load double, ptr %22, align 8, !tbaa !11
  store double %386, ptr %21, align 8, !tbaa !11
  %387 = load double, ptr %24, align 8, !tbaa !11
  store double %387, ptr %23, align 8, !tbaa !11
  %388 = load double, ptr %38, align 8, !tbaa !11
  store double %388, ptr %37, align 8, !tbaa !11
  %389 = load double, ptr %40, align 8, !tbaa !11
  store double %389, ptr %39, align 8, !tbaa !11
  %390 = load double, ptr %34, align 8, !tbaa !11
  store double %390, ptr %33, align 8, !tbaa !11
  %391 = load double, ptr %32, align 8, !tbaa !11
  store double %391, ptr %31, align 8, !tbaa !11
  br label %392

392:                                              ; preds = %382, %381
  %393 = load ptr, ptr %58, align 8, !tbaa !5
  %394 = load i32, ptr %73, align 4, !tbaa !9
  %395 = sub nsw i32 %394, 1
  %396 = icmp slt i32 0, %395
  br i1 %396, label %397, label %400

397:                                              ; preds = %392
  %398 = load i32, ptr %73, align 4, !tbaa !9
  %399 = sub nsw i32 %398, 1
  br label %401

400:                                              ; preds = %392
  br label %401

401:                                              ; preds = %400, %397
  %402 = phi i32 [ %399, %397 ], [ 0, %400 ]
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds double, ptr %393, i64 %403
  %405 = load double, ptr %404, align 8, !tbaa !11
  store double %405, ptr %66, align 8, !tbaa !11
  %406 = load ptr, ptr %58, align 8, !tbaa !5
  %407 = load i32, ptr %73, align 4, !tbaa !9
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds double, ptr %406, i64 %408
  %410 = load double, ptr %409, align 8, !tbaa !11
  store double %410, ptr %67, align 8, !tbaa !11
  %411 = load ptr, ptr %58, align 8, !tbaa !5
  %412 = load i32, ptr %72, align 4, !tbaa !9
  %413 = sub nsw i32 %412, 1
  %414 = load i32, ptr %73, align 4, !tbaa !9
  %415 = add nsw i32 %414, 1
  %416 = icmp slt i32 %413, %415
  br i1 %416, label %417, label %420

417:                                              ; preds = %401
  %418 = load i32, ptr %72, align 4, !tbaa !9
  %419 = sub nsw i32 %418, 1
  br label %423

420:                                              ; preds = %401
  %421 = load i32, ptr %73, align 4, !tbaa !9
  %422 = add nsw i32 %421, 1
  br label %423

423:                                              ; preds = %420, %417
  %424 = phi i32 [ %419, %417 ], [ %422, %420 ]
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds double, ptr %411, i64 %425
  %427 = load double, ptr %426, align 8, !tbaa !11
  store double %427, ptr %68, align 8, !tbaa !11
  %428 = load ptr, ptr %60, align 8, !tbaa !5
  %429 = load i32, ptr %73, align 4, !tbaa !9
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds double, ptr %428, i64 %430
  %432 = load double, ptr %431, align 8, !tbaa !11
  store double %432, ptr %32, align 8, !tbaa !11
  %433 = load ptr, ptr %59, align 8, !tbaa !5
  %434 = load i32, ptr %73, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds double, ptr %433, i64 %435
  %437 = load double, ptr %436, align 8, !tbaa !11
  store double %437, ptr %34, align 8, !tbaa !11
  %438 = load double, ptr %34, align 8, !tbaa !11
  %439 = load double, ptr %34, align 8, !tbaa !11
  %440 = fmul double %438, %439
  store double %440, ptr %36, align 8, !tbaa !11
  %441 = load ptr, ptr %74, align 8, !tbaa !5
  %442 = load i32, ptr %73, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds double, ptr %441, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !11
  store double %445, ptr %20, align 8, !tbaa !11
  %446 = load ptr, ptr %75, align 8, !tbaa !5
  %447 = load i32, ptr %73, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %446, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !11
  store double %450, ptr %22, align 8, !tbaa !11
  %451 = load double, ptr %22, align 8, !tbaa !11
  %452 = fmul double -2.000000e+00, %451
  %453 = load double, ptr %32, align 8, !tbaa !11
  %454 = load double, ptr %20, align 8, !tbaa !11
  %455 = load double, ptr %65, align 8, !tbaa !11
  %456 = load double, ptr %36, align 8, !tbaa !11
  %457 = fdiv double %455, %456
  %458 = load double, ptr %57, align 8, !tbaa !11
  %459 = fsub double %457, %458
  %460 = load i32, ptr %69, align 4, !tbaa !9
  %461 = sitofp i32 %460 to double
  %462 = fadd double %459, %461
  %463 = fmul double %454, %462
  %464 = call double @llvm.fmuladd.f64(double %452, double %453, double %463)
  store double %464, ptr %24, align 8, !tbaa !11
  %465 = load i32, ptr %18, align 4, !tbaa !9
  %466 = icmp eq i32 %465, 1
  br i1 %466, label %467, label %492

467:                                              ; preds = %423
  %468 = load double, ptr %32, align 8, !tbaa !11
  %469 = fmul double -2.000000e+00, %468
  %470 = load double, ptr %24, align 8, !tbaa !11
  %471 = load double, ptr %20, align 8, !tbaa !11
  %472 = fmul double 2.000000e+00, %471
  %473 = load double, ptr %65, align 8, !tbaa !11
  %474 = fmul double %472, %473
  %475 = load double, ptr %32, align 8, !tbaa !11
  %476 = fmul double %474, %475
  %477 = load double, ptr %36, align 8, !tbaa !11
  %478 = fdiv double %476, %477
  %479 = fneg double %478
  %480 = call double @llvm.fmuladd.f64(double %469, double %470, double %479)
  %481 = load double, ptr %22, align 8, !tbaa !11
  %482 = load i32, ptr %69, align 4, !tbaa !9
  %483 = sitofp i32 %482 to double
  %484 = load double, ptr %57, align 8, !tbaa !11
  %485 = fsub double %483, %484
  %486 = load double, ptr %65, align 8, !tbaa !11
  %487 = fadd double 2.000000e+00, %486
  %488 = load double, ptr %36, align 8, !tbaa !11
  %489 = fdiv double %487, %488
  %490 = fadd double %485, %489
  %491 = call double @llvm.fmuladd.f64(double %481, double %490, double %480)
  store double %491, ptr %38, align 8, !tbaa !11
  br label %492

492:                                              ; preds = %467, %423
  %493 = load i32, ptr %17, align 4, !tbaa !9
  %494 = icmp eq i32 %493, 1
  br i1 %494, label %495, label %533

495:                                              ; preds = %492
  %496 = load double, ptr %32, align 8, !tbaa !11
  %497 = fmul double -2.000000e+00, %496
  %498 = load double, ptr %38, align 8, !tbaa !11
  %499 = load double, ptr %24, align 8, !tbaa !11
  %500 = load i32, ptr %69, align 4, !tbaa !9
  %501 = sitofp i32 %500 to double
  %502 = load double, ptr %57, align 8, !tbaa !11
  %503 = fsub double %501, %502
  %504 = load double, ptr %65, align 8, !tbaa !11
  %505 = fadd double 4.000000e+00, %504
  %506 = load double, ptr %36, align 8, !tbaa !11
  %507 = fdiv double %505, %506
  %508 = fadd double %503, %507
  %509 = fmul double %499, %508
  %510 = call double @llvm.fmuladd.f64(double %497, double %498, double %509)
  %511 = load double, ptr %22, align 8, !tbaa !11
  %512 = load double, ptr %65, align 8, !tbaa !11
  %513 = fadd double 1.000000e+00, %512
  %514 = fmul double -4.000000e+00, %513
  %515 = load double, ptr %32, align 8, !tbaa !11
  %516 = fmul double %514, %515
  %517 = load double, ptr %36, align 8, !tbaa !11
  %518 = fdiv double %516, %517
  %519 = call double @llvm.fmuladd.f64(double %511, double %518, double %510)
  %520 = load double, ptr %20, align 8, !tbaa !11
  %521 = load double, ptr %65, align 8, !tbaa !11
  %522 = fmul double 2.000000e+00, %521
  %523 = load double, ptr %36, align 8, !tbaa !11
  %524 = fdiv double %522, %523
  %525 = load double, ptr %32, align 8, !tbaa !11
  %526 = fmul double 2.000000e+00, %525
  %527 = load double, ptr %32, align 8, !tbaa !11
  %528 = load double, ptr %36, align 8, !tbaa !11
  %529 = fdiv double 1.000000e+00, %528
  %530 = call double @llvm.fmuladd.f64(double %526, double %527, double %529)
  %531 = fmul double %524, %530
  %532 = call double @llvm.fmuladd.f64(double %520, double %531, double %519)
  store double %532, ptr %40, align 8, !tbaa !11
  br label %533

533:                                              ; preds = %495, %492
  %534 = load i32, ptr %15, align 4, !tbaa !9
  %535 = icmp eq i32 %534, 1
  br i1 %535, label %536, label %594

536:                                              ; preds = %533
  %537 = load double, ptr %21, align 8, !tbaa !11
  %538 = load double, ptr %63, align 8, !tbaa !11
  %539 = fmul double %537, %538
  store double %539, ptr %41, align 8, !tbaa !11
  %540 = load double, ptr %23, align 8, !tbaa !11
  %541 = fmul double 5.000000e-01, %540
  %542 = load double, ptr %64, align 8, !tbaa !11
  %543 = fmul double %541, %542
  store double %543, ptr %42, align 8, !tbaa !11
  %544 = load double, ptr %23, align 8, !tbaa !11
  %545 = load double, ptr %24, align 8, !tbaa !11
  %546 = fmul double 5.000000e-01, %545
  %547 = call double @llvm.fmuladd.f64(double -1.500000e+00, double %544, double %546)
  %548 = load double, ptr %64, align 8, !tbaa !11
  %549 = load double, ptr %21, align 8, !tbaa !11
  %550 = load double, ptr %22, align 8, !tbaa !11
  %551 = fmul double 4.000000e+00, %550
  %552 = call double @llvm.fmuladd.f64(double 6.000000e+00, double %549, double %551)
  %553 = load double, ptr %63, align 8, !tbaa !11
  %554 = fmul double %552, %553
  %555 = fneg double %554
  %556 = call double @llvm.fmuladd.f64(double %547, double %548, double %555)
  %557 = load double, ptr %19, align 8, !tbaa !11
  %558 = load double, ptr %20, align 8, !tbaa !11
  %559 = fsub double %557, %558
  %560 = call double @llvm.fmuladd.f64(double -1.000000e+01, double %559, double %556)
  store double %560, ptr %43, align 8, !tbaa !11
  %561 = load double, ptr %23, align 8, !tbaa !11
  %562 = load double, ptr %24, align 8, !tbaa !11
  %563 = fneg double %562
  %564 = call double @llvm.fmuladd.f64(double 1.500000e+00, double %561, double %563)
  %565 = load double, ptr %64, align 8, !tbaa !11
  %566 = load double, ptr %21, align 8, !tbaa !11
  %567 = load double, ptr %22, align 8, !tbaa !11
  %568 = fmul double 7.000000e+00, %567
  %569 = call double @llvm.fmuladd.f64(double 8.000000e+00, double %566, double %568)
  %570 = load double, ptr %63, align 8, !tbaa !11
  %571 = fmul double %569, %570
  %572 = call double @llvm.fmuladd.f64(double %564, double %565, double %571)
  %573 = load double, ptr %19, align 8, !tbaa !11
  %574 = load double, ptr %20, align 8, !tbaa !11
  %575 = fsub double %573, %574
  %576 = call double @llvm.fmuladd.f64(double 1.500000e+01, double %575, double %572)
  store double %576, ptr %44, align 8, !tbaa !11
  %577 = load double, ptr %23, align 8, !tbaa !11
  %578 = load double, ptr %24, align 8, !tbaa !11
  %579 = fmul double 5.000000e-01, %578
  %580 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %577, double %579)
  %581 = load double, ptr %64, align 8, !tbaa !11
  %582 = load double, ptr %21, align 8, !tbaa !11
  %583 = load double, ptr %22, align 8, !tbaa !11
  %584 = fadd double %582, %583
  %585 = fmul double 3.000000e+00, %584
  %586 = load double, ptr %63, align 8, !tbaa !11
  %587 = fmul double %585, %586
  %588 = fneg double %587
  %589 = call double @llvm.fmuladd.f64(double %580, double %581, double %588)
  %590 = load double, ptr %19, align 8, !tbaa !11
  %591 = load double, ptr %20, align 8, !tbaa !11
  %592 = fsub double %590, %591
  %593 = call double @llvm.fmuladd.f64(double -6.000000e+00, double %592, double %589)
  store double %593, ptr %45, align 8, !tbaa !11
  br label %594

594:                                              ; preds = %536, %533
  %595 = load i32, ptr %16, align 4, !tbaa !9
  %596 = icmp eq i32 %595, 1
  br i1 %596, label %597, label %655

597:                                              ; preds = %594
  %598 = load double, ptr %23, align 8, !tbaa !11
  %599 = load double, ptr %63, align 8, !tbaa !11
  %600 = fmul double %598, %599
  store double %600, ptr %46, align 8, !tbaa !11
  %601 = load double, ptr %37, align 8, !tbaa !11
  %602 = fmul double 5.000000e-01, %601
  %603 = load double, ptr %64, align 8, !tbaa !11
  %604 = fmul double %602, %603
  store double %604, ptr %47, align 8, !tbaa !11
  %605 = load double, ptr %37, align 8, !tbaa !11
  %606 = load double, ptr %38, align 8, !tbaa !11
  %607 = fmul double 5.000000e-01, %606
  %608 = call double @llvm.fmuladd.f64(double -1.500000e+00, double %605, double %607)
  %609 = load double, ptr %64, align 8, !tbaa !11
  %610 = load double, ptr %23, align 8, !tbaa !11
  %611 = load double, ptr %24, align 8, !tbaa !11
  %612 = fmul double 4.000000e+00, %611
  %613 = call double @llvm.fmuladd.f64(double 6.000000e+00, double %610, double %612)
  %614 = load double, ptr %63, align 8, !tbaa !11
  %615 = fmul double %613, %614
  %616 = fneg double %615
  %617 = call double @llvm.fmuladd.f64(double %608, double %609, double %616)
  %618 = load double, ptr %21, align 8, !tbaa !11
  %619 = load double, ptr %22, align 8, !tbaa !11
  %620 = fsub double %618, %619
  %621 = call double @llvm.fmuladd.f64(double -1.000000e+01, double %620, double %617)
  store double %621, ptr %48, align 8, !tbaa !11
  %622 = load double, ptr %37, align 8, !tbaa !11
  %623 = load double, ptr %38, align 8, !tbaa !11
  %624 = fneg double %623
  %625 = call double @llvm.fmuladd.f64(double 1.500000e+00, double %622, double %624)
  %626 = load double, ptr %64, align 8, !tbaa !11
  %627 = load double, ptr %23, align 8, !tbaa !11
  %628 = load double, ptr %24, align 8, !tbaa !11
  %629 = fmul double 7.000000e+00, %628
  %630 = call double @llvm.fmuladd.f64(double 8.000000e+00, double %627, double %629)
  %631 = load double, ptr %63, align 8, !tbaa !11
  %632 = fmul double %630, %631
  %633 = call double @llvm.fmuladd.f64(double %625, double %626, double %632)
  %634 = load double, ptr %21, align 8, !tbaa !11
  %635 = load double, ptr %22, align 8, !tbaa !11
  %636 = fsub double %634, %635
  %637 = call double @llvm.fmuladd.f64(double 1.500000e+01, double %636, double %633)
  store double %637, ptr %49, align 8, !tbaa !11
  %638 = load double, ptr %37, align 8, !tbaa !11
  %639 = load double, ptr %38, align 8, !tbaa !11
  %640 = fmul double 5.000000e-01, %639
  %641 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %638, double %640)
  %642 = load double, ptr %64, align 8, !tbaa !11
  %643 = load double, ptr %23, align 8, !tbaa !11
  %644 = load double, ptr %24, align 8, !tbaa !11
  %645 = fadd double %643, %644
  %646 = fmul double 3.000000e+00, %645
  %647 = load double, ptr %63, align 8, !tbaa !11
  %648 = fmul double %646, %647
  %649 = fneg double %648
  %650 = call double @llvm.fmuladd.f64(double %641, double %642, double %649)
  %651 = load double, ptr %21, align 8, !tbaa !11
  %652 = load double, ptr %22, align 8, !tbaa !11
  %653 = fsub double %651, %652
  %654 = call double @llvm.fmuladd.f64(double -6.000000e+00, double %653, double %650)
  store double %654, ptr %50, align 8, !tbaa !11
  br label %655

655:                                              ; preds = %597, %594
  %656 = load i32, ptr %17, align 4, !tbaa !9
  %657 = icmp eq i32 %656, 1
  br i1 %657, label %658, label %716

658:                                              ; preds = %655
  %659 = load double, ptr %37, align 8, !tbaa !11
  %660 = load double, ptr %63, align 8, !tbaa !11
  %661 = fmul double %659, %660
  store double %661, ptr %51, align 8, !tbaa !11
  %662 = load double, ptr %39, align 8, !tbaa !11
  %663 = fmul double 5.000000e-01, %662
  %664 = load double, ptr %64, align 8, !tbaa !11
  %665 = fmul double %663, %664
  store double %665, ptr %52, align 8, !tbaa !11
  %666 = load double, ptr %39, align 8, !tbaa !11
  %667 = load double, ptr %40, align 8, !tbaa !11
  %668 = fmul double 5.000000e-01, %667
  %669 = call double @llvm.fmuladd.f64(double -1.500000e+00, double %666, double %668)
  %670 = load double, ptr %64, align 8, !tbaa !11
  %671 = load double, ptr %37, align 8, !tbaa !11
  %672 = load double, ptr %38, align 8, !tbaa !11
  %673 = fmul double 4.000000e+00, %672
  %674 = call double @llvm.fmuladd.f64(double 6.000000e+00, double %671, double %673)
  %675 = load double, ptr %63, align 8, !tbaa !11
  %676 = fmul double %674, %675
  %677 = fneg double %676
  %678 = call double @llvm.fmuladd.f64(double %669, double %670, double %677)
  %679 = load double, ptr %23, align 8, !tbaa !11
  %680 = load double, ptr %24, align 8, !tbaa !11
  %681 = fsub double %679, %680
  %682 = call double @llvm.fmuladd.f64(double -1.000000e+01, double %681, double %678)
  store double %682, ptr %53, align 8, !tbaa !11
  %683 = load double, ptr %39, align 8, !tbaa !11
  %684 = load double, ptr %40, align 8, !tbaa !11
  %685 = fneg double %684
  %686 = call double @llvm.fmuladd.f64(double 1.500000e+00, double %683, double %685)
  %687 = load double, ptr %64, align 8, !tbaa !11
  %688 = load double, ptr %37, align 8, !tbaa !11
  %689 = load double, ptr %38, align 8, !tbaa !11
  %690 = fmul double 7.000000e+00, %689
  %691 = call double @llvm.fmuladd.f64(double 8.000000e+00, double %688, double %690)
  %692 = load double, ptr %63, align 8, !tbaa !11
  %693 = fmul double %691, %692
  %694 = call double @llvm.fmuladd.f64(double %686, double %687, double %693)
  %695 = load double, ptr %23, align 8, !tbaa !11
  %696 = load double, ptr %24, align 8, !tbaa !11
  %697 = fsub double %695, %696
  %698 = call double @llvm.fmuladd.f64(double 1.500000e+01, double %697, double %694)
  store double %698, ptr %54, align 8, !tbaa !11
  %699 = load double, ptr %39, align 8, !tbaa !11
  %700 = load double, ptr %40, align 8, !tbaa !11
  %701 = fmul double 5.000000e-01, %700
  %702 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %699, double %701)
  %703 = load double, ptr %64, align 8, !tbaa !11
  %704 = load double, ptr %37, align 8, !tbaa !11
  %705 = load double, ptr %38, align 8, !tbaa !11
  %706 = fadd double %704, %705
  %707 = fmul double 3.000000e+00, %706
  %708 = load double, ptr %63, align 8, !tbaa !11
  %709 = fmul double %707, %708
  %710 = fneg double %709
  %711 = call double @llvm.fmuladd.f64(double %702, double %703, double %710)
  %712 = load double, ptr %23, align 8, !tbaa !11
  %713 = load double, ptr %24, align 8, !tbaa !11
  %714 = fsub double %712, %713
  %715 = call double @llvm.fmuladd.f64(double -6.000000e+00, double %714, double %711)
  store double %715, ptr %55, align 8, !tbaa !11
  br label %716

716:                                              ; preds = %658, %655
  br label %717

717:                                              ; preds = %716, %234
  %718 = load double, ptr %25, align 8, !tbaa !11
  %719 = load double, ptr %66, align 8, !tbaa !11
  %720 = fsub double %718, %719
  %721 = load double, ptr %63, align 8, !tbaa !11
  %722 = fdiv double %720, %721
  store double %722, ptr %26, align 8, !tbaa !11
  %723 = load double, ptr %26, align 8, !tbaa !11
  %724 = load double, ptr %26, align 8, !tbaa !11
  %725 = fmul double %723, %724
  store double %725, ptr %27, align 8, !tbaa !11
  %726 = load double, ptr %27, align 8, !tbaa !11
  %727 = load double, ptr %26, align 8, !tbaa !11
  %728 = fmul double %726, %727
  store double %728, ptr %28, align 8, !tbaa !11
  %729 = load double, ptr %27, align 8, !tbaa !11
  %730 = load double, ptr %27, align 8, !tbaa !11
  %731 = fmul double %729, %730
  store double %731, ptr %29, align 8, !tbaa !11
  %732 = load double, ptr %27, align 8, !tbaa !11
  %733 = load double, ptr %28, align 8, !tbaa !11
  %734 = fmul double %732, %733
  store double %734, ptr %30, align 8, !tbaa !11
  %735 = load i32, ptr %15, align 4, !tbaa !9
  %736 = icmp eq i32 %735, 1
  br i1 %736, label %737, label %761

737:                                              ; preds = %717
  %738 = load double, ptr %19, align 8, !tbaa !11
  %739 = load double, ptr %41, align 8, !tbaa !11
  %740 = load double, ptr %26, align 8, !tbaa !11
  %741 = call double @llvm.fmuladd.f64(double %739, double %740, double %738)
  %742 = load double, ptr %42, align 8, !tbaa !11
  %743 = load double, ptr %27, align 8, !tbaa !11
  %744 = call double @llvm.fmuladd.f64(double %742, double %743, double %741)
  %745 = load double, ptr %43, align 8, !tbaa !11
  %746 = load double, ptr %28, align 8, !tbaa !11
  %747 = call double @llvm.fmuladd.f64(double %745, double %746, double %744)
  %748 = load double, ptr %44, align 8, !tbaa !11
  %749 = load double, ptr %29, align 8, !tbaa !11
  %750 = call double @llvm.fmuladd.f64(double %748, double %749, double %747)
  %751 = load double, ptr %45, align 8, !tbaa !11
  %752 = load double, ptr %30, align 8, !tbaa !11
  %753 = call double @llvm.fmuladd.f64(double %751, double %752, double %750)
  %754 = load i32, ptr %76, align 4, !tbaa !9
  %755 = sitofp i32 %754 to double
  %756 = fmul double %753, %755
  %757 = load ptr, ptr %12, align 8, !tbaa !5
  %758 = load i32, ptr %71, align 4, !tbaa !9
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds double, ptr %757, i64 %759
  store double %756, ptr %760, align 8, !tbaa !11
  br label %761

761:                                              ; preds = %737, %717
  %762 = load i32, ptr %16, align 4, !tbaa !9
  %763 = icmp eq i32 %762, 1
  br i1 %763, label %764, label %788

764:                                              ; preds = %761
  %765 = load double, ptr %21, align 8, !tbaa !11
  %766 = load double, ptr %46, align 8, !tbaa !11
  %767 = load double, ptr %26, align 8, !tbaa !11
  %768 = call double @llvm.fmuladd.f64(double %766, double %767, double %765)
  %769 = load double, ptr %47, align 8, !tbaa !11
  %770 = load double, ptr %27, align 8, !tbaa !11
  %771 = call double @llvm.fmuladd.f64(double %769, double %770, double %768)
  %772 = load double, ptr %48, align 8, !tbaa !11
  %773 = load double, ptr %28, align 8, !tbaa !11
  %774 = call double @llvm.fmuladd.f64(double %772, double %773, double %771)
  %775 = load double, ptr %49, align 8, !tbaa !11
  %776 = load double, ptr %29, align 8, !tbaa !11
  %777 = call double @llvm.fmuladd.f64(double %775, double %776, double %774)
  %778 = load double, ptr %50, align 8, !tbaa !11
  %779 = load double, ptr %30, align 8, !tbaa !11
  %780 = call double @llvm.fmuladd.f64(double %778, double %779, double %777)
  %781 = load i32, ptr %77, align 4, !tbaa !9
  %782 = sitofp i32 %781 to double
  %783 = fmul double %780, %782
  %784 = load ptr, ptr %13, align 8, !tbaa !5
  %785 = load i32, ptr %71, align 4, !tbaa !9
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds double, ptr %784, i64 %786
  store double %783, ptr %787, align 8, !tbaa !11
  br label %788

788:                                              ; preds = %764, %761
  %789 = load i32, ptr %17, align 4, !tbaa !9
  %790 = icmp eq i32 %789, 1
  br i1 %790, label %791, label %815

791:                                              ; preds = %788
  %792 = load double, ptr %23, align 8, !tbaa !11
  %793 = load double, ptr %51, align 8, !tbaa !11
  %794 = load double, ptr %26, align 8, !tbaa !11
  %795 = call double @llvm.fmuladd.f64(double %793, double %794, double %792)
  %796 = load double, ptr %52, align 8, !tbaa !11
  %797 = load double, ptr %27, align 8, !tbaa !11
  %798 = call double @llvm.fmuladd.f64(double %796, double %797, double %795)
  %799 = load double, ptr %53, align 8, !tbaa !11
  %800 = load double, ptr %28, align 8, !tbaa !11
  %801 = call double @llvm.fmuladd.f64(double %799, double %800, double %798)
  %802 = load double, ptr %54, align 8, !tbaa !11
  %803 = load double, ptr %29, align 8, !tbaa !11
  %804 = call double @llvm.fmuladd.f64(double %802, double %803, double %801)
  %805 = load double, ptr %55, align 8, !tbaa !11
  %806 = load double, ptr %30, align 8, !tbaa !11
  %807 = call double @llvm.fmuladd.f64(double %805, double %806, double %804)
  %808 = load i32, ptr %76, align 4, !tbaa !9
  %809 = sitofp i32 %808 to double
  %810 = fmul double %807, %809
  %811 = load ptr, ptr %14, align 8, !tbaa !5
  %812 = load i32, ptr %71, align 4, !tbaa !9
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds double, ptr %811, i64 %813
  store double %810, ptr %814, align 8, !tbaa !11
  br label %815

815:                                              ; preds = %791, %788
  br label %816

816:                                              ; preds = %815, %229
  %817 = load i32, ptr %71, align 4, !tbaa !9
  %818 = add nsw i32 %817, 1
  store i32 %818, ptr %71, align 4, !tbaa !9
  br label %169, !llvm.loop !24

819:                                              ; preds = %169
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  ret i32 0
}

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !6, i64 56}
!14 = !{!"HypersphericalInterpolationStructure", !10, i64 0, !12, i64 8, !12, i64 16, !10, i64 24, !10, i64 28, !6, i64 32, !6, i64 40, !10, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88}
!15 = !{!14, !6, i64 64}
!16 = !{!14, !6, i64 72}
!17 = !{!14, !12, i64 8}
!18 = !{!14, !12, i64 16}
!19 = !{!14, !10, i64 0}
!20 = !{!14, !10, i64 48}
!21 = !{!14, !6, i64 80}
!22 = !{!14, !6, i64 88}
!23 = !{!14, !6, i64 32}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}


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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @hyperspherical_Hermite_interpolation_vector(ptr nocapture noundef readonly %0, i32 noundef %1, i32 noundef %2, ptr nocapture noundef readonly %3, ptr noundef writeonly %4, ptr noundef writeonly %5, ptr noundef writeonly %6) local_unnamed_addr #2 {
  %8 = alloca double, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #4
  store i32 1, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  store i32 1, ptr %10, align 4, !tbaa !5
  %.not.not.not = icmp eq ptr %4, null
  %11 = icmp ne ptr %5, null
  %12 = icmp ne ptr %6, null
  %or.cond = or i1 %11, %12
  %13 = getelementptr inbounds i8, ptr %0, i64 56
  %14 = load ptr, ptr %13, align 8, !tbaa !9
  %15 = getelementptr inbounds i8, ptr %0, i64 64
  %16 = load ptr, ptr %15, align 8, !tbaa !13
  %17 = getelementptr inbounds i8, ptr %0, i64 72
  %18 = load ptr, ptr %17, align 8, !tbaa !14
  %19 = getelementptr inbounds i8, ptr %0, i64 8
  %20 = load double, ptr %19, align 8, !tbaa !15
  %21 = fmul double %20, %20
  %22 = getelementptr inbounds i8, ptr %0, i64 16
  %23 = load double, ptr %22, align 8, !tbaa !16
  %24 = fmul double %23, %23
  %25 = getelementptr inbounds i8, ptr %0, i64 48
  %26 = load i32, ptr %25, align 8, !tbaa !17
  %27 = getelementptr inbounds i8, ptr %0, i64 80
  %28 = load ptr, ptr %27, align 8, !tbaa !18
  %29 = mul nsw i32 %26, %2
  %30 = sext i32 %29 to i64
  %31 = getelementptr inbounds double, ptr %28, i64 %30
  %32 = getelementptr inbounds i8, ptr %0, i64 88
  %33 = load ptr, ptr %32, align 8, !tbaa !19
  %34 = getelementptr inbounds double, ptr %33, i64 %30
  %35 = getelementptr inbounds i8, ptr %0, i64 32
  %36 = load ptr, ptr %35, align 8, !tbaa !20
  %37 = sext i32 %2 to i64
  %38 = getelementptr inbounds i32, ptr %36, i64 %37
  %39 = load i32, ptr %38, align 4, !tbaa !5
  %40 = sitofp i32 %39 to double
  %41 = fadd double %40, 1.000000e+00
  %42 = fmul double %41, %40
  %43 = load double, ptr %14, align 8, !tbaa !21
  %44 = add nsw i32 %26, -1
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds double, ptr %14, i64 %45
  %47 = load double, ptr %46, align 8, !tbaa !21
  %invariant.gep = getelementptr i8, ptr %14, i64 -8
  %48 = icmp sgt i32 %1, 0
  br i1 %48, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %7
  %49 = load i32, ptr %0, align 8, !tbaa !22
  %50 = sitofp i32 %49 to double
  %51 = fsub double %50, %21
  %52 = fadd double %42, 2.000000e+00
  %53 = fadd double %42, 4.000000e+00
  %54 = fadd double %42, 1.000000e+00
  %55 = fmul double %54, -4.000000e+00
  %56 = fmul double %42, 2.000000e+00
  %wide.trip.count = zext nneg i32 %1 to i64
  %57 = insertelement <2 x double> poison, double %24, i64 0
  %58 = shufflevector <2 x double> %57, <2 x double> poison, <2 x i32> zeroinitializer
  %59 = insertelement <2 x double> poison, double %23, i64 0
  %60 = shufflevector <2 x double> %59, <2 x double> poison, <2 x i32> zeroinitializer
  br label %61

61:                                               ; preds = %.lr.ph, %338
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %338 ]
  %.0316468 = phi i32 [ 0, %.lr.ph ], [ %.3, %338 ]
  %.0320466 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3323, %338 ]
  %.0324465 = phi double [ %43, %.lr.ph ], [ %.2326, %338 ]
  %.0327464 = phi double [ %43, %.lr.ph ], [ %.2329, %338 ]
  %.0330463 = phi double [ %47, %.lr.ph ], [ %.2332, %338 ]
  %.0333462 = phi double [ 0.000000e+00, %.lr.ph ], [ %.2335, %338 ]
  %.0336461 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3339, %338 ]
  %.0340460 = phi double [ 0.000000e+00, %.lr.ph ], [ %.2342, %338 ]
  %.0343459 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3346, %338 ]
  %.0347458 = phi double [ 0.000000e+00, %.lr.ph ], [ %.2349, %338 ]
  %.0356455 = phi double [ 0.000000e+00, %.lr.ph ], [ %.4, %338 ]
  %.0360454 = phi double [ 0.000000e+00, %.lr.ph ], [ %.2362, %338 ]
  %.0369451 = phi double [ 0.000000e+00, %.lr.ph ], [ %.2371, %338 ]
  %.0372450 = phi double [ 0.000000e+00, %.lr.ph ], [ %.2374, %338 ]
  %.0375449 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3378, %338 ]
  %.0387446 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3390, %338 ]
  %.0391445 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3394, %338 ]
  %.0395444 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3398, %338 ]
  %.0407441 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3410, %338 ]
  %.0411440 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3414, %338 ]
  %.0415439 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3418, %338 ]
  %.0419438 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3422, %338 ]
  %.0423437 = phi double [ 0.000000e+00, %.lr.ph ], [ %.3426, %338 ]
  %62 = phi <2 x double> [ zeroinitializer, %.lr.ph ], [ %339, %338 ]
  %63 = phi <2 x double> [ zeroinitializer, %.lr.ph ], [ %340, %338 ]
  %64 = phi <2 x double> [ zeroinitializer, %.lr.ph ], [ %341, %338 ]
  %65 = getelementptr inbounds double, ptr %3, i64 %indvars.iv
  %66 = load double, ptr %65, align 8, !tbaa !21
  store double %66, ptr %8, align 8, !tbaa !21
  %67 = load i32, ptr %0, align 8, !tbaa !22
  %68 = icmp eq i32 %67, 1
  br i1 %68, label %69, label %77

69:                                               ; preds = %61
  %70 = load ptr, ptr %35, align 8, !tbaa !20
  %71 = getelementptr inbounds i32, ptr %70, i64 %37
  %72 = load i32, ptr %71, align 4, !tbaa !5
  %73 = load double, ptr %19, align 8, !tbaa !15
  %74 = fadd double %73, 2.000000e-01
  %75 = fptosi double %74 to i32
  %76 = call i32 @ClosedModY(i32 noundef %72, i32 noundef %75, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10)
  %.pre = load double, ptr %8, align 8, !tbaa !21
  br label %77

77:                                               ; preds = %69, %61
  %78 = phi double [ %.pre, %69 ], [ %66, %61 ]
  %79 = fcmp olt double %78, %43
  %80 = fcmp ogt double %78, %47
  %or.cond430 = select i1 %79, i1 true, i1 %80
  br i1 %or.cond430, label %81, label %88

81:                                               ; preds = %77
  br i1 %.not.not.not, label %84, label %82

82:                                               ; preds = %81
  %83 = getelementptr inbounds double, ptr %4, i64 %indvars.iv
  store double 0.000000e+00, ptr %83, align 8, !tbaa !21
  br label %84

84:                                               ; preds = %82, %81
  br i1 %11, label %85, label %87

85:                                               ; preds = %84
  %86 = getelementptr inbounds double, ptr %5, i64 %indvars.iv
  store double 0.000000e+00, ptr %86, align 8, !tbaa !21
  br label %87

87:                                               ; preds = %85, %84
  br i1 %12, label %.sink.split, label %338

88:                                               ; preds = %77
  %89 = fcmp ogt double %78, %.0327464
  %90 = fcmp olt double %78, %.0330463
  %or.cond431 = select i1 %89, i1 true, i1 %90
  br i1 %or.cond431, label %91, label %287

91:                                               ; preds = %88
  %92 = fcmp ogt double %78, %.0324465
  %or.cond432 = select i1 %92, i1 true, i1 %90
  br i1 %or.cond432, label %93, label %141

93:                                               ; preds = %91
  %94 = fsub double %78, %43
  %95 = fdiv double %94, %23
  %96 = fptosi double %95 to i32
  %97 = call i32 @llvm.smax.i32(i32 %96, i32 0)
  %98 = add nuw nsw i32 %97, 1
  %99 = call i32 @llvm.smin.i32(i32 %44, i32 %98)
  %100 = add nsw i32 %99, -1
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds double, ptr %18, i64 %101
  %103 = load double, ptr %102, align 8, !tbaa !21
  %104 = getelementptr inbounds double, ptr %16, i64 %101
  %105 = load double, ptr %104, align 8, !tbaa !21
  %106 = fmul double %105, %105
  %107 = getelementptr inbounds double, ptr %31, i64 %101
  %108 = load double, ptr %107, align 8, !tbaa !21
  %109 = getelementptr inbounds double, ptr %34, i64 %101
  %110 = load double, ptr %109, align 8, !tbaa !21
  %111 = fmul double %110, -2.000000e+00
  %112 = fdiv double %42, %106
  %113 = fsub double %112, %21
  %114 = fadd double %113, %50
  %115 = fmul double %108, %114
  %116 = call double @llvm.fmuladd.f64(double %111, double %103, double %115)
  br i1 %or.cond, label %117, label %.thread

117:                                              ; preds = %93
  %118 = fmul double %103, -2.000000e+00
  %119 = fmul double %108, -2.000000e+00
  %120 = fmul double %42, %119
  %121 = fmul double %103, %120
  %122 = fdiv double %121, %106
  %123 = call double @llvm.fmuladd.f64(double %118, double %116, double %122)
  %124 = fdiv double %52, %106
  %125 = fadd double %51, %124
  %126 = call double @llvm.fmuladd.f64(double %110, double %125, double %123)
  br i1 %12, label %127, label %.thread

127:                                              ; preds = %117
  %128 = fdiv double %53, %106
  %129 = fadd double %51, %128
  %130 = fmul double %129, %116
  %131 = call double @llvm.fmuladd.f64(double %118, double %126, double %130)
  %132 = fmul double %55, %103
  %133 = fdiv double %132, %106
  %134 = call double @llvm.fmuladd.f64(double %110, double %133, double %131)
  %135 = fdiv double %56, %106
  %136 = fmul double %103, 2.000000e+00
  %137 = fdiv double 1.000000e+00, %106
  %138 = call double @llvm.fmuladd.f64(double %136, double %103, double %137)
  %139 = fmul double %135, %138
  %140 = call double @llvm.fmuladd.f64(double %108, double %139, double %134)
  br label %.thread

141:                                              ; preds = %91
  %142 = add nsw i32 %.0316468, 1
  br label %.thread

.thread:                                          ; preds = %93, %117, %127, %141
  %.1420 = phi double [ %140, %127 ], [ %.0419438, %117 ], [ %.0415439, %141 ], [ %.0419438, %93 ]
  %.2358 = phi double [ %126, %127 ], [ %126, %117 ], [ %.0423437, %141 ], [ %.0356455, %93 ]
  %.1344 = phi double [ %116, %127 ], [ %116, %117 ], [ %.0347458, %141 ], [ %116, %93 ]
  %.1337 = phi double [ %110, %127 ], [ %110, %117 ], [ %.0340460, %141 ], [ %110, %93 ]
  %.1321 = phi double [ %108, %127 ], [ %108, %117 ], [ %.0333462, %141 ], [ %108, %93 ]
  %.1 = phi i32 [ %99, %127 ], [ %99, %117 ], [ %142, %141 ], [ %99, %93 ]
  %143 = call i32 @llvm.smax.i32(i32 %.1, i32 1)
  %144 = zext nneg i32 %143 to i64
  %gep = getelementptr double, ptr %invariant.gep, i64 %144
  %145 = load double, ptr %gep, align 8, !tbaa !21
  %146 = sext i32 %.1 to i64
  %147 = getelementptr inbounds double, ptr %14, i64 %146
  %148 = load double, ptr %147, align 8, !tbaa !21
  %149 = add nsw i32 %.1, 1
  %150 = call i32 @llvm.smin.i32(i32 %44, i32 %149)
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds double, ptr %14, i64 %151
  %153 = load double, ptr %152, align 8, !tbaa !21
  %154 = getelementptr inbounds double, ptr %18, i64 %146
  %155 = load double, ptr %154, align 8, !tbaa !21
  %156 = getelementptr inbounds double, ptr %16, i64 %146
  %157 = load double, ptr %156, align 8, !tbaa !21
  %158 = fmul double %157, %157
  %159 = getelementptr inbounds double, ptr %31, i64 %146
  %160 = load double, ptr %159, align 8, !tbaa !21
  %161 = getelementptr inbounds double, ptr %34, i64 %146
  %162 = load double, ptr %161, align 8, !tbaa !21
  %163 = fmul double %162, -2.000000e+00
  %164 = fdiv double %42, %158
  %165 = fsub double %164, %21
  %166 = fadd double %165, %50
  %167 = fmul double %160, %166
  %168 = call double @llvm.fmuladd.f64(double %163, double %155, double %167)
  br i1 %or.cond, label %169, label %.thread434

169:                                              ; preds = %.thread
  %170 = fmul double %155, -2.000000e+00
  %171 = fmul double %160, -2.000000e+00
  %172 = fmul double %42, %171
  %173 = fmul double %155, %172
  %174 = fdiv double %173, %158
  %175 = call double @llvm.fmuladd.f64(double %170, double %168, double %174)
  %176 = fdiv double %52, %158
  %177 = fadd double %51, %176
  %178 = call double @llvm.fmuladd.f64(double %162, double %177, double %175)
  br i1 %12, label %179, label %.thread434

179:                                              ; preds = %169
  %180 = fdiv double %53, %158
  %181 = fadd double %51, %180
  %182 = fmul double %181, %168
  %183 = call double @llvm.fmuladd.f64(double %170, double %178, double %182)
  %184 = fmul double %55, %155
  %185 = fdiv double %184, %158
  %186 = call double @llvm.fmuladd.f64(double %162, double %185, double %183)
  %187 = fdiv double %56, %158
  %188 = fmul double %155, 2.000000e+00
  %189 = fdiv double 1.000000e+00, %158
  %190 = call double @llvm.fmuladd.f64(double %188, double %155, double %189)
  %191 = fmul double %187, %190
  %192 = call double @llvm.fmuladd.f64(double %160, double %191, double %186)
  br label %.thread434

.thread434:                                       ; preds = %.thread, %179, %169
  %.1424436 = phi double [ %178, %179 ], [ %178, %169 ], [ %.0423437, %.thread ]
  %.1416 = phi double [ %192, %179 ], [ %.0415439, %169 ], [ %.0415439, %.thread ]
  br i1 %.not.not.not, label %223, label %193

193:                                              ; preds = %.thread434
  %194 = fmul double %23, %.1337
  %195 = fmul double %.1344, 5.000000e-01
  %196 = fmul double %24, %195
  %197 = fmul double %168, 5.000000e-01
  %198 = fmul double %162, 4.000000e+00
  %199 = call double @llvm.fmuladd.f64(double %.1337, double 6.000000e+00, double %198)
  %200 = fneg double %199
  %201 = fsub double %.1321, %160
  %202 = fneg double %168
  %203 = fmul double %162, 7.000000e+00
  %204 = call double @llvm.fmuladd.f64(double %.1337, double 8.000000e+00, double %203)
  %205 = insertelement <2 x double> poison, double %.1344, i64 0
  %206 = shufflevector <2 x double> %205, <2 x double> poison, <2 x i32> zeroinitializer
  %207 = insertelement <2 x double> poison, double %197, i64 0
  %208 = insertelement <2 x double> %207, double %202, i64 1
  %209 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %206, <2 x double> <double -1.500000e+00, double 1.500000e+00>, <2 x double> %208)
  %210 = insertelement <2 x double> poison, double %200, i64 0
  %211 = insertelement <2 x double> %210, double %204, i64 1
  %212 = fmul <2 x double> %60, %211
  %213 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %209, <2 x double> %58, <2 x double> %212)
  %214 = insertelement <2 x double> poison, double %201, i64 0
  %215 = shufflevector <2 x double> %214, <2 x double> poison, <2 x i32> zeroinitializer
  %216 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %215, <2 x double> <double -1.000000e+01, double 1.500000e+01>, <2 x double> %213)
  %217 = call double @llvm.fmuladd.f64(double %.1344, double -5.000000e-01, double %197)
  %218 = fadd double %.1337, %162
  %219 = fmul double %218, -3.000000e+00
  %220 = fmul double %23, %219
  %221 = call double @llvm.fmuladd.f64(double %217, double %24, double %220)
  %222 = call double @llvm.fmuladd.f64(double %201, double -6.000000e+00, double %221)
  br label %223

223:                                              ; preds = %193, %.thread434
  %.1412 = phi double [ %194, %193 ], [ %.0411440, %.thread434 ]
  %.1408 = phi double [ %196, %193 ], [ %.0407441, %.thread434 ]
  %.1396 = phi double [ %222, %193 ], [ %.0395444, %.thread434 ]
  %224 = phi <2 x double> [ %216, %193 ], [ %64, %.thread434 ]
  br i1 %11, label %225, label %255

225:                                              ; preds = %223
  %226 = fmul double %23, %.1344
  %227 = fmul double %.2358, 5.000000e-01
  %228 = fmul double %24, %227
  %229 = fmul double %.1424436, 5.000000e-01
  %230 = fmul double %168, 4.000000e+00
  %231 = call double @llvm.fmuladd.f64(double %.1344, double 6.000000e+00, double %230)
  %232 = fneg double %231
  %233 = fsub double %.1337, %162
  %234 = fneg double %.1424436
  %235 = fmul double %168, 7.000000e+00
  %236 = call double @llvm.fmuladd.f64(double %.1344, double 8.000000e+00, double %235)
  %237 = insertelement <2 x double> poison, double %.2358, i64 0
  %238 = shufflevector <2 x double> %237, <2 x double> poison, <2 x i32> zeroinitializer
  %239 = insertelement <2 x double> poison, double %229, i64 0
  %240 = insertelement <2 x double> %239, double %234, i64 1
  %241 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %238, <2 x double> <double -1.500000e+00, double 1.500000e+00>, <2 x double> %240)
  %242 = insertelement <2 x double> poison, double %232, i64 0
  %243 = insertelement <2 x double> %242, double %236, i64 1
  %244 = fmul <2 x double> %60, %243
  %245 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %241, <2 x double> %58, <2 x double> %244)
  %246 = insertelement <2 x double> poison, double %233, i64 0
  %247 = shufflevector <2 x double> %246, <2 x double> poison, <2 x i32> zeroinitializer
  %248 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %247, <2 x double> <double -1.000000e+01, double 1.500000e+01>, <2 x double> %245)
  %249 = call double @llvm.fmuladd.f64(double %.2358, double -5.000000e-01, double %229)
  %250 = fadd double %.1344, %168
  %251 = fmul double %250, -3.000000e+00
  %252 = fmul double %23, %251
  %253 = call double @llvm.fmuladd.f64(double %249, double %24, double %252)
  %254 = call double @llvm.fmuladd.f64(double %233, double -6.000000e+00, double %253)
  br label %255

255:                                              ; preds = %225, %223
  %.1392 = phi double [ %226, %225 ], [ %.0391445, %223 ]
  %.1388 = phi double [ %228, %225 ], [ %.0387446, %223 ]
  %.1376 = phi double [ %254, %225 ], [ %.0375449, %223 ]
  %256 = phi <2 x double> [ %248, %225 ], [ %62, %223 ]
  br i1 %12, label %257, label %287

257:                                              ; preds = %255
  %258 = fmul double %23, %.2358
  %259 = fmul double %.1420, 5.000000e-01
  %260 = fmul double %24, %259
  %261 = fmul double %.1416, 5.000000e-01
  %262 = fmul double %.1424436, 4.000000e+00
  %263 = call double @llvm.fmuladd.f64(double %.2358, double 6.000000e+00, double %262)
  %264 = fneg double %263
  %265 = fsub double %.1344, %168
  %266 = fneg double %.1416
  %267 = fmul double %.1424436, 7.000000e+00
  %268 = call double @llvm.fmuladd.f64(double %.2358, double 8.000000e+00, double %267)
  %269 = insertelement <2 x double> poison, double %.1420, i64 0
  %270 = shufflevector <2 x double> %269, <2 x double> poison, <2 x i32> zeroinitializer
  %271 = insertelement <2 x double> poison, double %261, i64 0
  %272 = insertelement <2 x double> %271, double %266, i64 1
  %273 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %270, <2 x double> <double -1.500000e+00, double 1.500000e+00>, <2 x double> %272)
  %274 = insertelement <2 x double> poison, double %264, i64 0
  %275 = insertelement <2 x double> %274, double %268, i64 1
  %276 = fmul <2 x double> %60, %275
  %277 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %273, <2 x double> %58, <2 x double> %276)
  %278 = insertelement <2 x double> poison, double %265, i64 0
  %279 = shufflevector <2 x double> %278, <2 x double> poison, <2 x i32> zeroinitializer
  %280 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %279, <2 x double> <double -1.000000e+01, double 1.500000e+01>, <2 x double> %277)
  %281 = call double @llvm.fmuladd.f64(double %.1420, double -5.000000e-01, double %261)
  %282 = fadd double %.2358, %.1424436
  %283 = fmul double %282, -3.000000e+00
  %284 = fmul double %23, %283
  %285 = call double @llvm.fmuladd.f64(double %281, double %24, double %284)
  %286 = call double @llvm.fmuladd.f64(double %265, double -6.000000e+00, double %285)
  br label %287

287:                                              ; preds = %88, %255, %257
  %.2425 = phi double [ %.1424436, %257 ], [ %.1424436, %255 ], [ %.0423437, %88 ]
  %.2421 = phi double [ %.1420, %257 ], [ %.1420, %255 ], [ %.0419438, %88 ]
  %.2417 = phi double [ %.1416, %257 ], [ %.1416, %255 ], [ %.0415439, %88 ]
  %.2413 = phi double [ %.1412, %257 ], [ %.1412, %255 ], [ %.0411440, %88 ]
  %.2409 = phi double [ %.1408, %257 ], [ %.1408, %255 ], [ %.0407441, %88 ]
  %.2397 = phi double [ %.1396, %257 ], [ %.1396, %255 ], [ %.0395444, %88 ]
  %.2393 = phi double [ %.1392, %257 ], [ %.1392, %255 ], [ %.0391445, %88 ]
  %.2389 = phi double [ %.1388, %257 ], [ %.1388, %255 ], [ %.0387446, %88 ]
  %.2377 = phi double [ %.1376, %257 ], [ %.1376, %255 ], [ %.0375449, %88 ]
  %.1373 = phi double [ %258, %257 ], [ %.0372450, %255 ], [ %.0372450, %88 ]
  %.1370 = phi double [ %260, %257 ], [ %.0369451, %255 ], [ %.0369451, %88 ]
  %.1361 = phi double [ %286, %257 ], [ %.0360454, %255 ], [ %.0360454, %88 ]
  %.3359 = phi double [ %.2358, %257 ], [ %.2358, %255 ], [ %.0356455, %88 ]
  %.1348 = phi double [ %168, %257 ], [ %168, %255 ], [ %.0347458, %88 ]
  %.2345 = phi double [ %.1344, %257 ], [ %.1344, %255 ], [ %.0343459, %88 ]
  %.1341 = phi double [ %162, %257 ], [ %162, %255 ], [ %.0340460, %88 ]
  %.2338 = phi double [ %.1337, %257 ], [ %.1337, %255 ], [ %.0336461, %88 ]
  %.1334 = phi double [ %160, %257 ], [ %160, %255 ], [ %.0333462, %88 ]
  %.1331 = phi double [ %145, %257 ], [ %145, %255 ], [ %.0330463, %88 ]
  %.1328 = phi double [ %148, %257 ], [ %148, %255 ], [ %.0327464, %88 ]
  %.1325 = phi double [ %153, %257 ], [ %153, %255 ], [ %.0324465, %88 ]
  %.2322 = phi double [ %.1321, %257 ], [ %.1321, %255 ], [ %.0320466, %88 ]
  %.2 = phi i32 [ %.1, %257 ], [ %.1, %255 ], [ %.0316468, %88 ]
  %288 = phi <2 x double> [ %256, %257 ], [ %256, %255 ], [ %62, %88 ]
  %289 = phi <2 x double> [ %280, %257 ], [ %63, %255 ], [ %63, %88 ]
  %290 = phi <2 x double> [ %224, %257 ], [ %224, %255 ], [ %64, %88 ]
  %291 = fsub double %78, %.1331
  %292 = fdiv double %291, %23
  %293 = fmul double %292, %292
  %294 = fmul double %292, %293
  %295 = fmul double %293, %293
  %296 = fmul double %293, %294
  br i1 %.not.not.not, label %309, label %297

297:                                              ; preds = %287
  %298 = call double @llvm.fmuladd.f64(double %.2413, double %292, double %.2322)
  %299 = call double @llvm.fmuladd.f64(double %.2409, double %293, double %298)
  %300 = extractelement <2 x double> %290, i64 0
  %301 = call double @llvm.fmuladd.f64(double %300, double %294, double %299)
  %302 = extractelement <2 x double> %290, i64 1
  %303 = call double @llvm.fmuladd.f64(double %302, double %295, double %301)
  %304 = call double @llvm.fmuladd.f64(double %.2397, double %296, double %303)
  %305 = load i32, ptr %9, align 4, !tbaa !5
  %306 = sitofp i32 %305 to double
  %307 = fmul double %304, %306
  %308 = getelementptr inbounds double, ptr %4, i64 %indvars.iv
  store double %307, ptr %308, align 8, !tbaa !21
  br label %309

309:                                              ; preds = %297, %287
  br i1 %11, label %310, label %322

310:                                              ; preds = %309
  %311 = call double @llvm.fmuladd.f64(double %.2393, double %292, double %.2338)
  %312 = call double @llvm.fmuladd.f64(double %.2389, double %293, double %311)
  %313 = extractelement <2 x double> %288, i64 0
  %314 = call double @llvm.fmuladd.f64(double %313, double %294, double %312)
  %315 = extractelement <2 x double> %288, i64 1
  %316 = call double @llvm.fmuladd.f64(double %315, double %295, double %314)
  %317 = call double @llvm.fmuladd.f64(double %.2377, double %296, double %316)
  %318 = load i32, ptr %10, align 4, !tbaa !5
  %319 = sitofp i32 %318 to double
  %320 = fmul double %317, %319
  %321 = getelementptr inbounds double, ptr %5, i64 %indvars.iv
  store double %320, ptr %321, align 8, !tbaa !21
  br label %322

322:                                              ; preds = %310, %309
  br i1 %12, label %323, label %338

323:                                              ; preds = %322
  %324 = call double @llvm.fmuladd.f64(double %.1373, double %292, double %.2345)
  %325 = call double @llvm.fmuladd.f64(double %.1370, double %293, double %324)
  %326 = extractelement <2 x double> %289, i64 0
  %327 = call double @llvm.fmuladd.f64(double %326, double %294, double %325)
  %328 = extractelement <2 x double> %289, i64 1
  %329 = call double @llvm.fmuladd.f64(double %328, double %295, double %327)
  %330 = call double @llvm.fmuladd.f64(double %.1361, double %296, double %329)
  %331 = load i32, ptr %9, align 4, !tbaa !5
  %332 = sitofp i32 %331 to double
  %333 = fmul double %330, %332
  br label %.sink.split

.sink.split:                                      ; preds = %87, %323
  %.sink = phi double [ %333, %323 ], [ 0.000000e+00, %87 ]
  %.3426.ph = phi double [ %.2425, %323 ], [ %.0423437, %87 ]
  %.3422.ph = phi double [ %.2421, %323 ], [ %.0419438, %87 ]
  %.3418.ph = phi double [ %.2417, %323 ], [ %.0415439, %87 ]
  %.3414.ph = phi double [ %.2413, %323 ], [ %.0411440, %87 ]
  %.3410.ph = phi double [ %.2409, %323 ], [ %.0407441, %87 ]
  %.3398.ph = phi double [ %.2397, %323 ], [ %.0395444, %87 ]
  %.3394.ph = phi double [ %.2393, %323 ], [ %.0391445, %87 ]
  %.3390.ph = phi double [ %.2389, %323 ], [ %.0387446, %87 ]
  %.3378.ph = phi double [ %.2377, %323 ], [ %.0375449, %87 ]
  %.2374.ph = phi double [ %.1373, %323 ], [ %.0372450, %87 ]
  %.2371.ph = phi double [ %.1370, %323 ], [ %.0369451, %87 ]
  %.2362.ph = phi double [ %.1361, %323 ], [ %.0360454, %87 ]
  %.4.ph = phi double [ %.3359, %323 ], [ %.0356455, %87 ]
  %.2349.ph = phi double [ %.1348, %323 ], [ %.0347458, %87 ]
  %.3346.ph = phi double [ %.2345, %323 ], [ %.0343459, %87 ]
  %.2342.ph = phi double [ %.1341, %323 ], [ %.0340460, %87 ]
  %.3339.ph = phi double [ %.2338, %323 ], [ %.0336461, %87 ]
  %.2335.ph = phi double [ %.1334, %323 ], [ %.0333462, %87 ]
  %.2332.ph = phi double [ %.1331, %323 ], [ %.0330463, %87 ]
  %.2329.ph = phi double [ %.1328, %323 ], [ %.0327464, %87 ]
  %.2326.ph = phi double [ %.1325, %323 ], [ %.0324465, %87 ]
  %.3323.ph = phi double [ %.2322, %323 ], [ %.0320466, %87 ]
  %.3.ph = phi i32 [ %.2, %323 ], [ %.0316468, %87 ]
  %334 = phi <2 x double> [ %288, %323 ], [ %62, %87 ]
  %335 = phi <2 x double> [ %289, %323 ], [ %63, %87 ]
  %336 = phi <2 x double> [ %290, %323 ], [ %64, %87 ]
  %337 = getelementptr inbounds double, ptr %6, i64 %indvars.iv
  store double %.sink, ptr %337, align 8, !tbaa !21
  br label %338

338:                                              ; preds = %.sink.split, %322, %87
  %.3426 = phi double [ %.0423437, %87 ], [ %.2425, %322 ], [ %.3426.ph, %.sink.split ]
  %.3422 = phi double [ %.0419438, %87 ], [ %.2421, %322 ], [ %.3422.ph, %.sink.split ]
  %.3418 = phi double [ %.0415439, %87 ], [ %.2417, %322 ], [ %.3418.ph, %.sink.split ]
  %.3414 = phi double [ %.0411440, %87 ], [ %.2413, %322 ], [ %.3414.ph, %.sink.split ]
  %.3410 = phi double [ %.0407441, %87 ], [ %.2409, %322 ], [ %.3410.ph, %.sink.split ]
  %.3398 = phi double [ %.0395444, %87 ], [ %.2397, %322 ], [ %.3398.ph, %.sink.split ]
  %.3394 = phi double [ %.0391445, %87 ], [ %.2393, %322 ], [ %.3394.ph, %.sink.split ]
  %.3390 = phi double [ %.0387446, %87 ], [ %.2389, %322 ], [ %.3390.ph, %.sink.split ]
  %.3378 = phi double [ %.0375449, %87 ], [ %.2377, %322 ], [ %.3378.ph, %.sink.split ]
  %.2374 = phi double [ %.0372450, %87 ], [ %.1373, %322 ], [ %.2374.ph, %.sink.split ]
  %.2371 = phi double [ %.0369451, %87 ], [ %.1370, %322 ], [ %.2371.ph, %.sink.split ]
  %.2362 = phi double [ %.0360454, %87 ], [ %.1361, %322 ], [ %.2362.ph, %.sink.split ]
  %.4 = phi double [ %.0356455, %87 ], [ %.3359, %322 ], [ %.4.ph, %.sink.split ]
  %.2349 = phi double [ %.0347458, %87 ], [ %.1348, %322 ], [ %.2349.ph, %.sink.split ]
  %.3346 = phi double [ %.0343459, %87 ], [ %.2345, %322 ], [ %.3346.ph, %.sink.split ]
  %.2342 = phi double [ %.0340460, %87 ], [ %.1341, %322 ], [ %.2342.ph, %.sink.split ]
  %.3339 = phi double [ %.0336461, %87 ], [ %.2338, %322 ], [ %.3339.ph, %.sink.split ]
  %.2335 = phi double [ %.0333462, %87 ], [ %.1334, %322 ], [ %.2335.ph, %.sink.split ]
  %.2332 = phi double [ %.0330463, %87 ], [ %.1331, %322 ], [ %.2332.ph, %.sink.split ]
  %.2329 = phi double [ %.0327464, %87 ], [ %.1328, %322 ], [ %.2329.ph, %.sink.split ]
  %.2326 = phi double [ %.0324465, %87 ], [ %.1325, %322 ], [ %.2326.ph, %.sink.split ]
  %.3323 = phi double [ %.0320466, %87 ], [ %.2322, %322 ], [ %.3323.ph, %.sink.split ]
  %.3 = phi i32 [ %.0316468, %87 ], [ %.2, %322 ], [ %.3.ph, %.sink.split ]
  %339 = phi <2 x double> [ %62, %87 ], [ %288, %322 ], [ %334, %.sink.split ]
  %340 = phi <2 x double> [ %63, %87 ], [ %289, %322 ], [ %335, %.sink.split ]
  %341 = phi <2 x double> [ %64, %87 ], [ %290, %322 ], [ %336, %.sink.split ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %61, !llvm.loop !23

._crit_edge:                                      ; preds = %338, %7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  ret i32 0
}

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

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

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

; 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>) #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !12, i64 56}
!10 = !{!"HypersphericalInterpolationStructure", !6, i64 0, !11, i64 8, !11, i64 16, !6, i64 24, !6, i64 28, !12, i64 32, !12, i64 40, !6, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88}
!11 = !{!"double", !7, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!10, !12, i64 64}
!14 = !{!10, !12, i64 72}
!15 = !{!10, !11, i64 8}
!16 = !{!10, !11, i64 16}
!17 = !{!10, !6, i64 48}
!18 = !{!10, !12, i64 80}
!19 = !{!10, !12, i64 88}
!20 = !{!10, !12, i64 32}
!21 = !{!11, !11, i64 0}
!22 = !{!10, !6, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}


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