; LLVM IR from robinrodricks/InspiritImage :: Inspirit.Assurf/clib/rpp (rpp_quintic)

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

; 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 speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @cubic(ptr noundef %0, ptr noundef %1, ptr noundef %2) #2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca [3 x double], align 16
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca i32, align 4
  %16 = alloca double, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  store double 0x400921FB54442D18, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  store double 0x3FD5555555555555, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %17 = load ptr, ptr %4, align 8, !tbaa !5
  %18 = getelementptr inbounds double, ptr %17, i64 3
  %19 = load double, ptr %18, align 8, !tbaa !9
  %20 = fcmp une double %19, 0.000000e+00
  br i1 %20, label %21, label %373

21:                                               ; preds = %3
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = getelementptr inbounds double, ptr %22, i64 2
  %24 = load double, ptr %23, align 8, !tbaa !9
  %25 = load ptr, ptr %4, align 8, !tbaa !5
  %26 = getelementptr inbounds double, ptr %25, i64 3
  %27 = load double, ptr %26, align 8, !tbaa !9
  %28 = fdiv double %24, %27
  %29 = fmul double %28, 0x3FD5555555555555
  store double %29, ptr %10, align 8, !tbaa !9
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = getelementptr inbounds double, ptr %30, i64 1
  %32 = load double, ptr %31, align 8, !tbaa !9
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = getelementptr inbounds double, ptr %33, i64 3
  %35 = load double, ptr %34, align 8, !tbaa !9
  %36 = fdiv double %32, %35
  %37 = load double, ptr %10, align 8, !tbaa !9
  %38 = load double, ptr %10, align 8, !tbaa !9
  %39 = fmul double %37, %38
  %40 = fneg double %39
  %41 = call double @llvm.fmuladd.f64(double %36, double 0x3FD5555555555555, double %40)
  %42 = call double @pow(double noundef %41, double noundef 3.000000e+00) #4
  store double %42, ptr %11, align 8, !tbaa !9
  %43 = load double, ptr %10, align 8, !tbaa !9
  %44 = load double, ptr %10, align 8, !tbaa !9
  %45 = fmul double %43, %44
  %46 = load double, ptr %10, align 8, !tbaa !9
  %47 = fmul double %45, %46
  %48 = load ptr, ptr %4, align 8, !tbaa !5
  %49 = getelementptr inbounds double, ptr %48, i64 1
  %50 = load double, ptr %49, align 8, !tbaa !9
  %51 = load double, ptr %10, align 8, !tbaa !9
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds double, ptr %52, i64 0
  %54 = load double, ptr %53, align 8, !tbaa !9
  %55 = fneg double %54
  %56 = call double @llvm.fmuladd.f64(double %50, double %51, double %55)
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds double, ptr %57, i64 3
  %59 = load double, ptr %58, align 8, !tbaa !9
  %60 = fdiv double %56, %59
  %61 = fneg double %60
  %62 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %47, double %61)
  %63 = fmul double -5.000000e-01, %62
  store double %63, ptr %12, align 8, !tbaa !9
  %64 = load double, ptr %12, align 8, !tbaa !9
  %65 = load double, ptr %12, align 8, !tbaa !9
  %66 = load double, ptr %11, align 8, !tbaa !9
  %67 = call double @llvm.fmuladd.f64(double %64, double %65, double %66)
  store double %67, ptr %13, align 8, !tbaa !9
  %68 = load double, ptr %13, align 8, !tbaa !9
  %69 = fcmp olt double %68, 0.000000e+00
  br i1 %69, label %70, label %355

70:                                               ; preds = %21
  %71 = load double, ptr %12, align 8, !tbaa !9
  %72 = load double, ptr %11, align 8, !tbaa !9
  %73 = fneg double %72
  %74 = call double @sqrt(double noundef %73) #4
  %75 = fdiv double %71, %74
  %76 = fcmp ogt double -1.000000e+00, %75
  br i1 %76, label %77, label %78

77:                                               ; preds = %70
  br label %84

78:                                               ; preds = %70
  %79 = load double, ptr %12, align 8, !tbaa !9
  %80 = load double, ptr %11, align 8, !tbaa !9
  %81 = fneg double %80
  %82 = call double @sqrt(double noundef %81) #4
  %83 = fdiv double %79, %82
  br label %84

84:                                               ; preds = %78, %77
  %85 = phi double [ -1.000000e+00, %77 ], [ %83, %78 ]
  %86 = fcmp olt double 1.000000e+00, %85
  br i1 %86, label %87, label %88

87:                                               ; preds = %84
  br label %104

88:                                               ; preds = %84
  %89 = load double, ptr %12, align 8, !tbaa !9
  %90 = load double, ptr %11, align 8, !tbaa !9
  %91 = fneg double %90
  %92 = call double @sqrt(double noundef %91) #4
  %93 = fdiv double %89, %92
  %94 = fcmp ogt double -1.000000e+00, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %88
  br label %102

96:                                               ; preds = %88
  %97 = load double, ptr %12, align 8, !tbaa !9
  %98 = load double, ptr %11, align 8, !tbaa !9
  %99 = fneg double %98
  %100 = call double @sqrt(double noundef %99) #4
  %101 = fdiv double %97, %100
  br label %102

102:                                              ; preds = %96, %95
  %103 = phi double [ -1.000000e+00, %95 ], [ %101, %96 ]
  br label %104

104:                                              ; preds = %102, %87
  %105 = phi double [ 1.000000e+00, %87 ], [ %103, %102 ]
  %106 = call double @acos(double noundef %105) #4
  store double %106, ptr %14, align 8, !tbaa !9
  %107 = load double, ptr %11, align 8, !tbaa !9
  %108 = fneg double %107
  %109 = call double @pow(double noundef %108, double noundef 0x3FC5555555555555) #4
  %110 = fmul double 2.000000e+00, %109
  store double %110, ptr %11, align 8, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !11
  br label %111

111:                                              ; preds = %129, %104
  %112 = load i32, ptr %15, align 4, !tbaa !11
  %113 = icmp slt i32 %112, 3
  br i1 %113, label %114, label %132

114:                                              ; preds = %111
  %115 = load double, ptr %11, align 8, !tbaa !9
  %116 = load double, ptr %14, align 8, !tbaa !9
  %117 = load i32, ptr %15, align 4, !tbaa !11
  %118 = sitofp i32 %117 to double
  %119 = fmul double 2.000000e+00, %118
  %120 = call double @llvm.fmuladd.f64(double %119, double 0x400921FB54442D18, double %116)
  %121 = fmul double %120, 0x3FD5555555555555
  %122 = call double @cos(double noundef %121) #4
  %123 = load double, ptr %10, align 8, !tbaa !9
  %124 = fneg double %123
  %125 = call double @llvm.fmuladd.f64(double %115, double %122, double %124)
  %126 = load i32, ptr %15, align 4, !tbaa !11
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 %127
  store double %125, ptr %128, align 8, !tbaa !9
  br label %129

129:                                              ; preds = %114
  %130 = load i32, ptr %15, align 4, !tbaa !11
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %15, align 4, !tbaa !11
  br label %111, !llvm.loop !13

132:                                              ; preds = %111
  %133 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %134 = load double, ptr %133, align 16, !tbaa !9
  %135 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %136 = load double, ptr %135, align 8, !tbaa !9
  %137 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %138 = load double, ptr %137, align 16, !tbaa !9
  %139 = fcmp olt double %136, %138
  br i1 %139, label %140, label %143

140:                                              ; preds = %132
  %141 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %142 = load double, ptr %141, align 8, !tbaa !9
  br label %146

143:                                              ; preds = %132
  %144 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %145 = load double, ptr %144, align 16, !tbaa !9
  br label %146

146:                                              ; preds = %143, %140
  %147 = phi double [ %142, %140 ], [ %145, %143 ]
  %148 = fcmp olt double %134, %147
  br i1 %148, label %149, label %152

149:                                              ; preds = %146
  %150 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %151 = load double, ptr %150, align 16, !tbaa !9
  br label %166

152:                                              ; preds = %146
  %153 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %154 = load double, ptr %153, align 8, !tbaa !9
  %155 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %156 = load double, ptr %155, align 16, !tbaa !9
  %157 = fcmp olt double %154, %156
  br i1 %157, label %158, label %161

158:                                              ; preds = %152
  %159 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %160 = load double, ptr %159, align 8, !tbaa !9
  br label %164

161:                                              ; preds = %152
  %162 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %163 = load double, ptr %162, align 16, !tbaa !9
  br label %164

164:                                              ; preds = %161, %158
  %165 = phi double [ %160, %158 ], [ %163, %161 ]
  br label %166

166:                                              ; preds = %164, %149
  %167 = phi double [ %151, %149 ], [ %165, %164 ]
  %168 = load ptr, ptr %5, align 8, !tbaa !5
  %169 = getelementptr inbounds double, ptr %168, i64 0
  store double %167, ptr %169, align 8, !tbaa !9
  %170 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %171 = load double, ptr %170, align 16, !tbaa !9
  %172 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %173 = load double, ptr %172, align 8, !tbaa !9
  %174 = fcmp olt double %171, %173
  br i1 %174, label %175, label %178

175:                                              ; preds = %166
  %176 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %177 = load double, ptr %176, align 16, !tbaa !9
  br label %181

178:                                              ; preds = %166
  %179 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %180 = load double, ptr %179, align 8, !tbaa !9
  br label %181

181:                                              ; preds = %178, %175
  %182 = phi double [ %177, %175 ], [ %180, %178 ]
  %183 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %184 = load double, ptr %183, align 16, !tbaa !9
  %185 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %186 = load double, ptr %185, align 16, !tbaa !9
  %187 = fcmp olt double %184, %186
  br i1 %187, label %188, label %191

188:                                              ; preds = %181
  %189 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %190 = load double, ptr %189, align 16, !tbaa !9
  br label %194

191:                                              ; preds = %181
  %192 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %193 = load double, ptr %192, align 16, !tbaa !9
  br label %194

