; LLVM IR from Discngine/fpocket :: src (fparams)

; 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.s_fparams = type { [2000 x i8], [2000 x i8], [2000 x i8], [8000 x i8], ptr, ptr, ptr, i32, i32, ptr, ptr, ptr, i8, i8, i32, i32, i16, i32, i32, i32, i16, i32, i32, i32, i16, float, float, float, float, float, [20 x ptr], i16, i16, [20 x ptr], i32, [10 x i8] }

; Function Attrs: nounwind uwtable
define dso_local ptr @init_def_fparams() #0 {
  %1 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %1) #3
  %2 = call ptr @my_malloc(i64 noundef 14472)
  store ptr %2, ptr %1, align 8, !tbaa !5
  %3 = load ptr, ptr %1, align 8, !tbaa !5
  %4 = getelementptr inbounds %struct.s_fparams, ptr %3, i32 0, i32 21
  store i32 3, ptr %4, align 8, !tbaa !9
  %5 = load ptr, ptr %1, align 8, !tbaa !5
  %6 = getelementptr inbounds %struct.s_fparams, ptr %5, i32 0, i32 27
  store float 0x400B333340000000, ptr %6, align 8, !tbaa !14
  %7 = load ptr, ptr %1, align 8, !tbaa !5
  %8 = getelementptr inbounds %struct.s_fparams, ptr %7, i32 0, i32 29
  store float 0x4018CCCCC0000000, ptr %8, align 8, !tbaa !15
  %9 = load ptr, ptr %1, align 8, !tbaa !5
  %10 = getelementptr inbounds %struct.s_fparams, ptr %9, i32 0, i32 0
  %11 = getelementptr inbounds [2000 x i8], ptr %10, i64 0, i64 0
  store i8 0, ptr %11, align 8, !tbaa !16
  %12 = load ptr, ptr %1, align 8, !tbaa !5
  %13 = getelementptr inbounds %struct.s_fparams, ptr %12, i32 0, i32 23
  store i32 -1, ptr %13, align 8, !tbaa !17
  %14 = load ptr, ptr %1, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.s_fparams, ptr %14, i32 0, i32 22
  store i32 300, ptr %15, align 4, !tbaa !18
  %16 = load ptr, ptr %1, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.s_fparams, ptr %16, i32 0, i32 24
  store i16 15, ptr %17, align 4, !tbaa !19
  %18 = load ptr, ptr %1, align 8, !tbaa !5
  %19 = getelementptr inbounds %struct.s_fparams, ptr %18, i32 0, i32 26
  store float 0.000000e+00, ptr %19, align 4, !tbaa !20
  %20 = load ptr, ptr %1, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.s_fparams, ptr %20, i32 0, i32 25
  store float 0x4003333340000000, ptr %21, align 8, !tbaa !21
  %22 = load ptr, ptr %1, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.s_fparams, ptr %22, i32 0, i32 12
  store i8 101, ptr %23, align 8, !tbaa !22
  %24 = load ptr, ptr %1, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.s_fparams, ptr %24, i32 0, i32 13
  store i8 115, ptr %25, align 1, !tbaa !23
  %26 = load ptr, ptr %1, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.s_fparams, ptr %26, i32 0, i32 20
  store i16 0, ptr %27, align 4, !tbaa !24
  %28 = load ptr, ptr %1, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.s_fparams, ptr %28, i32 0, i32 15
  store i32 0, ptr %29, align 8, !tbaa !25
  %30 = load ptr, ptr %1, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.s_fparams, ptr %30, i32 0, i32 19
  store i32 0, ptr %31, align 8, !tbaa !26
  %32 = load ptr, ptr %1, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.s_fparams, ptr %32, i32 0, i32 4
  store ptr null, ptr %33, align 8, !tbaa !27
  %34 = load ptr, ptr %1, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.s_fparams, ptr %34, i32 0, i32 17
  store i32 1, ptr %35, align 8, !tbaa !28
  %36 = load ptr, ptr %1, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.s_fparams, ptr %36, i32 0, i32 18
  store i32 0, ptr %37, align 4, !tbaa !29
  %38 = load ptr, ptr %1, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.s_fparams, ptr %38, i32 0, i32 28
  store float 0x3FE6666660000000, ptr %39, align 4, !tbaa !30
  %40 = load ptr, ptr %1, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.s_fparams, ptr %40, i32 0, i32 1
  %42 = getelementptr inbounds [2000 x i8], ptr %41, i64 0, i64 0
  store i8 0, ptr %42, align 8, !tbaa !16
  %43 = load ptr, ptr %1, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.s_fparams, ptr %43, i32 0, i32 16
  store i16 0, ptr %44, align 4, !tbaa !31
  %45 = load ptr, ptr %1, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.s_fparams, ptr %45, i32 0, i32 7
  store i32 -1, ptr %46, align 8, !tbaa !32
  %47 = load ptr, ptr %1, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.s_fparams, ptr %47, i32 0, i32 34
  store i32 0, ptr %48, align 8, !tbaa !33
  %49 = load ptr, ptr %1, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.s_fparams, ptr %49, i32 0, i32 35
  %51 = getelementptr inbounds [10 x i8], ptr %50, i64 0, i64 0
  store i8 100, ptr %51, align 4, !tbaa !16
  %52 = load ptr, ptr %1, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.s_fparams, ptr %52, i32 0, i32 8
  store i32 0, ptr %53, align 4, !tbaa !34
  %54 = load ptr, ptr %1, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.s_fparams, ptr %54, i32 0, i32 14
  store i32 4, ptr %55, align 4, !tbaa !35
  %56 = load ptr, ptr %1, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.s_fparams, ptr %56, i32 0, i32 31
  store i16 0, ptr %57, align 8, !tbaa !36
  %58 = load ptr, ptr %1, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.s_fparams, ptr %58, i32 0, i32 32
  store i16 0, ptr %59, align 2, !tbaa !37
  %60 = load ptr, ptr %1, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %1) #3
  ret ptr %60
}

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

declare ptr @my_malloc(i64 noundef) #2

; 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 14088}
!10 = !{!"s_fparams", !7, i64 0, !7, i64 2000, !7, i64 4000, !7, i64 6000, !6, i64 14000, !6, i64 14008, !6, i64 14016, !11, i64 14024, !11, i64 14028, !6, i64 14032, !6, i64 14040, !6, i64 14048, !7, i64 14056, !7, i64 14057, !11, i64 14060, !11, i64 14064, !12, i64 14068, !11, i64 14072, !11, i64 14076, !11, i64 14080, !12, i64 14084, !11, i64 14088, !11, i64 14092, !11, i64 14096, !12, i64 14100, !13, i64 14104, !13, i64 14108, !13, i64 14112, !13, i64 14116, !13, i64 14120, !7, i64 14128, !12, i64 14288, !12, i64 14290, !7, i64 14296, !11, i64 14456, !7, i64 14460}
!11 = !{!"int", !7, i64 0}
!12 = !{!"short", !7, i64 0}
!13 = !{!"float", !7, i64 0}
!14 = !{!10, !13, i64 14112}
!15 = !{!10, !13, i64 14120}
!16 = !{!7, !7, i64 0}
!17 = !{!10, !11, i64 14096}
!18 = !{!10, !11, i64 14092}
!19 = !{!10, !12, i64 14100}
!20 = !{!10, !13, i64 14108}
!21 = !{!10, !13, i64 14104}
!22 = !{!10, !7, i64 14056}
!23 = !{!10, !7, i64 14057}
!24 = !{!10, !12, i64 14084}
!25 = !{!10, !11, i64 14064}
!26 = !{!10, !11, i64 14080}
!27 = !{!10, !6, i64 14000}
!28 = !{!10, !11, i64 14072}
!29 = !{!10, !11, i64 14076}
!30 = !{!10, !13, i64 14116}
!31 = !{!10, !12, i64 14068}
!32 = !{!10, !11, i64 14024}
!33 = !{!10, !11, i64 14456}
!34 = !{!10, !11, i64 14028}
!35 = !{!10, !11, i64 14060}
!36 = !{!10, !12, i64 14288}
!37 = !{!10, !12, i64 14290}


; 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 noundef ptr @init_def_fparams() local_unnamed_addr #0 {
  %1 = tail call ptr @my_malloc(i64 noundef 14472) #2
  %2 = getelementptr inbounds i8, ptr %1, i64 14088
  store i32 3, ptr %2, align 8, !tbaa !5
  %3 = getelementptr inbounds i8, ptr %1, i64 14120
  store float 0x4018CCCCC0000000, ptr %3, align 8, !tbaa !13
  store i8 0, ptr %1, align 8, !tbaa !14
  %4 = getelementptr inbounds i8, ptr %1, i64 14096
  store i32 -1, ptr %4, align 8, !tbaa !15
  %5 = getelementptr inbounds i8, ptr %1, i64 14092
  store i32 300, ptr %5, align 4, !tbaa !16
  %6 = getelementptr inbounds i8, ptr %1, i64 14100
  store i16 15, ptr %6, align 4, !tbaa !17
  %7 = getelementptr inbounds i8, ptr %1, i64 14104
  %8 = getelementptr inbounds i8, ptr %1, i64 14056
  store i8 101, ptr %8, align 8, !tbaa !18
  %9 = getelementptr inbounds i8, ptr %1, i64 14057
  store i8 115, ptr %9, align 1, !tbaa !19
  %10 = getelementptr inbounds i8, ptr %1, i64 14084
  store i16 0, ptr %10, align 4, !tbaa !20
  %11 = getelementptr inbounds i8, ptr %1, i64 14064
  store i32 0, ptr %11, align 8, !tbaa !21
  %12 = getelementptr inbounds i8, ptr %1, i64 14080
  store i32 0, ptr %12, align 8, !tbaa !22
  %13 = getelementptr inbounds i8, ptr %1, i64 14000
  store ptr null, ptr %13, align 8, !tbaa !23
  %14 = getelementptr inbounds i8, ptr %1, i64 14072
  store i32 1, ptr %14, align 8, !tbaa !24
  %15 = getelementptr inbounds i8, ptr %1, i64 14076
  store i32 0, ptr %15, align 4, !tbaa !25
  store <4 x float> <float 0x4003333340000000, float 0.000000e+00, float 0x400B333340000000, float 0x3FE6666660000000>, ptr %7, align 8, !tbaa !26
  %16 = getelementptr inbounds i8, ptr %1, i64 2000
  store i8 0, ptr %16, align 8, !tbaa !14
  %17 = getelementptr inbounds i8, ptr %1, i64 14068
  store i16 0, ptr %17, align 4, !tbaa !27
  %18 = getelementptr inbounds i8, ptr %1, i64 14024
  store i32 -1, ptr %18, align 8, !tbaa !28
  %19 = getelementptr inbounds i8, ptr %1, i64 14456
  store i32 0, ptr %19, align 8, !tbaa !29
  %20 = getelementptr inbounds i8, ptr %1, i64 14460
  store i8 100, ptr %20, align 4, !tbaa !14
  %21 = getelementptr inbounds i8, ptr %1, i64 14028
  store i32 0, ptr %21, align 4, !tbaa !30
  %22 = getelementptr inbounds i8, ptr %1, i64 14060
  store i32 4, ptr %22, align 4, !tbaa !31
  %23 = getelementptr inbounds i8, ptr %1, i64 14288
  store i16 0, ptr %23, align 8, !tbaa !32
  %24 = getelementptr inbounds i8, ptr %1, i64 14290
  store i16 0, ptr %24, align 2, !tbaa !33
  ret ptr %1
}

declare ptr @my_malloc(i64 noundef) local_unnamed_addr #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 = { "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 = { 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, !10, i64 14088}
!6 = !{!"s_fparams", !7, i64 0, !7, i64 2000, !7, i64 4000, !7, i64 6000, !9, i64 14000, !9, i64 14008, !9, i64 14016, !10, i64 14024, !10, i64 14028, !9, i64 14032, !9, i64 14040, !9, i64 14048, !7, i64 14056, !7, i64 14057, !10, i64 14060, !10, i64 14064, !11, i64 14068, !10, i64 14072, !10, i64 14076, !10, i64 14080, !11, i64 14084, !10, i64 14088, !10, i64 14092, !10, i64 14096, !11, i64 14100, !12, i64 14104, !12, i64 14108, !12, i64 14112, !12, i64 14116, !12, i64 14120, !7, i64 14128, !11, i64 14288, !11, i64 14290, !7, i64 14296, !10, i64 14456, !7, i64 14460}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"any pointer", !7, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!"short", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!6, !12, i64 14120}
!14 = !{!7, !7, i64 0}
!15 = !{!6, !10, i64 14096}
!16 = !{!6, !10, i64 14092}
!17 = !{!6, !11, i64 14100}
!18 = !{!6, !7, i64 14056}
!19 = !{!6, !7, i64 14057}
!20 = !{!6, !11, i64 14084}
!21 = !{!6, !10, i64 14064}
!22 = !{!6, !10, i64 14080}
!23 = !{!6, !9, i64 14000}
!24 = !{!6, !10, i64 14072}
!25 = !{!6, !10, i64 14076}
!26 = !{!12, !12, i64 0}
!27 = !{!6, !11, i64 14068}
!28 = !{!6, !10, i64 14024}
!29 = !{!6, !10, i64 14456}
!30 = !{!6, !10, i64 14028}
!31 = !{!6, !10, i64 14060}
!32 = !{!6, !11, i64 14288}
!33 = !{!6, !11, i64 14290}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,TailCallElimPass