; LLVM IR from buresjan/optim_lbm :: nomad/ext/sgtelib/src (Matrix)

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.SGTELIB::Matrix" = type { ptr, %"class.std::__cxx11::basic_string", i32, i32, ptr }

@.str.100 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [12 x i8], align 1

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #1

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #2

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) #5

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK7SGTELIB6Matrix17SVD_decompositionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPPdS8_S9_i(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef %5) #7 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca i1, align 1
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca i32, align 4
  %26 = alloca i8, align 1
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %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 i32, align 4
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store i32 %5, ptr %13, align 4, !tbaa !9
  %49 = load ptr, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  %50 = getelementptr inbounds %"class.SGTELIB::Matrix", ptr %49, i32 0, i32 2
  %51 = load i32, ptr %50, align 8, !tbaa !11
  store i32 %51, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  %52 = getelementptr inbounds %"class.SGTELIB::Matrix", ptr %49, i32 0, i32 3
  %53 = load i32, ptr %52, align 4, !tbaa !16
  store i32 %53, ptr %15, align 4, !tbaa !9
  %54 = load ptr, ptr %9, align 8, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5clearEv(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  %55 = load i32, ptr %13, align 4, !tbaa !9
  %56 = icmp sgt i32 %55, 0
  br i1 %56, label %57, label %72

57:                                               ; preds = %6
  %58 = load i32, ptr %14, align 4, !tbaa !9
  %59 = load i32, ptr %15, align 4, !tbaa !9
  %60 = add nsw i32 %58, %59
  %61 = load i32, ptr %13, align 4, !tbaa !9
  %62 = icmp sgt i32 %60, %61
  br i1 %62, label %63, label %72

63:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #9
  %64 = load i32, ptr %13, align 4, !tbaa !9
  call void @_ZN7SGTELIB4itosB5cxx11Ei(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, i32 noundef %64)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef @.str.100, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %65 unwind label %68

65:                                               ; preds = %63
  %66 = load ptr, ptr %9, align 8, !tbaa !5
  %67 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #9
  store i1 false, ptr %7, align 1
  store i32 1, ptr %20, align 4
  br label %1588

68:                                               ; preds = %63
  %69 = landingpad { ptr, i32 }
          cleanup
  %70 = extractvalue { ptr, i32 } %69, 0
  store ptr %70, ptr %18, align 8
  %71 = extractvalue { ptr, i32 } %69, 1
  store i32 %71, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #9
  br label %1590

72:                                               ; preds = %57, %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %73 = load i32, ptr %15, align 4, !tbaa !9
  %74 = sext i32 %73 to i64
  %75 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %74, i64 8)
  %76 = extractvalue { i64, i1 } %75, 1
  %77 = extractvalue { i64, i1 } %75, 0
  %78 = select i1 %76, i64 -1, i64 %77
  %79 = call noalias noundef nonnull ptr @_Znam(i64 noundef %78) #10
  store ptr %79, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  store double 0.000000e+00, ptr %22, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  store double 0.000000e+00, ptr %23, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  store double 0.000000e+00, ptr %24, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %80 = load i32, ptr %15, align 4, !tbaa !9
  %81 = sub nsw i32 %80, 1
  store i32 %81, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  store i32 0, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 0, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  store i32 30, ptr %45, align 4, !tbaa !9
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %114, %72
  %83 = load i32, ptr %27, align 4, !tbaa !9
  %84 = load i32, ptr %14, align 4, !tbaa !9
  %85 = icmp slt i32 %83, %84
  br i1 %85, label %86, label %117

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

87:                                               ; preds = %110, %86
  %88 = load i32, ptr %28, align 4, !tbaa !9
  %89 = load i32, ptr %15, align 4, !tbaa !9
  %90 = icmp slt i32 %88, %89
  br i1 %90, label %91, label %113

91:                                               ; preds = %87
  %92 = getelementptr inbounds %"class.SGTELIB::Matrix", ptr %49, i32 0, i32 4
  %93 = load ptr, ptr %92, align 8, !tbaa !19
  %94 = load i32, ptr %27, align 4, !tbaa !9
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds ptr, ptr %93, i64 %95
  %97 = load ptr, ptr %96, align 8, !tbaa !5
  %98 = load i32, ptr %28, align 4, !tbaa !9
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds double, ptr %97, i64 %99
  %101 = load double, ptr %100, align 8, !tbaa !17
  %102 = load ptr, ptr %10, align 8, !tbaa !5
  %103 = load i32, ptr %27, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds ptr, ptr %102, i64 %104
  %106 = load ptr, ptr %105, align 8, !tbaa !5
  %107 = load i32, ptr %28, align 4, !tbaa !9
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds double, ptr %106, i64 %108
  store double %101, ptr %109, align 8, !tbaa !17
  br label %110

110:                                              ; preds = %91
  %111 = load i32, ptr %28, align 4, !tbaa !9
  %112 = add nsw i32 %111, 1
  store i32 %112, ptr %28, align 4, !tbaa !9
  br label %87, !llvm.loop !20

113:                                              ; preds = %87
  br label %114

114:                                              ; preds = %113
  %115 = load i32, ptr %27, align 4, !tbaa !9
  %116 = add nsw i32 %115, 1
  store i32 %116, ptr %27, align 4, !tbaa !9
  br label %82, !llvm.loop !22

117:                                              ; preds = %82
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %118

118:                                              ; preds = %591, %117
  %119 = load i32, ptr %27, align 4, !tbaa !9
  %120 = load i32, ptr %15, align 4, !tbaa !9
  %121 = icmp slt i32 %119, %120
  br i1 %121, label %122, label %594

122:                                              ; preds = %118
  %123 = load i32, ptr %27, align 4, !tbaa !9
  %124 = add nsw i32 %123, 1
  store i32 %124, ptr %30, align 4, !tbaa !9
  %125 = load double, ptr %22, align 8, !tbaa !17
  %126 = load double, ptr %23, align 8, !tbaa !17
  %127 = fmul double %125, %126
  %128 = load ptr, ptr %21, align 8, !tbaa !5
  %129 = load i32, ptr %27, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds double, ptr %128, i64 %130
  store double %127, ptr %131, align 8, !tbaa !17
  store double 0.000000e+00, ptr %22, align 8, !tbaa !17
  store double 0.000000e+00, ptr %34, align 8, !tbaa !17
  store double 0.000000e+00, ptr %23, align 8, !tbaa !17
  %132 = load i32, ptr %27, align 4, !tbaa !9
  %133 = load i32, ptr %14, align 4, !tbaa !9
  %134 = icmp slt i32 %132, %133
  br i1 %134, label %135, label %335

135:                                              ; preds = %122
  %136 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %136, ptr %29, align 4, !tbaa !9
  br label %137

137:                                              ; preds = %154, %135
  %138 = load i32, ptr %29, align 4, !tbaa !9
  %139 = load i32, ptr %14, align 4, !tbaa !9
  %140 = icmp slt i32 %138, %139
  br i1 %140, label %141, label %157

141:                                              ; preds = %137
  %142 = load ptr, ptr %10, align 8, !tbaa !5
  %143 = load i32, ptr %29, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds ptr, ptr %142, i64 %144
  %146 = load ptr, ptr %145, align 8, !tbaa !5
  %147 = load i32, ptr %27, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds double, ptr %146, i64 %148
  %150 = load double, ptr %149, align 8, !tbaa !17
  %151 = call double @llvm.fabs.f64(double %150)
  %152 = load double, ptr %22, align 8, !tbaa !17
  %153 = fadd double %152, %151
  store double %153, ptr %22, align 8, !tbaa !17
  br label %154

154:                                              ; preds = %141
  %155 = load i32, ptr %29, align 4, !tbaa !9
  %156 = add nsw i32 %155, 1
  store i32 %156, ptr %29, align 4, !tbaa !9
  br label %137, !llvm.loop !23

157:                                              ; preds = %137
  %158 = load double, ptr %22, align 8, !tbaa !17
  %159 = fcmp une double %158, 0.000000e+00
  br i1 %159, label %160, label %334

160:                                              ; preds = %157
  %161 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %161, ptr %29, align 4, !tbaa !9
  br label %162

162:                                              ; preds = %198, %160
  %163 = load i32, ptr %29, align 4, !tbaa !9
  %164 = load i32, ptr %14, align 4, !tbaa !9
  %165 = icmp slt i32 %163, %164
  br i1 %165, label %166, label %201

166:                                              ; preds = %162
  %167 = load double, ptr %22, align 8, !tbaa !17
  %168 = load ptr, ptr %10, align 8, !tbaa !5
  %169 = load i32, ptr %29, align 4, !tbaa !9
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds ptr, ptr %168, i64 %170
  %172 = load ptr, ptr %171, align 8, !tbaa !5
  %173 = load i32, ptr %27, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds double, ptr %172, i64 %174
  %176 = load double, ptr %175, align 8, !tbaa !17
  %177 = fdiv double %176, %167
  store double %177, ptr %175, align 8, !tbaa !17
  %178 = load ptr, ptr %10, align 8, !tbaa !5
  %179 = load i32, ptr %29, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds ptr, ptr %178, i64 %180
  %182 = load ptr, ptr %181, align 8, !tbaa !5
  %183 = load i32, ptr %27, align 4, !tbaa !9
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds double, ptr %182, i64 %184
  %186 = load double, ptr %185, align 8, !tbaa !17
  %187 = load ptr, ptr %10, align 8, !tbaa !5
  %188 = load i32, ptr %29, align 4, !tbaa !9
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds ptr, ptr %187, i64 %189
  %191 = load ptr, ptr %190, align 8, !tbaa !5
  %192 = load i32, ptr %27, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds double, ptr %191, i64 %193
  %195 = load double, ptr %194, align 8, !tbaa !17
  %196 = load double, ptr %34, align 8, !tbaa !17
  %197 = call double @llvm.fmuladd.f64(double %186, double %195, double %196)
  store double %197, ptr %34, align 8, !tbaa !17
  br label %198

198:                                              ; preds = %166
  %199 = load i32, ptr %29, align 4, !tbaa !9
  %200 = add nsw i32 %199, 1
  store i32 %200, ptr %29, align 4, !tbaa !9
  br label %162, !llvm.loop !24

201:                                              ; preds = %162
  %202 = load ptr, ptr %10, align 8, !tbaa !5
  %203 = load i32, ptr %27, align 4, !tbaa !9
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds ptr, ptr %202, i64 %204
  %206 = load ptr, ptr %205, align 8, !tbaa !5
  %207 = load i32, ptr %27, align 4, !tbaa !9
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %206, i64 %208
  %210 = load double, ptr %209, align 8, !tbaa !17
  store double %210, ptr %35, align 8, !tbaa !17
  %211 = load double, ptr %35, align 8, !tbaa !17
  %212 = fcmp oge double %211, 0.000000e+00
  br i1 %212, label %213, label %218

213:                                              ; preds = %201
  %214 = load double, ptr %34, align 8, !tbaa !17
  %215 = call double @sqrt(double noundef %214) #9
  %216 = call double @llvm.fabs.f64(double %215)
  %217 = fneg double %216
  br label %222

218:                                              ; preds = %201
  %219 = load double, ptr %34, align 8, !tbaa !17
  %220 = call double @sqrt(double noundef %219) #9
  %221 = call double @llvm.fabs.f64(double %220)
  br label %222

222:                                              ; preds = %218, %213
  %223 = phi double [ %217, %213 ], [ %221, %218 ]
  store double %223, ptr %23, align 8, !tbaa !17
  %224 = load double, ptr %35, align 8, !tbaa !17
  %225 = load double, ptr %23, align 8, !tbaa !17
  %226 = load double, ptr %34, align 8, !tbaa !17
  %227 = fneg double %226
  %228 = call double @llvm.fmuladd.f64(double %224, double %225, double %227)
  store double %228, ptr %36, align 8, !tbaa !17
  %229 = load double, ptr %35, align 8, !tbaa !17
  %230 = load double, ptr %23, align 8, !tbaa !17
  %231 = fsub double %229, %230
  %232 = load ptr, ptr %10, align 8, !tbaa !5
  %233 = load i32, ptr %27, align 4, !tbaa !9
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds ptr, ptr %232, i64 %234
  %236 = load ptr, ptr %235, align 8, !tbaa !5
  %237 = load i32, ptr %27, align 4, !tbaa !9
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds double, ptr %236, i64 %238
  store double %231, ptr %239, align 8, !tbaa !17
  %240 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %240, ptr %28, align 4, !tbaa !9
  br label %241

241:                                              ; preds = %309, %222
  %242 = load i32, ptr %28, align 4, !tbaa !9
  %243 = load i32, ptr %15, align 4, !tbaa !9
  %244 = icmp slt i32 %242, %243
  br i1 %244, label %245, label %312

245:                                              ; preds = %241
  store double 0.000000e+00, ptr %34, align 8, !tbaa !17
  %246 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %246, ptr %29, align 4, !tbaa !9
  br label %247

247:                                              ; preds = %272, %245
  %248 = load i32, ptr %29, align 4, !tbaa !9
  %249 = load i32, ptr %14, align 4, !tbaa !9
  %250 = icmp slt i32 %248, %249
  br i1 %250, label %251, label %275

251:                                              ; preds = %247
  %252 = load ptr, ptr %10, align 8, !tbaa !5
  %253 = load i32, ptr %29, align 4, !tbaa !9
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds ptr, ptr %252, i64 %254
  %256 = load ptr, ptr %255, align 8, !tbaa !5
  %257 = load i32, ptr %27, align 4, !tbaa !9
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds double, ptr %256, i64 %258
  %260 = load double, ptr %259, align 8, !tbaa !17
  %261 = load ptr, ptr %10, align 8, !tbaa !5
  %262 = load i32, ptr %29, align 4, !tbaa !9
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds ptr, ptr %261, i64 %263
  %265 = load ptr, ptr %264, align 8, !tbaa !5
  %266 = load i32, ptr %28, align 4, !tbaa !9
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds double, ptr %265, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !17
  %270 = load double, ptr %34, align 8, !tbaa !17
  %271 = call double @llvm.fmuladd.f64(double %260, double %269, double %270)
  store double %271, ptr %34, align 8, !tbaa !17
  br label %272

272:                                              ; preds = %251
  %273 = load i32, ptr %29, align 4, !tbaa !9
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %29, align 4, !tbaa !9
  br label %247, !llvm.loop !25

275:                                              ; preds = %247
  %276 = load double, ptr %34, align 8, !tbaa !17
  %277 = load double, ptr %36, align 8, !tbaa !17
  %278 = fdiv double %276, %277
  store double %278, ptr %35, align 8, !tbaa !17
  %279 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %279, ptr %29, align 4, !tbaa !9
  br label %280

280:                                              ; preds = %305, %275
  %281 = load i32, ptr %29, align 4, !tbaa !9
  %282 = load i32, ptr %14, align 4, !tbaa !9
  %283 = icmp slt i32 %281, %282
  br i1 %283, label %284, label %308

284:                                              ; preds = %280
  %285 = load double, ptr %35, align 8, !tbaa !17
  %286 = load ptr, ptr %10, align 8, !tbaa !5
  %287 = load i32, ptr %29, align 4, !tbaa !9
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds ptr, ptr %286, i64 %288
  %290 = load ptr, ptr %289, align 8, !tbaa !5
  %291 = load i32, ptr %27, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %290, i64 %292
  %294 = load double, ptr %293, align 8, !tbaa !17
  %295 = load ptr, ptr %10, align 8, !tbaa !5
  %296 = load i32, ptr %29, align 4, !tbaa !9
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds ptr, ptr %295, i64 %297
  %299 = load ptr, ptr %298, align 8, !tbaa !5
  %300 = load i32, ptr %28, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds double, ptr %299, i64 %301
  %303 = load double, ptr %302, align 8, !tbaa !17
  %304 = call double @llvm.fmuladd.f64(double %285, double %294, double %303)
  store double %304, ptr %302, align 8, !tbaa !17
  br label %305

305:                                              ; preds = %284
  %306 = load i32, ptr %29, align 4, !tbaa !9
  %307 = add nsw i32 %306, 1
  store i32 %307, ptr %29, align 4, !tbaa !9
  br label %280, !llvm.loop !26

308:                                              ; preds = %280
  br label %309

309:                                              ; preds = %308
  %310 = load i32, ptr %28, align 4, !tbaa !9
  %311 = add nsw i32 %310, 1
  store i32 %311, ptr %28, align 4, !tbaa !9
  br label %241, !llvm.loop !27

312:                                              ; preds = %241
  %313 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %313, ptr %29, align 4, !tbaa !9
  br label %314

314:                                              ; preds = %330, %312
  %315 = load i32, ptr %29, align 4, !tbaa !9
  %316 = load i32, ptr %14, align 4, !tbaa !9
  %317 = icmp slt i32 %315, %316
  br i1 %317, label %318, label %333

318:                                              ; preds = %314
  %319 = load double, ptr %22, align 8, !tbaa !17
  %320 = load ptr, ptr %10, align 8, !tbaa !5
  %321 = load i32, ptr %29, align 4, !tbaa !9
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds ptr, ptr %320, i64 %322
  %324 = load ptr, ptr %323, align 8, !tbaa !5
  %325 = load i32, ptr %27, align 4, !tbaa !9
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds double, ptr %324, i64 %326
  %328 = load double, ptr %327, align 8, !tbaa !17
  %329 = fmul double %328, %319
  store double %329, ptr %327, align 8, !tbaa !17
  br label %330

330:                                              ; preds = %318
  %331 = load i32, ptr %29, align 4, !tbaa !9
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %29, align 4, !tbaa !9
  br label %314, !llvm.loop !28

333:                                              ; preds = %314
  br label %334

334:                                              ; preds = %333, %157
  br label %335

335:                                              ; preds = %334, %122
  %336 = load double, ptr %22, align 8, !tbaa !17
  %337 = load double, ptr %23, align 8, !tbaa !17
  %338 = fmul double %336, %337
  %339 = load ptr, ptr %11, align 8, !tbaa !5
  %340 = load i32, ptr %27, align 4, !tbaa !9
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds double, ptr %339, i64 %341
  store double %338, ptr %342, align 8, !tbaa !17
  store double 0.000000e+00, ptr %22, align 8, !tbaa !17
  store double 0.000000e+00, ptr %34, align 8, !tbaa !17
  store double 0.000000e+00, ptr %23, align 8, !tbaa !17
  %343 = load i32, ptr %27, align 4, !tbaa !9
  %344 = load i32, ptr %14, align 4, !tbaa !9
  %345 = icmp slt i32 %343, %344
  br i1 %345, label %346, label %568

346:                                              ; preds = %335
  %347 = load i32, ptr %27, align 4, !tbaa !9
  %348 = load i32, ptr %25, align 4, !tbaa !9
  %349 = icmp ne i32 %347, %348
  br i1 %349, label %350, label %568

350:                                              ; preds = %346
  %351 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %351, ptr %29, align 4, !tbaa !9
  br label %352

352:                                              ; preds = %369, %350
  %353 = load i32, ptr %29, align 4, !tbaa !9
  %354 = load i32, ptr %15, align 4, !tbaa !9
  %355 = icmp slt i32 %353, %354
  br i1 %355, label %356, label %372

356:                                              ; preds = %352
  %357 = load ptr, ptr %10, align 8, !tbaa !5
  %358 = load i32, ptr %27, align 4, !tbaa !9
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds ptr, ptr %357, i64 %359
  %361 = load ptr, ptr %360, align 8, !tbaa !5
  %362 = load i32, ptr %29, align 4, !tbaa !9
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds double, ptr %361, i64 %363
  %365 = load double, ptr %364, align 8, !tbaa !17
  %366 = call double @llvm.fabs.f64(double %365)
  %367 = load double, ptr %22, align 8, !tbaa !17
  %368 = fadd double %367, %366
  store double %368, ptr %22, align 8, !tbaa !17
  br label %369

369:                                              ; preds = %356
  %370 = load i32, ptr %29, align 4, !tbaa !9
  %371 = add nsw i32 %370, 1
  store i32 %371, ptr %29, align 4, !tbaa !9
  br label %352, !llvm.loop !29

372:                                              ; preds = %352
  %373 = load double, ptr %22, align 8, !tbaa !17
  %374 = fcmp une double %373, 0.000000e+00
  br i1 %374, label %375, label %567

375:                                              ; preds = %372
  %376 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %376, ptr %29, align 4, !tbaa !9
  br label %377

377:                                              ; preds = %413, %375
  %378 = load i32, ptr %29, align 4, !tbaa !9
  %379 = load i32, ptr %15, align 4, !tbaa !9
  %380 = icmp slt i32 %378, %379
  br i1 %380, label %381, label %416

381:                                              ; preds = %377
  %382 = load double, ptr %22, align 8, !tbaa !17
  %383 = load ptr, ptr %10, align 8, !tbaa !5
  %384 = load i32, ptr %27, align 4, !tbaa !9
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds ptr, ptr %383, i64 %385
  %387 = load ptr, ptr %386, align 8, !tbaa !5
  %388 = load i32, ptr %29, align 4, !tbaa !9
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds double, ptr %387, i64 %389
  %391 = load double, ptr %390, align 8, !tbaa !17
  %392 = fdiv double %391, %382
  store double %392, ptr %390, align 8, !tbaa !17
  %393 = load ptr, ptr %10, align 8, !tbaa !5
  %394 = load i32, ptr %27, align 4, !tbaa !9
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds ptr, ptr %393, i64 %395
  %397 = load ptr, ptr %396, align 8, !tbaa !5
  %398 = load i32, ptr %29, align 4, !tbaa !9
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds double, ptr %397, i64 %399
  %401 = load double, ptr %400, align 8, !tbaa !17
  %402 = load ptr, ptr %10, align 8, !tbaa !5
  %403 = load i32, ptr %27, align 4, !tbaa !9
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds ptr, ptr %402, i64 %404
  %406 = load ptr, ptr %405, align 8, !tbaa !5
  %407 = load i32, ptr %29, 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 !17
  %411 = load double, ptr %34, align 8, !tbaa !17
  %412 = call double @llvm.fmuladd.f64(double %401, double %410, double %411)
  store double %412, ptr %34, align 8, !tbaa !17
  br label %413

413:                                              ; preds = %381
  %414 = load i32, ptr %29, align 4, !tbaa !9
  %415 = add nsw i32 %414, 1
  store i32 %415, ptr %29, align 4, !tbaa !9
  br label %377, !llvm.loop !30

416:                                              ; preds = %377
  %417 = load ptr, ptr %10, align 8, !tbaa !5
  %418 = load i32, ptr %27, align 4, !tbaa !9
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds ptr, ptr %417, i64 %419
  %421 = load ptr, ptr %420, align 8, !tbaa !5
  %422 = load i32, ptr %30, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds double, ptr %421, i64 %423
  %425 = load double, ptr %424, align 8, !tbaa !17
  store double %425, ptr %35, align 8, !tbaa !17
  %426 = load double, ptr %35, align 8, !tbaa !17
  %427 = fcmp oge double %426, 0.000000e+00
  br i1 %427, label %428, label %433

428:                                              ; preds = %416
  %429 = load double, ptr %34, align 8, !tbaa !17
  %430 = call double @sqrt(double noundef %429) #9
  %431 = call double @llvm.fabs.f64(double %430)
  %432 = fneg double %431
  br label %437

433:                                              ; preds = %416
  %434 = load double, ptr %34, align 8, !tbaa !17
  %435 = call double @sqrt(double noundef %434) #9
  %436 = call double @llvm.fabs.f64(double %435)
  br label %437

437:                                              ; preds = %433, %428
  %438 = phi double [ %432, %428 ], [ %436, %433 ]
  store double %438, ptr %23, align 8, !tbaa !17
  %439 = load double, ptr %35, align 8, !tbaa !17
  %440 = load double, ptr %23, align 8, !tbaa !17
  %441 = load double, ptr %34, align 8, !tbaa !17
  %442 = fneg double %441
  %443 = call double @llvm.fmuladd.f64(double %439, double %440, double %442)
  store double %443, ptr %36, align 8, !tbaa !17
  %444 = load double, ptr %35, align 8, !tbaa !17
  %445 = load double, ptr %23, align 8, !tbaa !17
  %446 = fsub double %444, %445
  %447 = load ptr, ptr %10, align 8, !tbaa !5
  %448 = load i32, ptr %27, align 4, !tbaa !9
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds ptr, ptr %447, i64 %449
  %451 = load ptr, ptr %450, align 8, !tbaa !5
  %452 = load i32, ptr %30, align 4, !tbaa !9
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds double, ptr %451, i64 %453
  store double %446, ptr %454, align 8, !tbaa !17
  %455 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %455, ptr %29, align 4, !tbaa !9
  br label %456

456:                                              ; preds = %476, %437
  %457 = load i32, ptr %29, align 4, !tbaa !9
  %458 = load i32, ptr %15, align 4, !tbaa !9
  %459 = icmp slt i32 %457, %458
  br i1 %459, label %460, label %479

460:                                              ; preds = %456
  %461 = load ptr, ptr %10, align 8, !tbaa !5
  %462 = load i32, ptr %27, align 4, !tbaa !9
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds ptr, ptr %461, i64 %463
  %465 = load ptr, ptr %464, align 8, !tbaa !5
  %466 = load i32, ptr %29, align 4, !tbaa !9
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds double, ptr %465, i64 %467
  %469 = load double, ptr %468, align 8, !tbaa !17
  %470 = load double, ptr %36, align 8, !tbaa !17
  %471 = fdiv double %469, %470
  %472 = load ptr, ptr %21, align 8, !tbaa !5
  %473 = load i32, ptr %29, align 4, !tbaa !9
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds double, ptr %472, i64 %474
  store double %471, ptr %475, align 8, !tbaa !17
  br label %476

476:                                              ; preds = %460
  %477 = load i32, ptr %29, align 4, !tbaa !9
  %478 = add nsw i32 %477, 1
  store i32 %478, ptr %29, align 4, !tbaa !9
  br label %456, !llvm.loop !31

479:                                              ; preds = %456
  %480 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %480, ptr %28, align 4, !tbaa !9
  br label %481