194:                                              ; preds = %191, %188
  %195 = phi double [ %190, %188 ], [ %193, %191 ]
  %196 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %197 = load double, ptr %196, align 8, !tbaa !9
  %198 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %199 = load double, ptr %198, align 16, !tbaa !9
  %200 = fcmp olt double %197, %199
  br i1 %200, label %201, label %204

201:                                              ; preds = %194
  %202 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %203 = load double, ptr %202, align 8, !tbaa !9
  br label %207

204:                                              ; preds = %194
  %205 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %206 = load double, ptr %205, align 16, !tbaa !9
  br label %207

207:                                              ; preds = %204, %201
  %208 = phi double [ %203, %201 ], [ %206, %204 ]
  %209 = fcmp ogt double %195, %208
  br i1 %209, label %210, label %224

210:                                              ; preds = %207
  %211 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %212 = load double, ptr %211, align 16, !tbaa !9
  %213 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %214 = load double, ptr %213, align 16, !tbaa !9
  %215 = fcmp olt double %212, %214
  br i1 %215, label %216, label %219

216:                                              ; preds = %210
  %217 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %218 = load double, ptr %217, align 16, !tbaa !9
  br label %222

219:                                              ; preds = %210
  %220 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %221 = load double, ptr %220, align 16, !tbaa !9
  br label %222

222:                                              ; preds = %219, %216
  %223 = phi double [ %218, %216 ], [ %221, %219 ]
  br label %238

224:                                              ; preds = %207
  %225 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %226 = load double, ptr %225, align 8, !tbaa !9
  %227 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %228 = load double, ptr %227, align 16, !tbaa !9
  %229 = fcmp olt double %226, %228
  br i1 %229, label %230, label %233

230:                                              ; preds = %224
  %231 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %232 = load double, ptr %231, align 8, !tbaa !9
  br label %236

233:                                              ; preds = %224
  %234 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %235 = load double, ptr %234, align 16, !tbaa !9
  br label %236

236:                                              ; preds = %233, %230
  %237 = phi double [ %232, %230 ], [ %235, %233 ]
  br label %238

238:                                              ; preds = %236, %222
  %239 = phi double [ %223, %222 ], [ %237, %236 ]
  %240 = fcmp ogt double %182, %239
  br i1 %240, label %241, label %255

241:                                              ; preds = %238
  %242 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %243 = load double, ptr %242, align 16, !tbaa !9
  %244 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %245 = load double, ptr %244, align 8, !tbaa !9
  %246 = fcmp olt double %243, %245
  br i1 %246, label %247, label %250

247:                                              ; preds = %241
  %248 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %249 = load double, ptr %248, align 16, !tbaa !9
  br label %253

250:                                              ; preds = %241
  %251 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %252 = load double, ptr %251, align 8, !tbaa !9
  br label %253

253:                                              ; preds = %250, %247
  %254 = phi double [ %249, %247 ], [ %252, %250 ]
  br label %313

255:                                              ; preds = %238
  %256 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %257 = load double, ptr %256, align 16, !tbaa !9
  %258 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %259 = load double, ptr %258, align 16, !tbaa !9
  %260 = fcmp olt double %257, %259
  br i1 %260, label %261, label %264

261:                                              ; preds = %255
  %262 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %263 = load double, ptr %262, align 16, !tbaa !9
  br label %267

264:                                              ; preds = %255
  %265 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %266 = load double, ptr %265, align 16, !tbaa !9
  br label %267

267:                                              ; preds = %264, %261
  %268 = phi double [ %263, %261 ], [ %266, %264 ]
  %269 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %270 = load double, ptr %269, align 8, !tbaa !9
  %271 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %272 = load double, ptr %271, align 16, !tbaa !9
  %273 = fcmp olt double %270, %272
  br i1 %273, label %274, label %277

274:                                              ; preds = %267
  %275 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %276 = load double, ptr %275, align 8, !tbaa !9
  br label %280

277:                                              ; preds = %267
  %278 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %279 = load double, ptr %278, align 16, !tbaa !9
  br label %280

280:                                              ; preds = %277, %274
  %281 = phi double [ %276, %274 ], [ %279, %277 ]
  %282 = fcmp ogt double %268, %281
  br i1 %282, label %283, label %297

283:                                              ; preds = %280
  %284 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %285 = load double, ptr %284, align 16, !tbaa !9
  %286 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %287 = load double, ptr %286, align 16, !tbaa !9
  %288 = fcmp olt double %285, %287
  br i1 %288, label %289, label %292

289:                                              ; preds = %283
  %290 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %291 = load double, ptr %290, align 16, !tbaa !9
  br label %295

292:                                              ; preds = %283
  %293 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %294 = load double, ptr %293, align 16, !tbaa !9
  br label %295

295:                                              ; preds = %292, %289
  %296 = phi double [ %291, %289 ], [ %294, %292 ]
  br label %311

297:                                              ; preds = %280
  %298 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %299 = load double, ptr %298, align 8, !tbaa !9
  %300 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %301 = load double, ptr %300, align 16, !tbaa !9
  %302 = fcmp olt double %299, %301
  br i1 %302, label %303, label %306

