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

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

; Function Attrs: nounwind uwtable
define dso_local ptr @TM_cart2sph(i32 noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %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
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  store ptr %2, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 0, ptr %24, align 4, !tbaa !5
  %25 = load i32, ptr %4, align 4, !tbaa !5
  %26 = mul nsw i32 3, %25
  %27 = add nsw i32 %26, 2
  %28 = sitofp i32 %27 to double
  %29 = load ptr, ptr %6, align 8, !tbaa !9
  %30 = load i32, ptr %4, align 4, !tbaa !5
  %31 = add nsw i32 %30, 3
  %32 = sext i32 %31 to i64
  %33 = getelementptr inbounds double, ptr %29, i64 %32
  %34 = load double, ptr %33, align 8, !tbaa !11
  %35 = fmul double %28, %34
  %36 = load ptr, ptr %6, align 8, !tbaa !9
  %37 = load i32, ptr %4, align 4, !tbaa !5
  %38 = sext i32 %37 to i64
  %39 = getelementptr inbounds double, ptr %36, i64 %38
  %40 = load double, ptr %39, align 8, !tbaa !11
  %41 = fmul double 1.200000e+01, %40
  %42 = fdiv double %35, %41
  %43 = fptosi double %42 to i32
  %44 = sext i32 %43 to i64
  %45 = call noalias ptr @calloc(i64 noundef %44, i64 noundef 8) #7
  store ptr %45, ptr %22, align 8, !tbaa !9
  store ptr %45, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %46

46:                                               ; preds = %336, %3
  %47 = load i32, ptr %7, align 4, !tbaa !5
  %48 = load i32, ptr %4, align 4, !tbaa !5
  %49 = icmp sle i32 %47, %48
  br i1 %49, label %50, label %339

50:                                               ; preds = %46
  %51 = load i32, ptr %7, align 4, !tbaa !5
  %52 = sub nsw i32 0, %51
  store i32 %52, ptr %8, align 4, !tbaa !5
  br label %53

53:                                               ; preds = %332, %50
  %54 = load i32, ptr %8, align 4, !tbaa !5
  %55 = load i32, ptr %7, align 4, !tbaa !5
  %56 = icmp sle i32 %54, %55
  br i1 %56, label %57, label %335

57:                                               ; preds = %53
  %58 = load i32, ptr %8, align 4, !tbaa !5
  %59 = call i32 @llvm.abs.i32(i32 %58, i1 true)
  store i32 %59, ptr %9, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %60

60:                                               ; preds = %328, %57
  %61 = load i32, ptr %14, align 4, !tbaa !5
  %62 = load i32, ptr %7, align 4, !tbaa !5
  %63 = add nsw i32 %62, 1
  %64 = load i32, ptr %7, align 4, !tbaa !5
  %65 = add nsw i32 %64, 2
  %66 = mul nsw i32 %63, %65
  %67 = sdiv i32 %66, 2
  %68 = icmp slt i32 %61, %67
  br i1 %68, label %69, label %331

69:                                               ; preds = %60
  %70 = load i32, ptr %7, align 4, !tbaa !5
  %71 = sub nsw i32 %70, 1
  %72 = add nsw i32 %71, 1
  %73 = load i32, ptr %7, align 4, !tbaa !5
  %74 = sub nsw i32 %73, 1
  %75 = add nsw i32 %74, 2
  %76 = mul nsw i32 %72, %75
  %77 = load i32, ptr %7, align 4, !tbaa !5
  %78 = sub nsw i32 %77, 1
  %79 = add nsw i32 %78, 3
  %80 = mul nsw i32 %76, %79
  %81 = sdiv i32 %80, 6
  %82 = load i32, ptr %14, align 4, !tbaa !5
  %83 = add nsw i32 %81, %82
  %84 = mul nsw i32 %83, 3
  store i32 %84, ptr %13, align 4, !tbaa !5
  %85 = load ptr, ptr %5, align 8, !tbaa !9
  %86 = load i32, ptr %13, align 4, !tbaa !5
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds i32, ptr %85, i64 %87
  %89 = load i32, ptr %88, align 4, !tbaa !5
  store i32 %89, ptr %10, align 4, !tbaa !5
  %90 = load ptr, ptr %5, align 8, !tbaa !9
  %91 = load i32, ptr %13, align 4, !tbaa !5
  %92 = add nsw i32 %91, 1
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds i32, ptr %90, i64 %93
  %95 = load i32, ptr %94, align 4, !tbaa !5
  store i32 %95, ptr %11, align 4, !tbaa !5
  %96 = load ptr, ptr %5, align 8, !tbaa !9
  %97 = load i32, ptr %13, align 4, !tbaa !5
  %98 = add nsw i32 %97, 2
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds i32, ptr %96, i64 %99
  %101 = load i32, ptr %100, align 4, !tbaa !5
  store i32 %101, ptr %12, align 4, !tbaa !5
  %102 = load i32, ptr %10, align 4, !tbaa !5
  %103 = load i32, ptr %11, align 4, !tbaa !5
  %104 = add nsw i32 %102, %103
  %105 = load i32, ptr %9, align 4, !tbaa !5
  %106 = sub nsw i32 %104, %105
  store i32 %106, ptr %16, align 4, !tbaa !5
  %107 = load i32, ptr %16, align 4, !tbaa !5
  %108 = icmp slt i32 %107, 0
  br i1 %108, label %113, label %109

109:                                              ; preds = %69
  %110 = load i32, ptr %16, align 4, !tbaa !5
  %111 = srem i32 %110, 2
  %112 = icmp eq i32 %111, 1
  br i1 %112, label %113, label %115

113:                                              ; preds = %109, %69
  %114 = load ptr, ptr %23, align 8, !tbaa !9
  store double 0.000000e+00, ptr %114, align 8, !tbaa !11
  br label %323

115:                                              ; preds = %109
  %116 = load i32, ptr %16, align 4, !tbaa !5
  %117 = sdiv i32 %116, 2
  store i32 %117, ptr %16, align 4, !tbaa !5
  store double 0.000000e+00, ptr %20, align 8, !tbaa !11
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %118

118:                                              ; preds = %237, %115
  %119 = load i32, ptr %15, align 4, !tbaa !5
  %120 = load i32, ptr %7, align 4, !tbaa !5
  %121 = load i32, ptr %9, align 4, !tbaa !5
  %122 = sub nsw i32 %120, %121
  %123 = sdiv i32 %122, 2
  %124 = icmp sle i32 %119, %123
  br i1 %124, label %125, label %240

125:                                              ; preds = %118
  store double 0.000000e+00, ptr %21, align 8, !tbaa !11
  store i32 0, ptr %17, align 4, !tbaa !5
  br label %126

126:                                              ; preds = %196, %125
  %127 = load i32, ptr %17, align 4, !tbaa !5
  %128 = load i32, ptr %16, align 4, !tbaa !5
  %129 = icmp sle i32 %127, %128
  br i1 %129, label %130, label %199

130:                                              ; preds = %126
  store double 0.000000e+00, ptr %19, align 8, !tbaa !11
  %131 = load i32, ptr %8, align 4, !tbaa !5
  %132 = icmp slt i32 %131, 0
  br i1 %132, label %133, label %140

133:                                              ; preds = %130
  %134 = load i32, ptr %9, align 4, !tbaa !5
  %135 = load i32, ptr %10, align 4, !tbaa !5
  %136 = sub nsw i32 %134, %135
  %137 = call i32 @llvm.abs.i32(i32 %136, i1 true)
  %138 = srem i32 %137, 2
  %139 = icmp eq i32 %138, 1
  br i1 %139, label %150, label %140

140:                                              ; preds = %133, %130
  %141 = load i32, ptr %8, align 4, !tbaa !5
  %142 = icmp sgt i32 %141, 0
  br i1 %142, label %143, label %163

143:                                              ; preds = %140
  %144 = load i32, ptr %9, align 4, !tbaa !5
  %145 = load i32, ptr %10, align 4, !tbaa !5
  %146 = sub nsw i32 %144, %145
  %147 = call i32 @llvm.abs.i32(i32 %146, i1 true)
  %148 = srem i32 %147, 2
  %149 = icmp eq i32 %148, 0
  br i1 %149, label %150, label %163

150:                                              ; preds = %143, %133
  %151 = load i32, ptr %9, align 4, !tbaa !5
  %152 = load i32, ptr %10, align 4, !tbaa !5
  %153 = sub nsw i32 %151, %152
  %154 = load i32, ptr %17, align 4, !tbaa !5
  %155 = mul nsw i32 2, %154
  %156 = add nsw i32 %153, %155
  %157 = sdiv i32 %156, 2
  store i32 %157, ptr %18, align 4, !tbaa !5
  %158 = load i32, ptr %18, align 4, !tbaa !5
  %159 = sitofp i32 %158 to double
  %160 = call double @pow(double noundef -1.000000e+00, double noundef %159) #6
  %161 = call double @sqrt(double noundef 2.000000e+00) #6
  %162 = fmul double %160, %161
  store double %162, ptr %19, align 8, !tbaa !11
  br label %180

163:                                              ; preds = %143, %140
  %164 = load i32, ptr %8, align 4, !tbaa !5
  %165 = icmp eq i32 %164, 0
  br i1 %165, label %166, label %179

166:                                              ; preds = %163
  %167 = load i32, ptr %10, align 4, !tbaa !5
  %168 = srem i32 %167, 2
  %169 = icmp eq i32 %168, 0
  br i1 %169, label %170, label %179

170:                                              ; preds = %166
  %171 = load i32, ptr %10, align 4, !tbaa !5
  %172 = sub nsw i32 0, %171
  %173 = sdiv i32 %172, 2
  %174 = load i32, ptr %17, align 4, !tbaa !5
  %175 = add nsw i32 %173, %174
  store i32 %175, ptr %18, align 4, !tbaa !5
  %176 = load i32, ptr %18, align 4, !tbaa !5
  %177 = sitofp i32 %176 to double
  %178 = call double @pow(double noundef -1.000000e+00, double noundef %177) #6
  store double %178, ptr %19, align 8, !tbaa !11
  br label %179

179:                                              ; preds = %170, %166, %163
  br label %180

180:                                              ; preds = %179, %150
  %181 = load i32, ptr %16, align 4, !tbaa !5
  %182 = load i32, ptr %17, align 4, !tbaa !5
  %183 = load ptr, ptr %6, align 8, !tbaa !9
  %184 = call double @n_over_k(i32 noundef %181, i32 noundef %182, ptr noundef %183)
  %185 = load i32, ptr %9, align 4, !tbaa !5
  %186 = load i32, ptr %10, align 4, !tbaa !5
  %187 = load i32, ptr %17, align 4, !tbaa !5
  %188 = mul nsw i32 2, %187
  %189 = sub nsw i32 %186, %188
  %190 = load ptr, ptr %6, align 8, !tbaa !9
  %191 = call double @n_over_k(i32 noundef %185, i32 noundef %189, ptr noundef %190)
  %192 = fmul double %184, %191
  %193 = load double, ptr %19, align 8, !tbaa !11
  %194 = load double, ptr %21, align 8, !tbaa !11
  %195 = call double @llvm.fmuladd.f64(double %192, double %193, double %194)
  store double %195, ptr %21, align 8, !tbaa !11
  br label %196

196:                                              ; preds = %180
  %197 = load i32, ptr %17, align 4, !tbaa !5
  %198 = add nsw i32 %197, 1
  store i32 %198, ptr %17, align 4, !tbaa !5
  br label %126, !llvm.loop !13

199:                                              ; preds = %126
  %200 = load i32, ptr %7, align 4, !tbaa !5
  %201 = load i32, ptr %15, align 4, !tbaa !5
  %202 = load ptr, ptr %6, align 8, !tbaa !9
  %203 = call double @n_over_k(i32 noundef %200, i32 noundef %201, ptr noundef %202)
  %204 = load i32, ptr %15, align 4, !tbaa !5
  %205 = load i32, ptr %16, align 4, !tbaa !5
  %206 = load ptr, ptr %6, align 8, !tbaa !9
  %207 = call double @n_over_k(i32 noundef %204, i32 noundef %205, ptr noundef %206)
  %208 = fmul double %203, %207
  %209 = load i32, ptr %15, align 4, !tbaa !5
  %210 = sitofp i32 %209 to double
  %211 = call double @pow(double noundef -1.000000e+00, double noundef %210) #6
  %212 = fmul double %208, %211
  %213 = load ptr, ptr %6, align 8, !tbaa !9
  %214 = load i32, ptr %7, align 4, !tbaa !5
  %215 = mul nsw i32 2, %214
  %216 = load i32, ptr %15, align 4, !tbaa !5
  %217 = mul nsw i32 2, %216
  %218 = sub nsw i32 %215, %217
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds double, ptr %213, i64 %219
  %221 = load double, ptr %220, align 8, !tbaa !11
  %222 = fmul double %212, %221
  %223 = load ptr, ptr %6, align 8, !tbaa !9
  %224 = load i32, ptr %7, align 4, !tbaa !5
  %225 = load i32, ptr %9, align 4, !tbaa !5
  %226 = sub nsw i32 %224, %225
  %227 = load i32, ptr %15, align 4, !tbaa !5
  %228 = mul nsw i32 2, %227
  %229 = sub nsw i32 %226, %228
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds double, ptr %223, i64 %230
  %232 = load double, ptr %231, align 8, !tbaa !11
  %233 = fdiv double %222, %232
  %234 = load double, ptr %21, align 8, !tbaa !11
  %235 = load double, ptr %20, align 8, !tbaa !11
  %236 = call double @llvm.fmuladd.f64(double %233, double %234, double %235)
  store double %236, ptr %20, align 8, !tbaa !11
  br label %237

237:                                              ; preds = %199
  %238 = load i32, ptr %15, align 4, !tbaa !5
  %239 = add nsw i32 %238, 1
  store i32 %239, ptr %15, align 4, !tbaa !5
  br label %118, !llvm.loop !15

240:                                              ; preds = %118
  %241 = load ptr, ptr %6, align 8, !tbaa !9
  %242 = load i32, ptr %10, align 4, !tbaa !5
  %243 = mul nsw i32 2, %242
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds double, ptr %241, i64 %244
  %246 = load double, ptr %245, align 8, !tbaa !11
  %247 = load ptr, ptr %6, align 8, !tbaa !9
  %248 = load i32, ptr %11, align 4, !tbaa !5
  %249 = mul nsw i32 2, %248
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds double, ptr %247, i64 %250
  %252 = load double, ptr %251, align 8, !tbaa !11
  %253 = fmul double %246, %252
  %254 = load ptr, ptr %6, align 8, !tbaa !9
  %255 = load i32, ptr %12, align 4, !tbaa !5
  %256 = mul nsw i32 2, %255
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds double, ptr %254, i64 %257
  %259 = load double, ptr %258, align 8, !tbaa !11
  %260 = fmul double %253, %259
  %261 = load ptr, ptr %6, align 8, !tbaa !9
  %262 = load i32, ptr %7, align 4, !tbaa !5
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds double, ptr %261, i64 %263
  %265 = load double, ptr %264, align 8, !tbaa !11
  %266 = fmul double %260, %265
  %267 = load ptr, ptr %6, align 8, !tbaa !9
  %268 = load i32, ptr %7, align 4, !tbaa !5
  %269 = load i32, ptr %9, align 4, !tbaa !5
  %270 = sub nsw i32 %268, %269
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds double, ptr %267, i64 %271
  %273 = load double, ptr %272, align 8, !tbaa !11
  %274 = fmul double %266, %273
  %275 = load ptr, ptr %6, align 8, !tbaa !9
  %276 = load i32, ptr %7, align 4, !tbaa !5
  %277 = mul nsw i32 2, %276
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds double, ptr %275, i64 %278
  %280 = load double, ptr %279, align 8, !tbaa !11
  %281 = load ptr, ptr %6, align 8, !tbaa !9
  %282 = load i32, ptr %10, align 4, !tbaa !5
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds double, ptr %281, i64 %283
  %285 = load double, ptr %284, align 8, !tbaa !11
  %286 = fmul double %280, %285
  %287 = load ptr, ptr %6, align 8, !tbaa !9
  %288 = load i32, ptr %11, align 4, !tbaa !5
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds double, ptr %287, i64 %289
  %291 = load double, ptr %290, align 8, !tbaa !11
  %292 = fmul double %286, %291
  %293 = load ptr, ptr %6, align 8, !tbaa !9
  %294 = load i32, ptr %12, align 4, !tbaa !5
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds double, ptr %293, i64 %295
  %297 = load double, ptr %296, align 8, !tbaa !11
  %298 = fmul double %292, %297
  %299 = load ptr, ptr %6, align 8, !tbaa !9
  %300 = load i32, ptr %7, align 4, !tbaa !5
  %301 = load i32, ptr %9, align 4, !tbaa !5
  %302 = add nsw i32 %300, %301
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds double, ptr %299, i64 %303
  %305 = load double, ptr %304, align 8, !tbaa !11
  %306 = fmul double %298, %305
  %307 = fdiv double %274, %306
  %308 = call double @sqrt(double noundef %307) #6
  %309 = fmul double %308, 1.000000e+00
  %310 = load i32, ptr %7, align 4, !tbaa !5
  %311 = sitofp i32 %310 to double
  %312 = call double @pow(double noundef 2.000000e+00, double noundef %311) #6
  %313 = load ptr, ptr %6, align 8, !tbaa !9
  %314 = load i32, ptr %7, align 4, !tbaa !5
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds double, ptr %313, i64 %315
  %317 = load double, ptr %316, align 8, !tbaa !11
  %318 = fmul double %312, %317
  %319 = fdiv double %309, %318
  %320 = load double, ptr %20, align 8, !tbaa !11
  %321 = fmul double %319, %320
  %322 = load ptr, ptr %23, align 8, !tbaa !9
  store double %321, ptr %322, align 8, !tbaa !11
  br label %323

323:                                              ; preds = %240, %113
  %324 = load ptr, ptr %23, align 8, !tbaa !9
  %325 = getelementptr inbounds double, ptr %324, i32 1
  store ptr %325, ptr %23, align 8, !tbaa !9
  %326 = load i32, ptr %24, align 4, !tbaa !5
  %327 = add nsw i32 %326, 1
  store i32 %327, ptr %24, align 4, !tbaa !5
  br label %328

328:                                              ; preds = %323
  %329 = load i32, ptr %14, align 4, !tbaa !5
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr %14, align 4, !tbaa !5
  br label %60, !llvm.loop !16

331:                                              ; preds = %60
  br label %332

332:                                              ; preds = %331
  %333 = load i32, ptr %8, align 4, !tbaa !5
  %334 = add nsw i32 %333, 1
  store i32 %334, ptr %8, align 4, !tbaa !5
  br label %53, !llvm.loop !17

335:                                              ; preds = %53
  br label %336

336:                                              ; preds = %335
  %337 = load i32, ptr %7, align 4, !tbaa !5
  %338 = add nsw i32 %337, 1
  store i32 %338, ptr %7, align 4, !tbaa !5
  br label %46, !llvm.loop !18

339:                                              ; preds = %46
  %340 = load ptr, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  ret ptr %340
}

; 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,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #2

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

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

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

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

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

; 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,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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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,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 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}


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

; Function Attrs: nounwind uwtable
define dso_local noalias noundef ptr @TM_cart2sph(i32 noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = mul nsw i32 %0, 3
  %5 = add nsw i32 %4, 2
  %6 = sitofp i32 %5 to double
  %7 = sext i32 %0 to i64
  %8 = getelementptr double, ptr %2, i64 %7
  %9 = getelementptr i8, ptr %8, i64 24
  %10 = load double, ptr %9, align 8, !tbaa !5
  %11 = fmul double %10, %6
  %12 = load double, ptr %8, align 8, !tbaa !5
  %13 = fmul double %12, 1.200000e+01
  %14 = fdiv double %11, %13
  %15 = fptosi double %14 to i32
  %16 = sext i32 %15 to i64
  %17 = tail call noalias ptr @calloc(i64 noundef %16, i64 noundef 8) #6
  %.not197 = icmp slt i32 %0, 0
  br i1 %.not197, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %3
  %18 = add nuw i32 %0, 1
  %wide.trip.count248 = zext i32 %18 to i64
  br label %.lr.ph165

.lr.ph165:                                        ; preds = %._crit_edge166, %.lr.ph.preheader
  %indvars.iv245 = phi i64 [ 0, %.lr.ph.preheader ], [ %19, %._crit_edge166 ]
  %indvars.iv242 = phi i32 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next243, %._crit_edge166 ]
  %.0110200 = phi ptr [ %17, %.lr.ph.preheader ], [ %.1111.lcssa, %._crit_edge166 ]
  %indvars247 = trunc i64 %indvars.iv245 to i32
  %19 = add nuw nsw i64 %indvars.iv245, 1
  %20 = add nuw nsw i32 %indvars247, 2
  %21 = trunc nsw i64 %19 to i32
  %22 = mul nuw nsw i32 %20, %21
  %.not202 = icmp ult i32 %22, 2
  %23 = getelementptr inbounds double, ptr %2, i64 %indvars.iv245
  %.idx = shl nsw i64 %indvars.iv245, 4
  %24 = getelementptr inbounds i8, ptr %2, i64 %.idx
  %25 = uitofp nneg i32 %indvars247 to double
  br i1 %.not202, label %._crit_edge166, label %.lr.ph.us.preheader

