; LLVM IR from Samson-Mano/EM_Propogation_simulation :: EM_Propogation_simulation/src/ImGui (implot)

; 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.ImPlotDateTimeSpec = type <{ i32, i32, i8, i8, [2 x i8] }>
%struct.ImPlotTime = type <{ i64, i32, [4 x i8] }>
%"struct.ImPlot::Formatter_Time_Data" = type { %struct.ImPlotTime, %struct.ImPlotDateTimeSpec, ptr, ptr }
%struct.ImPlotRange = type { double, double }
%struct.ImPlotTicker = type <{ %struct.ImVector.38, %struct.ImGuiTextBuffer, %struct.ImVec2, %struct.ImVec2, i32, [4 x i8] }>
%struct.ImVector.38 = type { i32, i32, ptr }
%struct.ImGuiTextBuffer = type { %struct.ImVector.24 }
%struct.ImVector.24 = type { i32, i32, ptr }
%struct.ImVec2 = type { float, float }
%struct.ImPlotTick = type <{ double, float, %struct.ImVec2, i32, i8, i8, [2 x i8], i32, i32, [4 x i8] }>

@_ZN6ImPlotL16TimeFormatLevel0E = external hidden global [8 x %struct.ImPlotDateTimeSpec], align 16
@_ZN6ImPlotL16TimeFormatLevel1E = external hidden global [8 x %struct.ImPlotDateTimeSpec], align 16
@_ZN6ImPlotL21TimeFormatLevel1FirstE = external hidden global [8 x %struct.ImPlotDateTimeSpec], align 16
@.str.77 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [118 x i8], align 1
@__PRETTY_FUNCTION__._ZN6ImPlot12Locator_TimeER12ImPlotTickerRK11ImPlotRangefbPFidPciPvES6_ = external hidden unnamed_addr constant [101 x i8], align 1
@_ZN6ImPlotL13TimeUnitSpansE = external hidden constant [8 x double], align 16

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN6ImPlot7NiceNumEdb(double noundef, i1 noundef zeroext) #2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK11ImPlotRange4SizeEv(ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52), double noundef, i1 noundef zeroext, i32 noundef, i1 noundef zeroext, ptr noundef, ptr noundef) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot8MakeTimeEiiiiiii(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN6ImPlot7GetYearERK10ImPlotTime(ptr noundef nonnull align 8 dereferenceable(12)) #2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot7AddTimeERK10ImPlotTimeii(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef, i32 noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot9FloorTimeERK10ImPlotTimei(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot8CeilTimeERK10ImPlotTimei(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6ImPlot12Locator_TimeER12ImPlotTickerRK11ImPlotRangefbPFidPciPvES6_(ptr noundef nonnull align 8 dereferenceable(52) %0, ptr noundef nonnull align 8 dereferenceable(16) %1, float noundef %2, i1 noundef zeroext %3, ptr noundef %4, ptr noundef %5) #2 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca float, align 4
  %10 = alloca i8, align 1
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %struct.ImPlotDateTimeSpec, align 4
  %16 = alloca { i64, i32 }, align 8
  %17 = alloca %struct.ImPlotDateTimeSpec, align 4
  %18 = alloca { i64, i32 }, align 8
  %19 = alloca %struct.ImPlotDateTimeSpec, align 4
  %20 = alloca { i64, i32 }, align 8
  %21 = alloca %struct.ImPlotTime, align 8
  %22 = alloca { i64, i32 }, align 8
  %23 = alloca %struct.ImPlotTime, align 8
  %24 = alloca { i64, i32 }, align 8
  %25 = alloca float, align 4
  %26 = alloca i32, align 4
  %27 = alloca %"struct.ImPlot::Formatter_Time_Data", align 8
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca %struct.ImPlotDateTimeSpec, align 4
  %31 = alloca { i64, i32 }, align 4
  %32 = alloca float, align 4
  %33 = alloca %struct.ImPlotDateTimeSpec, align 4
  %34 = alloca { i64, i32 }, align 4
  %35 = alloca float, align 4
  %36 = alloca %struct.ImPlotDateTimeSpec, align 4
  %37 = alloca { i64, i32 }, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca %struct.ImPlotTime, align 8
  %41 = alloca %struct.ImPlotTime, align 8
  %42 = alloca { i64, i32 }, align 8
  %43 = alloca { i64, i32 }, align 8
  %44 = alloca %struct.ImPlotTime, align 8
  %45 = alloca { i64, i32 }, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca %struct.ImPlotTime, align 8
  %49 = alloca { i64, i32 }, align 8
  %50 = alloca float, align 4
  %51 = alloca %struct.ImPlotTime, align 8
  %52 = alloca { i64, i32 }, align 8
  %53 = alloca ptr, align 8
  %54 = alloca %struct.ImPlotTime, align 8
  %55 = alloca { i64, i32 }, align 8
  %56 = alloca %struct.ImPlotDateTimeSpec, align 4
  %57 = alloca { i64, i32 }, align 8
  %58 = alloca float, align 4
  %59 = alloca %struct.ImPlotDateTimeSpec, align 4
  %60 = alloca { i64, i32 }, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca %struct.ImPlotTime, align 8
  %65 = alloca { i64, i32 }, align 8
  %66 = alloca double, align 8
  %67 = alloca double, align 8
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca %struct.ImPlotTime, align 8
  %73 = alloca { i64, i32 }, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store float %2, ptr %9, align 4, !tbaa !9
  %74 = zext i1 %3 to i8
  store i8 %74, ptr %10, align 1, !tbaa !11
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  %75 = load i8, ptr %10, align 1, !tbaa !11, !range !13, !noundef !14
  %76 = trunc i8 %75 to i1
  %77 = zext i1 %76 to i32
  %78 = icmp eq i32 %77, 0
  br i1 %78, label %79, label %80

79:                                               ; preds = %6
  br label %80

80:                                               ; preds = %79, %6
  %81 = phi i1 [ false, %6 ], [ true, %79 ]
  br i1 %81, label %82, label %83

82:                                               ; preds = %80
  br label %85

83:                                               ; preds = %80
  call void @__assert_fail(ptr noundef @.str.77, ptr noundef @.str.78, i32 noundef 1210, ptr noundef @__PRETTY_FUNCTION__._ZN6ImPlot12Locator_TimeER12ImPlotTickerRK11ImPlotRangefbPFidPciPvES6_) #10
  unreachable

84:                                               ; No predecessors!
  br label %85

