; LLVM IR from chrr/libECP :: src (libecp)

; 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._libECPHandle = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i32, double, double }
%struct._ECP = type { ptr, i32, i32 }
%struct._ECPGauss = type { i32, double, double, double }

; Function Attrs: nounwind uwtable
define dso_local ptr @libECP_init(i32 noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, i32 noundef %13, i32 noundef %14, ptr noundef %15, i32 noundef %16, double noundef %17, double noundef %18) #0 {
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca double, align 8
  %52 = alloca i32, align 4
  store i32 %0, ptr %21, align 4, !tbaa !5
  store ptr %1, ptr %22, align 8, !tbaa !9
  store ptr %2, ptr %23, align 8, !tbaa !9
  store ptr %3, ptr %24, align 8, !tbaa !9
  store ptr %4, ptr %25, align 8, !tbaa !9
  store ptr %5, ptr %26, align 8, !tbaa !9
  store ptr %6, ptr %27, align 8, !tbaa !9
  store ptr %7, ptr %28, align 8, !tbaa !9
  store ptr %8, ptr %29, align 8, !tbaa !9
  store ptr %9, ptr %30, align 8, !tbaa !9
  store ptr %10, ptr %31, align 8, !tbaa !9
  store ptr %11, ptr %32, align 8, !tbaa !9
  store ptr %12, ptr %33, align 8, !tbaa !9
  store i32 %13, ptr %34, align 4, !tbaa !5
  store i32 %14, ptr %35, align 4, !tbaa !5
  store ptr %15, ptr %36, align 8, !tbaa !9
  store i32 %16, ptr %37, align 4, !tbaa !5
  store double %17, ptr %38, align 8, !tbaa !11
  store double %18, ptr %39, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %53 = call noalias ptr @malloc(i64 noundef 216) #7
  store ptr %53, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  %54 = load i32, ptr %21, align 4, !tbaa !5
  %55 = sext i32 %54 to i64
  %56 = call noalias ptr @calloc(i64 noundef %55, i64 noundef 8) #8
  store ptr %56, ptr %50, align 8, !tbaa !9
  %57 = load i32, ptr %21, align 4, !tbaa !5
  %58 = load ptr, ptr %40, align 8, !tbaa !9
  %59 = getelementptr inbounds %struct._libECPHandle, ptr %58, i32 0, i32 0
  store i32 %57, ptr %59, align 8, !tbaa !13
  %60 = load ptr, ptr %22, align 8, !tbaa !9
  %61 = load ptr, ptr %40, align 8, !tbaa !9
  %62 = getelementptr inbounds %struct._libECPHandle, ptr %61, i32 0, i32 1
  store ptr %60, ptr %62, align 8, !tbaa !15
  %63 = load ptr, ptr %50, align 8, !tbaa !9
  %64 = load ptr, ptr %40, align 8, !tbaa !9
  %65 = getelementptr inbounds %struct._libECPHandle, ptr %64, i32 0, i32 2
  store ptr %63, ptr %65, align 8, !tbaa !16
  %66 = load ptr, ptr %29, align 8, !tbaa !9
  %67 = load ptr, ptr %40, align 8, !tbaa !9
  %68 = getelementptr inbounds %struct._libECPHandle, ptr %67, i32 0, i32 3
  store ptr %66, ptr %68, align 8, !tbaa !17
  %69 = load ptr, ptr %30, align 8, !tbaa !9
  %70 = load ptr, ptr %40, align 8, !tbaa !9
  %71 = getelementptr inbounds %struct._libECPHandle, ptr %70, i32 0, i32 4
  store ptr %69, ptr %71, align 8, !tbaa !18
  %72 = load ptr, ptr %31, align 8, !tbaa !9
  %73 = load ptr, ptr %40, align 8, !tbaa !9
  %74 = getelementptr inbounds %struct._libECPHandle, ptr %73, i32 0, i32 5
  store ptr %72, ptr %74, align 8, !tbaa !19
  %75 = load ptr, ptr %32, align 8, !tbaa !9
  %76 = load ptr, ptr %40, align 8, !tbaa !9
  %77 = getelementptr inbounds %struct._libECPHandle, ptr %76, i32 0, i32 6
  store ptr %75, ptr %77, align 8, !tbaa !20
  %78 = load ptr, ptr %33, align 8, !tbaa !9
  %79 = load ptr, ptr %40, align 8, !tbaa !9
  %80 = getelementptr inbounds %struct._libECPHandle, ptr %79, i32 0, i32 7
  store ptr %78, ptr %80, align 8, !tbaa !21
  %81 = load i32, ptr %34, align 4, !tbaa !5
  %82 = load ptr, ptr %40, align 8, !tbaa !9
  %83 = getelementptr inbounds %struct._libECPHandle, ptr %82, i32 0, i32 8
  store i32 %81, ptr %83, align 8, !tbaa !22
  %84 = load ptr, ptr %40, align 8, !tbaa !9
  %85 = getelementptr inbounds %struct._libECPHandle, ptr %84, i32 0, i32 13
  store ptr null, ptr %85, align 8, !tbaa !23
  %86 = load ptr, ptr %40, align 8, !tbaa !9
  %87 = getelementptr inbounds %struct._libECPHandle, ptr %86, i32 0, i32 14
  store ptr null, ptr %87, align 8, !tbaa !24
  %88 = load ptr, ptr %40, align 8, !tbaa !9
  %89 = getelementptr inbounds %struct._libECPHandle, ptr %88, i32 0, i32 15
  store ptr null, ptr %89, align 8, !tbaa !25
  %90 = load ptr, ptr %40, align 8, !tbaa !9
  %91 = getelementptr inbounds %struct._libECPHandle, ptr %90, i32 0, i32 16
  store ptr null, ptr %91, align 8, !tbaa !26
  %92 = load ptr, ptr %40, align 8, !tbaa !9
  %93 = getelementptr inbounds %struct._libECPHandle, ptr %92, i32 0, i32 17
  store ptr null, ptr %93, align 8, !tbaa !27
  %94 = load ptr, ptr %40, align 8, !tbaa !9
  %95 = getelementptr inbounds %struct._libECPHandle, ptr %94, i32 0, i32 18
  store ptr null, ptr %95, align 8, !tbaa !28
  %96 = load ptr, ptr %40, align 8, !tbaa !9
  %97 = getelementptr inbounds %struct._libECPHandle, ptr %96, i32 0, i32 19
  store ptr null, ptr %97, align 8, !tbaa !29
  %98 = load ptr, ptr %40, align 8, !tbaa !9
  %99 = getelementptr inbounds %struct._libECPHandle, ptr %98, i32 0, i32 20
  store ptr null, ptr %99, align 8, !tbaa !30
  %100 = load ptr, ptr %40, align 8, !tbaa !9
  %101 = getelementptr inbounds %struct._libECPHandle, ptr %100, i32 0, i32 21
  store ptr null, ptr %101, align 8, !tbaa !31
  %102 = load ptr, ptr %40, align 8, !tbaa !9
  %103 = getelementptr inbounds %struct._libECPHandle, ptr %102, i32 0, i32 25
  store ptr null, ptr %103, align 8, !tbaa !32
  %104 = load ptr, ptr %40, align 8, !tbaa !9
  %105 = getelementptr inbounds %struct._libECPHandle, ptr %104, i32 0, i32 26
  store ptr null, ptr %105, align 8, !tbaa !33
  %106 = load i32, ptr %37, align 4, !tbaa !5
  %107 = load ptr, ptr %40, align 8, !tbaa !9
  %108 = getelementptr inbounds %struct._libECPHandle, ptr %107, i32 0, i32 27
  store i32 %106, ptr %108, align 8, !tbaa !34
  %109 = load double, ptr %38, align 8, !tbaa !11
  %110 = load ptr, ptr %40, align 8, !tbaa !9
  %111 = getelementptr inbounds %struct._libECPHandle, ptr %110, i32 0, i32 28
  store double %109, ptr %111, align 8, !tbaa !35
  %112 = load double, ptr %39, align 8, !tbaa !11
  %113 = load ptr, ptr %40, align 8, !tbaa !9
  %114 = getelementptr inbounds %struct._libECPHandle, ptr %113, i32 0, i32 29
  store double %112, ptr %114, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  %115 = load double, ptr %39, align 8, !tbaa !11
  %116 = call double @log(double noundef %115) #6
  %117 = fsub double %116, 2.000000e+00
  store double %117, ptr %51, align 8, !tbaa !11
  store i32 0, ptr %46, align 4, !tbaa !5
  store i32 0, ptr %47, align 4, !tbaa !5
  store i32 0, ptr %41, align 4, !tbaa !5
  br label %118

118:                                              ; preds = %184, %19
  %119 = load i32, ptr %41, align 4, !tbaa !5
  %120 = load i32, ptr %21, align 4, !tbaa !5
  %121 = icmp slt i32 %119, %120
  br i1 %121, label %122, label %187

122:                                              ; preds = %118
  %123 = load ptr, ptr %50, align 8, !tbaa !9
  %124 = load i32, ptr %41, align 4, !tbaa !5
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds ptr, ptr %123, i64 %125
  store ptr null, ptr %126, align 8, !tbaa !9
  %127 = load ptr, ptr %23, align 8, !tbaa !9
  %128 = load i32, ptr %41, align 4, !tbaa !5
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i32, ptr %127, i64 %129
  %131 = load i32, ptr %130, align 4, !tbaa !5
  %132 = icmp slt i32 0, %131
  br i1 %132, label %133, label %183

133:                                              ; preds = %122
  store i32 0, ptr %45, align 4, !tbaa !5
  store i32 0, ptr %44, align 4, !tbaa !5
  store i32 0, ptr %42, align 4, !tbaa !5
  br label %134

134:                                              ; preds = %166, %133
  %135 = load i32, ptr %42, align 4, !tbaa !5
  %136 = load ptr, ptr %23, align 8, !tbaa !9
  %137 = load i32, ptr %41, align 4, !tbaa !5
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds i32, ptr %136, i64 %138
  %140 = load i32, ptr %139, align 4, !tbaa !5
  %141 = icmp slt i32 %135, %140
  br i1 %141, label %142, label %169

142:                                              ; preds = %134
  %143 = load i32, ptr %44, align 4, !tbaa !5
  %144 = load ptr, ptr %24, align 8, !tbaa !9
  %145 = load i32, ptr %46, align 4, !tbaa !5
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds i32, ptr %144, i64 %146
  %148 = load i32, ptr %147, align 4, !tbaa !5
  %149 = icmp slt i32 %143, %148
  br i1 %149, label %150, label %156

150:                                              ; preds = %142
  %151 = load ptr, ptr %24, align 8, !tbaa !9
  %152 = load i32, ptr %46, align 4, !tbaa !5
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i32, ptr %151, i64 %153
  %155 = load i32, ptr %154, align 4, !tbaa !5
  store i32 %155, ptr %44, align 4, !tbaa !5
  br label %156

156:                                              ; preds = %150, %142
  %157 = load ptr, ptr %25, align 8, !tbaa !9
  %158 = load i32, ptr %46, align 4, !tbaa !5
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds i32, ptr %157, i64 %159
  %161 = load i32, ptr %160, align 4, !tbaa !5
  %162 = load i32, ptr %45, align 4, !tbaa !5
  %163 = add nsw i32 %162, %161
  store i32 %163, ptr %45, align 4, !tbaa !5
  %164 = load i32, ptr %46, align 4, !tbaa !5
  %165 = add nsw i32 %164, 1
  store i32 %165, ptr %46, align 4, !tbaa !5
  br label %166

166:                                              ; preds = %156
  %167 = load i32, ptr %42, align 4, !tbaa !5
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %42, align 4, !tbaa !5
  br label %134, !llvm.loop !37

169:                                              ; preds = %134
  %170 = load i32, ptr %44, align 4, !tbaa !5
  %171 = load i32, ptr %45, align 4, !tbaa !5
  %172 = call ptr @newECP(i32 noundef %170, i32 noundef %171)
  %173 = load ptr, ptr %50, align 8, !tbaa !9
  %174 = load i32, ptr %41, align 4, !tbaa !5
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds ptr, ptr %173, i64 %175
  store ptr %172, ptr %176, align 8, !tbaa !9
  %177 = load i32, ptr %44, align 4, !tbaa !5
  %178 = load i32, ptr %47, align 4, !tbaa !5
  %179 = icmp sgt i32 %177, %178
  br i1 %179, label %180, label %182

180:                                              ; preds = %169
  %181 = load i32, ptr %44, align 4, !tbaa !5
  store i32 %181, ptr %47, align 4, !tbaa !5
  br label %182

182:                                              ; preds = %180, %169
  br label %183

183:                                              ; preds = %182, %122
  br label %184

184:                                              ; preds = %183
  %185 = load i32, ptr %41, align 4, !tbaa !5
  %186 = add nsw i32 %185, 1
  store i32 %186, ptr %41, align 4, !tbaa !5
  br label %118, !llvm.loop !39

187:                                              ; preds = %118
  store i32 0, ptr %45, align 4, !tbaa !5
  store i32 0, ptr %44, align 4, !tbaa !5
  store i32 0, ptr %41, align 4, !tbaa !5
  br label %188

188:                                              ; preds = %297, %187
  %189 = load i32, ptr %41, align 4, !tbaa !5
  %190 = load i32, ptr %21, align 4, !tbaa !5
  %191 = icmp slt i32 %189, %190
  br i1 %191, label %192, label %300

192:                                              ; preds = %188
  %193 = load ptr, ptr %50, align 8, !tbaa !9
  %194 = load i32, ptr %41, align 4, !tbaa !5
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds ptr, ptr %193, i64 %195
  %197 = load ptr, ptr %196, align 8, !tbaa !9
  %198 = icmp ne ptr null, %197
  br i1 %198, label %199, label %296

199:                                              ; preds = %192
  store i32 0, ptr %46, align 4, !tbaa !5
  store i32 0, ptr %42, align 4, !tbaa !5
  br label %200

200:                                              ; preds = %292, %199
  %201 = load i32, ptr %42, align 4, !tbaa !5
  %202 = load ptr, ptr %23, align 8, !tbaa !9
  %203 = load i32, ptr %41, align 4, !tbaa !5
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds i32, ptr %202, i64 %204
  %206 = load i32, ptr %205, align 4, !tbaa !5
  %207 = icmp slt i32 %201, %206
  br i1 %207, label %208, label %295

208:                                              ; preds = %200
  store i32 0, ptr %43, align 4, !tbaa !5
  br label %209

209:                                              ; preds = %286, %208
  %210 = load i32, ptr %43, align 4, !tbaa !5
  %211 = load ptr, ptr %25, align 8, !tbaa !9
  %212 = load i32, ptr %44, align 4, !tbaa !5
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i32, ptr %211, i64 %213
  %215 = load i32, ptr %214, align 4, !tbaa !5
  %216 = icmp slt i32 %210, %215
  br i1 %216, label %217, label %289

217:                                              ; preds = %209
  %218 = load ptr, ptr %24, align 8, !tbaa !9
  %219 = load i32, ptr %44, align 4, !tbaa !5
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds i32, ptr %218, i64 %220
  %222 = load i32, ptr %221, align 4, !tbaa !5
  %223 = load ptr, ptr %50, align 8, !tbaa !9
  %224 = load i32, ptr %41, align 4, !tbaa !5
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds ptr, ptr %223, i64 %225
  %227 = load ptr, ptr %226, align 8, !tbaa !9
  %228 = getelementptr inbounds %struct._ECP, ptr %227, i32 0, i32 0
  %229 = load ptr, ptr %228, align 8, !tbaa !40
  %230 = load i32, ptr %46, align 4, !tbaa !5
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct._ECPGauss, ptr %229, i64 %231
  %233 = getelementptr inbounds %struct._ECPGauss, ptr %232, i32 0, i32 0
  store i32 %222, ptr %233, align 8, !tbaa !42
  %234 = load ptr, ptr %26, align 8, !tbaa !9
  %235 = load i32, ptr %45, align 4, !tbaa !5
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds double, ptr %234, i64 %236
  %238 = load double, ptr %237, align 8, !tbaa !11
  %239 = load ptr, ptr %50, align 8, !tbaa !9
  %240 = load i32, ptr %41, align 4, !tbaa !5
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds ptr, ptr %239, i64 %241
  %243 = load ptr, ptr %242, align 8, !tbaa !9
  %244 = getelementptr inbounds %struct._ECP, ptr %243, i32 0, i32 0
  %245 = load ptr, ptr %244, align 8, !tbaa !40
  %246 = load i32, ptr %46, align 4, !tbaa !5
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds %struct._ECPGauss, ptr %245, i64 %247
  %249 = getelementptr inbounds %struct._ECPGauss, ptr %248, i32 0, i32 3
  store double %238, ptr %249, align 8, !tbaa !44
  %250 = load ptr, ptr %27, align 8, !tbaa !9
  %251 = load i32, ptr %45, align 4, !tbaa !5
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds double, ptr %250, i64 %252
  %254 = load double, ptr %253, align 8, !tbaa !11
  %255 = load ptr, ptr %50, align 8, !tbaa !9
  %256 = load i32, ptr %41, align 4, !tbaa !5
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds ptr, ptr %255, i64 %257
  %259 = load ptr, ptr %258, align 8, !tbaa !9
  %260 = getelementptr inbounds %struct._ECP, ptr %259, i32 0, i32 0
  %261 = load ptr, ptr %260, align 8, !tbaa !40
  %262 = load i32, ptr %46, align 4, !tbaa !5
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds %struct._ECPGauss, ptr %261, i64 %263
  %265 = getelementptr inbounds %struct._ECPGauss, ptr %264, i32 0, i32 2
  store double %254, ptr %265, align 8, !tbaa !45
  %266 = load ptr, ptr %28, align 8, !tbaa !9
  %267 = load i32, ptr %45, align 4, !tbaa !5
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds double, ptr %266, i64 %268
  %270 = load double, ptr %269, align 8, !tbaa !11
  %271 = load ptr, ptr %50, align 8, !tbaa !9
  %272 = load i32, ptr %41, align 4, !tbaa !5
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds ptr, ptr %271, i64 %273
  %275 = load ptr, ptr %274, align 8, !tbaa !9
  %276 = getelementptr inbounds %struct._ECP, ptr %275, i32 0, i32 0
  %277 = load ptr, ptr %276, align 8, !tbaa !40
  %278 = load i32, ptr %46, align 4, !tbaa !5
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds %struct._ECPGauss, ptr %277, i64 %279
  %281 = getelementptr inbounds %struct._ECPGauss, ptr %280, i32 0, i32 1
  store double %270, ptr %281, align 8, !tbaa !46
  %282 = load i32, ptr %45, align 4, !tbaa !5
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %45, align 4, !tbaa !5
  %284 = load i32, ptr %46, align 4, !tbaa !5
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %46, align 4, !tbaa !5
  br label %286

286:                                              ; preds = %217
  %287 = load i32, ptr %43, align 4, !tbaa !5
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr %43, align 4, !tbaa !5
  br label %209, !llvm.loop !47

289:                                              ; preds = %209
  %290 = load i32, ptr %44, align 4, !tbaa !5
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %44, align 4, !tbaa !5
  br label %292

292:                                              ; preds = %289
  %293 = load i32, ptr %42, align 4, !tbaa !5
  %294 = add nsw i32 %293, 1
  store i32 %294, ptr %42, align 4, !tbaa !5
  br label %200, !llvm.loop !48

295:                                              ; preds = %200
  br label %296

296:                                              ; preds = %295, %192
  br label %297

297:                                              ; preds = %296
  %298 = load i32, ptr %41, align 4, !tbaa !5
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %41, align 4, !tbaa !5
  br label %188, !llvm.loop !49

300:                                              ; preds = %188
  %301 = load i32, ptr %21, align 4, !tbaa !5
  %302 = sext i32 %301 to i64
  %303 = call noalias ptr @calloc(i64 noundef %302, i64 noundef 4) #8
  %304 = load ptr, ptr %40, align 8, !tbaa !9
  %305 = getelementptr inbounds %struct._libECPHandle, ptr %304, i32 0, i32 13
  store ptr %303, ptr %305, align 8, !tbaa !23
  store i32 0, ptr %46, align 4, !tbaa !5
  store i32 0, ptr %48, align 4, !tbaa !5
  store i32 0, ptr %41, align 4, !tbaa !5
  br label %306

306:                                              ; preds = %366, %300
  %307 = load i32, ptr %41, align 4, !tbaa !5
  %308 = load i32, ptr %21, align 4, !tbaa !5
  %309 = icmp slt i32 %307, %308
  br i1 %309, label %310, label %369

310:                                              ; preds = %306
  store i32 0, ptr %42, align 4, !tbaa !5
  br label %311

311:                                              ; preds = %362, %310
  %312 = load i32, ptr %42, align 4, !tbaa !5
  %313 = load ptr, ptr %29, align 8, !tbaa !9
  %314 = load i32, ptr %41, align 4, !tbaa !5
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds i32, ptr %313, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !5
  %318 = icmp slt i32 %312, %317
  br i1 %318, label %319, label %365

319:                                              ; preds = %311
  %320 = load ptr, ptr %40, align 8, !tbaa !9
  %321 = getelementptr inbounds %struct._libECPHandle, ptr %320, i32 0, i32 13
  %322 = load ptr, ptr %321, align 8, !tbaa !23
  %323 = load i32, ptr %41, align 4, !tbaa !5
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds i32, ptr %322, i64 %324
  %326 = load i32, ptr %325, align 4, !tbaa !5
  %327 = load ptr, ptr %30, align 8, !tbaa !9
  %328 = load i32, ptr %46, align 4, !tbaa !5
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds i32, ptr %327, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !5
  %332 = icmp slt i32 %326, %331
  br i1 %332, label %333, label %345

333:                                              ; preds = %319
  %334 = load ptr, ptr %30, align 8, !tbaa !9
  %335 = load i32, ptr %46, align 4, !tbaa !5
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds i32, ptr %334, i64 %336
  %338 = load i32, ptr %337, align 4, !tbaa !5
  %339 = load ptr, ptr %40, align 8, !tbaa !9
  %340 = getelementptr inbounds %struct._libECPHandle, ptr %339, i32 0, i32 13
  %341 = load ptr, ptr %340, align 8, !tbaa !23
  %342 = load i32, ptr %41, align 4, !tbaa !5
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds i32, ptr %341, i64 %343
  store i32 %338, ptr %344, align 4, !tbaa !5
  br label %345

345:                                              ; preds = %333, %319
  %346 = load i32, ptr %48, align 4, !tbaa !5
  %347 = load ptr, ptr %30, align 8, !tbaa !9
  %348 = load i32, ptr %46, align 4, !tbaa !5
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i32, ptr %347, i64 %349
  %351 = load i32, ptr %350, align 4, !tbaa !5
  %352 = icmp slt i32 %346, %351
  br i1 %352, label %353, label %359

353:                                              ; preds = %345
  %354 = load ptr, ptr %30, align 8, !tbaa !9
  %355 = load i32, ptr %46, align 4, !tbaa !5
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %354, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !5
  store i32 %358, ptr %48, align 4, !tbaa !5
  br label %359

359:                                              ; preds = %353, %345
  %360 = load i32, ptr %46, align 4, !tbaa !5
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %46, align 4, !tbaa !5
  br label %362

362:                                              ; preds = %359
  %363 = load i32, ptr %42, align 4, !tbaa !5
  %364 = add nsw i32 %363, 1
  store i32 %364, ptr %42, align 4, !tbaa !5
  br label %311, !llvm.loop !50

365:                                              ; preds = %311
  br label %366

366:                                              ; preds = %365
  %367 = load i32, ptr %41, align 4, !tbaa !5
  %368 = add nsw i32 %367, 1
  store i32 %368, ptr %41, align 4, !tbaa !5
  br label %306, !llvm.loop !51

369:                                              ; preds = %306
  %370 = load i32, ptr %48, align 4, !tbaa !5
  %371 = load i32, ptr %34, align 4, !tbaa !5
  %372 = add nsw i32 %370, %371
  store i32 %372, ptr %49, align 4, !tbaa !5
  %373 = load i32, ptr %47, align 4, !tbaa !5
  %374 = sub nsw i32 %373, 1
  %375 = load i32, ptr %49, align 4, !tbaa !5
  %376 = add nsw i32 %374, %375
  %377 = load ptr, ptr %40, align 8, !tbaa !9
  %378 = getelementptr inbounds %struct._libECPHandle, ptr %377, i32 0, i32 12
  store i32 %376, ptr %378, align 8, !tbaa !52
  %379 = load ptr, ptr %40, align 8, !tbaa !9
  %380 = getelementptr inbounds %struct._libECPHandle, ptr %379, i32 0, i32 12
  %381 = load i32, ptr %380, align 8, !tbaa !52
  %382 = load i32, ptr %49, align 4, !tbaa !5
  %383 = add nsw i32 %381, %382
  %384 = mul nsw i32 2, %383
  %385 = add nsw i32 %384, 1
  %386 = call ptr @factorials(i32 noundef %385)
  %387 = load ptr, ptr %40, align 8, !tbaa !9
  %388 = getelementptr inbounds %struct._libECPHandle, ptr %387, i32 0, i32 18
  store ptr %386, ptr %388, align 8, !tbaa !28
  %389 = load ptr, ptr %40, align 8, !tbaa !9
  %390 = getelementptr inbounds %struct._libECPHandle, ptr %389, i32 0, i32 12
  %391 = load i32, ptr %390, align 8, !tbaa !52
  %392 = load i32, ptr %49, align 4, !tbaa !5
  %393 = add nsw i32 %391, %392
  %394 = mul nsw i32 2, %393
  %395 = add nsw i32 %394, 1
  %396 = call ptr @double_factorials(i32 noundef %395)
  %397 = load ptr, ptr %40, align 8, !tbaa !9
  %398 = getelementptr inbounds %struct._libECPHandle, ptr %397, i32 0, i32 19
  store ptr %396, ptr %398, align 8, !tbaa !29
  %399 = load ptr, ptr %40, align 8, !tbaa !9
  %400 = getelementptr inbounds %struct._libECPHandle, ptr %399, i32 0, i32 23
  store i32 0, ptr %400, align 4, !tbaa !53
  %401 = load ptr, ptr %36, align 8, !tbaa !9
  %402 = icmp eq ptr null, %401
  br i1 %402, label %403, label %433

403:                                              ; preds = %369
  %404 = load ptr, ptr %40, align 8, !tbaa !9
  %405 = getelementptr inbounds %struct._libECPHandle, ptr %404, i32 0, i32 23
  store i32 1, ptr %405, align 4, !tbaa !53
  %406 = load ptr, ptr %40, align 8, !tbaa !9
  %407 = getelementptr inbounds %struct._libECPHandle, ptr %406, i32 0, i32 12
  %408 = load i32, ptr %407, align 8, !tbaa !52
  %409 = load i32, ptr %49, align 4, !tbaa !5
  %410 = add nsw i32 %408, %409
  %411 = call ptr @cartesianShellOrder(i32 noundef %410)
  %412 = load ptr, ptr %40, align 8, !tbaa !9
  %413 = getelementptr inbounds %struct._libECPHandle, ptr %412, i32 0, i32 20
  store ptr %411, ptr %413, align 8, !tbaa !30
  %414 = load ptr, ptr %40, align 8, !tbaa !9
  %415 = getelementptr inbounds %struct._libECPHandle, ptr %414, i32 0, i32 12
  %416 = load i32, ptr %415, align 8, !tbaa !52
  %417 = load i32, ptr %49, align 4, !tbaa !5
  %418 = add nsw i32 %416, %417
  %419 = load ptr, ptr %40, align 8, !tbaa !9
  %420 = getelementptr inbounds %struct._libECPHandle, ptr %419, i32 0, i32 20
  %421 = load ptr, ptr %420, align 8, !tbaa !30
  %422 = call ptr @cartesianShellOrderIndex(i32 noundef %418, ptr noundef %421)
  %423 = load ptr, ptr %40, align 8, !tbaa !9
  %424 = getelementptr inbounds %struct._libECPHandle, ptr %423, i32 0, i32 21
  store ptr %422, ptr %424, align 8, !tbaa !31
  %425 = load ptr, ptr %40, align 8, !tbaa !9
  %426 = getelementptr inbounds %struct._libECPHandle, ptr %425, i32 0, i32 12
  %427 = load i32, ptr %426, align 8, !tbaa !52
  %428 = load i32, ptr %49, align 4, !tbaa !5
  %429 = add nsw i32 %427, %428
  %430 = add nsw i32 %429, 1
  %431 = load ptr, ptr %40, align 8, !tbaa !9
  %432 = getelementptr inbounds %struct._libECPHandle, ptr %431, i32 0, i32 22
  store i32 %430, ptr %432, align 8, !tbaa !54
  br label %459

433:                                              ; preds = %369
  %434 = load i32, ptr %35, align 4, !tbaa !5
  %435 = load ptr, ptr %40, align 8, !tbaa !9
  %436 = getelementptr inbounds %struct._libECPHandle, ptr %435, i32 0, i32 12
  %437 = load i32, ptr %436, align 8, !tbaa !52
  %438 = load i32, ptr %49, align 4, !tbaa !5
  %439 = add nsw i32 %437, %438
  %440 = add nsw i32 %439, 1
  %441 = icmp slt i32 %434, %440
  br i1 %441, label %442, label %444

442:                                              ; preds = %433
  %443 = load ptr, ptr %40, align 8, !tbaa !9
  call void @libECP_free(ptr noundef %443)
  store ptr null, ptr %20, align 8
  store i32 1, ptr %52, align 4
  br label %661

444:                                              ; preds = %433
  %445 = load ptr, ptr %36, align 8, !tbaa !9
  %446 = load ptr, ptr %40, align 8, !tbaa !9
  %447 = getelementptr inbounds %struct._libECPHandle, ptr %446, i32 0, i32 20
  store ptr %445, ptr %447, align 8, !tbaa !30
  %448 = load i32, ptr %35, align 4, !tbaa !5
  %449 = load ptr, ptr %40, align 8, !tbaa !9
  %450 = getelementptr inbounds %struct._libECPHandle, ptr %449, i32 0, i32 20
  %451 = load ptr, ptr %450, align 8, !tbaa !30
  %452 = call ptr @cartesianShellOrderIndex(i32 noundef %448, ptr noundef %451)
  %453 = load ptr, ptr %40, align 8, !tbaa !9
  %454 = getelementptr inbounds %struct._libECPHandle, ptr %453, i32 0, i32 21
  store ptr %452, ptr %454, align 8, !tbaa !31
  %455 = load i32, ptr %35, align 4, !tbaa !5
  %456 = add nsw i32 %455, 1
  %457 = load ptr, ptr %40, align 8, !tbaa !9
  %458 = getelementptr inbounds %struct._libECPHandle, ptr %457, i32 0, i32 22
  store i32 %456, ptr %458, align 8, !tbaa !54
  br label %459

459:                                              ; preds = %444, %403
  %460 = load ptr, ptr %40, align 8, !tbaa !9
  %461 = getelementptr inbounds %struct._libECPHandle, ptr %460, i32 0, i32 12
  %462 = load i32, ptr %461, align 8, !tbaa !52
  %463 = load i32, ptr %49, align 4, !tbaa !5
  %464 = add nsw i32 %462, %463
  %465 = load ptr, ptr %40, align 8, !tbaa !9
  %466 = getelementptr inbounds %struct._libECPHandle, ptr %465, i32 0, i32 24
  store i32 %464, ptr %466, align 8, !tbaa !55
  %467 = load ptr, ptr %40, align 8, !tbaa !9
  %468 = getelementptr inbounds %struct._libECPHandle, ptr %467, i32 0, i32 24
  %469 = load i32, ptr %468, align 8, !tbaa !55
  %470 = load ptr, ptr %40, align 8, !tbaa !9
  %471 = getelementptr inbounds %struct._libECPHandle, ptr %470, i32 0, i32 20
  %472 = load ptr, ptr %471, align 8, !tbaa !30
  %473 = load ptr, ptr %40, align 8, !tbaa !9
  %474 = getelementptr inbounds %struct._libECPHandle, ptr %473, i32 0, i32 18
  %475 = load ptr, ptr %474, align 8, !tbaa !28
  %476 = call ptr @TM_cart2sph(i32 noundef %469, ptr noundef %472, ptr noundef %475)
  %477 = load ptr, ptr %40, align 8, !tbaa !9
  %478 = getelementptr inbounds %struct._libECPHandle, ptr %477, i32 0, i32 25
  store ptr %476, ptr %478, align 8, !tbaa !32
  %479 = load ptr, ptr %40, align 8, !tbaa !9
  %480 = getelementptr inbounds %struct._libECPHandle, ptr %479, i32 0, i32 25
  %481 = load ptr, ptr %480, align 8, !tbaa !32
  %482 = load ptr, ptr %40, align 8, !tbaa !9
  %483 = getelementptr inbounds %struct._libECPHandle, ptr %482, i32 0, i32 24
  %484 = load i32, ptr %483, align 8, !tbaa !55
  %485 = load ptr, ptr %40, align 8, !tbaa !9
  %486 = getelementptr inbounds %struct._libECPHandle, ptr %485, i32 0, i32 20
  %487 = load ptr, ptr %486, align 8, !tbaa !30
  %488 = load ptr, ptr %40, align 8, !tbaa !9
  %489 = getelementptr inbounds %struct._libECPHandle, ptr %488, i32 0, i32 19
  %490 = load ptr, ptr %489, align 8, !tbaa !29
  %491 = call ptr @TM_poly2sph(ptr noundef %481, i32 noundef %484, ptr noundef %487, ptr noundef %490)
  %492 = load ptr, ptr %40, align 8, !tbaa !9
  %493 = getelementptr inbounds %struct._libECPHandle, ptr %492, i32 0, i32 26
  store ptr %491, ptr %493, align 8, !tbaa !33
  %494 = load ptr, ptr %40, align 8, !tbaa !9
  %495 = getelementptr inbounds %struct._libECPHandle, ptr %494, i32 0, i32 27
  %496 = load i32, ptr %495, align 8, !tbaa !34
  %497 = load ptr, ptr %40, align 8, !tbaa !9
  %498 = getelementptr inbounds %struct._libECPHandle, ptr %497, i32 0, i32 28
  %499 = load double, ptr %498, align 8, !tbaa !35
  %500 = call ptr @initGridGC_PSM92(i32 noundef %496, double noundef %499)
  %501 = load ptr, ptr %40, align 8, !tbaa !9
  %502 = getelementptr inbounds %struct._libECPHandle, ptr %501, i32 0, i32 17
  store ptr %500, ptr %502, align 8, !tbaa !27
  %503 = call noalias ptr @malloc(i64 noundef 40) #7
  %504 = load ptr, ptr %40, align 8, !tbaa !9
  %505 = getelementptr inbounds %struct._libECPHandle, ptr %504, i32 0, i32 16
  store ptr %503, ptr %505, align 8, !tbaa !26
  %506 = load ptr, ptr %40, align 8, !tbaa !9
  %507 = getelementptr inbounds %struct._libECPHandle, ptr %506, i32 0, i32 16
  %508 = load ptr, ptr %507, align 8, !tbaa !26
  %509 = load i32, ptr %47, align 4, !tbaa !5
  %510 = load i32, ptr %49, align 4, !tbaa !5
  %511 = add nsw i32 %509, %510
  %512 = add nsw i32 %511, 6
  %513 = load ptr, ptr %40, align 8, !tbaa !9
  %514 = getelementptr inbounds %struct._libECPHandle, ptr %513, i32 0, i32 29
  %515 = load double, ptr %514, align 8, !tbaa !36
  %516 = call i32 @tabBesselFunction(ptr noundef %508, i32 noundef %512, i32 noundef 1600, i32 noundef 200, double noundef %515)
  %517 = icmp ne i32 0, %516
  br i1 %517, label %518, label %520

518:                                              ; preds = %459
  %519 = load ptr, ptr %40, align 8, !tbaa !9
  call void @libECP_free(ptr noundef %519)
  store ptr null, ptr %20, align 8
  store i32 1, ptr %52, align 4
  br label %661

520:                                              ; preds = %459
  %521 = load ptr, ptr %40, align 8, !tbaa !9
  %522 = getelementptr inbounds %struct._libECPHandle, ptr %521, i32 0, i32 0
  %523 = load i32, ptr %522, align 8, !tbaa !13
  %524 = load ptr, ptr %40, align 8, !tbaa !9
  %525 = getelementptr inbounds %struct._libECPHandle, ptr %524, i32 0, i32 1
  %526 = load ptr, ptr %525, align 8, !tbaa !15
  %527 = load ptr, ptr %40, align 8, !tbaa !9
  %528 = getelementptr inbounds %struct._libECPHandle, ptr %527, i32 0, i32 2
  %529 = load ptr, ptr %528, align 8, !tbaa !16
  %530 = load ptr, ptr %40, align 8, !tbaa !9
  %531 = getelementptr inbounds %struct._libECPHandle, ptr %530, i32 0, i32 3
  %532 = load ptr, ptr %531, align 8, !tbaa !17
  %533 = load ptr, ptr %40, align 8, !tbaa !9
  %534 = getelementptr inbounds %struct._libECPHandle, ptr %533, i32 0, i32 4
  %535 = load ptr, ptr %534, align 8, !tbaa !18
  %536 = load ptr, ptr %40, align 8, !tbaa !9
  %537 = getelementptr inbounds %struct._libECPHandle, ptr %536, i32 0, i32 5
  %538 = load ptr, ptr %537, align 8, !tbaa !19
  %539 = load ptr, ptr %40, align 8, !tbaa !9
  %540 = getelementptr inbounds %struct._libECPHandle, ptr %539, i32 0, i32 6
  %541 = load ptr, ptr %540, align 8, !tbaa !20
  %542 = load ptr, ptr %40, align 8, !tbaa !9
  %543 = getelementptr inbounds %struct._libECPHandle, ptr %542, i32 0, i32 7
  %544 = load ptr, ptr %543, align 8, !tbaa !21
  %545 = load ptr, ptr %40, align 8, !tbaa !9
  %546 = getelementptr inbounds %struct._libECPHandle, ptr %545, i32 0, i32 8
  %547 = load i32, ptr %546, align 8, !tbaa !22
  %548 = load ptr, ptr %40, align 8, !tbaa !9
  %549 = getelementptr inbounds %struct._libECPHandle, ptr %548, i32 0, i32 28
  %550 = load double, ptr %549, align 8, !tbaa !35
  %551 = call ptr @Type1_new(i32 noundef %523, ptr noundef %526, ptr noundef %529, ptr noundef %532, ptr noundef %535, ptr noundef %538, ptr noundef %541, ptr noundef %544, i32 noundef %547, double noundef %550)
  %552 = load ptr, ptr %40, align 8, !tbaa !9
  %553 = getelementptr inbounds %struct._libECPHandle, ptr %552, i32 0, i32 14
  store ptr %551, ptr %553, align 8, !tbaa !24
  %554 = load ptr, ptr %40, align 8, !tbaa !9
  %555 = getelementptr inbounds %struct._libECPHandle, ptr %554, i32 0, i32 14
  %556 = load ptr, ptr %555, align 8, !tbaa !24
  %557 = load ptr, ptr %40, align 8, !tbaa !9
  %558 = getelementptr inbounds %struct._libECPHandle, ptr %557, i32 0, i32 12
  %559 = load i32, ptr %558, align 8, !tbaa !52
  %560 = load ptr, ptr %40, align 8, !tbaa !9
  %561 = getelementptr inbounds %struct._libECPHandle, ptr %560, i32 0, i32 18
  %562 = load ptr, ptr %561, align 8, !tbaa !28
  %563 = load ptr, ptr %40, align 8, !tbaa !9
  %564 = getelementptr inbounds %struct._libECPHandle, ptr %563, i32 0, i32 19
  %565 = load ptr, ptr %564, align 8, !tbaa !29
  %566 = load ptr, ptr %40, align 8, !tbaa !9
  %567 = getelementptr inbounds %struct._libECPHandle, ptr %566, i32 0, i32 20
  %568 = load ptr, ptr %567, align 8, !tbaa !30
  %569 = load ptr, ptr %40, align 8, !tbaa !9
  %570 = getelementptr inbounds %struct._libECPHandle, ptr %569, i32 0, i32 21
  %571 = load ptr, ptr %570, align 8, !tbaa !31
  %572 = load ptr, ptr %40, align 8, !tbaa !9
  %573 = getelementptr inbounds %struct._libECPHandle, ptr %572, i32 0, i32 22
  %574 = load i32, ptr %573, align 8, !tbaa !54
  %575 = load ptr, ptr %40, align 8, !tbaa !9
  %576 = getelementptr inbounds %struct._libECPHandle, ptr %575, i32 0, i32 26
  %577 = load ptr, ptr %576, align 8, !tbaa !33
  %578 = load ptr, ptr %40, align 8, !tbaa !9
  %579 = getelementptr inbounds %struct._libECPHandle, ptr %578, i32 0, i32 24
  %580 = load i32, ptr %579, align 8, !tbaa !55
  %581 = load ptr, ptr %40, align 8, !tbaa !9
  %582 = getelementptr inbounds %struct._libECPHandle, ptr %581, i32 0, i32 16
  %583 = load ptr, ptr %582, align 8, !tbaa !26
  %584 = load ptr, ptr %40, align 8, !tbaa !9
  %585 = getelementptr inbounds %struct._libECPHandle, ptr %584, i32 0, i32 27
  %586 = load i32, ptr %585, align 8, !tbaa !34
  %587 = load ptr, ptr %40, align 8, !tbaa !9
  %588 = getelementptr inbounds %struct._libECPHandle, ptr %587, i32 0, i32 17
  %589 = load ptr, ptr %588, align 8, !tbaa !27
  %590 = load ptr, ptr %40, align 8, !tbaa !9
  %591 = getelementptr inbounds %struct._libECPHandle, ptr %590, i32 0, i32 29
  %592 = load double, ptr %591, align 8, !tbaa !36
  %593 = load double, ptr %51, align 8, !tbaa !11
  call void @Type1_init(ptr noundef %556, i32 noundef %559, ptr noundef %562, ptr noundef %565, ptr noundef %568, ptr noundef %571, i32 noundef %574, ptr noundef %577, i32 noundef %580, ptr noundef %583, i32 noundef %586, ptr noundef %589, double noundef %592, double noundef %593)
  %594 = load ptr, ptr %40, align 8, !tbaa !9
  %595 = getelementptr inbounds %struct._libECPHandle, ptr %594, i32 0, i32 0
  %596 = load i32, ptr %595, align 8, !tbaa !13
  %597 = load ptr, ptr %40, align 8, !tbaa !9
  %598 = getelementptr inbounds %struct._libECPHandle, ptr %597, i32 0, i32 1
  %599 = load ptr, ptr %598, align 8, !tbaa !15
  %600 = load ptr, ptr %40, align 8, !tbaa !9
  %601 = getelementptr inbounds %struct._libECPHandle, ptr %600, i32 0, i32 2
  %602 = load ptr, ptr %601, align 8, !tbaa !16
  %603 = load ptr, ptr %40, align 8, !tbaa !9
  %604 = getelementptr inbounds %struct._libECPHandle, ptr %603, i32 0, i32 3
  %605 = load ptr, ptr %604, align 8, !tbaa !17
  %606 = load ptr, ptr %40, align 8, !tbaa !9
  %607 = getelementptr inbounds %struct._libECPHandle, ptr %606, i32 0, i32 4
  %608 = load ptr, ptr %607, align 8, !tbaa !18
  %609 = load ptr, ptr %40, align 8, !tbaa !9
  %610 = getelementptr inbounds %struct._libECPHandle, ptr %609, i32 0, i32 5
  %611 = load ptr, ptr %610, align 8, !tbaa !19
  %612 = load ptr, ptr %40, align 8, !tbaa !9
  %613 = getelementptr inbounds %struct._libECPHandle, ptr %612, i32 0, i32 6
  %614 = load ptr, ptr %613, align 8, !tbaa !20
  %615 = load ptr, ptr %40, align 8, !tbaa !9
  %616 = getelementptr inbounds %struct._libECPHandle, ptr %615, i32 0, i32 7
  %617 = load ptr, ptr %616, align 8, !tbaa !21
  %618 = load ptr, ptr %40, align 8, !tbaa !9
  %619 = getelementptr inbounds %struct._libECPHandle, ptr %618, i32 0, i32 8
  %620 = load i32, ptr %619, align 8, !tbaa !22
  %621 = load ptr, ptr %40, align 8, !tbaa !9
  %622 = getelementptr inbounds %struct._libECPHandle, ptr %621, i32 0, i32 28
  %623 = load double, ptr %622, align 8, !tbaa !35
  %624 = call ptr @Type2_new(i32 noundef %596, ptr noundef %599, ptr noundef %602, ptr noundef %605, ptr noundef %608, ptr noundef %611, ptr noundef %614, ptr noundef %617, i32 noundef %620, double noundef %623)
  %625 = load ptr, ptr %40, align 8, !tbaa !9
  %626 = getelementptr inbounds %struct._libECPHandle, ptr %625, i32 0, i32 15
  store ptr %624, ptr %626, align 8, !tbaa !25
  %627 = load ptr, ptr %40, align 8, !tbaa !9
  %628 = getelementptr inbounds %struct._libECPHandle, ptr %627, i32 0, i32 15
  %629 = load ptr, ptr %628, align 8, !tbaa !25
  %630 = load ptr, ptr %40, align 8, !tbaa !9
  %631 = getelementptr inbounds %struct._libECPHandle, ptr %630, i32 0, i32 18
  %632 = load ptr, ptr %631, align 8, !tbaa !28
  %633 = load ptr, ptr %40, align 8, !tbaa !9
  %634 = getelementptr inbounds %struct._libECPHandle, ptr %633, i32 0, i32 19
  %635 = load ptr, ptr %634, align 8, !tbaa !29
  %636 = load ptr, ptr %40, align 8, !tbaa !9
  %637 = getelementptr inbounds %struct._libECPHandle, ptr %636, i32 0, i32 20
  %638 = load ptr, ptr %637, align 8, !tbaa !30
  %639 = load ptr, ptr %40, align 8, !tbaa !9
  %640 = getelementptr inbounds %struct._libECPHandle, ptr %639, i32 0, i32 21
  %641 = load ptr, ptr %640, align 8, !tbaa !31
  %642 = load ptr, ptr %40, align 8, !tbaa !9
  %643 = getelementptr inbounds %struct._libECPHandle, ptr %642, i32 0, i32 22
  %644 = load i32, ptr %643, align 8, !tbaa !54
  %645 = load ptr, ptr %40, align 8, !tbaa !9
  %646 = getelementptr inbounds %struct._libECPHandle, ptr %645, i32 0, i32 25
  %647 = load ptr, ptr %646, align 8, !tbaa !32
  %648 = load ptr, ptr %40, align 8, !tbaa !9
  %649 = getelementptr inbounds %struct._libECPHandle, ptr %648, i32 0, i32 26
  %650 = load ptr, ptr %649, align 8, !tbaa !33
  %651 = load ptr, ptr %40, align 8, !tbaa !9
  %652 = getelementptr inbounds %struct._libECPHandle, ptr %651, i32 0, i32 24
  %653 = load i32, ptr %652, align 8, !tbaa !55
  %654 = load ptr, ptr %40, align 8, !tbaa !9
  %655 = getelementptr inbounds %struct._libECPHandle, ptr %654, i32 0, i32 17
  %656 = load ptr, ptr %655, align 8, !tbaa !27
  %657 = load ptr, ptr %40, align 8, !tbaa !9
  %658 = getelementptr inbounds %struct._libECPHandle, ptr %657, i32 0, i32 16
  %659 = load ptr, ptr %658, align 8, !tbaa !26
  call void @Type2_init(ptr noundef %629, ptr noundef %632, ptr noundef %635, ptr noundef %638, ptr noundef %641, i32 noundef %644, ptr noundef %647, ptr noundef %650, i32 noundef %653, ptr noundef %656, ptr noundef %659)
  %660 = load ptr, ptr %40, align 8, !tbaa !9
  store ptr %660, ptr %20, align 8
  store i32 1, ptr %52, align 4
  br label %661

661:                                              ; preds = %520, %518, %442
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  %662 = load ptr, ptr %20, align 8
  ret ptr %662
}

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #2

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #3

; Function Attrs: nounwind
declare double @log(double noundef) #4

declare ptr @newECP(i32 noundef, i32 noundef) #5

declare ptr @factorials(i32 noundef) #5

declare ptr @double_factorials(i32 noundef) #5

declare ptr @cartesianShellOrder(i32 noundef) #5

declare ptr @cartesianShellOrderIndex(i32 noundef, ptr noundef) #5

; Function Attrs: nounwind uwtable
declare dso_local void @libECP_free(ptr noundef) #0

declare ptr @TM_cart2sph(i32 noundef, ptr noundef, ptr noundef) #5

declare ptr @TM_poly2sph(ptr noundef, i32 noundef, ptr noundef, ptr noundef) #5

declare ptr @initGridGC_PSM92(i32 noundef, double noundef) #5

declare i32 @tabBesselFunction(ptr noundef, i32 noundef, i32 noundef, i32 noundef, double noundef) #5

declare ptr @Type1_new(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, double noundef) #5

declare void @Type1_init(ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, double noundef, double noundef) #5

declare ptr @Type2_new(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, double noundef) #5

declare void @Type2_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #5

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

attributes #0 = { 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind 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 = { nounwind allocsize(0,1) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { "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 }
attributes #7 = { nounwind allocsize(0) }
attributes #8 = { nounwind allocsize(0,1) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"_libECPHandle", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !6, i64 160, !6, i64 164, !6, i64 168, !10, i64 176, !10, i64 184, !6, i64 192, !12, i64 200, !12, i64 208}
!15 = !{!14, !10, i64 8}
!16 = !{!14, !10, i64 16}
!17 = !{!14, !10, i64 24}
!18 = !{!14, !10, i64 32}
!19 = !{!14, !10, i64 40}
!20 = !{!14, !10, i64 48}
!21 = !{!14, !10, i64 56}
!22 = !{!14, !6, i64 64}
!23 = !{!14, !10, i64 88}
!24 = !{!14, !10, i64 96}
!25 = !{!14, !10, i64 104}
!26 = !{!14, !10, i64 112}
!27 = !{!14, !10, i64 120}
!28 = !{!14, !10, i64 128}
!29 = !{!14, !10, i64 136}
!30 = !{!14, !10, i64 144}
!31 = !{!14, !10, i64 152}
!32 = !{!14, !10, i64 176}
!33 = !{!14, !10, i64 184}
!34 = !{!14, !6, i64 192}
!35 = !{!14, !12, i64 200}
!36 = !{!14, !12, i64 208}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = distinct !{!39, !38}
!40 = !{!41, !10, i64 0}
!41 = !{!"_ECP", !10, i64 0, !6, i64 8, !6, i64 12}
!42 = !{!43, !6, i64 0}
!43 = !{!"_ECPGauss", !6, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!44 = !{!43, !12, i64 24}
!45 = !{!43, !12, i64 16}
!46 = !{!43, !12, i64 8}
!47 = distinct !{!47, !38}
!48 = distinct !{!48, !38}
!49 = distinct !{!49, !38}
!50 = distinct !{!50, !38}
!51 = distinct !{!51, !38}
!52 = !{!14, !6, i64 80}
!53 = !{!14, !6, i64 164}
!54 = !{!14, !6, i64 160}
!55 = !{!14, !6, i64 168}


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

%struct._ECPGauss = type { i32, double, double, double }

; Function Attrs: nounwind uwtable
define dso_local noundef ptr @libECP_init(i32 noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5, ptr nocapture noundef readonly %6, ptr nocapture noundef readonly %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, i32 noundef %13, i32 noundef %14, ptr noundef %15, i32 noundef %16, double noundef %17, double noundef %18) local_unnamed_addr #0 {
  %20 = tail call noalias dereferenceable_or_null(216) ptr @malloc(i64 noundef 216) #7
  %21 = sext i32 %0 to i64
  %22 = tail call noalias ptr @calloc(i64 noundef %21, i64 noundef 8) #8
  store i32 %0, ptr %20, align 8, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %20, i64 8
  store ptr %1, ptr %23, align 8, !tbaa !12
  %24 = getelementptr inbounds i8, ptr %20, i64 16
  store ptr %22, ptr %24, align 8, !tbaa !13
  %25 = getelementptr inbounds i8, ptr %20, i64 24
  store ptr %8, ptr %25, align 8, !tbaa !14
  %26 = getelementptr inbounds i8, ptr %20, i64 32
  store ptr %9, ptr %26, align 8, !tbaa !15
  %27 = getelementptr inbounds i8, ptr %20, i64 40
  store ptr %10, ptr %27, align 8, !tbaa !16
  %28 = getelementptr inbounds i8, ptr %20, i64 48
  store ptr %11, ptr %28, align 8, !tbaa !17
  %29 = getelementptr inbounds i8, ptr %20, i64 56
  store ptr %12, ptr %29, align 8, !tbaa !18
  %30 = getelementptr inbounds i8, ptr %20, i64 64
  store i32 %13, ptr %30, align 8, !tbaa !19
  %31 = getelementptr inbounds i8, ptr %20, i64 88
  %32 = getelementptr inbounds i8, ptr %20, i64 96
  %33 = getelementptr inbounds i8, ptr %20, i64 104
  %34 = getelementptr inbounds i8, ptr %20, i64 112
  %35 = getelementptr inbounds i8, ptr %20, i64 120
  %36 = getelementptr inbounds i8, ptr %20, i64 128
  %37 = getelementptr inbounds i8, ptr %20, i64 136
  %38 = getelementptr inbounds i8, ptr %20, i64 144
  %39 = getelementptr inbounds i8, ptr %20, i64 152
  %40 = getelementptr inbounds i8, ptr %20, i64 176
  %41 = getelementptr inbounds i8, ptr %20, i64 184
  %42 = getelementptr inbounds i8, ptr %20, i64 192
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(72) %31, i8 0, i64 72, i1 false)
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %40, i8 0, i64 16, i1 false)
  store i32 %16, ptr %42, align 8, !tbaa !20
  %43 = getelementptr inbounds i8, ptr %20, i64 200
  store double %17, ptr %43, align 8, !tbaa !21
  %44 = getelementptr inbounds i8, ptr %20, i64 208
  store double %18, ptr %44, align 8, !tbaa !22
  %45 = tail call double @log(double noundef %18) #9
  %46 = fadd double %45, -2.000000e+00
  %47 = icmp sgt i32 %0, 0
  br i1 %47, label %.lr.ph.preheader, label %._crit_edge287.thread

.lr.ph.preheader:                                 ; preds = %19
  %wide.trip.count = zext nneg i32 %0 to i64
  br label %.lr.ph

.preheader262:                                    ; preds = %73
  br i1 %47, label %.lr.ph286.preheader, label %._crit_edge287.thread

.lr.ph286.preheader:                              ; preds = %.preheader262
  %wide.trip.count323 = zext nneg i32 %0 to i64
  br label %.lr.ph286

.lr.ph:                                           ; preds = %.lr.ph.preheader, %73
  %indvars.iv306 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next307, %73 ]
  %.0234269 = phi i32 [ 0, %.lr.ph.preheader ], [ %.1235, %73 ]
  %.0236268 = phi i32 [ 0, %.lr.ph.preheader ], [ %.2238, %73 ]
  %48 = getelementptr inbounds ptr, ptr %22, i64 %indvars.iv306
  store ptr null, ptr %48, align 8, !tbaa !23
  %49 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv306
  %50 = load i32, ptr %49, align 4, !tbaa !24
  %51 = icmp sgt i32 %50, 0
  br i1 %51, label %.preheader263.preheader, label %73

.preheader263.preheader:                          ; preds = %.lr.ph
  %52 = sext i32 %.0236268 to i64
  %53 = zext nneg i32 %50 to i64
  %min.iters.check = icmp ult i32 %50, 8
  br i1 %min.iters.check, label %.preheader263.preheader350, label %vector.ph

vector.ph:                                        ; preds = %.preheader263.preheader
  %n.vec = and i64 %53, 2147483640
  %ind.end = add nsw i64 %n.vec, %52
  %ind.end340 = trunc nuw nsw i64 %n.vec to i32
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %60, %vector.body ]
  %vec.phi342 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %61, %vector.body ]
  %vec.phi343 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %56, %vector.body ]
  %vec.phi344 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %57, %vector.body ]
  %offset.idx = add i64 %index, %52
  %54 = getelementptr inbounds i32, ptr %3, i64 %offset.idx
  %55 = getelementptr inbounds i8, ptr %54, i64 16
  %wide.load = load <4 x i32>, ptr %54, align 4, !tbaa !24
  %wide.load345 = load <4 x i32>, ptr %55, align 4, !tbaa !24
  %56 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi343, <4 x i32> %wide.load)
  %57 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi344, <4 x i32> %wide.load345)
  %58 = getelementptr inbounds i32, ptr %4, i64 %offset.idx
  %59 = getelementptr inbounds i8, ptr %58, i64 16
  %wide.load346 = load <4 x i32>, ptr %58, align 4, !tbaa !24
  %wide.load347 = load <4 x i32>, ptr %59, align 4, !tbaa !24
  %60 = add <4 x i32> %wide.load346, %vec.phi
  %61 = add <4 x i32> %wide.load347, %vec.phi342
  %index.next = add nuw i64 %index, 8
  %62 = icmp eq i64 %index.next, %n.vec
  br i1 %62, label %middle.block, label %vector.body, !llvm.loop !25

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %61, %60
  %63 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %rdx.minmax = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %56, <4 x i32> %57)
  %64 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax)
  %cmp.n = icmp eq i64 %n.vec, %53
  br i1 %cmp.n, label %.loopexit349, label %.preheader263.preheader350

.preheader263.preheader350:                       ; preds = %middle.block, %.preheader263.preheader
  %indvars.iv.ph = phi i64 [ %52, %.preheader263.preheader ], [ %ind.end, %middle.block ]
  %.0228267.ph = phi i32 [ 0, %.preheader263.preheader ], [ %ind.end340, %middle.block ]
  %.0239265.ph = phi i32 [ 0, %.preheader263.preheader ], [ %63, %middle.block ]
  %.0244264.ph = phi i32 [ 0, %.preheader263.preheader ], [ %64, %middle.block ]
  br label %.preheader263

.preheader263:                                    ; preds = %.preheader263.preheader350, %.preheader263
  %indvars.iv = phi i64 [ %indvars.iv.next, %.preheader263 ], [ %indvars.iv.ph, %.preheader263.preheader350 ]
  %.0228267 = phi i32 [ %70, %.preheader263 ], [ %.0228267.ph, %.preheader263.preheader350 ]
  %.0239265 = phi i32 [ %69, %.preheader263 ], [ %.0239265.ph, %.preheader263.preheader350 ]
  %.0244264 = phi i32 [ %spec.select, %.preheader263 ], [ %.0244264.ph, %.preheader263.preheader350 ]
  %65 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv
  %66 = load i32, ptr %65, align 4, !tbaa !24
  %spec.select = tail call i32 @llvm.smax.i32(i32 %.0244264, i32 %66)
  %67 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv
  %68 = load i32, ptr %67, align 4, !tbaa !24
  %69 = add nsw i32 %68, %.0239265
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %70 = add nuw nsw i32 %.0228267, 1
  %exitcond.not = icmp eq i32 %70, %50
  br i1 %exitcond.not, label %.loopexit349, label %.preheader263, !llvm.loop !29

.loopexit349:                                     ; preds = %.preheader263, %middle.block
  %spec.select.lcssa = phi i32 [ %64, %middle.block ], [ %spec.select, %.preheader263 ]
  %.lcssa = phi i32 [ %63, %middle.block ], [ %69, %.preheader263 ]
  %71 = add i32 %.0236268, %50
  %72 = tail call ptr @newECP(i32 noundef %spec.select.lcssa, i32 noundef %.lcssa) #9
  store ptr %72, ptr %48, align 8, !tbaa !23
  %spec.select258 = tail call i32 @llvm.smax.i32(i32 %spec.select.lcssa, i32 %.0234269)
  br label %73

73:                                               ; preds = %.loopexit349, %.lr.ph
  %.2238 = phi i32 [ %.0236268, %.lr.ph ], [ %71, %.loopexit349 ]
  %.1235 = phi i32 [ %.0234269, %.lr.ph ], [ %spec.select258, %.loopexit349 ]
  %indvars.iv.next307 = add nuw nsw i64 %indvars.iv306, 1
  %exitcond309.not = icmp eq i64 %indvars.iv.next307, %wide.trip.count
  br i1 %exitcond309.not, label %.preheader262, label %.lr.ph, !llvm.loop !30

.lr.ph286:                                        ; preds = %.lr.ph286.preheader, %.loopexit
  %indvars.iv320 = phi i64 [ 0, %.lr.ph286.preheader ], [ %indvars.iv.next321, %.loopexit ]
  %.1240284 = phi i32 [ 0, %.lr.ph286.preheader ], [ %.4243, %.loopexit ]
  %.2246283 = phi i32 [ 0, %.lr.ph286.preheader ], [ %.4248, %.loopexit ]
  %74 = getelementptr inbounds ptr, ptr %22, i64 %indvars.iv320
  %75 = load ptr, ptr %74, align 8, !tbaa !23
  %.not257 = icmp eq ptr %75, null
  br i1 %.not257, label %.loopexit, label %.preheader261

.preheader261:                                    ; preds = %.lr.ph286
  %76 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv320
  %77 = load i32, ptr %76, align 4, !tbaa !24
  %78 = icmp sgt i32 %77, 0
  br i1 %78, label %.preheader260.preheader, label %.loopexit

.preheader260.preheader:                          ; preds = %.preheader261
  %79 = sext i32 %.2246283 to i64
  br label %.preheader260

.preheader260:                                    ; preds = %.preheader260.preheader, %._crit_edge
  %80 = phi i32 [ %77, %.preheader260.preheader ], [ %104, %._crit_edge ]
  %indvars.iv317 = phi i64 [ %79, %.preheader260.preheader ], [ %indvars.iv.next318, %._crit_edge ]
  %.1229280 = phi i32 [ 0, %.preheader260.preheader ], [ %105, %._crit_edge ]
  %.3279 = phi i32 [ 0, %.preheader260.preheader ], [ %.4.lcssa, %._crit_edge ]
  %.2241278 = phi i32 [ %.1240284, %.preheader260.preheader ], [ %.3242.lcssa, %._crit_edge ]
  %81 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv317
  %82 = load i32, ptr %81, align 4, !tbaa !24
  %83 = icmp sgt i32 %82, 0
  br i1 %83, label %.lr.ph274, label %._crit_edge

.lr.ph274:                                        ; preds = %.preheader260
  %84 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv317
  %85 = load ptr, ptr %75, align 8, !tbaa !31
  %86 = sext i32 %.3279 to i64
  %87 = sext i32 %.2241278 to i64
  %.pre = load i32, ptr %84, align 4, !tbaa !24
  br label %88

88:                                               ; preds = %.lr.ph274, %88
  %indvars.iv312 = phi i64 [ %87, %.lr.ph274 ], [ %indvars.iv.next313, %88 ]
  %indvars.iv310 = phi i64 [ %86, %.lr.ph274 ], [ %indvars.iv.next311, %88 ]
  %.0249271 = phi i32 [ 0, %.lr.ph274 ], [ %99, %88 ]
  %89 = getelementptr inbounds %struct._ECPGauss, ptr %85, i64 %indvars.iv310
  store i32 %.pre, ptr %89, align 8, !tbaa !33
  %90 = getelementptr inbounds double, ptr %5, i64 %indvars.iv312
  %91 = load double, ptr %90, align 8, !tbaa !35
  %92 = getelementptr inbounds %struct._ECPGauss, ptr %85, i64 %indvars.iv310, i32 3
  store double %91, ptr %92, align 8, !tbaa !36
  %93 = getelementptr inbounds double, ptr %6, i64 %indvars.iv312
  %94 = load double, ptr %93, align 8, !tbaa !35
  %95 = getelementptr inbounds %struct._ECPGauss, ptr %85, i64 %indvars.iv310, i32 2
  store double %94, ptr %95, align 8, !tbaa !37
  %96 = getelementptr inbounds double, ptr %7, i64 %indvars.iv312
  %97 = load double, ptr %96, align 8, !tbaa !35
  %98 = getelementptr inbounds %struct._ECPGauss, ptr %85, i64 %indvars.iv310, i32 1
  store double %97, ptr %98, align 8, !tbaa !38
  %indvars.iv.next313 = add nsw i64 %indvars.iv312, 1
  %indvars.iv.next311 = add nsw i64 %indvars.iv310, 1
  %99 = add nuw nsw i32 %.0249271, 1
  %100 = load i32, ptr %81, align 4, !tbaa !24
  %101 = icmp slt i32 %99, %100
  br i1 %101, label %88, label %._crit_edge.loopexit, !llvm.loop !39

._crit_edge.loopexit:                             ; preds = %88
  %102 = trunc nsw i64 %indvars.iv.next313 to i32
  %103 = trunc nsw i64 %indvars.iv.next311 to i32
  %.pre334 = load i32, ptr %76, align 4, !tbaa !24
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader260
  %104 = phi i32 [ %80, %.preheader260 ], [ %.pre334, %._crit_edge.loopexit ]
  %.3242.lcssa = phi i32 [ %.2241278, %.preheader260 ], [ %102, %._crit_edge.loopexit ]
  %.4.lcssa = phi i32 [ %.3279, %.preheader260 ], [ %103, %._crit_edge.loopexit ]
  %indvars.iv.next318 = add nsw i64 %indvars.iv317, 1
  %105 = add nuw nsw i32 %.1229280, 1
  %106 = icmp slt i32 %105, %104
  br i1 %106, label %.preheader260, label %.loopexit.loopexit, !llvm.loop !40

.loopexit.loopexit:                               ; preds = %._crit_edge
  %107 = trunc nsw i64 %indvars.iv.next318 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %.preheader261, %.lr.ph286
  %.4248 = phi i32 [ %.2246283, %.lr.ph286 ], [ %.2246283, %.preheader261 ], [ %107, %.loopexit.loopexit ]
  %.4243 = phi i32 [ %.1240284, %.lr.ph286 ], [ %.1240284, %.preheader261 ], [ %.3242.lcssa, %.loopexit.loopexit ]
  %indvars.iv.next321 = add nuw nsw i64 %indvars.iv320, 1
  %exitcond324.not = icmp eq i64 %indvars.iv.next321, %wide.trip.count323
  br i1 %exitcond324.not, label %._crit_edge287, label %.lr.ph286, !llvm.loop !41

._crit_edge287.thread:                            ; preds = %.preheader262, %19
  %.0234.lcssa337.ph = phi i32 [ %.1235, %.preheader262 ], [ 0, %19 ]
  %108 = tail call noalias ptr @calloc(i64 noundef %21, i64 noundef 4) #8
  store ptr %108, ptr %31, align 8, !tbaa !42
  br label %._crit_edge298

._crit_edge287:                                   ; preds = %.loopexit
  %109 = tail call noalias ptr @calloc(i64 noundef %21, i64 noundef 4) #8
  store ptr %109, ptr %31, align 8, !tbaa !42
  br i1 %47, label %.preheader.preheader, label %._crit_edge298

.preheader.preheader:                             ; preds = %._crit_edge287
  %wide.trip.count332 = zext nneg i32 %0 to i64
  %invariant.gep = getelementptr i8, ptr %9, i64 4
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge292
  %indvars.iv329 = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next330, %._crit_edge292 ]
  %.0231296 = phi i32 [ 0, %.preheader.preheader ], [ %.1232.lcssa, %._crit_edge292 ]
  %.5295 = phi i32 [ 0, %.preheader.preheader ], [ %.6.lcssa, %._crit_edge292 ]
  %110 = getelementptr inbounds i32, ptr %8, i64 %indvars.iv329
  %111 = load i32, ptr %110, align 4, !tbaa !24
  %112 = icmp sgt i32 %111, 0
  br i1 %112, label %.lr.ph291, label %._crit_edge292

.lr.ph291:                                        ; preds = %.preheader
  %113 = getelementptr inbounds i32, ptr %109, i64 %indvars.iv329
  %.promoted = load i32, ptr %113, align 4, !tbaa !24
  %114 = sext i32 %.5295 to i64
  %xtraiter = and i32 %111, 1
  %115 = icmp eq i32 %111, 1
  br i1 %115, label %._crit_edge292.loopexit.unr-lcssa, label %.lr.ph291.new

.lr.ph291.new:                                    ; preds = %.lr.ph291
  %unroll_iter = and i32 %111, 2147483646
  br label %116

116:                                              ; preds = %127, %.lr.ph291.new
  %indvars.iv325 = phi i64 [ %114, %.lr.ph291.new ], [ %indvars.iv.next326.1, %127 ]
  %117 = phi i32 [ %.promoted, %.lr.ph291.new ], [ %128, %127 ]
  %.1232289 = phi i32 [ %.0231296, %.lr.ph291.new ], [ %spec.select259.1, %127 ]
  %niter = phi i32 [ 0, %.lr.ph291.new ], [ %niter.next.1, %127 ]
  %118 = getelementptr inbounds i32, ptr %9, i64 %indvars.iv325
  %119 = load i32, ptr %118, align 4, !tbaa !24
  %120 = icmp slt i32 %117, %119
  br i1 %120, label %121, label %122

121:                                              ; preds = %116
  store i32 %119, ptr %113, align 4, !tbaa !24
  br label %122

122:                                              ; preds = %121, %116
  %123 = phi i32 [ %119, %121 ], [ %117, %116 ]
  %spec.select259 = tail call i32 @llvm.smax.i32(i32 %.1232289, i32 %119)
  %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv325
  %124 = load i32, ptr %gep, align 4, !tbaa !24
  %125 = icmp slt i32 %123, %124
  br i1 %125, label %126, label %127

126:                                              ; preds = %122
  store i32 %124, ptr %113, align 4, !tbaa !24
  br label %127

127:                                              ; preds = %126, %122
  %128 = phi i32 [ %124, %126 ], [ %123, %122 ]
  %spec.select259.1 = tail call i32 @llvm.smax.i32(i32 %spec.select259, i32 %124)
  %indvars.iv.next326.1 = add nsw i64 %indvars.iv325, 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge292.loopexit.unr-lcssa, label %116, !llvm.loop !43

._crit_edge292.loopexit.unr-lcssa:                ; preds = %127, %.lr.ph291
  %spec.select259.lcssa.ph = phi i32 [ poison, %.lr.ph291 ], [ %spec.select259.1, %127 ]
  %indvars.iv.next326.lcssa.ph = phi i64 [ poison, %.lr.ph291 ], [ %indvars.iv.next326.1, %127 ]
  %indvars.iv325.unr = phi i64 [ %114, %.lr.ph291 ], [ %indvars.iv.next326.1, %127 ]
  %.unr = phi i32 [ %.promoted, %.lr.ph291 ], [ %128, %127 ]
  %.1232289.unr = phi i32 [ %.0231296, %.lr.ph291 ], [ %spec.select259.1, %127 ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge292.loopexit, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge292.loopexit.unr-lcssa
  %129 = getelementptr inbounds i32, ptr %9, i64 %indvars.iv325.unr
  %130 = load i32, ptr %129, align 4, !tbaa !24
  %131 = icmp slt i32 %.unr, %130
  br i1 %131, label %132, label %._crit_edge292.loopexit.epilog-lcssa

132:                                              ; preds = %.epil.preheader
  store i32 %130, ptr %113, align 4, !tbaa !24
  br label %._crit_edge292.loopexit.epilog-lcssa

._crit_edge292.loopexit.epilog-lcssa:             ; preds = %132, %.epil.preheader
  %spec.select259.epil = tail call i32 @llvm.smax.i32(i32 %.1232289.unr, i32 %130)
  %indvars.iv.next326.epil = add nsw i64 %indvars.iv325.unr, 1
  br label %._crit_edge292.loopexit

._crit_edge292.loopexit:                          ; preds = %._crit_edge292.loopexit.unr-lcssa, %._crit_edge292.loopexit.epilog-lcssa
  %spec.select259.lcssa = phi i32 [ %spec.select259.lcssa.ph, %._crit_edge292.loopexit.unr-lcssa ], [ %spec.select259.epil, %._crit_edge292.loopexit.epilog-lcssa ]
  %indvars.iv.next326.lcssa = phi i64 [ %indvars.iv.next326.lcssa.ph, %._crit_edge292.loopexit.unr-lcssa ], [ %indvars.iv.next326.epil, %._crit_edge292.loopexit.epilog-lcssa ]
  %133 = trunc nsw i64 %indvars.iv.next326.lcssa to i32
  br label %._crit_edge292

._crit_edge292:                                   ; preds = %._crit_edge292.loopexit, %.preheader
  %.6.lcssa = phi i32 [ %.5295, %.preheader ], [ %133, %._crit_edge292.loopexit ]
  %.1232.lcssa = phi i32 [ %.0231296, %.preheader ], [ %spec.select259.lcssa, %._crit_edge292.loopexit ]
  %indvars.iv.next330 = add nuw nsw i64 %indvars.iv329, 1
  %exitcond333.not = icmp eq i64 %indvars.iv.next330, %wide.trip.count332
  br i1 %exitcond333.not, label %._crit_edge298, label %.preheader, !llvm.loop !44

._crit_edge298:                                   ; preds = %._crit_edge292, %._crit_edge287.thread, %._crit_edge287
  %.0234.lcssa337339 = phi i32 [ %.1235, %._crit_edge287 ], [ %.0234.lcssa337.ph, %._crit_edge287.thread ], [ %.1235, %._crit_edge292 ]
  %.0231.lcssa = phi i32 [ 0, %._crit_edge287 ], [ 0, %._crit_edge287.thread ], [ %.1232.lcssa, %._crit_edge292 ]
  %134 = add nsw i32 %.0231.lcssa, %13
  %135 = add nsw i32 %.0234.lcssa337339, -1
  %136 = add nsw i32 %135, %134
  %137 = getelementptr inbounds i8, ptr %20, i64 80
  store i32 %136, ptr %137, align 8, !tbaa !45
  %138 = add nsw i32 %136, %134
  %139 = shl nsw i32 %138, 1
  %140 = or disjoint i32 %139, 1
  %141 = tail call ptr @factorials(i32 noundef %140) #9
  store ptr %141, ptr %36, align 8, !tbaa !46
  %142 = load i32, ptr %137, align 8, !tbaa !45
  %143 = add nsw i32 %142, %134
  %144 = shl nsw i32 %143, 1
  %145 = or disjoint i32 %144, 1
  %146 = tail call ptr @double_factorials(i32 noundef %145) #9
  store ptr %146, ptr %37, align 8, !tbaa !47
  %147 = getelementptr inbounds i8, ptr %20, i64 164
  store i32 0, ptr %147, align 4, !tbaa !48
  %148 = icmp eq ptr %15, null
  br i1 %148, label %149, label %160

149:                                              ; preds = %._crit_edge298
  store i32 1, ptr %147, align 4, !tbaa !48
  %150 = load i32, ptr %137, align 8, !tbaa !45
  %151 = add nsw i32 %150, %134
  %152 = tail call ptr @cartesianShellOrder(i32 noundef %151) #9
  store ptr %152, ptr %38, align 8, !tbaa !49
  %153 = load i32, ptr %137, align 8, !tbaa !45
  %154 = add nsw i32 %153, %134
  %155 = tail call ptr @cartesianShellOrderIndex(i32 noundef %154, ptr noundef %152) #9
  store ptr %155, ptr %39, align 8, !tbaa !50
  %156 = load i32, ptr %137, align 8, !tbaa !45
  %157 = add i32 %134, 1
  %158 = add i32 %157, %156
  %159 = getelementptr inbounds i8, ptr %20, i64 160
  store i32 %158, ptr %159, align 8, !tbaa !51
  br label %168

160:                                              ; preds = %._crit_edge298
  %161 = load i32, ptr %137, align 8, !tbaa !45
  %162 = add nsw i32 %161, %134
  %.not = icmp slt i32 %162, %14
  br i1 %.not, label %164, label %163

163:                                              ; preds = %160
  tail call void @libECP_free(ptr noundef nonnull %20)
  br label %234

164:                                              ; preds = %160
  store ptr %15, ptr %38, align 8, !tbaa !49
  %165 = tail call ptr @cartesianShellOrderIndex(i32 noundef %14, ptr noundef nonnull %15) #9
  store ptr %165, ptr %39, align 8, !tbaa !50
  %166 = add nsw i32 %14, 1
  %167 = getelementptr inbounds i8, ptr %20, i64 160
  store i32 %166, ptr %167, align 8, !tbaa !51
  %.pre335 = load i32, ptr %137, align 8, !tbaa !45
  br label %168

168:                                              ; preds = %164, %149
  %169 = phi i32 [ %.pre335, %164 ], [ %156, %149 ]
  %170 = add nsw i32 %169, %134
  %171 = getelementptr inbounds i8, ptr %20, i64 168
  store i32 %170, ptr %171, align 8, !tbaa !52
  %172 = load ptr, ptr %38, align 8, !tbaa !49
  %173 = load ptr, ptr %36, align 8, !tbaa !46
  %174 = tail call ptr @TM_cart2sph(i32 noundef %170, ptr noundef %172, ptr noundef %173) #9
  store ptr %174, ptr %40, align 8, !tbaa !53
  %175 = load i32, ptr %171, align 8, !tbaa !52
  %176 = load ptr, ptr %38, align 8, !tbaa !49
  %177 = load ptr, ptr %37, align 8, !tbaa !47
  %178 = tail call ptr @TM_poly2sph(ptr noundef %174, i32 noundef %175, ptr noundef %176, ptr noundef %177) #9
  store ptr %178, ptr %41, align 8, !tbaa !54
  %179 = load i32, ptr %42, align 8, !tbaa !20
  %180 = load double, ptr %43, align 8, !tbaa !21
  %181 = tail call ptr @initGridGC_PSM92(i32 noundef %179, double noundef %180) #9
  store ptr %181, ptr %35, align 8, !tbaa !55
  %182 = tail call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40) #7
  store ptr %182, ptr %34, align 8, !tbaa !56
  %183 = add nuw i32 %.0234.lcssa337339, 6
  %184 = add i32 %183, %134
  %185 = load double, ptr %44, align 8, !tbaa !22
  %186 = tail call i32 @tabBesselFunction(ptr noundef %182, i32 noundef %184, i32 noundef 1600, i32 noundef 200, double noundef %185) #9
  %.not256 = icmp eq i32 %186, 0
  br i1 %.not256, label %188, label %187

187:                                              ; preds = %168
  tail call void @libECP_free(ptr noundef nonnull %20)
  br label %234

188:                                              ; preds = %168
  %189 = load i32, ptr %20, align 8, !tbaa !5
  %190 = load ptr, ptr %23, align 8, !tbaa !12
  %191 = load ptr, ptr %24, align 8, !tbaa !13
  %192 = load ptr, ptr %25, align 8, !tbaa !14
  %193 = load ptr, ptr %26, align 8, !tbaa !15
  %194 = load ptr, ptr %27, align 8, !tbaa !16
  %195 = load ptr, ptr %28, align 8, !tbaa !17
  %196 = load ptr, ptr %29, align 8, !tbaa !18
  %197 = load i32, ptr %30, align 8, !tbaa !19
  %198 = load double, ptr %43, align 8, !tbaa !21
  %199 = tail call ptr @Type1_new(i32 noundef %189, ptr noundef %190, ptr noundef %191, ptr noundef %192, ptr noundef %193, ptr noundef %194, ptr noundef %195, ptr noundef %196, i32 noundef %197, double noundef %198) #9
  store ptr %199, ptr %32, align 8, !tbaa !57
  %200 = load i32, ptr %137, align 8, !tbaa !45
  %201 = load ptr, ptr %36, align 8, !tbaa !46
  %202 = load ptr, ptr %37, align 8, !tbaa !47
  %203 = load ptr, ptr %38, align 8, !tbaa !49
  %204 = load ptr, ptr %39, align 8, !tbaa !50
  %205 = getelementptr inbounds i8, ptr %20, i64 160
  %206 = load i32, ptr %205, align 8, !tbaa !51
  %207 = load ptr, ptr %41, align 8, !tbaa !54
  %208 = load i32, ptr %171, align 8, !tbaa !52
  %209 = load ptr, ptr %34, align 8, !tbaa !56
  %210 = load i32, ptr %42, align 8, !tbaa !20
  %211 = load ptr, ptr %35, align 8, !tbaa !55
  %212 = load double, ptr %44, align 8, !tbaa !22
  tail call void @Type1_init(ptr noundef %199, i32 noundef %200, ptr noundef %201, ptr noundef %202, ptr noundef %203, ptr noundef %204, i32 noundef %206, ptr noundef %207, i32 noundef %208, ptr noundef %209, i32 noundef %210, ptr noundef %211, double noundef %212, double noundef %46) #9
  %213 = load i32, ptr %20, align 8, !tbaa !5
  %214 = load ptr, ptr %23, align 8, !tbaa !12
  %215 = load ptr, ptr %24, align 8, !tbaa !13
  %216 = load ptr, ptr %25, align 8, !tbaa !14
  %217 = load ptr, ptr %26, align 8, !tbaa !15
  %218 = load ptr, ptr %27, align 8, !tbaa !16
  %219 = load ptr, ptr %28, align 8, !tbaa !17
  %220 = load ptr, ptr %29, align 8, !tbaa !18
  %221 = load i32, ptr %30, align 8, !tbaa !19
  %222 = load double, ptr %43, align 8, !tbaa !21
  %223 = tail call ptr @Type2_new(i32 noundef %213, ptr noundef %214, ptr noundef %215, ptr noundef %216, ptr noundef %217, ptr noundef %218, ptr noundef %219, ptr noundef %220, i32 noundef %221, double noundef %222) #9
  store ptr %223, ptr %33, align 8, !tbaa !58
  %224 = load ptr, ptr %36, align 8, !tbaa !46
  %225 = load ptr, ptr %37, align 8, !tbaa !47
  %226 = load ptr, ptr %38, align 8, !tbaa !49
  %227 = load ptr, ptr %39, align 8, !tbaa !50
  %228 = load i32, ptr %205, align 8, !tbaa !51
  %229 = load ptr, ptr %40, align 8, !tbaa !53
  %230 = load ptr, ptr %41, align 8, !tbaa !54
  %231 = load i32, ptr %171, align 8, !tbaa !52
  %232 = load ptr, ptr %35, align 8, !tbaa !55
  %233 = load ptr, ptr %34, align 8, !tbaa !56
  tail call void @Type2_init(ptr noundef %223, ptr noundef %224, ptr noundef %225, ptr noundef %226, ptr noundef %227, i32 noundef %228, ptr noundef %229, ptr noundef %230, i32 noundef %231, ptr noundef %232, ptr noundef %233) #9
  br label %234

234:                                              ; preds = %188, %187, %163
  %.0 = phi ptr [ null, %187 ], [ %20, %188 ], [ null, %163 ]
  ret ptr %.0
}

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #2

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

declare ptr @newECP(i32 noundef, i32 noundef) local_unnamed_addr #4

declare ptr @factorials(i32 noundef) local_unnamed_addr #4

declare ptr @double_factorials(i32 noundef) local_unnamed_addr #4

declare ptr @cartesianShellOrder(i32 noundef) local_unnamed_addr #4

declare ptr @cartesianShellOrderIndex(i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local void @libECP_free(ptr noundef) local_unnamed_addr #0

declare ptr @TM_cart2sph(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare ptr @TM_poly2sph(ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare ptr @initGridGC_PSM92(i32 noundef, double noundef) local_unnamed_addr #4

declare i32 @tabBesselFunction(ptr noundef, i32 noundef, i32 noundef, i32 noundef, double noundef) local_unnamed_addr #4

declare ptr @Type1_new(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, double noundef) local_unnamed_addr #4

declare void @Type1_init(ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, double noundef, double noundef) local_unnamed_addr #4

declare ptr @Type2_new(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, double noundef) local_unnamed_addr #4

declare void @Type2_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.smax.v4i32(<4 x i32>) #5

attributes #0 = { 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 nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nounwind allocsize(0) }
attributes #8 = { nounwind allocsize(0,1) }
attributes #9 = { 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, !7, i64 0}
!6 = !{!"_libECPHandle", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !7, i64 160, !7, i64 164, !7, i64 168, !10, i64 176, !10, i64 184, !7, i64 192, !11, i64 200, !11, i64 208}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!6, !10, i64 8}
!13 = !{!6, !10, i64 16}
!14 = !{!6, !10, i64 24}
!15 = !{!6, !10, i64 32}
!16 = !{!6, !10, i64 40}
!17 = !{!6, !10, i64 48}
!18 = !{!6, !10, i64 56}
!19 = !{!6, !7, i64 64}
!20 = !{!6, !7, i64 192}
!21 = !{!6, !11, i64 200}
!22 = !{!6, !11, i64 208}
!23 = !{!10, !10, i64 0}
!24 = !{!7, !7, i64 0}
!25 = distinct !{!25, !26, !27, !28}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !26, !28, !27}
!30 = distinct !{!30, !26}
!31 = !{!32, !10, i64 0}
!32 = !{!"_ECP", !10, i64 0, !7, i64 8, !7, i64 12}
!33 = !{!34, !7, i64 0}
!34 = !{!"_ECPGauss", !7, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!35 = !{!11, !11, i64 0}
!36 = !{!34, !11, i64 24}
!37 = !{!34, !11, i64 16}
!38 = !{!34, !11, i64 8}
!39 = distinct !{!39, !26}
!40 = distinct !{!40, !26}
!41 = distinct !{!41, !26}
!42 = !{!6, !10, i64 88}
!43 = distinct !{!43, !26}
!44 = distinct !{!44, !26}
!45 = !{!6, !7, i64 80}
!46 = !{!6, !10, i64 128}
!47 = !{!6, !10, i64 136}
!48 = !{!6, !7, i64 164}
!49 = !{!6, !10, i64 144}
!50 = !{!6, !10, i64 152}
!51 = !{!6, !7, i64 160}
!52 = !{!6, !7, i64 168}
!53 = !{!6, !10, i64 176}
!54 = !{!6, !10, i64 184}
!55 = !{!6, !10, i64 120}
!56 = !{!6, !10, i64 112}
!57 = !{!6, !10, i64 96}
!58 = !{!6, !10, i64 104}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass