; LLVM IR from marcinlos/iga-ads :: src/ads/basis_data.ll (ZN3ads10basis_dataC2ERKS0_)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.ads::basis_data" = type { %"class.std::vector", %"class.std::vector.0", i32, i32, i32, i32, i32, i32, %"class.std::vector.5", %"struct.ads::bspline::basis", ptr, ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.ads::bspline::basis" = type { %"class.std::vector.5", i32, %"class.std::vector.5" }

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3ads7bspline5basisD2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ads10basis_dataC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(184) %0, ptr noundef nonnull align 8 dereferenceable(184) %1) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %12 = load ptr, ptr %3, align 8
  %13 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 0
  %14 = load ptr, ptr %4, align 8, !tbaa !5
  %15 = getelementptr inbounds %"struct.ads::basis_data", ptr %14, i32 0, i32 0
  call void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %15)
  %16 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 1
  %17 = load ptr, ptr %4, align 8, !tbaa !5
  %18 = getelementptr inbounds %"struct.ads::basis_data", ptr %17, i32 0, i32 1
  invoke void @_ZNSt6vectorISt4pairIiiESaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %19 unwind label %92

19:                                               ; preds = %2
  %20 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 2
  %21 = load ptr, ptr %4, align 8, !tbaa !5
  %22 = getelementptr inbounds %"struct.ads::basis_data", ptr %21, i32 0, i32 2
  %23 = load i32, ptr %22, align 8, !tbaa !9
  store i32 %23, ptr %20, align 8, !tbaa !9
  %24 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 3
  %25 = load ptr, ptr %4, align 8, !tbaa !5
  %26 = getelementptr inbounds %"struct.ads::basis_data", ptr %25, i32 0, i32 3
  %27 = load i32, ptr %26, align 4, !tbaa !25
  store i32 %27, ptr %24, align 4, !tbaa !25
  %28 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 4
  %29 = load ptr, ptr %4, align 8, !tbaa !5
  %30 = getelementptr inbounds %"struct.ads::basis_data", ptr %29, i32 0, i32 4
  %31 = load i32, ptr %30, align 8, !tbaa !26
  store i32 %31, ptr %28, align 8, !tbaa !26
  %32 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 5
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = getelementptr inbounds %"struct.ads::basis_data", ptr %33, i32 0, i32 5
  %35 = load i32, ptr %34, align 4, !tbaa !27
  store i32 %35, ptr %32, align 4, !tbaa !27
  %36 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 6
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %"struct.ads::basis_data", ptr %37, i32 0, i32 6
  %39 = load i32, ptr %38, align 8, !tbaa !28
  store i32 %39, ptr %36, align 8, !tbaa !28
  %40 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 7
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = getelementptr inbounds %"struct.ads::basis_data", ptr %41, i32 0, i32 7
  %43 = load i32, ptr %42, align 4, !tbaa !29
  store i32 %43, ptr %40, align 4, !tbaa !29
  %44 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 8
  %45 = load ptr, ptr %4, align 8, !tbaa !5
  %46 = getelementptr inbounds %"struct.ads::basis_data", ptr %45, i32 0, i32 8
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %46)
          to label %47 unwind label %96

47:                                               ; preds = %19
  %48 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 9
  %49 = load ptr, ptr %4, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.ads::basis_data", ptr %49, i32 0, i32 9
  invoke void @_ZN3ads7bspline5basisC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(56) %48, ptr noundef nonnull align 8 dereferenceable(56) %50)
          to label %51 unwind label %100

51:                                               ; preds = %47
  %52 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 10
  %53 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 3
  %54 = load i32, ptr %53, align 4, !tbaa !25
  %55 = sext i32 %54 to i64
  %56 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %55, i64 8)
  %57 = extractvalue { i64, i1 } %56, 1
  %58 = extractvalue { i64, i1 } %56, 0
  %59 = select i1 %57, i64 -1, i64 %58
  %60 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %59) #7
          to label %61 unwind label %104

61:                                               ; preds = %51
  store ptr %60, ptr %52, align 8, !tbaa !30
  %62 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 11
  %63 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 3
  %64 = load i32, ptr %63, align 4, !tbaa !25
  %65 = sext i32 %64 to i64
  %66 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %65, i64 8)
  %67 = extractvalue { i64, i1 } %66, 1
  %68 = extractvalue { i64, i1 } %66, 0
  %69 = select i1 %67, i64 -1, i64 %68
  %70 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %69) #7
          to label %71 unwind label %104

71:                                               ; preds = %61
  store ptr %70, ptr %62, align 8, !tbaa !31
  %72 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 12
  %73 = load ptr, ptr %4, align 8, !tbaa !5
  %74 = getelementptr inbounds %"struct.ads::basis_data", ptr %73, i32 0, i32 12
  %75 = load ptr, ptr %74, align 8, !tbaa !32
  store ptr %75, ptr %72, align 8, !tbaa !32
  %76 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 13
  %77 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 3
  %78 = load i32, ptr %77, align 4, !tbaa !25
  %79 = sext i32 %78 to i64
  %80 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %79, i64 8)
  %81 = extractvalue { i64, i1 } %80, 1
  %82 = extractvalue { i64, i1 } %80, 0
  %83 = select i1 %81, i64 -1, i64 %82
  %84 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %83) #7
          to label %85 unwind label %104

85:                                               ; preds = %71
  store ptr %84, ptr %76, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  store i32 0, ptr %7, align 4, !tbaa !34
  br label %86

86:                                               ; preds = %294, %85
  %87 = load i32, ptr %7, align 4, !tbaa !34
  %88 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 3
  %89 = load i32, ptr %88, align 4, !tbaa !25
  %90 = icmp slt i32 %87, %89
  br i1 %90, label %108, label %91

91:                                               ; preds = %86
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  br label %298

92:                                               ; preds = %2
  %93 = landingpad { ptr, i32 }
          cleanup
  %94 = extractvalue { ptr, i32 } %93, 0
  store ptr %94, ptr %5, align 8
  %95 = extractvalue { ptr, i32 } %93, 1
  store i32 %95, ptr %6, align 4
  br label %302

96:                                               ; preds = %19
  %97 = landingpad { ptr, i32 }
          cleanup
  %98 = extractvalue { ptr, i32 } %97, 0
  store ptr %98, ptr %5, align 8
  %99 = extractvalue { ptr, i32 } %97, 1
  store i32 %99, ptr %6, align 4
  br label %301

100:                                              ; preds = %47
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %5, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %6, align 4
  br label %300

104:                                              ; preds = %71, %61, %51
  %105 = landingpad { ptr, i32 }
          cleanup
  %106 = extractvalue { ptr, i32 } %105, 0
  store ptr %106, ptr %5, align 8
  %107 = extractvalue { ptr, i32 } %105, 1
  store i32 %107, ptr %6, align 4
  br label %299

108:                                              ; preds = %86
  %109 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 6
  %110 = load i32, ptr %109, align 8, !tbaa !28
  %111 = sext i32 %110 to i64
  %112 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %111, i64 8)
  %113 = extractvalue { i64, i1 } %112, 1
  %114 = extractvalue { i64, i1 } %112, 0
  %115 = select i1 %113, i64 -1, i64 %114
  %116 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %115) #7
          to label %117 unwind label %143

117:                                              ; preds = %108
  %118 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 11
  %119 = load ptr, ptr %118, align 8, !tbaa !31
  %120 = load i32, ptr %7, align 4, !tbaa !34
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds ptr, ptr %119, i64 %121
  store ptr %116, ptr %122, align 8, !tbaa !5
  %123 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 6
  %124 = load i32, ptr %123, align 8, !tbaa !28
  %125 = sext i32 %124 to i64
  %126 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %125, i64 8)
  %127 = extractvalue { i64, i1 } %126, 1
  %128 = extractvalue { i64, i1 } %126, 0
  %129 = select i1 %127, i64 -1, i64 %128
  %130 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %129) #7
          to label %131 unwind label %143

131:                                              ; preds = %117
  %132 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 10
  %133 = load ptr, ptr %132, align 8, !tbaa !30
  %134 = load i32, ptr %7, align 4, !tbaa !34
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds ptr, ptr %133, i64 %135
  store ptr %130, ptr %136, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  store i32 0, ptr %9, align 4, !tbaa !34
  br label %137

137:                                              ; preds = %277, %131
  %138 = load i32, ptr %9, align 4, !tbaa !34
  %139 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 6
  %140 = load i32, ptr %139, align 8, !tbaa !28
  %141 = icmp slt i32 %138, %140
  br i1 %141, label %147, label %142

142:                                              ; preds = %137
  store i32 5, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  br label %281

143:                                              ; preds = %117, %108
  %144 = landingpad { ptr, i32 }
          cleanup
  %145 = extractvalue { ptr, i32 } %144, 0
  store ptr %145, ptr %5, align 8
  %146 = extractvalue { ptr, i32 } %144, 1
  store i32 %146, ptr %6, align 4
  br label %297

147:                                              ; preds = %137
  %148 = load ptr, ptr %4, align 8, !tbaa !5
  %149 = getelementptr inbounds %"struct.ads::basis_data", ptr %148, i32 0, i32 11
  %150 = load ptr, ptr %149, align 8, !tbaa !31
  %151 = load i32, ptr %7, align 4, !tbaa !34
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds ptr, ptr %150, i64 %152
  %154 = load ptr, ptr %153, align 8, !tbaa !5
  %155 = load i32, ptr %9, align 4, !tbaa !34
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds double, ptr %154, i64 %156
  %158 = load double, ptr %157, align 8, !tbaa !35
  %159 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 11
  %160 = load ptr, ptr %159, align 8, !tbaa !31
  %161 = load i32, ptr %7, align 4, !tbaa !34
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds ptr, ptr %160, i64 %162
  %164 = load ptr, ptr %163, align 8, !tbaa !5
  %165 = load i32, ptr %9, align 4, !tbaa !34
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds double, ptr %164, i64 %166
  store double %158, ptr %167, align 8, !tbaa !35
  %168 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 5
  %169 = load i32, ptr %168, align 4, !tbaa !27
  %170 = add nsw i32 %169, 1
  %171 = sext i32 %170 to i64
  %172 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %171, i64 8)
  %173 = extractvalue { i64, i1 } %172, 1
  %174 = extractvalue { i64, i1 } %172, 0
  %175 = select i1 %173, i64 -1, i64 %174
  %176 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %175) #7
          to label %177 unwind label %193

177:                                              ; preds = %147
  %178 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 10
  %179 = load ptr, ptr %178, align 8, !tbaa !30
  %180 = load i32, ptr %7, align 4, !tbaa !34
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds ptr, ptr %179, i64 %181
  %183 = load ptr, ptr %182, align 8, !tbaa !5
  %184 = load i32, ptr %9, align 4, !tbaa !34
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds ptr, ptr %183, i64 %185
  store ptr %176, ptr %186, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  store i32 0, ptr %10, align 4, !tbaa !34
  br label %187

187:                                              ; preds = %273, %177
  %188 = load i32, ptr %10, align 4, !tbaa !34
  %189 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 5
  %190 = load i32, ptr %189, align 4, !tbaa !27
  %191 = icmp sle i32 %188, %190
  br i1 %191, label %197, label %192

192:                                              ; preds = %187
  store i32 8, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  br label %276

193:                                              ; preds = %147
  %194 = landingpad { ptr, i32 }
          cleanup
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %5, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %6, align 4
  br label %280

197:                                              ; preds = %187
  %198 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 2
  %199 = load i32, ptr %198, align 8, !tbaa !9
  %200 = add nsw i32 %199, 1
  %201 = sext i32 %200 to i64
  %202 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %201, i64 8)
  %203 = extractvalue { i64, i1 } %202, 1
  %204 = extractvalue { i64, i1 } %202, 0
  %205 = select i1 %203, i64 -1, i64 %204
  %206 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %205) #7
          to label %207 unwind label %228