85:                                               ; preds = %84, %82
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  %86 = load ptr, ptr %8, align 8, !tbaa !5
  %87 = call noundef double @_ZNK11ImPlotRange4SizeEv(ptr noundef nonnull align 8 dereferenceable(16) %86)
  %88 = load float, ptr %9, align 4, !tbaa !9
  %89 = fdiv float %88, 1.000000e+02
  %90 = fpext float %89 to double
  %91 = fdiv double %87, %90
  %92 = call noundef i32 @_ZN6ImPlot15GetUnitForRangeEd(double noundef %91)
  store i32 %92, ptr %13, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  %93 = load i32, ptr %13, align 4, !tbaa !15
  %94 = add nsw i32 %93, 1
  %95 = call noundef i32 @_ZL7ImClampIiET_S0_S0_S0_(i32 noundef %94, i32 noundef 0, i32 noundef 7)
  store i32 %95, ptr %14, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 12, ptr %15) #11
  %96 = load i32, ptr %13, align 4, !tbaa !15
  %97 = call { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef @_ZN6ImPlotL16TimeFormatLevel0E, i32 noundef %96)
  store { i64, i32 } %97, ptr %16, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %15, ptr align 8 %16, i64 10, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %17) #11
  %98 = load i32, ptr %14, align 4, !tbaa !15
  %99 = call { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef @_ZN6ImPlotL16TimeFormatLevel1E, i32 noundef %98)
  store { i64, i32 } %99, ptr %18, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 8 %18, i64 10, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %19) #11
  %100 = load i32, ptr %14, align 4, !tbaa !15
  %101 = call { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef @_ZN6ImPlotL21TimeFormatLevel1FirstE, i32 noundef %100)
  store { i64, i32 } %101, ptr %20, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 8 %20, i64 10, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #11
  %102 = load ptr, ptr %8, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.ImPlotRange, ptr %102, i32 0, i32 0
  %104 = load double, ptr %103, align 8, !tbaa !17
  %105 = call { i64, i32 } @_ZN10ImPlotTime10FromDoubleEd(double noundef %104)
  store { i64, i32 } %105, ptr %22, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 %22, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #11
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.ImPlotRange, ptr %106, i32 0, i32 1
  %108 = load double, ptr %107, align 8, !tbaa !20
  %109 = call { i64, i32 } @_ZN10ImPlotTime10FromDoubleEd(double noundef %108)
  store { i64, i32 } %109, ptr %24, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %23, ptr align 8 %24, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  store float 5.000000e-01, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #11
  store i32 -1, ptr %26, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 48, ptr %27) #11
  call void @_ZN6ImPlot19Formatter_Time_DataC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %27)
  %110 = load ptr, ptr %11, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 2
  store ptr %110, ptr %111, align 8, !tbaa !21
  %112 = load ptr, ptr %12, align 8, !tbaa !5
  %113 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 3
  store ptr %112, ptr %113, align 8, !tbaa !26
  %114 = load i32, ptr %13, align 4, !tbaa !15
  %115 = icmp ne i32 %114, 7
  br i1 %115, label %116, label %268

116:                                              ; preds = %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #11
  %117 = load float, ptr %9, align 4, !tbaa !9
  %118 = load ptr, ptr %8, align 8, !tbaa !5
  %119 = call noundef double @_ZNK11ImPlotRange4SizeEv(ptr noundef nonnull align 8 dereferenceable(16) %118)
  %120 = load i32, ptr %14, align 4, !tbaa !15
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds [8 x double], ptr @_ZN6ImPlotL13TimeUnitSpansE, i64 0, i64 %121
  %123 = load double, ptr %122, align 8, !tbaa !27
  %124 = fdiv double %119, %123
  %125 = fptrunc double %124 to float
  %126 = fdiv float %117, %125
  store float %126, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 %15, i64 12, i1 false), !tbaa.struct !28
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 4 %30, i64 12, i1 false)
  %127 = getelementptr inbounds { i64, i32 }, ptr %31, i32 0, i32 0
  %128 = load i64, ptr %127, align 4
  %129 = getelementptr inbounds { i64, i32 }, ptr %31, i32 0, i32 1
  %130 = load i32, ptr %129, align 4
  %131 = call noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64 %128, i32 %130)
  store float %131, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %17, i64 12, i1 false), !tbaa.struct !28
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %33, i64 12, i1 false)
  %132 = getelementptr inbounds { i64, i32 }, ptr %34, i32 0, i32 0
  %133 = load i64, ptr %132, align 4
  %134 = getelementptr inbounds { i64, i32 }, ptr %34, i32 0, i32 1
  %135 = load i32, ptr %134, align 4
  %136 = call noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64 %133, i32 %135)
  store float %136, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %19, i64 12, i1 false), !tbaa.struct !28
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 4 %36, i64 12, i1 false)
  %137 = getelementptr inbounds { i64, i32 }, ptr %37, i32 0, i32 0
  %138 = load i64, ptr %137, align 4
  %139 = getelementptr inbounds { i64, i32 }, ptr %37, i32 0, i32 1
  %140 = load i32, ptr %139, align 4
  %141 = call noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64 %138, i32 %140)
  store float %141, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #11
  %142 = load float, ptr %28, align 4, !tbaa !9
  %143 = fmul float 5.000000e-01, %142
  %144 = load float, ptr %29, align 4, !tbaa !9
  %145 = fdiv float %143, %144
  %146 = fptosi float %145 to i32
  store i32 %146, ptr %38, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #11
  %147 = load i32, ptr %38, align 4, !tbaa !15
  %148 = load i32, ptr %13, align 4, !tbaa !15
  %149 = call noundef i32 @_ZN6ImPlot11GetTimeStepEii(i32 noundef %147, i32 noundef %148)
  store i32 %149, ptr %39, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #11
  %150 = load ptr, ptr %8, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.ImPlotRange, ptr %150, i32 0, i32 0
  %152 = load double, ptr %151, align 8, !tbaa !17
  %153 = call { i64, i32 } @_ZN10ImPlotTime10FromDoubleEd(double noundef %152)
  store { i64, i32 } %153, ptr %42, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %41, ptr align 8 %42, i64 12, i1 false)
  %154 = load i32, ptr %14, align 4, !tbaa !15
  %155 = call { i64, i32 } @_ZN6ImPlot9FloorTimeERK10ImPlotTimei(ptr noundef nonnull align 8 dereferenceable(12) %41, i32 noundef %154)
  store { i64, i32 } %155, ptr %43, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %43, i64 12, i1 false)
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #11
  br label %156

156:                                              ; preds = %266, %116
  %157 = call noundef zeroext i1 @_ZltRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %40, ptr noundef nonnull align 8 dereferenceable(12) %23)
  br i1 %157, label %158, label %267

158:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #11
  %159 = load i32, ptr %14, align 4, !tbaa !15
  %160 = call { i64, i32 } @_ZN6ImPlot7AddTimeERK10ImPlotTimeii(ptr noundef nonnull align 8 dereferenceable(12) %40, i32 noundef %159, i32 noundef 1)
  store { i64, i32 } %160, ptr %45, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %44, ptr align 8 %45, i64 12, i1 false)
  %161 = call noundef zeroext i1 @_ZgeRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %40, ptr noundef nonnull align 8 dereferenceable(12) %21)
  br i1 %161, label %162, label %204

162:                                              ; preds = %158
  %163 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %40, ptr noundef nonnull align 8 dereferenceable(12) %23)
  br i1 %163, label %164, label %204

164:                                              ; preds = %162
  %165 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %165, ptr align 8 %40, i64 12, i1 false), !tbaa.struct !29
  %166 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %166, ptr align 4 %15, i64 10, i1 false), !tbaa.struct !28
  %167 = load ptr, ptr %7, align 8, !tbaa !5
  %168 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %40)
  %169 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %167, double noundef %168, i1 noundef zeroext true, i32 noundef 0, i1 noundef zeroext true, ptr noundef @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef %27)
  %170 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %170, ptr align 8 %40, i64 12, i1 false), !tbaa.struct !29
  %171 = load i32, ptr %26, align 4, !tbaa !15
  %172 = icmp slt i32 %171, 0
  br i1 %172, label %173, label %174

173:                                              ; preds = %164
  br label %175

174:                                              ; preds = %164
  br label %175

175:                                              ; preds = %174, %173
  %176 = phi ptr [ %19, %173 ], [ %17, %174 ]
  %177 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %177, ptr align 4 %176, i64 10, i1 false), !tbaa.struct !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #11
  %178 = load ptr, ptr %7, align 8, !tbaa !5
  %179 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %40)
  %180 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %178, double noundef %179, i1 noundef zeroext true, i32 noundef 1, i1 noundef zeroext true, ptr noundef @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef %27)
  store ptr %180, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #11
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = load ptr, ptr %46, align 8, !tbaa !5
  %183 = call noundef ptr @_ZN12ImPlotTicker7GetTextERK10ImPlotTick(ptr noundef nonnull align 8 dereferenceable(52) %181, ptr noundef nonnull align 8 dereferenceable(36) %182)
  store ptr %183, ptr %47, align 8, !tbaa !5
  %184 = load i32, ptr %26, align 4, !tbaa !15
  %185 = icmp sge i32 %184, 0
  br i1 %185, label %186, label %200

186:                                              ; preds = %175
  %187 = load ptr, ptr %7, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.ImPlotTicker, ptr %187, i32 0, i32 1
  %189 = getelementptr inbounds %struct.ImGuiTextBuffer, ptr %188, i32 0, i32 0
  %190 = getelementptr inbounds %struct.ImVector.24, ptr %189, i32 0, i32 2
  %191 = load ptr, ptr %190, align 8, !tbaa !31
  %192 = load i32, ptr %26, align 4, !tbaa !15
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i8, ptr %191, i64 %193
  %195 = load ptr, ptr %47, align 8, !tbaa !5
  %196 = call noundef zeroext i1 @_ZN6ImPlot13TimeLabelSameEPKcS1_(ptr noundef %194, ptr noundef %195)
  br i1 %196, label %197, label %200

197:                                              ; preds = %186
  %198 = load ptr, ptr %46, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.ImPlotTick, ptr %198, i32 0, i32 5
  store i8 0, ptr %199, align 1, !tbaa !37
  br label %200

200:                                              ; preds = %197, %186, %175
  %201 = load ptr, ptr %46, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.ImPlotTick, ptr %201, i32 0, i32 3
  %203 = load i32, ptr %202, align 4, !tbaa !39
  store i32 %203, ptr %26, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #11
  br label %204

204:                                              ; preds = %200, %162, %158
  %205 = load i32, ptr %38, align 4, !tbaa !15
  %206 = icmp sgt i32 %205, 1
  br i1 %206, label %207, label %266

207:                                              ; preds = %204
  %208 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %21, ptr noundef nonnull align 8 dereferenceable(12) %44)
  br i1 %208, label %209, label %266

209:                                              ; preds = %207
  %210 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %40, ptr noundef nonnull align 8 dereferenceable(12) %23)
  br i1 %210, label %211, label %266

211:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #11
  %212 = load i32, ptr %13, align 4, !tbaa !15
  %213 = load i32, ptr %39, align 4, !tbaa !15
  %214 = call { i64, i32 } @_ZN6ImPlot7AddTimeERK10ImPlotTimeii(ptr noundef nonnull align 8 dereferenceable(12) %40, i32 noundef %212, i32 noundef %213)
  store { i64, i32 } %214, ptr %49, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %48, ptr align 8 %49, i64 12, i1 false)
  br label %215

215:                                              ; preds = %261, %211
  %216 = call noundef zeroext i1 @_ZltRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %48, ptr noundef nonnull align 8 dereferenceable(12) %44)
  br i1 %216, label %217, label %265

217:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #11
  %218 = call { i64, i32 } @_ZmiRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %44, ptr noundef nonnull align 8 dereferenceable(12) %48)
  store { i64, i32 } %218, ptr %52, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %51, ptr align 8 %52, i64 12, i1 false)
  %219 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %51)
  %220 = load ptr, ptr %8, align 8, !tbaa !5
  %221 = call noundef double @_ZNK11ImPlotRange4SizeEv(ptr noundef nonnull align 8 dereferenceable(16) %220)
  %222 = fdiv double %219, %221
  %223 = fptrunc double %222 to float
  %224 = load float, ptr %9, align 4, !tbaa !9
  %225 = fmul float %223, %224
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #11
  store float %225, ptr %50, align 4, !tbaa !9
  %226 = call noundef zeroext i1 @_ZgeRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %48, ptr noundef nonnull align 8 dereferenceable(12) %21)
  br i1 %226, label %227, label %261

227:                                              ; preds = %217
  %228 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %48, ptr noundef nonnull align 8 dereferenceable(12) %23)
  br i1 %228, label %229, label %261

229:                                              ; preds = %227
  %230 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %230, ptr align 8 %48, i64 12, i1 false), !tbaa.struct !29
  %231 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %231, ptr align 4 %15, i64 10, i1 false), !tbaa.struct !28
  %232 = load ptr, ptr %7, align 8, !tbaa !5
  %233 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %48)
  %234 = load float, ptr %50, align 4, !tbaa !9
  %235 = load float, ptr %29, align 4, !tbaa !9
  %236 = fcmp oge float %234, %235
  %237 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %232, double noundef %233, i1 noundef zeroext false, i32 noundef 0, i1 noundef zeroext %236, ptr noundef @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef %27)
  %238 = load i32, ptr %26, align 4, !tbaa !15
  %239 = icmp slt i32 %238, 0
  br i1 %239, label %240, label %260

240:                                              ; preds = %229
  %241 = load float, ptr %50, align 4, !tbaa !9
  %242 = load float, ptr %29, align 4, !tbaa !9
  %243 = fcmp oge float %241, %242
  br i1 %243, label %244, label %260

244:                                              ; preds = %240
  %245 = load float, ptr %50, align 4, !tbaa !9
  %246 = load float, ptr %32, align 4, !tbaa !9
  %247 = load float, ptr %35, align 4, !tbaa !9
  %248 = fadd float %246, %247
  %249 = fdiv float %248, 2.000000e+00
  %250 = fcmp oge float %245, %249
  br i1 %250, label %251, label %260

251:                                              ; preds = %244
  %252 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %252, ptr align 8 %48, i64 12, i1 false), !tbaa.struct !29
  %253 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %253, ptr align 4 %19, i64 10, i1 false), !tbaa.struct !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #11
  %254 = load ptr, ptr %7, align 8, !tbaa !5
  %255 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %48)
  %256 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %254, double noundef %255, i1 noundef zeroext true, i32 noundef 1, i1 noundef zeroext true, ptr noundef @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef %27)
  store ptr %256, ptr %53, align 8, !tbaa !5
  %257 = load ptr, ptr %53, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.ImPlotTick, ptr %257, i32 0, i32 3
  %259 = load i32, ptr %258, align 4, !tbaa !39
  store i32 %259, ptr %26, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #11
  br label %260

260:                                              ; preds = %251, %244, %240, %229
  br label %261

261:                                              ; preds = %260, %227, %217
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #11
  %262 = load i32, ptr %13, align 4, !tbaa !15
  %263 = load i32, ptr %39, align 4, !tbaa !15
  %264 = call { i64, i32 } @_ZN6ImPlot7AddTimeERK10ImPlotTimeii(ptr noundef nonnull align 8 dereferenceable(12) %48, i32 noundef %262, i32 noundef %263)
  store { i64, i32 } %264, ptr %55, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %54, ptr align 8 %55, i64 12, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %48, ptr align 8 %54, i64 12, i1 false), !tbaa.struct !29
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #11
  br label %215, !llvm.loop !40

265:                                              ; preds = %215
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #11
  br label %266

266:                                              ; preds = %265, %209, %207, %204
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %44, i64 12, i1 false), !tbaa.struct !29
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #11
  br label %156, !llvm.loop !42

267:                                              ; preds = %156
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  br label %344