303:                                              ; preds = %297
  %304 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %305 = load double, ptr %304, align 8, !tbaa !9
  br label %309

306:                                              ; preds = %297
  %307 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %308 = load double, ptr %307, align 16, !tbaa !9
  br label %309

309:                                              ; preds = %306, %303
  %310 = phi double [ %305, %303 ], [ %308, %306 ]
  br label %311

311:                                              ; preds = %309, %295
  %312 = phi double [ %296, %295 ], [ %310, %309 ]
  br label %313

313:                                              ; preds = %311, %253
  %314 = phi double [ %254, %253 ], [ %312, %311 ]
  %315 = load ptr, ptr %5, align 8, !tbaa !5
  %316 = getelementptr inbounds double, ptr %315, i64 1
  store double %314, ptr %316, align 8, !tbaa !9
  %317 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %318 = load double, ptr %317, align 16, !tbaa !9
  %319 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %320 = load double, ptr %319, align 8, !tbaa !9
  %321 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %322 = load double, ptr %321, align 16, !tbaa !9
  %323 = fcmp ogt double %320, %322
  br i1 %323, label %324, label %327

324:                                              ; preds = %313
  %325 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %326 = load double, ptr %325, align 8, !tbaa !9
  br label %330

327:                                              ; preds = %313
  %328 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %329 = load double, ptr %328, align 16, !tbaa !9
  br label %330

330:                                              ; preds = %327, %324
  %331 = phi double [ %326, %324 ], [ %329, %327 ]
  %332 = fcmp ogt double %318, %331
  br i1 %332, label %333, label %336

333:                                              ; preds = %330
  %334 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 0
  %335 = load double, ptr %334, align 16, !tbaa !9
  br label %350

336:                                              ; preds = %330
  %337 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %338 = load double, ptr %337, align 8, !tbaa !9
  %339 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %340 = load double, ptr %339, align 16, !tbaa !9
  %341 = fcmp ogt double %338, %340
  br i1 %341, label %342, label %345

342:                                              ; preds = %336
  %343 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 1
  %344 = load double, ptr %343, align 8, !tbaa !9
  br label %348

345:                                              ; preds = %336
  %346 = getelementptr inbounds [3 x double], ptr %9, i64 0, i64 2
  %347 = load double, ptr %346, align 16, !tbaa !9
  br label %348

348:                                              ; preds = %345, %342
  %349 = phi double [ %344, %342 ], [ %347, %345 ]
  br label %350

350:                                              ; preds = %348, %333
  %351 = phi double [ %335, %333 ], [ %349, %348 ]
  %352 = load ptr, ptr %5, align 8, !tbaa !5
  %353 = getelementptr inbounds double, ptr %352, i64 2
  store double %351, ptr %353, align 8, !tbaa !9
  %354 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 3, ptr %354, align 4, !tbaa !11
  br label %372

355:                                              ; preds = %21
  %356 = load double, ptr %13, align 8, !tbaa !9
  %357 = call double @sqrt(double noundef %356) #4
  store double %357, ptr %13, align 8, !tbaa !9
  %358 = load double, ptr %12, align 8, !tbaa !9
  %359 = load double, ptr %13, align 8, !tbaa !9
  %360 = fadd double %358, %359
  %361 = call double @CBRT(double noundef %360)
  %362 = load double, ptr %12, align 8, !tbaa !9
  %363 = load double, ptr %13, align 8, !tbaa !9
  %364 = fsub double %362, %363
  %365 = call double @CBRT(double noundef %364)
  %366 = fadd double %361, %365
  %367 = load double, ptr %10, align 8, !tbaa !9
  %368 = fsub double %366, %367
  %369 = load ptr, ptr %5, align 8, !tbaa !5
  %370 = getelementptr inbounds double, ptr %369, i64 0
  store double %368, ptr %370, align 8, !tbaa !9
  %371 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 1, ptr %371, align 4, !tbaa !11
  br label %372

372:                                              ; preds = %355, %350
  br label %439

373:                                              ; preds = %3
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = getelementptr inbounds double, ptr %374, i64 2
  %376 = load double, ptr %375, align 8, !tbaa !9
  %377 = fcmp une double %376, 0.000000e+00
  br i1 %377, label %378, label %419

378:                                              ; preds = %373
  %379 = load ptr, ptr %4, align 8, !tbaa !5
  %380 = getelementptr inbounds double, ptr %379, i64 1
  %381 = load double, ptr %380, align 8, !tbaa !9
  %382 = fmul double 5.000000e-01, %381
  %383 = load ptr, ptr %4, align 8, !tbaa !5
  %384 = getelementptr inbounds double, ptr %383, i64 2
  %385 = load double, ptr %384, align 8, !tbaa !9
  %386 = fdiv double %382, %385
  store double %386, ptr %11, align 8, !tbaa !9
  %387 = load double, ptr %11, align 8, !tbaa !9
  %388 = load double, ptr %11, align 8, !tbaa !9
  %389 = load ptr, ptr %4, align 8, !tbaa !5
  %390 = getelementptr inbounds double, ptr %389, i64 0
  %391 = load double, ptr %390, align 8, !tbaa !9
  %392 = load ptr, ptr %4, align 8, !tbaa !5
  %393 = getelementptr inbounds double, ptr %392, i64 2
  %394 = load double, ptr %393, align 8, !tbaa !9
  %395 = fdiv double %391, %394
  %396 = fneg double %395
  %397 = call double @llvm.fmuladd.f64(double %387, double %388, double %396)
  store double %397, ptr %13, align 8, !tbaa !9
  %398 = load double, ptr %13, align 8, !tbaa !9
  %399 = fcmp ogt double %398, 0.000000e+00
  br i1 %399, label %400, label %416

400:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %401 = load double, ptr %13, align 8, !tbaa !9
  %402 = call double @sqrt(double noundef %401) #4
  store double %402, ptr %16, align 8, !tbaa !9
  %403 = load double, ptr %11, align 8, !tbaa !9
  %404 = fneg double %403
  %405 = load double, ptr %16, align 8, !tbaa !9
  %406 = fsub double %404, %405
  %407 = load ptr, ptr %5, align 8, !tbaa !5
  %408 = getelementptr inbounds double, ptr %407, i64 0
  store double %406, ptr %408, align 8, !tbaa !9
  %409 = load double, ptr %11, align 8, !tbaa !9
  %410 = fneg double %409
  %411 = load double, ptr %16, align 8, !tbaa !9
  %412 = fadd double %410, %411
  %413 = load ptr, ptr %5, align 8, !tbaa !5
  %414 = getelementptr inbounds double, ptr %413, i64 1
  store double %412, ptr %414, align 8, !tbaa !9
  %415 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 2, ptr %415, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  br label %418

416:                                              ; preds = %378
  %417 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 0, ptr %417, align 4, !tbaa !11
  br label %418

418:                                              ; preds = %416, %400
  br label %438

419:                                              ; preds = %373
  %420 = load ptr, ptr %4, align 8, !tbaa !5
  %421 = getelementptr inbounds double, ptr %420, i64 1
  %422 = load double, ptr %421, align 8, !tbaa !9
  %423 = fcmp une double %422, 0.000000e+00
  br i1 %423, label %424, label %435

424:                                              ; preds = %419
  %425 = load ptr, ptr %4, align 8, !tbaa !5
  %426 = getelementptr inbounds double, ptr %425, i64 0
  %427 = load double, ptr %426, align 8, !tbaa !9
  %428 = load ptr, ptr %4, align 8, !tbaa !5
  %429 = getelementptr inbounds double, ptr %428, i64 1
  %430 = load double, ptr %429, align 8, !tbaa !9
  %431 = fdiv double %427, %430
  %432 = load ptr, ptr %5, align 8, !tbaa !5
  %433 = getelementptr inbounds double, ptr %432, i64 0
  store double %431, ptr %433, align 8, !tbaa !9
  %434 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 1, ptr %434, align 4, !tbaa !11
  br label %437

435:                                              ; preds = %419
  %436 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 0, ptr %436, align 4, !tbaa !11
  br label %437

437:                                              ; preds = %435, %424
  br label %438

438:                                              ; preds = %437, %418
  br label %439

439:                                              ; preds = %438, %372
  store i32 0, ptr %15, align 4, !tbaa !11
  br label %440

440:                                              ; preds = %510, %439
  %441 = load i32, ptr %15, align 4, !tbaa !11
  %442 = load ptr, ptr %6, align 8, !tbaa !5
  %443 = load i32, ptr %442, align 4, !tbaa !11
  %444 = icmp slt i32 %441, %443
  br i1 %444, label %445, label %513

