; LLVM IR from chronoxor/CppBenchmark :: source/benchmark (benchmark_pc)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.35" = type { ptr }
%"class.CppBenchmark::ContextPC" = type { %"class.CppBenchmark::Context", i32, i32, %"class.std::shared_ptr", %"class.std::shared_ptr" }
%"class.CppBenchmark::Context" = type { %"class.CppBenchmark::Phase", i32, i32, i32, ptr, ptr, %"class.std::shared_ptr" }
%"class.CppBenchmark::Phase" = type { ptr }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Tuple_impl.13", %"struct.std::_Head_base.16" }
%"struct.std::_Tuple_impl.13" = type { %"struct.std::_Tuple_impl.14", %"struct.std::_Head_base.15" }
%"struct.std::_Tuple_impl.14" = type { %"struct.std::_Head_base" }
%"struct.std::_Head_base" = type { i32 }
%"struct.std::_Head_base.15" = type { i64 }
%"struct.std::_Head_base.16" = type { i64 }
%"class.CppBenchmark::Barrier" = type <{ %"class.std::mutex", %"class.std::condition_variable", i32, i32, i32, [4 x i8] }>
%"class.std::mutex" = type { %"class.std::__mutex_base" }
%"class.std::__mutex_base" = type { %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::condition_variable" = type { %"class.std::__condvar" }
%"class.std::__condvar" = type { %union.pthread_cond_t }
%union.pthread_cond_t = type { %struct.__pthread_cond_s }
%struct.__pthread_cond_s = type { %union.__atomic_wide_counter, %union.__atomic_wide_counter, [2 x i32], [2 x i32], i32, i32, [2 x i32] }
%union.__atomic_wide_counter = type { i64 }
%class.anon = type <{ ptr, ptr, ptr, %"class.std::tuple", i8, [3 x i8], i32, i8, [7 x i8], i64, i64, i32, [4 x i8] }>
%class.anon.69 = type <{ ptr, ptr, ptr, %"class.std::tuple", i8, [3 x i8], i32, i32, [4 x i8] }>
%"class.__gnu_cxx::__normal_iterator.71" = type { ptr }
%"class.CppBenchmark::BenchmarkBase" = type { ptr, i8, %"class.std::__cxx11::basic_string", %"class.CppBenchmark::Settings", %"class.std::vector.17" }
%"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 { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.CppBenchmark::Settings" = type <{ i32, i8, [3 x i8], i64, i64, %"class.std::vector", %"class.std::vector.3", %"class.std::vector.8", %"class.std::tuple", i8, [7 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = type { %"struct.std::_Vector_base<std::tuple<int, int>, std::allocator<std::tuple<int, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::tuple<int, int>, std::allocator<std::tuple<int, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::tuple<int, int>, std::allocator<std::tuple<int, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::tuple<int, int>, std::allocator<std::tuple<int, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<std::tuple<int, int, int>, std::allocator<std::tuple<int, int, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::tuple<int, int, int>, std::allocator<std::tuple<int, int, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::tuple<int, int, int>, std::allocator<std::tuple<int, int, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::tuple<int, int, int>, std::allocator<std::tuple<int, int, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.17" = type { %"struct.std::_Vector_base.18" }
%"struct.std::_Vector_base.18" = type { %"struct.std::_Vector_base<std::shared_ptr<CppBenchmark::PhaseCore>, std::allocator<std::shared_ptr<CppBenchmark::PhaseCore>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::shared_ptr<CppBenchmark::PhaseCore>, std::allocator<std::shared_ptr<CppBenchmark::PhaseCore>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::shared_ptr<CppBenchmark::PhaseCore>, std::allocator<std::shared_ptr<CppBenchmark::PhaseCore>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::shared_ptr<CppBenchmark::PhaseCore>, std::allocator<std::shared_ptr<CppBenchmark::PhaseCore>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.CppBenchmark::BenchmarkPC" = type { %"class.CppBenchmark::BenchmarkBase", %"class.std::vector.22", %"class.CppBenchmark::FixturePC" }
%"class.std::vector.22" = type { %"struct.std::_Vector_base.23" }
%"struct.std::_Vector_base.23" = type { %"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl" }
%"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.CppBenchmark::FixturePC" = type { ptr }

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12CppBenchmark8Settings8attemptsEv(ptr noundef nonnull align 8 dereferenceable(121)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings2pcEv(ptr noundef nonnull align 8 dereferenceable(121)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings6paramsEv(ptr noundef nonnull align 8 dereferenceable(121)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS_15LauncherHandlerE(ptr noundef nonnull align 8 dereferenceable(224) %0, ptr noundef nonnull align 4 dereferenceable(4) %1, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(8) %3) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %25 = alloca ptr, align 8
  %26 = alloca %"class.CppBenchmark::ContextPC", align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca %"class.std::tuple", align 8
  %30 = alloca i8, align 1
  %31 = alloca i8, align 1
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca %"class.CppBenchmark::Barrier", align 8
  %35 = alloca i32, align 4
  %36 = alloca %class.anon, align 8
  %37 = alloca i32, align 4
  %38 = alloca %class.anon.69, align 8
  %39 = alloca ptr, align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.71", align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator.71", align 8
  %42 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !5
  %43 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  store i32 1, ptr %9, align 4, !tbaa !9
  br label %44

44:                                               ; preds = %281, %4
  %45 = load i32, ptr %9, align 4, !tbaa !9
  %46 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %47 = call noundef i32 @_ZNK12CppBenchmark8Settings8attemptsEv(ptr noundef nonnull align 8 dereferenceable(121) %46) #7
  %48 = icmp sle i32 %45, %47
  br i1 %48, label %50, label %49

49:                                               ; preds = %44
  store i32 2, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  br label %284

50:                                               ; preds = %44
  %51 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %52 = getelementptr inbounds %"class.CppBenchmark::Settings", ptr %51, i32 0, i32 6
  %53 = call noundef zeroext i1 @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #7
  br i1 %53, label %54, label %58

54:                                               ; preds = %50
  %55 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %56 = getelementptr inbounds %"class.CppBenchmark::Settings", ptr %55, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  store i32 1, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  store i32 1, ptr %12, align 4, !tbaa !9
  %57 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt5tupleIJiiEESaIS1_EE12emplace_backIJiiEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  br label %58

58:                                               ; preds = %54, %50
  %59 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %60 = getelementptr inbounds %"class.CppBenchmark::Settings", ptr %59, i32 0, i32 7
  %61 = call noundef zeroext i1 @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %60) #7
  br i1 %61, label %62, label %66

62:                                               ; preds = %58
  %63 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %64 = getelementptr inbounds %"class.CppBenchmark::Settings", ptr %63, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  store i32 -1, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  store i32 -1, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  store i32 -1, ptr %15, align 4, !tbaa !9
  %65 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorISt5tupleIJiiiEESaIS1_EE12emplace_backIJiiiEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %64, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %15)
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %66

66:                                               ; preds = %62, %58
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %67 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %68 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings2pcEv(ptr noundef nonnull align 8 dereferenceable(121) %67) #7
  store ptr %68, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %69 = load ptr, ptr %16, align 8, !tbaa !5
  %70 = call ptr @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %69) #7
  %71 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %17, i32 0, i32 0
  store ptr %70, ptr %71, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %72 = load ptr, ptr %16, align 8, !tbaa !5
  %73 = call ptr @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %72) #7
  %74 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %18, i32 0, i32 0
  store ptr %73, ptr %74, align 8
  br label %75

75:                                               ; preds = %278, %66
  %76 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  br i1 %76, label %78, label %77

77:                                               ; preds = %75
  store i32 5, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %280

78:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %79 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  store ptr %79, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  %80 = load ptr, ptr %19, align 8, !tbaa !5
  %81 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm0EJiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(8) %80) #7
  %82 = load i32, ptr %81, align 4, !tbaa !9
  store i32 %82, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %83 = load ptr, ptr %19, align 8, !tbaa !5
  %84 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm1EJiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(8) %83) #7
  %85 = load i32, ptr %84, align 4, !tbaa !9
  store i32 %85, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %86 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %87 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings6paramsEv(ptr noundef nonnull align 8 dereferenceable(121) %86) #7
  store ptr %87, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %88 = load ptr, ptr %22, align 8, !tbaa !5
  %89 = call ptr @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %88) #7
  %90 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %23, i32 0, i32 0
  store ptr %89, ptr %90, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %91 = load ptr, ptr %22, align 8, !tbaa !5
  %92 = call ptr @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %91) #7
  %93 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %24, i32 0, i32 0
  store ptr %92, ptr %93, align 8
  br label %94