268:                                              ; preds = %85
  call void @llvm.lifetime.start.p0(i64 12, ptr %56) #11
  %269 = call { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef @_ZN6ImPlotL16TimeFormatLevel0E, i32 noundef 7)
  store { i64, i32 } %269, ptr %57, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %56, ptr align 8 %57, i64 10, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %59, ptr align 4 %56, i64 12, i1 false), !tbaa.struct !28
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %60, ptr align 4 %59, i64 12, i1 false)
  %270 = getelementptr inbounds { i64, i32 }, ptr %60, i32 0, i32 0
  %271 = load i64, ptr %270, align 4
  %272 = getelementptr inbounds { i64, i32 }, ptr %60, i32 0, i32 1
  %273 = load i32, ptr %272, align 4
  %274 = call noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64 %271, i32 %273)
  store float %274, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #11
  %275 = load float, ptr %9, align 4, !tbaa !9
  %276 = fmul float 5.000000e-01, %275
  %277 = load float, ptr %58, align 4, !tbaa !9
  %278 = fdiv float %276, %277
  %279 = fptosi float %278 to i32
  store i32 %279, ptr %61, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #11
  %280 = call noundef i32 @_ZN6ImPlot7GetYearERK10ImPlotTime(ptr noundef nonnull align 8 dereferenceable(12) %21)
  store i32 %280, ptr %62, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #11
  %281 = call { i64, i32 } @_ZN6ImPlot8CeilTimeERK10ImPlotTimei(ptr noundef nonnull align 8 dereferenceable(12) %23, i32 noundef 7)
  store { i64, i32 } %281, ptr %65, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %64, ptr align 8 %65, i64 12, i1 false)
  %282 = call noundef i32 @_ZN6ImPlot7GetYearERK10ImPlotTime(ptr noundef nonnull align 8 dereferenceable(12) %64)
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #11
  store i32 %282, ptr %63, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #11
  %283 = load i32, ptr %63, align 4, !tbaa !15
  %284 = load i32, ptr %62, align 4, !tbaa !15
  %285 = sub nsw i32 %283, %284
  %286 = sitofp i32 %285 to double
  %287 = fmul double %286, 0x3FEFAE147AE147AE
  %288 = call noundef double @_ZN6ImPlot7NiceNumEdb(double noundef %287, i1 noundef zeroext false)
  store double %288, ptr %66, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #11
  %289 = load double, ptr %66, align 8, !tbaa !27
  %290 = load i32, ptr %61, align 4, !tbaa !15
  %291 = sub nsw i32 %290, 1
  %292 = sitofp i32 %291 to double
  %293 = fdiv double %289, %292
  %294 = call noundef double @_ZN6ImPlot7NiceNumEdb(double noundef %293, i1 noundef zeroext true)
  store double %294, ptr %67, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #11
  %295 = load i32, ptr %62, align 4, !tbaa !15
  %296 = sitofp i32 %295 to double
  %297 = load double, ptr %67, align 8, !tbaa !27
  %298 = fdiv double %296, %297
  %299 = call double @llvm.floor.f64(double %298)
  %300 = load double, ptr %67, align 8, !tbaa !27
  %301 = fmul double %299, %300
  %302 = fptosi double %301 to i32
  store i32 %302, ptr %68, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #11
  %303 = load i32, ptr %63, align 4, !tbaa !15
  %304 = sitofp i32 %303 to double
  %305 = load double, ptr %67, align 8, !tbaa !27
  %306 = fdiv double %304, %305
  %307 = call double @llvm.ceil.f64(double %306)
  %308 = load double, ptr %67, align 8, !tbaa !27
  %309 = fmul double %307, %308
  %310 = fptosi double %309 to i32
  store i32 %310, ptr %69, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #11
  %311 = load double, ptr %67, align 8, !tbaa !27
  %312 = fptosi double %311 to i32
  %313 = icmp sle i32 %312, 0
  br i1 %313, label %314, label %315

314:                                              ; preds = %268
  br label %318

315:                                              ; preds = %268
  %316 = load double, ptr %67, align 8, !tbaa !27
  %317 = fptosi double %316 to i32
  br label %318

318:                                              ; preds = %315, %314
  %319 = phi i32 [ 1, %314 ], [ %317, %315 ]
  store i32 %319, ptr %70, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #11
  %320 = load i32, ptr %68, align 4, !tbaa !15
  store i32 %320, ptr %71, align 4, !tbaa !15
  br label %321

321:                                              ; preds = %339, %318
  %322 = load i32, ptr %71, align 4, !tbaa !15
  %323 = load i32, ptr %69, align 4, !tbaa !15
  %324 = icmp slt i32 %322, %323
  br i1 %324, label %326, label %325

325:                                              ; preds = %321
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #11
  br label %343

326:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 16, ptr %72) #11
  %327 = load i32, ptr %71, align 4, !tbaa !15
  %328 = call { i64, i32 } @_ZN6ImPlot8MakeTimeEiiiiiii(i32 noundef %327, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  store { i64, i32 } %328, ptr %73, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %72, ptr align 8 %73, i64 12, i1 false)
  %329 = call noundef zeroext i1 @_ZgeRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %72, ptr noundef nonnull align 8 dereferenceable(12) %21)
  br i1 %329, label %330, label %338

330:                                              ; preds = %326
  %331 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %72, ptr noundef nonnull align 8 dereferenceable(12) %23)
  br i1 %331, label %332, label %338

332:                                              ; preds = %330
  %333 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %333, ptr align 8 %72, i64 12, i1 false), !tbaa.struct !29
  %334 = getelementptr inbounds %"struct.ImPlot::Formatter_Time_Data", ptr %27, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %334, ptr align 4 %56, i64 10, i1 false), !tbaa.struct !28
  %335 = load ptr, ptr %7, align 8, !tbaa !5
  %336 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %72)
  %337 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %335, double noundef %336, i1 noundef zeroext true, i32 noundef 0, i1 noundef zeroext true, ptr noundef @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef %27)
  br label %338

338:                                              ; preds = %332, %330, %326
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #11
  br label %339

339:                                              ; preds = %338
  %340 = load i32, ptr %70, align 4, !tbaa !15
  %341 = load i32, ptr %71, align 4, !tbaa !15
  %342 = add nsw i32 %341, %340
  store i32 %342, ptr %71, align 4, !tbaa !15
  br label %321, !llvm.loop !43

343:                                              ; preds = %325
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %56) #11
  br label %344