481:                                              ; preds = %542, %479
  %482 = load i32, ptr %28, align 4, !tbaa !9
  %483 = load i32, ptr %14, align 4, !tbaa !9
  %484 = icmp slt i32 %482, %483
  br i1 %484, label %485, label %545

485:                                              ; preds = %481
  store double 0.000000e+00, ptr %34, align 8, !tbaa !17
  %486 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %486, ptr %29, align 4, !tbaa !9
  br label %487

487:                                              ; preds = %512, %485
  %488 = load i32, ptr %29, align 4, !tbaa !9
  %489 = load i32, ptr %15, align 4, !tbaa !9
  %490 = icmp slt i32 %488, %489
  br i1 %490, label %491, label %515

491:                                              ; preds = %487
  %492 = load ptr, ptr %10, align 8, !tbaa !5
  %493 = load i32, ptr %28, align 4, !tbaa !9
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds ptr, ptr %492, i64 %494
  %496 = load ptr, ptr %495, align 8, !tbaa !5
  %497 = load i32, ptr %29, align 4, !tbaa !9
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds double, ptr %496, i64 %498
  %500 = load double, ptr %499, align 8, !tbaa !17
  %501 = load ptr, ptr %10, align 8, !tbaa !5
  %502 = load i32, ptr %27, align 4, !tbaa !9
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds ptr, ptr %501, i64 %503
  %505 = load ptr, ptr %504, align 8, !tbaa !5
  %506 = load i32, ptr %29, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds double, ptr %505, i64 %507
  %509 = load double, ptr %508, align 8, !tbaa !17
  %510 = load double, ptr %34, align 8, !tbaa !17
  %511 = call double @llvm.fmuladd.f64(double %500, double %509, double %510)
  store double %511, ptr %34, align 8, !tbaa !17
  br label %512

512:                                              ; preds = %491
  %513 = load i32, ptr %29, align 4, !tbaa !9
  %514 = add nsw i32 %513, 1
  store i32 %514, ptr %29, align 4, !tbaa !9
  br label %487, !llvm.loop !32

515:                                              ; preds = %487
  %516 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %516, ptr %29, align 4, !tbaa !9
  br label %517

517:                                              ; preds = %538, %515
  %518 = load i32, ptr %29, align 4, !tbaa !9
  %519 = load i32, ptr %15, align 4, !tbaa !9
  %520 = icmp slt i32 %518, %519
  br i1 %520, label %521, label %541

521:                                              ; preds = %517
  %522 = load double, ptr %34, align 8, !tbaa !17
  %523 = load ptr, ptr %21, align 8, !tbaa !5
  %524 = load i32, ptr %29, align 4, !tbaa !9
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds double, ptr %523, i64 %525
  %527 = load double, ptr %526, align 8, !tbaa !17
  %528 = load ptr, ptr %10, align 8, !tbaa !5
  %529 = load i32, ptr %28, align 4, !tbaa !9
  %530 = sext i32 %529 to i64
  %531 = getelementptr inbounds ptr, ptr %528, i64 %530
  %532 = load ptr, ptr %531, align 8, !tbaa !5
  %533 = load i32, ptr %29, align 4, !tbaa !9
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds double, ptr %532, i64 %534
  %536 = load double, ptr %535, align 8, !tbaa !17
  %537 = call double @llvm.fmuladd.f64(double %522, double %527, double %536)
  store double %537, ptr %535, align 8, !tbaa !17
  br label %538

538:                                              ; preds = %521
  %539 = load i32, ptr %29, align 4, !tbaa !9
  %540 = add nsw i32 %539, 1
  store i32 %540, ptr %29, align 4, !tbaa !9
  br label %517, !llvm.loop !33

541:                                              ; preds = %517
  br label %542

542:                                              ; preds = %541
  %543 = load i32, ptr %28, align 4, !tbaa !9
  %544 = add nsw i32 %543, 1
  store i32 %544, ptr %28, align 4, !tbaa !9
  br label %481, !llvm.loop !34

545:                                              ; preds = %481
  %546 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %546, ptr %29, align 4, !tbaa !9
  br label %547

547:                                              ; preds = %563, %545
  %548 = load i32, ptr %29, align 4, !tbaa !9
  %549 = load i32, ptr %15, align 4, !tbaa !9
  %550 = icmp slt i32 %548, %549
  br i1 %550, label %551, label %566

551:                                              ; preds = %547
  %552 = load double, ptr %22, align 8, !tbaa !17
  %553 = load ptr, ptr %10, align 8, !tbaa !5
  %554 = load i32, ptr %27, align 4, !tbaa !9
  %555 = sext i32 %554 to i64
  %556 = getelementptr inbounds ptr, ptr %553, i64 %555
  %557 = load ptr, ptr %556, align 8, !tbaa !5
  %558 = load i32, ptr %29, align 4, !tbaa !9
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds double, ptr %557, i64 %559
  %561 = load double, ptr %560, align 8, !tbaa !17
  %562 = fmul double %561, %552
  store double %562, ptr %560, align 8, !tbaa !17
  br label %563

563:                                              ; preds = %551
  %564 = load i32, ptr %29, align 4, !tbaa !9
  %565 = add nsw i32 %564, 1
  store i32 %565, ptr %29, align 4, !tbaa !9
  br label %547, !llvm.loop !35

566:                                              ; preds = %547
  br label %567

567:                                              ; preds = %566, %372
  br label %568

568:                                              ; preds = %567, %346, %335
  %569 = load ptr, ptr %11, align 8, !tbaa !5
  %570 = load i32, ptr %27, align 4, !tbaa !9
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds double, ptr %569, i64 %571
  %573 = load double, ptr %572, align 8, !tbaa !17
  %574 = call double @llvm.fabs.f64(double %573)
  %575 = load ptr, ptr %21, align 8, !tbaa !5
  %576 = load i32, ptr %27, align 4, !tbaa !9
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds double, ptr %575, i64 %577
  %579 = load double, ptr %578, align 8, !tbaa !17
  %580 = call double @llvm.fabs.f64(double %579)
  %581 = fadd double %574, %580
  store double %581, ptr %37, align 8, !tbaa !17
  %582 = load double, ptr %24, align 8, !tbaa !17
  %583 = load double, ptr %37, align 8, !tbaa !17
  %584 = fcmp ogt double %582, %583
  br i1 %584, label %585, label %587

585:                                              ; preds = %568
  %586 = load double, ptr %24, align 8, !tbaa !17
  br label %589

587:                                              ; preds = %568
  %588 = load double, ptr %37, align 8, !tbaa !17
  br label %589

589:                                              ; preds = %587, %585
  %590 = phi double [ %586, %585 ], [ %588, %587 ]
  store double %590, ptr %24, align 8, !tbaa !17
  br label %591

591:                                              ; preds = %589
  %592 = load i32, ptr %27, align 4, !tbaa !9
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %27, align 4, !tbaa !9
  br label %118, !llvm.loop !36

594:                                              ; preds = %118
  %595 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %595, ptr %27, align 4, !tbaa !9
  br label %596

596:                                              ; preds = %758, %594
  %597 = load i32, ptr %27, align 4, !tbaa !9
  %598 = icmp sge i32 %597, 0
  br i1 %598, label %599, label %761

599:                                              ; preds = %596
  %600 = load i32, ptr %27, align 4, !tbaa !9
  %601 = load i32, ptr %25, align 4, !tbaa !9
  %602 = icmp slt i32 %600, %601
  br i1 %602, label %603, label %743

603:                                              ; preds = %599
  %604 = load double, ptr %23, align 8, !tbaa !17
  %605 = fcmp une double %604, 0.000000e+00
  br i1 %605, label %606, label %716

606:                                              ; preds = %603
  %607 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %607, ptr %28, align 4, !tbaa !9
  br label %608

608:                                              ; preds = %642, %606
  %609 = load i32, ptr %28, align 4, !tbaa !9
  %610 = load i32, ptr %15, align 4, !tbaa !9
  %611 = icmp slt i32 %609, %610
  br i1 %611, label %612, label %645

612:                                              ; preds = %608
  %613 = load ptr, ptr %10, align 8, !tbaa !5
  %614 = load i32, ptr %27, align 4, !tbaa !9
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds ptr, ptr %613, i64 %615
  %617 = load ptr, ptr %616, align 8, !tbaa !5
  %618 = load i32, ptr %28, align 4, !tbaa !9
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds double, ptr %617, i64 %619
  %621 = load double, ptr %620, align 8, !tbaa !17
  %622 = load ptr, ptr %10, align 8, !tbaa !5
  %623 = load i32, ptr %27, align 4, !tbaa !9
  %624 = sext i32 %623 to i64
  %625 = getelementptr inbounds ptr, ptr %622, i64 %624
  %626 = load ptr, ptr %625, align 8, !tbaa !5
  %627 = load i32, ptr %30, align 4, !tbaa !9
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds double, ptr %626, i64 %628
  %630 = load double, ptr %629, align 8, !tbaa !17
  %631 = fdiv double %621, %630
  %632 = load double, ptr %23, align 8, !tbaa !17
  %633 = fdiv double %631, %632
  %634 = load ptr, ptr %12, align 8, !tbaa !5
  %635 = load i32, ptr %28, align 4, !tbaa !9
  %636 = sext i32 %635 to i64
  %637 = getelementptr inbounds ptr, ptr %634, i64 %636
  %638 = load ptr, ptr %637, align 8, !tbaa !5
  %639 = load i32, ptr %27, align 4, !tbaa !9
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds double, ptr %638, i64 %640
  store double %633, ptr %641, align 8, !tbaa !17
  br label %642

642:                                              ; preds = %612
  %643 = load i32, ptr %28, align 4, !tbaa !9
  %644 = add nsw i32 %643, 1
  store i32 %644, ptr %28, align 4, !tbaa !9
  br label %608, !llvm.loop !37

645:                                              ; preds = %608
  %646 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %646, ptr %28, align 4, !tbaa !9
  br label %647

647:                                              ; preds = %712, %645
  %648 = load i32, ptr %28, align 4, !tbaa !9
  %649 = load i32, ptr %15, align 4, !tbaa !9
  %650 = icmp slt i32 %648, %649
  br i1 %650, label %651, label %715

651:                                              ; preds = %647
  store double 0.000000e+00, ptr %34, align 8, !tbaa !17
  %652 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %652, ptr %29, align 4, !tbaa !9
  br label %653

653:                                              ; preds = %678, %651
  %654 = load i32, ptr %29, align 4, !tbaa !9
  %655 = load i32, ptr %15, align 4, !tbaa !9
  %656 = icmp slt i32 %654, %655
  br i1 %656, label %657, label %681

657:                                              ; preds = %653
  %658 = load ptr, ptr %10, align 8, !tbaa !5
  %659 = load i32, ptr %27, align 4, !tbaa !9
  %660 = sext i32 %659 to i64
  %661 = getelementptr inbounds ptr, ptr %658, i64 %660
  %662 = load ptr, ptr %661, align 8, !tbaa !5
  %663 = load i32, ptr %29, align 4, !tbaa !9
  %664 = sext i32 %663 to i64
  %665 = getelementptr inbounds double, ptr %662, i64 %664
  %666 = load double, ptr %665, align 8, !tbaa !17
  %667 = load ptr, ptr %12, align 8, !tbaa !5
  %668 = load i32, ptr %29, align 4, !tbaa !9
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds ptr, ptr %667, i64 %669
  %671 = load ptr, ptr %670, align 8, !tbaa !5
  %672 = load i32, ptr %28, align 4, !tbaa !9
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds double, ptr %671, i64 %673
  %675 = load double, ptr %674, align 8, !tbaa !17
  %676 = load double, ptr %34, align 8, !tbaa !17
  %677 = call double @llvm.fmuladd.f64(double %666, double %675, double %676)
  store double %677, ptr %34, align 8, !tbaa !17
  br label %678

678:                                              ; preds = %657
  %679 = load i32, ptr %29, align 4, !tbaa !9
  %680 = add nsw i32 %679, 1
  store i32 %680, ptr %29, align 4, !tbaa !9
  br label %653, !llvm.loop !38

681:                                              ; preds = %653
  %682 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %682, ptr %29, align 4, !tbaa !9
  br label %683

683:                                              ; preds = %708, %681
  %684 = load i32, ptr %29, align 4, !tbaa !9
  %685 = load i32, ptr %15, align 4, !tbaa !9
  %686 = icmp slt i32 %684, %685
  br i1 %686, label %687, label %711

687:                                              ; preds = %683
  %688 = load double, ptr %34, align 8, !tbaa !17
  %689 = load ptr, ptr %12, align 8, !tbaa !5
  %690 = load i32, ptr %29, align 4, !tbaa !9
  %691 = sext i32 %690 to i64
  %692 = getelementptr inbounds ptr, ptr %689, i64 %691
  %693 = load ptr, ptr %692, align 8, !tbaa !5
  %694 = load i32, ptr %27, align 4, !tbaa !9
  %695 = sext i32 %694 to i64
  %696 = getelementptr inbounds double, ptr %693, i64 %695
  %697 = load double, ptr %696, align 8, !tbaa !17
  %698 = load ptr, ptr %12, align 8, !tbaa !5
  %699 = load i32, ptr %29, align 4, !tbaa !9
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds ptr, ptr %698, i64 %700
  %702 = load ptr, ptr %701, align 8, !tbaa !5
  %703 = load i32, ptr %28, align 4, !tbaa !9
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds double, ptr %702, i64 %704
  %706 = load double, ptr %705, align 8, !tbaa !17
  %707 = call double @llvm.fmuladd.f64(double %688, double %697, double %706)
  store double %707, ptr %705, align 8, !tbaa !17
  br label %708

708:                                              ; preds = %687
  %709 = load i32, ptr %29, align 4, !tbaa !9
  %710 = add nsw i32 %709, 1
  store i32 %710, ptr %29, align 4, !tbaa !9
  br label %683, !llvm.loop !39

711:                                              ; preds = %683
  br label %712

712:                                              ; preds = %711
  %713 = load i32, ptr %28, align 4, !tbaa !9
  %714 = add nsw i32 %713, 1
  store i32 %714, ptr %28, align 4, !tbaa !9
  br label %647, !llvm.loop !40

715:                                              ; preds = %647
  br label %716

716:                                              ; preds = %715, %603
  %717 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %717, ptr %28, align 4, !tbaa !9
  br label %718

718:                                              ; preds = %739, %716
  %719 = load i32, ptr %28, align 4, !tbaa !9
  %720 = load i32, ptr %15, align 4, !tbaa !9
  %721 = icmp slt i32 %719, %720
  br i1 %721, label %722, label %742

722:                                              ; preds = %718
  %723 = load ptr, ptr %12, align 8, !tbaa !5
  %724 = load i32, ptr %28, align 4, !tbaa !9
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds ptr, ptr %723, i64 %725
  %727 = load ptr, ptr %726, align 8, !tbaa !5
  %728 = load i32, ptr %27, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds double, ptr %727, i64 %729
  store double 0.000000e+00, ptr %730, align 8, !tbaa !17
  %731 = load ptr, ptr %12, align 8, !tbaa !5
  %732 = load i32, ptr %27, align 4, !tbaa !9
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds ptr, ptr %731, i64 %733
  %735 = load ptr, ptr %734, align 8, !tbaa !5
  %736 = load i32, ptr %28, align 4, !tbaa !9
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds double, ptr %735, i64 %737
  store double 0.000000e+00, ptr %738, align 8, !tbaa !17
  br label %739

739:                                              ; preds = %722
  %740 = load i32, ptr %28, align 4, !tbaa !9
  %741 = add nsw i32 %740, 1
  store i32 %741, ptr %28, align 4, !tbaa !9
  br label %718, !llvm.loop !41

742:                                              ; preds = %718
  br label %743

743:                                              ; preds = %742, %599
  %744 = load ptr, ptr %12, align 8, !tbaa !5
  %745 = load i32, ptr %27, align 4, !tbaa !9
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds ptr, ptr %744, i64 %746
  %748 = load ptr, ptr %747, align 8, !tbaa !5
  %749 = load i32, ptr %27, align 4, !tbaa !9
  %750 = sext i32 %749 to i64
  %751 = getelementptr inbounds double, ptr %748, i64 %750
  store double 1.000000e+00, ptr %751, align 8, !tbaa !17
  %752 = load ptr, ptr %21, align 8, !tbaa !5
  %753 = load i32, ptr %27, align 4, !tbaa !9
  %754 = sext i32 %753 to i64
  %755 = getelementptr inbounds double, ptr %752, i64 %754
  %756 = load double, ptr %755, align 8, !tbaa !17
  store double %756, ptr %23, align 8, !tbaa !17
  %757 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %757, ptr %30, align 4, !tbaa !9
  br label %758

758:                                              ; preds = %743
  %759 = load i32, ptr %27, align 4, !tbaa !9
  %760 = add nsw i32 %759, -1
  store i32 %760, ptr %27, align 4, !tbaa !9
  br label %596, !llvm.loop !42

761:                                              ; preds = %596
  %762 = load i32, ptr %14, align 4, !tbaa !9
  %763 = load i32, ptr %15, align 4, !tbaa !9
  %764 = icmp slt i32 %762, %763
  br i1 %764, label %765, label %767

765:                                              ; preds = %761
  %766 = load i32, ptr %14, align 4, !tbaa !9
  br label %769

767:                                              ; preds = %761
  %768 = load i32, ptr %15, align 4, !tbaa !9
  br label %769

769:                                              ; preds = %767, %765
  %770 = phi i32 [ %766, %765 ], [ %768, %767 ]
  %771 = sub nsw i32 %770, 1
  store i32 %771, ptr %27, align 4, !tbaa !9
  br label %772

772:                                              ; preds = %940, %769
  %773 = load i32, ptr %27, align 4, !tbaa !9
  %774 = icmp sge i32 %773, 0
  br i1 %774, label %775, label %943

775:                                              ; preds = %772
  %776 = load i32, ptr %27, align 4, !tbaa !9
  %777 = add nsw i32 %776, 1
  store i32 %777, ptr %30, align 4, !tbaa !9
  %778 = load ptr, ptr %11, align 8, !tbaa !5
  %779 = load i32, ptr %27, align 4, !tbaa !9
  %780 = sext i32 %779 to i64
  %781 = getelementptr inbounds double, ptr %778, i64 %780
  %782 = load double, ptr %781, align 8, !tbaa !17
  store double %782, ptr %23, align 8, !tbaa !17
  %783 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %783, ptr %28, align 4, !tbaa !9
  br label %784

784:                                              ; preds = %797, %775
  %785 = load i32, ptr %28, align 4, !tbaa !9
  %786 = load i32, ptr %15, align 4, !tbaa !9
  %787 = icmp slt i32 %785, %786
  br i1 %787, label %788, label %800

788:                                              ; preds = %784
  %789 = load ptr, ptr %10, align 8, !tbaa !5
  %790 = load i32, ptr %27, align 4, !tbaa !9
  %791 = sext i32 %790 to i64
  %792 = getelementptr inbounds ptr, ptr %789, i64 %791
  %793 = load ptr, ptr %792, align 8, !tbaa !5
  %794 = load i32, ptr %28, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds double, ptr %793, i64 %795
  store double 0.000000e+00, ptr %796, align 8, !tbaa !17
  br label %797

797:                                              ; preds = %788
  %798 = load i32, ptr %28, align 4, !tbaa !9
  %799 = add nsw i32 %798, 1
  store i32 %799, ptr %28, align 4, !tbaa !9
  br label %784, !llvm.loop !43

800:                                              ; preds = %784
  %801 = load double, ptr %23, align 8, !tbaa !17
  %802 = fcmp une double %801, 0.000000e+00
  br i1 %802, label %803, label %910

803:                                              ; preds = %800
  %804 = load double, ptr %23, align 8, !tbaa !17
  %805 = fdiv double 1.000000e+00, %804
  store double %805, ptr %23, align 8, !tbaa !17
  %806 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %806, ptr %28, align 4, !tbaa !9
  br label %807

807:                                              ; preds = %885, %803
  %808 = load i32, ptr %28, align 4, !tbaa !9
  %809 = load i32, ptr %15, align 4, !tbaa !9
  %810 = icmp slt i32 %808, %809
  br i1 %810, label %811, label %888

811:                                              ; preds = %807
  store double 0.000000e+00, ptr %34, align 8, !tbaa !17
  %812 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %812, ptr %29, align 4, !tbaa !9
  br label %813

813:                                              ; preds = %838, %811
  %814 = load i32, ptr %29, align 4, !tbaa !9
  %815 = load i32, ptr %14, align 4, !tbaa !9
  %816 = icmp slt i32 %814, %815
  br i1 %816, label %817, label %841

817:                                              ; preds = %813
  %818 = load ptr, ptr %10, align 8, !tbaa !5
  %819 = load i32, ptr %29, align 4, !tbaa !9
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds ptr, ptr %818, i64 %820
  %822 = load ptr, ptr %821, align 8, !tbaa !5
  %823 = load i32, ptr %27, align 4, !tbaa !9
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds double, ptr %822, i64 %824
  %826 = load double, ptr %825, align 8, !tbaa !17
  %827 = load ptr, ptr %10, align 8, !tbaa !5
  %828 = load i32, ptr %29, align 4, !tbaa !9
  %829 = sext i32 %828 to i64
  %830 = getelementptr inbounds ptr, ptr %827, i64 %829
  %831 = load ptr, ptr %830, align 8, !tbaa !5
  %832 = load i32, ptr %28, align 4, !tbaa !9
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds double, ptr %831, i64 %833
  %835 = load double, ptr %834, align 8, !tbaa !17
  %836 = load double, ptr %34, align 8, !tbaa !17
  %837 = call double @llvm.fmuladd.f64(double %826, double %835, double %836)
  store double %837, ptr %34, align 8, !tbaa !17
  br label %838

838:                                              ; preds = %817
  %839 = load i32, ptr %29, align 4, !tbaa !9
  %840 = add nsw i32 %839, 1
  store i32 %840, ptr %29, align 4, !tbaa !9
  br label %813, !llvm.loop !44

841:                                              ; preds = %813
  %842 = load double, ptr %34, align 8, !tbaa !17
  %843 = load ptr, ptr %10, align 8, !tbaa !5
  %844 = load i32, ptr %27, align 4, !tbaa !9
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds ptr, ptr %843, i64 %845
  %847 = load ptr, ptr %846, align 8, !tbaa !5
  %848 = load i32, ptr %27, align 4, !tbaa !9
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds double, ptr %847, i64 %849
  %851 = load double, ptr %850, align 8, !tbaa !17
  %852 = fdiv double %842, %851
  %853 = load double, ptr %23, align 8, !tbaa !17
  %854 = fmul double %852, %853
  store double %854, ptr %35, align 8, !tbaa !17
  %855 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %855, ptr %29, align 4, !tbaa !9
  br label %856

856:                                              ; preds = %881, %841
  %857 = load i32, ptr %29, align 4, !tbaa !9
  %858 = load i32, ptr %14, align 4, !tbaa !9
  %859 = icmp slt i32 %857, %858
  br i1 %859, label %860, label %884

860:                                              ; preds = %856
  %861 = load double, ptr %35, align 8, !tbaa !17
  %862 = load ptr, ptr %10, align 8, !tbaa !5
  %863 = load i32, ptr %29, align 4, !tbaa !9
  %864 = sext i32 %863 to i64
  %865 = getelementptr inbounds ptr, ptr %862, i64 %864
  %866 = load ptr, ptr %865, align 8, !tbaa !5
  %867 = load i32, ptr %27, align 4, !tbaa !9
  %868 = sext i32 %867 to i64
  %869 = getelementptr inbounds double, ptr %866, i64 %868
  %870 = load double, ptr %869, align 8, !tbaa !17
  %871 = load ptr, ptr %10, align 8, !tbaa !5
  %872 = load i32, ptr %29, align 4, !tbaa !9
  %873 = sext i32 %872 to i64
  %874 = getelementptr inbounds ptr, ptr %871, i64 %873
  %875 = load ptr, ptr %874, align 8, !tbaa !5
  %876 = load i32, ptr %28, align 4, !tbaa !9
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds double, ptr %875, i64 %877
  %879 = load double, ptr %878, align 8, !tbaa !17
  %880 = call double @llvm.fmuladd.f64(double %861, double %870, double %879)
  store double %880, ptr %878, align 8, !tbaa !17
  br label %881

881:                                              ; preds = %860
  %882 = load i32, ptr %29, align 4, !tbaa !9
  %883 = add nsw i32 %882, 1
  store i32 %883, ptr %29, align 4, !tbaa !9
  br label %856, !llvm.loop !45

884:                                              ; preds = %856
  br label %885

885:                                              ; preds = %884
  %886 = load i32, ptr %28, align 4, !tbaa !9
  %887 = add nsw i32 %886, 1
  store i32 %887, ptr %28, align 4, !tbaa !9
  br label %807, !llvm.loop !46

888:                                              ; preds = %807
  %889 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %889, ptr %28, align 4, !tbaa !9
  br label %890

890:                                              ; preds = %906, %888
  %891 = load i32, ptr %28, align 4, !tbaa !9
  %892 = load i32, ptr %14, align 4, !tbaa !9
  %893 = icmp slt i32 %891, %892
  br i1 %893, label %894, label %909

894:                                              ; preds = %890
  %895 = load double, ptr %23, align 8, !tbaa !17
  %896 = load ptr, ptr %10, align 8, !tbaa !5
  %897 = load i32, ptr %28, align 4, !tbaa !9
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds ptr, ptr %896, i64 %898
  %900 = load ptr, ptr %899, align 8, !tbaa !5
  %901 = load i32, ptr %27, align 4, !tbaa !9
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds double, ptr %900, i64 %902
  %904 = load double, ptr %903, align 8, !tbaa !17
  %905 = fmul double %904, %895
  store double %905, ptr %903, align 8, !tbaa !17
  br label %906

906:                                              ; preds = %894
  %907 = load i32, ptr %28, align 4, !tbaa !9
  %908 = add nsw i32 %907, 1
  store i32 %908, ptr %28, align 4, !tbaa !9
  br label %890, !llvm.loop !47

909:                                              ; preds = %890
  br label %929

910:                                              ; preds = %800
  %911 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %911, ptr %28, align 4, !tbaa !9
  br label %912