94:                                               ; preds = %268, %78
  %95 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  br i1 %95, label %97, label %96

96:                                               ; preds = %94
  store i32 7, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %277

97:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %98 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  store ptr %98, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 96, ptr %26) #7
  %99 = load i32, ptr %20, align 4, !tbaa !9
  %100 = load i32, ptr %21, align 4, !tbaa !9
  %101 = load ptr, ptr %25, align 8, !tbaa !5
  %102 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm0EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12) %101) #7
  %103 = load i32, ptr %102, align 4, !tbaa !9
  %104 = load ptr, ptr %25, align 8, !tbaa !5
  %105 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm1EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12) %104) #7
  %106 = load i32, ptr %105, align 4, !tbaa !9
  %107 = load ptr, ptr %25, align 8, !tbaa !5
  %108 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm2EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12) %107) #7
  %109 = load i32, ptr %108, align 4, !tbaa !9
  call void @_ZN12CppBenchmark9ContextPCC2Eiiiii(ptr noundef nonnull align 8 dereferenceable(96) %26, i32 noundef %99, i32 noundef %100, i32 noundef %103, i32 noundef %106, i32 noundef %109) #7
  invoke void @_ZN12CppBenchmark13BenchmarkBase20InitBenchmarkContextERNS_7ContextE(ptr noundef nonnull align 8 dereferenceable(200) %43, ptr noundef nonnull align 8 dereferenceable(56) %26)
          to label %110 unwind label %153

110:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #7
  %111 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %112 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings7latencyEv(ptr noundef nonnull align 8 dereferenceable(121) %111) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %29, ptr align 8 %112, i64 24, i1 false)
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #7
  %113 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %114 = call noundef zeroext i1 @_ZNK12CppBenchmark8Settings12latency_autoEv(ptr noundef nonnull align 8 dereferenceable(121) %113) #7
  %115 = zext i1 %114 to i8
  store i8 %115, ptr %30, align 1, !tbaa !11
  %116 = load ptr, ptr %8, align 8, !tbaa !5
  %117 = load ptr, ptr %6, align 8, !tbaa !5
  %118 = load i32, ptr %117, align 4, !tbaa !9
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr %117, align 4, !tbaa !9
  %120 = load i32, ptr %7, align 4, !tbaa !9
  %121 = load i32, ptr %9, align 4, !tbaa !9
  %122 = load ptr, ptr %116, align 8, !tbaa !13
  %123 = getelementptr inbounds ptr, ptr %122, i64 2
  %124 = load ptr, ptr %123, align 8
  invoke void %124(ptr noundef nonnull align 8 dereferenceable(8) %116, i32 noundef %119, i32 noundef %120, ptr noundef nonnull align 8 dereferenceable(200) %43, ptr noundef nonnull align 8 dereferenceable(56) %26, i32 noundef %121)
          to label %125 unwind label %157

125:                                              ; preds = %110
  %126 = load ptr, ptr %43, align 8, !tbaa !13
  %127 = getelementptr i8, ptr %126, i64 -24
  %128 = load i64, ptr %127, align 8
  %129 = getelementptr inbounds i8, ptr %43, i64 %128
  %130 = load ptr, ptr %129, align 8, !tbaa !13
  %131 = getelementptr inbounds ptr, ptr %130, i64 2
  %132 = load ptr, ptr %131, align 8
  invoke void %132(ptr noundef nonnull align 8 dereferenceable(8) %129, ptr noundef nonnull align 8 dereferenceable(96) %26)
          to label %133 unwind label %157

133:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #7
  %134 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %135 = call noundef zeroext i1 @_ZNK12CppBenchmark8Settings8infiniteEv(ptr noundef nonnull align 8 dereferenceable(121) %134) #7
  %136 = zext i1 %135 to i8
  store i8 %136, ptr %31, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %137 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %138 = call noundef i64 @_ZNK12CppBenchmark8Settings8durationEv(ptr noundef nonnull align 8 dereferenceable(121) %137) #7
  store i64 %138, ptr %32, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %139 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 3
  %140 = call noundef i64 @_ZNK12CppBenchmark8Settings10operationsEv(ptr noundef nonnull align 8 dereferenceable(121) %139) #7
  store i64 %140, ptr %33, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 104, ptr %34) #7
  %141 = load i32, ptr %20, align 4, !tbaa !9
  %142 = load i32, ptr %21, align 4, !tbaa !9
  %143 = add nsw i32 %141, %142
  call void @_ZN12CppBenchmark7BarrierC1Ei(ptr noundef nonnull align 8 dereferenceable(100) %34, i32 noundef %143) #7
  %144 = getelementptr inbounds %"class.CppBenchmark::Context", ptr %26, i32 0, i32 4
  %145 = load ptr, ptr %144, align 8, !tbaa !17
  call void @_ZN12CppBenchmark9PhaseCore22StartCollectingMetricsEv(ptr noundef nonnull align 8 dereferenceable(944) %145) #7
  %146 = getelementptr inbounds %"class.CppBenchmark::Context", ptr %26, i32 0, i32 5
  %147 = load ptr, ptr %146, align 8, !tbaa !23
  call void @_ZN12CppBenchmark12PhaseMetrics13AddOperationsEl(ptr noundef nonnull align 8 dereferenceable(412) %147, i64 noundef 1) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %185, %133
  %149 = load i32, ptr %35, align 4, !tbaa !9
  %150 = load i32, ptr %20, align 4, !tbaa !9
  %151 = icmp slt i32 %149, %150
  br i1 %151, label %161, label %152

152:                                              ; preds = %148
  store i32 9, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %192

153:                                              ; preds = %97
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %27, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %28, align 4
  br label %276

157:                                              ; preds = %125, %110
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %27, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %28, align 4
  br label %275

161:                                              ; preds = %148
  %162 = getelementptr inbounds %"class.CppBenchmark::BenchmarkPC", ptr %43, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 88, ptr %36) #7
  %163 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 0
  store ptr %43, ptr %163, align 8, !tbaa !24
  %164 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 1
  store ptr %34, ptr %164, align 8, !tbaa !5
  %165 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 2
  store ptr %26, ptr %165, align 8, !tbaa !5
  %166 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %166, ptr align 8 %29, i64 24, i1 false)
  %167 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 4
  %168 = load i8, ptr %30, align 1, !tbaa !11, !range !33, !noundef !34
  %169 = trunc i8 %168 to i1
  %170 = zext i1 %169 to i8
  store i8 %170, ptr %167, align 8, !tbaa !35
  %171 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 6
  %172 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %172, ptr %171, align 4, !tbaa !36
  %173 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 7
  %174 = load i8, ptr %31, align 1, !tbaa !11, !range !33, !noundef !34
  %175 = trunc i8 %174 to i1
  %176 = zext i1 %175 to i8
  store i8 %176, ptr %173, align 8, !tbaa !37
  %177 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 9
  %178 = load i64, ptr %33, align 8, !tbaa !15
  store i64 %178, ptr %177, align 8, !tbaa !38
  %179 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 10
  %180 = load i64, ptr %32, align 8, !tbaa !15
  store i64 %180, ptr %179, align 8, !tbaa !39
  %181 = getelementptr inbounds %class.anon, ptr %36, i32 0, i32 11
  %182 = load i32, ptr %35, align 4, !tbaa !9
  store i32 %182, ptr %181, align 8, !tbaa !40
  %183 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS4_15LauncherHandlerEE3$_0EEERS0_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24) %162, ptr noundef nonnull align 8 dereferenceable(84) %36)
          to label %184 unwind label %188

184:                                              ; preds = %161
  call void @llvm.lifetime.end.p0(i64 88, ptr %36) #7
  br label %185

185:                                              ; preds = %184
  %186 = load i32, ptr %35, align 4, !tbaa !9
  %187 = add nsw i32 %186, 1
  store i32 %187, ptr %35, align 4, !tbaa !9
  br label %148, !llvm.loop !41

188:                                              ; preds = %161
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %27, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 88, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %274

192:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %193

193:                                              ; preds = %214, %192
  %194 = load i32, ptr %37, align 4, !tbaa !9
  %195 = load i32, ptr %21, align 4, !tbaa !9
  %196 = icmp slt i32 %194, %195
  br i1 %196, label %198, label %197

197:                                              ; preds = %193
  store i32 12, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %221

198:                                              ; preds = %193
  %199 = getelementptr inbounds %"class.CppBenchmark::BenchmarkPC", ptr %43, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 64, ptr %38) #7
  %200 = getelementptr inbounds %class.anon.69, ptr %38, i32 0, i32 0
  store ptr %43, ptr %200, align 8, !tbaa !43
  %201 = getelementptr inbounds %class.anon.69, ptr %38, i32 0, i32 1
  store ptr %34, ptr %201, align 8, !tbaa !5
  %202 = getelementptr inbounds %class.anon.69, ptr %38, i32 0, i32 2
  store ptr %26, ptr %202, align 8, !tbaa !5
  %203 = getelementptr inbounds %class.anon.69, ptr %38, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %203, ptr align 8 %29, i64 24, i1 false)
  %204 = getelementptr inbounds %class.anon.69, ptr %38, i32 0, i32 4
  %205 = load i8, ptr %30, align 1, !tbaa !11, !range !33, !noundef !34
  %206 = trunc i8 %205 to i1
  %207 = zext i1 %206 to i8
  store i8 %207, ptr %204, align 8, !tbaa !45
  %208 = getelementptr inbounds %class.anon.69, ptr %38, i32 0, i32 6
  %209 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %209, ptr %208, align 4, !tbaa !46
  %210 = getelementptr inbounds %class.anon.69, ptr %38, i32 0, i32 7
  %211 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %211, ptr %210, align 8, !tbaa !47
  %212 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS4_15LauncherHandlerEE3$_1EEERS0_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24) %199, ptr noundef nonnull align 8 dereferenceable(60) %38)
          to label %213 unwind label %217

213:                                              ; preds = %198
  call void @llvm.lifetime.end.p0(i64 64, ptr %38) #7
  br label %214

214:                                              ; preds = %213
  %215 = load i32, ptr %37, align 4, !tbaa !9
  %216 = add nsw i32 %215, 1
  store i32 %216, ptr %37, align 4, !tbaa !9
  br label %193, !llvm.loop !48

217:                                              ; preds = %198
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %27, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %274

221:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %222 = getelementptr inbounds %"class.CppBenchmark::BenchmarkPC", ptr %43, i32 0, i32 1
  store ptr %222, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %223 = load ptr, ptr %39, align 8, !tbaa !5
  %224 = call ptr @_ZNSt6vectorISt6threadSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %223) #7
  %225 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.71", ptr %40, i32 0, i32 0
  store ptr %224, ptr %225, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %226 = load ptr, ptr %39, align 8, !tbaa !5
  %227 = call ptr @_ZNSt6vectorISt6threadSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %226) #7
  %228 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.71", ptr %41, i32 0, i32 0
  store ptr %227, ptr %228, align 8
  br label %229

229:                                              ; preds = %236, %221
  %230 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #7
  br i1 %230, label %232, label %231

231:                                              ; preds = %229
  store i32 15, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  br label %242

232:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %233 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #7
  store ptr %233, ptr %42, align 8, !tbaa !5
  %234 = load ptr, ptr %42, align 8, !tbaa !5
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %234)
          to label %235 unwind label %238

235:                                              ; preds = %232
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %236

236:                                              ; preds = %235
  %237 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #7
  br label %229

238:                                              ; preds = %232
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %27, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  br label %274

242:                                              ; preds = %231
  %243 = getelementptr inbounds %"class.CppBenchmark::BenchmarkPC", ptr %43, i32 0, i32 1
  call void @_ZNSt6vectorISt6threadSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %243) #7
  %244 = getelementptr inbounds %"class.CppBenchmark::Context", ptr %26, i32 0, i32 4
  %245 = load ptr, ptr %244, align 8, !tbaa !17
  call void @_ZN12CppBenchmark9PhaseCore21StopCollectingMetricsEv(ptr noundef nonnull align 8 dereferenceable(944) %245) #7
  %246 = load ptr, ptr %43, align 8, !tbaa !13
  %247 = getelementptr i8, ptr %246, i64 -24
  %248 = load i64, ptr %247, align 8
  %249 = getelementptr inbounds i8, ptr %43, i64 %248
  %250 = load ptr, ptr %249, align 8, !tbaa !13
  %251 = getelementptr inbounds ptr, ptr %250, i64 3
  %252 = load ptr, ptr %251, align 8
  invoke void %252(ptr noundef nonnull align 8 dereferenceable(8) %249, ptr noundef nonnull align 8 dereferenceable(96) %26)
          to label %253 unwind label %270

253:                                              ; preds = %242
  %254 = load ptr, ptr %8, align 8, !tbaa !5
  %255 = load ptr, ptr %6, align 8, !tbaa !5
  %256 = load i32, ptr %255, align 4, !tbaa !9
  %257 = load i32, ptr %7, align 4, !tbaa !9
  %258 = load i32, ptr %9, align 4, !tbaa !9
  %259 = load ptr, ptr %254, align 8, !tbaa !13
  %260 = getelementptr inbounds ptr, ptr %259, i64 3
  %261 = load ptr, ptr %260, align 8
  invoke void %261(ptr noundef nonnull align 8 dereferenceable(8) %254, i32 noundef %256, i32 noundef %257, ptr noundef nonnull align 8 dereferenceable(200) %43, ptr noundef nonnull align 8 dereferenceable(56) %26, i32 noundef %258)
          to label %262 unwind label %270

262:                                              ; preds = %253
  %263 = getelementptr inbounds %"class.CppBenchmark::Context", ptr %26, i32 0, i32 4
  %264 = load ptr, ptr %263, align 8, !tbaa !17
  invoke void @_ZN12CppBenchmark9PhaseCore12MergeMetricsEv(ptr noundef nonnull align 8 dereferenceable(944) %264)
          to label %265 unwind label %270

265:                                              ; preds = %262
  %266 = getelementptr inbounds %"class.CppBenchmark::Context", ptr %26, i32 0, i32 4
  %267 = load ptr, ptr %266, align 8, !tbaa !17
  call void @_ZN12CppBenchmark9PhaseCore12ResetMetricsEv(ptr noundef nonnull align 8 dereferenceable(944) %267) #7
  call void @_ZN12CppBenchmark7BarrierD2Ev(ptr noundef nonnull align 8 dereferenceable(100) %34) #7
  call void @llvm.lifetime.end.p0(i64 104, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #7
  call void @_ZN12CppBenchmark9ContextPCD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %26) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %268

268:                                              ; preds = %265
  %269 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  br label %94

270:                                              ; preds = %262, %253, %242
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %27, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %28, align 4
  br label %274

274:                                              ; preds = %270, %238, %217, %188
  call void @_ZN12CppBenchmark7BarrierD2Ev(ptr noundef nonnull align 8 dereferenceable(100) %34) #7
  call void @llvm.lifetime.end.p0(i64 104, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  br label %275

275:                                              ; preds = %274, %157
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #7
  br label %276

276:                                              ; preds = %275, %153
  call void @_ZN12CppBenchmark9ContextPCD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %26) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  br label %288

277:                                              ; preds = %96
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %278

278:                                              ; preds = %277
  %279 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  br label %75

280:                                              ; preds = %77
  br label %281

281:                                              ; preds = %280
  %282 = load i32, ptr %9, align 4, !tbaa !9
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %9, align 4, !tbaa !9
  br label %44, !llvm.loop !49

284:                                              ; preds = %49
  %285 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 4
  call void @_ZN12CppBenchmark13BenchmarkBase22UpdateBenchmarkThreadsERSt6vectorISt10shared_ptrINS_9PhaseCoreEESaIS4_EE(ptr noundef nonnull align 8 dereferenceable(24) %285)
  %286 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 4
  call void @_ZN12CppBenchmark13BenchmarkBase20UpdateBenchmarkNamesERSt6vectorISt10shared_ptrINS_9PhaseCoreEESaIS4_EE(ptr noundef nonnull align 8 dereferenceable(24) %286)
  %287 = getelementptr inbounds %"class.CppBenchmark::BenchmarkBase", ptr %43, i32 0, i32 1
  store i8 1, ptr %287, align 8, !tbaa !50
  ret void