.lr.ph.us.preheader:                              ; preds = %.lr.ph165
  %factor.op.mul = mul i32 %20, %indvars247
  %.reass = mul i32 %factor.op.mul, %21
  %26 = udiv i32 %.reass, 6
  %27 = lshr i32 %22, 1
  %28 = zext nneg i32 %26 to i64
  %29 = zext nneg i32 %27 to i64
  %30 = trunc i64 %indvars.iv245 to i32
  %31 = sub i32 0, %30
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %._crit_edge155.us
  %indvars.iv = phi i32 [ %indvars247, %.lr.ph.us.preheader ], [ %indvars.iv.next, %._crit_edge155.us ]
  %.1111162.us = phi ptr [ %.0110200, %.lr.ph.us.preheader ], [ %.us-phi158.us, %._crit_edge155.us ]
  %.0120161.us = phi i32 [ %31, %.lr.ph.us.preheader ], [ %194, %._crit_edge155.us ]
  %smax229 = tail call i32 @llvm.smax.i32(i32 %.0120161.us, i32 %indvars.iv)
  %32 = tail call i32 @llvm.abs.i32(i32 %.0120161.us, i1 true)
  %33 = sub nsw i32 %indvars247, %32
  %.fr = freeze i32 %33
  %.not126145.us = icmp slt i32 %.fr, -1
  %34 = icmp slt i32 %.0120161.us, 0
  %.not133.us = icmp eq i32 %.0120161.us, 0
  %35 = sext i32 %.fr to i64
  %36 = getelementptr inbounds double, ptr %2, i64 %35
  %37 = add nuw nsw i32 %32, %indvars247
  %38 = zext nneg i32 %37 to i64
  %39 = getelementptr inbounds double, ptr %2, i64 %38
  br i1 %.not126145.us, label %.lr.ph.split.us.us, label %.lr.ph.split.us194.preheader

.lr.ph.split.us194.preheader:                     ; preds = %.lr.ph.us
  %40 = sdiv i32 %.fr, 2
  %41 = add nuw nsw i32 %40, 1
  %wide.trip.count = zext i32 %41 to i64
  %wide.trip.count234 = zext i32 %41 to i64
  br label %.lr.ph.split.us194

.lr.ph.split.us194:                               ; preds = %.lr.ph.split.us194.preheader, %68
  %indvars.iv236 = phi i64 [ 0, %.lr.ph.split.us194.preheader ], [ %indvars.iv.next237, %68 ]
  %.2112152.us170 = phi ptr [ %.1111162.us, %.lr.ph.split.us194.preheader ], [ %69, %68 ]
  %42 = add nuw nsw i64 %indvars.iv236, %28
  %.idx250 = mul i64 %42, 12
  %43 = getelementptr inbounds i8, ptr %1, i64 %.idx250
  %44 = load i32, ptr %43, align 4, !tbaa !9
  %45 = getelementptr inbounds i8, ptr %43, i64 4
  %46 = load i32, ptr %45, align 4, !tbaa !9
  %47 = getelementptr inbounds i8, ptr %43, i64 8
  %48 = load i32, ptr %47, align 4, !tbaa !9
  %49 = sub i32 %44, %32
  %50 = add i32 %49, %46
  %51 = and i32 %50, -2147483647
  %or.cond.us172 = icmp eq i32 %51, 0
  br i1 %or.cond.us172, label %.preheader.lr.ph.us, label %68

.preheader.lr.ph.us:                              ; preds = %.lr.ph.split.us194
  %52 = lshr exact i32 %50, 1
  %53 = sub i32 %32, %44
  %54 = and i32 %53, 1
  %55 = icmp eq i32 %54, 0
  %56 = and i32 %44, 1
  %57 = icmp eq i32 %56, 0
  %.neg.us = ashr exact i32 %44, 1
  %58 = sub i32 %44, %smax229
  %59 = add i32 %58, %46
  %60 = lshr i32 %59, 1
  br i1 %34, label %.preheader.us.us, label %.preheader.us175

.thread131.us:                                    ; preds = %.preheader.split.split.us178, %.thread131.us
  %.0114137.us = phi double [ %66, %.thread131.us ], [ 0.000000e+00, %.preheader.split.split.us178 ]
  %.0117136.us = phi i32 [ %67, %.thread131.us ], [ 0, %.preheader.split.split.us178 ]
  %61 = tail call double @n_over_k(i32 noundef %52, i32 noundef %.0117136.us, ptr noundef %2) #7
  %62 = shl nuw nsw i32 %.0117136.us, 1
  %63 = sub nsw i32 %44, %62
  %64 = tail call double @n_over_k(i32 noundef %32, i32 noundef %63, ptr noundef %2) #7
  %65 = fmul double %61, %64
  %66 = tail call double @llvm.fmuladd.f64(double %65, double 0.000000e+00, double %.0114137.us)
  %67 = add nuw i32 %.0117136.us, 1
  %exitcond.not = icmp eq i32 %.0117136.us, %60
  br i1 %exitcond.not, label %.split.us, label %.thread131.us, !llvm.loop !11

68:                                               ; preds = %._crit_edge.us, %.lr.ph.split.us194
  %storemerge.us174 = phi double [ %157, %._crit_edge.us ], [ 0.000000e+00, %.lr.ph.split.us194 ]
  store double %storemerge.us174, ptr %.2112152.us170, align 8, !tbaa !5
  %69 = getelementptr inbounds i8, ptr %.2112152.us170, i64 8
  %indvars.iv.next237 = add nuw nsw i64 %indvars.iv236, 1
  %70 = icmp ult i64 %indvars.iv.next237, %29
  br i1 %70, label %.lr.ph.split.us194, label %._crit_edge155.us, !llvm.loop !13

.preheader.us175:                                 ; preds = %.preheader.lr.ph.us, %.split.us
  %indvars.iv223 = phi i64 [ %indvars.iv.next224, %.split.us ], [ 0, %.preheader.lr.ph.us ]
  %.0115147.us176 = phi double [ %99, %.split.us ], [ 0.000000e+00, %.preheader.lr.ph.us ]
  br i1 %.not133.us, label %.preheader.split.split.us.us, label %.preheader.split.split.us178

.preheader.split.split.us178:                     ; preds = %.preheader.us175
  br i1 %55, label %.thread131.us.us, label %.thread131.us

.thread131.us.us:                                 ; preds = %.preheader.split.split.us178, %.thread131.us.us
  %.0114137.us.us = phi double [ %81, %.thread131.us.us ], [ 0.000000e+00, %.preheader.split.split.us178 ]
  %.0117136.us.us = phi i32 [ %82, %.thread131.us.us ], [ 0, %.preheader.split.split.us178 ]
  %71 = shl nuw nsw i32 %.0117136.us.us, 1
  %72 = add nsw i32 %53, %71
  %73 = ashr exact i32 %72, 1
  %74 = sitofp i32 %73 to double
  %75 = tail call double @pow(double noundef -1.000000e+00, double noundef %74) #7
  %76 = fmul double %75, 0x3FF6A09E667F3BCD
  %77 = tail call double @n_over_k(i32 noundef %52, i32 noundef %.0117136.us.us, ptr noundef %2) #7
  %78 = sub nsw i32 %44, %71
  %79 = tail call double @n_over_k(i32 noundef %32, i32 noundef %78, ptr noundef %2) #7
  %80 = fmul double %77, %79
  %81 = tail call double @llvm.fmuladd.f64(double %80, double %76, double %.0114137.us.us)
  %82 = add nuw i32 %.0117136.us.us, 1
  %exitcond220.not = icmp eq i32 %.0117136.us.us, %60
  br i1 %exitcond220.not, label %.split.us, label %.thread131.us.us, !llvm.loop !11

.split.us:                                        ; preds = %.thread131.us, %.thread131.us.us, %.thread131.us140.us
  %.us-phi144.us = phi double [ %109, %.thread131.us140.us ], [ %81, %.thread131.us.us ], [ %66, %.thread131.us ]
  %83 = trunc nuw nsw i64 %indvars.iv223 to i32
  %84 = tail call double @n_over_k(i32 noundef %indvars247, i32 noundef %83, ptr noundef %2) #7
  %85 = tail call double @n_over_k(i32 noundef %83, i32 noundef %52, ptr noundef %2) #7
  %86 = fmul double %84, %85
  %87 = uitofp nneg i32 %83 to double
  %88 = tail call double @pow(double noundef -1.000000e+00, double noundef %87) #7
  %89 = fmul double %86, %88
  %90 = shl nuw nsw i64 %indvars.iv223, 1
  %91 = sub nsw i64 %indvars.iv245, %indvars.iv223
  %.idx251 = shl nsw i64 %91, 4
  %92 = getelementptr inbounds i8, ptr %2, i64 %.idx251
  %93 = load double, ptr %92, align 8, !tbaa !5
  %94 = fmul double %89, %93
  %95 = sub nsw i64 %35, %90
  %96 = getelementptr inbounds double, ptr %2, i64 %95
  %97 = load double, ptr %96, align 8, !tbaa !5
  %98 = fdiv double %94, %97
  %99 = tail call double @llvm.fmuladd.f64(double %98, double %.us-phi144.us, double %.0115147.us176)
  %indvars.iv.next224 = add nuw nsw i64 %indvars.iv223, 1
  %exitcond226.not = icmp eq i64 %indvars.iv.next224, %wide.trip.count
  br i1 %exitcond226.not, label %._crit_edge.us, label %.preheader.us175, !llvm.loop !14

.preheader.split.split.us.us:                     ; preds = %.preheader.us175, %.thread131.us140.us
  %.0114137.us138.us = phi double [ %109, %.thread131.us140.us ], [ 0.000000e+00, %.preheader.us175 ]
  %.0117136.us139.us = phi i32 [ %110, %.thread131.us140.us ], [ 0, %.preheader.us175 ]
  br i1 %57, label %100, label %.thread131.us140.us

100:                                              ; preds = %.preheader.split.split.us.us
  %101 = sub i32 %.0117136.us139.us, %.neg.us
  %102 = sitofp i32 %101 to double
  %103 = tail call double @pow(double noundef -1.000000e+00, double noundef %102) #7
  br label %.thread131.us140.us

.thread131.us140.us:                              ; preds = %100, %.preheader.split.split.us.us
  %.0116.us141.us = phi double [ %103, %100 ], [ 0.000000e+00, %.preheader.split.split.us.us ]
  %104 = tail call double @n_over_k(i32 noundef %52, i32 noundef %.0117136.us139.us, ptr noundef %2) #7
  %105 = shl nuw nsw i32 %.0117136.us139.us, 1
  %106 = sub nsw i32 %44, %105
  %107 = tail call double @n_over_k(i32 noundef %32, i32 noundef %106, ptr noundef %2) #7
  %108 = fmul double %104, %107
  %109 = tail call double @llvm.fmuladd.f64(double %108, double %.0116.us141.us, double %.0114137.us138.us)
  %110 = add nuw i32 %.0117136.us139.us, 1
  %exitcond222.not = icmp eq i32 %.0117136.us139.us, %60
  br i1 %exitcond222.not, label %.split.us, label %.preheader.split.split.us.us, !llvm.loop !11

._crit_edge.us:                                   ; preds = %.split.us, %.split.us.us.us
  %.us-phi149.us = phi double [ %186, %.split.us.us.us ], [ %99, %.split.us ]
  %111 = shl nsw i32 %44, 1
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds double, ptr %2, i64 %112
  %114 = load double, ptr %113, align 8, !tbaa !5
  %115 = shl nsw i32 %46, 1
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds double, ptr %2, i64 %116
  %118 = load double, ptr %117, align 8, !tbaa !5
  %119 = shl nsw i32 %48, 1
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds double, ptr %2, i64 %120
  %122 = load double, ptr %121, align 8, !tbaa !5
  %123 = load double, ptr %23, align 8, !tbaa !5
  %124 = load double, ptr %36, align 8, !tbaa !5
  %125 = load double, ptr %24, align 8, !tbaa !5
  %126 = sext i32 %44 to i64
  %127 = getelementptr inbounds double, ptr %2, i64 %126
  %128 = load double, ptr %127, align 8, !tbaa !5
  %129 = sext i32 %46 to i64
  %130 = getelementptr inbounds double, ptr %2, i64 %129
  %131 = load double, ptr %130, align 8, !tbaa !5
  %132 = sext i32 %48 to i64
  %133 = getelementptr inbounds double, ptr %2, i64 %132
  %134 = load double, ptr %133, align 8, !tbaa !5
  %135 = load double, ptr %39, align 8, !tbaa !5
  %136 = insertelement <2 x double> poison, double %114, i64 0
  %137 = insertelement <2 x double> %136, double %125, i64 1
  %138 = insertelement <2 x double> poison, double %118, i64 0
  %139 = insertelement <2 x double> %138, double %128, i64 1
  %140 = fmul <2 x double> %137, %139
  %141 = insertelement <2 x double> poison, double %122, i64 0
  %142 = insertelement <2 x double> %141, double %131, i64 1
  %143 = fmul <2 x double> %140, %142
  %144 = insertelement <2 x double> poison, double %123, i64 0
  %145 = insertelement <2 x double> %144, double %134, i64 1
  %146 = fmul <2 x double> %143, %145
  %147 = insertelement <2 x double> poison, double %124, i64 0
  %148 = insertelement <2 x double> %147, double %135, i64 1
  %149 = fmul <2 x double> %146, %148
  %150 = extractelement <2 x double> %149, i64 0
  %151 = extractelement <2 x double> %149, i64 1
  %152 = fdiv double %150, %151
  %153 = tail call double @sqrt(double noundef %152) #7
  %exp2.us183 = tail call double @exp2(double %25) #7
  %154 = load double, ptr %23, align 8, !tbaa !5
  %155 = fmul double %exp2.us183, %154
  %156 = fdiv double %153, %155
  %157 = fmul double %.us-phi149.us, %156
  br label %68

.preheader.us.us:                                 ; preds = %.preheader.lr.ph.us, %.split.us.us.us
  %indvars.iv231 = phi i64 [ %indvars.iv.next232, %.split.us.us.us ], [ 0, %.preheader.lr.ph.us ]
  %.0115147.us.us = phi double [ %186, %.split.us.us.us ], [ 0.000000e+00, %.preheader.lr.ph.us ]
  br i1 %55, label %.thread131.us.us.us.us, label %.thread131.us.us.us184

.thread131.us.us.us184:                           ; preds = %.preheader.us.us, %.thread131.us.us.us184
  %.0114137.us.us.us185 = phi double [ %168, %.thread131.us.us.us184 ], [ 0.000000e+00, %.preheader.us.us ]
  %.0117136.us.us.us186 = phi i32 [ %169, %.thread131.us.us.us184 ], [ 0, %.preheader.us.us ]
  %158 = shl nuw nsw i32 %.0117136.us.us.us186, 1
  %159 = add nsw i32 %53, %158
  %160 = sdiv i32 %159, 2
  %161 = sitofp i32 %160 to double
  %162 = tail call double @pow(double noundef -1.000000e+00, double noundef %161) #7
  %163 = fmul double %162, 0x3FF6A09E667F3BCD
  %164 = tail call double @n_over_k(i32 noundef %52, i32 noundef %.0117136.us.us.us186, ptr noundef %2) #7
  %165 = sub nsw i32 %44, %158
  %166 = tail call double @n_over_k(i32 noundef %32, i32 noundef %165, ptr noundef %2) #7
  %167 = fmul double %164, %166
  %168 = tail call double @llvm.fmuladd.f64(double %167, double %163, double %.0114137.us.us.us185)
  %169 = add nuw i32 %.0117136.us.us.us186, 1
  %exitcond228.not = icmp eq i32 %.0117136.us.us.us186, %60
  br i1 %exitcond228.not, label %.split.us.us.us, label %.thread131.us.us.us184, !llvm.loop !11

.split.us.us.us:                                  ; preds = %.thread131.us.us.us184, %.thread131.us.us.us.us
  %.us-phi.us = phi double [ %192, %.thread131.us.us.us.us ], [ %168, %.thread131.us.us.us184 ]
  %170 = trunc nuw nsw i64 %indvars.iv231 to i32
  %171 = tail call double @n_over_k(i32 noundef %indvars247, i32 noundef %170, ptr noundef %2) #7
  %172 = tail call double @n_over_k(i32 noundef %170, i32 noundef %52, ptr noundef %2) #7
  %173 = fmul double %171, %172
  %174 = uitofp nneg i32 %170 to double
  %175 = tail call double @pow(double noundef -1.000000e+00, double noundef %174) #7
  %176 = fmul double %173, %175
  %177 = shl nuw nsw i64 %indvars.iv231, 1
  %178 = sub nsw i64 %indvars.iv245, %indvars.iv231
  %.idx252 = shl nsw i64 %178, 4
  %179 = getelementptr inbounds i8, ptr %2, i64 %.idx252
  %180 = load double, ptr %179, align 8, !tbaa !5
  %181 = fmul double %176, %180
  %182 = sub nsw i64 %35, %177
  %183 = getelementptr inbounds double, ptr %2, i64 %182
  %184 = load double, ptr %183, align 8, !tbaa !5
  %185 = fdiv double %181, %184
  %186 = tail call double @llvm.fmuladd.f64(double %185, double %.us-phi.us, double %.0115147.us.us)
  %indvars.iv.next232 = add nuw nsw i64 %indvars.iv231, 1
  %exitcond235.not = icmp eq i64 %indvars.iv.next232, %wide.trip.count234
  br i1 %exitcond235.not, label %._crit_edge.us, label %.preheader.us.us, !llvm.loop !14

.thread131.us.us.us.us:                           ; preds = %.preheader.us.us, %.thread131.us.us.us.us
  %.0114137.us.us.us.us = phi double [ %192, %.thread131.us.us.us.us ], [ 0.000000e+00, %.preheader.us.us ]
  %.0117136.us.us.us.us = phi i32 [ %193, %.thread131.us.us.us.us ], [ 0, %.preheader.us.us ]
  %187 = tail call double @n_over_k(i32 noundef %52, i32 noundef %.0117136.us.us.us.us, ptr noundef %2) #7
  %188 = shl nuw nsw i32 %.0117136.us.us.us.us, 1
  %189 = sub nsw i32 %44, %188
  %190 = tail call double @n_over_k(i32 noundef %32, i32 noundef %189, ptr noundef %2) #7
  %191 = fmul double %187, %190
  %192 = tail call double @llvm.fmuladd.f64(double %191, double 0.000000e+00, double %.0114137.us.us.us.us)
  %193 = add nuw i32 %.0117136.us.us.us.us, 1
  %exitcond230.not = icmp eq i32 %.0117136.us.us.us.us, %60
  br i1 %exitcond230.not, label %.split.us.us.us, label %.thread131.us.us.us.us, !llvm.loop !11

._crit_edge155.us:                                ; preds = %68, %253
  %.us-phi158.us = phi ptr [ %254, %253 ], [ %69, %68 ]
  %194 = add i32 %.0120161.us, 1
  %indvars.iv.next = add i32 %indvars.iv, -1
  %exitcond244.not = icmp eq i32 %194, %indvars.iv242
  br i1 %exitcond244.not, label %._crit_edge166, label %.lr.ph.us, !llvm.loop !15

.lr.ph.split.us.us:                               ; preds = %.lr.ph.us, %253
  %indvars.iv239 = phi i64 [ %indvars.iv.next240, %253 ], [ 0, %.lr.ph.us ]
  %.2112152.us.us = phi ptr [ %254, %253 ], [ %.1111162.us, %.lr.ph.us ]
  %195 = add nuw nsw i64 %indvars.iv239, %28
  %.idx253 = mul i64 %195, 12
  %196 = getelementptr inbounds i8, ptr %1, i64 %.idx253
  %197 = load i32, ptr %196, align 4, !tbaa !9
  %198 = getelementptr inbounds i8, ptr %196, i64 4
  %199 = load i32, ptr %198, align 4, !tbaa !9
  %200 = sub i32 %197, %32
  %201 = add i32 %200, %199
  %202 = and i32 %201, -2147483647
  %or.cond.us.us = icmp eq i32 %202, 0
  br i1 %or.cond.us.us, label %203, label %253

203:                                              ; preds = %.lr.ph.split.us.us
  %204 = getelementptr inbounds i8, ptr %196, i64 8
  %205 = load i32, ptr %204, align 4, !tbaa !9
  %206 = shl nsw i32 %197, 1
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds double, ptr %2, i64 %207
  %209 = load double, ptr %208, align 8, !tbaa !5
  %210 = shl nsw i32 %199, 1
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds double, ptr %2, i64 %211
  %213 = load double, ptr %212, align 8, !tbaa !5
  %214 = shl nsw i32 %205, 1
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds double, ptr %2, i64 %215
  %217 = load double, ptr %216, align 8, !tbaa !5
  %218 = load double, ptr %23, align 8, !tbaa !5
  %219 = load double, ptr %36, align 8, !tbaa !5
  %220 = load double, ptr %24, align 8, !tbaa !5
  %221 = sext i32 %197 to i64
  %222 = getelementptr inbounds double, ptr %2, i64 %221
  %223 = load double, ptr %222, align 8, !tbaa !5
  %224 = sext i32 %199 to i64
  %225 = getelementptr inbounds double, ptr %2, i64 %224
  %226 = load double, ptr %225, align 8, !tbaa !5
  %227 = sext i32 %205 to i64
  %228 = getelementptr inbounds double, ptr %2, i64 %227
  %229 = load double, ptr %228, align 8, !tbaa !5
  %230 = load double, ptr %39, align 8, !tbaa !5
  %231 = insertelement <2 x double> poison, double %209, i64 0
  %232 = insertelement <2 x double> %231, double %220, i64 1
  %233 = insertelement <2 x double> poison, double %213, i64 0
  %234 = insertelement <2 x double> %233, double %223, i64 1
  %235 = fmul <2 x double> %232, %234
  %236 = insertelement <2 x double> poison, double %217, i64 0
  %237 = insertelement <2 x double> %236, double %226, i64 1
  %238 = fmul <2 x double> %235, %237
  %239 = insertelement <2 x double> poison, double %218, i64 0
  %240 = insertelement <2 x double> %239, double %229, i64 1
  %241 = fmul <2 x double> %238, %240
  %242 = insertelement <2 x double> poison, double %219, i64 0
  %243 = insertelement <2 x double> %242, double %230, i64 1
  %244 = fmul <2 x double> %241, %243
  %245 = extractelement <2 x double> %244, i64 0
  %246 = extractelement <2 x double> %244, i64 1
  %247 = fdiv double %245, %246
  %248 = tail call double @sqrt(double noundef %247) #7
  %exp2.us.us = tail call double @exp2(double %25) #7
  %249 = load double, ptr %23, align 8, !tbaa !5
  %250 = fmul double %exp2.us.us, %249
  %251 = fdiv double %248, %250
  %252 = fmul double %251, 0.000000e+00
  br label %253

253:                                              ; preds = %203, %.lr.ph.split.us.us
  %storemerge.us.us = phi double [ %252, %203 ], [ 0.000000e+00, %.lr.ph.split.us.us ]
  store double %storemerge.us.us, ptr %.2112152.us.us, align 8, !tbaa !5
  %254 = getelementptr inbounds i8, ptr %.2112152.us.us, i64 8
  %indvars.iv.next240 = add nuw nsw i64 %indvars.iv239, 1
  %255 = icmp ult i64 %indvars.iv.next240, %29
  br i1 %255, label %.lr.ph.split.us.us, label %._crit_edge155.us, !llvm.loop !13

._crit_edge166:                                   ; preds = %._crit_edge155.us, %.lr.ph165
  %.1111.lcssa = phi ptr [ %.0110200, %.lr.ph165 ], [ %.us-phi158.us, %._crit_edge155.us ]
  %indvars.iv.next243 = add nuw i32 %indvars.iv242, 1
  %exitcond249.not = icmp eq i64 %19, %wide.trip.count248
  br i1 %exitcond249.not, label %._crit_edge, label %.lr.ph165, !llvm.loop !16

._crit_edge:                                      ; preds = %._crit_edge166, %3
  ret ptr %17
}

; 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 #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #2

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

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

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

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

declare double @exp2(double) local_unnamed_addr

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, 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,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 #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { nounwind allocsize(0,1) }
attributes #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = distinct !{!14, !12}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}


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