912:                                              ; preds = %925, %910
  %913 = load i32, ptr %28, align 4, !tbaa !9
  %914 = load i32, ptr %14, align 4, !tbaa !9
  %915 = icmp slt i32 %913, %914
  br i1 %915, label %916, label %928

916:                                              ; preds = %912
  %917 = load ptr, ptr %10, align 8, !tbaa !5
  %918 = load i32, ptr %28, align 4, !tbaa !9
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds ptr, ptr %917, i64 %919
  %921 = load ptr, ptr %920, align 8, !tbaa !5
  %922 = load i32, ptr %27, align 4, !tbaa !9
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds double, ptr %921, i64 %923
  store double 0.000000e+00, ptr %924, align 8, !tbaa !17
  br label %925

925:                                              ; preds = %916
  %926 = load i32, ptr %28, align 4, !tbaa !9
  %927 = add nsw i32 %926, 1
  store i32 %927, ptr %28, align 4, !tbaa !9
  br label %912, !llvm.loop !48

928:                                              ; preds = %912
  br label %929

929:                                              ; preds = %928, %909
  %930 = load ptr, ptr %10, align 8, !tbaa !5
  %931 = load i32, ptr %27, align 4, !tbaa !9
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds ptr, ptr %930, i64 %932
  %934 = load ptr, ptr %933, align 8, !tbaa !5
  %935 = load i32, ptr %27, align 4, !tbaa !9
  %936 = sext i32 %935 to i64
  %937 = getelementptr inbounds double, ptr %934, i64 %936
  %938 = load double, ptr %937, align 8, !tbaa !17
  %939 = fadd double %938, 1.000000e+00
  store double %939, ptr %937, align 8, !tbaa !17
  br label %940

940:                                              ; preds = %929
  %941 = load i32, ptr %27, align 4, !tbaa !9
  %942 = add nsw i32 %941, -1
  store i32 %942, ptr %27, align 4, !tbaa !9
  br label %772, !llvm.loop !49

943:                                              ; preds = %772
  %944 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %944, ptr %29, align 4, !tbaa !9
  br label %945

945:                                              ; preds = %1579, %943
  %946 = load i32, ptr %29, align 4, !tbaa !9
  %947 = icmp sge i32 %946, 0
  br i1 %947, label %948, label %1582

948:                                              ; preds = %945
  store i32 1, ptr %31, align 4, !tbaa !9
  br label %949

949:                                              ; preds = %1575, %948
  %950 = load i32, ptr %31, align 4, !tbaa !9
  %951 = icmp sle i32 %950, 30
  br i1 %951, label %952, label %1578

952:                                              ; preds = %949
  store i8 1, ptr %26, align 1, !tbaa !50
  %953 = load i32, ptr %29, align 4, !tbaa !9
  store i32 %953, ptr %30, align 4, !tbaa !9
  br label %954

954:                                              ; preds = %987, %952
  %955 = load i32, ptr %30, align 4, !tbaa !9
  %956 = icmp sge i32 %955, 0
  br i1 %956, label %957, label %990

957:                                              ; preds = %954
  %958 = load i32, ptr %30, align 4, !tbaa !9
  %959 = sub nsw i32 %958, 1
  store i32 %959, ptr %33, align 4, !tbaa !9
  %960 = load i32, ptr %33, align 4, !tbaa !9
  %961 = icmp slt i32 %960, 0
  br i1 %961, label %973, label %962

962:                                              ; preds = %957
  %963 = load ptr, ptr %21, align 8, !tbaa !5
  %964 = load i32, ptr %30, align 4, !tbaa !9
  %965 = sext i32 %964 to i64
  %966 = getelementptr inbounds double, ptr %963, i64 %965
  %967 = load double, ptr %966, align 8, !tbaa !17
  %968 = call double @llvm.fabs.f64(double %967)
  %969 = load double, ptr %24, align 8, !tbaa !17
  %970 = fadd double %968, %969
  %971 = load double, ptr %24, align 8, !tbaa !17
  %972 = fcmp oeq double %970, %971
  br i1 %972, label %973, label %974

973:                                              ; preds = %962, %957
  store i8 0, ptr %26, align 1, !tbaa !50
  br label %990

974:                                              ; preds = %962
  %975 = load ptr, ptr %11, align 8, !tbaa !5
  %976 = load i32, ptr %33, align 4, !tbaa !9
  %977 = sext i32 %976 to i64
  %978 = getelementptr inbounds double, ptr %975, i64 %977
  %979 = load double, ptr %978, align 8, !tbaa !17
  %980 = call double @llvm.fabs.f64(double %979)
  %981 = load double, ptr %24, align 8, !tbaa !17
  %982 = fadd double %980, %981
  %983 = load double, ptr %24, align 8, !tbaa !17
  %984 = fcmp oeq double %982, %983
  br i1 %984, label %985, label %986

985:                                              ; preds = %974
  br label %990

986:                                              ; preds = %974
  br label %987

987:                                              ; preds = %986
  %988 = load i32, ptr %30, align 4, !tbaa !9
  %989 = add nsw i32 %988, -1
  store i32 %989, ptr %30, align 4, !tbaa !9
  br label %954, !llvm.loop !52

990:                                              ; preds = %985, %973, %954
  %991 = load i8, ptr %26, align 1, !tbaa !50, !range !53, !noundef !54
  %992 = trunc i8 %991 to i1
  br i1 %992, label %993, label %1138

993:                                              ; preds = %990
  store double 0.000000e+00, ptr %38, align 8, !tbaa !17
  store double 1.000000e+00, ptr %34, align 8, !tbaa !17
  %994 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %994, ptr %27, align 4, !tbaa !9
  br label %995

995:                                              ; preds = %1134, %993
  %996 = load i32, ptr %27, align 4, !tbaa !9
  %997 = load i32, ptr %29, align 4, !tbaa !9
  %998 = icmp sle i32 %996, %997
  br i1 %998, label %999, label %1137

999:                                              ; preds = %995
  %1000 = load double, ptr %34, align 8, !tbaa !17
  %1001 = load ptr, ptr %21, align 8, !tbaa !5
  %1002 = load i32, ptr %27, align 4, !tbaa !9
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds double, ptr %1001, i64 %1003
  %1005 = load double, ptr %1004, align 8, !tbaa !17
  %1006 = fmul double %1000, %1005
  store double %1006, ptr %35, align 8, !tbaa !17
  %1007 = load double, ptr %38, align 8, !tbaa !17
  %1008 = load ptr, ptr %21, align 8, !tbaa !5
  %1009 = load i32, ptr %27, align 4, !tbaa !9
  %1010 = sext i32 %1009 to i64
  %1011 = getelementptr inbounds double, ptr %1008, i64 %1010
  %1012 = load double, ptr %1011, align 8, !tbaa !17
  %1013 = fmul double %1007, %1012
  %1014 = load ptr, ptr %21, align 8, !tbaa !5
  %1015 = load i32, ptr %27, align 4, !tbaa !9
  %1016 = sext i32 %1015 to i64
  %1017 = getelementptr inbounds double, ptr %1014, i64 %1016
  store double %1013, ptr %1017, align 8, !tbaa !17
  %1018 = load double, ptr %35, align 8, !tbaa !17
  %1019 = call double @llvm.fabs.f64(double %1018)
  %1020 = load double, ptr %24, align 8, !tbaa !17
  %1021 = fadd double %1019, %1020
  %1022 = load double, ptr %24, align 8, !tbaa !17
  %1023 = fcmp oeq double %1021, %1022
  br i1 %1023, label %1024, label %1025

1024:                                             ; preds = %999
  br label %1137

1025:                                             ; preds = %999
  %1026 = load ptr, ptr %11, align 8, !tbaa !5
  %1027 = load i32, ptr %27, align 4, !tbaa !9
  %1028 = sext i32 %1027 to i64
  %1029 = getelementptr inbounds double, ptr %1026, i64 %1028
  %1030 = load double, ptr %1029, align 8, !tbaa !17
  store double %1030, ptr %23, align 8, !tbaa !17
  %1031 = load double, ptr %35, align 8, !tbaa !17
  %1032 = call double @llvm.fabs.f64(double %1031)
  store double %1032, ptr %42, align 8, !tbaa !17
  %1033 = load double, ptr %23, align 8, !tbaa !17
  %1034 = call double @llvm.fabs.f64(double %1033)
  store double %1034, ptr %43, align 8, !tbaa !17
  %1035 = load double, ptr %42, align 8, !tbaa !17
  %1036 = load double, ptr %43, align 8, !tbaa !17
  %1037 = fcmp ogt double %1035, %1036
  br i1 %1037, label %1038, label %1047

1038:                                             ; preds = %1025
  %1039 = load double, ptr %42, align 8, !tbaa !17
  %1040 = load double, ptr %43, align 8, !tbaa !17
  %1041 = load double, ptr %42, align 8, !tbaa !17
  %1042 = fdiv double %1040, %1041
  %1043 = call double @pow(double noundef %1042, double noundef 2.000000e+00) #9
  %1044 = fadd double 1.000000e+00, %1043
  %1045 = call double @sqrt(double noundef %1044) #9
  %1046 = fmul double %1039, %1045
  br label %1062

1047:                                             ; preds = %1025
  %1048 = load double, ptr %43, align 8, !tbaa !17
  %1049 = fcmp oeq double %1048, 0.000000e+00
  br i1 %1049, label %1050, label %1051

1050:                                             ; preds = %1047
  br label %1060

1051:                                             ; preds = %1047
  %1052 = load double, ptr %43, align 8, !tbaa !17
  %1053 = load double, ptr %42, align 8, !tbaa !17
  %1054 = load double, ptr %43, align 8, !tbaa !17
  %1055 = fdiv double %1053, %1054
  %1056 = call double @pow(double noundef %1055, double noundef 2.000000e+00) #9
  %1057 = fadd double 1.000000e+00, %1056
  %1058 = call double @sqrt(double noundef %1057) #9
  %1059 = fmul double %1052, %1058
  br label %1060

1060:                                             ; preds = %1051, %1050
  %1061 = phi double [ 0.000000e+00, %1050 ], [ %1059, %1051 ]
  br label %1062

1062:                                             ; preds = %1060, %1038
  %1063 = phi double [ %1046, %1038 ], [ %1061, %1060 ]
  store double %1063, ptr %36, align 8, !tbaa !17
  %1064 = load double, ptr %36, align 8, !tbaa !17
  %1065 = load ptr, ptr %11, align 8, !tbaa !5
  %1066 = load i32, ptr %27, align 4, !tbaa !9
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds double, ptr %1065, i64 %1067
  store double %1064, ptr %1068, align 8, !tbaa !17
  %1069 = load double, ptr %36, align 8, !tbaa !17
  %1070 = fdiv double 1.000000e+00, %1069
  store double %1070, ptr %36, align 8, !tbaa !17
  %1071 = load double, ptr %23, align 8, !tbaa !17
  %1072 = load double, ptr %36, align 8, !tbaa !17
  %1073 = fmul double %1071, %1072
  store double %1073, ptr %38, align 8, !tbaa !17
  %1074 = load double, ptr %35, align 8, !tbaa !17
  %1075 = fneg double %1074
  %1076 = load double, ptr %36, align 8, !tbaa !17
  %1077 = fmul double %1075, %1076
  store double %1077, ptr %34, align 8, !tbaa !17
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %1078

1078:                                             ; preds = %1130, %1062
  %1079 = load i32, ptr %28, align 4, !tbaa !9
  %1080 = load i32, ptr %14, align 4, !tbaa !9
  %1081 = icmp slt i32 %1079, %1080
  br i1 %1081, label %1082, label %1133

1082:                                             ; preds = %1078
  %1083 = load ptr, ptr %10, align 8, !tbaa !5
  %1084 = load i32, ptr %28, align 4, !tbaa !9
  %1085 = sext i32 %1084 to i64
  %1086 = getelementptr inbounds ptr, ptr %1083, i64 %1085
  %1087 = load ptr, ptr %1086, align 8, !tbaa !5
  %1088 = load i32, ptr %33, align 4, !tbaa !9
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds double, ptr %1087, i64 %1089
  %1091 = load double, ptr %1090, align 8, !tbaa !17
  store double %1091, ptr %40, align 8, !tbaa !17
  %1092 = load ptr, ptr %10, align 8, !tbaa !5
  %1093 = load i32, ptr %28, align 4, !tbaa !9
  %1094 = sext i32 %1093 to i64
  %1095 = getelementptr inbounds ptr, ptr %1092, i64 %1094
  %1096 = load ptr, ptr %1095, align 8, !tbaa !5
  %1097 = load i32, ptr %27, align 4, !tbaa !9
  %1098 = sext i32 %1097 to i64
  %1099 = getelementptr inbounds double, ptr %1096, i64 %1098
  %1100 = load double, ptr %1099, align 8, !tbaa !17
  store double %1100, ptr %41, align 8, !tbaa !17
  %1101 = load double, ptr %40, align 8, !tbaa !17
  %1102 = load double, ptr %38, align 8, !tbaa !17
  %1103 = load double, ptr %41, align 8, !tbaa !17
  %1104 = load double, ptr %34, align 8, !tbaa !17
  %1105 = fmul double %1103, %1104
  %1106 = call double @llvm.fmuladd.f64(double %1101, double %1102, double %1105)
  %1107 = load ptr, ptr %10, align 8, !tbaa !5
  %1108 = load i32, ptr %28, align 4, !tbaa !9
  %1109 = sext i32 %1108 to i64
  %1110 = getelementptr inbounds ptr, ptr %1107, i64 %1109
  %1111 = load ptr, ptr %1110, align 8, !tbaa !5
  %1112 = load i32, ptr %33, align 4, !tbaa !9
  %1113 = sext i32 %1112 to i64
  %1114 = getelementptr inbounds double, ptr %1111, i64 %1113
  store double %1106, ptr %1114, align 8, !tbaa !17
  %1115 = load double, ptr %41, align 8, !tbaa !17
  %1116 = load double, ptr %38, align 8, !tbaa !17
  %1117 = load double, ptr %40, align 8, !tbaa !17
  %1118 = load double, ptr %34, align 8, !tbaa !17
  %1119 = fmul double %1117, %1118
  %1120 = fneg double %1119
  %1121 = call double @llvm.fmuladd.f64(double %1115, double %1116, double %1120)
  %1122 = load ptr, ptr %10, align 8, !tbaa !5
  %1123 = load i32, ptr %28, align 4, !tbaa !9
  %1124 = sext i32 %1123 to i64
  %1125 = getelementptr inbounds ptr, ptr %1122, i64 %1124
  %1126 = load ptr, ptr %1125, align 8, !tbaa !5
  %1127 = load i32, ptr %27, align 4, !tbaa !9
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds double, ptr %1126, i64 %1128
  store double %1121, ptr %1129, align 8, !tbaa !17
  br label %1130

1130:                                             ; preds = %1082
  %1131 = load i32, ptr %28, align 4, !tbaa !9
  %1132 = add nsw i32 %1131, 1
  store i32 %1132, ptr %28, align 4, !tbaa !9
  br label %1078, !llvm.loop !55

1133:                                             ; preds = %1078
  br label %1134

1134:                                             ; preds = %1133
  %1135 = load i32, ptr %27, align 4, !tbaa !9
  %1136 = add nsw i32 %1135, 1
  store i32 %1136, ptr %27, align 4, !tbaa !9
  br label %995, !llvm.loop !56

1137:                                             ; preds = %1024, %995
  br label %1138

1138:                                             ; preds = %1137, %990
  %1139 = load ptr, ptr %11, align 8, !tbaa !5
  %1140 = load i32, ptr %29, align 4, !tbaa !9
  %1141 = sext i32 %1140 to i64
  %1142 = getelementptr inbounds double, ptr %1139, i64 %1141
  %1143 = load double, ptr %1142, align 8, !tbaa !17
  store double %1143, ptr %41, align 8, !tbaa !17
  %1144 = load i32, ptr %30, align 4, !tbaa !9
  %1145 = load i32, ptr %29, align 4, !tbaa !9
  %1146 = icmp eq i32 %1144, %1145
  br i1 %1146, label %1147, label %1185

1147:                                             ; preds = %1138
  %1148 = load double, ptr %41, align 8, !tbaa !17
  %1149 = fcmp olt double %1148, 0.000000e+00
  br i1 %1149, label %1150, label %1184

1150:                                             ; preds = %1147
  %1151 = load double, ptr %41, align 8, !tbaa !17
  %1152 = fneg double %1151
  %1153 = load ptr, ptr %11, align 8, !tbaa !5
  %1154 = load i32, ptr %29, align 4, !tbaa !9
  %1155 = sext i32 %1154 to i64
  %1156 = getelementptr inbounds double, ptr %1153, i64 %1155
  store double %1152, ptr %1156, align 8, !tbaa !17
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %1157

1157:                                             ; preds = %1180, %1150
  %1158 = load i32, ptr %28, align 4, !tbaa !9
  %1159 = load i32, ptr %15, align 4, !tbaa !9
  %1160 = icmp slt i32 %1158, %1159
  br i1 %1160, label %1161, label %1183

1161:                                             ; preds = %1157
  %1162 = load ptr, ptr %12, align 8, !tbaa !5
  %1163 = load i32, ptr %28, align 4, !tbaa !9
  %1164 = sext i32 %1163 to i64
  %1165 = getelementptr inbounds ptr, ptr %1162, i64 %1164
  %1166 = load ptr, ptr %1165, align 8, !tbaa !5
  %1167 = load i32, ptr %29, align 4, !tbaa !9
  %1168 = sext i32 %1167 to i64
  %1169 = getelementptr inbounds double, ptr %1166, i64 %1168
  %1170 = load double, ptr %1169, align 8, !tbaa !17
  %1171 = fneg double %1170
  %1172 = load ptr, ptr %12, align 8, !tbaa !5
  %1173 = load i32, ptr %28, align 4, !tbaa !9
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds ptr, ptr %1172, i64 %1174
  %1176 = load ptr, ptr %1175, align 8, !tbaa !5
  %1177 = load i32, ptr %29, align 4, !tbaa !9
  %1178 = sext i32 %1177 to i64
  %1179 = getelementptr inbounds double, ptr %1176, i64 %1178
  store double %1171, ptr %1179, align 8, !tbaa !17
  br label %1180

1180:                                             ; preds = %1161
  %1181 = load i32, ptr %28, align 4, !tbaa !9
  %1182 = add nsw i32 %1181, 1
  store i32 %1182, ptr %28, align 4, !tbaa !9
  br label %1157, !llvm.loop !57

1183:                                             ; preds = %1157
  br label %1184

1184:                                             ; preds = %1183, %1147
  br label %1578

1185:                                             ; preds = %1138
  %1186 = load i32, ptr %31, align 4, !tbaa !9
  %1187 = icmp eq i32 %1186, 30
  br i1 %1187, label %1188, label %1206

1188:                                             ; preds = %1185
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #9
  call void @_ZN7SGTELIB4itosB5cxx11Ei(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, i32 noundef 30)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef @.str.101, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %1189 unwind label %1197

1189:                                             ; preds = %1188
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef @.str.102)
          to label %1190 unwind label %1201

1190:                                             ; preds = %1189
  %1191 = load ptr, ptr %9, align 8, !tbaa !5
  %1192 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1191, ptr noundef nonnull align 8 dereferenceable(32) %46) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #9
  %1193 = load ptr, ptr %21, align 8, !tbaa !5
  %1194 = icmp eq ptr %1193, null
  br i1 %1194, label %1196, label %1195

1195:                                             ; preds = %1190
  call void @_ZdaPv(ptr noundef %1193) #11
  br label %1196

1196:                                             ; preds = %1195, %1190
  store i1 false, ptr %7, align 1
  store i32 1, ptr %20, align 4
  br label %1587

1197:                                             ; preds = %1188
  %1198 = landingpad { ptr, i32 }
          cleanup
  %1199 = extractvalue { ptr, i32 } %1198, 0
  store ptr %1199, ptr %18, align 8
  %1200 = extractvalue { ptr, i32 } %1198, 1
  store i32 %1200, ptr %19, align 4
  br label %1205

1201:                                             ; preds = %1189
  %1202 = landingpad { ptr, i32 }
          cleanup
  %1203 = extractvalue { ptr, i32 } %1202, 0
  store ptr %1203, ptr %18, align 8
  %1204 = extractvalue { ptr, i32 } %1202, 1
  store i32 %1204, ptr %19, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  br label %1205

1205:                                             ; preds = %1201, %1197
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  br label %1590

1206:                                             ; preds = %1185
  %1207 = load ptr, ptr %11, align 8, !tbaa !5
  %1208 = load i32, ptr %30, align 4, !tbaa !9
  %1209 = sext i32 %1208 to i64
  %1210 = getelementptr inbounds double, ptr %1207, i64 %1209
  %1211 = load double, ptr %1210, align 8, !tbaa !17
  store double %1211, ptr %39, align 8, !tbaa !17
  %1212 = load i32, ptr %29, align 4, !tbaa !9
  %1213 = sub nsw i32 %1212, 1
  store i32 %1213, ptr %33, align 4, !tbaa !9
  %1214 = load ptr, ptr %11, align 8, !tbaa !5
  %1215 = load i32, ptr %33, align 4, !tbaa !9
  %1216 = sext i32 %1215 to i64
  %1217 = getelementptr inbounds double, ptr %1214, i64 %1216
  %1218 = load double, ptr %1217, align 8, !tbaa !17
  store double %1218, ptr %40, align 8, !tbaa !17
  %1219 = load ptr, ptr %21, align 8, !tbaa !5
  %1220 = load i32, ptr %33, align 4, !tbaa !9
  %1221 = sext i32 %1220 to i64
  %1222 = getelementptr inbounds double, ptr %1219, i64 %1221
  %1223 = load double, ptr %1222, align 8, !tbaa !17
  store double %1223, ptr %23, align 8, !tbaa !17
  %1224 = load ptr, ptr %21, align 8, !tbaa !5
  %1225 = load i32, ptr %29, align 4, !tbaa !9
  %1226 = sext i32 %1225 to i64
  %1227 = getelementptr inbounds double, ptr %1224, i64 %1226
  %1228 = load double, ptr %1227, align 8, !tbaa !17
  store double %1228, ptr %36, align 8, !tbaa !17
  %1229 = load double, ptr %40, align 8, !tbaa !17
  %1230 = load double, ptr %41, align 8, !tbaa !17
  %1231 = fsub double %1229, %1230
  %1232 = load double, ptr %40, align 8, !tbaa !17
  %1233 = load double, ptr %41, align 8, !tbaa !17
  %1234 = fadd double %1232, %1233
  %1235 = load double, ptr %23, align 8, !tbaa !17
  %1236 = load double, ptr %36, align 8, !tbaa !17
  %1237 = fsub double %1235, %1236
  %1238 = load double, ptr %23, align 8, !tbaa !17
  %1239 = load double, ptr %36, align 8, !tbaa !17
  %1240 = fadd double %1238, %1239
  %1241 = fmul double %1237, %1240
  %1242 = call double @llvm.fmuladd.f64(double %1231, double %1234, double %1241)
  %1243 = load double, ptr %36, align 8, !tbaa !17
  %1244 = fmul double 2.000000e+00, %1243
  %1245 = load double, ptr %40, align 8, !tbaa !17
  %1246 = fmul double %1244, %1245
  %1247 = fdiv double %1242, %1246
  store double %1247, ptr %35, align 8, !tbaa !17
  %1248 = load double, ptr %35, align 8, !tbaa !17
  %1249 = call double @llvm.fabs.f64(double %1248)
  store double %1249, ptr %42, align 8, !tbaa !17
  %1250 = load double, ptr %42, align 8, !tbaa !17
  %1251 = fcmp ogt double %1250, 1.000000e+00
  br i1 %1251, label %1252, label %1260

1252:                                             ; preds = %1206
  %1253 = load double, ptr %42, align 8, !tbaa !17
  %1254 = load double, ptr %42, align 8, !tbaa !17
  %1255 = fdiv double 1.000000e+00, %1254
  %1256 = call double @pow(double noundef %1255, double noundef 2.000000e+00) #9
  %1257 = fadd double 1.000000e+00, %1256
  %1258 = call double @sqrt(double noundef %1257) #9
  %1259 = fmul double %1253, %1258
  br label %1265

1260:                                             ; preds = %1206
  %1261 = load double, ptr %42, align 8, !tbaa !17
  %1262 = call double @pow(double noundef %1261, double noundef 2.000000e+00) #9
  %1263 = fadd double 1.000000e+00, %1262
  %1264 = call double @sqrt(double noundef %1263) #9
  br label %1265

1265:                                             ; preds = %1260, %1252
  %1266 = phi double [ %1259, %1252 ], [ %1264, %1260 ]
  store double %1266, ptr %23, align 8, !tbaa !17
  %1267 = load double, ptr %39, align 8, !tbaa !17
  %1268 = load double, ptr %41, align 8, !tbaa !17
  %1269 = fsub double %1267, %1268
  %1270 = load double, ptr %39, align 8, !tbaa !17
  %1271 = load double, ptr %41, align 8, !tbaa !17
  %1272 = fadd double %1270, %1271
  %1273 = load double, ptr %36, align 8, !tbaa !17
  %1274 = load double, ptr %40, align 8, !tbaa !17
  %1275 = load double, ptr %35, align 8, !tbaa !17
  %1276 = load double, ptr %35, align 8, !tbaa !17
  %1277 = fcmp oge double %1276, 0.000000e+00
  br i1 %1277, label %1278, label %1281

1278:                                             ; preds = %1265
  %1279 = load double, ptr %23, align 8, !tbaa !17
  %1280 = call double @llvm.fabs.f64(double %1279)
  br label %1285

1281:                                             ; preds = %1265
  %1282 = load double, ptr %23, align 8, !tbaa !17
  %1283 = call double @llvm.fabs.f64(double %1282)
  %1284 = fneg double %1283
  br label %1285

1285:                                             ; preds = %1281, %1278
  %1286 = phi double [ %1280, %1278 ], [ %1284, %1281 ]
  %1287 = fadd double %1275, %1286
  %1288 = fdiv double %1274, %1287
  %1289 = load double, ptr %36, align 8, !tbaa !17
  %1290 = fsub double %1288, %1289
  %1291 = fmul double %1273, %1290
  %1292 = call double @llvm.fmuladd.f64(double %1269, double %1272, double %1291)
  %1293 = load double, ptr %39, align 8, !tbaa !17
  %1294 = fdiv double %1292, %1293
  store double %1294, ptr %35, align 8, !tbaa !17
  store double 1.000000e+00, ptr %34, align 8, !tbaa !17
  store double 1.000000e+00, ptr %38, align 8, !tbaa !17
  %1295 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %1295, ptr %28, align 4, !tbaa !9
  br label %1296

1296:                                             ; preds = %1557, %1285
  %1297 = load i32, ptr %28, align 4, !tbaa !9
  %1298 = load i32, ptr %33, align 4, !tbaa !9
  %1299 = icmp sle i32 %1297, %1298
  br i1 %1299, label %1300, label %1560

1300:                                             ; preds = %1296
  %1301 = load i32, ptr %28, align 4, !tbaa !9
  %1302 = add nsw i32 %1301, 1
  store i32 %1302, ptr %27, align 4, !tbaa !9
  %1303 = load ptr, ptr %21, align 8, !tbaa !5
  %1304 = load i32, ptr %27, align 4, !tbaa !9
  %1305 = sext i32 %1304 to i64
  %1306 = getelementptr inbounds double, ptr %1303, i64 %1305
  %1307 = load double, ptr %1306, align 8, !tbaa !17
  store double %1307, ptr %23, align 8, !tbaa !17
  %1308 = load ptr, ptr %11, align 8, !tbaa !5
  %1309 = load i32, ptr %27, align 4, !tbaa !9
  %1310 = sext i32 %1309 to i64
  %1311 = getelementptr inbounds double, ptr %1308, i64 %1310
  %1312 = load double, ptr %1311, align 8, !tbaa !17
  store double %1312, ptr %40, align 8, !tbaa !17
  %1313 = load double, ptr %34, align 8, !tbaa !17
  %1314 = load double, ptr %23, align 8, !tbaa !17
  %1315 = fmul double %1313, %1314
  store double %1315, ptr %36, align 8, !tbaa !17
  %1316 = load double, ptr %38, align 8, !tbaa !17
  %1317 = load double, ptr %23, align 8, !tbaa !17
  %1318 = fmul double %1316, %1317
  store double %1318, ptr %23, align 8, !tbaa !17
  %1319 = load double, ptr %35, align 8, !tbaa !17
  %1320 = call double @llvm.fabs.f64(double %1319)
  store double %1320, ptr %42, align 8, !tbaa !17
  %1321 = load double, ptr %36, align 8, !tbaa !17
  %1322 = call double @llvm.fabs.f64(double %1321)
  store double %1322, ptr %44, align 8, !tbaa !17
  %1323 = load double, ptr %42, align 8, !tbaa !17
  %1324 = load double, ptr %44, align 8, !tbaa !17
  %1325 = fcmp ogt double %1323, %1324
  br i1 %1325, label %1326, label %1335

1326:                                             ; preds = %1300
  %1327 = load double, ptr %42, align 8, !tbaa !17
  %1328 = load double, ptr %44, align 8, !tbaa !17
  %1329 = load double, ptr %42, align 8, !tbaa !17
  %1330 = fdiv double %1328, %1329
  %1331 = call double @pow(double noundef %1330, double noundef 2.000000e+00) #9
  %1332 = fadd double 1.000000e+00, %1331
  %1333 = call double @sqrt(double noundef %1332) #9
  %1334 = fmul double %1327, %1333
  br label %1350

1335:                                             ; preds = %1300
  %1336 = load double, ptr %44, align 8, !tbaa !17
  %1337 = fcmp oeq double %1336, 0.000000e+00
  br i1 %1337, label %1338, label %1339

1338:                                             ; preds = %1335
  br label %1348

1339:                                             ; preds = %1335
  %1340 = load double, ptr %44, align 8, !tbaa !17
  %1341 = load double, ptr %42, align 8, !tbaa !17
  %1342 = load double, ptr %44, align 8, !tbaa !17
  %1343 = fdiv double %1341, %1342
  %1344 = call double @pow(double noundef %1343, double noundef 2.000000e+00) #9
  %1345 = fadd double 1.000000e+00, %1344
  %1346 = call double @sqrt(double noundef %1345) #9
  %1347 = fmul double %1340, %1346
  br label %1348

1348:                                             ; preds = %1339, %1338
  %1349 = phi double [ 0.000000e+00, %1338 ], [ %1347, %1339 ]
  br label %1350

1350:                                             ; preds = %1348, %1326
  %1351 = phi double [ %1334, %1326 ], [ %1349, %1348 ]
  store double %1351, ptr %41, align 8, !tbaa !17
  %1352 = load double, ptr %41, align 8, !tbaa !17
  %1353 = load ptr, ptr %21, align 8, !tbaa !5
  %1354 = load i32, ptr %28, align 4, !tbaa !9
  %1355 = sext i32 %1354 to i64
  %1356 = getelementptr inbounds double, ptr %1353, i64 %1355
  store double %1352, ptr %1356, align 8, !tbaa !17
  %1357 = load double, ptr %35, align 8, !tbaa !17
  %1358 = load double, ptr %41, align 8, !tbaa !17
  %1359 = fdiv double %1357, %1358
  store double %1359, ptr %38, align 8, !tbaa !17
  %1360 = load double, ptr %36, align 8, !tbaa !17
  %1361 = load double, ptr %41, align 8, !tbaa !17
  %1362 = fdiv double %1360, %1361
  store double %1362, ptr %34, align 8, !tbaa !17
  %1363 = load double, ptr %39, align 8, !tbaa !17
  %1364 = load double, ptr %38, align 8, !tbaa !17
  %1365 = load double, ptr %23, align 8, !tbaa !17
  %1366 = load double, ptr %34, align 8, !tbaa !17
  %1367 = fmul double %1365, %1366
  %1368 = call double @llvm.fmuladd.f64(double %1363, double %1364, double %1367)
  store double %1368, ptr %35, align 8, !tbaa !17
  %1369 = load double, ptr %23, align 8, !tbaa !17
  %1370 = load double, ptr %38, align 8, !tbaa !17
  %1371 = load double, ptr %39, align 8, !tbaa !17
  %1372 = load double, ptr %34, align 8, !tbaa !17
  %1373 = fmul double %1371, %1372
  %1374 = fneg double %1373
  %1375 = call double @llvm.fmuladd.f64(double %1369, double %1370, double %1374)
  store double %1375, ptr %23, align 8, !tbaa !17
  %1376 = load double, ptr %40, align 8, !tbaa !17
  %1377 = load double, ptr %34, align 8, !tbaa !17
  %1378 = fmul double %1376, %1377
  store double %1378, ptr %36, align 8, !tbaa !17
  %1379 = load double, ptr %38, align 8, !tbaa !17
  %1380 = load double, ptr %40, align 8, !tbaa !17
  %1381 = fmul double %1380, %1379
  store double %1381, ptr %40, align 8, !tbaa !17
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %1382

1382:                                             ; preds = %1434, %1350
  %1383 = load i32, ptr %32, align 4, !tbaa !9
  %1384 = load i32, ptr %15, align 4, !tbaa !9
  %1385 = icmp slt i32 %1383, %1384
  br i1 %1385, label %1386, label %1437

1386:                                             ; preds = %1382
  %1387 = load ptr, ptr %12, align 8, !tbaa !5
  %1388 = load i32, ptr %32, align 4, !tbaa !9
  %1389 = sext i32 %1388 to i64
  %1390 = getelementptr inbounds ptr, ptr %1387, i64 %1389
  %1391 = load ptr, ptr %1390, align 8, !tbaa !5
  %1392 = load i32, ptr %28, align 4, !tbaa !9
  %1393 = sext i32 %1392 to i64
  %1394 = getelementptr inbounds double, ptr %1391, i64 %1393
  %1395 = load double, ptr %1394, align 8, !tbaa !17
  store double %1395, ptr %39, align 8, !tbaa !17
  %1396 = load ptr, ptr %12, align 8, !tbaa !5
  %1397 = load i32, ptr %32, align 4, !tbaa !9
  %1398 = sext i32 %1397 to i64
  %1399 = getelementptr inbounds ptr, ptr %1396, i64 %1398
  %1400 = load ptr, ptr %1399, align 8, !tbaa !5
  %1401 = load i32, ptr %27, align 4, !tbaa !9
  %1402 = sext i32 %1401 to i64
  %1403 = getelementptr inbounds double, ptr %1400, i64 %1402
  %1404 = load double, ptr %1403, align 8, !tbaa !17
  store double %1404, ptr %41, align 8, !tbaa !17
  %1405 = load double, ptr %39, align 8, !tbaa !17
  %1406 = load double, ptr %38, align 8, !tbaa !17
  %1407 = load double, ptr %41, align 8, !tbaa !17
  %1408 = load double, ptr %34, align 8, !tbaa !17
  %1409 = fmul double %1407, %1408
  %1410 = call double @llvm.fmuladd.f64(double %1405, double %1406, double %1409)
  %1411 = load ptr, ptr %12, align 8, !tbaa !5
  %1412 = load i32, ptr %32, align 4, !tbaa !9
  %1413 = sext i32 %1412 to i64
  %1414 = getelementptr inbounds ptr, ptr %1411, i64 %1413
  %1415 = load ptr, ptr %1414, align 8, !tbaa !5
  %1416 = load i32, ptr %28, align 4, !tbaa !9
  %1417 = sext i32 %1416 to i64
  %1418 = getelementptr inbounds double, ptr %1415, i64 %1417
  store double %1410, ptr %1418, align 8, !tbaa !17
  %1419 = load double, ptr %41, align 8, !tbaa !17
  %1420 = load double, ptr %38, align 8, !tbaa !17
  %1421 = load double, ptr %39, align 8, !tbaa !17
  %1422 = load double, ptr %34, align 8, !tbaa !17
  %1423 = fmul double %1421, %1422
  %1424 = fneg double %1423
  %1425 = call double @llvm.fmuladd.f64(double %1419, double %1420, double %1424)
  %1426 = load ptr, ptr %12, align 8, !tbaa !5
  %1427 = load i32, ptr %32, align 4, !tbaa !9
  %1428 = sext i32 %1427 to i64
  %1429 = getelementptr inbounds ptr, ptr %1426, i64 %1428
  %1430 = load ptr, ptr %1429, align 8, !tbaa !5
  %1431 = load i32, ptr %27, align 4, !tbaa !9
  %1432 = sext i32 %1431 to i64
  %1433 = getelementptr inbounds double, ptr %1430, i64 %1432
  store double %1425, ptr %1433, align 8, !tbaa !17
  br label %1434

1434:                                             ; preds = %1386
  %1435 = load i32, ptr %32, align 4, !tbaa !9
  %1436 = add nsw i32 %1435, 1
  store i32 %1436, ptr %32, align 4, !tbaa !9
  br label %1382, !llvm.loop !58

1437:                                             ; preds = %1382
  %1438 = load double, ptr %35, align 8, !tbaa !17
  %1439 = call double @llvm.fabs.f64(double %1438)
  store double %1439, ptr %42, align 8, !tbaa !17
  %1440 = load double, ptr %36, align 8, !tbaa !17
  %1441 = call double @llvm.fabs.f64(double %1440)
  store double %1441, ptr %44, align 8, !tbaa !17
  %1442 = load double, ptr %42, align 8, !tbaa !17
  %1443 = load double, ptr %44, align 8, !tbaa !17
  %1444 = fcmp ogt double %1442, %1443
  br i1 %1444, label %1445, label %1454

1445:                                             ; preds = %1437
  %1446 = load double, ptr %42, align 8, !tbaa !17
  %1447 = load double, ptr %44, align 8, !tbaa !17
  %1448 = load double, ptr %42, align 8, !tbaa !17
  %1449 = fdiv double %1447, %1448
  %1450 = call double @pow(double noundef %1449, double noundef 2.000000e+00) #9
  %1451 = fadd double 1.000000e+00, %1450
  %1452 = call double @sqrt(double noundef %1451) #9
  %1453 = fmul double %1446, %1452
  br label %1469

1454:                                             ; preds = %1437
  %1455 = load double, ptr %44, align 8, !tbaa !17
  %1456 = fcmp oeq double %1455, 0.000000e+00
  br i1 %1456, label %1457, label %1458

1457:                                             ; preds = %1454
  br label %1467

1458:                                             ; preds = %1454
  %1459 = load double, ptr %44, align 8, !tbaa !17
  %1460 = load double, ptr %42, align 8, !tbaa !17
  %1461 = load double, ptr %44, align 8, !tbaa !17
  %1462 = fdiv double %1460, %1461
  %1463 = call double @pow(double noundef %1462, double noundef 2.000000e+00) #9
  %1464 = fadd double 1.000000e+00, %1463
  %1465 = call double @sqrt(double noundef %1464) #9
  %1466 = fmul double %1459, %1465
  br label %1467

1467:                                             ; preds = %1458, %1457
  %1468 = phi double [ 0.000000e+00, %1457 ], [ %1466, %1458 ]
  br label %1469

1469:                                             ; preds = %1467, %1445
  %1470 = phi double [ %1453, %1445 ], [ %1468, %1467 ]
  store double %1470, ptr %41, align 8, !tbaa !17
  %1471 = load double, ptr %41, align 8, !tbaa !17
  %1472 = load ptr, ptr %11, align 8, !tbaa !5
  %1473 = load i32, ptr %28, align 4, !tbaa !9
  %1474 = sext i32 %1473 to i64
  %1475 = getelementptr inbounds double, ptr %1472, i64 %1474
  store double %1471, ptr %1475, align 8, !tbaa !17
  %1476 = load double, ptr %41, align 8, !tbaa !17
  %1477 = fcmp une double %1476, 0.000000e+00
  br i1 %1477, label %1478, label %1487

1478:                                             ; preds = %1469
  %1479 = load double, ptr %41, align 8, !tbaa !17
  %1480 = fdiv double 1.000000e+00, %1479
  store double %1480, ptr %41, align 8, !tbaa !17
  %1481 = load double, ptr %35, align 8, !tbaa !17
  %1482 = load double, ptr %41, align 8, !tbaa !17
  %1483 = fmul double %1481, %1482
  store double %1483, ptr %38, align 8, !tbaa !17
  %1484 = load double, ptr %36, align 8, !tbaa !17
  %1485 = load double, ptr %41, align 8, !tbaa !17
  %1486 = fmul double %1484, %1485
  store double %1486, ptr %34, align 8, !tbaa !17
  br label %1487

1487:                                             ; preds = %1478, %1469
  %1488 = load double, ptr %38, align 8, !tbaa !17
  %1489 = load double, ptr %23, align 8, !tbaa !17
  %1490 = load double, ptr %34, align 8, !tbaa !17
  %1491 = load double, ptr %40, align 8, !tbaa !17
  %1492 = fmul double %1490, %1491
  %1493 = call double @llvm.fmuladd.f64(double %1488, double %1489, double %1492)
  store double %1493, ptr %35, align 8, !tbaa !17
  %1494 = load double, ptr %38, align 8, !tbaa !17
  %1495 = load double, ptr %40, align 8, !tbaa !17
  %1496 = load double, ptr %34, align 8, !tbaa !17
  %1497 = load double, ptr %23, align 8, !tbaa !17
  %1498 = fmul double %1496, %1497
  %1499 = fneg double %1498
  %1500 = call double @llvm.fmuladd.f64(double %1494, double %1495, double %1499)
  store double %1500, ptr %39, align 8, !tbaa !17
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %1501

1501:                                             ; preds = %1553, %1487
  %1502 = load i32, ptr %32, align 4, !tbaa !9
  %1503 = load i32, ptr %14, align 4, !tbaa !9
  %1504 = icmp slt i32 %1502, %1503
  br i1 %1504, label %1505, label %1556

1505:                                             ; preds = %1501
  %1506 = load ptr, ptr %10, align 8, !tbaa !5
  %1507 = load i32, ptr %32, align 4, !tbaa !9
  %1508 = sext i32 %1507 to i64
  %1509 = getelementptr inbounds ptr, ptr %1506, i64 %1508
  %1510 = load ptr, ptr %1509, align 8, !tbaa !5
  %1511 = load i32, ptr %28, align 4, !tbaa !9
  %1512 = sext i32 %1511 to i64
  %1513 = getelementptr inbounds double, ptr %1510, i64 %1512
  %1514 = load double, ptr %1513, align 8, !tbaa !17
  store double %1514, ptr %40, align 8, !tbaa !17
  %1515 = load ptr, ptr %10, align 8, !tbaa !5
  %1516 = load i32, ptr %32, align 4, !tbaa !9
  %1517 = sext i32 %1516 to i64
  %1518 = getelementptr inbounds ptr, ptr %1515, i64 %1517
  %1519 = load ptr, ptr %1518, align 8, !tbaa !5
  %1520 = load i32, ptr %27, align 4, !tbaa !9
  %1521 = sext i32 %1520 to i64
  %1522 = getelementptr inbounds double, ptr %1519, i64 %1521
  %1523 = load double, ptr %1522, align 8, !tbaa !17
  store double %1523, ptr %41, align 8, !tbaa !17
  %1524 = load double, ptr %40, align 8, !tbaa !17
  %1525 = load double, ptr %38, align 8, !tbaa !17
  %1526 = load double, ptr %41, align 8, !tbaa !17
  %1527 = load double, ptr %34, align 8, !tbaa !17
  %1528 = fmul double %1526, %1527
  %1529 = call double @llvm.fmuladd.f64(double %1524, double %1525, double %1528)
  %1530 = load ptr, ptr %10, align 8, !tbaa !5
  %1531 = load i32, ptr %32, align 4, !tbaa !9
  %1532 = sext i32 %1531 to i64
  %1533 = getelementptr inbounds ptr, ptr %1530, i64 %1532
  %1534 = load ptr, ptr %1533, align 8, !tbaa !5
  %1535 = load i32, ptr %28, align 4, !tbaa !9
  %1536 = sext i32 %1535 to i64
  %1537 = getelementptr inbounds double, ptr %1534, i64 %1536
  store double %1529, ptr %1537, align 8, !tbaa !17
  %1538 = load double, ptr %41, align 8, !tbaa !17
  %1539 = load double, ptr %38, align 8, !tbaa !17
  %1540 = load double, ptr %40, align 8, !tbaa !17
  %1541 = load double, ptr %34, align 8, !tbaa !17
  %1542 = fmul double %1540, %1541
  %1543 = fneg double %1542
  %1544 = call double @llvm.fmuladd.f64(double %1538, double %1539, double %1543)
  %1545 = load ptr, ptr %10, align 8, !tbaa !5
  %1546 = load i32, ptr %32, align 4, !tbaa !9
  %1547 = sext i32 %1546 to i64
  %1548 = getelementptr inbounds ptr, ptr %1545, i64 %1547
  %1549 = load ptr, ptr %1548, align 8, !tbaa !5
  %1550 = load i32, ptr %27, align 4, !tbaa !9
  %1551 = sext i32 %1550 to i64
  %1552 = getelementptr inbounds double, ptr %1549, i64 %1551
  store double %1544, ptr %1552, align 8, !tbaa !17
  br label %1553

1553:                                             ; preds = %1505
  %1554 = load i32, ptr %32, align 4, !tbaa !9
  %1555 = add nsw i32 %1554, 1
  store i32 %1555, ptr %32, align 4, !tbaa !9
  br label %1501, !llvm.loop !59

1556:                                             ; preds = %1501
  br label %1557

1557:                                             ; preds = %1556
  %1558 = load i32, ptr %28, align 4, !tbaa !9
  %1559 = add nsw i32 %1558, 1
  store i32 %1559, ptr %28, align 4, !tbaa !9
  br label %1296, !llvm.loop !60

1560:                                             ; preds = %1296
  %1561 = load ptr, ptr %21, align 8, !tbaa !5
  %1562 = load i32, ptr %30, align 4, !tbaa !9
  %1563 = sext i32 %1562 to i64
  %1564 = getelementptr inbounds double, ptr %1561, i64 %1563
  store double 0.000000e+00, ptr %1564, align 8, !tbaa !17
  %1565 = load double, ptr %35, align 8, !tbaa !17
  %1566 = load ptr, ptr %21, align 8, !tbaa !5
  %1567 = load i32, ptr %29, align 4, !tbaa !9
  %1568 = sext i32 %1567 to i64
  %1569 = getelementptr inbounds double, ptr %1566, i64 %1568
  store double %1565, ptr %1569, align 8, !tbaa !17
  %1570 = load double, ptr %39, align 8, !tbaa !17
  %1571 = load ptr, ptr %11, align 8, !tbaa !5
  %1572 = load i32, ptr %29, align 4, !tbaa !9
  %1573 = sext i32 %1572 to i64
  %1574 = getelementptr inbounds double, ptr %1571, i64 %1573
  store double %1570, ptr %1574, align 8, !tbaa !17
  br label %1575

1575:                                             ; preds = %1560
  %1576 = load i32, ptr %31, align 4, !tbaa !9
  %1577 = add nsw i32 %1576, 1
  store i32 %1577, ptr %31, align 4, !tbaa !9
  br label %949, !llvm.loop !61

1578:                                             ; preds = %1184, %949
  br label %1579

1579:                                             ; preds = %1578
  %1580 = load i32, ptr %29, align 4, !tbaa !9
  %1581 = add nsw i32 %1580, -1
  store i32 %1581, ptr %29, align 4, !tbaa !9
  br label %945, !llvm.loop !62

1582:                                             ; preds = %945
  %1583 = load ptr, ptr %21, align 8, !tbaa !5
  %1584 = icmp eq ptr %1583, null
  br i1 %1584, label %1586, label %1585

1585:                                             ; preds = %1582
  call void @_ZdaPv(ptr noundef %1583) #11
  br label %1586

1586:                                             ; preds = %1585, %1582
  store i1 true, ptr %7, align 1
  store i32 1, ptr %20, align 4
  br label %1587

1587:                                             ; preds = %1586, %1196
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  br label %1588

1588:                                             ; preds = %1587, %65
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  %1589 = load i1, ptr %7, align 1
  ret i1 %1589

1590:                                             ; preds = %1205, %68
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %1591

1591:                                             ; preds = %1590
  %1592 = load ptr, ptr %18, align 8
  %1593 = load i32, ptr %19, align 4
  %1594 = insertvalue { ptr, i32 } poison, ptr %1592, 0
  %1595 = insertvalue { ptr, i32 } %1594, i32 %1593, 1
  resume { ptr, i32 } %1595
}

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5clearEv(ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

declare void @_ZN7SGTELIB4itosB5cxx11Ei(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) #8

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nobuiltin allocsize(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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin 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 #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress 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 #8 = { "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 #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 40}
!12 = !{!"_ZTSN7SGTELIB6MatrixE", !13, i64 8, !10, i64 40, !10, i64 44, !6, i64 48}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !14, i64 0, !15, i64 8, !7, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!12, !10, i64 44}
!17 = !{!18, !18, i64 0}
!18 = !{!"double", !7, i64 0}
!19 = !{!12, !6, i64 48}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}
!23 = distinct !{!23, !21}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !21}
!27 = distinct !{!27, !21}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !21}
!30 = distinct !{!30, !21}
!31 = distinct !{!31, !21}
!32 = distinct !{!32, !21}
!33 = distinct !{!33, !21}
!34 = distinct !{!34, !21}
!35 = distinct !{!35, !21}
!36 = distinct !{!36, !21}
!37 = distinct !{!37, !21}
!38 = distinct !{!38, !21}
!39 = distinct !{!39, !21}
!40 = distinct !{!40, !21}
!41 = distinct !{!41, !21}
!42 = distinct !{!42, !21}
!43 = distinct !{!43, !21}
!44 = distinct !{!44, !21}
!45 = distinct !{!45, !21}
!46 = distinct !{!46, !21}
!47 = distinct !{!47, !21}
!48 = distinct !{!48, !21}
!49 = distinct !{!49, !21}
!50 = !{!51, !51, i64 0}
!51 = !{!"bool", !7, i64 0}
!52 = distinct !{!52, !21}
!53 = !{i8 0, i8 2}
!54 = !{}
!55 = distinct !{!55, !21}
!56 = distinct !{!56, !21}
!57 = distinct !{!57, !21}
!58 = distinct !{!58, !21}
!59 = distinct !{!59, !21}
!60 = distinct !{!60, !21}
!61 = distinct !{!61, !21}
!62 = distinct !{!62, !21}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

@.str.100 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [12 x i8], align 1

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK7SGTELIB6Matrix17SVD_decompositionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPPdS8_S9_i(ptr nocapture noundef nonnull readonly align 8 dereferenceable(56) %0, ptr noundef nonnull align 8 dereferenceable(32) %1, ptr nocapture noundef readonly %2, ptr nocapture noundef %3, ptr nocapture noundef readonly %4, i32 noundef %5) local_unnamed_addr #7 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = getelementptr inbounds i8, ptr %0, i64 40
  %13 = load i32, ptr %12, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %0, i64 44
  %15 = load i32, ptr %14, align 4, !tbaa !14
  tail call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5clearEv(ptr noundef nonnull align 8 dereferenceable(32) %1) #11
  %16 = icmp sgt i32 %5, 0
  %17 = add nsw i32 %15, %13
  %18 = icmp sgt i32 %17, %5
  %or.cond = select i1 %16, i1 %18, i1 false
  br i1 %or.cond, label %19, label %24

19:                                               ; preds = %6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #11
  call void @_ZN7SGTELIB4itosB5cxx11Ei(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, i32 noundef %5)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull @.str.100, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %20 unwind label %22

20:                                               ; preds = %19
  %21 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %7) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #11
  br label %766

22:                                               ; preds = %19
  %23 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #11
  br label %767

24:                                               ; preds = %6
  %25 = sext i32 %15 to i64
  %26 = icmp slt i32 %15, 0
  %27 = shl nsw i64 %25, 3
  %28 = select i1 %26, i64 -1, i64 %27
  %29 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %28) #12
  %30 = ptrtoint ptr %29 to i64
  %31 = add i32 %15, -1
  %32 = icmp sgt i32 %13, 0
  br i1 %32, label %.preheader737.lr.ph, label %.preheader736

.preheader737.lr.ph:                              ; preds = %24
  %33 = icmp sgt i32 %15, 0
  %34 = getelementptr inbounds i8, ptr %0, i64 48
  %35 = load ptr, ptr %34, align 8
  br i1 %33, label %.preheader737.us.preheader, label %._crit_edge822

.preheader737.us.preheader:                       ; preds = %.preheader737.lr.ph
  %wide.trip.count919 = zext nneg i32 %13 to i64
  %wide.trip.count = zext nneg i32 %15 to i64
  %min.iters.check = icmp ult i32 %15, 4
  %n.vec = and i64 %wide.trip.count, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  %xtraiter = and i64 %wide.trip.count, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader737.us

.preheader737.us:                                 ; preds = %.preheader737.us.preheader, %._crit_edge.us
  %indvars.iv916 = phi i64 [ 0, %.preheader737.us.preheader ], [ %indvars.iv.next917, %._crit_edge.us ]
  %36 = getelementptr inbounds ptr, ptr %35, i64 %indvars.iv916
  %37 = load ptr, ptr %36, align 8, !tbaa !15
  %38 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv916
  %39 = load ptr, ptr %38, align 8, !tbaa !15
  %40 = ptrtoint ptr %39 to i64
  %41 = ptrtoint ptr %37 to i64
  %42 = sub i64 %40, %41
  %diff.check = icmp ult i64 %42, 32
  %or.cond1180 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond1180, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.preheader737.us, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader737.us ]
  %43 = getelementptr inbounds double, ptr %37, i64 %index
  %44 = getelementptr inbounds i8, ptr %43, i64 16
  %wide.load = load <2 x double>, ptr %43, align 8, !tbaa !16
  %wide.load1122 = load <2 x double>, ptr %44, align 8, !tbaa !16
  %45 = getelementptr inbounds double, ptr %39, i64 %index
  %46 = getelementptr inbounds i8, ptr %45, i64 16
  store <2 x double> %wide.load, ptr %45, align 8, !tbaa !16
  store <2 x double> %wide.load1122, ptr %46, align 8, !tbaa !16
  %index.next = add nuw i64 %index, 4
  %47 = icmp eq i64 %index.next, %n.vec
  br i1 %47, label %middle.block, label %vector.body, !llvm.loop !18

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge.us, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.preheader737.us
  %indvars.iv.ph = phi i64 [ 0, %.preheader737.us ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %scalar.ph.prol ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %48 = getelementptr inbounds double, ptr %37, i64 %indvars.iv.prol
  %49 = load double, ptr %48, align 8, !tbaa !16
  %50 = getelementptr inbounds double, ptr %39, i64 %indvars.iv.prol
  store double %49, ptr %50, align 8, !tbaa !16
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !22

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %51 = sub nsw i64 %indvars.iv.ph, %wide.trip.count
  %52 = icmp ugt i64 %51, -4
  br i1 %52, label %._crit_edge.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %53 = getelementptr inbounds double, ptr %37, i64 %indvars.iv
  %54 = load double, ptr %53, align 8, !tbaa !16
  %55 = getelementptr inbounds double, ptr %39, i64 %indvars.iv
  store double %54, ptr %55, align 8, !tbaa !16
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %56 = getelementptr inbounds double, ptr %37, i64 %indvars.iv.next
  %57 = load double, ptr %56, align 8, !tbaa !16
  %58 = getelementptr inbounds double, ptr %39, i64 %indvars.iv.next
  store double %57, ptr %58, align 8, !tbaa !16
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %59 = getelementptr inbounds double, ptr %37, i64 %indvars.iv.next.1
  %60 = load double, ptr %59, align 8, !tbaa !16
  %61 = getelementptr inbounds double, ptr %39, i64 %indvars.iv.next.1
  store double %60, ptr %61, align 8, !tbaa !16
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %62 = getelementptr inbounds double, ptr %37, i64 %indvars.iv.next.2
  %63 = load double, ptr %62, align 8, !tbaa !16
  %64 = getelementptr inbounds double, ptr %39, i64 %indvars.iv.next.2
  store double %63, ptr %64, align 8, !tbaa !16
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %._crit_edge.us, label %scalar.ph, !llvm.loop !24

._crit_edge.us:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next917 = add nuw nsw i64 %indvars.iv916, 1
  %exitcond920.not = icmp eq i64 %indvars.iv.next917, %wide.trip.count919
  br i1 %exitcond920.not, label %.preheader736, label %.preheader737.us, !llvm.loop !25

.preheader736:                                    ; preds = %._crit_edge.us, %24
  %65 = icmp sgt i32 %15, 0
  br i1 %65, label %.lr.ph794.preheader, label %._crit_edge822

.lr.ph794.preheader:                              ; preds = %.preheader736
  %66 = sext i32 %13 to i64
  %67 = zext nneg i32 %31 to i64
  %wide.trip.count991 = zext nneg i32 %15 to i64
  %wide.trip.count926 = zext i32 %13 to i64
  %68 = shl nuw nsw i64 %wide.trip.count991, 3
  %scevgep1140 = getelementptr i8, ptr %29, i64 %68
  %69 = add nsw i64 %wide.trip.count991, -1
  %70 = add nsw i64 %wide.trip.count991, -2
  %71 = add nsw i64 %wide.trip.count991, -1
  br label %.lr.ph794

.preheader723:                                    ; preds = %.loopexit728
  br i1 %65, label %.lr.ph821.preheader, label %._crit_edge822

.lr.ph821.preheader:                              ; preds = %.preheader723
  %72 = zext i32 %31 to i64
  %73 = sext i32 %31 to i64
  %invariant.gep = getelementptr i8, ptr %4, i64 8
  br label %.lr.ph821

.lr.ph794:                                        ; preds = %.lr.ph794.preheader, %.loopexit728
  %indvars.iv943 = phi i64 [ 1, %.lr.ph794.preheader ], [ %indvars.iv.next944, %.loopexit728 ]
  %indvars.iv921 = phi i64 [ 0, %.lr.ph794.preheader ], [ %indvars.iv.next922, %.loopexit728 ]
  %.0643791 = phi double [ 0.000000e+00, %.lr.ph794.preheader ], [ %268, %.loopexit728 ]
  %.0644790 = phi double [ 0.000000e+00, %.lr.ph794.preheader ], [ %.2646, %.loopexit728 ]
  %.0648789 = phi double [ 0.000000e+00, %.lr.ph794.preheader ], [ %.4652, %.loopexit728 ]
  %74 = sub i64 %69, %indvars.iv921
  %75 = sub i64 %70, %indvars.iv921
  %76 = xor i64 %indvars.iv921, -1
  %77 = add nsw i64 %76, %wide.trip.count991
  %78 = xor i64 %indvars.iv921, -1
  %79 = add nsw i64 %78, %wide.trip.count991
  %80 = shl nuw nsw i64 %indvars.iv921, 3
  %81 = add nuw i64 %80, 8
  %scevgep1139 = getelementptr i8, ptr %29, i64 %81
  %82 = xor i64 %indvars.iv921, -1
  %83 = add nsw i64 %82, %wide.trip.count991
  %indvars.iv.next922 = add nuw nsw i64 %indvars.iv921, 1
  %84 = fmul double %.0648789, %.0644790
  %85 = getelementptr inbounds double, ptr %29, i64 %indvars.iv921
  store double %84, ptr %85, align 8, !tbaa !16
  %.not891 = icmp slt i64 %indvars.iv921, %66
  br i1 %.not891, label %.preheader735, label %.thread

.thread:                                          ; preds = %.lr.ph794
  %86 = getelementptr inbounds double, ptr %3, i64 %indvars.iv921
  store double 0.000000e+00, ptr %86, align 8, !tbaa !16
  br label %.loopexit728

.preheader735:                                    ; preds = %.lr.ph794, %.preheader735
  %indvars.iv923 = phi i64 [ %indvars.iv.next924, %.preheader735 ], [ %indvars.iv921, %.lr.ph794 ]
  %.1649750 = phi double [ %92, %.preheader735 ], [ 0.000000e+00, %.lr.ph794 ]
  %87 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv923
  %88 = load ptr, ptr %87, align 8, !tbaa !15
  %89 = getelementptr inbounds double, ptr %88, i64 %indvars.iv921
  %90 = load double, ptr %89, align 8, !tbaa !16
  %91 = tail call double @llvm.fabs.f64(double %90)
  %92 = fadd double %.1649750, %91
  %indvars.iv.next924 = add nuw nsw i64 %indvars.iv923, 1
  %exitcond927.not = icmp eq i64 %indvars.iv.next924, %wide.trip.count926
  br i1 %exitcond927.not, label %93, label %.preheader735, !llvm.loop !26

93:                                               ; preds = %.preheader735
  %94 = fcmp une double %92, 0.000000e+00
  br i1 %94, label %.lr.ph, label %.loopexit733

.lr.ph:                                           ; preds = %93, %.lr.ph
  %indvars.iv928 = phi i64 [ %indvars.iv.next929, %.lr.ph ], [ %indvars.iv921, %93 ]
  %.0601753 = phi double [ %100, %.lr.ph ], [ 0.000000e+00, %93 ]
  %95 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv928
  %96 = load ptr, ptr %95, align 8, !tbaa !15
  %97 = getelementptr inbounds double, ptr %96, i64 %indvars.iv921
  %98 = load double, ptr %97, align 8, !tbaa !16
  %99 = fdiv double %98, %92
  store double %99, ptr %97, align 8, !tbaa !16
  %100 = tail call double @llvm.fmuladd.f64(double %99, double %99, double %.0601753)
  %indvars.iv.next929 = add nuw nsw i64 %indvars.iv928, 1
  %exitcond932.not = icmp eq i64 %indvars.iv.next929, %wide.trip.count926
  br i1 %exitcond932.not, label %._crit_edge, label %.lr.ph, !llvm.loop !27

._crit_edge:                                      ; preds = %.lr.ph
  %101 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv921
  %102 = load ptr, ptr %101, align 8, !tbaa !15
  %103 = getelementptr inbounds double, ptr %102, i64 %indvars.iv921
  %104 = load double, ptr %103, align 8, !tbaa !16
  %105 = fcmp ult double %104, 0.000000e+00
  %106 = tail call double @sqrt(double noundef %100) #11
  %107 = tail call double @llvm.fabs.f64(double %106)
  %108 = fneg double %107
  %109 = select i1 %105, double %107, double %108
  %110 = fneg double %100
  %111 = tail call double @llvm.fmuladd.f64(double %104, double %109, double %110)
  %112 = fsub double %104, %109
  %113 = load ptr, ptr %101, align 8, !tbaa !15
  %114 = getelementptr inbounds double, ptr %113, i64 %indvars.iv921
  store double %112, ptr %114, align 8, !tbaa !16
  %115 = icmp slt i64 %indvars.iv.next922, %25
  br i1 %115, label %.lr.ph756, label %.lr.ph765.preheader

.lr.ph756:                                        ; preds = %._crit_edge, %._crit_edge762
  %indvars.iv945 = phi i64 [ %indvars.iv.next946, %._crit_edge762 ], [ %indvars.iv943, %._crit_edge ]
  br label %116

116:                                              ; preds = %.lr.ph756, %116
  %indvars.iv933 = phi i64 [ %indvars.iv921, %.lr.ph756 ], [ %indvars.iv.next934, %116 ]
  %.1602755 = phi double [ 0.000000e+00, %.lr.ph756 ], [ %123, %116 ]
  %117 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv933
  %118 = load ptr, ptr %117, align 8, !tbaa !15
  %119 = getelementptr inbounds double, ptr %118, i64 %indvars.iv921
  %120 = load double, ptr %119, align 8, !tbaa !16
  %121 = getelementptr inbounds double, ptr %118, i64 %indvars.iv945
  %122 = load double, ptr %121, align 8, !tbaa !16
  %123 = tail call double @llvm.fmuladd.f64(double %120, double %122, double %.1602755)
  %indvars.iv.next934 = add nuw nsw i64 %indvars.iv933, 1
  %exitcond937.not = icmp eq i64 %indvars.iv.next934, %wide.trip.count926
  br i1 %exitcond937.not, label %.lr.ph761, label %116, !llvm.loop !28

.lr.ph761:                                        ; preds = %116
  %124 = fdiv double %123, %111
  br label %125

125:                                              ; preds = %.lr.ph761, %125
  %indvars.iv938 = phi i64 [ %indvars.iv921, %.lr.ph761 ], [ %indvars.iv.next939, %125 ]
  %126 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv938
  %127 = load ptr, ptr %126, align 8, !tbaa !15
  %128 = getelementptr inbounds double, ptr %127, i64 %indvars.iv921
  %129 = load double, ptr %128, align 8, !tbaa !16
  %130 = getelementptr inbounds double, ptr %127, i64 %indvars.iv945
  %131 = load double, ptr %130, align 8, !tbaa !16
  %132 = tail call double @llvm.fmuladd.f64(double %124, double %129, double %131)
  store double %132, ptr %130, align 8, !tbaa !16
  %indvars.iv.next939 = add nuw nsw i64 %indvars.iv938, 1
  %exitcond942.not = icmp eq i64 %indvars.iv.next939, %wide.trip.count926
  br i1 %exitcond942.not, label %._crit_edge762, label %125, !llvm.loop !29

._crit_edge762:                                   ; preds = %125
  %indvars.iv.next946 = add nuw nsw i64 %indvars.iv945, 1
  %exitcond949.not = icmp eq i64 %indvars.iv.next946, %wide.trip.count991
  br i1 %exitcond949.not, label %.lr.ph765.preheader, label %.lr.ph756, !llvm.loop !30

.lr.ph765.preheader:                              ; preds = %._crit_edge762, %._crit_edge
  br label %.lr.ph765

.lr.ph765:                                        ; preds = %.lr.ph765.preheader, %.lr.ph765
  %indvars.iv950 = phi i64 [ %indvars.iv.next951, %.lr.ph765 ], [ %indvars.iv921, %.lr.ph765.preheader ]
  %133 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv950
  %134 = load ptr, ptr %133, align 8, !tbaa !15
  %135 = getelementptr inbounds double, ptr %134, i64 %indvars.iv921
  %136 = load double, ptr %135, align 8, !tbaa !16
  %137 = fmul double %92, %136
  store double %137, ptr %135, align 8, !tbaa !16
  %indvars.iv.next951 = add nuw nsw i64 %indvars.iv950, 1
  %exitcond954.not = icmp eq i64 %indvars.iv.next951, %wide.trip.count926
  br i1 %exitcond954.not, label %.loopexit733, label %.lr.ph765, !llvm.loop !31

.loopexit733:                                     ; preds = %.lr.ph765, %93
  %.1645 = phi double [ 0.000000e+00, %93 ], [ %109, %.lr.ph765 ]
  %138 = fmul double %92, %.1645
  %139 = getelementptr inbounds double, ptr %3, i64 %indvars.iv921
  store double %138, ptr %139, align 8, !tbaa !16
  %.not685 = icmp eq i64 %indvars.iv921, %67
  br i1 %.not685, label %.loopexit728, label %.preheader731

.preheader731:                                    ; preds = %.loopexit733
  %140 = icmp slt i64 %indvars.iv.next922, %25
  br i1 %140, label %.lr.ph768, label %.loopexit728

.lr.ph768:                                        ; preds = %.preheader731
  %141 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv921
  %142 = load ptr, ptr %141, align 8, !tbaa !15
  br label %143

143:                                              ; preds = %.lr.ph768, %143
  %indvars.iv955 = phi i64 [ %indvars.iv943, %.lr.ph768 ], [ %indvars.iv.next956, %143 ]
  %.3651766 = phi double [ 0.000000e+00, %.lr.ph768 ], [ %147, %143 ]
  %144 = getelementptr inbounds double, ptr %142, i64 %indvars.iv955
  %145 = load double, ptr %144, align 8, !tbaa !16
  %146 = tail call double @llvm.fabs.f64(double %145)
  %147 = fadd double %.3651766, %146
  %indvars.iv.next956 = add nuw nsw i64 %indvars.iv955, 1
  %exitcond959.not = icmp eq i64 %indvars.iv.next956, %wide.trip.count991
  br i1 %exitcond959.not, label %._crit_edge769, label %143, !llvm.loop !32

._crit_edge769:                                   ; preds = %143
  %148 = fcmp une double %147, 0.000000e+00
  br i1 %148, label %.preheader730, label %.loopexit728

.preheader730:                                    ; preds = %._crit_edge769
  %149 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv921
  %150 = load ptr, ptr %149, align 8, !tbaa !15
  br i1 %140, label %.lr.ph773, label %._crit_edge774

.lr.ph773:                                        ; preds = %.preheader730, %.lr.ph773
  %indvars.iv960 = phi i64 [ %indvars.iv.next961, %.lr.ph773 ], [ %indvars.iv943, %.preheader730 ]
  %.2603772 = phi double [ %154, %.lr.ph773 ], [ 0.000000e+00, %.preheader730 ]
  %151 = getelementptr inbounds double, ptr %150, i64 %indvars.iv960
  %152 = load double, ptr %151, align 8, !tbaa !16
  %153 = fdiv double %152, %147
  store double %153, ptr %151, align 8, !tbaa !16
  %154 = tail call double @llvm.fmuladd.f64(double %153, double %153, double %.2603772)
  %indvars.iv.next961 = add nuw nsw i64 %indvars.iv960, 1
  %exitcond964.not = icmp eq i64 %indvars.iv.next961, %wide.trip.count991
  br i1 %exitcond964.not, label %._crit_edge774, label %.lr.ph773, !llvm.loop !33

._crit_edge774:                                   ; preds = %.lr.ph773, %.preheader730
  %.2603.lcssa = phi double [ 0.000000e+00, %.preheader730 ], [ %154, %.lr.ph773 ]
  %155 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv921
  %156 = getelementptr inbounds double, ptr %150, i64 %indvars.iv.next922
  %157 = load double, ptr %156, align 8, !tbaa !16
  %158 = fcmp ult double %157, 0.000000e+00
  %159 = tail call double @sqrt(double noundef %.2603.lcssa) #11
  %160 = tail call double @llvm.fabs.f64(double %159)
  %161 = fneg double %160
  %162 = select i1 %158, double %160, double %161
  %163 = fneg double %.2603.lcssa
  %164 = tail call double @llvm.fmuladd.f64(double %157, double %162, double %163)
  %165 = fsub double %157, %162
  %166 = load ptr, ptr %155, align 8, !tbaa !15
  %167 = getelementptr inbounds double, ptr %166, i64 %indvars.iv.next922
  store double %165, ptr %167, align 8, !tbaa !16
  br i1 %140, label %.lr.ph778.preheader, label %.preheader729

.lr.ph778.preheader:                              ; preds = %._crit_edge774
  %168 = ptrtoint ptr %166 to i64
  %min.iters.check1164 = icmp ult i64 %77, 2
  %169 = sub i64 %30, %168
  %diff.check1161 = icmp ult i64 %169, 16
  %or.cond1181 = or i1 %min.iters.check1164, %diff.check1161
  br i1 %or.cond1181, label %.lr.ph778.preheader1195, label %vector.ph1165

.lr.ph778.preheader1195:                          ; preds = %middle.block1162, %.lr.ph778.preheader
  %indvars.iv965.ph = phi i64 [ %indvars.iv943, %.lr.ph778.preheader ], [ %ind.end1168, %middle.block1162 ]
  %170 = sub i64 %wide.trip.count991, %indvars.iv965.ph
  %171 = sub i64 %69, %indvars.iv965.ph
  %xtraiter1203 = and i64 %170, 3
  %lcmp.mod1204.not = icmp eq i64 %xtraiter1203, 0
  br i1 %lcmp.mod1204.not, label %.lr.ph778.prol.loopexit, label %.lr.ph778.prol

.lr.ph778.prol:                                   ; preds = %.lr.ph778.preheader1195, %.lr.ph778.prol
  %indvars.iv965.prol = phi i64 [ %indvars.iv.next966.prol, %.lr.ph778.prol ], [ %indvars.iv965.ph, %.lr.ph778.preheader1195 ]
  %prol.iter1205 = phi i64 [ %prol.iter1205.next, %.lr.ph778.prol ], [ 0, %.lr.ph778.preheader1195 ]
  %172 = getelementptr inbounds double, ptr %166, i64 %indvars.iv965.prol
  %173 = load double, ptr %172, align 8, !tbaa !16
  %174 = fdiv double %173, %164
  %175 = getelementptr inbounds double, ptr %29, i64 %indvars.iv965.prol
  store double %174, ptr %175, align 8, !tbaa !16
  %indvars.iv.next966.prol = add nuw nsw i64 %indvars.iv965.prol, 1
  %prol.iter1205.next = add i64 %prol.iter1205, 1
  %prol.iter1205.cmp.not = icmp eq i64 %prol.iter1205.next, %xtraiter1203
  br i1 %prol.iter1205.cmp.not, label %.lr.ph778.prol.loopexit, label %.lr.ph778.prol, !llvm.loop !34

.lr.ph778.prol.loopexit:                          ; preds = %.lr.ph778.prol, %.lr.ph778.preheader1195
  %indvars.iv965.unr = phi i64 [ %indvars.iv965.ph, %.lr.ph778.preheader1195 ], [ %indvars.iv.next966.prol, %.lr.ph778.prol ]
  %176 = icmp ult i64 %171, 3
  br i1 %176, label %.preheader729, label %.lr.ph778

vector.ph1165:                                    ; preds = %.lr.ph778.preheader
  %n.vec1167 = and i64 %77, -2
  %ind.end1168 = add i64 %indvars.iv943, %n.vec1167
  %broadcast.splatinsert1174 = insertelement <2 x double> poison, double %164, i64 0
  %broadcast.splat1175 = shufflevector <2 x double> %broadcast.splatinsert1174, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1170

vector.body1170:                                  ; preds = %vector.body1170, %vector.ph1165
  %index1171 = phi i64 [ 0, %vector.ph1165 ], [ %index.next1176, %vector.body1170 ]
  %offset.idx1172 = add i64 %indvars.iv943, %index1171
  %177 = getelementptr inbounds double, ptr %166, i64 %offset.idx1172
  %wide.load1173 = load <2 x double>, ptr %177, align 8, !tbaa !16
  %178 = fdiv <2 x double> %wide.load1173, %broadcast.splat1175
  %179 = getelementptr inbounds double, ptr %29, i64 %offset.idx1172
  store <2 x double> %178, ptr %179, align 8, !tbaa !16
  %index.next1176 = add nuw i64 %index1171, 2
  %180 = icmp eq i64 %index.next1176, %n.vec1167
  br i1 %180, label %middle.block1162, label %vector.body1170, !llvm.loop !35

middle.block1162:                                 ; preds = %vector.body1170
  %cmp.n1177 = icmp eq i64 %77, %n.vec1167
  br i1 %cmp.n1177, label %.preheader729, label %.lr.ph778.preheader1195

.preheader729:                                    ; preds = %.lr.ph778.prol.loopexit, %.lr.ph778, %middle.block1162, %._crit_edge774
  %181 = icmp slt i64 %indvars.iv.next922, %66
  br i1 %181, label %.preheader725.preheader, label %.preheader727

.preheader725.preheader:                          ; preds = %.preheader729
  %xtraiter1206 = and i64 %74, 3
  %lcmp.mod1207.not = icmp eq i64 %xtraiter1206, 0
  %182 = icmp ult i64 %75, 3
  %min.iters.check1143 = icmp ult i64 %79, 4
  %n.vec1146 = and i64 %79, -4
  %ind.end1147 = add i64 %indvars.iv943, %n.vec1146
  %cmp.n1159 = icmp eq i64 %79, %n.vec1146
  br label %.preheader725

.lr.ph778:                                        ; preds = %.lr.ph778.prol.loopexit, %.lr.ph778
  %indvars.iv965 = phi i64 [ %indvars.iv.next966.3, %.lr.ph778 ], [ %indvars.iv965.unr, %.lr.ph778.prol.loopexit ]
  %183 = getelementptr inbounds double, ptr %166, i64 %indvars.iv965
  %184 = load double, ptr %183, align 8, !tbaa !16
  %185 = fdiv double %184, %164
  %186 = getelementptr inbounds double, ptr %29, i64 %indvars.iv965
  store double %185, ptr %186, align 8, !tbaa !16
  %indvars.iv.next966 = add nuw nsw i64 %indvars.iv965, 1
  %187 = getelementptr inbounds double, ptr %166, i64 %indvars.iv.next966
  %188 = load double, ptr %187, align 8, !tbaa !16
  %189 = fdiv double %188, %164
  %190 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next966
  store double %189, ptr %190, align 8, !tbaa !16
  %indvars.iv.next966.1 = add nuw nsw i64 %indvars.iv965, 2
  %191 = getelementptr inbounds double, ptr %166, i64 %indvars.iv.next966.1
  %192 = load double, ptr %191, align 8, !tbaa !16
  %193 = fdiv double %192, %164
  %194 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next966.1
  store double %193, ptr %194, align 8, !tbaa !16
  %indvars.iv.next966.2 = add nuw nsw i64 %indvars.iv965, 3
  %195 = getelementptr inbounds double, ptr %166, i64 %indvars.iv.next966.2
  %196 = load double, ptr %195, align 8, !tbaa !16
  %197 = fdiv double %196, %164
  %198 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next966.2
  store double %197, ptr %198, align 8, !tbaa !16
  %indvars.iv.next966.3 = add nuw nsw i64 %indvars.iv965, 4
  %exitcond969.not.3 = icmp eq i64 %indvars.iv.next966.3, %wide.trip.count991
  br i1 %exitcond969.not.3, label %.preheader729, label %.lr.ph778, !llvm.loop !36

.preheader727:                                    ; preds = %._crit_edge785, %.preheader729
  br i1 %140, label %.lr.ph788.preheader, label %.loopexit728

.lr.ph788.preheader:                              ; preds = %.preheader727
  %min.iters.check1125 = icmp ult i64 %83, 4
  br i1 %min.iters.check1125, label %.lr.ph788.preheader1194, label %vector.ph1126

.lr.ph788.preheader1194:                          ; preds = %middle.block1123, %.lr.ph788.preheader
  %indvars.iv985.ph = phi i64 [ %indvars.iv943, %.lr.ph788.preheader ], [ %ind.end, %middle.block1123 ]
  br label %.lr.ph788

vector.ph1126:                                    ; preds = %.lr.ph788.preheader
  %n.vec1128 = and i64 %83, -4
  %ind.end = add i64 %indvars.iv943, %n.vec1128
  %broadcast.splatinsert = insertelement <2 x double> poison, double %147, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %199 = getelementptr double, ptr %166, i64 %indvars.iv943
  br label %vector.body1130

vector.body1130:                                  ; preds = %vector.body1130, %vector.ph1126
  %index1131 = phi i64 [ 0, %vector.ph1126 ], [ %index.next1134, %vector.body1130 ]
  %200 = getelementptr double, ptr %199, i64 %index1131
  %201 = getelementptr inbounds i8, ptr %200, i64 16
  %wide.load1132 = load <2 x double>, ptr %200, align 8, !tbaa !16
  %wide.load1133 = load <2 x double>, ptr %201, align 8, !tbaa !16
  %202 = fmul <2 x double> %broadcast.splat, %wide.load1132
  %203 = fmul <2 x double> %broadcast.splat, %wide.load1133
  store <2 x double> %202, ptr %200, align 8, !tbaa !16
  store <2 x double> %203, ptr %201, align 8, !tbaa !16
  %index.next1134 = add nuw i64 %index1131, 4
  %204 = icmp eq i64 %index.next1134, %n.vec1128
  br i1 %204, label %middle.block1123, label %vector.body1130, !llvm.loop !37

middle.block1123:                                 ; preds = %vector.body1130
  %cmp.n1135 = icmp eq i64 %83, %n.vec1128
  br i1 %cmp.n1135, label %.loopexit728, label %.lr.ph788.preheader1194

.preheader725:                                    ; preds = %.preheader725.preheader, %._crit_edge785
  %indvars.iv980 = phi i64 [ %indvars.iv.next981, %._crit_edge785 ], [ %indvars.iv943, %.preheader725.preheader ]
  br i1 %140, label %.lr.ph781, label %._crit_edge785

.lr.ph781:                                        ; preds = %.preheader725
  %205 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv980
  %206 = load ptr, ptr %205, align 8, !tbaa !15
  br i1 %lcmp.mod1207.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %.lr.ph781, %.prol.preheader
  %indvars.iv970.prol = phi i64 [ %indvars.iv.next971.prol, %.prol.preheader ], [ %indvars.iv943, %.lr.ph781 ]
  %.3780.prol = phi double [ %211, %.prol.preheader ], [ 0.000000e+00, %.lr.ph781 ]
  %prol.iter1208 = phi i64 [ %prol.iter1208.next, %.prol.preheader ], [ 0, %.lr.ph781 ]
  %207 = getelementptr inbounds double, ptr %206, i64 %indvars.iv970.prol
  %208 = load double, ptr %207, align 8, !tbaa !16
  %209 = getelementptr inbounds double, ptr %166, i64 %indvars.iv970.prol
  %210 = load double, ptr %209, align 8, !tbaa !16
  %211 = tail call double @llvm.fmuladd.f64(double %208, double %210, double %.3780.prol)
  %indvars.iv.next971.prol = add nuw nsw i64 %indvars.iv970.prol, 1
  %prol.iter1208.next = add i64 %prol.iter1208, 1
  %prol.iter1208.cmp.not = icmp eq i64 %prol.iter1208.next, %xtraiter1206
  br i1 %prol.iter1208.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !38

.prol.loopexit:                                   ; preds = %.prol.preheader, %.lr.ph781
  %.lcssa1201.unr = phi double [ poison, %.lr.ph781 ], [ %211, %.prol.preheader ]
  %indvars.iv970.unr = phi i64 [ %indvars.iv943, %.lr.ph781 ], [ %indvars.iv.next971.prol, %.prol.preheader ]
  %.3780.unr = phi double [ 0.000000e+00, %.lr.ph781 ], [ %211, %.prol.preheader ]
  br i1 %182, label %.preheader724, label %.lr.ph781.new

.preheader724:                                    ; preds = %.lr.ph781.new, %.prol.loopexit
  %.lcssa1201 = phi double [ %.lcssa1201.unr, %.prol.loopexit ], [ %247, %.lr.ph781.new ]
  br i1 %140, label %.lr.ph784, label %._crit_edge785

.lr.ph784:                                        ; preds = %.preheader724
  %212 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv980
  %213 = load ptr, ptr %212, align 8, !tbaa !15
  br i1 %min.iters.check1143, label %scalar.ph1142.preheader, label %vector.memcheck1136

scalar.ph1142.preheader:                          ; preds = %middle.block1141, %vector.memcheck1136, %.lr.ph784
  %indvars.iv975.ph = phi i64 [ %indvars.iv943, %vector.memcheck1136 ], [ %indvars.iv943, %.lr.ph784 ], [ %ind.end1147, %middle.block1141 ]
  %214 = sub i64 %wide.trip.count991, %indvars.iv975.ph
  %xtraiter1209 = and i64 %214, 1
  %lcmp.mod1210.not = icmp eq i64 %xtraiter1209, 0
  br i1 %lcmp.mod1210.not, label %scalar.ph1142.prol.loopexit, label %scalar.ph1142.prol

scalar.ph1142.prol:                               ; preds = %scalar.ph1142.preheader
  %215 = getelementptr inbounds double, ptr %29, i64 %indvars.iv975.ph
  %216 = load double, ptr %215, align 8, !tbaa !16
  %217 = getelementptr inbounds double, ptr %213, i64 %indvars.iv975.ph
  %218 = load double, ptr %217, align 8, !tbaa !16
  %219 = tail call double @llvm.fmuladd.f64(double %.lcssa1201, double %216, double %218)
  store double %219, ptr %217, align 8, !tbaa !16
  %indvars.iv.next976.prol = add nuw nsw i64 %indvars.iv975.ph, 1
  br label %scalar.ph1142.prol.loopexit

scalar.ph1142.prol.loopexit:                      ; preds = %scalar.ph1142.prol, %scalar.ph1142.preheader
  %indvars.iv975.unr = phi i64 [ %indvars.iv975.ph, %scalar.ph1142.preheader ], [ %indvars.iv.next976.prol, %scalar.ph1142.prol ]
  %220 = icmp eq i64 %indvars.iv975.ph, %71
  br i1 %220, label %._crit_edge785, label %scalar.ph1142

vector.memcheck1136:                              ; preds = %.lr.ph784
  %scevgep1137 = getelementptr i8, ptr %213, i64 %81
  %scevgep1138 = getelementptr i8, ptr %213, i64 %68
  %bound0 = icmp ult ptr %scevgep1137, %scevgep1140
  %bound1 = icmp ult ptr %scevgep1139, %scevgep1138
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph1142.preheader, label %vector.ph1144

vector.ph1144:                                    ; preds = %vector.memcheck1136
  %broadcast.splatinsert1156 = insertelement <2 x double> poison, double %.lcssa1201, i64 0
  %broadcast.splat1157 = shufflevector <2 x double> %broadcast.splatinsert1156, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1149

vector.body1149:                                  ; preds = %vector.body1149, %vector.ph1144
  %index1150 = phi i64 [ 0, %vector.ph1144 ], [ %index.next1158, %vector.body1149 ]
  %offset.idx1151 = add i64 %indvars.iv943, %index1150
  %221 = getelementptr inbounds double, ptr %29, i64 %offset.idx1151
  %222 = getelementptr inbounds i8, ptr %221, i64 16
  %wide.load1152 = load <2 x double>, ptr %221, align 8, !tbaa !16, !alias.scope !39
  %wide.load1153 = load <2 x double>, ptr %222, align 8, !tbaa !16, !alias.scope !39
  %223 = getelementptr inbounds double, ptr %213, i64 %offset.idx1151
  %224 = getelementptr inbounds i8, ptr %223, i64 16
  %wide.load1154 = load <2 x double>, ptr %223, align 8, !tbaa !16, !alias.scope !42, !noalias !39
  %wide.load1155 = load <2 x double>, ptr %224, align 8, !tbaa !16, !alias.scope !42, !noalias !39
  %225 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1157, <2 x double> %wide.load1152, <2 x double> %wide.load1154)
  %226 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1157, <2 x double> %wide.load1153, <2 x double> %wide.load1155)
  store <2 x double> %225, ptr %223, align 8, !tbaa !16, !alias.scope !42, !noalias !39
  store <2 x double> %226, ptr %224, align 8, !tbaa !16, !alias.scope !42, !noalias !39
  %index.next1158 = add nuw i64 %index1150, 4
  %227 = icmp eq i64 %index.next1158, %n.vec1146
  br i1 %227, label %middle.block1141, label %vector.body1149, !llvm.loop !44