288:                                              ; preds = %276
  %289 = load ptr, ptr %27, align 8
  %290 = load i32, ptr %28, align 4
  %291 = insertvalue { ptr, i32 } poison, ptr %289, 0
  %292 = insertvalue { ptr, i32 } %291, i32 %290, 1
  resume { ptr, i32 } %292
}

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt5tupleIJiiEESaIS1_EE12emplace_backIJiiEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorISt5tupleIJiiiEESaIS1_EE12emplace_backIJiiiEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm0EJiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(8)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm1EJiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(8)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm0EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm1EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm2EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9ContextPCC2Eiiiii(ptr noundef nonnull align 8 dereferenceable(96), i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #0 align 2

declare void @_ZN12CppBenchmark13BenchmarkBase20InitBenchmarkContextERNS_7ContextE(ptr noundef nonnull align 8 dereferenceable(200), ptr noundef nonnull align 8 dereferenceable(56)) #4

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings7latencyEv(ptr noundef nonnull align 8 dereferenceable(121)) #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK12CppBenchmark8Settings12latency_autoEv(ptr noundef nonnull align 8 dereferenceable(121)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK12CppBenchmark8Settings8infiniteEv(ptr noundef nonnull align 8 dereferenceable(121)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK12CppBenchmark8Settings8durationEv(ptr noundef nonnull align 8 dereferenceable(121)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK12CppBenchmark8Settings10operationsEv(ptr noundef nonnull align 8 dereferenceable(121)) #0 align 2

; Function Attrs: nounwind
declare void @_ZN12CppBenchmark7BarrierC1Ei(ptr noundef nonnull align 8 dereferenceable(100), i32 noundef) unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9PhaseCore22StartCollectingMetricsEv(ptr noundef nonnull align 8 dereferenceable(944)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark12PhaseMetrics13AddOperationsEl(ptr noundef nonnull align 8 dereferenceable(412), i64 noundef) #0 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS4_15LauncherHandlerEE3$_0EEERS0_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(84)) #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS4_15LauncherHandlerEE3$_1EEERS0_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(60)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorISt6threadSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorISt6threadSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

declare void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorISt6threadSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9PhaseCore21StopCollectingMetricsEv(ptr noundef nonnull align 8 dereferenceable(944)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN12CppBenchmark9PhaseCore12MergeMetricsEv(ptr noundef nonnull align 8 dereferenceable(944)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9PhaseCore12ResetMetricsEv(ptr noundef nonnull align 8 dereferenceable(944)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark7BarrierD2Ev(ptr noundef nonnull align 8 dereferenceable(100)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9ContextPCD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

declare void @_ZN12CppBenchmark13BenchmarkBase22UpdateBenchmarkThreadsERSt6vectorISt10shared_ptrINS_9PhaseCoreEESaIS4_EE(ptr noundef nonnull align 8 dereferenceable(24)) #4

declare void @_ZN12CppBenchmark13BenchmarkBase20UpdateBenchmarkNamesERSt6vectorISt10shared_ptrINS_9PhaseCoreEESaIS4_EE(ptr noundef nonnull align 8 dereferenceable(24)) #4

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 = { 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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"vtable pointer", !8, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!18, !6, i64 24}
!18 = !{!"_ZTSN12CppBenchmark7ContextE", !19, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !6, i64 24, !6, i64 32, !20, i64 40}
!19 = !{!"_ZTSN12CppBenchmark5PhaseE"}
!20 = !{!"_ZTSSt10shared_ptrISt6atomicIbEE", !21, i64 0}
!21 = !{!"_ZTSSt12__shared_ptrISt6atomicIbELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !22, i64 8}
!22 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!23 = !{!18, !6, i64 32}
!24 = !{!25, !6, i64 0}
!25 = !{!"_ZTSZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS_15LauncherHandlerEE3$_0", !6, i64 0, !6, i64 8, !6, i64 16, !26, i64 24, !12, i64 48, !10, i64 52, !12, i64 56, !16, i64 64, !16, i64 72, !10, i64 80}
!26 = !{!"_ZTSSt5tupleIJlliEE", !27, i64 0}
!27 = !{!"_ZTSSt11_Tuple_implILm0EJlliEE", !28, i64 0, !32, i64 16}
!28 = !{!"_ZTSSt11_Tuple_implILm1EJliEE", !29, i64 0, !31, i64 8}
!29 = !{!"_ZTSSt11_Tuple_implILm2EJiEE", !30, i64 0}
!30 = !{!"_ZTSSt10_Head_baseILm2EiLb0EE", !10, i64 0}
!31 = !{!"_ZTSSt10_Head_baseILm1ElLb0EE", !16, i64 0}
!32 = !{!"_ZTSSt10_Head_baseILm0ElLb0EE", !16, i64 0}
!33 = !{i8 0, i8 2}
!34 = !{}
!35 = !{!25, !12, i64 48}
!36 = !{!25, !10, i64 52}
!37 = !{!25, !12, i64 56}
!38 = !{!25, !16, i64 64}
!39 = !{!25, !16, i64 72}
!40 = !{!25, !10, i64 80}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = !{!44, !6, i64 0}
!44 = !{!"_ZTSZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS_15LauncherHandlerEE3$_1", !6, i64 0, !6, i64 8, !6, i64 16, !26, i64 24, !12, i64 48, !10, i64 52, !10, i64 56}
!45 = !{!44, !12, i64 48}
!46 = !{!44, !10, i64 52}
!47 = !{!44, !10, i64 56}
!48 = distinct !{!48, !42}
!49 = distinct !{!49, !42}
!50 = !{!51, !12, i64 8}
!51 = !{!"_ZTSN12CppBenchmark13BenchmarkBaseE", !12, i64 8, !52, i64 16, !54, i64 48, !67, i64 176}
!52 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !53, i64 0, !16, i64 8, !7, i64 16}
!53 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!54 = !{!"_ZTSN12CppBenchmark8SettingsE", !10, i64 0, !12, i64 4, !16, i64 8, !16, i64 16, !55, i64 24, !59, i64 48, !63, i64 72, !26, i64 96, !12, i64 120}
!55 = !{!"_ZTSSt6vectorIiSaIiEE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!59 = !{!"_ZTSSt6vectorISt5tupleIJiiEESaIS1_EE", !60, i64 0}
!60 = !{!"_ZTSSt12_Vector_baseISt5tupleIJiiEESaIS1_EE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseISt5tupleIJiiEESaIS1_EE12_Vector_implE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseISt5tupleIJiiEESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!63 = !{!"_ZTSSt6vectorISt5tupleIJiiiEESaIS1_EE", !64, i64 0}
!64 = !{!"_ZTSSt12_Vector_baseISt5tupleIJiiiEESaIS1_EE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseISt5tupleIJiiiEESaIS1_EE12_Vector_implE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseISt5tupleIJiiiEESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!67 = !{!"_ZTSSt6vectorISt10shared_ptrIN12CppBenchmark9PhaseCoreEESaIS3_EE", !68, i64 0}
!68 = !{!"_ZTSSt12_Vector_baseISt10shared_ptrIN12CppBenchmark9PhaseCoreEESaIS3_EE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrIN12CppBenchmark9PhaseCoreEESaIS3_EE12_Vector_implE", !70, i64 0}
!70 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrIN12CppBenchmark9PhaseCoreEESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}


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

%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.35" = type { ptr }
%"class.CppBenchmark::ContextPC" = type { %"class.CppBenchmark::Context", i32, i32, %"class.std::shared_ptr", %"class.std::shared_ptr" }
%"class.CppBenchmark::Context" = type { %"class.CppBenchmark::Phase", i32, i32, i32, ptr, ptr, %"class.std::shared_ptr" }
%"class.CppBenchmark::Phase" = type { ptr }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Tuple_impl.13", %"struct.std::_Head_base.16" }
%"struct.std::_Tuple_impl.13" = type { %"struct.std::_Tuple_impl.14", %"struct.std::_Head_base.15" }
%"struct.std::_Tuple_impl.14" = type { %"struct.std::_Head_base" }
%"struct.std::_Head_base" = type { i32 }
%"struct.std::_Head_base.15" = type { i64 }
%"struct.std::_Head_base.16" = type { i64 }
%"class.CppBenchmark::Barrier" = type <{ %"class.std::mutex", %"class.std::condition_variable", i32, i32, i32, [4 x i8] }>
%"class.std::mutex" = type { %"class.std::__mutex_base" }
%"class.std::__mutex_base" = type { %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::condition_variable" = type { %"class.std::__condvar" }
%"class.std::__condvar" = type { %union.pthread_cond_t }
%union.pthread_cond_t = type { %struct.__pthread_cond_s }
%struct.__pthread_cond_s = type { %union.__atomic_wide_counter, %union.__atomic_wide_counter, [2 x i32], [2 x i32], i32, i32, [2 x i32] }
%union.__atomic_wide_counter = type { i64 }
%class.anon = type <{ ptr, ptr, ptr, %"class.std::tuple", i8, [3 x i8], i32, i8, [7 x i8], i64, i64, i32, [4 x i8] }>
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%class.anon.69 = type <{ ptr, ptr, ptr, %"class.std::tuple", i8, [3 x i8], i32, i32, [4 x i8] }>
%"class.__gnu_cxx::__normal_iterator.71" = type { ptr }

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12CppBenchmark8Settings8attemptsEv(ptr noundef nonnull align 8 dereferenceable(121)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings2pcEv(ptr noundef nonnull align 8 dereferenceable(121)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings6paramsEv(ptr noundef nonnull align 8 dereferenceable(121)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS_15LauncherHandlerE(ptr noundef nonnull align 8 dereferenceable(224) %0, ptr nocapture noundef nonnull align 4 dereferenceable(4) %1, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(8) %3) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %14 = alloca %"class.CppBenchmark::ContextPC", align 8
  %.sroa.0 = alloca %"struct.std::_Tuple_impl", align 8
  %15 = alloca %"class.CppBenchmark::Barrier", align 8
  %16 = alloca %class.anon, align 8
  %17 = alloca %class.anon.69, align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.71", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator.71", align 8
  %20 = getelementptr inbounds i8, ptr %0, i64 48
  %21 = tail call noundef i32 @_ZNK12CppBenchmark8Settings8attemptsEv(ptr noundef nonnull align 8 dereferenceable(121) %20) #7
  %.not66 = icmp slt i32 %21, 1
  br i1 %.not66, label %._crit_edge70, label %.lr.ph69

.lr.ph69:                                         ; preds = %4
  %22 = getelementptr inbounds i8, ptr %0, i64 96
  %23 = getelementptr inbounds i8, ptr %0, i64 120
  %24 = getelementptr inbounds i8, ptr %14, i64 24
  %25 = getelementptr inbounds i8, ptr %14, i64 32
  %26 = getelementptr inbounds i8, ptr %0, i64 200
  %27 = getelementptr inbounds i8, ptr %16, i64 8
  %28 = getelementptr inbounds i8, ptr %16, i64 16
  %29 = getelementptr inbounds i8, ptr %16, i64 24
  %30 = getelementptr inbounds i8, ptr %16, i64 48
  %31 = getelementptr inbounds i8, ptr %16, i64 52
  %32 = getelementptr inbounds i8, ptr %16, i64 56
  %33 = getelementptr inbounds i8, ptr %16, i64 64
  %34 = getelementptr inbounds i8, ptr %16, i64 72
  %35 = getelementptr inbounds i8, ptr %16, i64 80
  %36 = getelementptr inbounds i8, ptr %17, i64 8
  %37 = getelementptr inbounds i8, ptr %17, i64 16
  %38 = getelementptr inbounds i8, ptr %17, i64 24
  %39 = getelementptr inbounds i8, ptr %17, i64 48
  %40 = getelementptr inbounds i8, ptr %17, i64 52
  %41 = getelementptr inbounds i8, ptr %17, i64 56
  br label %44

._crit_edge70:                                    ; preds = %._crit_edge65, %4
  %42 = getelementptr inbounds i8, ptr %0, i64 176
  call void @_ZN12CppBenchmark13BenchmarkBase22UpdateBenchmarkThreadsERSt6vectorISt10shared_ptrINS_9PhaseCoreEESaIS4_EE(ptr noundef nonnull align 8 dereferenceable(24) %42)
  call void @_ZN12CppBenchmark13BenchmarkBase20UpdateBenchmarkNamesERSt6vectorISt10shared_ptrINS_9PhaseCoreEESaIS4_EE(ptr noundef nonnull align 8 dereferenceable(24) %42)
  %43 = getelementptr inbounds i8, ptr %0, i64 8
  store i8 1, ptr %43, align 8, !tbaa !5
  ret void

44:                                               ; preds = %.lr.ph69, %._crit_edge65
  %.067 = phi i32 [ 1, %.lr.ph69 ], [ %57, %._crit_edge65 ]
  %45 = call noundef zeroext i1 @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #7
  br i1 %45, label %46, label %48

46:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  store i32 1, ptr %5, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #7
  store i32 1, ptr %6, align 4, !tbaa !39
  %47 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt5tupleIJiiEESaIS1_EE12emplace_backIJiiEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %6)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  br label %48

48:                                               ; preds = %46, %44
  %49 = call noundef zeroext i1 @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  br i1 %49, label %50, label %52

50:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #7
  store i32 -1, ptr %7, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #7
  store i32 -1, ptr %8, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  store i32 -1, ptr %9, align 4, !tbaa !39
  %51 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorISt5tupleIJiiiEESaIS1_EE12emplace_backIJiiiEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %9)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  br label %52

52:                                               ; preds = %50, %48
  %53 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings2pcEv(ptr noundef nonnull align 8 dereferenceable(121) %20) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %54 = call ptr @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %53) #7
  store ptr %54, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %55 = call ptr @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %53) #7
  store ptr %55, ptr %11, align 8
  %56 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  br i1 %56, label %.lr.ph64, label %._crit_edge65

._crit_edge65:                                    ; preds = %._crit_edge62, %52
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  %57 = add nuw nsw i32 %.067, 1
  %58 = call noundef i32 @_ZNK12CppBenchmark8Settings8attemptsEv(ptr noundef nonnull align 8 dereferenceable(121) %20) #7
  %.not.not = icmp slt i32 %.067, %58
  br i1 %.not.not, label %44, label %._crit_edge70, !llvm.loop !40

.lr.ph64:                                         ; preds = %52, %._crit_edge62
  %59 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  %60 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm0EJiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(8) %59) #7
  %61 = load i32, ptr %60, align 4, !tbaa !39
  %62 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm1EJiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(8) %59) #7
  %63 = load i32, ptr %62, align 4, !tbaa !39
  %64 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings6paramsEv(ptr noundef nonnull align 8 dereferenceable(121) %20) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  %65 = call ptr @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #7
  store ptr %65, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  %66 = call ptr @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #7
  store ptr %66, ptr %13, align 8
  %67 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  br i1 %67, label %.lr.ph61, label %._crit_edge62

.lr.ph61:                                         ; preds = %.lr.ph64
  %68 = add nsw i32 %63, %61
  %69 = icmp sgt i32 %61, 0
  %70 = icmp sgt i32 %63, 0
  br label %73

._crit_edge62:                                    ; preds = %143, %.lr.ph64
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  %71 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  %72 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  br i1 %72, label %.lr.ph64, label %._crit_edge65

73:                                               ; preds = %.lr.ph61, %143
  %74 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %14) #7
  %75 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm0EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12) %74) #7
  %76 = load i32, ptr %75, align 4, !tbaa !39
  %77 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm1EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12) %74) #7
  %78 = load i32, ptr %77, align 4, !tbaa !39
  %79 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm2EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12) %74) #7
  %80 = load i32, ptr %79, align 4, !tbaa !39
  call void @_ZN12CppBenchmark9ContextPCC2Eiiiii(ptr noundef nonnull align 8 dereferenceable(96) %14, i32 noundef %61, i32 noundef %63, i32 noundef %76, i32 noundef %78, i32 noundef %80) #7
  invoke void @_ZN12CppBenchmark13BenchmarkBase20InitBenchmarkContextERNS_7ContextE(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull align 8 dereferenceable(56) %14)
          to label %81 unwind label %105

81:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %.sroa.0)
  %82 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings7latencyEv(ptr noundef nonnull align 8 dereferenceable(121) %20) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.0, ptr noundef nonnull align 8 dereferenceable(24) %82, i64 24, i1 false)
  %83 = call noundef zeroext i1 @_ZNK12CppBenchmark8Settings12latency_autoEv(ptr noundef nonnull align 8 dereferenceable(121) %20) #7
  %84 = zext i1 %83 to i8
  %85 = load i32, ptr %1, align 4, !tbaa !39
  %86 = add nsw i32 %85, 1
  store i32 %86, ptr %1, align 4, !tbaa !39
  %87 = load ptr, ptr %3, align 8, !tbaa !42
  %88 = getelementptr inbounds i8, ptr %87, i64 16
  %89 = load ptr, ptr %88, align 8
  invoke void %89(ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %86, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull align 8 dereferenceable(56) %14, i32 noundef %.067)
          to label %90 unwind label %107

90:                                               ; preds = %81
  %91 = load ptr, ptr %0, align 8, !tbaa !42
  %92 = getelementptr i8, ptr %91, i64 -24
  %93 = load i64, ptr %92, align 8
  %94 = getelementptr inbounds i8, ptr %0, i64 %93
  %95 = load ptr, ptr %94, align 8, !tbaa !42
  %96 = getelementptr inbounds i8, ptr %95, i64 16
  %97 = load ptr, ptr %96, align 8
  invoke void %97(ptr noundef nonnull align 8 dereferenceable(8) %94, ptr noundef nonnull align 8 dereferenceable(96) %14)
          to label %98 unwind label %107

98:                                               ; preds = %90
  %99 = call noundef zeroext i1 @_ZNK12CppBenchmark8Settings8infiniteEv(ptr noundef nonnull align 8 dereferenceable(121) %20) #7
  %100 = zext i1 %99 to i8
  %101 = call noundef i64 @_ZNK12CppBenchmark8Settings8durationEv(ptr noundef nonnull align 8 dereferenceable(121) %20) #7
  %102 = call noundef i64 @_ZNK12CppBenchmark8Settings10operationsEv(ptr noundef nonnull align 8 dereferenceable(121) %20) #7
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %15) #7
  call void @_ZN12CppBenchmark7BarrierC1Ei(ptr noundef nonnull align 8 dereferenceable(100) %15, i32 noundef %68) #7
  %103 = load ptr, ptr %24, align 8, !tbaa !44
  call void @_ZN12CppBenchmark9PhaseCore22StartCollectingMetricsEv(ptr noundef nonnull align 8 dereferenceable(944) %103) #7
  %104 = load ptr, ptr %25, align 8, !tbaa !50
  call void @_ZN12CppBenchmark12PhaseMetrics13AddOperationsEl(ptr noundef nonnull align 8 dereferenceable(412) %104, i64 noundef 1) #7
  br i1 %69, label %.lr.ph, label %.preheader

.preheader:                                       ; preds = %110, %98
  br i1 %70, label %.lr.ph56, label %._crit_edge

105:                                              ; preds = %73
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %151

107:                                              ; preds = %90, %81
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %150

.lr.ph:                                           ; preds = %98, %110
  %.04454 = phi i32 [ %111, %110 ], [ 0, %98 ]
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %16) #7
  store ptr %0, ptr %16, align 8, !tbaa !51
  store ptr %15, ptr %27, align 8, !tbaa !53
  store ptr %14, ptr %28, align 8, !tbaa !53
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 8 dereferenceable(24) %.sroa.0, i64 24, i1 false)
  store i8 %84, ptr %30, align 8, !tbaa !54
  store i32 %61, ptr %31, align 4, !tbaa !55
  store i8 %100, ptr %32, align 8, !tbaa !56
  store i64 %102, ptr %33, align 8, !tbaa !57
  store i64 %101, ptr %34, align 8, !tbaa !58
  store i32 %.04454, ptr %35, align 8, !tbaa !59
  %109 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS4_15LauncherHandlerEE3$_0EEERS0_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(84) %16)
          to label %110 unwind label %112

110:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %16) #7
  %111 = add nuw nsw i32 %.04454, 1
  %exitcond.not = icmp eq i32 %111, %61
  br i1 %exitcond.not, label %.preheader, label %.lr.ph, !llvm.loop !60

112:                                              ; preds = %.lr.ph
  %113 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %16) #7
  br label %149

._crit_edge:                                      ; preds = %118, %.preheader
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  %114 = call ptr @_ZNSt6vectorISt6threadSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  store ptr %114, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #7
  %115 = call ptr @_ZNSt6vectorISt6threadSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  store ptr %115, ptr %19, align 8
  %116 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  br i1 %116, label %.lr.ph58, label %._crit_edge59

.lr.ph56:                                         ; preds = %.preheader, %118
  %.04355 = phi i32 [ %119, %118 ], [ 0, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %17) #7
  store ptr %0, ptr %17, align 8, !tbaa !61
  store ptr %15, ptr %36, align 8, !tbaa !53
  store ptr %14, ptr %37, align 8, !tbaa !53
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 8 dereferenceable(24) %.sroa.0, i64 24, i1 false)
  store i8 %84, ptr %39, align 8, !tbaa !63
  store i32 %63, ptr %40, align 4, !tbaa !64
  store i32 %.04355, ptr %41, align 8, !tbaa !65
  %117 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS4_15LauncherHandlerEE3$_1EEERS0_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(60) %17)
          to label %118 unwind label %120

118:                                              ; preds = %.lr.ph56
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #7
  %119 = add nuw nsw i32 %.04355, 1
  %exitcond71.not = icmp eq i32 %119, %63
  br i1 %exitcond71.not, label %._crit_edge, label %.lr.ph56, !llvm.loop !66

120:                                              ; preds = %.lr.ph56
  %121 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #7
  br label %149

._crit_edge59:                                    ; preds = %131, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  call void @_ZNSt6vectorISt6threadSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  %122 = load ptr, ptr %24, align 8, !tbaa !44
  call void @_ZN12CppBenchmark9PhaseCore21StopCollectingMetricsEv(ptr noundef nonnull align 8 dereferenceable(944) %122) #7
  %123 = load ptr, ptr %0, align 8, !tbaa !42
  %124 = getelementptr i8, ptr %123, i64 -24
  %125 = load i64, ptr %124, align 8
  %126 = getelementptr inbounds i8, ptr %0, i64 %125
  %127 = load ptr, ptr %126, align 8, !tbaa !42
  %128 = getelementptr inbounds i8, ptr %127, i64 24
  %129 = load ptr, ptr %128, align 8
  invoke void %129(ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef nonnull align 8 dereferenceable(96) %14)
          to label %136 unwind label %147

.lr.ph58:                                         ; preds = %._crit_edge, %131
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %130)
          to label %131 unwind label %134

131:                                              ; preds = %.lr.ph58
  %132 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  %133 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  br i1 %133, label %.lr.ph58, label %._crit_edge59

134:                                              ; preds = %.lr.ph58
  %135 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  br label %149

136:                                              ; preds = %._crit_edge59
  %137 = load i32, ptr %1, align 4, !tbaa !39
  %138 = load ptr, ptr %3, align 8, !tbaa !42
  %139 = getelementptr inbounds i8, ptr %138, i64 24
  %140 = load ptr, ptr %139, align 8
  invoke void %140(ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %137, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef nonnull align 8 dereferenceable(56) %14, i32 noundef %.067)
          to label %141 unwind label %147

141:                                              ; preds = %136
  %142 = load ptr, ptr %24, align 8, !tbaa !44
  invoke void @_ZN12CppBenchmark9PhaseCore12MergeMetricsEv(ptr noundef nonnull align 8 dereferenceable(944) %142)
          to label %143 unwind label %147

143:                                              ; preds = %141
  %144 = load ptr, ptr %24, align 8, !tbaa !44
  call void @_ZN12CppBenchmark9PhaseCore12ResetMetricsEv(ptr noundef nonnull align 8 dereferenceable(944) %144) #7
  call void @_ZN12CppBenchmark7BarrierD2Ev(ptr noundef nonnull align 8 dereferenceable(100) %15) #7
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %.sroa.0)
  call void @_ZN12CppBenchmark9ContextPCD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %14) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %14) #7
  %145 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  %146 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  br i1 %146, label %73, label %._crit_edge62

147:                                              ; preds = %141, %136, %._crit_edge59
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %149

149:                                              ; preds = %147, %134, %120, %112
  %.pn = phi { ptr, i32 } [ %113, %112 ], [ %121, %120 ], [ %135, %134 ], [ %148, %147 ]
  call void @_ZN12CppBenchmark7BarrierD2Ev(ptr noundef nonnull align 8 dereferenceable(100) %15) #7
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %15) #7
  br label %150

150:                                              ; preds = %149, %107
  %.pn.pn = phi { ptr, i32 } [ %.pn, %149 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %.sroa.0)
  br label %151

151:                                              ; preds = %150, %105
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %150 ], [ %106, %105 ]
  call void @_ZN12CppBenchmark9ContextPCD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %14) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  resume { ptr, i32 } %.pn.pn.pn
}

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt5tupleIJiiEESaIS1_EE12emplace_backIJiiEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorISt5tupleIJiiiEESaIS1_EE12emplace_backIJiiiEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorISt5tupleIJiiEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm0EJiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm1EJiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt6vectorISt5tupleIJiiiEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm0EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm1EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3getILm2EJiiiEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS4_(ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9ContextPCC2Eiiiii(ptr noundef nonnull align 8 dereferenceable(96), i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #0 align 2

declare void @_ZN12CppBenchmark13BenchmarkBase20InitBenchmarkContextERNS_7ContextE(ptr noundef nonnull align 8 dereferenceable(200), ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #4

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK12CppBenchmark8Settings7latencyEv(ptr noundef nonnull align 8 dereferenceable(121)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK12CppBenchmark8Settings12latency_autoEv(ptr noundef nonnull align 8 dereferenceable(121)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK12CppBenchmark8Settings8infiniteEv(ptr noundef nonnull align 8 dereferenceable(121)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK12CppBenchmark8Settings8durationEv(ptr noundef nonnull align 8 dereferenceable(121)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK12CppBenchmark8Settings10operationsEv(ptr noundef nonnull align 8 dereferenceable(121)) local_unnamed_addr #0 align 2

; Function Attrs: nounwind
declare void @_ZN12CppBenchmark7BarrierC1Ei(ptr noundef nonnull align 8 dereferenceable(100), i32 noundef) unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9PhaseCore22StartCollectingMetricsEv(ptr noundef nonnull align 8 dereferenceable(944)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark12PhaseMetrics13AddOperationsEl(ptr noundef nonnull align 8 dereferenceable(412), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS4_15LauncherHandlerEE3$_0EEERS0_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(84)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS4_15LauncherHandlerEE3$_1EEERS0_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(60)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorISt6threadSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorISt6threadSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

declare void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorISt6threadSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9PhaseCore21StopCollectingMetricsEv(ptr noundef nonnull align 8 dereferenceable(944)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN12CppBenchmark9PhaseCore12MergeMetricsEv(ptr noundef nonnull align 8 dereferenceable(944)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9PhaseCore12ResetMetricsEv(ptr noundef nonnull align 8 dereferenceable(944)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark7BarrierD2Ev(ptr noundef nonnull align 8 dereferenceable(100)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12CppBenchmark9ContextPCD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiiEESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt5tupleIJiiEESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

declare void @_ZN12CppBenchmark13BenchmarkBase22UpdateBenchmarkThreadsERSt6vectorISt10shared_ptrINS_9PhaseCoreEESaIS4_EE(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

declare void @_ZN12CppBenchmark13BenchmarkBase20UpdateBenchmarkNamesERSt6vectorISt10shared_ptrINS_9PhaseCoreEESaIS4_EE(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 = { 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 8}
!6 = !{!"_ZTSN12CppBenchmark13BenchmarkBaseE", !7, i64 8, !10, i64 16, !14, i64 48, !35, i64 176}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !11, i64 0, !13, i64 8, !8, i64 16}
!11 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !12, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"long", !8, i64 0}
!14 = !{!"_ZTSN12CppBenchmark8SettingsE", !15, i64 0, !7, i64 4, !13, i64 8, !13, i64 16, !16, i64 24, !20, i64 48, !24, i64 72, !28, i64 96, !7, i64 120}
!15 = !{!"int", !8, i64 0}
!16 = !{!"_ZTSSt6vectorIiSaIiEE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!20 = !{!"_ZTSSt6vectorISt5tupleIJiiEESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseISt5tupleIJiiEESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseISt5tupleIJiiEESaIS1_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseISt5tupleIJiiEESaIS1_EE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!24 = !{!"_ZTSSt6vectorISt5tupleIJiiiEESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseISt5tupleIJiiiEESaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseISt5tupleIJiiiEESaIS1_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseISt5tupleIJiiiEESaIS1_EE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!28 = !{!"_ZTSSt5tupleIJlliEE", !29, i64 0}
!29 = !{!"_ZTSSt11_Tuple_implILm0EJlliEE", !30, i64 0, !34, i64 16}
!30 = !{!"_ZTSSt11_Tuple_implILm1EJliEE", !31, i64 0, !33, i64 8}
!31 = !{!"_ZTSSt11_Tuple_implILm2EJiEE", !32, i64 0}
!32 = !{!"_ZTSSt10_Head_baseILm2EiLb0EE", !15, i64 0}
!33 = !{!"_ZTSSt10_Head_baseILm1ElLb0EE", !13, i64 0}
!34 = !{!"_ZTSSt10_Head_baseILm0ElLb0EE", !13, i64 0}
!35 = !{!"_ZTSSt6vectorISt10shared_ptrIN12CppBenchmark9PhaseCoreEESaIS3_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseISt10shared_ptrIN12CppBenchmark9PhaseCoreEESaIS3_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrIN12CppBenchmark9PhaseCoreEESaIS3_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrIN12CppBenchmark9PhaseCoreEESaIS3_EE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!39 = !{!15, !15, i64 0}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = !{!43, !43, i64 0}
!43 = !{!"vtable pointer", !9, i64 0}
!44 = !{!45, !12, i64 24}
!45 = !{!"_ZTSN12CppBenchmark7ContextE", !46, i64 0, !15, i64 8, !15, i64 12, !15, i64 16, !12, i64 24, !12, i64 32, !47, i64 40}
!46 = !{!"_ZTSN12CppBenchmark5PhaseE"}
!47 = !{!"_ZTSSt10shared_ptrISt6atomicIbEE", !48, i64 0}
!48 = !{!"_ZTSSt12__shared_ptrISt6atomicIbELN9__gnu_cxx12_Lock_policyE2EE", !12, i64 0, !49, i64 8}
!49 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !12, i64 0}
!50 = !{!45, !12, i64 32}
!51 = !{!52, !12, i64 0}
!52 = !{!"_ZTSZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS_15LauncherHandlerEE3$_0", !12, i64 0, !12, i64 8, !12, i64 16, !28, i64 24, !7, i64 48, !15, i64 52, !7, i64 56, !13, i64 64, !13, i64 72, !15, i64 80}
!53 = !{!12, !12, i64 0}
!54 = !{!52, !7, i64 48}
!55 = !{!52, !15, i64 52}
!56 = !{!52, !7, i64 56}
!57 = !{!52, !13, i64 64}
!58 = !{!52, !13, i64 72}
!59 = !{!52, !15, i64 80}
!60 = distinct !{!60, !41}
!61 = !{!62, !12, i64 0}
!62 = !{!"_ZTSZN12CppBenchmark11BenchmarkPC6LaunchERiiRNS_15LauncherHandlerEE3$_1", !12, i64 0, !12, i64 8, !12, i64 16, !28, i64 24, !7, i64 48, !15, i64 52, !15, i64 56}
!63 = !{!62, !7, i64 48}
!64 = !{!62, !15, i64 52}
!65 = !{!62, !15, i64 56}
!66 = distinct !{!66, !41}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass