; LLVM IR from szad670401/HyperLandmark :: Prj-Win/src (hog)

; 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.VlHog_ = type { i32, i64, i64, i32, i32, ptr, ptr, i64, ptr, ptr, ptr, ptr, i64, i64 }

@.str = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [76 x i8], align 1
@__PRETTY_FUNCTION__.vl_hog_new = external hidden unnamed_addr constant [50 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local ptr @vl_hog_new(i32 noundef %0, i64 noundef %1, i32 noundef %2) #0 {
  %4 = alloca i32, align 4
  %5 = alloca i64, align 8
  %6 = alloca i32, align 4
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca double, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  store i32 %0, ptr %4, align 4, !tbaa !5
  store i64 %1, ptr %5, align 8, !tbaa !9
  store i32 %2, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %32 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 104) #8
  store ptr %32, ptr %9, align 8, !tbaa !11
  %33 = load i64, ptr %5, align 8, !tbaa !9
  %34 = icmp uge i64 %33, 1
  br i1 %34, label %35, label %36

35:                                               ; preds = %3
  br label %37

36:                                               ; preds = %3
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 181, ptr noundef @__PRETTY_FUNCTION__.vl_hog_new) #9
  unreachable

37:                                               ; preds = %35
  %38 = load i32, ptr %4, align 4, !tbaa !5
  %39 = load ptr, ptr %9, align 8, !tbaa !11
  %40 = getelementptr inbounds %struct.VlHog_, ptr %39, i32 0, i32 0
  store i32 %38, ptr %40, align 8, !tbaa !13
  %41 = load i64, ptr %5, align 8, !tbaa !9
  %42 = load ptr, ptr %9, align 8, !tbaa !11
  %43 = getelementptr inbounds %struct.VlHog_, ptr %42, i32 0, i32 2
  store i64 %41, ptr %43, align 8, !tbaa !15
  %44 = load ptr, ptr %9, align 8, !tbaa !11
  %45 = getelementptr inbounds %struct.VlHog_, ptr %44, i32 0, i32 7
  store i64 21, ptr %45, align 8, !tbaa !16
  %46 = load i32, ptr %6, align 4, !tbaa !5
  %47 = load ptr, ptr %9, align 8, !tbaa !11
  %48 = getelementptr inbounds %struct.VlHog_, ptr %47, i32 0, i32 3
  store i32 %46, ptr %48, align 8, !tbaa !17
  %49 = load ptr, ptr %9, align 8, !tbaa !11
  %50 = getelementptr inbounds %struct.VlHog_, ptr %49, i32 0, i32 4
  store i32 0, ptr %50, align 4, !tbaa !18
  %51 = load ptr, ptr %9, align 8, !tbaa !11
  %52 = getelementptr inbounds %struct.VlHog_, ptr %51, i32 0, i32 2
  %53 = load i64, ptr %52, align 8, !tbaa !15
  %54 = mul i64 4, %53
  %55 = call noalias ptr @malloc(i64 noundef %54) #10
  %56 = load ptr, ptr %9, align 8, !tbaa !11
  %57 = getelementptr inbounds %struct.VlHog_, ptr %56, i32 0, i32 8
  store ptr %55, ptr %57, align 8, !tbaa !19
  %58 = load ptr, ptr %9, align 8, !tbaa !11
  %59 = getelementptr inbounds %struct.VlHog_, ptr %58, i32 0, i32 2
  %60 = load i64, ptr %59, align 8, !tbaa !15
  %61 = mul i64 4, %60
  %62 = call noalias ptr @malloc(i64 noundef %61) #10
  %63 = load ptr, ptr %9, align 8, !tbaa !11
  %64 = getelementptr inbounds %struct.VlHog_, ptr %63, i32 0, i32 9
  store ptr %62, ptr %64, align 8, !tbaa !20
  store i64 0, ptr %7, align 8, !tbaa !9
  br label %65

65:                                               ; preds = %121, %37
  %66 = load i64, ptr %7, align 8, !tbaa !9
  %67 = load ptr, ptr %9, align 8, !tbaa !11
  %68 = getelementptr inbounds %struct.VlHog_, ptr %67, i32 0, i32 2
  %69 = load i64, ptr %68, align 8, !tbaa !15
  %70 = trunc i64 %69 to i32
  %71 = sext i32 %70 to i64
  %72 = icmp slt i64 %66, %71
  br i1 %72, label %73, label %124

73:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %74 = load i64, ptr %7, align 8, !tbaa !9
  %75 = sitofp i64 %74 to double
  %76 = fmul double %75, 0x400921FB54442D18
  %77 = load ptr, ptr %9, align 8, !tbaa !11
  %78 = getelementptr inbounds %struct.VlHog_, ptr %77, i32 0, i32 2
  %79 = load i64, ptr %78, align 8, !tbaa !15
  %80 = uitofp i64 %79 to double
  %81 = fdiv double %76, %80
  store double %81, ptr %10, align 8, !tbaa !21
  %82 = load ptr, ptr %9, align 8, !tbaa !11
  %83 = getelementptr inbounds %struct.VlHog_, ptr %82, i32 0, i32 3
  %84 = load i32, ptr %83, align 8, !tbaa !17
  %85 = icmp ne i32 %84, 0
  br i1 %85, label %103, label %86

86:                                               ; preds = %73
  %87 = load double, ptr %10, align 8, !tbaa !21
  %88 = call double @cos(double noundef %87) #7
  %89 = fptrunc double %88 to float
  %90 = load ptr, ptr %9, align 8, !tbaa !11
  %91 = getelementptr inbounds %struct.VlHog_, ptr %90, i32 0, i32 8
  %92 = load ptr, ptr %91, align 8, !tbaa !19
  %93 = load i64, ptr %7, align 8, !tbaa !9
  %94 = getelementptr inbounds float, ptr %92, i64 %93
  store float %89, ptr %94, align 4, !tbaa !23
  %95 = load double, ptr %10, align 8, !tbaa !21
  %96 = call double @sin(double noundef %95) #7
  %97 = fptrunc double %96 to float
  %98 = load ptr, ptr %9, align 8, !tbaa !11
  %99 = getelementptr inbounds %struct.VlHog_, ptr %98, i32 0, i32 9
  %100 = load ptr, ptr %99, align 8, !tbaa !20
  %101 = load i64, ptr %7, align 8, !tbaa !9
  %102 = getelementptr inbounds float, ptr %100, i64 %101
  store float %97, ptr %102, align 4, !tbaa !23
  br label %120

103:                                              ; preds = %73
  %104 = load double, ptr %10, align 8, !tbaa !21
  %105 = call double @sin(double noundef %104) #7
  %106 = fptrunc double %105 to float
  %107 = load ptr, ptr %9, align 8, !tbaa !11
  %108 = getelementptr inbounds %struct.VlHog_, ptr %107, i32 0, i32 8
  %109 = load ptr, ptr %108, align 8, !tbaa !19
  %110 = load i64, ptr %7, align 8, !tbaa !9
  %111 = getelementptr inbounds float, ptr %109, i64 %110
  store float %106, ptr %111, align 4, !tbaa !23
  %112 = load double, ptr %10, align 8, !tbaa !21
  %113 = call double @cos(double noundef %112) #7
  %114 = fptrunc double %113 to float
  %115 = load ptr, ptr %9, align 8, !tbaa !11
  %116 = getelementptr inbounds %struct.VlHog_, ptr %115, i32 0, i32 9
  %117 = load ptr, ptr %116, align 8, !tbaa !20
  %118 = load i64, ptr %7, align 8, !tbaa !9
  %119 = getelementptr inbounds float, ptr %117, i64 %118
  store float %114, ptr %119, align 4, !tbaa !23
  br label %120

120:                                              ; preds = %103, %86
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  br label %121

121:                                              ; preds = %120
  %122 = load i64, ptr %7, align 8, !tbaa !9
  %123 = add nsw i64 %122, 1
  store i64 %123, ptr %7, align 8, !tbaa !9
  br label %65, !llvm.loop !25

124:                                              ; preds = %65
  %125 = load ptr, ptr %9, align 8, !tbaa !11
  %126 = getelementptr inbounds %struct.VlHog_, ptr %125, i32 0, i32 0
  %127 = load i32, ptr %126, align 8, !tbaa !13
  switch i32 %127, label %143 [
    i32 1, label %128
    i32 0, label %136
  ]

128:                                              ; preds = %124
  %129 = load ptr, ptr %9, align 8, !tbaa !11
  %130 = getelementptr inbounds %struct.VlHog_, ptr %129, i32 0, i32 2
  %131 = load i64, ptr %130, align 8, !tbaa !15
  %132 = mul i64 3, %131
  %133 = add i64 %132, 4
  %134 = load ptr, ptr %9, align 8, !tbaa !11
  %135 = getelementptr inbounds %struct.VlHog_, ptr %134, i32 0, i32 1
  store i64 %133, ptr %135, align 8, !tbaa !27
  br label %144

136:                                              ; preds = %124
  %137 = load ptr, ptr %9, align 8, !tbaa !11
  %138 = getelementptr inbounds %struct.VlHog_, ptr %137, i32 0, i32 2
  %139 = load i64, ptr %138, align 8, !tbaa !15
  %140 = mul i64 4, %139
  %141 = load ptr, ptr %9, align 8, !tbaa !11
  %142 = getelementptr inbounds %struct.VlHog_, ptr %141, i32 0, i32 1
  store i64 %140, ptr %142, align 8, !tbaa !27
  br label %144

143:                                              ; preds = %124
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 224, ptr noundef @__PRETTY_FUNCTION__.vl_hog_new) #9
  unreachable

144:                                              ; preds = %136, %128
  %145 = load ptr, ptr %9, align 8, !tbaa !11
  %146 = getelementptr inbounds %struct.VlHog_, ptr %145, i32 0, i32 1
  %147 = load i64, ptr %146, align 8, !tbaa !27
  %148 = mul i64 %147, 8
  %149 = call noalias ptr @malloc(i64 noundef %148) #10
  %150 = load ptr, ptr %9, align 8, !tbaa !11
  %151 = getelementptr inbounds %struct.VlHog_, ptr %150, i32 0, i32 5
  store ptr %149, ptr %151, align 8, !tbaa !28
  %152 = load ptr, ptr %9, align 8, !tbaa !11
  %153 = getelementptr inbounds %struct.VlHog_, ptr %152, i32 0, i32 0
  %154 = load i32, ptr %153, align 8, !tbaa !13
  switch i32 %154, label %310 [
    i32 1, label %155
    i32 0, label %252
  ]

155:                                              ; preds = %144
  store i64 0, ptr %7, align 8, !tbaa !9
  br label %156

156:                                              ; preds = %215, %155
  %157 = load i64, ptr %7, align 8, !tbaa !9
  %158 = load ptr, ptr %9, align 8, !tbaa !11
  %159 = getelementptr inbounds %struct.VlHog_, ptr %158, i32 0, i32 2
  %160 = load i64, ptr %159, align 8, !tbaa !15
  %161 = trunc i64 %160 to i32
  %162 = sext i32 %161 to i64
  %163 = icmp slt i64 %157, %162
  br i1 %163, label %164, label %218

164:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %165 = load ptr, ptr %9, align 8, !tbaa !11
  %166 = getelementptr inbounds %struct.VlHog_, ptr %165, i32 0, i32 2
  %167 = load i64, ptr %166, align 8, !tbaa !15
  %168 = load i64, ptr %7, align 8, !tbaa !9
  %169 = sub i64 %167, %168
  store i64 %169, ptr %11, align 8, !tbaa !9
  %170 = load i64, ptr %11, align 8, !tbaa !9
  %171 = load ptr, ptr %9, align 8, !tbaa !11
  %172 = getelementptr inbounds %struct.VlHog_, ptr %171, i32 0, i32 5
  %173 = load ptr, ptr %172, align 8, !tbaa !28
  %174 = load i64, ptr %7, align 8, !tbaa !9
  %175 = getelementptr inbounds i64, ptr %173, i64 %174
  store i64 %170, ptr %175, align 8, !tbaa !9
  %176 = load i64, ptr %11, align 8, !tbaa !9
  %177 = load ptr, ptr %9, align 8, !tbaa !11
  %178 = getelementptr inbounds %struct.VlHog_, ptr %177, i32 0, i32 2
  %179 = load i64, ptr %178, align 8, !tbaa !15
  %180 = add i64 %176, %179
  %181 = load ptr, ptr %9, align 8, !tbaa !11
  %182 = getelementptr inbounds %struct.VlHog_, ptr %181, i32 0, i32 2
  %183 = load i64, ptr %182, align 8, !tbaa !15
  %184 = mul i64 2, %183
  %185 = urem i64 %180, %184
  %186 = load ptr, ptr %9, align 8, !tbaa !11
  %187 = getelementptr inbounds %struct.VlHog_, ptr %186, i32 0, i32 5
  %188 = load ptr, ptr %187, align 8, !tbaa !28
  %189 = load i64, ptr %7, align 8, !tbaa !9
  %190 = load ptr, ptr %9, align 8, !tbaa !11
  %191 = getelementptr inbounds %struct.VlHog_, ptr %190, i32 0, i32 2
  %192 = load i64, ptr %191, align 8, !tbaa !15
  %193 = add i64 %189, %192
  %194 = getelementptr inbounds i64, ptr %188, i64 %193
  store i64 %185, ptr %194, align 8, !tbaa !9
  %195 = load i64, ptr %11, align 8, !tbaa !9
  %196 = load ptr, ptr %9, align 8, !tbaa !11
  %197 = getelementptr inbounds %struct.VlHog_, ptr %196, i32 0, i32 2
  %198 = load i64, ptr %197, align 8, !tbaa !15
  %199 = urem i64 %195, %198
  %200 = load ptr, ptr %9, align 8, !tbaa !11
  %201 = getelementptr inbounds %struct.VlHog_, ptr %200, i32 0, i32 2
  %202 = load i64, ptr %201, align 8, !tbaa !15
  %203 = mul i64 2, %202
  %204 = add i64 %199, %203
  %205 = load ptr, ptr %9, align 8, !tbaa !11
  %206 = getelementptr inbounds %struct.VlHog_, ptr %205, i32 0, i32 5
  %207 = load ptr, ptr %206, align 8, !tbaa !28
  %208 = load i64, ptr %7, align 8, !tbaa !9
  %209 = load ptr, ptr %9, align 8, !tbaa !11
  %210 = getelementptr inbounds %struct.VlHog_, ptr %209, i32 0, i32 2
  %211 = load i64, ptr %210, align 8, !tbaa !15
  %212 = mul i64 2, %211
  %213 = add i64 %208, %212
  %214 = getelementptr inbounds i64, ptr %207, i64 %213
  store i64 %204, ptr %214, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  br label %215

215:                                              ; preds = %164
  %216 = load i64, ptr %7, align 8, !tbaa !9
  %217 = add nsw i64 %216, 1
  store i64 %217, ptr %7, align 8, !tbaa !9
  br label %156, !llvm.loop !29

218:                                              ; preds = %156
  store i64 0, ptr %8, align 8, !tbaa !9
  br label %219

219:                                              ; preds = %248, %218
  %220 = load i64, ptr %8, align 8, !tbaa !9
  %221 = icmp slt i64 %220, 4
  br i1 %221, label %222, label %251

222:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %223 = load i64, ptr %8, align 8, !tbaa !9
  %224 = srem i64 %223, 2
  store i64 %224, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %225 = load i64, ptr %8, align 8, !tbaa !9
  %226 = sdiv i64 %225, 2
  store i64 %226, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %227 = load i64, ptr %12, align 8, !tbaa !9
  %228 = sub nsw i64 1, %227
  %229 = load i64, ptr %13, align 8, !tbaa !9
  %230 = mul nsw i64 %229, 2
  %231 = add nsw i64 %228, %230
  store i64 %231, ptr %14, align 8, !tbaa !9
  %232 = load i64, ptr %14, align 8, !tbaa !9
  %233 = load ptr, ptr %9, align 8, !tbaa !11
  %234 = getelementptr inbounds %struct.VlHog_, ptr %233, i32 0, i32 2
  %235 = load i64, ptr %234, align 8, !tbaa !15
  %236 = mul i64 %235, 3
  %237 = add i64 %232, %236
  %238 = load ptr, ptr %9, align 8, !tbaa !11
  %239 = getelementptr inbounds %struct.VlHog_, ptr %238, i32 0, i32 5
  %240 = load ptr, ptr %239, align 8, !tbaa !28
  %241 = load i64, ptr %8, align 8, !tbaa !9
  %242 = load ptr, ptr %9, align 8, !tbaa !11
  %243 = getelementptr inbounds %struct.VlHog_, ptr %242, i32 0, i32 2
  %244 = load i64, ptr %243, align 8, !tbaa !15
  %245 = mul i64 %244, 3
  %246 = add i64 %241, %245
  %247 = getelementptr inbounds i64, ptr %240, i64 %246
  store i64 %237, ptr %247, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  br label %248

248:                                              ; preds = %222
  %249 = load i64, ptr %8, align 8, !tbaa !9
  %250 = add nsw i64 %249, 1
  store i64 %250, ptr %8, align 8, !tbaa !9
  br label %219, !llvm.loop !30

251:                                              ; preds = %219
  br label %311

252:                                              ; preds = %144
  store i64 0, ptr %8, align 8, !tbaa !9
  br label %253

253:                                              ; preds = %306, %252
  %254 = load i64, ptr %8, align 8, !tbaa !9
  %255 = icmp slt i64 %254, 4
  br i1 %255, label %256, label %309

256:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %257 = load i64, ptr %8, align 8, !tbaa !9
  %258 = srem i64 %257, 2
  store i64 %258, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %259 = load i64, ptr %8, align 8, !tbaa !9
  %260 = sdiv i64 %259, 2
  store i64 %260, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %261 = load i64, ptr %15, align 8, !tbaa !9
  %262 = sub nsw i64 1, %261
  %263 = load i64, ptr %16, align 8, !tbaa !9
  %264 = mul nsw i64 %263, 2
  %265 = add nsw i64 %262, %264
  store i64 %265, ptr %17, align 8, !tbaa !9
  store i64 0, ptr %7, align 8, !tbaa !9
  br label %266

266:                                              ; preds = %302, %256
  %267 = load i64, ptr %7, align 8, !tbaa !9
  %268 = load ptr, ptr %9, align 8, !tbaa !11
  %269 = getelementptr inbounds %struct.VlHog_, ptr %268, i32 0, i32 2
  %270 = load i64, ptr %269, align 8, !tbaa !15
  %271 = trunc i64 %270 to i32
  %272 = sext i32 %271 to i64
  %273 = icmp slt i64 %267, %272
  br i1 %273, label %274, label %305

274:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %275 = load ptr, ptr %9, align 8, !tbaa !11
  %276 = getelementptr inbounds %struct.VlHog_, ptr %275, i32 0, i32 2
  %277 = load i64, ptr %276, align 8, !tbaa !15
  %278 = load i64, ptr %7, align 8, !tbaa !9
  %279 = sub i64 %277, %278
  store i64 %279, ptr %18, align 8, !tbaa !9
  %280 = load i64, ptr %18, align 8, !tbaa !9
  %281 = load ptr, ptr %9, align 8, !tbaa !11
  %282 = getelementptr inbounds %struct.VlHog_, ptr %281, i32 0, i32 2
  %283 = load i64, ptr %282, align 8, !tbaa !15
  %284 = urem i64 %280, %283
  %285 = load i64, ptr %17, align 8, !tbaa !9
  %286 = load ptr, ptr %9, align 8, !tbaa !11
  %287 = getelementptr inbounds %struct.VlHog_, ptr %286, i32 0, i32 2
  %288 = load i64, ptr %287, align 8, !tbaa !15
  %289 = mul i64 %285, %288
  %290 = add i64 %284, %289
  %291 = load ptr, ptr %9, align 8, !tbaa !11
  %292 = getelementptr inbounds %struct.VlHog_, ptr %291, i32 0, i32 5
  %293 = load ptr, ptr %292, align 8, !tbaa !28
  %294 = load i64, ptr %7, align 8, !tbaa !9
  %295 = load i64, ptr %8, align 8, !tbaa !9
  %296 = load ptr, ptr %9, align 8, !tbaa !11
  %297 = getelementptr inbounds %struct.VlHog_, ptr %296, i32 0, i32 2
  %298 = load i64, ptr %297, align 8, !tbaa !15
  %299 = mul i64 %295, %298
  %300 = add i64 %294, %299
  %301 = getelementptr inbounds i64, ptr %293, i64 %300
  store i64 %290, ptr %301, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %302

302:                                              ; preds = %274
  %303 = load i64, ptr %7, align 8, !tbaa !9
  %304 = add nsw i64 %303, 1
  store i64 %304, ptr %7, align 8, !tbaa !9
  br label %266, !llvm.loop !31

305:                                              ; preds = %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %306

306:                                              ; preds = %305
  %307 = load i64, ptr %8, align 8, !tbaa !9
  %308 = add nsw i64 %307, 1
  store i64 %308, ptr %8, align 8, !tbaa !9
  br label %253, !llvm.loop !32

309:                                              ; preds = %253
  br label %311

310:                                              ; preds = %144
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 269, ptr noundef @__PRETTY_FUNCTION__.vl_hog_new) #9
  unreachable

311:                                              ; preds = %309, %251
  %312 = load ptr, ptr %9, align 8, !tbaa !11
  %313 = getelementptr inbounds %struct.VlHog_, ptr %312, i32 0, i32 7
  %314 = load i64, ptr %313, align 8, !tbaa !16
  %315 = load ptr, ptr %9, align 8, !tbaa !11
  %316 = getelementptr inbounds %struct.VlHog_, ptr %315, i32 0, i32 7
  %317 = load i64, ptr %316, align 8, !tbaa !16
  %318 = mul i64 %314, %317
  %319 = load ptr, ptr %9, align 8, !tbaa !11
  %320 = getelementptr inbounds %struct.VlHog_, ptr %319, i32 0, i32 2
  %321 = load i64, ptr %320, align 8, !tbaa !15
  %322 = mul i64 %318, %321
  %323 = call noalias ptr @calloc(i64 noundef %322, i64 noundef 4) #8
  %324 = load ptr, ptr %9, align 8, !tbaa !11
  %325 = getelementptr inbounds %struct.VlHog_, ptr %324, i32 0, i32 6
  store ptr %323, ptr %325, align 8, !tbaa !33
  store i64 0, ptr %7, align 8, !tbaa !9
  br label %326

326:                                              ; preds = %556, %311
  %327 = load i64, ptr %7, align 8, !tbaa !9
  %328 = load ptr, ptr %9, align 8, !tbaa !11
  %329 = getelementptr inbounds %struct.VlHog_, ptr %328, i32 0, i32 2
  %330 = load i64, ptr %329, align 8, !tbaa !15
  %331 = trunc i64 %330 to i32
  %332 = sext i32 %331 to i64
  %333 = icmp slt i64 %327, %332
  br i1 %333, label %334, label %559

334:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %335 = load i64, ptr %7, align 8, !tbaa !9
  %336 = sitofp i64 %335 to double
  %337 = fmul double %336, 0x400921FB54442D18
  %338 = load ptr, ptr %9, align 8, !tbaa !11
  %339 = getelementptr inbounds %struct.VlHog_, ptr %338, i32 0, i32 2
  %340 = load i64, ptr %339, align 8, !tbaa !15
  %341 = uitofp i64 %340 to double
  %342 = fdiv double %337, %341
  %343 = fadd double %342, 0x3FF921FB54442D18
  %344 = call double @fmod(double noundef %343, double noundef 0x400921FB54442D18) #7
  store double %344, ptr %19, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %345 = load ptr, ptr %9, align 8, !tbaa !11
  %346 = getelementptr inbounds %struct.VlHog_, ptr %345, i32 0, i32 7
  %347 = load i64, ptr %346, align 8, !tbaa !16
  %348 = uitofp i64 %347 to double
  %349 = load double, ptr %19, align 8, !tbaa !21
  %350 = call double @cos(double noundef %349) #7
  %351 = fmul double %348, %350
  %352 = fdiv double %351, 2.000000e+00
  store double %352, ptr %20, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %353 = load ptr, ptr %9, align 8, !tbaa !11
  %354 = getelementptr inbounds %struct.VlHog_, ptr %353, i32 0, i32 7
  %355 = load i64, ptr %354, align 8, !tbaa !16
  %356 = uitofp i64 %355 to double
  %357 = load double, ptr %19, align 8, !tbaa !21
  %358 = call double @sin(double noundef %357) #7
  %359 = fmul double %356, %358
  %360 = fdiv double %359, 2.000000e+00
  store double %360, ptr %21, align 8, !tbaa !21
  %361 = load double, ptr %19, align 8, !tbaa !21
  %362 = fcmp ole double %361, 0x3FE921FB54442D18
  br i1 %362, label %366, label %363

363:                                              ; preds = %334
  %364 = load double, ptr %19, align 8, !tbaa !21
  %365 = fcmp oge double %364, 0x4002D97C7F3321D2
  br i1 %365, label %366, label %461

366:                                              ; preds = %363, %334
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %367 = load double, ptr %21, align 8, !tbaa !21
  %368 = load double, ptr %20, align 8, !tbaa !21
  %369 = fdiv double %367, %368
  store double %369, ptr %22, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %370 = load double, ptr %22, align 8, !tbaa !21
  %371 = fsub double 1.000000e+00, %370
  %372 = load ptr, ptr %9, align 8, !tbaa !11
  %373 = getelementptr inbounds %struct.VlHog_, ptr %372, i32 0, i32 7
  %374 = load i64, ptr %373, align 8, !tbaa !16
  %375 = sub i64 %374, 1
  %376 = uitofp i64 %375 to double
  %377 = fmul double %371, %376
  %378 = fdiv double %377, 2.000000e+00
  store double %378, ptr %23, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %379 = load double, ptr %19, align 8, !tbaa !21
  %380 = call double @cos(double noundef %379) #7
  %381 = call double @llvm.fabs.f64(double %380)
  %382 = fsub double 1.000000e+00, %381
  %383 = fdiv double %382, 2.000000e+00
  %384 = load ptr, ptr %9, align 8, !tbaa !11
  %385 = getelementptr inbounds %struct.VlHog_, ptr %384, i32 0, i32 7
  %386 = load i64, ptr %385, align 8, !tbaa !16
  %387 = uitofp i64 %386 to double
  %388 = fmul double %383, %387
  %389 = fptosi double %388 to i64
  store i64 %389, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %390 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %390, ptr %25, align 8, !tbaa !9
  br label %391

391:                                              ; preds = %457, %366
  %392 = load i64, ptr %25, align 8, !tbaa !9
  %393 = load ptr, ptr %9, align 8, !tbaa !11
  %394 = getelementptr inbounds %struct.VlHog_, ptr %393, i32 0, i32 7
  %395 = load i64, ptr %394, align 8, !tbaa !16
  %396 = trunc i64 %395 to i32
  %397 = sext i32 %396 to i64
  %398 = load i64, ptr %24, align 8, !tbaa !9
  %399 = sub nsw i64 %397, %398
  %400 = icmp slt i64 %392, %399
  br i1 %400, label %401, label %460

401:                                              ; preds = %391
  %402 = load double, ptr %22, align 8, !tbaa !21
  %403 = load i64, ptr %25, align 8, !tbaa !9
  %404 = sitofp i64 %403 to double
  %405 = load double, ptr %23, align 8, !tbaa !21
  %406 = call double @llvm.fmuladd.f64(double %402, double %404, double %405)
  %407 = call i64 @vl_round_d(double noundef %406)
  store i64 %407, ptr %26, align 8, !tbaa !9
  %408 = load ptr, ptr %9, align 8, !tbaa !11
  %409 = getelementptr inbounds %struct.VlHog_, ptr %408, i32 0, i32 3
  %410 = load i32, ptr %409, align 8, !tbaa !17
  %411 = icmp ne i32 %410, 0
  br i1 %411, label %434, label %412

412:                                              ; preds = %401
  %413 = load ptr, ptr %9, align 8, !tbaa !11
  %414 = getelementptr inbounds %struct.VlHog_, ptr %413, i32 0, i32 6
  %415 = load ptr, ptr %414, align 8, !tbaa !33
  %416 = load i64, ptr %25, align 8, !tbaa !9
  %417 = load ptr, ptr %9, align 8, !tbaa !11
  %418 = getelementptr inbounds %struct.VlHog_, ptr %417, i32 0, i32 7
  %419 = load i64, ptr %418, align 8, !tbaa !16
  %420 = load i64, ptr %26, align 8, !tbaa !9
  %421 = mul i64 %419, %420
  %422 = add i64 %416, %421
  %423 = load ptr, ptr %9, align 8, !tbaa !11
  %424 = getelementptr inbounds %struct.VlHog_, ptr %423, i32 0, i32 7
  %425 = load i64, ptr %424, align 8, !tbaa !16
  %426 = load ptr, ptr %9, align 8, !tbaa !11
  %427 = getelementptr inbounds %struct.VlHog_, ptr %426, i32 0, i32 7
  %428 = load i64, ptr %427, align 8, !tbaa !16
  %429 = mul i64 %425, %428
  %430 = load i64, ptr %7, align 8, !tbaa !9
  %431 = mul i64 %429, %430
  %432 = add i64 %422, %431
  %433 = getelementptr inbounds float, ptr %415, i64 %432
  store float 1.000000e+00, ptr %433, align 4, !tbaa !23
  br label %456

434:                                              ; preds = %401
  %435 = load ptr, ptr %9, align 8, !tbaa !11
  %436 = getelementptr inbounds %struct.VlHog_, ptr %435, i32 0, i32 6
  %437 = load ptr, ptr %436, align 8, !tbaa !33
  %438 = load i64, ptr %26, align 8, !tbaa !9
  %439 = load ptr, ptr %9, align 8, !tbaa !11
  %440 = getelementptr inbounds %struct.VlHog_, ptr %439, i32 0, i32 7
  %441 = load i64, ptr %440, align 8, !tbaa !16
  %442 = load i64, ptr %25, align 8, !tbaa !9
  %443 = mul i64 %441, %442
  %444 = add i64 %438, %443
  %445 = load ptr, ptr %9, align 8, !tbaa !11
  %446 = getelementptr inbounds %struct.VlHog_, ptr %445, i32 0, i32 7
  %447 = load i64, ptr %446, align 8, !tbaa !16
  %448 = load ptr, ptr %9, align 8, !tbaa !11
  %449 = getelementptr inbounds %struct.VlHog_, ptr %448, i32 0, i32 7
  %450 = load i64, ptr %449, align 8, !tbaa !16
  %451 = mul i64 %447, %450
  %452 = load i64, ptr %7, align 8, !tbaa !9
  %453 = mul i64 %451, %452
  %454 = add i64 %444, %453
  %455 = getelementptr inbounds float, ptr %437, i64 %454
  store float 1.000000e+00, ptr %455, align 4, !tbaa !23
  br label %456

456:                                              ; preds = %434, %412
  br label %457

457:                                              ; preds = %456
  %458 = load i64, ptr %25, align 8, !tbaa !9
  %459 = add nsw i64 %458, 1
  store i64 %459, ptr %25, align 8, !tbaa !9
  br label %391, !llvm.loop !34

460:                                              ; preds = %391
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %555

461:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %462 = load double, ptr %20, align 8, !tbaa !21
  %463 = load double, ptr %21, align 8, !tbaa !21
  %464 = fdiv double %462, %463
  store double %464, ptr %27, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %465 = load double, ptr %27, align 8, !tbaa !21
  %466 = fsub double 1.000000e+00, %465
  %467 = load ptr, ptr %9, align 8, !tbaa !11
  %468 = getelementptr inbounds %struct.VlHog_, ptr %467, i32 0, i32 7
  %469 = load i64, ptr %468, align 8, !tbaa !16
  %470 = sub i64 %469, 1
  %471 = uitofp i64 %470 to double
  %472 = fmul double %466, %471
  %473 = fdiv double %472, 2.000000e+00
  store double %473, ptr %28, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %474 = load double, ptr %19, align 8, !tbaa !21
  %475 = call double @sin(double noundef %474) #7
  %476 = fsub double 1.000000e+00, %475
  %477 = fdiv double %476, 2.000000e+00
  %478 = load ptr, ptr %9, align 8, !tbaa !11
  %479 = getelementptr inbounds %struct.VlHog_, ptr %478, i32 0, i32 7
  %480 = load i64, ptr %479, align 8, !tbaa !16
  %481 = uitofp i64 %480 to double
  %482 = fmul double %477, %481
  %483 = fptosi double %482 to i64
  store i64 %483, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %484 = load i64, ptr %29, align 8, !tbaa !9
  store i64 %484, ptr %31, align 8, !tbaa !9
  br label %485

485:                                              ; preds = %551, %461
  %486 = load i64, ptr %31, align 8, !tbaa !9
  %487 = load ptr, ptr %9, align 8, !tbaa !11
  %488 = getelementptr inbounds %struct.VlHog_, ptr %487, i32 0, i32 7
  %489 = load i64, ptr %488, align 8, !tbaa !16
  %490 = trunc i64 %489 to i32
  %491 = sext i32 %490 to i64
  %492 = load i64, ptr %29, align 8, !tbaa !9
  %493 = sub nsw i64 %491, %492
  %494 = icmp slt i64 %486, %493
  br i1 %494, label %495, label %554

495:                                              ; preds = %485
  %496 = load double, ptr %27, align 8, !tbaa !21
  %497 = load i64, ptr %31, align 8, !tbaa !9
  %498 = sitofp i64 %497 to double
  %499 = load double, ptr %28, align 8, !tbaa !21
  %500 = call double @llvm.fmuladd.f64(double %496, double %498, double %499)
  %501 = call i64 @vl_round_d(double noundef %500)
  store i64 %501, ptr %30, align 8, !tbaa !9
  %502 = load ptr, ptr %9, align 8, !tbaa !11
  %503 = getelementptr inbounds %struct.VlHog_, ptr %502, i32 0, i32 3
  %504 = load i32, ptr %503, align 8, !tbaa !17
  %505 = icmp ne i32 %504, 0
  br i1 %505, label %528, label %506

506:                                              ; preds = %495
  %507 = load ptr, ptr %9, align 8, !tbaa !11
  %508 = getelementptr inbounds %struct.VlHog_, ptr %507, i32 0, i32 6
  %509 = load ptr, ptr %508, align 8, !tbaa !33
  %510 = load i64, ptr %30, align 8, !tbaa !9
  %511 = load ptr, ptr %9, align 8, !tbaa !11
  %512 = getelementptr inbounds %struct.VlHog_, ptr %511, i32 0, i32 7
  %513 = load i64, ptr %512, align 8, !tbaa !16
  %514 = load i64, ptr %31, align 8, !tbaa !9
  %515 = mul i64 %513, %514
  %516 = add i64 %510, %515
  %517 = load ptr, ptr %9, align 8, !tbaa !11
  %518 = getelementptr inbounds %struct.VlHog_, ptr %517, i32 0, i32 7
  %519 = load i64, ptr %518, align 8, !tbaa !16
  %520 = load ptr, ptr %9, align 8, !tbaa !11
  %521 = getelementptr inbounds %struct.VlHog_, ptr %520, i32 0, i32 7
  %522 = load i64, ptr %521, align 8, !tbaa !16
  %523 = mul i64 %519, %522
  %524 = load i64, ptr %7, align 8, !tbaa !9
  %525 = mul i64 %523, %524
  %526 = add i64 %516, %525
  %527 = getelementptr inbounds float, ptr %509, i64 %526
  store float 1.000000e+00, ptr %527, align 4, !tbaa !23
  br label %550

528:                                              ; preds = %495
  %529 = load ptr, ptr %9, align 8, !tbaa !11
  %530 = getelementptr inbounds %struct.VlHog_, ptr %529, i32 0, i32 6
  %531 = load ptr, ptr %530, align 8, !tbaa !33
  %532 = load i64, ptr %31, align 8, !tbaa !9
  %533 = load ptr, ptr %9, align 8, !tbaa !11
  %534 = getelementptr inbounds %struct.VlHog_, ptr %533, i32 0, i32 7
  %535 = load i64, ptr %534, align 8, !tbaa !16
  %536 = load i64, ptr %30, align 8, !tbaa !9
  %537 = mul i64 %535, %536
  %538 = add i64 %532, %537
  %539 = load ptr, ptr %9, align 8, !tbaa !11
  %540 = getelementptr inbounds %struct.VlHog_, ptr %539, i32 0, i32 7
  %541 = load i64, ptr %540, align 8, !tbaa !16
  %542 = load ptr, ptr %9, align 8, !tbaa !11
  %543 = getelementptr inbounds %struct.VlHog_, ptr %542, i32 0, i32 7
  %544 = load i64, ptr %543, align 8, !tbaa !16
  %545 = mul i64 %541, %544
  %546 = load i64, ptr %7, align 8, !tbaa !9
  %547 = mul i64 %545, %546
  %548 = add i64 %538, %547
  %549 = getelementptr inbounds float, ptr %531, i64 %548
  store float 1.000000e+00, ptr %549, align 4, !tbaa !23
  br label %550

550:                                              ; preds = %528, %506
  br label %551

551:                                              ; preds = %550
  %552 = load i64, ptr %31, align 8, !tbaa !9
  %553 = add nsw i64 %552, 1
  store i64 %553, ptr %31, align 8, !tbaa !9
  br label %485, !llvm.loop !35

554:                                              ; preds = %485
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %555

555:                                              ; preds = %554, %460
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %556

556:                                              ; preds = %555
  %557 = load i64, ptr %7, align 8, !tbaa !9
  %558 = add nsw i64 %557, 1
  store i64 %558, ptr %7, align 8, !tbaa !9
  br label %326, !llvm.loop !36

559:                                              ; preds = %326
  %560 = load ptr, ptr %9, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  ret ptr %560
}

; 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

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

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

; Function Attrs: nounwind
declare double @sin(double noundef) #5

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

; Function Attrs: nounwind
declare double @fmod(double noundef, double noundef) #5

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

; Function Attrs: nounwind uwtable
declare hidden i64 @vl_round_d(double noundef) #0

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

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

!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 = !{!"long long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"VlHog_", !6, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !6, i64 28, !12, i64 32, !12, i64 40, !10, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !10, i64 88, !10, i64 96}
!15 = !{!14, !10, i64 16}
!16 = !{!14, !10, i64 48}
!17 = !{!14, !6, i64 24}
!18 = !{!14, !6, i64 28}
!19 = !{!14, !12, i64 56}
!20 = !{!14, !12, i64 64}
!21 = !{!22, !22, i64 0}
!22 = !{!"double", !7, i64 0}
!23 = !{!24, !24, i64 0}
!24 = !{!"float", !7, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!14, !10, i64 8}
!28 = !{!14, !12, i64 32}
!29 = distinct !{!29, !26}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !26}
!32 = distinct !{!32, !26}
!33 = !{!14, !12, i64 40}
!34 = distinct !{!34, !26}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !26}


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

@.str = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [76 x i8], align 1
@__PRETTY_FUNCTION__.vl_hog_new = external hidden unnamed_addr constant [50 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noalias noundef ptr @vl_hog_new(i32 noundef %0, i64 noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = tail call noalias dereferenceable_or_null(104) ptr @calloc(i64 noundef 1, i64 noundef 104) #6
  %.not = icmp eq i64 %1, 0
  br i1 %.not, label %5, label %6

5:                                                ; preds = %3
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 181, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_hog_new) #7
  unreachable

6:                                                ; preds = %3
  store i32 %0, ptr %4, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %4, i64 16
  store i64 %1, ptr %7, align 8, !tbaa !12
  %8 = getelementptr inbounds i8, ptr %4, i64 48
  store i64 21, ptr %8, align 8, !tbaa !13
  %9 = getelementptr inbounds i8, ptr %4, i64 24
  store i32 %2, ptr %9, align 8, !tbaa !14
  %10 = shl i64 %1, 2
  %11 = tail call noalias ptr @malloc(i64 noundef %10) #8
  %12 = getelementptr inbounds i8, ptr %4, i64 56
  store ptr %11, ptr %12, align 8, !tbaa !15
  %13 = tail call noalias ptr @malloc(i64 noundef %10) #8
  %14 = getelementptr inbounds i8, ptr %4, i64 64
  store ptr %13, ptr %14, align 8, !tbaa !16
  %sext = shl i64 %1, 32
  %15 = ashr exact i64 %sext, 32
  %16 = icmp sgt i64 %15, 0
  br i1 %16, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %6
  %17 = uitofp i64 %1 to double
  %.not176 = icmp eq i32 %2, 0
  br i1 %.not176, label %.lr.ph.split.us.preheader, label %.lr.ph.split.preheader

.lr.ph.split.preheader:                           ; preds = %.lr.ph
  %xtraiter = and i64 %1, 1
  %18 = icmp eq i64 %sext, 4294967296
  br i1 %18, label %._crit_edge.loopexit237.unr-lcssa, label %.lr.ph.split.preheader.new

.lr.ph.split.preheader.new:                       ; preds = %.lr.ph.split.preheader
  %unroll_iter = sub nsw i64 %15, %xtraiter
  br label %.lr.ph.split

.lr.ph.split.us.preheader:                        ; preds = %.lr.ph
  %xtraiter238 = and i64 %1, 1
  %19 = icmp eq i64 %sext, 4294967296
  br i1 %19, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.split.us.preheader.new

.lr.ph.split.us.preheader.new:                    ; preds = %.lr.ph.split.us.preheader
  %unroll_iter240 = sub nsw i64 %15, %xtraiter238
  br label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph.split.us, %.lr.ph.split.us.preheader.new
  %.0163189.us = phi i64 [ 0, %.lr.ph.split.us.preheader.new ], [ %39, %.lr.ph.split.us ]
  %niter241 = phi i64 [ 0, %.lr.ph.split.us.preheader.new ], [ %niter241.next.1, %.lr.ph.split.us ]
  %20 = uitofp nneg i64 %.0163189.us to double
  %21 = fmul double %20, 0x400921FB54442D18
  %22 = fdiv double %21, %17
  %23 = tail call double @cos(double noundef %22) #9
  %24 = fptrunc double %23 to float
  %25 = getelementptr inbounds float, ptr %11, i64 %.0163189.us
  store float %24, ptr %25, align 4, !tbaa !17
  %26 = tail call double @sin(double noundef %22) #9
  %27 = fptrunc double %26 to float
  %28 = getelementptr inbounds float, ptr %13, i64 %.0163189.us
  store float %27, ptr %28, align 4, !tbaa !17
  %29 = or disjoint i64 %.0163189.us, 1
  %30 = uitofp nneg i64 %29 to double
  %31 = fmul double %30, 0x400921FB54442D18
  %32 = fdiv double %31, %17
  %33 = tail call double @cos(double noundef %32) #9
  %34 = fptrunc double %33 to float
  %35 = getelementptr inbounds float, ptr %11, i64 %29
  store float %34, ptr %35, align 4, !tbaa !17
  %36 = tail call double @sin(double noundef %32) #9
  %37 = fptrunc double %36 to float
  %38 = getelementptr inbounds float, ptr %13, i64 %29
  store float %37, ptr %38, align 4, !tbaa !17
  %39 = add nuw nsw i64 %.0163189.us, 2
  %niter241.next.1 = add i64 %niter241, 2
  %niter241.ncmp.1 = icmp eq i64 %niter241.next.1, %unroll_iter240
  br i1 %niter241.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.split.us, !llvm.loop !19

.lr.ph.split:                                     ; preds = %.lr.ph.split, %.lr.ph.split.preheader.new
  %.0163189 = phi i64 [ 0, %.lr.ph.split.preheader.new ], [ %59, %.lr.ph.split ]
  %niter = phi i64 [ 0, %.lr.ph.split.preheader.new ], [ %niter.next.1, %.lr.ph.split ]
  %40 = uitofp nneg i64 %.0163189 to double
  %41 = fmul double %40, 0x400921FB54442D18
  %42 = fdiv double %41, %17
  %43 = tail call double @sin(double noundef %42) #9
  %44 = fptrunc double %43 to float
  %45 = getelementptr inbounds float, ptr %11, i64 %.0163189
  store float %44, ptr %45, align 4, !tbaa !17
  %46 = tail call double @cos(double noundef %42) #9
  %47 = fptrunc double %46 to float
  %48 = getelementptr inbounds float, ptr %13, i64 %.0163189
  store float %47, ptr %48, align 4, !tbaa !17
  %49 = or disjoint i64 %.0163189, 1
  %50 = uitofp nneg i64 %49 to double
  %51 = fmul double %50, 0x400921FB54442D18
  %52 = fdiv double %51, %17
  %53 = tail call double @sin(double noundef %52) #9
  %54 = fptrunc double %53 to float
  %55 = getelementptr inbounds float, ptr %11, i64 %49
  store float %54, ptr %55, align 4, !tbaa !17
  %56 = tail call double @cos(double noundef %52) #9
  %57 = fptrunc double %56 to float
  %58 = getelementptr inbounds float, ptr %13, i64 %49
  store float %57, ptr %58, align 4, !tbaa !17
  %59 = add nuw nsw i64 %.0163189, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit237.unr-lcssa, label %.lr.ph.split, !llvm.loop !19

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph.split.us, %.lr.ph.split.us.preheader
  %.0163189.us.unr = phi i64 [ 0, %.lr.ph.split.us.preheader ], [ %39, %.lr.ph.split.us ]
  %lcmp.mod239.not = icmp eq i64 %xtraiter238, 0
  br i1 %lcmp.mod239.not, label %._crit_edge, label %.lr.ph.split.us.epil

.lr.ph.split.us.epil:                             ; preds = %._crit_edge.loopexit.unr-lcssa
  %60 = uitofp nneg i64 %.0163189.us.unr to double
  %61 = fmul double %60, 0x400921FB54442D18
  %62 = fdiv double %61, %17
  %63 = tail call double @cos(double noundef %62) #9
  %64 = fptrunc double %63 to float
  %65 = getelementptr inbounds float, ptr %11, i64 %.0163189.us.unr
  store float %64, ptr %65, align 4, !tbaa !17
  %66 = tail call double @sin(double noundef %62) #9
  %67 = fptrunc double %66 to float
  %68 = getelementptr inbounds float, ptr %13, i64 %.0163189.us.unr
  store float %67, ptr %68, align 4, !tbaa !17
  br label %._crit_edge

._crit_edge.loopexit237.unr-lcssa:                ; preds = %.lr.ph.split, %.lr.ph.split.preheader
  %.0163189.unr = phi i64 [ 0, %.lr.ph.split.preheader ], [ %59, %.lr.ph.split ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.split.epil

.lr.ph.split.epil:                                ; preds = %._crit_edge.loopexit237.unr-lcssa
  %69 = uitofp nneg i64 %.0163189.unr to double
  %70 = fmul double %69, 0x400921FB54442D18
  %71 = fdiv double %70, %17
  %72 = tail call double @sin(double noundef %71) #9
  %73 = fptrunc double %72 to float
  %74 = getelementptr inbounds float, ptr %11, i64 %.0163189.unr
  store float %73, ptr %74, align 4, !tbaa !17
  %75 = tail call double @cos(double noundef %71) #9
  %76 = fptrunc double %75 to float
  %77 = getelementptr inbounds float, ptr %13, i64 %.0163189.unr
  store float %76, ptr %77, align 4, !tbaa !17
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.split.epil, %._crit_edge.loopexit237.unr-lcssa, %.lr.ph.split.us.epil, %._crit_edge.loopexit.unr-lcssa, %6
  switch i32 %0, label %81 [
    i32 1, label %78
    i32 0, label %82
  ]

78:                                               ; preds = %._crit_edge
  %79 = mul i64 %1, 3
  %80 = add i64 %79, 4
  br label %82

81:                                               ; preds = %._crit_edge
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 224, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_hog_new) #7
  unreachable

82:                                               ; preds = %._crit_edge, %78
  %.sink = phi i64 [ %80, %78 ], [ %10, %._crit_edge ]
  %83 = getelementptr inbounds i8, ptr %4, i64 8
  store i64 %.sink, ptr %83, align 8, !tbaa !21
  %84 = shl i64 %.sink, 3
  %85 = tail call noalias ptr @malloc(i64 noundef %84) #8
  %86 = getelementptr inbounds i8, ptr %4, i64 32
  store ptr %85, ptr %86, align 8, !tbaa !22
  %switch = icmp eq i32 %0, 1
  br i1 %switch, label %.preheader186, label %.preheader187

.preheader187:                                    ; preds = %82
  br i1 %16, label %.lr.ph192.us.preheader.preheader, label %.loopexit185.thread

.lr.ph192.us.preheader.preheader:                 ; preds = %.preheader187
  %87 = add nsw i64 %15, -1
  %xtraiter242 = and i64 %1, 1
  %88 = icmp eq i64 %87, 0
  br i1 %88, label %._crit_edge193.us.unr-lcssa, label %.lr.ph192.us.preheader.preheader.new

.lr.ph192.us.preheader.preheader.new:             ; preds = %.lr.ph192.us.preheader.preheader
  %unroll_iter244 = sub nsw i64 %15, %xtraiter242
  br label %.lr.ph192.us.preheader

.loopexit185.thread:                              ; preds = %.preheader187
  %89 = mul i64 %1, 441
  %90 = tail call noalias ptr @calloc(i64 noundef %89, i64 noundef 4) #6
  %91 = getelementptr inbounds i8, ptr %4, i64 40
  store ptr %90, ptr %91, align 8, !tbaa !23
  br label %._crit_edge208

.lr.ph192.us.preheader:                           ; preds = %.lr.ph192.us.preheader, %.lr.ph192.us.preheader.preheader.new
  %.2190.us = phi i64 [ 0, %.lr.ph192.us.preheader.preheader.new ], [ %99, %.lr.ph192.us.preheader ]
  %niter245 = phi i64 [ 0, %.lr.ph192.us.preheader.preheader.new ], [ %niter245.next.1, %.lr.ph192.us.preheader ]
  %92 = sub i64 %1, %.2190.us
  %93 = urem i64 %92, %1
  %94 = add i64 %93, %1
  %gep.us = getelementptr i64, ptr %85, i64 %.2190.us
  store i64 %94, ptr %gep.us, align 8, !tbaa !24
  %95 = or disjoint i64 %.2190.us, 1
  %96 = sub i64 %1, %95
  %97 = urem i64 %96, %1
  %98 = add i64 %97, %1
  %gep.us.1247 = getelementptr i64, ptr %85, i64 %95
  store i64 %98, ptr %gep.us.1247, align 8, !tbaa !24
  %99 = add nuw nsw i64 %.2190.us, 2
  %niter245.next.1 = add i64 %niter245, 2
  %niter245.ncmp.1 = icmp eq i64 %niter245.next.1, %unroll_iter244
  br i1 %niter245.ncmp.1, label %._crit_edge193.us.unr-lcssa, label %.lr.ph192.us.preheader, !llvm.loop !25

._crit_edge193.us.unr-lcssa:                      ; preds = %.lr.ph192.us.preheader, %.lr.ph192.us.preheader.preheader
  %.2190.us.unr = phi i64 [ 0, %.lr.ph192.us.preheader.preheader ], [ %99, %.lr.ph192.us.preheader ]
  %lcmp.mod243.not = icmp eq i64 %xtraiter242, 0
  br i1 %lcmp.mod243.not, label %._crit_edge193.us, label %.lr.ph192.us.preheader.epil

.lr.ph192.us.preheader.epil:                      ; preds = %._crit_edge193.us.unr-lcssa
  %100 = sub i64 %1, %.2190.us.unr
  %101 = urem i64 %100, %1
  %102 = add i64 %101, %1
  %gep.us.epil = getelementptr i64, ptr %85, i64 %.2190.us.unr
  store i64 %102, ptr %gep.us.epil, align 8, !tbaa !24
  br label %._crit_edge193.us

._crit_edge193.us:                                ; preds = %._crit_edge193.us.unr-lcssa, %.lr.ph192.us.preheader.epil
  %invariant.gep.us.1 = getelementptr i64, ptr %85, i64 %1
  %xtraiter248 = and i64 %1, 1
  %103 = icmp eq i64 %87, 0
  br i1 %103, label %._crit_edge193.us.1.unr-lcssa, label %._crit_edge193.us.new

._crit_edge193.us.new:                            ; preds = %._crit_edge193.us
  %unroll_iter250 = sub nsw i64 %15, %xtraiter248
  br label %104

104:                                              ; preds = %104, %._crit_edge193.us.new
  %.2190.us.1 = phi i64 [ 0, %._crit_edge193.us.new ], [ %110, %104 ]
  %niter251 = phi i64 [ 0, %._crit_edge193.us.new ], [ %niter251.next.1, %104 ]
  %105 = sub i64 %1, %.2190.us.1
  %106 = urem i64 %105, %1
  %gep.us.1 = getelementptr i64, ptr %invariant.gep.us.1, i64 %.2190.us.1
  store i64 %106, ptr %gep.us.1, align 8, !tbaa !24
  %107 = or disjoint i64 %.2190.us.1, 1
  %108 = sub i64 %1, %107
  %109 = urem i64 %108, %1
  %gep.us.1.1 = getelementptr i64, ptr %invariant.gep.us.1, i64 %107
  store i64 %109, ptr %gep.us.1.1, align 8, !tbaa !24
  %110 = add nuw nsw i64 %.2190.us.1, 2
  %niter251.next.1 = add i64 %niter251, 2
  %niter251.ncmp.1 = icmp eq i64 %niter251.next.1, %unroll_iter250
  br i1 %niter251.ncmp.1, label %._crit_edge193.us.1.unr-lcssa, label %104, !llvm.loop !25

._crit_edge193.us.1.unr-lcssa:                    ; preds = %104, %._crit_edge193.us
  %.2190.us.1.unr = phi i64 [ 0, %._crit_edge193.us ], [ %110, %104 ]
  %lcmp.mod249.not = icmp eq i64 %xtraiter248, 0
  br i1 %lcmp.mod249.not, label %._crit_edge193.us.1, label %._crit_edge193.us.1.epilog-lcssa

._crit_edge193.us.1.epilog-lcssa:                 ; preds = %._crit_edge193.us.1.unr-lcssa
  %111 = sub i64 %1, %.2190.us.1.unr
  %112 = urem i64 %111, %1
  %gep.us.1.epil = getelementptr i64, ptr %invariant.gep.us.1, i64 %.2190.us.1.unr
  store i64 %112, ptr %gep.us.1.epil, align 8, !tbaa !24
  br label %._crit_edge193.us.1

._crit_edge193.us.1:                              ; preds = %._crit_edge193.us.1.unr-lcssa, %._crit_edge193.us.1.epilog-lcssa
  %113 = mul i64 %1, 3
  %114 = shl i64 %1, 1
  %invariant.gep.us.2 = getelementptr i64, ptr %85, i64 %114
  %xtraiter253 = and i64 %1, 1
  %115 = icmp eq i64 %87, 0
  br i1 %115, label %._crit_edge193.us.2.unr-lcssa, label %._crit_edge193.us.1.new

._crit_edge193.us.1.new:                          ; preds = %._crit_edge193.us.1
  %unroll_iter255 = sub nsw i64 %15, %xtraiter253
  br label %116

116:                                              ; preds = %116, %._crit_edge193.us.1.new
  %.2190.us.2 = phi i64 [ 0, %._crit_edge193.us.1.new ], [ %124, %116 ]
  %niter256 = phi i64 [ 0, %._crit_edge193.us.1.new ], [ %niter256.next.1, %116 ]
  %117 = sub i64 %1, %.2190.us.2
  %118 = urem i64 %117, %1
  %119 = add i64 %118, %113
  %gep.us.2 = getelementptr i64, ptr %invariant.gep.us.2, i64 %.2190.us.2
  store i64 %119, ptr %gep.us.2, align 8, !tbaa !24
  %120 = or disjoint i64 %.2190.us.2, 1
  %121 = sub i64 %1, %120
  %122 = urem i64 %121, %1
  %123 = add i64 %122, %113
  %gep.us.2.1 = getelementptr i64, ptr %invariant.gep.us.2, i64 %120
  store i64 %123, ptr %gep.us.2.1, align 8, !tbaa !24
  %124 = add nuw nsw i64 %.2190.us.2, 2
  %niter256.next.1 = add i64 %niter256, 2
  %niter256.ncmp.1 = icmp eq i64 %niter256.next.1, %unroll_iter255
  br i1 %niter256.ncmp.1, label %._crit_edge193.us.2.unr-lcssa, label %116, !llvm.loop !25

._crit_edge193.us.2.unr-lcssa:                    ; preds = %116, %._crit_edge193.us.1
  %.2190.us.2.unr = phi i64 [ 0, %._crit_edge193.us.1 ], [ %124, %116 ]
  %lcmp.mod254.not = icmp eq i64 %xtraiter253, 0
  br i1 %lcmp.mod254.not, label %._crit_edge193.us.2, label %._crit_edge193.us.2.epilog-lcssa

._crit_edge193.us.2.epilog-lcssa:                 ; preds = %._crit_edge193.us.2.unr-lcssa
  %125 = sub i64 %1, %.2190.us.2.unr
  %126 = urem i64 %125, %1
  %127 = add i64 %126, %113
  %gep.us.2.epil = getelementptr i64, ptr %invariant.gep.us.2, i64 %.2190.us.2.unr
  store i64 %127, ptr %gep.us.2.epil, align 8, !tbaa !24
  br label %._crit_edge193.us.2

._crit_edge193.us.2:                              ; preds = %._crit_edge193.us.2.unr-lcssa, %._crit_edge193.us.2.epilog-lcssa
  %invariant.gep.us.3 = getelementptr i64, ptr %85, i64 %113
  %xtraiter258 = and i64 %1, 1
  %128 = icmp eq i64 %87, 0
  br i1 %128, label %.loopexit185.loopexit.unr-lcssa, label %._crit_edge193.us.2.new

._crit_edge193.us.2.new:                          ; preds = %._crit_edge193.us.2
  %unroll_iter260 = sub nsw i64 %15, %xtraiter258
  br label %129

129:                                              ; preds = %129, %._crit_edge193.us.2.new
  %.2190.us.3 = phi i64 [ 0, %._crit_edge193.us.2.new ], [ %137, %129 ]
  %niter261 = phi i64 [ 0, %._crit_edge193.us.2.new ], [ %niter261.next.1, %129 ]
  %130 = sub i64 %1, %.2190.us.3
  %131 = urem i64 %130, %1
  %132 = add i64 %131, %114
  %gep.us.3 = getelementptr i64, ptr %invariant.gep.us.3, i64 %.2190.us.3
  store i64 %132, ptr %gep.us.3, align 8, !tbaa !24
  %133 = or disjoint i64 %.2190.us.3, 1
  %134 = sub i64 %1, %133
  %135 = urem i64 %134, %1
  %136 = add i64 %135, %114
  %gep.us.3.1 = getelementptr i64, ptr %invariant.gep.us.3, i64 %133
  store i64 %136, ptr %gep.us.3.1, align 8, !tbaa !24
  %137 = add nuw nsw i64 %.2190.us.3, 2
  %niter261.next.1 = add i64 %niter261, 2
  %niter261.ncmp.1 = icmp eq i64 %niter261.next.1, %unroll_iter260
  br i1 %niter261.ncmp.1, label %.loopexit185.loopexit.unr-lcssa, label %129, !llvm.loop !25

.preheader186:                                    ; preds = %82
  br i1 %16, label %.lr.ph196, label %.preheader

.lr.ph196:                                        ; preds = %.preheader186
  %138 = shl i64 %1, 1
  br label %143

.preheader:                                       ; preds = %143, %.preheader186
  %139 = mul i64 %1, 3
  %invariant.gep = getelementptr i64, ptr %85, i64 %139
  %140 = add i64 %139, 1
  store i64 %140, ptr %invariant.gep, align 8, !tbaa !24
  %gep.1 = getelementptr i8, ptr %invariant.gep, i64 8
  store i64 %139, ptr %gep.1, align 8, !tbaa !24
  %141 = add i64 %139, 3
  %gep.2 = getelementptr i8, ptr %invariant.gep, i64 16
  store i64 %141, ptr %gep.2, align 8, !tbaa !24
  %142 = add i64 %139, 2
  %gep.3 = getelementptr i8, ptr %invariant.gep, i64 24
  store i64 %142, ptr %gep.3, align 8, !tbaa !24
  br label %.loopexit185

143:                                              ; preds = %.lr.ph196, %143
  %.1195 = phi i64 [ 0, %.lr.ph196 ], [ %152, %143 ]
  %144 = sub i64 %1, %.1195
  %145 = getelementptr inbounds i64, ptr %85, i64 %.1195
  store i64 %144, ptr %145, align 8, !tbaa !24
  %146 = add i64 %144, %1
  %147 = urem i64 %146, %138
  %148 = getelementptr i64, ptr %145, i64 %1
  store i64 %147, ptr %148, align 8, !tbaa !24
  %149 = urem i64 %144, %1
  %150 = add i64 %149, %138
  %151 = getelementptr i64, ptr %145, i64 %138
  store i64 %150, ptr %151, align 8, !tbaa !24
  %152 = add nuw nsw i64 %.1195, 1
  %exitcond218.not = icmp eq i64 %152, %15
  br i1 %exitcond218.not, label %.preheader, label %143, !llvm.loop !26

.loopexit185.loopexit.unr-lcssa:                  ; preds = %129, %._crit_edge193.us.2
  %.2190.us.3.unr = phi i64 [ 0, %._crit_edge193.us.2 ], [ %137, %129 ]
  %lcmp.mod259.not = icmp eq i64 %xtraiter258, 0
  br i1 %lcmp.mod259.not, label %.loopexit185, label %.loopexit185.loopexit.epilog-lcssa

.loopexit185.loopexit.epilog-lcssa:               ; preds = %.loopexit185.loopexit.unr-lcssa
  %153 = sub i64 %1, %.2190.us.3.unr
  %154 = urem i64 %153, %1
  %155 = add i64 %154, %114
  %gep.us.3.epil = getelementptr i64, ptr %invariant.gep.us.3, i64 %.2190.us.3.unr
  store i64 %155, ptr %gep.us.3.epil, align 8, !tbaa !24
  br label %.loopexit185

.loopexit185:                                     ; preds = %.loopexit185.loopexit.epilog-lcssa, %.loopexit185.loopexit.unr-lcssa, %.preheader
  %156 = mul i64 %1, 441
  %157 = tail call noalias ptr @calloc(i64 noundef %156, i64 noundef 4) #6
  %158 = getelementptr inbounds i8, ptr %4, i64 40
  store ptr %157, ptr %158, align 8, !tbaa !23
  br i1 %16, label %.lr.ph207, label %._crit_edge208

.lr.ph207:                                        ; preds = %.loopexit185
  %159 = uitofp i64 %1 to double
  %.not173 = icmp eq i32 %2, 0
  br label %160

160:                                              ; preds = %.lr.ph207, %.loopexit
  %.3204 = phi i64 [ 0, %.lr.ph207 ], [ %227, %.loopexit ]
  %161 = uitofp nneg i64 %.3204 to double
  %162 = fmul double %161, 0x400921FB54442D18
  %163 = fdiv double %162, %159
  %164 = fadd double %163, 0x3FF921FB54442D18
  %165 = tail call double @fmod(double noundef %164, double noundef 0x400921FB54442D18) #9
  %166 = tail call double @cos(double noundef %165) #9
  %167 = fmul double %166, 2.100000e+01
  %168 = fmul double %167, 5.000000e-01
  %169 = tail call double @sin(double noundef %165) #9
  %170 = fmul double %169, 2.100000e+01
  %171 = fmul double %170, 5.000000e-01
  %172 = fcmp ole double %165, 0x3FE921FB54442D18
  %173 = fcmp oge double %165, 0x4002D97C7F3321D2
  %or.cond = or i1 %172, %173
  br i1 %or.cond, label %174, label %201

174:                                              ; preds = %160
  %175 = fdiv double %171, %168
  %176 = fsub double 1.000000e+00, %175
  %177 = fmul double %176, 2.000000e+01
  %178 = fmul double %177, 5.000000e-01
  %179 = tail call double @cos(double noundef %165) #9
  %180 = tail call double @llvm.fabs.f64(double %179)
  %181 = fsub double 1.000000e+00, %180
  %182 = fmul double %181, 5.000000e-01
  %183 = fmul double %182, 2.100000e+01
  %184 = fptosi double %183 to i64
  %185 = sub nsw i64 21, %184
  %186 = icmp sgt i64 %185, %184
  br i1 %186, label %.lr.ph203, label %.loopexit

.lr.ph203:                                        ; preds = %174
  %.idx181 = mul nuw nsw i64 %.3204, 1764
  br i1 %.not173, label %.lr.ph203.split.us, label %.lr.ph203.split

.lr.ph203.split.us:                               ; preds = %.lr.ph203, %.lr.ph203.split.us
  %.0166201.us = phi i64 [ %193, %.lr.ph203.split.us ], [ %184, %.lr.ph203 ]
  %187 = sitofp i64 %.0166201.us to double
  %188 = tail call double @llvm.fmuladd.f64(double %175, double %187, double %178)
  %189 = tail call i64 @vl_round_d(double noundef %188)
  %190 = getelementptr float, ptr %157, i64 %.0166201.us
  %.idx182.us = mul i64 %189, 84
  %191 = getelementptr i8, ptr %190, i64 %.idx182.us
  %192 = getelementptr i8, ptr %191, i64 %.idx181
  store float 1.000000e+00, ptr %192, align 4, !tbaa !17
  %193 = add i64 %.0166201.us, 1
  %exitcond223.not = icmp eq i64 %193, %185
  br i1 %exitcond223.not, label %.loopexit, label %.lr.ph203.split.us, !llvm.loop !27

.lr.ph203.split:                                  ; preds = %.lr.ph203, %.lr.ph203.split
  %.0166201 = phi i64 [ %200, %.lr.ph203.split ], [ %184, %.lr.ph203 ]
  %194 = sitofp i64 %.0166201 to double
  %195 = tail call double @llvm.fmuladd.f64(double %175, double %194, double %178)
  %196 = tail call i64 @vl_round_d(double noundef %195)
  %197 = getelementptr float, ptr %157, i64 %196
  %.idx180 = mul i64 %.0166201, 84
  %198 = getelementptr i8, ptr %197, i64 %.idx180
  %199 = getelementptr i8, ptr %198, i64 %.idx181
  store float 1.000000e+00, ptr %199, align 4, !tbaa !17
  %200 = add i64 %.0166201, 1
  %exitcond222.not = icmp eq i64 %200, %185
  br i1 %exitcond222.not, label %.loopexit, label %.lr.ph203.split, !llvm.loop !27

201:                                              ; preds = %160
  %202 = fdiv double %168, %171
  %203 = fsub double 1.000000e+00, %202
  %204 = fmul double %203, 2.000000e+01
  %205 = fmul double %204, 5.000000e-01
  %206 = tail call double @sin(double noundef %165) #9
  %207 = fsub double 1.000000e+00, %206
  %208 = fmul double %207, 5.000000e-01
  %209 = fmul double %208, 2.100000e+01
  %210 = fptosi double %209 to i64
  %211 = sub nsw i64 21, %210
  %212 = icmp sgt i64 %211, %210
  br i1 %212, label %.lr.ph200, label %.loopexit

.lr.ph200:                                        ; preds = %201
  %.idx177 = mul nuw nsw i64 %.3204, 1764
  br i1 %.not173, label %.lr.ph200.split.us, label %.lr.ph200.split

.lr.ph200.split.us:                               ; preds = %.lr.ph200, %.lr.ph200.split.us
  %.0198.us = phi i64 [ %219, %.lr.ph200.split.us ], [ %210, %.lr.ph200 ]
  %213 = sitofp i64 %.0198.us to double
  %214 = tail call double @llvm.fmuladd.f64(double %202, double %213, double %205)
  %215 = tail call i64 @vl_round_d(double noundef %214)
  %216 = getelementptr float, ptr %157, i64 %215
  %.idx178.us = mul i64 %.0198.us, 84
  %217 = getelementptr i8, ptr %216, i64 %.idx178.us
  %218 = getelementptr i8, ptr %217, i64 %.idx177
  store float 1.000000e+00, ptr %218, align 4, !tbaa !17
  %219 = add i64 %.0198.us, 1
  %exitcond221.not = icmp eq i64 %219, %211
  br i1 %exitcond221.not, label %.loopexit, label %.lr.ph200.split.us, !llvm.loop !28

.lr.ph200.split:                                  ; preds = %.lr.ph200, %.lr.ph200.split
  %.0198 = phi i64 [ %226, %.lr.ph200.split ], [ %210, %.lr.ph200 ]
  %220 = sitofp i64 %.0198 to double
  %221 = tail call double @llvm.fmuladd.f64(double %202, double %220, double %205)
  %222 = tail call i64 @vl_round_d(double noundef %221)
  %223 = getelementptr float, ptr %157, i64 %.0198
  %.idx = mul i64 %222, 84
  %224 = getelementptr i8, ptr %223, i64 %.idx
  %225 = getelementptr i8, ptr %224, i64 %.idx177
  store float 1.000000e+00, ptr %225, align 4, !tbaa !17
  %226 = add i64 %.0198, 1
  %exitcond220.not = icmp eq i64 %226, %211
  br i1 %exitcond220.not, label %.loopexit, label %.lr.ph200.split, !llvm.loop !28

.loopexit:                                        ; preds = %.lr.ph200.split, %.lr.ph200.split.us, %.lr.ph203.split, %.lr.ph203.split.us, %201, %174
  %227 = add nuw nsw i64 %.3204, 1
  %exitcond224.not = icmp eq i64 %227, %15
  br i1 %exitcond224.not, label %._crit_edge208, label %160, !llvm.loop !29

._crit_edge208:                                   ; preds = %.loopexit, %.loopexit185.thread, %.loopexit185
  ret ptr %4
}

; 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden i64 @vl_round_d(double noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #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 = { noreturn 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 #3 = { 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 #4 = { 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 #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind allocsize(0,1) }
attributes #7 = { noreturn nounwind }
attributes #8 = { nounwind allocsize(0) }
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 = !{!"VlHog_", !7, i64 0, !10, i64 8, !10, i64 16, !7, i64 24, !7, i64 28, !11, i64 32, !11, i64 40, !10, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !10, i64 88, !10, i64 96}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long long", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!6, !10, i64 16}
!13 = !{!6, !10, i64 48}
!14 = !{!6, !7, i64 24}
!15 = !{!6, !11, i64 56}
!16 = !{!6, !11, i64 64}
!17 = !{!18, !18, i64 0}
!18 = !{!"float", !8, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!6, !10, i64 8}
!22 = !{!6, !11, i64 32}
!23 = !{!6, !11, i64 40}
!24 = !{!10, !10, i64 0}
!25 = distinct !{!25, !20}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}


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