445:                                              ; preds = %440
  %446 = load ptr, ptr %5, align 8, !tbaa !5
  %447 = load i32, ptr %15, align 4, !tbaa !11
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %446, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !9
  %451 = load ptr, ptr %4, align 8, !tbaa !5
  %452 = getelementptr inbounds double, ptr %451, i64 0
  %453 = load double, ptr %452, align 8, !tbaa !9
  %454 = load ptr, ptr %5, align 8, !tbaa !5
  %455 = load i32, ptr %15, align 4, !tbaa !11
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds double, ptr %454, i64 %456
  %458 = load double, ptr %457, align 8, !tbaa !9
  %459 = load ptr, ptr %4, align 8, !tbaa !5
  %460 = getelementptr inbounds double, ptr %459, i64 1
  %461 = load double, ptr %460, align 8, !tbaa !9
  %462 = load ptr, ptr %5, align 8, !tbaa !5
  %463 = load i32, ptr %15, align 4, !tbaa !11
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds double, ptr %462, i64 %464
  %466 = load double, ptr %465, align 8, !tbaa !9
  %467 = load ptr, ptr %4, align 8, !tbaa !5
  %468 = getelementptr inbounds double, ptr %467, i64 2
  %469 = load double, ptr %468, align 8, !tbaa !9
  %470 = load ptr, ptr %5, align 8, !tbaa !5
  %471 = load i32, ptr %15, align 4, !tbaa !11
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds double, ptr %470, i64 %472
  %474 = load double, ptr %473, align 8, !tbaa !9
  %475 = load ptr, ptr %4, align 8, !tbaa !5
  %476 = getelementptr inbounds double, ptr %475, i64 3
  %477 = load double, ptr %476, align 8, !tbaa !9
  %478 = call double @llvm.fmuladd.f64(double %474, double %477, double %469)
  %479 = call double @llvm.fmuladd.f64(double %466, double %478, double %461)
  %480 = call double @llvm.fmuladd.f64(double %458, double %479, double %453)
  %481 = load ptr, ptr %4, align 8, !tbaa !5
  %482 = getelementptr inbounds double, ptr %481, i64 1
  %483 = load double, ptr %482, align 8, !tbaa !9
  %484 = load ptr, ptr %5, align 8, !tbaa !5
  %485 = load i32, ptr %15, align 4, !tbaa !11
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds double, ptr %484, i64 %486
  %488 = load double, ptr %487, align 8, !tbaa !9
  %489 = load ptr, ptr %4, align 8, !tbaa !5
  %490 = getelementptr inbounds double, ptr %489, i64 2
  %491 = load double, ptr %490, align 8, !tbaa !9
  %492 = load ptr, ptr %5, align 8, !tbaa !5
  %493 = load i32, ptr %15, align 4, !tbaa !11
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds double, ptr %492, i64 %494
  %496 = load double, ptr %495, align 8, !tbaa !9
  %497 = fmul double %496, 3.000000e+00
  %498 = load ptr, ptr %4, align 8, !tbaa !5
  %499 = getelementptr inbounds double, ptr %498, i64 3
  %500 = load double, ptr %499, align 8, !tbaa !9
  %501 = fmul double %497, %500
  %502 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %491, double %501)
  %503 = call double @llvm.fmuladd.f64(double %488, double %502, double %483)
  %504 = fdiv double %480, %503
  %505 = fsub double %450, %504
  %506 = load ptr, ptr %5, align 8, !tbaa !5
  %507 = load i32, ptr %15, align 4, !tbaa !11
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds double, ptr %506, i64 %508
  store double %505, ptr %509, align 8, !tbaa !9
  br label %510

510:                                              ; preds = %445
  %511 = load i32, ptr %15, align 4, !tbaa !11
  %512 = add nsw i32 %511, 1
  store i32 %512, ptr %15, align 4, !tbaa !11
  br label %440, !llvm.loop !15

513:                                              ; preds = %440
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  ret i32 0
}

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

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

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

; Function Attrs: nounwind
declare double @acos(double noundef) #3

; Function Attrs: nounwind
declare double @cos(double noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local double @CBRT(double 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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }

!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 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}


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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @cubic(ptr nocapture noundef readonly %0, ptr nocapture noundef %1, ptr nocapture noundef writeonly %2) local_unnamed_addr #1 {
  %4 = getelementptr inbounds i8, ptr %0, i64 24
  %5 = load double, ptr %4, align 8, !tbaa !5
  %6 = fcmp une double %5, 0.000000e+00
  %7 = getelementptr inbounds i8, ptr %0, i64 16
  %8 = load double, ptr %7, align 8, !tbaa !5
  br i1 %6, label %9, label %90

9:                                                ; preds = %3
  %10 = fdiv double %8, %5
  %11 = fmul double %10, 0x3FD5555555555555
  %12 = getelementptr inbounds i8, ptr %0, i64 8
  %13 = load double, ptr %12, align 8, !tbaa !5
  %14 = fdiv double %13, %5
  %15 = fmul double %11, %11
  %16 = fneg double %15
  %17 = tail call double @llvm.fmuladd.f64(double %14, double 0x3FD5555555555555, double %16)
  %18 = tail call double @pow(double noundef %17, double noundef 3.000000e+00) #4
  %19 = fmul double %11, %15
  %20 = load double, ptr %12, align 8, !tbaa !5
  %21 = load double, ptr %0, align 8, !tbaa !5
  %22 = fneg double %21
  %23 = tail call double @llvm.fmuladd.f64(double %20, double %11, double %22)
  %24 = load double, ptr %4, align 8, !tbaa !5
  %25 = fneg double %23
  %26 = fdiv double %25, %24
  %27 = tail call double @llvm.fmuladd.f64(double %19, double 2.000000e+00, double %26)
  %28 = fmul double %27, -5.000000e-01
  %29 = tail call double @llvm.fmuladd.f64(double %28, double %28, double %18)
  %30 = fcmp olt double %29, 0.000000e+00
  br i1 %30, label %31, label %82

31:                                               ; preds = %9
  %32 = fneg double %18
  %33 = tail call double @sqrt(double noundef %32) #4
  %34 = fdiv double %28, %33
  %35 = fcmp olt double %34, -1.000000e+00
  br i1 %35, label %.critedge, label %36

36:                                               ; preds = %31
  %37 = tail call double @sqrt(double noundef %32) #4
  %38 = fdiv double %28, %37
  %39 = fcmp ogt double %38, 1.000000e+00
  br i1 %39, label %46, label %.critedge

.critedge:                                        ; preds = %31, %36
  %40 = tail call double @sqrt(double noundef %32) #4
  %41 = fdiv double %28, %40
  %42 = fcmp olt double %41, -1.000000e+00
  br i1 %42, label %46, label %43

43:                                               ; preds = %.critedge
  %44 = tail call double @sqrt(double noundef %32) #4
  %45 = fdiv double %28, %44
  br label %46

46:                                               ; preds = %43, %.critedge, %36
  %47 = phi double [ 1.000000e+00, %36 ], [ %45, %43 ], [ -1.000000e+00, %.critedge ]
  %48 = tail call double @acos(double noundef %47) #4
  %49 = tail call double @pow(double noundef %32, double noundef 0x3FC5555555555555) #4
  %50 = fmul double %49, 2.000000e+00
  %51 = fneg double %11
  %52 = fadd double %48, 0.000000e+00
  %53 = fmul double %52, 0x3FD5555555555555
  %54 = tail call double @cos(double noundef %53) #4
  %55 = tail call double @llvm.fmuladd.f64(double %50, double %54, double %51)
  %56 = fadd double %48, 0x401921FB54442D18
  %57 = fmul double %56, 0x3FD5555555555555
  %58 = tail call double @cos(double noundef %57) #4
  %59 = tail call double @llvm.fmuladd.f64(double %50, double %58, double %51)
  %60 = fadd double %48, 0x402921FB54442D18
  %61 = fmul double %60, 0x3FD5555555555555
  %62 = tail call double @cos(double noundef %61) #4
  %63 = tail call double @llvm.fmuladd.f64(double %50, double %62, double %51)
  %64 = fcmp olt double %59, %63
  %65 = select i1 %64, double %59, double %63
  %66 = fcmp olt double %55, %65
  %. = select i1 %66, double %55, double %65
  store double %., ptr %1, align 8, !tbaa !5
  %67 = fcmp olt double %55, %59
  %68 = select i1 %67, double %55, double %59
  %69 = fcmp olt double %55, %63
  %70 = select i1 %69, double %55, double %63
  %71 = getelementptr inbounds i8, ptr %1, i64 8
  %72 = insertelement <2 x double> poison, double %70, i64 0
  %73 = insertelement <2 x double> %72, double %59, i64 1
  %74 = insertelement <2 x double> poison, double %65, i64 0
  %75 = insertelement <2 x double> %74, double %63, i64 1
  %76 = fcmp ogt <2 x double> %73, %75
  %77 = select <2 x i1> %76, <2 x double> %73, <2 x double> %75
  %78 = insertelement <2 x double> poison, double %68, i64 0
  %79 = insertelement <2 x double> %78, double %55, i64 1
  %80 = fcmp ogt <2 x double> %79, %77
  %81 = select <2 x i1> %80, <2 x double> %79, <2 x double> %77
  store <2 x double> %81, ptr %71, align 8, !tbaa !5
  br label %.lr.ph

82:                                               ; preds = %9
  %83 = tail call double @sqrt(double noundef %29) #4
  %84 = fadd double %28, %83
  %85 = tail call double @CBRT(double noundef %84)
  %86 = fsub double %28, %83
  %87 = tail call double @CBRT(double noundef %86)
  %88 = fadd double %85, %87
  %89 = fsub double %88, %11
  store double %89, ptr %1, align 8, !tbaa !5
  br label %.lr.ph

90:                                               ; preds = %3
  %91 = fcmp une double %8, 0.000000e+00
  %92 = getelementptr inbounds i8, ptr %0, i64 8
  %93 = load double, ptr %92, align 8, !tbaa !5
  br i1 %91, label %94, label %108

94:                                               ; preds = %90
  %95 = fmul double %93, 5.000000e-01
  %96 = fdiv double %95, %8
  %97 = load double, ptr %0, align 8, !tbaa !5
  %98 = fneg double %97
  %99 = fdiv double %98, %8
  %100 = tail call double @llvm.fmuladd.f64(double %96, double %96, double %99)
  %101 = fcmp ogt double %100, 0.000000e+00
  br i1 %101, label %102, label %._crit_edge.sink.split

102:                                              ; preds = %94
  %103 = tail call double @sqrt(double noundef %100) #4
  %104 = fneg double %96
  %105 = fsub double %104, %103
  store double %105, ptr %1, align 8, !tbaa !5
  %106 = fsub double %103, %96
  %107 = getelementptr inbounds i8, ptr %1, i64 8
  store double %106, ptr %107, align 8, !tbaa !5
  br label %.lr.ph

108:                                              ; preds = %90
  %109 = fcmp une double %93, 0.000000e+00
  br i1 %109, label %110, label %._crit_edge.sink.split

110:                                              ; preds = %108
  %111 = load double, ptr %0, align 8, !tbaa !5
  %112 = fdiv double %111, %93
  store double %112, ptr %1, align 8, !tbaa !5
  br label %.lr.ph

.lr.ph:                                           ; preds = %102, %110, %46, %82
  %.sink = phi i32 [ 2, %102 ], [ 1, %110 ], [ 3, %46 ], [ 1, %82 ]
  %exitcond.not = phi i1 [ false, %102 ], [ true, %110 ], [ false, %46 ], [ true, %82 ]
  %exitcond.not.1 = phi i1 [ true, %102 ], [ false, %110 ], [ false, %46 ], [ false, %82 ]
  store i32 %.sink, ptr %2, align 4, !tbaa !9
  %113 = getelementptr inbounds i8, ptr %0, i64 16
  %114 = load double, ptr %1, align 8, !tbaa !5
  %115 = load double, ptr %113, align 8, !tbaa !5
  %116 = load double, ptr %4, align 8, !tbaa !5
  %117 = tail call double @llvm.fmuladd.f64(double %114, double %116, double %115)
  %118 = fmul double %114, 3.000000e+00
  %119 = fmul double %118, %116
  %120 = load <2 x double>, ptr %0, align 8, !tbaa !5
  %121 = insertelement <2 x double> poison, double %114, i64 0
  %122 = insertelement <2 x double> %121, double %115, i64 1
  %123 = insertelement <2 x double> <double poison, double 2.000000e+00>, double %117, i64 0
  %124 = shufflevector <2 x double> %120, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %125 = insertelement <2 x double> %124, double %119, i64 1
  %126 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %122, <2 x double> %123, <2 x double> %125)
  %127 = shufflevector <2 x double> %121, <2 x double> poison, <2 x i32> zeroinitializer
  %128 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %127, <2 x double> %126, <2 x double> %120)
  %129 = extractelement <2 x double> %128, i64 0
  %130 = extractelement <2 x double> %128, i64 1
  %131 = fdiv double %129, %130
  %132 = fsub double %114, %131
  store double %132, ptr %1, align 8, !tbaa !5
  br i1 %exitcond.not, label %._crit_edge, label %133, !llvm.loop !11

133:                                              ; preds = %.lr.ph
  %134 = getelementptr inbounds i8, ptr %1, i64 8
  %135 = load double, ptr %134, align 8, !tbaa !5
  %136 = load double, ptr %113, align 8, !tbaa !5
  %137 = load double, ptr %4, align 8, !tbaa !5
  %138 = tail call double @llvm.fmuladd.f64(double %135, double %137, double %136)
  %139 = fmul double %135, 3.000000e+00
  %140 = fmul double %139, %137
  %141 = load <2 x double>, ptr %0, align 8, !tbaa !5
  %142 = insertelement <2 x double> poison, double %135, i64 0
  %143 = insertelement <2 x double> %142, double %136, i64 1
  %144 = insertelement <2 x double> <double poison, double 2.000000e+00>, double %138, i64 0
  %145 = shufflevector <2 x double> %141, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %146 = insertelement <2 x double> %145, double %140, i64 1
  %147 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %143, <2 x double> %144, <2 x double> %146)
  %148 = shufflevector <2 x double> %142, <2 x double> poison, <2 x i32> zeroinitializer
  %149 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %148, <2 x double> %147, <2 x double> %141)
  %150 = extractelement <2 x double> %149, i64 0
  %151 = extractelement <2 x double> %149, i64 1
  %152 = fdiv double %150, %151
  %153 = fsub double %135, %152
  store double %153, ptr %134, align 8, !tbaa !5
  br i1 %exitcond.not.1, label %._crit_edge, label %154, !llvm.loop !11

154:                                              ; preds = %133
  %155 = getelementptr inbounds i8, ptr %1, i64 16
  %156 = load double, ptr %155, align 8, !tbaa !5
  %157 = load double, ptr %113, align 8, !tbaa !5
  %158 = load double, ptr %4, align 8, !tbaa !5
  %159 = tail call double @llvm.fmuladd.f64(double %156, double %158, double %157)
  %160 = fmul double %156, 3.000000e+00
  %161 = fmul double %160, %158
  %162 = load <2 x double>, ptr %0, align 8, !tbaa !5
  %163 = insertelement <2 x double> poison, double %156, i64 0
  %164 = insertelement <2 x double> %163, double %157, i64 1
  %165 = insertelement <2 x double> <double poison, double 2.000000e+00>, double %159, i64 0
  %166 = shufflevector <2 x double> %162, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %167 = insertelement <2 x double> %166, double %161, i64 1
  %168 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %164, <2 x double> %165, <2 x double> %167)
  %169 = shufflevector <2 x double> %163, <2 x double> poison, <2 x i32> zeroinitializer
  %170 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %169, <2 x double> %168, <2 x double> %162)
  %171 = extractelement <2 x double> %170, i64 0
  %172 = extractelement <2 x double> %170, i64 1
  %173 = fdiv double %171, %172
  %174 = fsub double %156, %173
  store double %174, ptr %155, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge.sink.split:                           ; preds = %108, %94
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph, %133, %154, %._crit_edge.sink.split
  ret i32 0
}

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local double @CBRT(double noundef) local_unnamed_addr #1

; 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 speculatable willreturn memory(none) }
attributes #1 = { 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 #2 = { 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 #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 = !{!"double", !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 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}


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