344:                                              ; preds = %343, %267
  call void @llvm.lifetime.end.p0(i64 48, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  ret void
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN6ImPlot15GetUnitForRangeEd(double noundef) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL7ImClampIiET_S0_S0_S0_(i32 noundef, i32 noundef, i32 noundef) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef, i32 noundef) #7

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN10ImPlotTime10FromDoubleEd(double noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6ImPlot19Formatter_Time_DataC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #8 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64, i32) #9

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN6ImPlot11GetTimeStepEii(i32 noundef, i32 noundef) #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZltRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) #7

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZgeRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12)) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN6ImPlotL14Formatter_TimeEdPciPv(double noundef, ptr noundef, i32 noundef, ptr noundef) #8

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN12ImPlotTicker7GetTextERK10ImPlotTick(ptr noundef nonnull align 8 dereferenceable(52), ptr noundef nonnull align 8 dereferenceable(36)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN6ImPlot13TimeLabelSameEPKcS1_(ptr noundef, ptr noundef) #7

; Function Attrs: inlinehint mustprogress uwtable
declare hidden { i64, i32 } @_ZmiRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) #8

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { mustprogress uwtable "min-legal-vector-width"="64" "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 = { 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 #7 = { inlinehint 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 #8 = { inlinehint 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" }
attributes #9 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "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 #10 = { noreturn nounwind }
attributes #11 = { 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!16, !16, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!18, !19, i64 0}
!18 = !{!"_ZTS11ImPlotRange", !19, i64 0, !19, i64 8}
!19 = !{!"double", !7, i64 0}
!20 = !{!18, !19, i64 8}
!21 = !{!22, !6, i64 32}
!22 = !{!"_ZTSN6ImPlot19Formatter_Time_DataE", !23, i64 0, !25, i64 16, !6, i64 32, !6, i64 40}
!23 = !{!"_ZTS10ImPlotTime", !24, i64 0, !16, i64 8}
!24 = !{!"long", !7, i64 0}
!25 = !{!"_ZTS18ImPlotDateTimeSpec", !16, i64 0, !16, i64 4, !12, i64 8, !12, i64 9}
!26 = !{!22, !6, i64 40}
!27 = !{!19, !19, i64 0}
!28 = !{i64 0, i64 4, !15, i64 4, i64 4, !15, i64 8, i64 1, !11, i64 9, i64 1, !11}
!29 = !{i64 0, i64 8, !30, i64 8, i64 4, !15}
!30 = !{!24, !24, i64 0}
!31 = !{!32, !6, i64 24}
!32 = !{!"_ZTS12ImPlotTicker", !33, i64 0, !34, i64 16, !36, i64 32, !36, i64 40, !16, i64 48}
!33 = !{!"_ZTS8ImVectorI10ImPlotTickE", !16, i64 0, !16, i64 4, !6, i64 8}
!34 = !{!"_ZTS15ImGuiTextBuffer", !35, i64 0}
!35 = !{!"_ZTS8ImVectorIcE", !16, i64 0, !16, i64 4, !6, i64 8}
!36 = !{!"_ZTS6ImVec2", !10, i64 0, !10, i64 4}
!37 = !{!38, !12, i64 25}
!38 = !{!"_ZTS10ImPlotTick", !19, i64 0, !10, i64 8, !36, i64 12, !16, i64 20, !12, i64 24, !12, i64 25, !16, i64 28, !16, i64 32}
!39 = !{!38, !16, i64 20}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = distinct !{!42, !41}
!43 = distinct !{!43, !41}


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

%struct.ImPlotDateTimeSpec = type <{ i32, i32, i8, i8, [2 x i8] }>
%struct.ImPlotTime = type <{ i64, i32, [4 x i8] }>
%"struct.ImPlot::Formatter_Time_Data" = type { %struct.ImPlotTime, %struct.ImPlotDateTimeSpec, ptr, ptr }

@_ZN6ImPlotL16TimeFormatLevel0E = external hidden global [8 x %struct.ImPlotDateTimeSpec], align 16
@_ZN6ImPlotL16TimeFormatLevel1E = external hidden global [8 x %struct.ImPlotDateTimeSpec], align 16
@_ZN6ImPlotL21TimeFormatLevel1FirstE = external hidden global [8 x %struct.ImPlotDateTimeSpec], align 16
@.str.77 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [118 x i8], align 1
@__PRETTY_FUNCTION__._ZN6ImPlot12Locator_TimeER12ImPlotTickerRK11ImPlotRangefbPFidPciPvES6_ = external hidden unnamed_addr constant [101 x i8], align 1
@_ZN6ImPlotL13TimeUnitSpansE = external hidden local_unnamed_addr constant [8 x double], align 16

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

; Function Attrs: mustprogress 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) #1

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN6ImPlot7NiceNumEdb(double noundef, i1 noundef zeroext) local_unnamed_addr #2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK11ImPlotRange4SizeEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52), double noundef, i1 noundef zeroext, i32 noundef, i1 noundef zeroext, ptr noundef, ptr noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot8MakeTimeEiiiiiii(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN6ImPlot7GetYearERK10ImPlotTime(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot7AddTimeERK10ImPlotTimeii(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot9FloorTimeERK10ImPlotTimei(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot8CeilTimeERK10ImPlotTimei(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6ImPlot12Locator_TimeER12ImPlotTickerRK11ImPlotRangefbPFidPciPvES6_(ptr noundef nonnull align 8 dereferenceable(52) %0, ptr noundef nonnull align 8 dereferenceable(16) %1, float noundef %2, i1 noundef zeroext %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #2 {
  %7 = alloca %struct.ImPlotDateTimeSpec, align 8
  %8 = alloca %struct.ImPlotDateTimeSpec, align 8
  %9 = alloca %struct.ImPlotTime, align 8
  %10 = alloca %struct.ImPlotTime, align 8
  %11 = alloca %"struct.ImPlot::Formatter_Time_Data", align 8
  %12 = alloca %struct.ImPlotTime, align 8
  %13 = alloca %struct.ImPlotTime, align 8
  %14 = alloca %struct.ImPlotTime, align 8
  %15 = alloca %struct.ImPlotTime, align 8
  %16 = alloca %struct.ImPlotTime, align 8
  %17 = alloca %struct.ImPlotTime, align 8
  %18 = alloca %struct.ImPlotTime, align 8
  br i1 %3, label %19, label %20

19:                                               ; preds = %6
  tail call void @__assert_fail(ptr noundef nonnull @.str.77, ptr noundef nonnull @.str.78, i32 noundef 1210, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6ImPlot12Locator_TimeER12ImPlotTickerRK11ImPlotRangefbPFidPciPvES6_) #11
  unreachable

20:                                               ; preds = %6
  %21 = tail call noundef double @_ZNK11ImPlotRange4SizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1)
  %22 = fdiv float %2, 1.000000e+02
  %23 = fpext float %22 to double
  %24 = fdiv double %21, %23
  %25 = tail call noundef i32 @_ZN6ImPlot15GetUnitForRangeEd(double noundef %24)
  %26 = add nsw i32 %25, 1
  %27 = tail call noundef i32 @_ZL7ImClampIiET_S0_S0_S0_(i32 noundef %26, i32 noundef 0, i32 noundef 7)
  %28 = tail call { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef nonnull @_ZN6ImPlotL16TimeFormatLevel0E, i32 noundef %25)
  %.fca.0.extract107 = extractvalue { i64, i32 } %28, 0
  %.fca.1.extract108 = extractvalue { i64, i32 } %28, 1
  %.sroa.2110.0.extract.trunc = trunc i32 %.fca.1.extract108 to i16
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %7) #12
  %29 = tail call { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef nonnull @_ZN6ImPlotL16TimeFormatLevel1E, i32 noundef %27)
  %.fca.0.extract103 = extractvalue { i64, i32 } %29, 0
  %.fca.1.extract104 = extractvalue { i64, i32 } %29, 1
  store i64 %.fca.0.extract103, ptr %7, align 8
  %.sroa.2106.0..sroa_idx = getelementptr inbounds i8, ptr %7, i64 8
  %.sroa.2106.0.extract.trunc = trunc i32 %.fca.1.extract104 to i16
  store i16 %.sroa.2106.0.extract.trunc, ptr %.sroa.2106.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #12
  %30 = tail call { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef nonnull @_ZN6ImPlotL21TimeFormatLevel1FirstE, i32 noundef %27)
  %.fca.0.extract99 = extractvalue { i64, i32 } %30, 0
  %.fca.1.extract100 = extractvalue { i64, i32 } %30, 1
  store i64 %.fca.0.extract99, ptr %8, align 8
  %.sroa.2102.0..sroa_idx = getelementptr inbounds i8, ptr %8, i64 8
  %.sroa.2102.0.extract.trunc = trunc i32 %.fca.1.extract100 to i16
  store i16 %.sroa.2102.0.extract.trunc, ptr %.sroa.2102.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #12
  %31 = load double, ptr %1, align 8, !tbaa !5
  %32 = tail call { i64, i32 } @_ZN10ImPlotTime10FromDoubleEd(double noundef %31)
  %.fca.0.extract95 = extractvalue { i64, i32 } %32, 0
  %.fca.1.extract96 = extractvalue { i64, i32 } %32, 1
  store i64 %.fca.0.extract95, ptr %9, align 8
  %.sroa.298.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 8
  store i32 %.fca.1.extract96, ptr %.sroa.298.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #12
  %33 = getelementptr inbounds i8, ptr %1, i64 8
  %34 = load double, ptr %33, align 8, !tbaa !10
  %35 = tail call { i64, i32 } @_ZN10ImPlotTime10FromDoubleEd(double noundef %34)
  %.fca.0.extract91 = extractvalue { i64, i32 } %35, 0
  %.fca.1.extract92 = extractvalue { i64, i32 } %35, 1
  store i64 %.fca.0.extract91, ptr %10, align 8
  %.sroa.294.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 8
  store i32 %.fca.1.extract92, ptr %.sroa.294.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %11) #12
  call void @_ZN6ImPlot19Formatter_Time_DataC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %11)
  %36 = getelementptr inbounds i8, ptr %11, i64 32
  store ptr %4, ptr %36, align 8, !tbaa !11
  %37 = getelementptr inbounds i8, ptr %11, i64 40
  store ptr %5, ptr %37, align 8, !tbaa !19
  %.not = icmp eq i32 %25, 7
  br i1 %.not, label %119, label %38

38:                                               ; preds = %20
  %.sroa.6.8.insert.ext = and i32 %.fca.1.extract108, 65535
  %39 = call noundef double @_ZNK11ImPlotRange4SizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1)
  %40 = sext i32 %27 to i64
  %41 = getelementptr inbounds [8 x double], ptr @_ZN6ImPlotL13TimeUnitSpansE, i64 0, i64 %40
  %42 = load double, ptr %41, align 8, !tbaa !20
  %43 = fdiv double %39, %42
  %44 = fptrunc double %43 to float
  %45 = fdiv float %2, %44
  %46 = call noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64 %.fca.0.extract107, i32 %.sroa.6.8.insert.ext)
  %.sroa.277.0.copyload = load i32, ptr %.sroa.2106.0..sroa_idx, align 8
  %47 = call noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64 %.fca.0.extract103, i32 %.sroa.277.0.copyload)
  %.sroa.272.0.copyload = load i32, ptr %.sroa.2102.0..sroa_idx, align 8
  %48 = call noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64 %.fca.0.extract99, i32 %.sroa.272.0.copyload)
  %49 = fmul float %45, 5.000000e-01
  %50 = fdiv float %49, %46
  %51 = fptosi float %50 to i32
  %52 = call noundef i32 @_ZN6ImPlot11GetTimeStepEii(i32 noundef %51, i32 noundef %25)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #12
  %53 = load double, ptr %1, align 8, !tbaa !5
  %54 = call { i64, i32 } @_ZN10ImPlotTime10FromDoubleEd(double noundef %53)
  %.fca.0.extract61 = extractvalue { i64, i32 } %54, 0
  %.fca.1.extract62 = extractvalue { i64, i32 } %54, 1
  store i64 %.fca.0.extract61, ptr %13, align 8
  %.sroa.264.0..sroa_idx = getelementptr inbounds i8, ptr %13, i64 8
  store i32 %.fca.1.extract62, ptr %.sroa.264.0..sroa_idx, align 8
  %55 = call { i64, i32 } @_ZN6ImPlot9FloorTimeERK10ImPlotTimei(ptr noundef nonnull align 8 dereferenceable(12) %13, i32 noundef %27)
  %.fca.0.extract57 = extractvalue { i64, i32 } %55, 0
  %.fca.1.extract58 = extractvalue { i64, i32 } %55, 1
  store i64 %.fca.0.extract57, ptr %12, align 8
  %.sroa.260.0..sroa_idx = getelementptr inbounds i8, ptr %12, i64 8
  store i32 %.fca.1.extract58, ptr %.sroa.260.0..sroa_idx, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #12
  %56 = call noundef zeroext i1 @_ZltRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(12) %10)
  br i1 %56, label %.lr.ph157, label %._crit_edge158

.lr.ph157:                                        ; preds = %38
  %.sroa.256.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 8
  %57 = getelementptr inbounds i8, ptr %11, i64 16
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %11, i64 24
  %58 = getelementptr inbounds i8, ptr %0, i64 24
  %59 = icmp sgt i32 %51, 1
  %.sroa.248.0..sroa_idx = getelementptr inbounds i8, ptr %15, i64 8
  %.sroa.241.0..sroa_idx = getelementptr inbounds i8, ptr %16, i64 8
  %60 = fadd float %47, %48
  %61 = fmul float %60, 5.000000e-01
  br label %62

62:                                               ; preds = %.lr.ph157, %117
  %.0155 = phi i32 [ -1, %.lr.ph157 ], [ %.4, %117 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  %63 = call { i64, i32 } @_ZN6ImPlot7AddTimeERK10ImPlotTimeii(ptr noundef nonnull align 8 dereferenceable(12) %12, i32 noundef %27, i32 noundef 1)
  %.fca.0.extract53 = extractvalue { i64, i32 } %63, 0
  %.fca.1.extract54 = extractvalue { i64, i32 } %63, 1
  store i64 %.fca.0.extract53, ptr %14, align 8
  store i32 %.fca.1.extract54, ptr %.sroa.256.0..sroa_idx, align 8
  %64 = call noundef zeroext i1 @_ZgeRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(12) %9)
  br i1 %64, label %65, label %85

65:                                               ; preds = %62
  %66 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(12) %10)
  br i1 %66, label %67, label %85

67:                                               ; preds = %65
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %11, ptr noundef nonnull align 8 dereferenceable(12) %12, i64 12, i1 false), !tbaa.struct !21
  store i64 %.fca.0.extract107, ptr %57, align 8
  store i16 %.sroa.2110.0.extract.trunc, ptr %.sroa.6.0..sroa_idx, align 8
  %68 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %12)
  %69 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %0, double noundef %68, i1 noundef zeroext true, i32 noundef 0, i1 noundef zeroext true, ptr noundef nonnull @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef nonnull %11)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %11, ptr noundef nonnull align 8 dereferenceable(12) %12, i64 12, i1 false), !tbaa.struct !21
  %70 = icmp slt i32 %.0155, 0
  %. = select i1 %70, ptr %8, ptr %7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(10) %57, ptr noundef nonnull align 8 dereferenceable(10) %., i64 10, i1 false), !tbaa.struct !24
  %71 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %12)
  %72 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %0, double noundef %71, i1 noundef zeroext true, i32 noundef 1, i1 noundef zeroext true, ptr noundef nonnull @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef nonnull %11)
  %73 = call noundef ptr @_ZN12ImPlotTicker7GetTextERK10ImPlotTick(ptr noundef nonnull align 8 dereferenceable(52) %0, ptr noundef nonnull align 8 dereferenceable(36) %72)
  %74 = icmp sgt i32 %.0155, -1
  br i1 %74, label %75, label %82

75:                                               ; preds = %67
  %76 = load ptr, ptr %58, align 8, !tbaa !26
  %77 = zext nneg i32 %.0155 to i64
  %78 = getelementptr inbounds i8, ptr %76, i64 %77
  %79 = call noundef zeroext i1 @_ZN6ImPlot13TimeLabelSameEPKcS1_(ptr noundef %78, ptr noundef %73)
  br i1 %79, label %80, label %82

80:                                               ; preds = %75
  %81 = getelementptr inbounds i8, ptr %72, i64 25
  store i8 0, ptr %81, align 1, !tbaa !33
  br label %82

82:                                               ; preds = %80, %75, %67
  %83 = getelementptr inbounds i8, ptr %72, i64 20
  %84 = load i32, ptr %83, align 4, !tbaa !35
  br label %85

85:                                               ; preds = %82, %65, %62
  %.1 = phi i32 [ %84, %82 ], [ %.0155, %65 ], [ %.0155, %62 ]
  br i1 %59, label %86, label %117

86:                                               ; preds = %85
  %87 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %9, ptr noundef nonnull align 8 dereferenceable(12) %14)
  br i1 %87, label %88, label %117

88:                                               ; preds = %86
  %89 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(12) %10)
  br i1 %89, label %90, label %117

90:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #12
  %91 = call { i64, i32 } @_ZN6ImPlot7AddTimeERK10ImPlotTimeii(ptr noundef nonnull align 8 dereferenceable(12) %12, i32 noundef %25, i32 noundef %52)
  %.fca.0.extract45 = extractvalue { i64, i32 } %91, 0
  store i64 %.fca.0.extract45, ptr %15, align 8
  %storemerge153 = extractvalue { i64, i32 } %91, 1
  store i32 %storemerge153, ptr %.sroa.248.0..sroa_idx, align 8
  %92 = call noundef zeroext i1 @_ZltRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %15, ptr noundef nonnull align 8 dereferenceable(12) %14)
  br i1 %92, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %90, %114
  %.2154 = phi i32 [ %.3, %114 ], [ %.1, %90 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #12
  %93 = call { i64, i32 } @_ZmiRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %14, ptr noundef nonnull align 8 dereferenceable(12) %15)
  %.fca.0.extract38 = extractvalue { i64, i32 } %93, 0
  %.fca.1.extract39 = extractvalue { i64, i32 } %93, 1
  store i64 %.fca.0.extract38, ptr %16, align 8
  store i32 %.fca.1.extract39, ptr %.sroa.241.0..sroa_idx, align 8
  %94 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %16)
  %95 = call noundef double @_ZNK11ImPlotRange4SizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1)
  %96 = fdiv double %94, %95
  %97 = fptrunc double %96 to float
  %98 = fmul float %97, %2
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  %99 = call noundef zeroext i1 @_ZgeRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %15, ptr noundef nonnull align 8 dereferenceable(12) %9)
  br i1 %99, label %100, label %114

100:                                              ; preds = %.lr.ph
  %101 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %15, ptr noundef nonnull align 8 dereferenceable(12) %10)
  br i1 %101, label %102, label %114

102:                                              ; preds = %100
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %11, ptr noundef nonnull align 8 dereferenceable(12) %15, i64 12, i1 false), !tbaa.struct !21
  store i64 %.fca.0.extract107, ptr %57, align 8
  store i16 %.sroa.2110.0.extract.trunc, ptr %.sroa.6.0..sroa_idx, align 8
  %103 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %15)
  %104 = fcmp oge float %98, %46
  %105 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %0, double noundef %103, i1 noundef zeroext false, i32 noundef 0, i1 noundef zeroext %104, ptr noundef nonnull @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef nonnull %11)
  %106 = icmp slt i32 %.2154, 0
  %107 = fcmp oge float %98, %61
  %108 = and i1 %106, %107
  %or.cond.not = and i1 %108, %104
  br i1 %or.cond.not, label %109, label %114

109:                                              ; preds = %102
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %11, ptr noundef nonnull align 8 dereferenceable(12) %15, i64 12, i1 false), !tbaa.struct !21
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(10) %57, ptr noundef nonnull align 8 dereferenceable(10) %8, i64 10, i1 false), !tbaa.struct !24
  %110 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %15)
  %111 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %0, double noundef %110, i1 noundef zeroext true, i32 noundef 1, i1 noundef zeroext true, ptr noundef nonnull @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef nonnull %11)
  %112 = getelementptr inbounds i8, ptr %111, i64 20
  %113 = load i32, ptr %112, align 4, !tbaa !35
  br label %114

114:                                              ; preds = %102, %109, %100, %.lr.ph
  %.3 = phi i32 [ %113, %109 ], [ %.2154, %102 ], [ %.2154, %100 ], [ %.2154, %.lr.ph ]
  %115 = call { i64, i32 } @_ZN6ImPlot7AddTimeERK10ImPlotTimeii(ptr noundef nonnull align 8 dereferenceable(12) %15, i32 noundef %25, i32 noundef %52)
  %.fca.0.extract31 = extractvalue { i64, i32 } %115, 0
  store i64 %.fca.0.extract31, ptr %15, align 8, !tbaa !22
  %storemerge = extractvalue { i64, i32 } %115, 1
  store i32 %storemerge, ptr %.sroa.248.0..sroa_idx, align 8
  %116 = call noundef zeroext i1 @_ZltRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %15, ptr noundef nonnull align 8 dereferenceable(12) %14)
  br i1 %116, label %.lr.ph, label %._crit_edge, !llvm.loop !36

._crit_edge:                                      ; preds = %114, %90
  %.2.lcssa = phi i32 [ %.1, %90 ], [ %.3, %114 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  br label %117

117:                                              ; preds = %._crit_edge, %88, %86, %85
  %.4 = phi i32 [ %.2.lcssa, %._crit_edge ], [ %.1, %88 ], [ %.1, %86 ], [ %.1, %85 ]
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(12) %14, i64 12, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  %118 = call noundef zeroext i1 @_ZltRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(12) %10)
  br i1 %118, label %62, label %._crit_edge158, !llvm.loop !38

._crit_edge158:                                   ; preds = %117, %38
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #12
  br label %.loopexit

119:                                              ; preds = %20
  %120 = call { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef nonnull @_ZN6ImPlotL16TimeFormatLevel0E, i32 noundef 7)
  %.fca.0.extract26 = extractvalue { i64, i32 } %120, 0
  %.fca.1.extract27 = extractvalue { i64, i32 } %120, 1
  %.sroa.229.0.extract.trunc = trunc i32 %.fca.1.extract27 to i16
  %.sroa.5.8.insert.ext = and i32 %.fca.1.extract27, 65535
  %121 = call noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64 %.fca.0.extract26, i32 %.sroa.5.8.insert.ext)
  %122 = fmul float %2, 5.000000e-01
  %123 = fdiv float %122, %121
  %124 = fptosi float %123 to i32
  %125 = call noundef i32 @_ZN6ImPlot7GetYearERK10ImPlotTime(ptr noundef nonnull align 8 dereferenceable(12) %9)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  %126 = call { i64, i32 } @_ZN6ImPlot8CeilTimeERK10ImPlotTimei(ptr noundef nonnull align 8 dereferenceable(12) %10, i32 noundef 7)
  %.fca.0.extract12 = extractvalue { i64, i32 } %126, 0
  %.fca.1.extract13 = extractvalue { i64, i32 } %126, 1
  store i64 %.fca.0.extract12, ptr %17, align 8
  %.sroa.215.0..sroa_idx = getelementptr inbounds i8, ptr %17, i64 8
  store i32 %.fca.1.extract13, ptr %.sroa.215.0..sroa_idx, align 8
  %127 = call noundef i32 @_ZN6ImPlot7GetYearERK10ImPlotTime(ptr noundef nonnull align 8 dereferenceable(12) %17)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  %128 = sub nsw i32 %127, %125
  %129 = sitofp i32 %128 to double
  %130 = fmul double %129, 0x3FEFAE147AE147AE
  %131 = call noundef double @_ZN6ImPlot7NiceNumEdb(double noundef %130, i1 noundef zeroext false)
  %132 = add nsw i32 %124, -1
  %133 = sitofp i32 %132 to double
  %134 = fdiv double %131, %133
  %135 = call noundef double @_ZN6ImPlot7NiceNumEdb(double noundef %134, i1 noundef zeroext true)
  %136 = sitofp i32 %125 to double
  %137 = fdiv double %136, %135
  %138 = call double @llvm.floor.f64(double %137)
  %139 = sitofp i32 %127 to double
  %140 = fdiv double %139, %135
  %141 = call double @llvm.ceil.f64(double %140)
  %142 = insertelement <2 x double> poison, double %135, i64 0
  %143 = shufflevector <2 x double> %142, <2 x double> poison, <2 x i32> zeroinitializer
  %144 = insertelement <2 x double> poison, double %138, i64 0
  %145 = insertelement <2 x double> %144, double %141, i64 1
  %146 = fmul <2 x double> %143, %145
  %147 = fptosi <2 x double> %146 to <2 x i32>
  %148 = fptosi double %135 to i32
  %149 = call i32 @llvm.smax.i32(i32 %148, i32 1)
  %150 = extractelement <2 x i32> %147, i64 0
  %151 = extractelement <2 x i32> %147, i64 1
  %152 = icmp slt i32 %150, %151
  br i1 %152, label %.lr.ph161, label %.loopexit

.lr.ph161:                                        ; preds = %119
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %18, i64 8
  %153 = getelementptr inbounds i8, ptr %11, i64 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %11, i64 24
  br label %154

154:                                              ; preds = %.lr.ph161, %162
  %.0147159 = phi i32 [ %150, %.lr.ph161 ], [ %163, %162 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #12
  %155 = call { i64, i32 } @_ZN6ImPlot8MakeTimeEiiiiiii(i32 noundef %.0147159, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %.fca.0.extract = extractvalue { i64, i32 } %155, 0
  %.fca.1.extract = extractvalue { i64, i32 } %155, 1
  store i64 %.fca.0.extract, ptr %18, align 8
  store i32 %.fca.1.extract, ptr %.sroa.2.0..sroa_idx, align 8
  %156 = call noundef zeroext i1 @_ZgeRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %18, ptr noundef nonnull align 8 dereferenceable(12) %9)
  br i1 %156, label %157, label %162

157:                                              ; preds = %154
  %158 = call noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12) %18, ptr noundef nonnull align 8 dereferenceable(12) %10)
  br i1 %158, label %159, label %162

159:                                              ; preds = %157
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %11, ptr noundef nonnull align 8 dereferenceable(12) %18, i64 12, i1 false), !tbaa.struct !21
  store i64 %.fca.0.extract26, ptr %153, align 8
  store i16 %.sroa.229.0.extract.trunc, ptr %.sroa.5.0..sroa_idx, align 8
  %160 = call noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12) %18)
  %161 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN12ImPlotTicker7AddTickEdbibPFidPciPvES1_(ptr noundef nonnull align 8 dereferenceable(52) %0, double noundef %160, i1 noundef zeroext true, i32 noundef 0, i1 noundef zeroext true, ptr noundef nonnull @_ZN6ImPlotL14Formatter_TimeEdPciPv, ptr noundef nonnull %11)
  br label %162

162:                                              ; preds = %159, %157, %154
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #12
  %163 = add nsw i32 %.0147159, %149
  %164 = icmp slt i32 %163, %151
  br i1 %164, label %154, label %.loopexit, !llvm.loop !39

.loopexit:                                        ; preds = %162, %119, %._crit_edge158
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %7) #12
  ret void
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN6ImPlot15GetUnitForRangeEd(double noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL7ImClampIiET_S0_S0_S0_(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { i64, i32 } @_ZN6ImPlot14GetDateTimeFmtEPK18ImPlotDateTimeSpeci(ptr noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i32 } @_ZN10ImPlotTime10FromDoubleEd(double noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6ImPlot19Formatter_Time_DataC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #8 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN6ImPlot16GetDateTimeWidthE18ImPlotDateTimeSpec(i64, i32) local_unnamed_addr #9

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN6ImPlot11GetTimeStepEii(i32 noundef, i32 noundef) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZltRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZgeRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZleRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK10ImPlotTime8ToDoubleEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN6ImPlotL14Formatter_TimeEdPciPv(double noundef, ptr noundef, i32 noundef, ptr noundef) #8

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN12ImPlotTicker7GetTextERK10ImPlotTick(ptr noundef nonnull align 8 dereferenceable(52), ptr noundef nonnull align 8 dereferenceable(36)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN6ImPlot13TimeLabelSameEPKcS1_(ptr noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress uwtable
declare hidden { i64, i32 } @_ZmiRK10ImPlotTimeS1_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #8

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { mustprogress uwtable "min-legal-vector-width"="64" "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 = { 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 #7 = { inlinehint 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 #8 = { inlinehint 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" }
attributes #9 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "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 #10 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { noreturn nounwind }
attributes #12 = { 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 = !{!"_ZTS11ImPlotRange", !7, i64 0, !7, i64 8}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!6, !7, i64 8}
!11 = !{!12, !18, i64 32}
!12 = !{!"_ZTSN6ImPlot19Formatter_Time_DataE", !13, i64 0, !16, i64 16, !18, i64 32, !18, i64 40}
!13 = !{!"_ZTS10ImPlotTime", !14, i64 0, !15, i64 8}
!14 = !{!"long", !8, i64 0}
!15 = !{!"int", !8, i64 0}
!16 = !{!"_ZTS18ImPlotDateTimeSpec", !15, i64 0, !15, i64 4, !17, i64 8, !17, i64 9}
!17 = !{!"bool", !8, i64 0}
!18 = !{!"any pointer", !8, i64 0}
!19 = !{!12, !18, i64 40}
!20 = !{!7, !7, i64 0}
!21 = !{i64 0, i64 8, !22, i64 8, i64 4, !23}
!22 = !{!14, !14, i64 0}
!23 = !{!15, !15, i64 0}
!24 = !{i64 0, i64 4, !23, i64 4, i64 4, !23, i64 8, i64 1, !25, i64 9, i64 1, !25}
!25 = !{!17, !17, i64 0}
!26 = !{!27, !18, i64 24}
!27 = !{!"_ZTS12ImPlotTicker", !28, i64 0, !29, i64 16, !31, i64 32, !31, i64 40, !15, i64 48}
!28 = !{!"_ZTS8ImVectorI10ImPlotTickE", !15, i64 0, !15, i64 4, !18, i64 8}
!29 = !{!"_ZTS15ImGuiTextBuffer", !30, i64 0}
!30 = !{!"_ZTS8ImVectorIcE", !15, i64 0, !15, i64 4, !18, i64 8}
!31 = !{!"_ZTS6ImVec2", !32, i64 0, !32, i64 4}
!32 = !{!"float", !8, i64 0}
!33 = !{!34, !17, i64 25}
!34 = !{!"_ZTS10ImPlotTick", !7, i64 0, !32, i64 8, !31, i64 12, !15, i64 20, !17, i64 24, !17, i64 25, !15, i64 28, !15, i64 32}
!35 = !{!34, !15, i64 20}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = distinct !{!38, !37}
!39 = distinct !{!39, !37}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass