; LLVM IR from dholzmueller/sfcpp :: src/latex/tikz (TikzElementConfiguration)

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

%"class.sfcpp::img::Color" = type { double, double, double, double }
%"class.sfcpp::latex::tikz::TikzElementConfiguration" = type <{ i8, i8, i8, [5 x i8], %"class.sfcpp::img::Color", %"class.sfcpp::img::Color", double, i32, i32, i8, [7 x i8], double, double, i32, [4 x i8] }>

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5sfcpp5latex4tikz24TikzElementConfigurationC2ENS_3img5ColorES4_(ptr noundef nonnull align 8 dereferenceable(116), ptr noundef byval(%"class.sfcpp::img::Color") align 8, ptr noundef byval(%"class.sfcpp::img::Color") align 8) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5sfcpp5latex4tikz24TikzElementConfiguration18arrowConfigurationENS_3img5ColorES4_(ptr dead_on_unwind noalias writable sret(%"class.sfcpp::latex::tikz::TikzElementConfiguration") align 8 %0, ptr noundef byval(%"class.sfcpp::img::Color") align 8 %1, ptr noundef byval(%"class.sfcpp::img::Color") align 8 %2) #2 align 2 {
  %4 = alloca %"class.sfcpp::img::Color", align 8
  %5 = alloca %"class.sfcpp::img::Color", align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %4, ptr align 8 %1, i64 32, i1 false), !tbaa.struct !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %5, ptr align 8 %2, i64 32, i1 false), !tbaa.struct !5
  call void @_ZN5sfcpp5latex4tikz24TikzElementConfigurationC2ENS_3img5ColorES4_(ptr noundef nonnull align 8 dereferenceable(116) %0, ptr noundef byval(%"class.sfcpp::img::Color") align 8 %4, ptr noundef byval(%"class.sfcpp::img::Color") align 8 %5)
  %6 = getelementptr inbounds %"class.sfcpp::latex::tikz::TikzElementConfiguration", ptr %0, i32 0, i32 0
  store i8 1, ptr %6, align 8, !tbaa !10
  ret void
}

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!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 = !{i64 0, i64 8, !6, i64 8, i64 8, !6, i64 16, i64 8, !6, i64 24, i64 8, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !12, i64 0}
!11 = !{!"_ZTSN5sfcpp5latex4tikz24TikzElementConfigurationE", !12, i64 0, !12, i64 1, !12, i64 2, !13, i64 8, !13, i64 40, !7, i64 72, !14, i64 80, !15, i64 84, !12, i64 88, !7, i64 96, !7, i64 104, !16, i64 112}
!12 = !{!"bool", !8, i64 0}
!13 = !{!"_ZTSN5sfcpp3img5ColorE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!14 = !{!"_ZTSN5sfcpp5latex4tikz12TikzLineTypeE", !8, i64 0}
!15 = !{!"_ZTSN5sfcpp5latex4tikz11TikzLineCapE", !8, i64 0}
!16 = !{!"_ZTSN5sfcpp5latex4tikz13TikzArrowTypeE", !8, i64 0}


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

%"class.sfcpp::img::Color" = type { double, double, double, double }
%"class.sfcpp::latex::tikz::TikzElementConfiguration" = type <{ i8, i8, i8, [5 x i8], %"class.sfcpp::img::Color", %"class.sfcpp::img::Color", double, i32, i32, i8, [7 x i8], double, double, i32, [4 x i8] }>

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5sfcpp5latex4tikz24TikzElementConfigurationC2ENS_3img5ColorES4_(ptr noundef nonnull align 8 dereferenceable(116), ptr noundef byval(%"class.sfcpp::img::Color") align 8, ptr noundef byval(%"class.sfcpp::img::Color") align 8) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN5sfcpp5latex4tikz24TikzElementConfiguration18arrowConfigurationENS_3img5ColorES4_(ptr dead_on_unwind noalias nonnull writable sret(%"class.sfcpp::latex::tikz::TikzElementConfiguration") align 8 %0, ptr nocapture noundef readonly byval(%"class.sfcpp::img::Color") align 8 %1, ptr nocapture noundef readonly byval(%"class.sfcpp::img::Color") align 8 %2) local_unnamed_addr #0 align 2 {
  tail call void @_ZN5sfcpp5latex4tikz24TikzElementConfigurationC2ENS_3img5ColorES4_(ptr noundef nonnull align 8 dereferenceable(116) %0, ptr noundef nonnull byval(%"class.sfcpp::img::Color") align 8 %1, ptr noundef nonnull byval(%"class.sfcpp::img::Color") align 8 %2)
  store i8 1, ptr %0, align 8, !tbaa !5
  ret void
}

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!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 = !{!"_ZTSN5sfcpp5latex4tikz24TikzElementConfigurationE", !7, i64 0, !7, i64 1, !7, i64 2, !10, i64 8, !10, i64 40, !11, i64 72, !12, i64 80, !13, i64 84, !7, i64 88, !11, i64 96, !11, i64 104, !14, i64 112}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN5sfcpp3img5ColorE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!11 = !{!"double", !8, i64 0}
!12 = !{!"_ZTSN5sfcpp5latex4tikz12TikzLineTypeE", !8, i64 0}
!13 = !{!"_ZTSN5sfcpp5latex4tikz11TikzLineCapE", !8, i64 0}
!14 = !{!"_ZTSN5sfcpp5latex4tikz13TikzArrowTypeE", !8, i64 0}


; Effective O3 passes: DSEPass,EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,MemCpyOptPass,PostOrderFunctionAttrsPass,TailCallElimPass