middle.block1141:                                 ; preds = %vector.body1149
  br i1 %cmp.n1159, label %._crit_edge785, label %scalar.ph1142.preheader

.lr.ph781.new:                                    ; preds = %.prol.loopexit, %.lr.ph781.new
  %indvars.iv970 = phi i64 [ %indvars.iv.next971.3, %.lr.ph781.new ], [ %indvars.iv970.unr, %.prol.loopexit ]
  %.3780 = phi double [ %247, %.lr.ph781.new ], [ %.3780.unr, %.prol.loopexit ]
  %228 = getelementptr inbounds double, ptr %206, i64 %indvars.iv970
  %229 = load double, ptr %228, align 8, !tbaa !16
  %230 = getelementptr inbounds double, ptr %166, i64 %indvars.iv970
  %231 = load double, ptr %230, align 8, !tbaa !16
  %232 = tail call double @llvm.fmuladd.f64(double %229, double %231, double %.3780)
  %indvars.iv.next971 = add nuw nsw i64 %indvars.iv970, 1
  %233 = getelementptr inbounds double, ptr %206, i64 %indvars.iv.next971
  %234 = load double, ptr %233, align 8, !tbaa !16
  %235 = getelementptr inbounds double, ptr %166, i64 %indvars.iv.next971
  %236 = load double, ptr %235, align 8, !tbaa !16
  %237 = tail call double @llvm.fmuladd.f64(double %234, double %236, double %232)
  %indvars.iv.next971.1 = add nuw nsw i64 %indvars.iv970, 2
  %238 = getelementptr inbounds double, ptr %206, i64 %indvars.iv.next971.1
  %239 = load double, ptr %238, align 8, !tbaa !16
  %240 = getelementptr inbounds double, ptr %166, i64 %indvars.iv.next971.1
  %241 = load double, ptr %240, align 8, !tbaa !16
  %242 = tail call double @llvm.fmuladd.f64(double %239, double %241, double %237)
  %indvars.iv.next971.2 = add nuw nsw i64 %indvars.iv970, 3
  %243 = getelementptr inbounds double, ptr %206, i64 %indvars.iv.next971.2
  %244 = load double, ptr %243, align 8, !tbaa !16
  %245 = getelementptr inbounds double, ptr %166, i64 %indvars.iv.next971.2
  %246 = load double, ptr %245, align 8, !tbaa !16
  %247 = tail call double @llvm.fmuladd.f64(double %244, double %246, double %242)
  %indvars.iv.next971.3 = add nuw nsw i64 %indvars.iv970, 4
  %exitcond974.not.3 = icmp eq i64 %indvars.iv.next971.3, %wide.trip.count991
  br i1 %exitcond974.not.3, label %.preheader724, label %.lr.ph781.new, !llvm.loop !45

scalar.ph1142:                                    ; preds = %scalar.ph1142.prol.loopexit, %scalar.ph1142
  %indvars.iv975 = phi i64 [ %indvars.iv.next976.1, %scalar.ph1142 ], [ %indvars.iv975.unr, %scalar.ph1142.prol.loopexit ]
  %248 = getelementptr inbounds double, ptr %29, i64 %indvars.iv975
  %249 = load double, ptr %248, align 8, !tbaa !16
  %250 = getelementptr inbounds double, ptr %213, i64 %indvars.iv975
  %251 = load double, ptr %250, align 8, !tbaa !16
  %252 = tail call double @llvm.fmuladd.f64(double %.lcssa1201, double %249, double %251)
  store double %252, ptr %250, align 8, !tbaa !16
  %indvars.iv.next976 = add nuw nsw i64 %indvars.iv975, 1
  %253 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next976
  %254 = load double, ptr %253, align 8, !tbaa !16
  %255 = getelementptr inbounds double, ptr %213, i64 %indvars.iv.next976
  %256 = load double, ptr %255, align 8, !tbaa !16
  %257 = tail call double @llvm.fmuladd.f64(double %.lcssa1201, double %254, double %256)
  store double %257, ptr %255, align 8, !tbaa !16
  %indvars.iv.next976.1 = add nuw nsw i64 %indvars.iv975, 2
  %exitcond979.not.1 = icmp eq i64 %indvars.iv.next976.1, %wide.trip.count991
  br i1 %exitcond979.not.1, label %._crit_edge785, label %scalar.ph1142, !llvm.loop !46

._crit_edge785:                                   ; preds = %scalar.ph1142.prol.loopexit, %scalar.ph1142, %middle.block1141, %.preheader725, %.preheader724
  %indvars.iv.next981 = add nuw nsw i64 %indvars.iv980, 1
  %exitcond984.not = icmp eq i64 %indvars.iv.next981, %wide.trip.count926
  br i1 %exitcond984.not, label %.preheader727, label %.preheader725, !llvm.loop !47

.lr.ph788:                                        ; preds = %.lr.ph788.preheader1194, %.lr.ph788
  %indvars.iv985 = phi i64 [ %indvars.iv.next986, %.lr.ph788 ], [ %indvars.iv985.ph, %.lr.ph788.preheader1194 ]
  %258 = getelementptr inbounds double, ptr %166, i64 %indvars.iv985
  %259 = load double, ptr %258, align 8, !tbaa !16
  %260 = fmul double %147, %259
  store double %260, ptr %258, align 8, !tbaa !16
  %indvars.iv.next986 = add nuw nsw i64 %indvars.iv985, 1
  %exitcond989.not = icmp eq i64 %indvars.iv.next986, %wide.trip.count991
  br i1 %exitcond989.not, label %.loopexit728, label %.lr.ph788, !llvm.loop !48

.loopexit728:                                     ; preds = %.lr.ph788, %middle.block1123, %.preheader731, %.preheader727, %.thread, %._crit_edge769, %.loopexit733
  %261 = phi ptr [ %139, %._crit_edge769 ], [ %139, %.loopexit733 ], [ %86, %.thread ], [ %139, %.preheader727 ], [ %139, %.preheader731 ], [ %139, %middle.block1123 ], [ %139, %.lr.ph788 ]
  %.4652 = phi double [ %147, %._crit_edge769 ], [ 0.000000e+00, %.loopexit733 ], [ 0.000000e+00, %.thread ], [ %147, %.preheader727 ], [ 0.000000e+00, %.preheader731 ], [ %147, %middle.block1123 ], [ %147, %.lr.ph788 ]
  %.2646 = phi double [ 0.000000e+00, %._crit_edge769 ], [ 0.000000e+00, %.loopexit733 ], [ 0.000000e+00, %.thread ], [ %162, %.preheader727 ], [ 0.000000e+00, %.preheader731 ], [ %162, %middle.block1123 ], [ %162, %.lr.ph788 ]
  %262 = load double, ptr %261, align 8, !tbaa !16
  %263 = tail call double @llvm.fabs.f64(double %262)
  %264 = load double, ptr %85, align 8, !tbaa !16
  %265 = tail call double @llvm.fabs.f64(double %264)
  %266 = fadd double %263, %265
  %267 = fcmp ogt double %.0643791, %266
  %268 = select i1 %267, double %.0643791, double %266
  %indvars.iv.next944 = add nuw nsw i64 %indvars.iv943, 1
  %exitcond992.not = icmp eq i64 %indvars.iv.next922, %wide.trip.count991
  br i1 %exitcond992.not, label %.preheader723, label %.lr.ph794, !llvm.loop !49

.lr.ph821:                                        ; preds = %.lr.ph821.preheader, %.loopexit719
  %indvar1214 = phi i32 [ 0, %.lr.ph821.preheader ], [ %indvar.next1215, %.loopexit719 ]
  %indvars.iv1008 = phi i64 [ %72, %.lr.ph821.preheader ], [ %indvars.iv.next1009, %.loopexit719 ]
  %.1613820 = phi i32 [ %15, %.lr.ph821.preheader ], [ %403, %.loopexit719 ]
  %.3647818 = phi double [ %.2646, %.lr.ph821.preheader ], [ %401, %.loopexit719 ]
  %269 = add i32 %indvar1214, -1
  %270 = add i32 %indvar1214, -1
  %271 = icmp slt i64 %indvars.iv1008, %73
  br i1 %271, label %272, label %.loopexit719

272:                                              ; preds = %.lr.ph821
  %273 = fcmp une double %.3647818, 0.000000e+00
  br i1 %273, label %.preheader722, label %.loopexit721

.preheader722:                                    ; preds = %272
  %274 = icmp slt i32 %.1613820, %15
  br i1 %274, label %.lr.ph799, label %.loopexit721

.lr.ph799:                                        ; preds = %.preheader722
  %275 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv1008
  %276 = load ptr, ptr %275, align 8, !tbaa !15
  %277 = zext i32 %.1613820 to i64
  %278 = getelementptr inbounds double, ptr %276, i64 %277
  %xtraiter1216 = and i32 %indvar1214, 1
  %lcmp.mod1217.not = icmp eq i32 %xtraiter1216, 0
  br i1 %lcmp.mod1217.not, label %.prol.loopexit1213, label %.prol.loopexit1213.unr-lcssa

.prol.loopexit1213.unr-lcssa:                     ; preds = %.lr.ph799
  %279 = getelementptr inbounds double, ptr %276, i64 %277
  %280 = load double, ptr %279, align 8, !tbaa !16
  %281 = fdiv double %280, %280
  %282 = fdiv double %281, %.3647818
  %283 = getelementptr inbounds ptr, ptr %4, i64 %277
  %284 = load ptr, ptr %283, align 8, !tbaa !15
  %285 = getelementptr inbounds double, ptr %284, i64 %indvars.iv1008
  store double %282, ptr %285, align 8, !tbaa !16
  %indvars.iv.next994.prol = add nuw nsw i64 %277, 1
  br label %.prol.loopexit1213

.prol.loopexit1213:                               ; preds = %.prol.loopexit1213.unr-lcssa, %.lr.ph799
  %indvars.iv993.unr = phi i64 [ %277, %.lr.ph799 ], [ %indvars.iv.next994.prol, %.prol.loopexit1213.unr-lcssa ]
  %286 = icmp eq i32 %indvar1214, 1
  br i1 %286, label %.preheader720, label %.lr.ph799.new

.preheader720:                                    ; preds = %.lr.ph799.new, %.prol.loopexit1213
  br i1 %274, label %.preheader718.lr.ph, label %.loopexit721

.preheader718.lr.ph:                              ; preds = %.preheader720
  %287 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv1008
  %288 = zext i32 %.1613820 to i64
  %.pre1077 = load ptr, ptr %287, align 8, !tbaa !15
  %xtraiter1221 = and i32 %indvar1214, 3
  %lcmp.mod1222.not = icmp eq i32 %xtraiter1221, 0
  %289 = icmp ult i32 %270, 3
  %xtraiter1224 = and i32 %indvar1214, 1
  %lcmp.mod1225.not = icmp eq i32 %xtraiter1224, 0
  %290 = getelementptr inbounds ptr, ptr %4, i64 %288
  %indvars.iv.next1000.prol = add nuw nsw i64 %288, 1
  %291 = icmp eq i32 %indvar1214, 1
  br label %.preheader718.us

.preheader718.us:                                 ; preds = %._crit_edge806.us, %.preheader718.lr.ph
  %indvars.iv1002 = phi i64 [ %indvars.iv.next1003, %._crit_edge806.us ], [ %288, %.preheader718.lr.ph ]
  br i1 %lcmp.mod1222.not, label %.prol.loopexit1220, label %.prol.preheader1219

.prol.preheader1219:                              ; preds = %.preheader718.us, %.prol.preheader1219
  %indvars.iv996.prol = phi i64 [ %indvars.iv.next997.prol, %.prol.preheader1219 ], [ %288, %.preheader718.us ]
  %.4801.us.prol = phi double [ %298, %.prol.preheader1219 ], [ 0.000000e+00, %.preheader718.us ]
  %prol.iter1223 = phi i32 [ %prol.iter1223.next, %.prol.preheader1219 ], [ 0, %.preheader718.us ]
  %292 = getelementptr inbounds double, ptr %.pre1077, i64 %indvars.iv996.prol
  %293 = load double, ptr %292, align 8, !tbaa !16
  %294 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv996.prol
  %295 = load ptr, ptr %294, align 8, !tbaa !15
  %296 = getelementptr inbounds double, ptr %295, i64 %indvars.iv1002
  %297 = load double, ptr %296, align 8, !tbaa !16
  %298 = tail call double @llvm.fmuladd.f64(double %293, double %297, double %.4801.us.prol)
  %indvars.iv.next997.prol = add nuw nsw i64 %indvars.iv996.prol, 1
  %prol.iter1223.next = add i32 %prol.iter1223, 1
  %prol.iter1223.cmp.not = icmp eq i32 %prol.iter1223.next, %xtraiter1221
  br i1 %prol.iter1223.cmp.not, label %.prol.loopexit1220, label %.prol.preheader1219, !llvm.loop !50

.prol.loopexit1220:                               ; preds = %.prol.preheader1219, %.preheader718.us
  %indvars.iv996.unr = phi i64 [ %288, %.preheader718.us ], [ %indvars.iv.next997.prol, %.prol.preheader1219 ]
  %.4801.us.unr = phi double [ 0.000000e+00, %.preheader718.us ], [ %298, %.prol.preheader1219 ]
  %.lcssa1193.unr = phi double [ poison, %.preheader718.us ], [ %298, %.prol.preheader1219 ]
  br i1 %289, label %..preheader717_crit_edge.us.preheader, label %.preheader718.us.new

..preheader717_crit_edge.us:                      ; preds = %..preheader717_crit_edge.us.prol.loopexit, %..preheader717_crit_edge.us
  %indvars.iv999 = phi i64 [ %indvars.iv.next1000.1, %..preheader717_crit_edge.us ], [ %indvars.iv999.unr, %..preheader717_crit_edge.us.prol.loopexit ]
  %299 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv999
  %300 = load ptr, ptr %299, align 8, !tbaa !15
  %301 = getelementptr inbounds double, ptr %300, i64 %indvars.iv1008
  %302 = load double, ptr %301, align 8, !tbaa !16
  %303 = getelementptr inbounds double, ptr %300, i64 %indvars.iv1002
  %304 = load double, ptr %303, align 8, !tbaa !16
  %305 = tail call double @llvm.fmuladd.f64(double %.lcssa1193, double %302, double %304)
  store double %305, ptr %303, align 8, !tbaa !16
  %gep = getelementptr ptr, ptr %invariant.gep, i64 %indvars.iv999
  %306 = load ptr, ptr %gep, align 8, !tbaa !15
  %307 = getelementptr inbounds double, ptr %306, i64 %indvars.iv1008
  %308 = load double, ptr %307, align 8, !tbaa !16
  %309 = getelementptr inbounds double, ptr %306, i64 %indvars.iv1002
  %310 = load double, ptr %309, align 8, !tbaa !16
  %311 = tail call double @llvm.fmuladd.f64(double %.lcssa1193, double %308, double %310)
  store double %311, ptr %309, align 8, !tbaa !16
  %indvars.iv.next1000.1 = add nuw nsw i64 %indvars.iv999, 2
  %312 = trunc nuw i64 %indvars.iv.next1000.1 to i32
  %313 = icmp sgt i32 %15, %312
  br i1 %313, label %..preheader717_crit_edge.us, label %._crit_edge806.us, !llvm.loop !51

.preheader718.us.new:                             ; preds = %.prol.loopexit1220, %.preheader718.us.new
  %indvars.iv996 = phi i64 [ %indvars.iv.next997.3, %.preheader718.us.new ], [ %indvars.iv996.unr, %.prol.loopexit1220 ]
  %.4801.us = phi double [ %341, %.preheader718.us.new ], [ %.4801.us.unr, %.prol.loopexit1220 ]
  %314 = getelementptr inbounds double, ptr %.pre1077, i64 %indvars.iv996
  %315 = load double, ptr %314, align 8, !tbaa !16
  %316 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv996
  %317 = load ptr, ptr %316, align 8, !tbaa !15
  %318 = getelementptr inbounds double, ptr %317, i64 %indvars.iv1002
  %319 = load double, ptr %318, align 8, !tbaa !16
  %320 = tail call double @llvm.fmuladd.f64(double %315, double %319, double %.4801.us)
  %indvars.iv.next997 = add nuw nsw i64 %indvars.iv996, 1
  %321 = getelementptr inbounds double, ptr %.pre1077, i64 %indvars.iv.next997
  %322 = load double, ptr %321, align 8, !tbaa !16
  %323 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next997
  %324 = load ptr, ptr %323, align 8, !tbaa !15
  %325 = getelementptr inbounds double, ptr %324, i64 %indvars.iv1002
  %326 = load double, ptr %325, align 8, !tbaa !16
  %327 = tail call double @llvm.fmuladd.f64(double %322, double %326, double %320)
  %indvars.iv.next997.1 = add nuw nsw i64 %indvars.iv996, 2
  %328 = getelementptr inbounds double, ptr %.pre1077, i64 %indvars.iv.next997.1
  %329 = load double, ptr %328, align 8, !tbaa !16
  %330 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next997.1
  %331 = load ptr, ptr %330, align 8, !tbaa !15
  %332 = getelementptr inbounds double, ptr %331, i64 %indvars.iv1002
  %333 = load double, ptr %332, align 8, !tbaa !16
  %334 = tail call double @llvm.fmuladd.f64(double %329, double %333, double %327)
  %indvars.iv.next997.2 = add nuw nsw i64 %indvars.iv996, 3
  %335 = getelementptr inbounds double, ptr %.pre1077, i64 %indvars.iv.next997.2
  %336 = load double, ptr %335, align 8, !tbaa !16
  %337 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next997.2
  %338 = load ptr, ptr %337, align 8, !tbaa !15
  %339 = getelementptr inbounds double, ptr %338, i64 %indvars.iv1002
  %340 = load double, ptr %339, align 8, !tbaa !16
  %341 = tail call double @llvm.fmuladd.f64(double %336, double %340, double %334)
  %indvars.iv.next997.3 = add nuw nsw i64 %indvars.iv996, 4
  %342 = trunc nuw i64 %indvars.iv.next997.3 to i32
  %343 = icmp sgt i32 %15, %342
  br i1 %343, label %.preheader718.us.new, label %..preheader717_crit_edge.us.preheader, !llvm.loop !52

..preheader717_crit_edge.us.preheader:            ; preds = %.preheader718.us.new, %.prol.loopexit1220
  %.lcssa1193 = phi double [ %.lcssa1193.unr, %.prol.loopexit1220 ], [ %341, %.preheader718.us.new ]
  br i1 %lcmp.mod1225.not, label %..preheader717_crit_edge.us.prol.loopexit, label %..preheader717_crit_edge.us.prol

..preheader717_crit_edge.us.prol:                 ; preds = %..preheader717_crit_edge.us.preheader
  %344 = load ptr, ptr %290, align 8, !tbaa !15
  %345 = getelementptr inbounds double, ptr %344, i64 %indvars.iv1008
  %346 = load double, ptr %345, align 8, !tbaa !16
  %347 = getelementptr inbounds double, ptr %344, i64 %indvars.iv1002
  %348 = load double, ptr %347, align 8, !tbaa !16
  %349 = tail call double @llvm.fmuladd.f64(double %.lcssa1193, double %346, double %348)
  store double %349, ptr %347, align 8, !tbaa !16
  br label %..preheader717_crit_edge.us.prol.loopexit

..preheader717_crit_edge.us.prol.loopexit:        ; preds = %..preheader717_crit_edge.us.prol, %..preheader717_crit_edge.us.preheader
  %indvars.iv999.unr = phi i64 [ %288, %..preheader717_crit_edge.us.preheader ], [ %indvars.iv.next1000.prol, %..preheader717_crit_edge.us.prol ]
  br i1 %291, label %._crit_edge806.us, label %..preheader717_crit_edge.us

._crit_edge806.us:                                ; preds = %..preheader717_crit_edge.us, %..preheader717_crit_edge.us.prol.loopexit
  %indvars.iv.next1003 = add nuw nsw i64 %indvars.iv1002, 1
  %350 = trunc nuw i64 %indvars.iv.next1003 to i32
  %351 = icmp sgt i32 %15, %350
  br i1 %351, label %.preheader718.us, label %.loopexit721, !llvm.loop !53

.lr.ph799.new:                                    ; preds = %.prol.loopexit1213, %.lr.ph799.new
  %indvars.iv993 = phi i64 [ %indvars.iv.next994.1, %.lr.ph799.new ], [ %indvars.iv993.unr, %.prol.loopexit1213 ]
  %352 = getelementptr inbounds double, ptr %276, i64 %indvars.iv993
  %353 = load double, ptr %352, align 8, !tbaa !16
  %354 = load double, ptr %278, align 8, !tbaa !16
  %355 = fdiv double %353, %354
  %356 = fdiv double %355, %.3647818
  %357 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv993
  %358 = load ptr, ptr %357, align 8, !tbaa !15
  %359 = getelementptr inbounds double, ptr %358, i64 %indvars.iv1008
  store double %356, ptr %359, align 8, !tbaa !16
  %indvars.iv.next994 = add nuw nsw i64 %indvars.iv993, 1
  %360 = getelementptr inbounds double, ptr %276, i64 %indvars.iv.next994
  %361 = load double, ptr %360, align 8, !tbaa !16
  %362 = load double, ptr %278, align 8, !tbaa !16
  %363 = fdiv double %361, %362
  %364 = fdiv double %363, %.3647818
  %365 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next994
  %366 = load ptr, ptr %365, align 8, !tbaa !15
  %367 = getelementptr inbounds double, ptr %366, i64 %indvars.iv1008
  store double %364, ptr %367, align 8, !tbaa !16
  %indvars.iv.next994.1 = add nuw nsw i64 %indvars.iv993, 2
  %368 = trunc nuw i64 %indvars.iv.next994.1 to i32
  %369 = icmp sgt i32 %15, %368
  br i1 %369, label %.lr.ph799.new, label %.preheader720, !llvm.loop !54

.loopexit721:                                     ; preds = %._crit_edge806.us, %.preheader722, %.preheader720, %272
  %370 = icmp slt i32 %.1613820, %15
  br i1 %370, label %.lr.ph817, label %.loopexit719

.lr.ph817:                                        ; preds = %.loopexit721
  %371 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv1008
  %372 = load ptr, ptr %371, align 8, !tbaa !15
  %373 = zext i32 %.1613820 to i64
  %xtraiter1229 = and i32 %indvar1214, 3
  %lcmp.mod1230.not = icmp eq i32 %xtraiter1229, 0
  br i1 %lcmp.mod1230.not, label %.prol.loopexit1228, label %.prol.preheader1227

.prol.preheader1227:                              ; preds = %.lr.ph817, %.prol.preheader1227
  %indvars.iv1005.prol = phi i64 [ %indvars.iv.next1006.prol, %.prol.preheader1227 ], [ %373, %.lr.ph817 ]
  %prol.iter1231 = phi i32 [ %prol.iter1231.next, %.prol.preheader1227 ], [ 0, %.lr.ph817 ]
  %374 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv1005.prol
  %375 = load ptr, ptr %374, align 8, !tbaa !15
  %376 = getelementptr inbounds double, ptr %375, i64 %indvars.iv1008
  store double 0.000000e+00, ptr %376, align 8, !tbaa !16
  %377 = getelementptr inbounds double, ptr %372, i64 %indvars.iv1005.prol
  store double 0.000000e+00, ptr %377, align 8, !tbaa !16
  %indvars.iv.next1006.prol = add nuw nsw i64 %indvars.iv1005.prol, 1
  %prol.iter1231.next = add i32 %prol.iter1231, 1
  %prol.iter1231.cmp.not = icmp eq i32 %prol.iter1231.next, %xtraiter1229
  br i1 %prol.iter1231.cmp.not, label %.prol.loopexit1228, label %.prol.preheader1227, !llvm.loop !55

.prol.loopexit1228:                               ; preds = %.prol.preheader1227, %.lr.ph817
  %indvars.iv1005.unr = phi i64 [ %373, %.lr.ph817 ], [ %indvars.iv.next1006.prol, %.prol.preheader1227 ]
  %378 = icmp ult i32 %269, 3
  br i1 %378, label %.loopexit719, label %.lr.ph817.new

.lr.ph817.new:                                    ; preds = %.prol.loopexit1228, %.lr.ph817.new
  %indvars.iv1005 = phi i64 [ %indvars.iv.next1006.3, %.lr.ph817.new ], [ %indvars.iv1005.unr, %.prol.loopexit1228 ]
  %379 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv1005
  %380 = load ptr, ptr %379, align 8, !tbaa !15
  %381 = getelementptr inbounds double, ptr %380, i64 %indvars.iv1008
  store double 0.000000e+00, ptr %381, align 8, !tbaa !16
  %382 = getelementptr inbounds double, ptr %372, i64 %indvars.iv1005
  store double 0.000000e+00, ptr %382, align 8, !tbaa !16
  %indvars.iv.next1006 = add nuw nsw i64 %indvars.iv1005, 1
  %383 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next1006
  %384 = load ptr, ptr %383, align 8, !tbaa !15
  %385 = getelementptr inbounds double, ptr %384, i64 %indvars.iv1008
  store double 0.000000e+00, ptr %385, align 8, !tbaa !16
  %386 = getelementptr inbounds double, ptr %372, i64 %indvars.iv.next1006
  store double 0.000000e+00, ptr %386, align 8, !tbaa !16
  %indvars.iv.next1006.1 = add nuw nsw i64 %indvars.iv1005, 2
  %387 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next1006.1
  %388 = load ptr, ptr %387, align 8, !tbaa !15
  %389 = getelementptr inbounds double, ptr %388, i64 %indvars.iv1008
  store double 0.000000e+00, ptr %389, align 8, !tbaa !16
  %390 = getelementptr inbounds double, ptr %372, i64 %indvars.iv.next1006.1
  store double 0.000000e+00, ptr %390, align 8, !tbaa !16
  %indvars.iv.next1006.2 = add nuw nsw i64 %indvars.iv1005, 3
  %391 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next1006.2
  %392 = load ptr, ptr %391, align 8, !tbaa !15
  %393 = getelementptr inbounds double, ptr %392, i64 %indvars.iv1008
  store double 0.000000e+00, ptr %393, align 8, !tbaa !16
  %394 = getelementptr inbounds double, ptr %372, i64 %indvars.iv.next1006.2
  store double 0.000000e+00, ptr %394, align 8, !tbaa !16
  %indvars.iv.next1006.3 = add nuw nsw i64 %indvars.iv1005, 4
  %395 = trunc nuw i64 %indvars.iv.next1006.3 to i32
  %396 = icmp sgt i32 %15, %395
  br i1 %396, label %.lr.ph817.new, label %.loopexit719, !llvm.loop !56

.loopexit719:                                     ; preds = %.prol.loopexit1228, %.lr.ph817.new, %.loopexit721, %.lr.ph821
  %397 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv1008
  %398 = load ptr, ptr %397, align 8, !tbaa !15
  %399 = getelementptr inbounds double, ptr %398, i64 %indvars.iv1008
  store double 1.000000e+00, ptr %399, align 8, !tbaa !16
  %400 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1008
  %401 = load double, ptr %400, align 8, !tbaa !16
  %indvars.iv.next1009 = add nsw i64 %indvars.iv1008, -1
  %402 = icmp sgt i64 %indvars.iv1008, 0
  %403 = trunc nuw nsw i64 %indvars.iv1008 to i32
  %indvar.next1215 = add i32 %indvar1214, 1
  br i1 %402, label %.lr.ph821, label %._crit_edge822, !llvm.loop !57

._crit_edge822:                                   ; preds = %.loopexit719, %.preheader737.lr.ph, %.preheader736, %.preheader723
  %.0643.lcssa1081 = phi double [ %268, %.preheader723 ], [ 0.000000e+00, %.preheader736 ], [ 0.000000e+00, %.preheader737.lr.ph ], [ %268, %.loopexit719 ]
  %404 = tail call i32 @llvm.smin.i32(i32 %13, i32 %15)
  %405 = icmp sgt i32 %404, 0
  br i1 %405, label %.lr.ph845.preheader, label %.preheader711

.lr.ph845.preheader:                              ; preds = %._crit_edge822
  %406 = zext nneg i32 %404 to i64
  %407 = sub i32 %31, %404
  %408 = add nsw i32 %404, -1
  %409 = zext nneg i32 %408 to i64
  %410 = sext i32 %13 to i64
  br label %.lr.ph845

.preheader711:                                    ; preds = %.loopexit714, %._crit_edge822
  %411 = icmp slt i32 %15, 1
  br i1 %411, label %._crit_edge890, label %.preheader709.lr.ph

.preheader709.lr.ph:                              ; preds = %.preheader711
  %412 = zext nneg i32 %31 to i64
  %413 = add nsw i64 %25, -1
  %wide.trip.count1045 = zext i32 %13 to i64
  %wide.trip.count1055 = zext nneg i32 %15 to i64
  %xtraiter1232 = and i64 %wide.trip.count1055, 1
  %414 = icmp eq i32 %15, 1
  %unroll_iter = and i64 %wide.trip.count1055, 2147483646
  %lcmp.mod1233.not = icmp eq i64 %xtraiter1232, 0
  %xtraiter1234 = and i64 %wide.trip.count1045, 1
  %415 = icmp eq i32 %13, 1
  %unroll_iter1236 = and i64 %wide.trip.count1045, 2147483646
  %lcmp.mod1235.not = icmp eq i64 %xtraiter1234, 0
  %xtraiter1238 = and i64 %wide.trip.count1055, 3
  %416 = icmp ult i32 %15, 4
  %unroll_iter1240 = and i64 %wide.trip.count1055, 2147483644
  %lcmp.mod1239.not = icmp eq i64 %xtraiter1238, 0
  br label %.preheader709

.lr.ph845:                                        ; preds = %.lr.ph845.preheader, %.loopexit714
  %indvars.iv1016 = phi i64 [ %409, %.lr.ph845.preheader ], [ %indvars.iv.next1017, %.loopexit714 ]
  %indvars.iv1011 = phi i64 [ %406, %.lr.ph845.preheader ], [ %indvars.iv.next1012, %.loopexit714 ]
  %indvar = phi i64 [ 0, %.lr.ph845.preheader ], [ %indvar.next, %.loopexit714 ]
  %indvars.iv.next1012 = add nsw i64 %indvars.iv1011, -1
  %417 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next1012
  %418 = load double, ptr %417, align 8, !tbaa !16
  %419 = icmp slt i64 %indvars.iv1011, %25
  br i1 %419, label %._crit_edge826, label %._crit_edge826.thread

._crit_edge826:                                   ; preds = %.lr.ph845
  %420 = trunc i64 %indvar to i32
  %421 = add i32 %407, %420
  %422 = zext i32 %421 to i64
  %423 = shl nuw nsw i64 %422, 3
  %424 = add nuw nsw i64 %423, 8
  %425 = sub nsw i64 %406, %indvar
  %426 = shl i64 %425, 3
  %427 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next1012
  %428 = load ptr, ptr %427, align 8, !tbaa !15
  %scevgep = getelementptr i8, ptr %428, i64 %426
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep, i8 0, i64 %424, i1 false), !tbaa !16
  %429 = fcmp une double %418, 0.000000e+00
  br i1 %429, label %.preheader712.lr.ph, label %.preheader715

._crit_edge826.thread:                            ; preds = %.lr.ph845
  %430 = fcmp une double %418, 0.000000e+00
  br i1 %430, label %.thread1084, label %.preheader715

.thread1084:                                      ; preds = %._crit_edge826.thread
  %431 = fdiv double 1.000000e+00, %418
  br label %.preheader713

.preheader715:                                    ; preds = %._crit_edge826.thread, %._crit_edge826
  %.not892 = icmp sgt i64 %indvars.iv1011, %410
  br i1 %.not892, label %.loopexit714, label %.lr.ph828

.preheader712.lr.ph:                              ; preds = %._crit_edge826
  %432 = fdiv double 1.000000e+00, %418
  %433 = icmp slt i64 %indvars.iv1011, %410
  %434 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next1012
  %435 = load ptr, ptr %434, align 8, !tbaa !15
  %436 = getelementptr inbounds double, ptr %435, i64 %indvars.iv.next1012
  %.not893 = icmp sgt i64 %indvars.iv1011, %410
  br label %.preheader712

.preheader713:                                    ; preds = %._crit_edge837, %.thread1084
  %437 = phi double [ %431, %.thread1084 ], [ %432, %._crit_edge837 ]
  %.not894 = icmp sgt i64 %indvars.iv1011, %410
  br i1 %.not894, label %.loopexit714, label %.lr.ph840

.preheader712:                                    ; preds = %.preheader712.lr.ph, %._crit_edge837
  %indvars.iv1027 = phi i64 [ %indvars.iv1011, %.preheader712.lr.ph ], [ %indvars.iv.next1028, %._crit_edge837 ]
  br i1 %433, label %.lr.ph831, label %._crit_edge832

.lr.ph831:                                        ; preds = %.preheader712, %.lr.ph831
  %indvars.iv1021 = phi i64 [ %indvars.iv.next1022, %.lr.ph831 ], [ %indvars.iv1011, %.preheader712 ]
  %.5830 = phi double [ %444, %.lr.ph831 ], [ 0.000000e+00, %.preheader712 ]
  %438 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv1021
  %439 = load ptr, ptr %438, align 8, !tbaa !15
  %440 = getelementptr inbounds double, ptr %439, i64 %indvars.iv.next1012
  %441 = load double, ptr %440, align 8, !tbaa !16
  %442 = getelementptr inbounds double, ptr %439, i64 %indvars.iv1027
  %443 = load double, ptr %442, align 8, !tbaa !16
  %444 = tail call double @llvm.fmuladd.f64(double %441, double %443, double %.5830)
  %indvars.iv.next1022 = add nuw nsw i64 %indvars.iv1021, 1
  %445 = trunc nuw i64 %indvars.iv.next1022 to i32
  %446 = icmp sgt i32 %13, %445
  br i1 %446, label %.lr.ph831, label %._crit_edge832, !llvm.loop !58

._crit_edge832:                                   ; preds = %.lr.ph831, %.preheader712
  %.5.lcssa = phi double [ 0.000000e+00, %.preheader712 ], [ %444, %.lr.ph831 ]
  %447 = load double, ptr %436, align 8, !tbaa !16
  %448 = fdiv double %.5.lcssa, %447
  %449 = fmul double %432, %448
  br i1 %.not893, label %._crit_edge837, label %.lr.ph836

.lr.ph836:                                        ; preds = %._crit_edge832, %.lr.ph836
  %indvars.iv1024 = phi i64 [ %indvars.iv.next1025, %.lr.ph836 ], [ %indvars.iv1016, %._crit_edge832 ]
  %450 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv1024
  %451 = load ptr, ptr %450, align 8, !tbaa !15
  %452 = getelementptr inbounds double, ptr %451, i64 %indvars.iv.next1012
  %453 = load double, ptr %452, align 8, !tbaa !16
  %454 = getelementptr inbounds double, ptr %451, i64 %indvars.iv1027
  %455 = load double, ptr %454, align 8, !tbaa !16
  %456 = tail call double @llvm.fmuladd.f64(double %449, double %453, double %455)
  store double %456, ptr %454, align 8, !tbaa !16
  %indvars.iv.next1025 = add nuw nsw i64 %indvars.iv1024, 1
  %457 = trunc nuw i64 %indvars.iv.next1025 to i32
  %458 = icmp sgt i32 %13, %457
  br i1 %458, label %.lr.ph836, label %._crit_edge837, !llvm.loop !59

._crit_edge837:                                   ; preds = %.lr.ph836, %._crit_edge832
  %indvars.iv.next1028 = add nuw nsw i64 %indvars.iv1027, 1
  %459 = trunc nuw i64 %indvars.iv.next1028 to i32
  %460 = icmp sgt i32 %15, %459
  br i1 %460, label %.preheader712, label %.preheader713, !llvm.loop !60

.lr.ph840:                                        ; preds = %.preheader713, %.lr.ph840
  %indvars.iv1030 = phi i64 [ %indvars.iv.next1031, %.lr.ph840 ], [ %indvars.iv1016, %.preheader713 ]
  %461 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv1030
  %462 = load ptr, ptr %461, align 8, !tbaa !15
  %463 = getelementptr inbounds double, ptr %462, i64 %indvars.iv.next1012
  %464 = load double, ptr %463, align 8, !tbaa !16
  %465 = fmul double %437, %464
  store double %465, ptr %463, align 8, !tbaa !16
  %indvars.iv.next1031 = add nuw nsw i64 %indvars.iv1030, 1
  %466 = trunc nuw i64 %indvars.iv.next1031 to i32
  %467 = icmp sgt i32 %13, %466
  br i1 %467, label %.lr.ph840, label %.loopexit714, !llvm.loop !61

.lr.ph828:                                        ; preds = %.preheader715, %.lr.ph828
  %indvars.iv1018 = phi i64 [ %indvars.iv.next1019, %.lr.ph828 ], [ %indvars.iv1016, %.preheader715 ]
  %468 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv1018
  %469 = load ptr, ptr %468, align 8, !tbaa !15
  %470 = getelementptr inbounds double, ptr %469, i64 %indvars.iv.next1012
  store double 0.000000e+00, ptr %470, align 8, !tbaa !16
  %indvars.iv.next1019 = add nuw nsw i64 %indvars.iv1018, 1
  %471 = trunc nuw i64 %indvars.iv.next1019 to i32
  %472 = icmp sgt i32 %13, %471
  br i1 %472, label %.lr.ph828, label %.loopexit714, !llvm.loop !62

.loopexit714:                                     ; preds = %.lr.ph828, %.lr.ph840, %.preheader715, %.preheader713
  %473 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next1012
  %474 = load ptr, ptr %473, align 8, !tbaa !15
  %475 = getelementptr inbounds double, ptr %474, i64 %indvars.iv.next1012
  %476 = load double, ptr %475, align 8, !tbaa !16
  %477 = fadd double %476, 1.000000e+00
  store double %477, ptr %475, align 8, !tbaa !16
  %indvar.next = add nuw nsw i64 %indvar, 1
  %indvars.iv.next1017 = add nsw i64 %indvars.iv1016, -1
  %exitcond1035.not = icmp eq i64 %indvar.next, %406
  br i1 %exitcond1035.not, label %.preheader711, label %.lr.ph845, !llvm.loop !63

.preheader709:                                    ; preds = %.preheader709.lr.ph, %.loopexit708
  %indvars.iv1073 = phi i64 [ %413, %.preheader709.lr.ph ], [ %indvars.iv.next1074, %.loopexit708 ]
  %indvars.iv1036 = phi i64 [ %412, %.preheader709.lr.ph ], [ %indvars.iv.next1037, %.loopexit708 ]
  %478 = getelementptr inbounds double, ptr %3, i64 %indvars.iv1073
  %indvars.iv.next1074 = add nsw i64 %indvars.iv1073, -1
  %479 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next1074
  %480 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1074
  %481 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1073
  br label %.preheader

.preheader:                                       ; preds = %._crit_edge880, %.preheader709
  %.0611883 = phi i32 [ 1, %.preheader709 ], [ %759, %._crit_edge880 ]
  br label %484

482:                                              ; preds = %493
  %483 = icmp sgt i32 %486, 0
  br i1 %483, label %484, label %._crit_edge848.split.loop.exit, !llvm.loop !64

484:                                              ; preds = %.preheader, %482
  %indvars.iv1038 = phi i64 [ %indvars.iv1036, %.preheader ], [ %indvars.iv.next1039, %482 ]
  %indvars.iv.next1039 = add nsw i64 %indvars.iv1038, -1
  %485 = icmp eq i64 %indvars.iv1038, 0
  %486 = trunc nuw i64 %indvars.iv1038 to i32
  br i1 %485, label %.thread696, label %487

487:                                              ; preds = %484
  %488 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1038
  %489 = load double, ptr %488, align 8, !tbaa !16
  %490 = tail call double @llvm.fabs.f64(double %489)
  %491 = fadd double %.0643.lcssa1081, %490
  %492 = fcmp oeq double %491, %.0643.lcssa1081
  br i1 %492, label %.thread696, label %493

493:                                              ; preds = %487
  %494 = and i64 %indvars.iv.next1039, 4294967295
  %495 = getelementptr inbounds double, ptr %3, i64 %494
  %496 = load double, ptr %495, align 8, !tbaa !16
  %497 = tail call double @llvm.fabs.f64(double %496)
  %498 = fadd double %.0643.lcssa1081, %497
  %499 = fcmp oeq double %498, %.0643.lcssa1081
  br i1 %499, label %._crit_edge848, label %482, !llvm.loop !64

._crit_edge848.split.loop.exit:                   ; preds = %482
  %indvars.le = trunc i64 %indvars.iv.next1039 to i32
  br label %._crit_edge848

._crit_edge848:                                   ; preds = %493, %._crit_edge848.split.loop.exit
  %.2614.lcssa = phi i32 [ %indvars.le, %._crit_edge848.split.loop.exit ], [ %486, %493 ]
  %500 = sext i32 %.2614.lcssa to i64
  %.not858 = icmp slt i64 %indvars.iv1073, %500
  br i1 %.not858, label %.thread696, label %.lr.ph863

.lr.ph863:                                        ; preds = %._crit_edge848
  %sext = shl i64 %indvars.iv.next1039, 32
  %501 = ashr exact i64 %sext, 29
  br label %502

502:                                              ; preds = %.lr.ph863, %._crit_edge857
  %indvars.iv1047 = phi i64 [ %500, %.lr.ph863 ], [ %indvars.iv.next1048, %._crit_edge857 ]
  %.0596861 = phi double [ 0.000000e+00, %.lr.ph863 ], [ %528, %._crit_edge857 ]
  %.6860 = phi double [ 1.000000e+00, %.lr.ph863 ], [ %530, %._crit_edge857 ]
  %503 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1047
  %504 = load double, ptr %503, align 8, !tbaa !16
  %505 = fmul double %.6860, %504
  %506 = fmul double %.0596861, %504
  store double %506, ptr %503, align 8, !tbaa !16
  %507 = tail call double @llvm.fabs.f64(double %505)
  %508 = fadd double %.0643.lcssa1081, %507
  %509 = fcmp oeq double %508, %.0643.lcssa1081
  br i1 %509, label %.thread696, label %510

510:                                              ; preds = %502
  %511 = getelementptr inbounds double, ptr %3, i64 %indvars.iv1047
  %512 = load double, ptr %511, align 8, !tbaa !16
  %513 = tail call double @llvm.fabs.f64(double %512)
  %514 = fcmp ogt double %507, %513
  br i1 %514, label %515, label %519

515:                                              ; preds = %510
  %516 = fdiv double %513, %507
  %square676 = fmul double %516, %516
  %517 = fadd double %square676, 1.000000e+00
  %sqrt = tail call double @llvm.sqrt.f64(double %517)
  %518 = fmul double %507, %sqrt
  br label %525

519:                                              ; preds = %510
  %520 = fcmp oeq double %512, 0.000000e+00
  br i1 %520, label %525, label %521

521:                                              ; preds = %519
  %522 = fdiv double %507, %513
  %square = fmul double %522, %522
  %523 = fadd double %square, 1.000000e+00
  %sqrt700 = tail call double @llvm.sqrt.f64(double %523)
  %524 = fmul double %513, %sqrt700
  br label %525

525:                                              ; preds = %521, %519, %515
  %526 = phi double [ %518, %515 ], [ %524, %521 ], [ 0.000000e+00, %519 ]
  store double %526, ptr %511, align 8, !tbaa !16
  %527 = fdiv double 1.000000e+00, %526
  %528 = fmul double %512, %527
  %529 = fneg double %505
  %530 = fmul double %527, %529
  br i1 %32, label %.lr.ph856, label %._crit_edge857

.lr.ph856:                                        ; preds = %525, %.lr.ph856
  %indvars.iv1041 = phi i64 [ %indvars.iv.next1042, %.lr.ph856 ], [ 0, %525 ]
  %531 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv1041
  %532 = load ptr, ptr %531, align 8, !tbaa !15
  %533 = getelementptr inbounds i8, ptr %532, i64 %501
  %534 = load double, ptr %533, align 8, !tbaa !16
  %535 = getelementptr inbounds double, ptr %532, i64 %indvars.iv1047
  %536 = load double, ptr %535, align 8, !tbaa !16
  %537 = fmul double %530, %536
  %538 = tail call double @llvm.fmuladd.f64(double %534, double %528, double %537)
  store double %538, ptr %533, align 8, !tbaa !16
  %539 = fneg double %534
  %540 = fmul double %530, %539
  %541 = tail call double @llvm.fmuladd.f64(double %536, double %528, double %540)
  store double %541, ptr %535, align 8, !tbaa !16
  %indvars.iv.next1042 = add nuw nsw i64 %indvars.iv1041, 1
  %exitcond1046.not = icmp eq i64 %indvars.iv.next1042, %wide.trip.count1045
  br i1 %exitcond1046.not, label %._crit_edge857, label %.lr.ph856, !llvm.loop !65

._crit_edge857:                                   ; preds = %.lr.ph856, %525
  %indvars.iv.next1048 = add nsw i64 %indvars.iv1047, 1
  %.not.not = icmp slt i64 %indvars.iv1047, %indvars.iv1073
  br i1 %.not.not, label %502, label %.thread696, !llvm.loop !66

.thread696:                                       ; preds = %484, %487, %502, %._crit_edge857, %._crit_edge848
  %.2614739 = phi i32 [ %.2614.lcssa, %._crit_edge848 ], [ %.2614.lcssa, %._crit_edge857 ], [ %.2614.lcssa, %502 ], [ 0, %484 ], [ %486, %487 ]
  %542 = load double, ptr %478, align 8, !tbaa !16
  %543 = zext i32 %.2614739 to i64
  %544 = icmp eq i64 %indvars.iv1073, %543
  br i1 %544, label %545, label %568

545:                                              ; preds = %.thread696
  %546 = fcmp olt double %542, 0.000000e+00
  br i1 %546, label %.lr.ph887.preheader, label %.loopexit708

.lr.ph887.preheader:                              ; preds = %545
  %547 = fneg double %542
  store double %547, ptr %478, align 8, !tbaa !16
  br i1 %416, label %.loopexit708.loopexit.unr-lcssa, label %.lr.ph887

.lr.ph887:                                        ; preds = %.lr.ph887.preheader, %.lr.ph887
  %indvars.iv1067 = phi i64 [ %indvars.iv.next1068.3, %.lr.ph887 ], [ 0, %.lr.ph887.preheader ]
  %niter1241 = phi i64 [ %niter1241.next.3, %.lr.ph887 ], [ 0, %.lr.ph887.preheader ]
  %548 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv1067
  %549 = load ptr, ptr %548, align 8, !tbaa !15
  %550 = getelementptr inbounds double, ptr %549, i64 %indvars.iv1073
  %551 = load double, ptr %550, align 8, !tbaa !16
  %552 = fneg double %551
  store double %552, ptr %550, align 8, !tbaa !16
  %indvars.iv.next1068 = or disjoint i64 %indvars.iv1067, 1
  %553 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next1068
  %554 = load ptr, ptr %553, align 8, !tbaa !15
  %555 = getelementptr inbounds double, ptr %554, i64 %indvars.iv1073
  %556 = load double, ptr %555, align 8, !tbaa !16
  %557 = fneg double %556
  store double %557, ptr %555, align 8, !tbaa !16
  %indvars.iv.next1068.1 = or disjoint i64 %indvars.iv1067, 2
  %558 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next1068.1
  %559 = load ptr, ptr %558, align 8, !tbaa !15
  %560 = getelementptr inbounds double, ptr %559, i64 %indvars.iv1073
  %561 = load double, ptr %560, align 8, !tbaa !16
  %562 = fneg double %561
  store double %562, ptr %560, align 8, !tbaa !16
  %indvars.iv.next1068.2 = or disjoint i64 %indvars.iv1067, 3
  %563 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next1068.2
  %564 = load ptr, ptr %563, align 8, !tbaa !15
  %565 = getelementptr inbounds double, ptr %564, i64 %indvars.iv1073
  %566 = load double, ptr %565, align 8, !tbaa !16
  %567 = fneg double %566
  store double %567, ptr %565, align 8, !tbaa !16
  %indvars.iv.next1068.3 = add nuw nsw i64 %indvars.iv1067, 4
  %niter1241.next.3 = add i64 %niter1241, 4
  %niter1241.ncmp.3 = icmp eq i64 %niter1241.next.3, %unroll_iter1240
  br i1 %niter1241.ncmp.3, label %.loopexit708.loopexit.unr-lcssa, label %.lr.ph887, !llvm.loop !67

568:                                              ; preds = %.thread696
  %569 = icmp eq i32 %.0611883, 30
  br i1 %569, label %570, label %579

570:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #11
  call void @_ZN7SGTELIB4itosB5cxx11Ei(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, i32 noundef 30)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull @.str.101, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %571 unwind label %574

571:                                              ; preds = %570
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.102)
          to label %572 unwind label %576

572:                                              ; preds = %571
  %573 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %9) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #11
  call void @_ZdaPv(ptr noundef nonnull %29) #13
  br label %766

574:                                              ; preds = %570
  %575 = landingpad { ptr, i32 }
          cleanup
  br label %578

576:                                              ; preds = %571
  %577 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #11
  br label %578

578:                                              ; preds = %576, %574
  %.pn = phi { ptr, i32 } [ %577, %576 ], [ %575, %574 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #11
  br label %767

579:                                              ; preds = %568
  %580 = sext i32 %.2614739 to i64
  %581 = getelementptr inbounds double, ptr %3, i64 %580
  %582 = load double, ptr %581, align 8, !tbaa !16
  %583 = load double, ptr %479, align 8, !tbaa !16
  %584 = load double, ptr %480, align 8, !tbaa !16
  %585 = load double, ptr %481, align 8, !tbaa !16
  %586 = fsub double %583, %542
  %587 = fadd double %542, %583
  %588 = fsub double %584, %585
  %589 = fadd double %584, %585
  %590 = fmul double %588, %589
  %591 = tail call double @llvm.fmuladd.f64(double %586, double %587, double %590)
  %592 = fmul double %585, 2.000000e+00
  %593 = fmul double %583, %592
  %594 = fdiv double %591, %593
  %595 = tail call double @llvm.fabs.f64(double %594)
  %596 = fcmp ogt double %595, 1.000000e+00
  br i1 %596, label %597, label %601

597:                                              ; preds = %579
  %598 = fdiv double 1.000000e+00, %595
  %square678 = fmul double %598, %598
  %599 = fadd double %square678, 1.000000e+00
  %sqrt701 = tail call double @llvm.sqrt.f64(double %599)
  %600 = fmul double %595, %sqrt701
  br label %603

601:                                              ; preds = %579
  %square677 = fmul double %594, %594
  %602 = fadd double %square677, 1.000000e+00
  %sqrt702 = tail call double @llvm.sqrt.f64(double %602)
  br label %603

603:                                              ; preds = %601, %597
  %604 = phi double [ %600, %597 ], [ %sqrt702, %601 ]
  %605 = fsub double %582, %542
  %606 = fadd double %542, %582
  %607 = fcmp ult double %594, 0.000000e+00
  %608 = tail call double @llvm.fabs.f64(double %604)
  %609 = fneg double %608
  %610 = select i1 %607, double %609, double %608
  %611 = fadd double %594, %610
  %612 = fdiv double %583, %611
  %613 = fsub double %612, %585
  %614 = fmul double %585, %613
  %615 = tail call double @llvm.fmuladd.f64(double %605, double %606, double %614)
  %616 = fdiv double %615, %582
  %.not679.not872 = icmp sgt i64 %indvars.iv1073, %580
  br i1 %.not679.not872, label %.lr.ph879, label %._crit_edge880

.loopexit.loopexit.unr-lcssa:                     ; preds = %.lr.ph871, %.lr.ph871.preheader
  %indvars.iv1057.unr = phi i64 [ 0, %.lr.ph871.preheader ], [ %indvars.iv.next1058.1, %.lr.ph871 ]
  br i1 %lcmp.mod1235.not, label %.loopexit, label %.lr.ph871.epil

.lr.ph871.epil:                                   ; preds = %.loopexit.loopexit.unr-lcssa
  %617 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv1057.unr
  %618 = load ptr, ptr %617, align 8, !tbaa !15
  %619 = getelementptr inbounds double, ptr %618, i64 %indvars.iv1063
  %620 = load <2 x double>, ptr %619, align 8, !tbaa !16
  %621 = extractelement <2 x double> %620, i64 0
  %622 = fneg double %621
  %623 = shufflevector <2 x double> %726, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %624 = shufflevector <2 x double> %620, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %625 = insertelement <2 x double> %624, double %622, i64 1
  %626 = fmul <2 x double> %623, %625
  %627 = shufflevector <2 x double> %726, <2 x double> poison, <2 x i32> zeroinitializer
  %628 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %620, <2 x double> %627, <2 x double> %626)
  store <2 x double> %628, ptr %619, align 8, !tbaa !16
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph871.epil, %.loopexit.loopexit.unr-lcssa, %714
  %.not679.not = icmp slt i64 %indvars.iv.next1064, %indvars.iv1073
  br i1 %.not679.not, label %.lr.ph879, label %._crit_edge880, !llvm.loop !68

.lr.ph879:                                        ; preds = %603, %.loopexit
  %indvars.iv1063 = phi i64 [ %indvars.iv.next1064, %.loopexit ], [ %580, %603 ]
  %.0595877 = phi double [ %733, %.loopexit ], [ %582, %603 ]
  %.0600875 = phi double [ %730, %.loopexit ], [ %616, %603 ]
  %629 = phi <2 x double> [ %726, %.loopexit ], [ <double 1.000000e+00, double 1.000000e+00>, %603 ]
  %indvars.iv.next1064 = add nsw i64 %indvars.iv1063, 1
  %630 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next1064
  %631 = load double, ptr %630, align 8, !tbaa !16
  %632 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next1064
  %633 = load double, ptr %632, align 8, !tbaa !16
  %634 = extractelement <2 x double> %629, i64 1
  %635 = fmul double %634, %631
  %636 = extractelement <2 x double> %629, i64 0
  %637 = fmul double %636, %631
  %638 = tail call double @llvm.fabs.f64(double %.0600875)
  %639 = tail call double @llvm.fabs.f64(double %635)
  %640 = fcmp ogt double %638, %639
  br i1 %640, label %641, label %645

641:                                              ; preds = %.lr.ph879
  %642 = fdiv double %639, %638
  %square681 = fmul double %642, %642
  %643 = fadd double %square681, 1.000000e+00
  %sqrt703 = tail call double @llvm.sqrt.f64(double %643)
  %644 = fmul double %638, %sqrt703
  br label %.lr.ph867.preheader

645:                                              ; preds = %.lr.ph879
  %646 = fcmp oeq double %635, 0.000000e+00
  br i1 %646, label %.lr.ph867.preheader, label %647

647:                                              ; preds = %645
  %648 = fdiv double %638, %639
  %square680 = fmul double %648, %648
  %649 = fadd double %square680, 1.000000e+00
  %sqrt704 = tail call double @llvm.sqrt.f64(double %649)
  %650 = fmul double %639, %sqrt704
  br label %.lr.ph867.preheader

.lr.ph867.preheader:                              ; preds = %641, %645, %647
  %651 = phi double [ %644, %641 ], [ %650, %647 ], [ 0.000000e+00, %645 ]
  %652 = getelementptr inbounds double, ptr %29, i64 %indvars.iv1063
  store double %651, ptr %652, align 8, !tbaa !16
  %653 = insertelement <2 x double> poison, double %.0600875, i64 0
  %654 = insertelement <2 x double> %653, double %635, i64 1
  %655 = insertelement <2 x double> poison, double %651, i64 0
  %656 = shufflevector <2 x double> %655, <2 x double> poison, <2 x i32> zeroinitializer
  %657 = fdiv <2 x double> %654, %656
  %658 = extractelement <2 x double> %657, i64 1
  %659 = fmul double %637, %658
  %660 = extractelement <2 x double> %657, i64 0
  %661 = tail call double @llvm.fmuladd.f64(double %.0595877, double %660, double %659)
  %662 = fneg double %.0595877
  %663 = fmul double %658, %662
  %664 = tail call double @llvm.fmuladd.f64(double %637, double %660, double %663)
  %665 = fmul double %633, %658
  %666 = fmul double %633, %660
  %667 = shufflevector <2 x double> %657, <2 x double> poison, <2 x i32> zeroinitializer
  br i1 %414, label %._crit_edge868.unr-lcssa, label %.lr.ph867.preheader.new

.lr.ph867.preheader.new:                          ; preds = %.lr.ph867.preheader
  %668 = shufflevector <2 x double> %657, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %669 = shufflevector <2 x double> %657, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  br label %.lr.ph867

.lr.ph867:                                        ; preds = %.lr.ph867, %.lr.ph867.preheader.new
  %indvars.iv1051 = phi i64 [ 0, %.lr.ph867.preheader.new ], [ %indvars.iv.next1052.1, %.lr.ph867 ]
  %niter = phi i64 [ 0, %.lr.ph867.preheader.new ], [ %niter.next.1, %.lr.ph867 ]
  %670 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv1051
  %671 = load ptr, ptr %670, align 8, !tbaa !15
  %672 = getelementptr inbounds double, ptr %671, i64 %indvars.iv1063
  %673 = load <2 x double>, ptr %672, align 8, !tbaa !16
  %674 = extractelement <2 x double> %673, i64 0
  %675 = fneg double %674
  %676 = shufflevector <2 x double> %673, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %677 = insertelement <2 x double> %676, double %675, i64 1
  %678 = fmul <2 x double> %668, %677
  %679 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %673, <2 x double> %667, <2 x double> %678)
  store <2 x double> %679, ptr %672, align 8, !tbaa !16
  %indvars.iv.next1052 = or disjoint i64 %indvars.iv1051, 1
  %680 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv.next1052
  %681 = load ptr, ptr %680, align 8, !tbaa !15
  %682 = getelementptr inbounds double, ptr %681, i64 %indvars.iv1063
  %683 = load <2 x double>, ptr %682, align 8, !tbaa !16
  %684 = extractelement <2 x double> %683, i64 0
  %685 = fneg double %684
  %686 = shufflevector <2 x double> %683, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %687 = insertelement <2 x double> %686, double %685, i64 1
  %688 = fmul <2 x double> %669, %687
  %689 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %683, <2 x double> %667, <2 x double> %688)
  store <2 x double> %689, ptr %682, align 8, !tbaa !16
  %indvars.iv.next1052.1 = add nuw nsw i64 %indvars.iv1051, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge868.unr-lcssa, label %.lr.ph867, !llvm.loop !69

._crit_edge868.unr-lcssa:                         ; preds = %.lr.ph867, %.lr.ph867.preheader
  %indvars.iv1051.unr = phi i64 [ 0, %.lr.ph867.preheader ], [ %indvars.iv.next1052.1, %.lr.ph867 ]
  br i1 %lcmp.mod1233.not, label %._crit_edge868, label %.lr.ph867.epil

.lr.ph867.epil:                                   ; preds = %._crit_edge868.unr-lcssa
  %690 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv1051.unr
  %691 = load ptr, ptr %690, align 8, !tbaa !15
  %692 = getelementptr inbounds double, ptr %691, i64 %indvars.iv1063
  %693 = load <2 x double>, ptr %692, align 8, !tbaa !16
  %694 = extractelement <2 x double> %693, i64 0
  %695 = fneg double %694
  %696 = shufflevector <2 x double> %657, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %697 = shufflevector <2 x double> %693, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %698 = insertelement <2 x double> %697, double %695, i64 1
  %699 = fmul <2 x double> %696, %698
  %700 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %693, <2 x double> %667, <2 x double> %699)
  store <2 x double> %700, ptr %692, align 8, !tbaa !16
  br label %._crit_edge868

._crit_edge868:                                   ; preds = %._crit_edge868.unr-lcssa, %.lr.ph867.epil
  %701 = tail call double @llvm.fabs.f64(double %661)
  %702 = tail call double @llvm.fabs.f64(double %665)
  %703 = fcmp ogt double %701, %702
  br i1 %703, label %704, label %708

704:                                              ; preds = %._crit_edge868
  %705 = fdiv double %702, %701
  %square683 = fmul double %705, %705
  %706 = fadd double %square683, 1.000000e+00
  %sqrt705 = tail call double @llvm.sqrt.f64(double %706)
  %707 = fmul double %701, %sqrt705
  br label %714

708:                                              ; preds = %._crit_edge868
  %709 = fcmp oeq double %665, 0.000000e+00
  br i1 %709, label %714, label %710

710:                                              ; preds = %708
  %711 = fdiv double %701, %702
  %square682 = fmul double %711, %711
  %712 = fadd double %square682, 1.000000e+00
  %sqrt706 = tail call double @llvm.sqrt.f64(double %712)
  %713 = fmul double %702, %sqrt706
  br label %714

714:                                              ; preds = %710, %708, %704
  %715 = phi double [ %707, %704 ], [ %713, %710 ], [ 0.000000e+00, %708 ]
  %716 = getelementptr inbounds double, ptr %3, i64 %indvars.iv1063
  store double %715, ptr %716, align 8, !tbaa !16
  %717 = fcmp une double %715, 0.000000e+00
  %718 = fdiv double 1.000000e+00, %715
  %719 = insertelement <2 x double> poison, double %661, i64 0
  %720 = insertelement <2 x double> %719, double %665, i64 1
  %721 = insertelement <2 x double> poison, double %718, i64 0
  %722 = shufflevector <2 x double> %721, <2 x double> poison, <2 x i32> zeroinitializer
  %723 = fmul <2 x double> %720, %722
  %724 = insertelement <2 x i1> poison, i1 %717, i64 0
  %725 = shufflevector <2 x i1> %724, <2 x i1> poison, <2 x i32> zeroinitializer
  %726 = select <2 x i1> %725, <2 x double> %723, <2 x double> %657
  %727 = extractelement <2 x double> %726, i64 1
  %728 = fmul double %666, %727
  %729 = extractelement <2 x double> %726, i64 0
  %730 = tail call double @llvm.fmuladd.f64(double %729, double %664, double %728)
  %731 = fneg double %727
  %732 = fmul double %664, %731
  %733 = tail call double @llvm.fmuladd.f64(double %729, double %666, double %732)
  br i1 %32, label %.lr.ph871.preheader, label %.loopexit

.lr.ph871.preheader:                              ; preds = %714
  br i1 %415, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph871.preheader.new

.lr.ph871.preheader.new:                          ; preds = %.lr.ph871.preheader
  %734 = shufflevector <2 x double> %726, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %735 = shufflevector <2 x double> %726, <2 x double> poison, <2 x i32> zeroinitializer
  %736 = shufflevector <2 x double> %726, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %737 = shufflevector <2 x double> %726, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.lr.ph871

.lr.ph871:                                        ; preds = %.lr.ph871, %.lr.ph871.preheader.new
  %indvars.iv1057 = phi i64 [ 0, %.lr.ph871.preheader.new ], [ %indvars.iv.next1058.1, %.lr.ph871 ]
  %niter1237 = phi i64 [ 0, %.lr.ph871.preheader.new ], [ %niter1237.next.1, %.lr.ph871 ]
  %738 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv1057
  %739 = load ptr, ptr %738, align 8, !tbaa !15
  %740 = getelementptr inbounds double, ptr %739, i64 %indvars.iv1063
  %741 = load <2 x double>, ptr %740, align 8, !tbaa !16
  %742 = extractelement <2 x double> %741, i64 0
  %743 = fneg double %742
  %744 = shufflevector <2 x double> %741, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %745 = insertelement <2 x double> %744, double %743, i64 1
  %746 = fmul <2 x double> %734, %745
  %747 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %741, <2 x double> %735, <2 x double> %746)
  store <2 x double> %747, ptr %740, align 8, !tbaa !16
  %indvars.iv.next1058 = or disjoint i64 %indvars.iv1057, 1
  %748 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next1058
  %749 = load ptr, ptr %748, align 8, !tbaa !15
  %750 = getelementptr inbounds double, ptr %749, i64 %indvars.iv1063
  %751 = load <2 x double>, ptr %750, align 8, !tbaa !16
  %752 = extractelement <2 x double> %751, i64 0
  %753 = fneg double %752
  %754 = shufflevector <2 x double> %751, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %755 = insertelement <2 x double> %754, double %753, i64 1
  %756 = fmul <2 x double> %736, %755
  %757 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %751, <2 x double> %737, <2 x double> %756)
  store <2 x double> %757, ptr %750, align 8, !tbaa !16
  %indvars.iv.next1058.1 = add nuw nsw i64 %indvars.iv1057, 2
  %niter1237.next.1 = add i64 %niter1237, 2
  %niter1237.ncmp.1 = icmp eq i64 %niter1237.next.1, %unroll_iter1236
  br i1 %niter1237.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph871, !llvm.loop !70

._crit_edge880:                                   ; preds = %.loopexit, %603
  %.0600.lcssa = phi double [ %616, %603 ], [ %730, %.loopexit ]
  %.0595.lcssa = phi double [ %582, %603 ], [ %733, %.loopexit ]
  %758 = getelementptr inbounds double, ptr %29, i64 %580
  store double 0.000000e+00, ptr %758, align 8, !tbaa !16
  store double %.0600.lcssa, ptr %481, align 8, !tbaa !16
  store double %.0595.lcssa, ptr %478, align 8, !tbaa !16
  %759 = add nuw nsw i32 %.0611883, 1
  br label %.preheader

.loopexit708.loopexit.unr-lcssa:                  ; preds = %.lr.ph887, %.lr.ph887.preheader
  %indvars.iv1067.unr = phi i64 [ 0, %.lr.ph887.preheader ], [ %indvars.iv.next1068.3, %.lr.ph887 ]
  br i1 %lcmp.mod1239.not, label %.loopexit708, label %.lr.ph887.epil

.lr.ph887.epil:                                   ; preds = %.loopexit708.loopexit.unr-lcssa, %.lr.ph887.epil
  %indvars.iv1067.epil = phi i64 [ %indvars.iv.next1068.epil, %.lr.ph887.epil ], [ %indvars.iv1067.unr, %.loopexit708.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph887.epil ], [ 0, %.loopexit708.loopexit.unr-lcssa ]
  %760 = getelementptr inbounds ptr, ptr %4, i64 %indvars.iv1067.epil
  %761 = load ptr, ptr %760, align 8, !tbaa !15
  %762 = getelementptr inbounds double, ptr %761, i64 %indvars.iv1073
  %763 = load double, ptr %762, align 8, !tbaa !16
  %764 = fneg double %763
  store double %764, ptr %762, align 8, !tbaa !16
  %indvars.iv.next1068.epil = add nuw nsw i64 %indvars.iv1067.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter1238
  br i1 %epil.iter.cmp.not, label %.loopexit708, label %.lr.ph887.epil, !llvm.loop !71

.loopexit708:                                     ; preds = %.loopexit708.loopexit.unr-lcssa, %.lr.ph887.epil, %545
  %indvars.iv.next1037 = add nsw i64 %indvars.iv1036, -1
  %765 = icmp slt i64 %indvars.iv1073, 1
  br i1 %765, label %._crit_edge890, label %.preheader709, !llvm.loop !72

._crit_edge890:                                   ; preds = %.loopexit708, %.preheader711
  tail call void @_ZdaPv(ptr noundef nonnull %29) #13
  br label %766

766:                                              ; preds = %572, %._crit_edge890, %20
  %.1 = phi i1 [ false, %20 ], [ true, %._crit_edge890 ], [ false, %572 ]
  ret i1 %.1

767:                                              ; preds = %578, %22
  %.pn686 = phi { ptr, i32 } [ %23, %22 ], [ %.pn, %578 ]
  resume { ptr, i32 } %.pn686
}

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5clearEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

declare void @_ZN7SGTELIB4itosB5cxx11Ei(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) local_unnamed_addr #8

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #10

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nobuiltin allocsize(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 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 = { nobuiltin 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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { "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 #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #11 = { nounwind }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { builtin 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, !13, i64 40}
!6 = !{!"_ZTSN7SGTELIB6MatrixE", !7, i64 8, !13, i64 40, !13, i64 44, !9, i64 48}
!7 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !8, i64 0, !12, i64 8, !10, i64 16}
!8 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !9, i64 0}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"long", !10, i64 0}
!13 = !{!"int", !10, i64 0}
!14 = !{!6, !13, i64 44}
!15 = !{!9, !9, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"double", !10, i64 0}
!18 = distinct !{!18, !19, !20, !21}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!"llvm.loop.isvectorized", i32 1}
!21 = !{!"llvm.loop.unroll.runtime.disable"}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.unroll.disable"}
!24 = distinct !{!24, !19, !20}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19}
!30 = distinct !{!30, !19}
!31 = distinct !{!31, !19}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !19, !20, !21}
!36 = distinct !{!36, !19, !20}
!37 = distinct !{!37, !19, !20, !21}
!38 = distinct !{!38, !23}
!39 = !{!40}
!40 = distinct !{!40, !41}
!41 = distinct !{!41, !"LVerDomain"}
!42 = !{!43}
!43 = distinct !{!43, !41}
!44 = distinct !{!44, !19, !20, !21}
!45 = distinct !{!45, !19}
!46 = distinct !{!46, !19, !20}
!47 = distinct !{!47, !19}
!48 = distinct !{!48, !19, !21, !20}
!49 = distinct !{!49, !19}
!50 = distinct !{!50, !23}
!51 = distinct !{!51, !19}
!52 = distinct !{!52, !19}
!53 = distinct !{!53, !19}
!54 = distinct !{!54, !19}
!55 = distinct !{!55, !23}
!56 = distinct !{!56, !19}
!57 = distinct !{!57, !19}
!58 = distinct !{!58, !19}
!59 = distinct !{!59, !19}
!60 = distinct !{!60, !19}
!61 = distinct !{!61, !19}
!62 = distinct !{!62, !19}
!63 = distinct !{!63, !19}
!64 = distinct !{!64, !19}
!65 = distinct !{!65, !19}
!66 = distinct !{!66, !19}
!67 = distinct !{!67, !19}
!68 = distinct !{!68, !19}
!69 = distinct !{!69, !19}
!70 = distinct !{!70, !19}
!71 = distinct !{!71, !23}
!72 = distinct !{!72, !19}


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