Closed ZuseZ4 closed 2 years ago
Can you attach a full compiler explorer example? This feels more likely to actually be an integer rather than a weird bithack of a float/double...
wip
; ModuleID = 'minOrBug.ll'
source_filename = "ld-temp.o"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%"class.std::basic_ostream" = type { i32 (...)**, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", %"class.std::basic_ostream"*, i8, i8, %"class.std::basic_streambuf"*, %"class.std::ctype"*, %"class.std::num_put"*, %"class.std::num_put"* }
%"class.std::ios_base" = type { i32 (...)**, i64, i64, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"class.std::locale" }
%"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"class.std::ios_base"*, i32)*, i32, i32 }
%"struct.std::ios_base::_Words" = type { i8*, i64 }
%"class.std::locale" = type { %"class.std::locale::_Impl"* }
%"class.std::locale::_Impl" = type { i32, %"class.std::locale::facet"**, i64, %"class.std::locale::facet"**, i8** }
%"class.std::locale::facet" = type <{ i32 (...)**, i32, [4 x i8] }>
%"class.std::basic_streambuf" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"class.std::locale" }
%"class.std::ctype" = type <{ %"class.std::locale::facet.base", [4 x i8], %struct.__locale_struct*, i8, [7 x i8], i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8, [6 x i8] }>
%"class.std::locale::facet.base" = type <{ i32 (...)**, i32 }>
%struct.__locale_struct = type { [13 x %struct.__locale_data*], i16*, i32*, i32*, [13 x i8*] }
%struct.__locale_data = type opaque
%"class.std::num_put" = type { %"class.std::locale::facet.base", [4 x i8] }
%"class.olb::util::Timer" = type { %"class.olb::OstreamManager", double, double, double, i64, i64, i64, i64*, %struct.timeval, %struct.timeval, %struct.timeval, %struct.timeval, double, i32, i32, i64, i32, i32, i32, double, double, double, double, double, double, double, double, double }
%"class.olb::OstreamManager" = type { %"class.std::basic_ostream.base", %"class.olb::OMBuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { i32 (...)** }
%"class.olb::OMBuf" = type { %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ostream"*, %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { i8* }
%union.anon = type { i64, [8 x i8] }
%struct.timeval = type { i64, i64 }
$_ZN3olb4util5TimerIdE9printStepEi = comdat any
@.str.96 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.105 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.106 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.108 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.116 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [11 x i8], align 1
declare dso_local noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8), i8* noundef, i64 noundef) local_unnamed_addr #0
declare dso_local noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo5flushEv(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0
; Function Attrs: noreturn
declare dso_local void @_ZSt16__throw_bad_castv() local_unnamed_addr #1
declare dso_local void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570)) local_unnamed_addr #0
declare dso_local noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo3putEc(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8), i8 noundef signext) local_unnamed_addr #0
declare dso_local noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #0
declare dso_local noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8), double noundef) local_unnamed_addr #0
; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare double @llvm.maxnum.f64(double, double) #2
; Function Attrs: mustprogress uwtable
define hidden void @_ZN3olb4util5TimerIdE9printStepEi(%"class.olb::util::Timer"* noundef nonnull align 8 dereferenceable(648) %0, i32 noundef %1) #3 comdat align 2 {
switch i32 %1, label %683 [
i32 0, label %3
i32 1, label %85
i32 2, label %290
i32 3, label %586
]
3: ; preds = %2
%4 = bitcast %"class.olb::util::Timer"* %0 to %"class.std::basic_ostream"*
%5 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %4, i8* noundef nonnull getelementptr inbounds ([6 x i8], [6 x i8]* @.str.96, i64 0, i64 0), i64 noundef 5)
%6 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 13
%7 = load i32, i32* %6, align 8, !tbaa !7
%8 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %4, i32 noundef %7)
%9 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %8, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.97, i64 0, i64 0), i64 noundef 2)
%10 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %8, i8* noundef nonnull getelementptr inbounds ([9 x i8], [9 x i8]* @.str.98, i64 0, i64 0), i64 noundef 8)
%11 = load i32, i32* %6, align 8, !tbaa !7
%12 = sitofp i32 %11 to double
%13 = fmul double %12, 1.000000e+02
%14 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 14
%15 = load i32, i32* %14, align 4, !tbaa !20
%16 = sitofp i32 %15 to double
%17 = fdiv double %13, %16
%18 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %8, double noundef %17)
%19 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %18, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.97, i64 0, i64 0), i64 noundef 2)
%20 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %18, i8* noundef nonnull getelementptr inbounds ([12 x i8], [12 x i8]* @.str.99, i64 0, i64 0), i64 noundef 11)
%21 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 25
%22 = load double, double* %21, align 8, !tbaa !21
%23 = fdiv double %22, 1.000000e+03
%24 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %18, double noundef %23)
%25 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %24, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.97, i64 0, i64 0), i64 noundef 2)
%26 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %24, i8* noundef nonnull getelementptr inbounds ([9 x i8], [9 x i8]* @.str.100, i64 0, i64 0), i64 noundef 8)
%27 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 26
%28 = load double, double* %27, align 8, !tbaa !22
%29 = fdiv double %28, 1.000000e+03
%30 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %24, double noundef %29)
%31 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %30, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.97, i64 0, i64 0), i64 noundef 2)
%32 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %30, i8* noundef nonnull getelementptr inbounds ([7 x i8], [7 x i8]* @.str.101, i64 0, i64 0), i64 noundef 6)
%33 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 15
%34 = load i64, i64* %33, align 8, !tbaa !23
%35 = uitofp i64 %34 to double
%36 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 12
%37 = load double, double* %36, align 8, !tbaa !24
%38 = fmul double %37, %35
%39 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 9, i32 0
%40 = load i64, i64* %39, align 8, !tbaa.struct !25
%41 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 9, i32 1
%42 = load i64, i64* %41, align 8, !tbaa.struct !27
%43 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 11, i32 0
%44 = load i64, i64* %43, align 8, !tbaa.struct !25
%45 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 11, i32 1
%46 = load i64, i64* %45, align 8, !tbaa.struct !27
%47 = sub nsw i64 %40, %44
%48 = mul nsw i64 %47, 1000
%49 = sub nsw i64 %42, %46
%50 = sdiv i64 %49, 1000
%51 = add nsw i64 %50, %48
%52 = sitofp i64 %51 to double
%53 = tail call double @llvm.maxnum.f64(double %52, double 1.000000e+00) #4
%54 = fmul double %53, 1.000000e+03
%55 = fdiv double %38, %54
%56 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %30, double noundef %55)
%57 = bitcast %"class.std::basic_ostream"* %56 to i8**
%58 = load i8*, i8** %57, align 8, !tbaa !28
%59 = getelementptr i8, i8* %58, i64 -24
%60 = bitcast i8* %59 to i64*
%61 = load i64, i64* %60, align 8
%62 = bitcast %"class.std::basic_ostream"* %56 to i8*
%63 = getelementptr inbounds i8, i8* %62, i64 %61
%64 = getelementptr inbounds i8, i8* %63, i64 240
%65 = bitcast i8* %64 to %"class.std::ctype"**
%66 = load %"class.std::ctype"*, %"class.std::ctype"** %65, align 8, !tbaa !30
%67 = icmp eq %"class.std::ctype"* %66, null
br i1 %67, label %68, label %69
68: ; preds = %3
tail call void @_ZSt16__throw_bad_castv() #5
unreachable
69: ; preds = %3
%70 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %66, i64 0, i32 8
%71 = load i8, i8* %70, align 8, !tbaa !33
%72 = icmp eq i8 %71, 0
br i1 %72, label %76, label %73
73: ; preds = %69
%74 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %66, i64 0, i32 9, i64 10
%75 = load i8, i8* %74, align 1, !tbaa !35
br label %82
76: ; preds = %69
tail call void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %66)
%77 = bitcast %"class.std::ctype"* %66 to i8 (%"class.std::ctype"*, i8)***
%78 = load i8 (%"class.std::ctype"*, i8)**, i8 (%"class.std::ctype"*, i8)*** %77, align 8, !tbaa !28
%79 = getelementptr inbounds i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %78, i64 6
%80 = load i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %79, align 8
%81 = tail call noundef signext i8 %80(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %66, i8 noundef signext 10)
br label %82
82: ; preds = %76, %73
%83 = phi i8 [ %75, %73 ], [ %81, %76 ]
%84 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo3putEc(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %56, i8 noundef signext %83)
br label %717
85: ; preds = %2
%86 = bitcast %"class.olb::util::Timer"* %0 to %"class.std::basic_ostream"*
%87 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %86, i8* noundef nonnull getelementptr inbounds ([12 x i8], [12 x i8]* @.str.102, i64 0, i64 0), i64 noundef 11)
%88 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 13
%89 = load i32, i32* %88, align 8, !tbaa !7
%90 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %86, i32 noundef %89)
%91 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %90, i8* noundef nonnull getelementptr inbounds ([2 x i8], [2 x i8]* @.str.103, i64 0, i64 0), i64 noundef 1)
%92 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 14
%93 = load i32, i32* %92, align 4, !tbaa !20
%94 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %90, i32 noundef %93)
%95 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %94, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.104, i64 0, i64 0), i64 noundef 2)
%96 = load i32, i32* %88, align 8, !tbaa !7
%97 = mul nsw i32 %96, 100
%98 = load i32, i32* %92, align 4, !tbaa !20
%99 = sdiv i32 %97, %98
%100 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %94, i32 noundef %99)
%101 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %100, i8* noundef nonnull getelementptr inbounds ([5 x i8], [5 x i8]* @.str.105, i64 0, i64 0), i64 noundef 4)
%102 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %100, i8* noundef nonnull getelementptr inbounds ([14 x i8], [14 x i8]* @.str.106, i64 0, i64 0), i64 noundef 13)
%103 = bitcast %"class.std::basic_ostream"* %100 to i8**
%104 = load i8*, i8** %103, align 8, !tbaa !28
%105 = getelementptr i8, i8* %104, i64 -24
%106 = bitcast i8* %105 to i64*
%107 = load i64, i64* %106, align 8
%108 = bitcast %"class.std::basic_ostream"* %100 to i8*
%109 = getelementptr inbounds i8, i8* %108, i64 %107
%110 = getelementptr inbounds i8, i8* %109, i64 8
%111 = bitcast i8* %110 to i64*
store i64 2, i64* %111, align 8, !tbaa !36
%112 = load i64, i64* %106, align 8
%113 = getelementptr inbounds i8, i8* %108, i64 %112
%114 = getelementptr inbounds i8, i8* %113, i64 24
%115 = bitcast i8* %114 to i32*
%116 = load i32, i32* %115, align 8, !tbaa !42
%117 = and i32 %116, -261
%118 = or i32 %117, 4
store i32 %118, i32* %115, align 8, !tbaa !43
%119 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 25
%120 = load double, double* %119, align 8, !tbaa !21
%121 = fdiv double %120, 1.000000e+03
%122 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %100, double noundef %121)
%123 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %122, i8* noundef nonnull getelementptr inbounds ([2 x i8], [2 x i8]* @.str.103, i64 0, i64 0), i64 noundef 1)
%124 = bitcast %"class.std::basic_ostream"* %122 to i8**
%125 = load i8*, i8** %124, align 8, !tbaa !28
%126 = getelementptr i8, i8* %125, i64 -24
%127 = bitcast i8* %126 to i64*
%128 = load i64, i64* %127, align 8
%129 = bitcast %"class.std::basic_ostream"* %122 to i8*
%130 = getelementptr inbounds i8, i8* %129, i64 %128
%131 = getelementptr inbounds i8, i8* %130, i64 8
%132 = bitcast i8* %131 to i64*
store i64 1, i64* %132, align 8, !tbaa !36
%133 = load i64, i64* %127, align 8
%134 = getelementptr inbounds i8, i8* %129, i64 %133
%135 = getelementptr inbounds i8, i8* %134, i64 24
%136 = bitcast i8* %135 to i32*
%137 = load i32, i32* %136, align 8, !tbaa !42
%138 = and i32 %137, -261
%139 = or i32 %138, 4
store i32 %139, i32* %136, align 8, !tbaa !43
%140 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 27
%141 = load double, double* %140, align 8, !tbaa !44
%142 = fdiv double %141, 1.000000e+03
%143 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %122, double noundef %142)
%144 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %143, i8* noundef nonnull getelementptr inbounds ([4 x i8], [4 x i8]* @.str.107, i64 0, i64 0), i64 noundef 3)
%145 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %143, i8* noundef nonnull getelementptr inbounds ([10 x i8], [10 x i8]* @.str.108, i64 0, i64 0), i64 noundef 9)
%146 = bitcast %"class.std::basic_ostream"* %143 to i8**
%147 = load i8*, i8** %146, align 8, !tbaa !28
%148 = getelementptr i8, i8* %147, i64 -24
%149 = bitcast i8* %148 to i64*
%150 = load i64, i64* %149, align 8
%151 = bitcast %"class.std::basic_ostream"* %143 to i8*
%152 = getelementptr inbounds i8, i8* %151, i64 %150
%153 = getelementptr inbounds i8, i8* %152, i64 16
%154 = bitcast i8* %153 to i64*
store i64 2, i64* %154, align 8, !tbaa !45
%155 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 26
%156 = load double, double* %155, align 8, !tbaa !22
%157 = fdiv double %156, 1.000000e+03
%158 = fptosi double %157 to i32
%159 = sdiv i32 %158, 60
%160 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %143, i32 noundef %159)
%161 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %160, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.109, i64 0, i64 0), i64 noundef 2)
%162 = bitcast %"class.std::basic_ostream"* %160 to i8**
%163 = load i8*, i8** %162, align 8, !tbaa !28
%164 = getelementptr i8, i8* %163, i64 -24
%165 = bitcast i8* %164 to i64*
%166 = load i64, i64* %165, align 8
%167 = bitcast %"class.std::basic_ostream"* %160 to i8*
%168 = getelementptr inbounds i8, i8* %167, i64 %166
%169 = getelementptr inbounds i8, i8* %168, i64 225
%170 = load i8, i8* %169, align 1, !tbaa !46, !range !47
%171 = icmp eq i8 %170, 0
br i1 %171, label %172, label %191
172: ; preds = %85
%173 = getelementptr inbounds i8, i8* %168, i64 240
%174 = bitcast i8* %173 to %"class.std::ctype"**
%175 = load %"class.std::ctype"*, %"class.std::ctype"** %174, align 8, !tbaa !30
%176 = icmp eq %"class.std::ctype"* %175, null
br i1 %176, label %177, label %178
177: ; preds = %172
tail call void @_ZSt16__throw_bad_castv() #5
unreachable
178: ; preds = %172
%179 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %175, i64 0, i32 8
%180 = load i8, i8* %179, align 8, !tbaa !33
%181 = icmp eq i8 %180, 0
br i1 %181, label %182, label %189
182: ; preds = %178
tail call void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %175)
%183 = bitcast %"class.std::ctype"* %175 to i8 (%"class.std::ctype"*, i8)***
%184 = load i8 (%"class.std::ctype"*, i8)**, i8 (%"class.std::ctype"*, i8)*** %183, align 8, !tbaa !28
%185 = getelementptr inbounds i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %184, i64 6
%186 = load i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %185, align 8
%187 = tail call noundef signext i8 %186(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %175, i8 noundef signext 32)
%188 = load i8*, i8** %162, align 8, !tbaa !28
br label %189
189: ; preds = %182, %178
%190 = phi i8* [ %188, %182 ], [ %163, %178 ]
store i8 1, i8* %169, align 1, !tbaa !46
br label %191
191: ; preds = %189, %85
%192 = phi i8* [ %163, %85 ], [ %190, %189 ]
%193 = getelementptr inbounds i8, i8* %168, i64 224
store i8 48, i8* %193, align 8, !tbaa !48
%194 = getelementptr i8, i8* %192, i64 -24
%195 = bitcast i8* %194 to i64*
%196 = load i64, i64* %195, align 8
%197 = getelementptr inbounds i8, i8* %167, i64 %196
%198 = getelementptr inbounds i8, i8* %197, i64 16
%199 = bitcast i8* %198 to i64*
store i64 4, i64* %199, align 8, !tbaa !45
%200 = load double, double* %155, align 8, !tbaa !22
%201 = fdiv double %200, 1.000000e+02
%202 = fptosi double %201 to i32
%203 = srem i32 %202, 600
%204 = sitofp i32 %203 to double
%205 = fdiv double %204, 1.000000e+01
%206 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %160, double noundef %205)
%207 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %206, i8* noundef nonnull getelementptr inbounds ([4 x i8], [4 x i8]* @.str.107, i64 0, i64 0), i64 noundef 3)
%208 = bitcast %"class.std::basic_ostream"* %206 to i8**
%209 = load i8*, i8** %208, align 8, !tbaa !28
%210 = getelementptr i8, i8* %209, i64 -24
%211 = bitcast i8* %210 to i64*
%212 = load i64, i64* %211, align 8
%213 = bitcast %"class.std::basic_ostream"* %206 to i8*
%214 = getelementptr inbounds i8, i8* %213, i64 %212
%215 = getelementptr inbounds i8, i8* %214, i64 225
%216 = load i8, i8* %215, align 1, !tbaa !46, !range !47
%217 = icmp eq i8 %216, 0
br i1 %217, label %218, label %235
218: ; preds = %191
%219 = getelementptr inbounds i8, i8* %214, i64 240
%220 = bitcast i8* %219 to %"class.std::ctype"**
%221 = load %"class.std::ctype"*, %"class.std::ctype"** %220, align 8, !tbaa !30
%222 = icmp eq %"class.std::ctype"* %221, null
br i1 %222, label %223, label %224
223: ; preds = %218
tail call void @_ZSt16__throw_bad_castv() #5
unreachable
224: ; preds = %218
%225 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %221, i64 0, i32 8
%226 = load i8, i8* %225, align 8, !tbaa !33
%227 = icmp eq i8 %226, 0
br i1 %227, label %228, label %234
228: ; preds = %224
tail call void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %221)
%229 = bitcast %"class.std::ctype"* %221 to i8 (%"class.std::ctype"*, i8)***
%230 = load i8 (%"class.std::ctype"*, i8)**, i8 (%"class.std::ctype"*, i8)*** %229, align 8, !tbaa !28
%231 = getelementptr inbounds i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %230, i64 6
%232 = load i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %231, align 8
%233 = tail call noundef signext i8 %232(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %221, i8 noundef signext 32)
br label %234
234: ; preds = %228, %224
store i8 1, i8* %215, align 1, !tbaa !46
br label %235
235: ; preds = %234, %191
%236 = getelementptr inbounds i8, i8* %214, i64 224
store i8 32, i8* %236, align 8, !tbaa !48
%237 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %206, i8* noundef nonnull getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0), i64 noundef 7)
%238 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 15
%239 = load i64, i64* %238, align 8, !tbaa !23
%240 = uitofp i64 %239 to double
%241 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 12
%242 = load double, double* %241, align 8, !tbaa !24
%243 = fmul double %242, %240
%244 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 9, i32 0
%245 = load i64, i64* %244, align 8, !tbaa.struct !25
%246 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 9, i32 1
%247 = load i64, i64* %246, align 8, !tbaa.struct !27
%248 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 11, i32 0
%249 = load i64, i64* %248, align 8, !tbaa.struct !25
%250 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 11, i32 1
%251 = load i64, i64* %250, align 8, !tbaa.struct !27
%252 = sub nsw i64 %245, %249
%253 = mul nsw i64 %252, 1000
%254 = sub nsw i64 %247, %251
%255 = sdiv i64 %254, 1000
%256 = add nsw i64 %255, %253
%257 = sitofp i64 %256 to double
%258 = tail call double @llvm.maxnum.f64(double %257, double 1.000000e+00) #4
%259 = fmul double %258, 1.000000e+03
%260 = fdiv double %243, %259
%261 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %206, double noundef %260)
%262 = bitcast %"class.std::basic_ostream"* %261 to i8**
%263 = load i8*, i8** %262, align 8, !tbaa !28
%264 = getelementptr i8, i8* %263, i64 -24
%265 = bitcast i8* %264 to i64*
%266 = load i64, i64* %265, align 8
%267 = bitcast %"class.std::basic_ostream"* %261 to i8*
%268 = getelementptr inbounds i8, i8* %267, i64 %266
%269 = getelementptr inbounds i8, i8* %268, i64 240
%270 = bitcast i8* %269 to %"class.std::ctype"**
%271 = load %"class.std::ctype"*, %"class.std::ctype"** %270, align 8, !tbaa !30
%272 = icmp eq %"class.std::ctype"* %271, null
br i1 %272, label %273, label %274
273: ; preds = %235
tail call void @_ZSt16__throw_bad_castv() #5
unreachable
274: ; preds = %235
%275 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %271, i64 0, i32 8
%276 = load i8, i8* %275, align 8, !tbaa !33
%277 = icmp eq i8 %276, 0
br i1 %277, label %281, label %278
278: ; preds = %274
%279 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %271, i64 0, i32 9, i64 10
%280 = load i8, i8* %279, align 1, !tbaa !35
br label %287
281: ; preds = %274
tail call void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %271)
%282 = bitcast %"class.std::ctype"* %271 to i8 (%"class.std::ctype"*, i8)***
%283 = load i8 (%"class.std::ctype"*, i8)**, i8 (%"class.std::ctype"*, i8)*** %282, align 8, !tbaa !28
%284 = getelementptr inbounds i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %283, i64 6
%285 = load i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %284, align 8
%286 = tail call noundef signext i8 %285(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %271, i8 noundef signext 10)
br label %287
287: ; preds = %281, %278
%288 = phi i8 [ %280, %278 ], [ %286, %281 ]
%289 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo3putEc(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %261, i8 noundef signext %288)
br label %717
290: ; preds = %2
%291 = bitcast %"class.olb::util::Timer"* %0 to %"class.std::basic_ostream"*
%292 = bitcast %"class.olb::util::Timer"* %0 to i8**
%293 = load i8*, i8** %292, align 8, !tbaa !28
%294 = getelementptr i8, i8* %293, i64 -24
%295 = bitcast i8* %294 to i64*
%296 = load i64, i64* %295, align 8
%297 = bitcast %"class.olb::util::Timer"* %0 to i8*
%298 = getelementptr inbounds i8, i8* %297, i64 %296
%299 = getelementptr inbounds i8, i8* %298, i64 16
%300 = bitcast i8* %299 to i64*
store i64 21, i64* %300, align 8, !tbaa !45
%301 = load i64, i64* %295, align 8
%302 = getelementptr inbounds i8, i8* %297, i64 %301
%303 = getelementptr inbounds i8, i8* %302, i64 24
%304 = bitcast i8* %303 to i32*
%305 = load i32, i32* %304, align 8, !tbaa !42
%306 = and i32 %305, -177
%307 = or i32 %306, 32
store i32 %307, i32* %304, align 8, !tbaa !43
%308 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %291, i8* noundef nonnull getelementptr inbounds ([18 x i8], [18 x i8]* @.str.111, i64 0, i64 0), i64 noundef 17)
%309 = load i8*, i8** %292, align 8, !tbaa !28
%310 = getelementptr i8, i8* %309, i64 -24
%311 = bitcast i8* %310 to i64*
%312 = load i64, i64* %311, align 8
%313 = getelementptr inbounds i8, i8* %297, i64 %312
%314 = getelementptr inbounds i8, i8* %313, i64 16
%315 = bitcast i8* %314 to i64*
store i64 17, i64* %315, align 8, !tbaa !45
%316 = load i64, i64* %311, align 8
%317 = getelementptr inbounds i8, i8* %297, i64 %316
%318 = getelementptr inbounds i8, i8* %317, i64 24
%319 = bitcast i8* %318 to i32*
%320 = load i32, i32* %319, align 8, !tbaa !42
%321 = and i32 %320, -177
%322 = or i32 %321, 32
store i32 %322, i32* %319, align 8, !tbaa !43
%323 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %291, i8* noundef nonnull getelementptr inbounds ([17 x i8], [17 x i8]* @.str.112, i64 0, i64 0), i64 noundef 16)
%324 = load i8*, i8** %292, align 8, !tbaa !28
%325 = getelementptr i8, i8* %324, i64 -24
%326 = bitcast i8* %325 to i64*
%327 = load i64, i64* %326, align 8
%328 = getelementptr inbounds i8, i8* %297, i64 %327
%329 = getelementptr inbounds i8, i8* %328, i64 16
%330 = bitcast i8* %329 to i64*
store i64 18, i64* %330, align 8, !tbaa !45
%331 = load i64, i64* %326, align 8
%332 = getelementptr inbounds i8, i8* %297, i64 %331
%333 = getelementptr inbounds i8, i8* %332, i64 24
%334 = bitcast i8* %333 to i32*
%335 = load i32, i32* %334, align 8, !tbaa !42
%336 = and i32 %335, -177
%337 = or i32 %336, 32
store i32 %337, i32* %334, align 8, !tbaa !43
%338 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %291, i8* noundef nonnull getelementptr inbounds ([18 x i8], [18 x i8]* @.str.113, i64 0, i64 0), i64 noundef 17)
%339 = load i8*, i8** %292, align 8, !tbaa !28
%340 = getelementptr i8, i8* %339, i64 -24
%341 = bitcast i8* %340 to i64*
%342 = load i64, i64* %341, align 8
%343 = getelementptr inbounds i8, i8* %297, i64 %342
%344 = getelementptr inbounds i8, i8* %343, i64 16
%345 = bitcast i8* %344 to i64*
store i64 6, i64* %345, align 8, !tbaa !45
%346 = load i64, i64* %341, align 8
%347 = getelementptr inbounds i8, i8* %297, i64 %346
%348 = getelementptr inbounds i8, i8* %347, i64 24
%349 = bitcast i8* %348 to i32*
%350 = load i32, i32* %349, align 8, !tbaa !42
%351 = and i32 %350, -177
%352 = or i32 %351, 32
store i32 %352, i32* %349, align 8, !tbaa !43
%353 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %291, i8* noundef nonnull getelementptr inbounds ([6 x i8], [6 x i8]* @.str.114, i64 0, i64 0), i64 noundef 5)
%354 = load i8*, i8** %292, align 8, !tbaa !28
%355 = getelementptr i8, i8* %354, i64 -24
%356 = bitcast i8* %355 to i64*
%357 = load i64, i64* %356, align 8
%358 = getelementptr inbounds i8, i8* %297, i64 %357
%359 = getelementptr inbounds i8, i8* %358, i64 16
%360 = bitcast i8* %359 to i64*
store i64 6, i64* %360, align 8, !tbaa !45
%361 = load i64, i64* %356, align 8
%362 = getelementptr inbounds i8, i8* %297, i64 %361
%363 = getelementptr inbounds i8, i8* %362, i64 24
%364 = bitcast i8* %363 to i32*
%365 = load i32, i32* %364, align 8, !tbaa !42
%366 = and i32 %365, -177
%367 = or i32 %366, 32
store i32 %367, i32* %364, align 8, !tbaa !43
%368 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %291, i8* noundef nonnull getelementptr inbounds ([8 x i8], [8 x i8]* @.str.115, i64 0, i64 0), i64 noundef 7)
%369 = load i8*, i8** %292, align 8, !tbaa !28
%370 = getelementptr i8, i8* %369, i64 -24
%371 = bitcast i8* %370 to i64*
%372 = load i64, i64* %371, align 8
%373 = getelementptr inbounds i8, i8* %297, i64 %372
%374 = getelementptr inbounds i8, i8* %373, i64 240
%375 = bitcast i8* %374 to %"class.std::ctype"**
%376 = load %"class.std::ctype"*, %"class.std::ctype"** %375, align 8, !tbaa !30
%377 = icmp eq %"class.std::ctype"* %376, null
br i1 %377, label %378, label %379
378: ; preds = %290
tail call void @_ZSt16__throw_bad_castv() #5
unreachable
379: ; preds = %290
%380 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %376, i64 0, i32 8
%381 = load i8, i8* %380, align 8, !tbaa !33
%382 = icmp eq i8 %381, 0
br i1 %382, label %386, label %383
383: ; preds = %379
%384 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %376, i64 0, i32 9, i64 10
%385 = load i8, i8* %384, align 1, !tbaa !35
br label %392
386: ; preds = %379
tail call void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %376)
%387 = bitcast %"class.std::ctype"* %376 to i8 (%"class.std::ctype"*, i8)***
%388 = load i8 (%"class.std::ctype"*, i8)**, i8 (%"class.std::ctype"*, i8)*** %387, align 8, !tbaa !28
%389 = getelementptr inbounds i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %388, i64 6
%390 = load i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %389, align 8
%391 = tail call noundef signext i8 %390(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %376, i8 noundef signext 10)
br label %392
392: ; preds = %386, %383
%393 = phi i8 [ %385, %383 ], [ %391, %386 ]
%394 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo3putEc(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %291, i8 noundef signext %393)
%395 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo5flushEv(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %394)
%396 = bitcast %"class.std::basic_ostream"* %395 to i8**
%397 = load i8*, i8** %396, align 8, !tbaa !28
%398 = getelementptr i8, i8* %397, i64 -24
%399 = bitcast i8* %398 to i64*
%400 = load i64, i64* %399, align 8
%401 = bitcast %"class.std::basic_ostream"* %395 to i8*
%402 = getelementptr inbounds i8, i8* %401, i64 %400
%403 = getelementptr inbounds i8, i8* %402, i64 24
%404 = bitcast i8* %403 to i32*
%405 = load i32, i32* %404, align 8, !tbaa !42
%406 = and i32 %405, -177
%407 = or i32 %406, 128
store i32 %407, i32* %404, align 8, !tbaa !43
%408 = load i64, i64* %399, align 8
%409 = getelementptr inbounds i8, i8* %401, i64 %408
%410 = getelementptr inbounds i8, i8* %409, i64 16
%411 = bitcast i8* %410 to i64*
store i64 6, i64* %411, align 8, !tbaa !45
%412 = load i64, i64* %399, align 8
%413 = getelementptr inbounds i8, i8* %401, i64 %412
%414 = getelementptr inbounds i8, i8* %413, i64 8
%415 = bitcast i8* %414 to i64*
store i64 2, i64* %415, align 8, !tbaa !36
%416 = load i64, i64* %399, align 8
%417 = getelementptr inbounds i8, i8* %401, i64 %416
%418 = getelementptr inbounds i8, i8* %417, i64 24
%419 = bitcast i8* %418 to i32*
%420 = load i32, i32* %419, align 8, !tbaa !42
%421 = and i32 %420, -261
%422 = or i32 %421, 4
store i32 %422, i32* %419, align 8, !tbaa !43
%423 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 13
%424 = load i32, i32* %423, align 8, !tbaa !7
%425 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %395, i32 noundef %424)
%426 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %425, i8* noundef nonnull getelementptr inbounds ([2 x i8], [2 x i8]* @.str.103, i64 0, i64 0), i64 noundef 1)
%427 = bitcast %"class.std::basic_ostream"* %425 to i8**
%428 = load i8*, i8** %427, align 8, !tbaa !28
%429 = getelementptr i8, i8* %428, i64 -24
%430 = bitcast i8* %429 to i64*
%431 = load i64, i64* %430, align 8
%432 = bitcast %"class.std::basic_ostream"* %425 to i8*
%433 = getelementptr inbounds i8, i8* %432, i64 %431
%434 = getelementptr inbounds i8, i8* %433, i64 16
%435 = bitcast i8* %434 to i64*
store i64 6, i64* %435, align 8, !tbaa !45
%436 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 14
%437 = load i32, i32* %436, align 4, !tbaa !20
%438 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %425, i32 noundef %437)
%439 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %438, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.104, i64 0, i64 0), i64 noundef 2)
%440 = bitcast %"class.std::basic_ostream"* %438 to i8**
%441 = load i8*, i8** %440, align 8, !tbaa !28
%442 = getelementptr i8, i8* %441, i64 -24
%443 = bitcast i8* %442 to i64*
%444 = load i64, i64* %443, align 8
%445 = bitcast %"class.std::basic_ostream"* %438 to i8*
%446 = getelementptr inbounds i8, i8* %445, i64 %444
%447 = getelementptr inbounds i8, i8* %446, i64 16
%448 = bitcast i8* %447 to i64*
store i64 3, i64* %448, align 8, !tbaa !45
%449 = load i32, i32* %423, align 8, !tbaa !7
%450 = mul nsw i32 %449, 100
%451 = load i32, i32* %436, align 4, !tbaa !20
%452 = sdiv i32 %450, %451
%453 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %438, i32 noundef %452)
%454 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %453, i8* noundef nonnull getelementptr inbounds ([5 x i8], [5 x i8]* @.str.116, i64 0, i64 0), i64 noundef 4)
%455 = bitcast %"class.std::basic_ostream"* %453 to i8**
%456 = load i8*, i8** %455, align 8, !tbaa !28
%457 = getelementptr i8, i8* %456, i64 -24
%458 = bitcast i8* %457 to i64*
%459 = load i64, i64* %458, align 8
%460 = bitcast %"class.std::basic_ostream"* %453 to i8*
%461 = getelementptr inbounds i8, i8* %460, i64 %459
%462 = getelementptr inbounds i8, i8* %461, i64 16
%463 = bitcast i8* %462 to i64*
store i64 7, i64* %463, align 8, !tbaa !45
%464 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 19
%465 = load double, double* %464, align 8, !tbaa !49
%466 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %453, double noundef %465)
%467 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %466, i8* noundef nonnull getelementptr inbounds ([2 x i8], [2 x i8]* @.str.103, i64 0, i64 0), i64 noundef 1)
%468 = bitcast %"class.std::basic_ostream"* %466 to i8**
%469 = load i8*, i8** %468, align 8, !tbaa !28
%470 = getelementptr i8, i8* %469, i64 -24
%471 = bitcast i8* %470 to i64*
%472 = load i64, i64* %471, align 8
%473 = bitcast %"class.std::basic_ostream"* %466 to i8*
%474 = getelementptr inbounds i8, i8* %473, i64 %472
%475 = getelementptr inbounds i8, i8* %474, i64 16
%476 = bitcast i8* %475 to i64*
store i64 7, i64* %476, align 8, !tbaa !45
%477 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 21
%478 = load double, double* %477, align 8, !tbaa !50
%479 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %466, double noundef %478)
%480 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %479, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.117, i64 0, i64 0), i64 noundef 2)
%481 = bitcast %"class.std::basic_ostream"* %479 to i8**
%482 = load i8*, i8** %481, align 8, !tbaa !28
%483 = getelementptr i8, i8* %482, i64 -24
%484 = bitcast i8* %483 to i64*
%485 = load i64, i64* %484, align 8
%486 = bitcast %"class.std::basic_ostream"* %479 to i8*
%487 = getelementptr inbounds i8, i8* %486, i64 %485
%488 = getelementptr inbounds i8, i8* %487, i64 16
%489 = bitcast i8* %488 to i64*
store i64 8, i64* %489, align 8, !tbaa !45
%490 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 25
%491 = load double, double* %490, align 8, !tbaa !21
%492 = fdiv double %491, 1.000000e+03
%493 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %479, double noundef %492)
%494 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %493, i8* noundef nonnull getelementptr inbounds ([2 x i8], [2 x i8]* @.str.103, i64 0, i64 0), i64 noundef 1)
%495 = bitcast %"class.std::basic_ostream"* %493 to i8**
%496 = load i8*, i8** %495, align 8, !tbaa !28
%497 = getelementptr i8, i8* %496, i64 -24
%498 = bitcast i8* %497 to i64*
%499 = load i64, i64* %498, align 8
%500 = bitcast %"class.std::basic_ostream"* %493 to i8*
%501 = getelementptr inbounds i8, i8* %500, i64 %499
%502 = getelementptr inbounds i8, i8* %501, i64 16
%503 = bitcast i8* %502 to i64*
store i64 7, i64* %503, align 8, !tbaa !45
%504 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 27
%505 = load double, double* %504, align 8, !tbaa !44
%506 = fdiv double %505, 1.000000e+03
%507 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %493, double noundef %506)
%508 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %507, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.117, i64 0, i64 0), i64 noundef 2)
%509 = bitcast %"class.std::basic_ostream"* %507 to i8**
%510 = load i8*, i8** %509, align 8, !tbaa !28
%511 = getelementptr i8, i8* %510, i64 -24
%512 = bitcast i8* %511 to i64*
%513 = load i64, i64* %512, align 8
%514 = bitcast %"class.std::basic_ostream"* %507 to i8*
%515 = getelementptr inbounds i8, i8* %514, i64 %513
%516 = getelementptr inbounds i8, i8* %515, i64 16
%517 = bitcast i8* %516 to i64*
store i64 4, i64* %517, align 8, !tbaa !45
%518 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 26
%519 = load double, double* %518, align 8, !tbaa !22
%520 = fptosi double %519 to i32
%521 = sdiv i32 %520, 1000
%522 = add nsw i32 %521, 1
%523 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %507, i32 noundef %522)
%524 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %523, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.117, i64 0, i64 0), i64 noundef 2)
%525 = bitcast %"class.std::basic_ostream"* %523 to i8**
%526 = load i8*, i8** %525, align 8, !tbaa !28
%527 = getelementptr i8, i8* %526, i64 -24
%528 = bitcast i8* %527 to i64*
%529 = load i64, i64* %528, align 8
%530 = bitcast %"class.std::basic_ostream"* %523 to i8*
%531 = getelementptr inbounds i8, i8* %530, i64 %529
%532 = getelementptr inbounds i8, i8* %531, i64 16
%533 = bitcast i8* %532 to i64*
store i64 6, i64* %533, align 8, !tbaa !45
%534 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 15
%535 = load i64, i64* %534, align 8, !tbaa !23
%536 = uitofp i64 %535 to double
%537 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 12
%538 = load double, double* %537, align 8, !tbaa !24
%539 = fmul double %538, %536
%540 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 9, i32 0
%541 = load i64, i64* %540, align 8, !tbaa.struct !25
%542 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 9, i32 1
%543 = load i64, i64* %542, align 8, !tbaa.struct !27
%544 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 11, i32 0
%545 = load i64, i64* %544, align 8, !tbaa.struct !25
%546 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 11, i32 1
%547 = load i64, i64* %546, align 8, !tbaa.struct !27
%548 = sub nsw i64 %541, %545
%549 = mul nsw i64 %548, 1000
%550 = sub nsw i64 %543, %547
%551 = sdiv i64 %550, 1000
%552 = add nsw i64 %551, %549
%553 = sitofp i64 %552 to double
%554 = tail call double @llvm.maxnum.f64(double %553, double 1.000000e+00) #4
%555 = fmul double %554, 1.000000e+03
%556 = fdiv double %539, %555
%557 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %523, double noundef %556)
%558 = bitcast %"class.std::basic_ostream"* %557 to i8**
%559 = load i8*, i8** %558, align 8, !tbaa !28
%560 = getelementptr i8, i8* %559, i64 -24
%561 = bitcast i8* %560 to i64*
%562 = load i64, i64* %561, align 8
%563 = bitcast %"class.std::basic_ostream"* %557 to i8*
%564 = getelementptr inbounds i8, i8* %563, i64 %562
%565 = getelementptr inbounds i8, i8* %564, i64 240
%566 = bitcast i8* %565 to %"class.std::ctype"**
%567 = load %"class.std::ctype"*, %"class.std::ctype"** %566, align 8, !tbaa !30
%568 = icmp eq %"class.std::ctype"* %567, null
br i1 %568, label %569, label %570
569: ; preds = %392
tail call void @_ZSt16__throw_bad_castv() #5
unreachable
570: ; preds = %392
%571 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %567, i64 0, i32 8
%572 = load i8, i8* %571, align 8, !tbaa !33
%573 = icmp eq i8 %572, 0
br i1 %573, label %577, label %574
574: ; preds = %570
%575 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %567, i64 0, i32 9, i64 10
%576 = load i8, i8* %575, align 1, !tbaa !35
br label %583
577: ; preds = %570
tail call void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %567)
%578 = bitcast %"class.std::ctype"* %567 to i8 (%"class.std::ctype"*, i8)***
%579 = load i8 (%"class.std::ctype"*, i8)**, i8 (%"class.std::ctype"*, i8)*** %578, align 8, !tbaa !28
%580 = getelementptr inbounds i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %579, i64 6
%581 = load i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %580, align 8
%582 = tail call noundef signext i8 %581(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %567, i8 noundef signext 10)
br label %583
583: ; preds = %577, %574
%584 = phi i8 [ %576, %574 ], [ %582, %577 ]
%585 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo3putEc(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %557, i8 noundef signext %584)
br label %717
586: ; preds = %2
%587 = bitcast %"class.olb::util::Timer"* %0 to %"class.std::basic_ostream"*
%588 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %587, i8* noundef nonnull getelementptr inbounds ([6 x i8], [6 x i8]* @.str.118, i64 0, i64 0), i64 noundef 5)
%589 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 13
%590 = load i32, i32* %589, align 8, !tbaa !7
%591 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %587, i32 noundef %590)
%592 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %591, i8* noundef nonnull getelementptr inbounds ([3 x i8], [3 x i8]* @.str.97, i64 0, i64 0), i64 noundef 2)
%593 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %591, i8* noundef nonnull getelementptr inbounds ([7 x i8], [7 x i8]* @.str.101, i64 0, i64 0), i64 noundef 6)
%594 = bitcast %"class.std::basic_ostream"* %591 to i8**
%595 = load i8*, i8** %594, align 8, !tbaa !28
%596 = getelementptr i8, i8* %595, i64 -24
%597 = bitcast i8* %596 to i64*
%598 = load i64, i64* %597, align 8
%599 = bitcast %"class.std::basic_ostream"* %591 to i8*
%600 = getelementptr inbounds i8, i8* %599, i64 %598
%601 = getelementptr inbounds i8, i8* %600, i64 16
%602 = bitcast i8* %601 to i64*
store i64 8, i64* %602, align 8, !tbaa !45
%603 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 15
%604 = load i64, i64* %603, align 8, !tbaa !23
%605 = uitofp i64 %604 to double
%606 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 12
%607 = load double, double* %606, align 8, !tbaa !24
%608 = fmul double %607, %605
%609 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 9, i32 0
%610 = load i64, i64* %609, align 8, !tbaa.struct !25
%611 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 9, i32 1
%612 = load i64, i64* %611, align 8, !tbaa.struct !27
%613 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 11, i32 0
%614 = load i64, i64* %613, align 8, !tbaa.struct !25
%615 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %0, i64 0, i32 11, i32 1
%616 = load i64, i64* %615, align 8, !tbaa.struct !27
%617 = sub nsw i64 %610, %614
%618 = mul nsw i64 %617, 1000
%619 = sub nsw i64 %612, %616
%620 = sdiv i64 %619, 1000
%621 = add nsw i64 %620, %618
%622 = sitofp i64 %621 to double
%623 = tail call double @llvm.maxnum.f64(double %622, double 1.000000e+00) #4
%624 = fmul double %623, 1.000000e+03
%625 = fdiv double %608, %624
%626 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %591, double noundef %625)
%627 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %626, i8* noundef nonnull getelementptr inbounds ([10 x i8], [10 x i8]* @.str.119, i64 0, i64 0), i64 noundef 9)
%628 = bitcast %"class.std::basic_ostream"* %626 to i8**
%629 = load i8*, i8** %628, align 8, !tbaa !28
%630 = getelementptr i8, i8* %629, i64 -24
%631 = bitcast i8* %630 to i64*
%632 = load i64, i64* %631, align 8
%633 = bitcast %"class.std::basic_ostream"* %626 to i8*
%634 = getelementptr inbounds i8, i8* %633, i64 %632
%635 = getelementptr inbounds i8, i8* %634, i64 16
%636 = bitcast i8* %635 to i64*
store i64 8, i64* %636, align 8, !tbaa !45
%637 = load i64, i64* %603, align 8, !tbaa !23
%638 = uitofp i64 %637 to double
%639 = load double, double* %606, align 8, !tbaa !24
%640 = fmul double %639, %638
%641 = load i64, i64* %609, align 8, !tbaa.struct !25
%642 = load i64, i64* %611, align 8, !tbaa.struct !27
%643 = load i64, i64* %613, align 8, !tbaa.struct !25
%644 = load i64, i64* %615, align 8, !tbaa.struct !27
%645 = sub nsw i64 %641, %643
%646 = mul nsw i64 %645, 1000
%647 = sub nsw i64 %642, %644
%648 = sdiv i64 %647, 1000
%649 = add nsw i64 %648, %646
%650 = sitofp i64 %649 to double
%651 = tail call double @llvm.maxnum.f64(double %650, double 1.000000e+00) #4
%652 = fmul double %651, 1.000000e+03
%653 = fdiv double %640, %652
%654 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo9_M_insertIdEERSoT_(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %626, double noundef %653)
%655 = bitcast %"class.std::basic_ostream"* %654 to i8**
%656 = load i8*, i8** %655, align 8, !tbaa !28
%657 = getelementptr i8, i8* %656, i64 -24
%658 = bitcast i8* %657 to i64*
%659 = load i64, i64* %658, align 8
%660 = bitcast %"class.std::basic_ostream"* %654 to i8*
%661 = getelementptr inbounds i8, i8* %660, i64 %659
%662 = getelementptr inbounds i8, i8* %661, i64 240
%663 = bitcast i8* %662 to %"class.std::ctype"**
%664 = load %"class.std::ctype"*, %"class.std::ctype"** %663, align 8, !tbaa !30
%665 = icmp eq %"class.std::ctype"* %664, null
br i1 %665, label %666, label %667
666: ; preds = %586
tail call void @_ZSt16__throw_bad_castv() #5
unreachable
667: ; preds = %586
%668 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %664, i64 0, i32 8
%669 = load i8, i8* %668, align 8, !tbaa !33
%670 = icmp eq i8 %669, 0
br i1 %670, label %674, label %671
671: ; preds = %667
%672 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %664, i64 0, i32 9, i64 10
%673 = load i8, i8* %672, align 1, !tbaa !35
br label %680
674: ; preds = %667
tail call void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %664)
%675 = bitcast %"class.std::ctype"* %664 to i8 (%"class.std::ctype"*, i8)***
%676 = load i8 (%"class.std::ctype"*, i8)**, i8 (%"class.std::ctype"*, i8)*** %675, align 8, !tbaa !28
%677 = getelementptr inbounds i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %676, i64 6
%678 = load i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %677, align 8
%679 = tail call noundef signext i8 %678(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %664, i8 noundef signext 10)
br label %680
680: ; preds = %674, %671
%681 = phi i8 [ %673, %671 ], [ %679, %674 ]
%682 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo3putEc(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %654, i8 noundef signext %681)
br label %717
683: ; preds = %2
%684 = bitcast %"class.olb::util::Timer"* %0 to %"class.std::basic_ostream"*
%685 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %684, i8* noundef nonnull getelementptr inbounds ([57 x i8], [57 x i8]* @.str.120, i64 0, i64 0), i64 noundef 56)
%686 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %684, i32 noundef %1)
%687 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %686, i8* noundef nonnull getelementptr inbounds ([11 x i8], [11 x i8]* @.str.121, i64 0, i64 0), i64 noundef 10)
%688 = bitcast %"class.std::basic_ostream"* %686 to i8**
%689 = load i8*, i8** %688, align 8, !tbaa !28
%690 = getelementptr i8, i8* %689, i64 -24
%691 = bitcast i8* %690 to i64*
%692 = load i64, i64* %691, align 8
%693 = bitcast %"class.std::basic_ostream"* %686 to i8*
%694 = getelementptr inbounds i8, i8* %693, i64 %692
%695 = getelementptr inbounds i8, i8* %694, i64 240
%696 = bitcast i8* %695 to %"class.std::ctype"**
%697 = load %"class.std::ctype"*, %"class.std::ctype"** %696, align 8, !tbaa !30
%698 = icmp eq %"class.std::ctype"* %697, null
br i1 %698, label %699, label %700
699: ; preds = %683
tail call void @_ZSt16__throw_bad_castv() #5
unreachable
700: ; preds = %683
%701 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %697, i64 0, i32 8
%702 = load i8, i8* %701, align 8, !tbaa !33
%703 = icmp eq i8 %702, 0
br i1 %703, label %707, label %704
704: ; preds = %700
%705 = getelementptr inbounds %"class.std::ctype", %"class.std::ctype"* %697, i64 0, i32 9, i64 10
%706 = load i8, i8* %705, align 1, !tbaa !35
br label %713
707: ; preds = %700
tail call void @_ZNKSt5ctypeIcE13_M_widen_initEv(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %697)
%708 = bitcast %"class.std::ctype"* %697 to i8 (%"class.std::ctype"*, i8)***
%709 = load i8 (%"class.std::ctype"*, i8)**, i8 (%"class.std::ctype"*, i8)*** %708, align 8, !tbaa !28
%710 = getelementptr inbounds i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %709, i64 6
%711 = load i8 (%"class.std::ctype"*, i8)*, i8 (%"class.std::ctype"*, i8)** %710, align 8
%712 = tail call noundef signext i8 %711(%"class.std::ctype"* noundef nonnull align 8 dereferenceable(570) %697, i8 noundef signext 10)
br label %713
713: ; preds = %707, %704
%714 = phi i8 [ %706, %704 ], [ %712, %707 ]
%715 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo3putEc(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %686, i8 noundef signext %714)
%716 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo5flushEv(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %715)
br label %717
717: ; preds = %713, %680, %583, %287, %82
%718 = phi %"class.std::basic_ostream"* [ %716, %713 ], [ %682, %680 ], [ %585, %583 ], [ %289, %287 ], [ %84, %82 ]
%719 = tail call noundef nonnull align 8 dereferenceable(8) %"class.std::basic_ostream"* @_ZNSo5flushEv(%"class.std::basic_ostream"* noundef nonnull align 8 dereferenceable(8) %718)
ret void
}
attributes #0 = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="cascadelake" "target-features"="+64bit,+adx,+aes,+avx,+avx2,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl,+avx512vnni,+bmi,+bmi2,+clflushopt,+clwb,+cmov,+crc32,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pku,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves,-amx-bf16,-amx-int8,-amx-tile,-avx512bf16,-avx512bitalg,-avx512er,-avx512fp16,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vp2intersect,-avx512vpopcntdq,-avxvnni,-cldemote,-clzero,-enqcmd,-fma4,-gfni,-hreset,-kl,-lwp,-movdir64b,-movdiri,-mwaitx,-pconfig,-prefetchwt1,-ptwrite,-rdpid,-rtm,-serialize,-sgx,-sha,-shstk,-sse4a,-tbm,-tsxldtrk,-uintr,-vaes,-vpclmulqdq,-waitpkg,-wbnoinvd,-widekl,-xop" "tune-cpu"="cascadelake" }
attributes #1 = { noreturn "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="cascadelake" "target-features"="+64bit,+adx,+aes,+avx,+avx2,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl,+avx512vnni,+bmi,+bmi2,+clflushopt,+clwb,+cmov,+crc32,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pku,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves,-amx-bf16,-amx-int8,-amx-tile,-avx512bf16,-avx512bitalg,-avx512er,-avx512fp16,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vp2intersect,-avx512vpopcntdq,-avxvnni,-cldemote,-clzero,-enqcmd,-fma4,-gfni,-hreset,-kl,-lwp,-movdir64b,-movdiri,-mwaitx,-pconfig,-prefetchwt1,-ptwrite,-rdpid,-rtm,-serialize,-sgx,-sha,-shstk,-sse4a,-tbm,-tsxldtrk,-uintr,-vaes,-vpclmulqdq,-waitpkg,-wbnoinvd,-widekl,-xop" "tune-cpu"="cascadelake" }
attributes #2 = { nofree nosync nounwind readnone speculatable willreturn }
attributes #3 = { mustprogress uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="cascadelake" "target-features"="+64bit,+adx,+aes,+avx,+avx2,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl,+avx512vnni,+bmi,+bmi2,+clflushopt,+clwb,+cmov,+crc32,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pku,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves,-amx-bf16,-amx-int8,-amx-tile,-avx512bf16,-avx512bitalg,-avx512er,-avx512fp16,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vp2intersect,-avx512vpopcntdq,-avxvnni,-cldemote,-clzero,-enqcmd,-fma4,-gfni,-hreset,-kl,-lwp,-movdir64b,-movdiri,-mwaitx,-pconfig,-prefetchwt1,-ptwrite,-rdpid,-rtm,-serialize,-sgx,-sha,-shstk,-sse4a,-tbm,-tsxldtrk,-uintr,-vaes,-vpclmulqdq,-waitpkg,-wbnoinvd,-widekl,-xop" "tune-cpu"="cascadelake" }
attributes #4 = { nounwind }
attributes #5 = { noreturn }
!llvm.ident = !{!0, !0, !0, !0}
!llvm.module.flags = !{!1, !2, !3, !4, !5, !6}
!0 = !{!"clang version 14.0.4 (git@github.com:llvm/llvm-project.git 29f1039a7285a5c3a9c353d054140bf2556d4c4d)"}
!1 = !{i32 1, !"wchar_size", i32 4}
!2 = !{i32 7, !"uwtable", i32 1}
!3 = !{i32 1, !"ThinLTO", i32 0}
!4 = !{i32 1, !"EnableSplitLTOUnit", i32 1}
!5 = !{i32 7, !"frame-pointer", i32 2}
!6 = !{i32 1, !"LTOPostLink", i32 1}
!7 = !{!8, !19, i64 544}
!8 = !{!"_ZTSN3olb4util5TimerIdEE", !9, i64 0, !17, i64 416, !17, i64 424, !17, i64 432, !16, i64 440, !16, i64 448, !16, i64 456, !11, i64 464, !18, i64 472, !18, i64 488, !18, i64 504, !18, i64 520, !17, i64 536, !19, i64 544, !19, i64 548, !16, i64 552, !19, i64 560, !19, i64 564, !19, i64 568, !17, i64 576, !17, i64 584, !17, i64 592, !17, i64 600, !17, i64 608, !17, i64 616, !17, i64 624, !17, i64 632, !17, i64 640}
!9 = !{!"_ZTSN3olb14OstreamManagerE", !10, i64 8}
!10 = !{!"_ZTSN3olb5OMBufE", !11, i64 104, !14, i64 112}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !15, i64 0, !16, i64 8, !12, i64 16}
!15 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !11, i64 0}
!16 = !{!"long", !12, i64 0}
!17 = !{!"double", !12, i64 0}
!18 = !{!"_ZTS7timeval", !16, i64 0, !16, i64 8}
!19 = !{!"int", !12, i64 0}
!20 = !{!8, !19, i64 548}
!21 = !{!8, !17, i64 624}
!22 = !{!8, !17, i64 632}
!23 = !{!8, !16, i64 552}
!24 = !{!8, !17, i64 536}
!25 = !{i64 0, i64 8, !26, i64 8, i64 8, !26}
!26 = !{!16, !16, i64 0}
!27 = !{i64 0, i64 8, !26}
!28 = !{!29, !29, i64 0}
!29 = !{!"vtable pointer", !13, i64 0}
!30 = !{!31, !11, i64 240}
!31 = !{!"_ZTSSt9basic_iosIcSt11char_traitsIcEE", !11, i64 216, !12, i64 224, !32, i64 225, !11, i64 232, !11, i64 240, !11, i64 248, !11, i64 256}
!32 = !{!"bool", !12, i64 0}
!33 = !{!34, !12, i64 56}
!34 = !{!"_ZTSSt5ctypeIcE", !11, i64 16, !32, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !12, i64 56, !12, i64 57, !12, i64 313, !12, i64 569}
!35 = !{!12, !12, i64 0}
!36 = !{!37, !16, i64 8}
!37 = !{!"_ZTSSt8ios_base", !16, i64 8, !16, i64 16, !38, i64 24, !39, i64 28, !39, i64 32, !11, i64 40, !40, i64 48, !12, i64 64, !19, i64 192, !11, i64 200, !41, i64 208}
!38 = !{!"_ZTSSt13_Ios_Fmtflags", !12, i64 0}
!39 = !{!"_ZTSSt12_Ios_Iostate", !12, i64 0}
!40 = !{!"_ZTSNSt8ios_base6_WordsE", !11, i64 0, !16, i64 8}
!41 = !{!"_ZTSSt6locale", !11, i64 0}
!42 = !{!37, !38, i64 24}
!43 = !{!38, !38, i64 0}
!44 = !{!8, !17, i64 640}
!45 = !{!37, !16, i64 16}
!46 = !{!31, !32, i64 225}
!47 = !{i8 0, i8 2}
!48 = !{!31, !12, i64 224}
!49 = !{!8, !17, i64 576}
!50 = !{!8, !17, i64 592}
Minimized: https://fwd.gymni.ch/CiQ2l0
@wsmoses trying to get rid of the openLB types from this example here: https://fwd.gymni.ch/nmzV0u by directly passing i8 instead of %"class.olb::util::Timer" and bitcasting it to i8 and i8. Getting an illegal updateAnalysis issue.
Either way, smaller: https://fwd.gymni.ch/OVBQrT
; ModuleID = 'minOrBug.ll'
source_filename = "ld-temp.o"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%"struct" = type { i32 }
declare dso_local void @__enzyme_autodiff(...)
define void @caller() {
entry:
call void (...) @__enzyme_autodiff(i8* bitcast (void (i8*)* @g to i8*), metadata !"enzyme_dup", i8* null, i8* null)
ret void
}
define hidden void @g(i8* align 8 %arg) {
%i1 = getelementptr inbounds i8, i8* %arg, i64 24
%i2 = bitcast i8* %i1 to i32*
%i3 = load i32, i32* %i2, align 8
%i4 = or i32 %i3, 32
store i32 %i4, i32* %i2, align 8
ret void
}
; ModuleID = 'minOrBug.ll'
source_filename = "ld-temp.o"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
declare dso_local void @__enzyme_autodiff(...)
define void @caller() {
call void (...) @__enzyme_autodiff(i8* bitcast (void (i32*)* @f to i8*), metadata !"enzyme_dup", i32* null, i32* null)
ret void
}
define hidden void @f(i32* align 8 %arg) {
%i1 = load i32, i32* %arg, align 8
%i2 = or i32 %i1, 32
store i32 %i2, i32* %arg, align 8
ret void
}
%365 = load i32, i32* %364, align 8, !tbaa !42
%366 = and i32 %365, -177
%367 = or i32 %366, 32
store i32 %367, i32* %364, align 8, !tbaa !43
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!16 = !{!"long", !12, i64 0}
!37 = !{!"_ZTSSt8ios_base", !16, i64 8, !16, i64 16, !38, i64 24, !39, i64 28, !39, i64 32, !11, i64 40, !40, i64 48, !12, i64 64, !19, i64 192, !11, i64 200, !41, i64 208}
!38 = !{!"_ZTSSt13_Ios_Fmtflags", !12, i64 0}
!42 = !{!37, !38, i64 24}
!43 = !{!38, !38, i64 0}
Relevant section above. The minimal cases have truely no information for which Enzyme can deduce that is an integer (which it appears to be), without TBAA or other info. The tbaa from the earlier case of relevance is posted above. It would be worth checking type analysis here to see what of the types exist and can be deduced as integral.
Minimized, but with the above info: https://fwd.gymni.ch/fZtSHY
closed by #801
or.ll.txt