207:                                              ; preds = %197
  %208 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 10
  %209 = load ptr, ptr %208, align 8, !tbaa !30
  %210 = load i32, ptr %7, align 4, !tbaa !34
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds ptr, ptr %209, i64 %211
  %213 = load ptr, ptr %212, align 8, !tbaa !5
  %214 = load i32, ptr %9, align 4, !tbaa !34
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds ptr, ptr %213, i64 %215
  %217 = load ptr, ptr %216, align 8, !tbaa !5
  %218 = load i32, ptr %10, align 4, !tbaa !34
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds ptr, ptr %217, i64 %219
  store ptr %206, ptr %220, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  store i32 0, ptr %11, align 4, !tbaa !34
  br label %221

221:                                              ; preds = %269, %207
  %222 = load i32, ptr %11, align 4, !tbaa !34
  %223 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 2
  %224 = load i32, ptr %223, align 8, !tbaa !9
  %225 = add nsw i32 %224, 1
  %226 = icmp slt i32 %222, %225
  br i1 %226, label %232, label %227

227:                                              ; preds = %221
  store i32 11, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  br label %272

228:                                              ; preds = %197
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %5, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  br label %280

232:                                              ; preds = %221
  %233 = load ptr, ptr %4, align 8, !tbaa !5
  %234 = getelementptr inbounds %"struct.ads::basis_data", ptr %233, i32 0, i32 10
  %235 = load ptr, ptr %234, align 8, !tbaa !30
  %236 = load i32, ptr %7, align 4, !tbaa !34
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds ptr, ptr %235, i64 %237
  %239 = load ptr, ptr %238, align 8, !tbaa !5
  %240 = load i32, ptr %9, align 4, !tbaa !34
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds ptr, ptr %239, i64 %241
  %243 = load ptr, ptr %242, align 8, !tbaa !5
  %244 = load i32, ptr %10, align 4, !tbaa !34
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds ptr, ptr %243, i64 %245
  %247 = load ptr, ptr %246, align 8, !tbaa !5
  %248 = load i32, ptr %11, align 4, !tbaa !34
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds double, ptr %247, i64 %249
  %251 = load double, ptr %250, align 8, !tbaa !35
  %252 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 10
  %253 = load ptr, ptr %252, align 8, !tbaa !30
  %254 = load i32, ptr %7, align 4, !tbaa !34
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds ptr, ptr %253, i64 %255
  %257 = load ptr, ptr %256, align 8, !tbaa !5
  %258 = load i32, ptr %9, align 4, !tbaa !34
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds ptr, ptr %257, i64 %259
  %261 = load ptr, ptr %260, align 8, !tbaa !5
  %262 = load i32, ptr %10, align 4, !tbaa !34
  %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 %11, align 4, !tbaa !34
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds double, ptr %265, i64 %267
  store double %251, ptr %268, align 8, !tbaa !35
  br label %269

269:                                              ; preds = %232
  %270 = load i32, ptr %11, align 4, !tbaa !34
  %271 = add nsw i32 %270, 1
  store i32 %271, ptr %11, align 4, !tbaa !34
  br label %221, !llvm.loop !37

272:                                              ; preds = %227
  br label %273

273:                                              ; preds = %272
  %274 = load i32, ptr %10, align 4, !tbaa !34
  %275 = add nsw i32 %274, 1
  store i32 %275, ptr %10, align 4, !tbaa !34
  br label %187, !llvm.loop !39

276:                                              ; preds = %192
  br label %277

277:                                              ; preds = %276
  %278 = load i32, ptr %9, align 4, !tbaa !34
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %9, align 4, !tbaa !34
  br label %137, !llvm.loop !40

280:                                              ; preds = %228, %193
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  br label %297

281:                                              ; preds = %142
  %282 = load ptr, ptr %4, align 8, !tbaa !5
  %283 = getelementptr inbounds %"struct.ads::basis_data", ptr %282, i32 0, i32 13
  %284 = load ptr, ptr %283, align 8, !tbaa !33
  %285 = load i32, ptr %7, align 4, !tbaa !34
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds double, ptr %284, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !35
  %289 = getelementptr inbounds %"struct.ads::basis_data", ptr %12, i32 0, i32 13
  %290 = load ptr, ptr %289, align 8, !tbaa !33
  %291 = load i32, ptr %7, align 4, !tbaa !34
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %290, i64 %292
  store double %288, ptr %293, align 8, !tbaa !35
  br label %294

294:                                              ; preds = %281
  %295 = load i32, ptr %7, align 4, !tbaa !34
  %296 = add nsw i32 %295, 1
  store i32 %296, ptr %7, align 4, !tbaa !34
  br label %86, !llvm.loop !41

297:                                              ; preds = %280, %143
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  br label %299

298:                                              ; preds = %91
  ret void

299:                                              ; preds = %297, %104
  call void @_ZN3ads7bspline5basisD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %48) #8
  br label %300

300:                                              ; preds = %299, %100
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #8
  br label %301

301:                                              ; preds = %300, %96
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #8
  br label %302

302:                                              ; preds = %301, %92
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  br label %303

303:                                              ; preds = %302
  %304 = load ptr, ptr %5, align 8
  %305 = load i32, ptr %6, align 4
  %306 = insertvalue { ptr, i32 } poison, ptr %304, 0
  %307 = insertvalue { ptr, i32 } %306, i32 %305, 1
  resume { ptr, i32 } %307
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorISt4pairIiiESaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { 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 #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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { builtin allocsize(0) }
attributes #8 = { 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, !19, i64 48}
!10 = !{!"_ZTSN3ads10basis_dataE", !11, i64 0, !15, i64 24, !19, i64 48, !19, i64 52, !19, i64 56, !19, i64 60, !19, i64 64, !19, i64 68, !20, i64 72, !24, i64 96, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176}
!11 = !{!"_ZTSSt6vectorIiSaIiEE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!15 = !{!"_ZTSSt6vectorISt4pairIiiESaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseISt4pairIiiESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseISt4pairIiiESaIS1_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseISt4pairIiiESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"int", !7, i64 0}
!20 = !{!"_ZTSSt6vectorIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSN3ads7bspline5basisE", !20, i64 0, !19, i64 24, !20, i64 32}
!25 = !{!10, !19, i64 52}
!26 = !{!10, !19, i64 56}
!27 = !{!10, !19, i64 60}
!28 = !{!10, !19, i64 64}
!29 = !{!10, !19, i64 68}
!30 = !{!10, !6, i64 152}
!31 = !{!10, !6, i64 160}
!32 = !{!10, !6, i64 168}
!33 = !{!10, !6, i64 176}
!34 = !{!19, !19, i64 0}
!35 = !{!36, !36, i64 0}
!36 = !{!"double", !7, i64 0}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = distinct !{!39, !38}
!40 = distinct !{!40, !38}
!41 = distinct !{!41, !38}


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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3ads7bspline5basisD2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ads10basis_dataC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(184) %0, ptr noundef nonnull align 8 dereferenceable(184) %1) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  tail call void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %1)
  %3 = getelementptr inbounds i8, ptr %0, i64 24
  %4 = getelementptr inbounds i8, ptr %1, i64 24
  invoke void @_ZNSt6vectorISt4pairIiiESaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %5 unwind label %190

5:                                                ; preds = %2
  %6 = getelementptr inbounds i8, ptr %0, i64 48
  %7 = getelementptr inbounds i8, ptr %1, i64 48
  %8 = getelementptr inbounds i8, ptr %0, i64 52
  %9 = getelementptr inbounds i8, ptr %0, i64 60
  %10 = load <4 x i32>, ptr %7, align 8, !tbaa !5
  store <4 x i32> %10, ptr %6, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %0, i64 64
  %12 = getelementptr inbounds i8, ptr %1, i64 64
  %13 = load <2 x i32>, ptr %12, align 8, !tbaa !5
  store <2 x i32> %13, ptr %11, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %0, i64 72
  %15 = getelementptr inbounds i8, ptr %1, i64 72
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %16 unwind label %192

16:                                               ; preds = %5
  %17 = getelementptr inbounds i8, ptr %0, i64 96
  %18 = getelementptr inbounds i8, ptr %1, i64 96
  invoke void @_ZN3ads7bspline5basisC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(56) %17, ptr noundef nonnull align 8 dereferenceable(56) %18)
          to label %19 unwind label %194

19:                                               ; preds = %16
  %20 = getelementptr inbounds i8, ptr %0, i64 152
  %21 = load i32, ptr %8, align 4, !tbaa !9
  %22 = sext i32 %21 to i64
  %23 = icmp slt i32 %21, 0
  %24 = shl nsw i64 %22, 3
  %25 = select i1 %23, i64 -1, i64 %24
  %26 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %25) #5
          to label %27 unwind label %196

27:                                               ; preds = %19
  store ptr %26, ptr %20, align 8, !tbaa !25
  %28 = getelementptr inbounds i8, ptr %0, i64 160
  %29 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %25) #5
          to label %30 unwind label %196

30:                                               ; preds = %27
  store ptr %29, ptr %28, align 8, !tbaa !26
  %31 = getelementptr inbounds i8, ptr %0, i64 168
  %32 = getelementptr inbounds i8, ptr %1, i64 168
  %33 = load ptr, ptr %32, align 8, !tbaa !27
  store ptr %33, ptr %31, align 8, !tbaa !27
  %34 = getelementptr inbounds i8, ptr %0, i64 176
  %35 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %25) #5
          to label %36 unwind label %196

36:                                               ; preds = %30
  store ptr %35, ptr %34, align 8, !tbaa !28
  %37 = icmp sgt i32 %21, 0
  br i1 %37, label %.lr.ph81, label %._crit_edge82

.lr.ph81:                                         ; preds = %36
  %38 = load i32, ptr %11, align 8, !tbaa !29
  %.fr100 = freeze i32 %38
  %39 = zext nneg i32 %.fr100 to i64
  %40 = icmp slt i32 %.fr100, 0
  %41 = shl nuw nsw i64 %39, 3
  %42 = select i1 %40, i64 -1, i64 %41
  %43 = icmp sgt i32 %.fr100, 0
  %44 = getelementptr inbounds i8, ptr %1, i64 160
  %45 = load i32, ptr %9, align 4
  %.fr99 = freeze i32 %45
  %46 = add i32 %.fr99, 1
  %47 = sext i32 %46 to i64
  %48 = icmp slt i32 %.fr99, -1
  %49 = shl nsw i64 %47, 3
  %50 = select i1 %48, i64 -1, i64 %49
  %51 = getelementptr inbounds i8, ptr %1, i64 152
  %52 = getelementptr inbounds i8, ptr %1, i64 176
  br i1 %43, label %.lr.ph81.split.us, label %.lr.ph81.split.preheader

.lr.ph81.split.preheader:                         ; preds = %.lr.ph81
  %wide.trip.count = zext nneg i32 %21 to i64
  br label %.lr.ph81.split

.lr.ph81.split.us:                                ; preds = %.lr.ph81
  %.not64 = icmp slt i32 %.fr99, 0
  %wide.trip.count143 = zext nneg i32 %21 to i64
  %wide.trip.count138 = zext nneg i32 %.fr100 to i64
  br i1 %.not64, label %.lr.ph81.split.us.split.us, label %.lr.ph81.split.us.split.preheader

.lr.ph81.split.us.split.preheader:                ; preds = %.lr.ph81.split.us
  %wide.trip.count113 = zext i32 %46 to i64
  %wide.trip.count128 = zext nneg i32 %.fr100 to i64
  %wide.trip.count123 = zext i32 %46 to i64
  br label %.lr.ph81.split.us.split

.lr.ph81.split.us.split.us:                       ; preds = %.lr.ph81.split.us, %._crit_edge72.split.us.us.us
  %indvars.iv140 = phi i64 [ %indvars.iv.next141, %._crit_edge72.split.us.us.us ], [ 0, %.lr.ph81.split.us ]
  %53 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %42) #5
          to label %54 unwind label %.split90.us.split.us

54:                                               ; preds = %.lr.ph81.split.us.split.us
  %55 = load ptr, ptr %28, align 8, !tbaa !26
  %56 = getelementptr inbounds ptr, ptr %55, i64 %indvars.iv140
  store ptr %53, ptr %56, align 8, !tbaa !30
  %57 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %42) #5
          to label %.lr.ph71.us.us unwind label %.split90.us.split.us

.lr.ph71.us.us:                                   ; preds = %54
  %58 = load ptr, ptr %20, align 8, !tbaa !25
  %59 = getelementptr inbounds ptr, ptr %58, i64 %indvars.iv140
  store ptr %57, ptr %59, align 8, !tbaa !30
  br label %60

60:                                               ; preds = %71, %.lr.ph71.us.us
  %indvars.iv135 = phi i64 [ %indvars.iv.next136, %71 ], [ 0, %.lr.ph71.us.us ]
  %61 = load ptr, ptr %44, align 8, !tbaa !26
  %62 = getelementptr inbounds ptr, ptr %61, i64 %indvars.iv140
  %63 = load ptr, ptr %62, align 8, !tbaa !30
  %64 = getelementptr inbounds double, ptr %63, i64 %indvars.iv135
  %65 = load double, ptr %64, align 8, !tbaa !31
  %66 = load ptr, ptr %28, align 8, !tbaa !26
  %67 = getelementptr inbounds ptr, ptr %66, i64 %indvars.iv140
  %68 = load ptr, ptr %67, align 8, !tbaa !30
  %69 = getelementptr inbounds double, ptr %68, i64 %indvars.iv135
  store double %65, ptr %69, align 8, !tbaa !31
  %70 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %50) #5
          to label %71 unwind label %.split74.us.split.us.split.us

71:                                               ; preds = %60
  %72 = load ptr, ptr %20, align 8, !tbaa !25
  %73 = getelementptr inbounds ptr, ptr %72, i64 %indvars.iv140
  %74 = load ptr, ptr %73, align 8, !tbaa !30
  %75 = getelementptr inbounds ptr, ptr %74, i64 %indvars.iv135
  store ptr %70, ptr %75, align 8, !tbaa !30
  %indvars.iv.next136 = add nuw nsw i64 %indvars.iv135, 1
  %exitcond139.not = icmp eq i64 %indvars.iv.next136, %wide.trip.count138
  br i1 %exitcond139.not, label %._crit_edge72.split.us.us.us, label %60, !llvm.loop !33

._crit_edge72.split.us.us.us:                     ; preds = %71
  %76 = load ptr, ptr %52, align 8, !tbaa !28
  %77 = getelementptr inbounds double, ptr %76, i64 %indvars.iv140
  %78 = load double, ptr %77, align 8, !tbaa !31
  %79 = load ptr, ptr %34, align 8, !tbaa !28
  %80 = getelementptr inbounds double, ptr %79, i64 %indvars.iv140
  store double %78, ptr %80, align 8, !tbaa !31
  %indvars.iv.next141 = add nuw nsw i64 %indvars.iv140, 1
  %exitcond144.not = icmp eq i64 %indvars.iv.next141, %wide.trip.count143
  br i1 %exitcond144.not, label %._crit_edge82, label %.lr.ph81.split.us.split.us, !llvm.loop !35

.split90.us.split.us:                             ; preds = %54, %.lr.ph81.split.us.split.us
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %.split90.us

.split74.us.split.us.split.us:                    ; preds = %60
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %.split90.us

.lr.ph81.split.us.split:                          ; preds = %.lr.ph81.split.us.split.preheader, %._crit_edge72.split.us88
  %indvars.iv130 = phi i64 [ 0, %.lr.ph81.split.us.split.preheader ], [ %indvars.iv.next131, %._crit_edge72.split.us88 ]
  %83 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %42) #5
          to label %84 unwind label %.split90.us.split

84:                                               ; preds = %.lr.ph81.split.us.split
  %85 = load ptr, ptr %28, align 8, !tbaa !26
  %86 = getelementptr inbounds ptr, ptr %85, i64 %indvars.iv130
  store ptr %83, ptr %86, align 8, !tbaa !30
  %87 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %42) #5
          to label %.lr.ph71.us unwind label %.split90.us.split

.lr.ph71.us:                                      ; preds = %84
  %88 = load ptr, ptr %20, align 8, !tbaa !25
  %89 = getelementptr inbounds ptr, ptr %88, i64 %indvars.iv130
  store ptr %87, ptr %89, align 8, !tbaa !30
  %90 = load i32, ptr %6, align 8
  %.fr = freeze i32 %90
  %91 = add i32 %.fr, 1
  %92 = sext i32 %91 to i64
  %93 = icmp slt i32 %.fr, -1
  %94 = shl nsw i64 %92, 3
  %95 = select i1 %93, i64 -1, i64 %94
  %.not6162.us = icmp slt i32 %.fr, 0
  br i1 %.not6162.us, label %.lr.ph71.split.split.us.us, label %.lr.ph71.split.split.us87.preheader

.lr.ph71.split.split.us87.preheader:              ; preds = %.lr.ph71.us
  %wide.trip.count108 = zext i32 %91 to i64
  %min.iters.check = icmp ult i32 %91, 4
  %n.vec = and i64 %wide.trip.count108, 4294967292
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count108
  %xtraiter = and i64 %wide.trip.count108, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.lr.ph71.split.split.us87

.lr.ph71.split.split.us87:                        ; preds = %.lr.ph71.split.split.us87.preheader, %._crit_edge68.split.us
  %indvars.iv115 = phi i64 [ 0, %.lr.ph71.split.split.us87.preheader ], [ %indvars.iv.next116, %._crit_edge68.split.us ]
  %96 = load ptr, ptr %44, align 8, !tbaa !26
  %97 = getelementptr inbounds ptr, ptr %96, i64 %indvars.iv130
  %98 = load ptr, ptr %97, align 8, !tbaa !30
  %99 = getelementptr inbounds double, ptr %98, i64 %indvars.iv115
  %100 = load double, ptr %99, align 8, !tbaa !31
  %101 = load ptr, ptr %28, align 8, !tbaa !26
  %102 = getelementptr inbounds ptr, ptr %101, i64 %indvars.iv130
  %103 = load ptr, ptr %102, align 8, !tbaa !30
  %104 = getelementptr inbounds double, ptr %103, i64 %indvars.iv115
  store double %100, ptr %104, align 8, !tbaa !31
  %105 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %50) #5
          to label %.lr.ph67.us84 unwind label %.split74.split.split.us

.lr.ph67.us84:                                    ; preds = %.lr.ph71.split.split.us87
  %106 = load ptr, ptr %20, align 8, !tbaa !25
  %107 = getelementptr inbounds ptr, ptr %106, i64 %indvars.iv130
  %108 = load ptr, ptr %107, align 8, !tbaa !30
  %109 = getelementptr inbounds ptr, ptr %108, i64 %indvars.iv115
  store ptr %105, ptr %109, align 8, !tbaa !30
  br label %110

110:                                              ; preds = %._crit_edge.us, %.lr.ph67.us84
  %indvars.iv110 = phi i64 [ %indvars.iv.next111, %._crit_edge.us ], [ 0, %.lr.ph67.us84 ]
  %111 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %95) #5
          to label %.lr.ph.us unwind label %.split.split.us

.lr.ph.us:                                        ; preds = %110
  %112 = load ptr, ptr %20, align 8, !tbaa !25
  %113 = getelementptr inbounds ptr, ptr %112, i64 %indvars.iv130
  %114 = load ptr, ptr %113, align 8, !tbaa !30
  %115 = getelementptr inbounds ptr, ptr %114, i64 %indvars.iv115
  %116 = load ptr, ptr %115, align 8, !tbaa !30
  %117 = getelementptr inbounds ptr, ptr %116, i64 %indvars.iv110
  store ptr %111, ptr %117, align 8, !tbaa !30
  %118 = load ptr, ptr %51, align 8, !tbaa !25
  %119 = getelementptr inbounds ptr, ptr %118, i64 %indvars.iv130
  %120 = load ptr, ptr %119, align 8, !tbaa !30
  %121 = getelementptr inbounds ptr, ptr %120, i64 %indvars.iv115
  %122 = load ptr, ptr %121, align 8, !tbaa !30
  %123 = getelementptr inbounds ptr, ptr %122, i64 %indvars.iv110
  %124 = load ptr, ptr %123, align 8, !tbaa !30
  %125 = load ptr, ptr %20, align 8, !tbaa !25
  %126 = getelementptr inbounds ptr, ptr %125, i64 %indvars.iv130
  %127 = load ptr, ptr %126, align 8, !tbaa !30
  %128 = getelementptr inbounds ptr, ptr %127, i64 %indvars.iv115
  %129 = load ptr, ptr %128, align 8, !tbaa !30
  %130 = getelementptr inbounds ptr, ptr %129, i64 %indvars.iv110
  %131 = load ptr, ptr %130, align 8, !tbaa !30
  %132 = ptrtoint ptr %131 to i64
  %133 = ptrtoint ptr %124 to i64
  %134 = sub i64 %132, %133
  %diff.check = icmp ult i64 %134, 32
  %or.cond = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.lr.ph.us, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.us ]
  %135 = getelementptr inbounds double, ptr %124, i64 %index
  %136 = getelementptr inbounds i8, ptr %135, i64 16
  %wide.load = load <2 x double>, ptr %135, align 8, !tbaa !31
  %wide.load151 = load <2 x double>, ptr %136, align 8, !tbaa !31
  %137 = getelementptr inbounds double, ptr %131, i64 %index
  %138 = getelementptr inbounds i8, ptr %137, i64 16
  store <2 x double> %wide.load, ptr %137, align 8, !tbaa !31
  store <2 x double> %wide.load151, ptr %138, align 8, !tbaa !31
  %index.next = add nuw i64 %index, 4
  %139 = icmp eq i64 %index.next, %n.vec
  br i1 %139, label %middle.block, label %vector.body, !llvm.loop !36

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

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph.us
  %indvars.iv105.ph = phi i64 [ 0, %.lr.ph.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.iv105.prol = phi i64 [ %indvars.iv.next106.prol, %scalar.ph.prol ], [ %indvars.iv105.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %140 = getelementptr inbounds double, ptr %124, i64 %indvars.iv105.prol
  %141 = load double, ptr %140, align 8, !tbaa !31
  %142 = getelementptr inbounds double, ptr %131, i64 %indvars.iv105.prol
  store double %141, ptr %142, align 8, !tbaa !31
  %indvars.iv.next106.prol = add nuw nsw i64 %indvars.iv105.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 !39

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv105.unr = phi i64 [ %indvars.iv105.ph, %scalar.ph.preheader ], [ %indvars.iv.next106.prol, %scalar.ph.prol ]
  %143 = sub nsw i64 %indvars.iv105.ph, %wide.trip.count108
  %144 = icmp ugt i64 %143, -4
  br i1 %144, label %._crit_edge.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv105 = phi i64 [ %indvars.iv.next106.3, %scalar.ph ], [ %indvars.iv105.unr, %scalar.ph.prol.loopexit ]
  %145 = getelementptr inbounds double, ptr %124, i64 %indvars.iv105
  %146 = load double, ptr %145, align 8, !tbaa !31
  %147 = getelementptr inbounds double, ptr %131, i64 %indvars.iv105
  store double %146, ptr %147, align 8, !tbaa !31
  %indvars.iv.next106 = add nuw nsw i64 %indvars.iv105, 1
  %148 = getelementptr inbounds double, ptr %124, i64 %indvars.iv.next106
  %149 = load double, ptr %148, align 8, !tbaa !31
  %150 = getelementptr inbounds double, ptr %131, i64 %indvars.iv.next106
  store double %149, ptr %150, align 8, !tbaa !31
  %indvars.iv.next106.1 = add nuw nsw i64 %indvars.iv105, 2
  %151 = getelementptr inbounds double, ptr %124, i64 %indvars.iv.next106.1
  %152 = load double, ptr %151, align 8, !tbaa !31
  %153 = getelementptr inbounds double, ptr %131, i64 %indvars.iv.next106.1
  store double %152, ptr %153, align 8, !tbaa !31
  %indvars.iv.next106.2 = add nuw nsw i64 %indvars.iv105, 3
  %154 = getelementptr inbounds double, ptr %124, i64 %indvars.iv.next106.2
  %155 = load double, ptr %154, align 8, !tbaa !31
  %156 = getelementptr inbounds double, ptr %131, i64 %indvars.iv.next106.2
  store double %155, ptr %156, align 8, !tbaa !31
  %indvars.iv.next106.3 = add nuw nsw i64 %indvars.iv105, 4
  %exitcond109.not.3 = icmp eq i64 %indvars.iv.next106.3, %wide.trip.count108
  br i1 %exitcond109.not.3, label %._crit_edge.us, label %scalar.ph, !llvm.loop !41

._crit_edge.us:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next111 = add nuw nsw i64 %indvars.iv110, 1
  %exitcond114.not = icmp eq i64 %indvars.iv.next111, %wide.trip.count113
  br i1 %exitcond114.not, label %._crit_edge68.split.us, label %110, !llvm.loop !42

._crit_edge68.split.us:                           ; preds = %._crit_edge.us
  %indvars.iv.next116 = add nuw nsw i64 %indvars.iv115, 1
  %exitcond119.not = icmp eq i64 %indvars.iv.next116, %wide.trip.count138
  br i1 %exitcond119.not, label %._crit_edge72.split.us88, label %.lr.ph71.split.split.us87, !llvm.loop !33

._crit_edge72.split.us88:                         ; preds = %._crit_edge68.split.us, %._crit_edge68.split.us.us.us
  %157 = load ptr, ptr %52, align 8, !tbaa !28
  %158 = getelementptr inbounds double, ptr %157, i64 %indvars.iv130
  %159 = load double, ptr %158, align 8, !tbaa !31
  %160 = load ptr, ptr %34, align 8, !tbaa !28
  %161 = getelementptr inbounds double, ptr %160, i64 %indvars.iv130
  store double %159, ptr %161, align 8, !tbaa !31
  %indvars.iv.next131 = add nuw nsw i64 %indvars.iv130, 1
  %exitcond134.not = icmp eq i64 %indvars.iv.next131, %wide.trip.count143
  br i1 %exitcond134.not, label %._crit_edge82, label %.lr.ph81.split.us.split, !llvm.loop !35

.lr.ph71.split.split.us.us:                       ; preds = %.lr.ph71.us, %._crit_edge68.split.us.us.us
  %indvars.iv125 = phi i64 [ %indvars.iv.next126, %._crit_edge68.split.us.us.us ], [ 0, %.lr.ph71.us ]
  %162 = load ptr, ptr %44, align 8, !tbaa !26
  %163 = getelementptr inbounds ptr, ptr %162, i64 %indvars.iv130
  %164 = load ptr, ptr %163, align 8, !tbaa !30
  %165 = getelementptr inbounds double, ptr %164, i64 %indvars.iv125
  %166 = load double, ptr %165, align 8, !tbaa !31
  %167 = load ptr, ptr %28, align 8, !tbaa !26
  %168 = getelementptr inbounds ptr, ptr %167, i64 %indvars.iv130
  %169 = load ptr, ptr %168, align 8, !tbaa !30
  %170 = getelementptr inbounds double, ptr %169, i64 %indvars.iv125
  store double %166, ptr %170, align 8, !tbaa !31
  %171 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %50) #5
          to label %.lr.ph67.us.us unwind label %.split74.split.us.split.us

.lr.ph67.us.us:                                   ; preds = %.lr.ph71.split.split.us.us
  %172 = load ptr, ptr %20, align 8, !tbaa !25
  %173 = getelementptr inbounds ptr, ptr %172, i64 %indvars.iv130
  %174 = load ptr, ptr %173, align 8, !tbaa !30
  %175 = getelementptr inbounds ptr, ptr %174, i64 %indvars.iv125
  store ptr %171, ptr %175, align 8, !tbaa !30
  br label %176

176:                                              ; preds = %178, %.lr.ph67.us.us
  %indvars.iv120 = phi i64 [ %indvars.iv.next121, %178 ], [ 0, %.lr.ph67.us.us ]
  %177 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %95) #5
          to label %178 unwind label %.split.us.split.us.split.us

178:                                              ; preds = %176
  %179 = load ptr, ptr %20, align 8, !tbaa !25
  %180 = getelementptr inbounds ptr, ptr %179, i64 %indvars.iv130
  %181 = load ptr, ptr %180, align 8, !tbaa !30
  %182 = getelementptr inbounds ptr, ptr %181, i64 %indvars.iv125
  %183 = load ptr, ptr %182, align 8, !tbaa !30
  %184 = getelementptr inbounds ptr, ptr %183, i64 %indvars.iv120
  store ptr %177, ptr %184, align 8, !tbaa !30
  %indvars.iv.next121 = add nuw nsw i64 %indvars.iv120, 1
  %exitcond124.not = icmp eq i64 %indvars.iv.next121, %wide.trip.count123
  br i1 %exitcond124.not, label %._crit_edge68.split.us.us.us, label %176, !llvm.loop !42

._crit_edge68.split.us.us.us:                     ; preds = %178
  %indvars.iv.next126 = add nuw nsw i64 %indvars.iv125, 1
  %exitcond129.not = icmp eq i64 %indvars.iv.next126, %wide.trip.count128
  br i1 %exitcond129.not, label %._crit_edge72.split.us88, label %.lr.ph71.split.split.us.us, !llvm.loop !33

.split90.us.split:                                ; preds = %84, %.lr.ph81.split.us.split
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %.split90.us

.split74.split.split.us:                          ; preds = %.lr.ph71.split.split.us87
  %186 = landingpad { ptr, i32 }
          cleanup
  br label %.split90.us

.split.split.us:                                  ; preds = %110
  %187 = landingpad { ptr, i32 }
          cleanup
  br label %.split90.us

.split74.split.us.split.us:                       ; preds = %.lr.ph71.split.split.us.us
  %188 = landingpad { ptr, i32 }
          cleanup
  br label %.split90.us

.split.us.split.us.split.us:                      ; preds = %176
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %.split90.us

._crit_edge82:                                    ; preds = %203, %._crit_edge72.split.us88, %._crit_edge72.split.us.us.us, %36
  ret void

190:                                              ; preds = %2
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %214

192:                                              ; preds = %5
  %193 = landingpad { ptr, i32 }
          cleanup
  br label %213

194:                                              ; preds = %16
  %195 = landingpad { ptr, i32 }
          cleanup
  br label %212

196:                                              ; preds = %30, %27, %19
  %197 = landingpad { ptr, i32 }
          cleanup
  br label %.split90.us

.lr.ph81.split:                                   ; preds = %.lr.ph81.split.preheader, %203
  %indvars.iv = phi i64 [ 0, %.lr.ph81.split.preheader ], [ %indvars.iv.next, %203 ]
  %198 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %42) #5
          to label %199 unwind label %.split90

199:                                              ; preds = %.lr.ph81.split
  %200 = load ptr, ptr %28, align 8, !tbaa !26
  %201 = getelementptr inbounds ptr, ptr %200, i64 %indvars.iv
  store ptr %198, ptr %201, align 8, !tbaa !30
  %202 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %42) #5
          to label %203 unwind label %.split90

203:                                              ; preds = %199
  %204 = load ptr, ptr %20, align 8, !tbaa !25
  %205 = getelementptr inbounds ptr, ptr %204, i64 %indvars.iv
  store ptr %202, ptr %205, align 8, !tbaa !30
  %206 = load ptr, ptr %52, align 8, !tbaa !28
  %207 = getelementptr inbounds double, ptr %206, i64 %indvars.iv
  %208 = load double, ptr %207, align 8, !tbaa !31
  %209 = load ptr, ptr %34, align 8, !tbaa !28
  %210 = getelementptr inbounds double, ptr %209, i64 %indvars.iv
  store double %208, ptr %210, align 8, !tbaa !31
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge82, label %.lr.ph81.split, !llvm.loop !35

.split90:                                         ; preds = %199, %.lr.ph81.split
  %211 = landingpad { ptr, i32 }
          cleanup
  br label %.split90.us

.split90.us:                                      ; preds = %.split.split.us, %.split.us.split.us.split.us, %.split74.us.split.us.split.us, %.split74.split.us.split.us, %.split74.split.split.us, %.split90, %.split90.us.split.us, %.split90.us.split, %196
  %.pn.pn.pn = phi { ptr, i32 } [ %197, %196 ], [ %211, %.split90 ], [ %185, %.split90.us.split ], [ %81, %.split90.us.split.us ], [ %82, %.split74.us.split.us.split.us ], [ %186, %.split74.split.split.us ], [ %188, %.split74.split.us.split.us ], [ %187, %.split.split.us ], [ %189, %.split.us.split.us.split.us ]
  tail call void @_ZN3ads7bspline5basisD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %17) #6
  br label %212

212:                                              ; preds = %.split90.us, %194
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %.split90.us ], [ %195, %194 ]
  tail call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #6
  br label %213

213:                                              ; preds = %212, %192
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %212 ], [ %193, %192 ]
  tail call void @_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  br label %214

214:                                              ; preds = %213, %190
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %213 ], [ %191, %190 ]
  tail call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn
}

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3ads7bspline5basisC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #3 align 2

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

attributes #0 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 #2 = { 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 #3 = { 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 #4 = { 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 #5 = { builtin allocsize(0) }
attributes #6 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 52}
!10 = !{!"_ZTSN3ads10basis_dataE", !11, i64 0, !16, i64 24, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !20, i64 72, !24, i64 96, !15, i64 152, !15, i64 160, !15, i64 168, !15, i64 176}
!11 = !{!"_ZTSSt6vectorIiSaIiEE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!"_ZTSSt6vectorISt4pairIiiESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseISt4pairIiiESaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseISt4pairIiiESaIS1_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseISt4pairIiiESaIS1_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!20 = !{!"_ZTSSt6vectorIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!24 = !{!"_ZTSN3ads7bspline5basisE", !20, i64 0, !6, i64 24, !20, i64 32}
!25 = !{!10, !15, i64 152}
!26 = !{!10, !15, i64 160}
!27 = !{!10, !15, i64 168}
!28 = !{!10, !15, i64 176}
!29 = !{!10, !6, i64 64}
!30 = !{!15, !15, i64 0}
!31 = !{!32, !32, i64 0}
!32 = !{!"double", !7, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}
!36 = distinct !{!36, !34, !37, !38}
!37 = !{!"llvm.loop.isvectorized", i32 1}
!38 = !{!"llvm.loop.unroll.runtime.disable"}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.unroll.disable"}
!41 = distinct !{!41, !34, !37}
!42 = distinct !{!42, !34}


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