; LLVM IR from microsoft/X-Mem :: src/LatencyBenchmark.ll (ZN4xmem16LatencyBenchmark7runCoreEv)

; 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.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<xmem::MemoryWorker *, std::allocator<xmem::MemoryWorker *>>::_Vector_impl" }
%"struct.std::_Vector_base<xmem::MemoryWorker *, std::allocator<xmem::MemoryWorker *>>::_Vector_impl" = type { %"struct.std::_Vector_base<xmem::MemoryWorker *, std::allocator<xmem::MemoryWorker *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<xmem::MemoryWorker *, std::allocator<xmem::MemoryWorker *>>::_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<xmem::Thread *, std::allocator<xmem::Thread *>>::_Vector_impl" }
%"struct.std::_Vector_base<xmem::Thread *, std::allocator<xmem::Thread *>>::_Vector_impl" = type { %"struct.std::_Vector_base<xmem::Thread *, std::allocator<xmem::Thread *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<xmem::Thread *, std::allocator<xmem::Thread *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.xmem::Benchmark" = type <{ ptr, ptr, i64, i32, i32, i32, i32, i32, i32, i32, i32, %"class.std::vector", %"class.std::vector.3", %"class.std::vector.8", double, double, double, double, double, double, double, double, double, %"class.std::__cxx11::basic_string", %"class.std::vector.8", %"class.std::vector.8", %"class.std::__cxx11::basic_string", i8, i8, i8, [5 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<xmem::PowerReader *, std::allocator<xmem::PowerReader *>>::_Vector_impl" }
%"struct.std::_Vector_base<xmem::PowerReader *, std::allocator<xmem::PowerReader *>>::_Vector_impl" = type { %"struct.std::_Vector_base<xmem::PowerReader *, std::allocator<xmem::PowerReader *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<xmem::PowerReader *, std::allocator<xmem::PowerReader *>>::_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<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"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.xmem::LatencyBenchmark" = type { %"class.xmem::Benchmark.base", %"class.std::vector.8", double }
%"class.xmem::Benchmark.base" = type <{ ptr, ptr, i64, i32, i32, i32, i32, i32, i32, i32, i32, %"class.std::vector", %"class.std::vector.3", %"class.std::vector.8", double, double, double, double, double, double, double, double, double, %"class.std::__cxx11::basic_string", %"class.std::vector.8", %"class.std::vector.8", %"class.std::__cxx11::basic_string", i8, i8, i8 }>

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@_ZSt4cerr = external global %"class.std::basic_ostream", align 8
@.str.43 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [36 x i8], align 1
@_ZN4xmem9g_verboseE = external global i8, align 1
@.str.47 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [55 x i8], align 1
@_ZN4xmem13g_ns_per_tickE = external global float, align 4
@.str.56 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [51 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4xmem16LatencyBenchmark7runCoreEv(ptr noundef nonnull align 8 dereferenceable(352) %0) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca i1, align 1
  %3 = alloca ptr, align 8
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::vector.13", align 8
  %14 = alloca %"class.std::vector.3", align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i8, align 1
  %28 = alloca i32, align 4
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i32, align 4
  %37 = alloca double, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  %41 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #8
  %42 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 2
  %43 = load i64, ptr %42, align 8, !tbaa !9
  %44 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %45 = load i32, ptr %44, align 4, !tbaa !32
  %46 = zext i32 %45 to i64
  %47 = udiv i64 %43, %46
  store i64 %47, ptr %4, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  store ptr @_ZN4xmem13chasePointersEPmPS0_m, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  store ptr @_ZN4xmem19dummy_chasePointersEPmPS0_m, ptr %6, align 8, !tbaa !5
  %48 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 1
  %49 = load ptr, ptr %48, align 8, !tbaa !34
  %50 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 1
  %51 = load ptr, ptr %50, align 8, !tbaa !34
  %52 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 2
  %53 = load i64, ptr %52, align 8, !tbaa !9
  %54 = getelementptr inbounds i8, ptr %51, i64 %53
  %55 = call noundef i32 @_ZN4xmem26forwSequentialWrite_Word32EPvS0_(ptr noundef %49, ptr noundef %54)
  %56 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 1
  %57 = load ptr, ptr %56, align 8, !tbaa !34
  %58 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 1
  %59 = load ptr, ptr %58, align 8, !tbaa !34
  %60 = load i64, ptr %4, align 8, !tbaa !33
  %61 = getelementptr inbounds i8, ptr %59, i64 %60
  %62 = call noundef zeroext i1 @_ZN4xmem32build_random_pointer_permutationEPvS0_NS_12chunk_size_tE(ptr noundef %57, ptr noundef %61, i32 noundef 1)
  br i1 %62, label %66, label %63

63:                                               ; preds = %1
  %64 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.43)
  %65 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i1 false, ptr %2, align 1
  store i32 1, ptr %7, align 4
  br label %871

66:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  store ptr null, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  store ptr null, ptr %11, align 8, !tbaa !5
  %67 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %68 = load i32, ptr %67, align 4, !tbaa !32
  %69 = icmp ugt i32 %68, 1
  br i1 %69, label %70, label %140

70:                                               ; preds = %66
  %71 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 7
  %72 = load i32, ptr %71, align 8, !tbaa !35
  %73 = icmp eq i32 %72, 0
  br i1 %73, label %74, label %86

74:                                               ; preds = %70
  %75 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 8
  %76 = load i32, ptr %75, align 4, !tbaa !36
  %77 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 9
  %78 = load i32, ptr %77, align 8, !tbaa !37
  %79 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 10
  %80 = load i32, ptr %79, align 4, !tbaa !38
  %81 = call noundef zeroext i1 @_ZN4xmem27determine_sequential_kernelENS_9rw_mode_tENS_12chunk_size_tEiPPFiPvS2_ES5_(i32 noundef %76, i32 noundef %78, i32 noundef %80, ptr noundef %8, ptr noundef %9)
  br i1 %81, label %85, label %82

82:                                               ; preds = %74
  %83 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.44)
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %83, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i1 false, ptr %2, align 1
  store i32 1, ptr %7, align 4
  br label %870

85:                                               ; preds = %74
  br label %139

86:                                               ; preds = %70
  %87 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 7
  %88 = load i32, ptr %87, align 8, !tbaa !35
  %89 = icmp eq i32 %88, 1
  br i1 %89, label %90, label %135

90:                                               ; preds = %86
  %91 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 8
  %92 = load i32, ptr %91, align 4, !tbaa !36
  %93 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 9
  %94 = load i32, ptr %93, align 8, !tbaa !37
  %95 = call noundef zeroext i1 @_ZN4xmem23determine_random_kernelENS_9rw_mode_tENS_12chunk_size_tEPPFiPmPS2_mES6_(i32 noundef %92, i32 noundef %94, ptr noundef %10, ptr noundef %11)
  br i1 %95, label %99, label %96

96:                                               ; preds = %90
  %97 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.44)
  %98 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i1 false, ptr %2, align 1
  store i32 1, ptr %7, align 4
  br label %870

99:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  store i32 1, ptr %12, align 4, !tbaa !39
  br label %100

100:                                              ; preds = %129, %99
  %101 = load i32, ptr %12, align 4, !tbaa !39
  %102 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %103 = load i32, ptr %102, align 4, !tbaa !32
  %104 = icmp ult i32 %101, %103
  br i1 %104, label %106, label %105

105:                                              ; preds = %100
  store i32 2, ptr %7, align 4
  br label %132

106:                                              ; preds = %100
  %107 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 1
  %108 = load ptr, ptr %107, align 8, !tbaa !34
  %109 = load i32, ptr %12, align 4, !tbaa !39
  %110 = zext i32 %109 to i64
  %111 = load i64, ptr %4, align 8, !tbaa !33
  %112 = mul i64 %110, %111
  %113 = getelementptr inbounds i8, ptr %108, i64 %112
  %114 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 1
  %115 = load ptr, ptr %114, align 8, !tbaa !34
  %116 = load i32, ptr %12, align 4, !tbaa !39
  %117 = add i32 %116, 1
  %118 = zext i32 %117 to i64
  %119 = load i64, ptr %4, align 8, !tbaa !33
  %120 = mul i64 %118, %119
  %121 = getelementptr inbounds i8, ptr %115, i64 %120
  %122 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 9
  %123 = load i32, ptr %122, align 8, !tbaa !37
  %124 = call noundef zeroext i1 @_ZN4xmem32build_random_pointer_permutationEPvS0_NS_12chunk_size_tE(ptr noundef %113, ptr noundef %121, i32 noundef %123)
  br i1 %124, label %128, label %125

125:                                              ; preds = %106
  %126 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.45)
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i1 false, ptr %2, align 1
  store i32 1, ptr %7, align 4
  br label %132

128:                                              ; preds = %106
  br label %129

129:                                              ; preds = %128
  %130 = load i32, ptr %12, align 4, !tbaa !39
  %131 = add i32 %130, 1
  store i32 %131, ptr %12, align 4, !tbaa !39
  br label %100, !llvm.loop !40

132:                                              ; preds = %125, %105
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  %133 = load i32, ptr %7, align 4
  switch i32 %133, label %870 [
    i32 2, label %134
  ]

134:                                              ; preds = %132
  br label %138

135:                                              ; preds = %86
  %136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.46)
  %137 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %136, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i1 false, ptr %2, align 1
  store i32 1, ptr %7, align 4
  br label %870

138:                                              ; preds = %134
  br label %139

139:                                              ; preds = %138, %85
  br label %140

140:                                              ; preds = %139, %66
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #8
  call void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #8
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  %141 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %142 = trunc i8 %141 to i1
  br i1 %142, label %143, label %150

143:                                              ; preds = %140
  %144 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.47)
          to label %145 unwind label %146

145:                                              ; preds = %143
  br label %150

146:                                              ; preds = %841, %837, %835, %829, %827, %824, %822, %816, %813, %811, %182, %180, %178, %171, %169, %163, %161, %158, %156, %150, %143
  %147 = landingpad { ptr, i32 }
          cleanup
  %148 = extractvalue { ptr, i32 } %147, 0
  store ptr %148, ptr %15, align 8
  %149 = extractvalue { ptr, i32 } %147, 1
  store i32 %149, ptr %16, align 4
  br label %869

150:                                              ; preds = %145, %140
  %151 = invoke noundef zeroext i1 @_ZN4xmem9Benchmark17startPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315) %41)
          to label %152 unwind label %146

152:                                              ; preds = %150
  br i1 %151, label %166, label %153

153:                                              ; preds = %152
  %154 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %155 = trunc i8 %154 to i1
  br i1 %155, label %156, label %161

156:                                              ; preds = %153
  %157 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.48)
          to label %158 unwind label %146

158:                                              ; preds = %156
  %159 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %157, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %160 unwind label %146

160:                                              ; preds = %158
  br label %161

161:                                              ; preds = %160, %153
  %162 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.49)
          to label %163 unwind label %146

163:                                              ; preds = %161
  %164 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %162, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %165 unwind label %146

165:                                              ; preds = %163
  br label %175

166:                                              ; preds = %152
  %167 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %168 = trunc i8 %167 to i1
  br i1 %168, label %169, label %174

169:                                              ; preds = %166
  %170 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.50)
          to label %171 unwind label %146

171:                                              ; preds = %169
  %172 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %170, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %173 unwind label %146

173:                                              ; preds = %171
  br label %174

174:                                              ; preds = %173, %166
  br label %175

175:                                              ; preds = %174, %165
  %176 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %177 = trunc i8 %176 to i1
  br i1 %177, label %178, label %185

178:                                              ; preds = %175
  %179 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.51)
          to label %180 unwind label %146

180:                                              ; preds = %178
  %181 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %179, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %182 unwind label %146

182:                                              ; preds = %180
  %183 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %181, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %184 unwind label %146

184:                                              ; preds = %182
  br label %185

185:                                              ; preds = %184, %175
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  store i32 0, ptr %17, align 4, !tbaa !39
  br label %186

186:                                              ; preds = %798, %185
  %187 = load i32, ptr %17, align 4, !tbaa !39
  %188 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 3
  %189 = load i32, ptr %188, align 8, !tbaa !45
  %190 = icmp ult i32 %187, %189
  br i1 %190, label %192, label %191

191:                                              ; preds = %186
  store i32 5, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  br label %808

192:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  store i32 0, ptr %18, align 4, !tbaa !39
  br label %193

193:                                              ; preds = %316, %192
  %194 = load i32, ptr %18, align 4, !tbaa !39
  %195 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %196 = load i32, ptr %195, align 4, !tbaa !32
  %197 = icmp ult i32 %194, %196
  br i1 %197, label %199, label %198

198:                                              ; preds = %193
  store i32 8, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %329

199:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %200 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 1
  %201 = load ptr, ptr %200, align 8, !tbaa !34
  %202 = load i32, ptr %18, align 4, !tbaa !39
  %203 = zext i32 %202 to i64
  %204 = load i64, ptr %4, align 8, !tbaa !33
  %205 = mul i64 %203, %204
  %206 = getelementptr inbounds i8, ptr %201, i64 %205
  store ptr %206, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  %207 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 6
  %208 = load i32, ptr %207, align 4, !tbaa !46
  %209 = load i32, ptr %18, align 4, !tbaa !39
  %210 = invoke noundef i32 @_ZN4xmem19cpu_id_in_numa_nodeEjj(i32 noundef %208, i32 noundef %209)
          to label %211 unwind label %228

211:                                              ; preds = %199
  store i32 %210, ptr %20, align 4, !tbaa !39
  %212 = load i32, ptr %20, align 4, !tbaa !39
  %213 = icmp slt i32 %212, 0
  br i1 %213, label %214, label %232

214:                                              ; preds = %211
  %215 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.52)
          to label %216 unwind label %228

216:                                              ; preds = %214
  %217 = load i32, ptr %18, align 4, !tbaa !39
  %218 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %215, i32 noundef %217)
          to label %219 unwind label %228

219:                                              ; preds = %216
  %220 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %218, ptr noundef @.str.53)
          to label %221 unwind label %228

221:                                              ; preds = %219
  %222 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 6
  %223 = load i32, ptr %222, align 4, !tbaa !46
  %224 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %220, i32 noundef %223)
          to label %225 unwind label %228

225:                                              ; preds = %221
  %226 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %224, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %227 unwind label %228

227:                                              ; preds = %225
  br label %232

228:                                              ; preds = %302, %300, %225, %221, %219, %216, %214, %199
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %15, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %16, align 4
  br label %328

232:                                              ; preds = %227, %211
  %233 = load i32, ptr %18, align 4, !tbaa !39
  %234 = icmp eq i32 %233, 0
  br i1 %234, label %235, label %254

235:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %236 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 128) #9
          to label %237 unwind label %245

237:                                              ; preds = %235
  %238 = load ptr, ptr %19, align 8, !tbaa !5
  %239 = load i64, ptr %4, align 8, !tbaa !33
  %240 = load ptr, ptr %5, align 8, !tbaa !5
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = load i32, ptr %20, align 4, !tbaa !39
  invoke void @_ZN4xmem13LatencyWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(128) %236, ptr noundef %238, i64 noundef %239, ptr noundef %240, ptr noundef %241, i32 noundef %242)
          to label %243 unwind label %249

243:                                              ; preds = %237
  store ptr %236, ptr %21, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %244 unwind label %245

244:                                              ; preds = %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %307

245:                                              ; preds = %243, %235
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %15, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %16, align 4
  br label %253

249:                                              ; preds = %237
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %15, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %236, i64 noundef 128) #10
  br label %253

253:                                              ; preds = %249, %245
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %328

254:                                              ; preds = %232
  %255 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 7
  %256 = load i32, ptr %255, align 8, !tbaa !35
  %257 = icmp eq i32 %256, 0
  br i1 %257, label %258, label %277

258:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %259 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 144) #9
          to label %260 unwind label %268

260:                                              ; preds = %258
  %261 = load ptr, ptr %19, align 8, !tbaa !5
  %262 = load i64, ptr %4, align 8, !tbaa !33
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  %264 = load ptr, ptr %9, align 8, !tbaa !5
  %265 = load i32, ptr %20, align 4, !tbaa !39
  invoke void @_ZN4xmem10LoadWorkerC1EPvmPFiS1_S1_ES3_i(ptr noundef nonnull align 8 dereferenceable(144) %259, ptr noundef %261, i64 noundef %262, ptr noundef %263, ptr noundef %264, i32 noundef %265)
          to label %266 unwind label %272

266:                                              ; preds = %260
  store ptr %259, ptr %22, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %267 unwind label %268

267:                                              ; preds = %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %306

268:                                              ; preds = %266, %258
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %15, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %16, align 4
  br label %276

272:                                              ; preds = %260
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %15, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %259, i64 noundef 144) #10
  br label %276

276:                                              ; preds = %272, %268
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %328

277:                                              ; preds = %254
  %278 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 7
  %279 = load i32, ptr %278, align 8, !tbaa !35
  %280 = icmp eq i32 %279, 1
  br i1 %280, label %281, label %300

281:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %282 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 144) #9
          to label %283 unwind label %291

283:                                              ; preds = %281
  %284 = load ptr, ptr %19, align 8, !tbaa !5
  %285 = load i64, ptr %4, align 8, !tbaa !33
  %286 = load ptr, ptr %10, align 8, !tbaa !5
  %287 = load ptr, ptr %11, align 8, !tbaa !5
  %288 = load i32, ptr %20, align 4, !tbaa !39
  invoke void @_ZN4xmem10LoadWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(144) %282, ptr noundef %284, i64 noundef %285, ptr noundef %286, ptr noundef %287, i32 noundef %288)
          to label %289 unwind label %295

289:                                              ; preds = %283
  store ptr %282, ptr %23, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %290 unwind label %291

290:                                              ; preds = %289
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %305

291:                                              ; preds = %289, %281
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %15, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %16, align 4
  br label %299

295:                                              ; preds = %283
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %15, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %282, i64 noundef 144) #10
  br label %299

299:                                              ; preds = %295, %291
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %328

300:                                              ; preds = %277
  %301 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.54)
          to label %302 unwind label %228

302:                                              ; preds = %300
  %303 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %301, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %304 unwind label %228

304:                                              ; preds = %302
  br label %305

305:                                              ; preds = %304, %290
  br label %306

306:                                              ; preds = %305, %267
  br label %307

307:                                              ; preds = %306, %244
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %308 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 32) #9
          to label %309 unwind label %319

309:                                              ; preds = %307
  %310 = load i32, ptr %18, align 4, !tbaa !39
  %311 = zext i32 %310 to i64
  %312 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %311) #8
  %313 = load ptr, ptr %312, align 8, !tbaa !5
  invoke void @_ZN4xmem6ThreadC1EPNS_8RunnableE(ptr noundef nonnull align 8 dereferenceable(32) %308, ptr noundef %313)
          to label %314 unwind label %323

314:                                              ; preds = %309
  store ptr %308, ptr %24, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %315 unwind label %319

315:                                              ; preds = %314
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %316

316:                                              ; preds = %315
  %317 = load i32, ptr %18, align 4, !tbaa !39
  %318 = add i32 %317, 1
  store i32 %318, ptr %18, align 4, !tbaa !39
  br label %193, !llvm.loop !47

319:                                              ; preds = %314, %307
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %15, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %16, align 4
  br label %327

323:                                              ; preds = %309
  %324 = landingpad { ptr, i32 }
          cleanup
  %325 = extractvalue { ptr, i32 } %324, 0
  store ptr %325, ptr %15, align 8
  %326 = extractvalue { ptr, i32 } %324, 1
  store i32 %326, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %308, i64 noundef 32) #10
  br label %327

327:                                              ; preds = %323, %319
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %328

328:                                              ; preds = %327, %299, %276, %253, %228
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %807

329:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  store i32 0, ptr %25, align 4, !tbaa !39
  br label %330

330:                                              ; preds = %343, %329
  %331 = load i32, ptr %25, align 4, !tbaa !39
  %332 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %333 = load i32, ptr %332, align 4, !tbaa !32
  %334 = icmp ult i32 %331, %333
  br i1 %334, label %336, label %335

335:                                              ; preds = %330
  store i32 11, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %350

336:                                              ; preds = %330
  %337 = load i32, ptr %25, align 4, !tbaa !39
  %338 = zext i32 %337 to i64
  %339 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %338) #8
  %340 = load ptr, ptr %339, align 8, !tbaa !5
  %341 = invoke noundef zeroext i1 @_ZN4xmem6Thread16create_and_startEv(ptr noundef nonnull align 8 dereferenceable(32) %340)
          to label %342 unwind label %346

342:                                              ; preds = %336
  br label %343

343:                                              ; preds = %342
  %344 = load i32, ptr %25, align 4, !tbaa !39
  %345 = add i32 %344, 1
  store i32 %345, ptr %25, align 4, !tbaa !39
  br label %330, !llvm.loop !48

346:                                              ; preds = %336
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %15, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %807

350:                                              ; preds = %335
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  store i32 0, ptr %26, align 4, !tbaa !39
  br label %351

351:                                              ; preds = %374, %350
  %352 = load i32, ptr %26, align 4, !tbaa !39
  %353 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %354 = load i32, ptr %353, align 4, !tbaa !32
  %355 = icmp ult i32 %352, %354
  br i1 %355, label %357, label %356

356:                                              ; preds = %351
  store i32 14, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  br label %377

357:                                              ; preds = %351
  %358 = load i32, ptr %26, align 4, !tbaa !39
  %359 = zext i32 %358 to i64
  %360 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %359) #8
  %361 = load ptr, ptr %360, align 8, !tbaa !5
  %362 = invoke noundef zeroext i1 @_ZN4xmem6Thread4joinEv(ptr noundef nonnull align 8 dereferenceable(32) %361)
          to label %363 unwind label %369

363:                                              ; preds = %357
  br i1 %362, label %373, label %364

364:                                              ; preds = %363
  %365 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.55)
          to label %366 unwind label %369

366:                                              ; preds = %364
  %367 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %365, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %368 unwind label %369

368:                                              ; preds = %366
  br label %373

369:                                              ; preds = %366, %364, %357
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %15, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  br label %807

373:                                              ; preds = %368, %363
  br label %374

374:                                              ; preds = %373
  %375 = load i32, ptr %26, align 4, !tbaa !39
  %376 = add i32 %375, 1
  store i32 %376, ptr %26, align 4, !tbaa !39
  br label %351, !llvm.loop !49

377:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #8
  store i8 0, ptr %27, align 1, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  %378 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #8
  %379 = load ptr, ptr %378, align 8, !tbaa !5
  %380 = invoke noundef i32 @_ZN4xmem12MemoryWorker9getPassesEv(ptr noundef nonnull align 8 dereferenceable(106) %379)
          to label %381 unwind label %413

381:                                              ; preds = %377
  store i32 %380, ptr %28, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %382 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #8
  %383 = load ptr, ptr %382, align 8, !tbaa !5
  %384 = invoke noundef i64 @_ZN4xmem12MemoryWorker16getAdjustedTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %383)
          to label %385 unwind label %417

385:                                              ; preds = %381
  store i64 %384, ptr %29, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %386 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #8
  %387 = load ptr, ptr %386, align 8, !tbaa !5
  %388 = invoke noundef i64 @_ZN4xmem12MemoryWorker20getElapsedDummyTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %387)
          to label %389 unwind label %421

389:                                              ; preds = %385
  store i64 %388, ptr %30, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %390 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #8
  %391 = load ptr, ptr %390, align 8, !tbaa !5
  %392 = invoke noundef i32 @_ZN4xmem12MemoryWorker15getBytesPerPassEv(ptr noundef nonnull align 8 dereferenceable(106) %391)
          to label %393 unwind label %425

393:                                              ; preds = %389
  store i32 %392, ptr %31, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  %394 = load i32, ptr %31, align 4, !tbaa !39
  %395 = udiv i32 %394, 8
  store i32 %395, ptr %32, align 4, !tbaa !39
  %396 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #8
  %397 = load ptr, ptr %396, align 8, !tbaa !5
  %398 = invoke noundef zeroext i1 @_ZN4xmem12MemoryWorker10hadWarningEv(ptr noundef nonnull align 8 dereferenceable(106) %397)
          to label %399 unwind label %429

399:                                              ; preds = %393
  %400 = zext i1 %398 to i32
  %401 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %402 = trunc i8 %401 to i1
  %403 = zext i1 %402 to i32
  %404 = or i32 %403, %400
  %405 = icmp ne i32 %404, 0
  %406 = zext i1 %405 to i8
  store i8 %406, ptr %27, align 1, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  store i64 0, ptr %34, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  store i64 0, ptr %35, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  store i32 0, ptr %36, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  store double 0.000000e+00, ptr %37, align 8, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  store i32 1, ptr %38, align 4, !tbaa !39
  br label %407

407:                                              ; preds = %477, %399
  %408 = load i32, ptr %38, align 4, !tbaa !39
  %409 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %410 = load i32, ptr %409, align 4, !tbaa !32
  %411 = icmp ult i32 %408, %410
  br i1 %411, label %433, label %412

412:                                              ; preds = %407
  store i32 17, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %484

413:                                              ; preds = %377
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %15, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %16, align 4
  br label %806

417:                                              ; preds = %381
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %15, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %16, align 4
  br label %805

421:                                              ; preds = %385
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %15, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %16, align 4
  br label %804

425:                                              ; preds = %389
  %426 = landingpad { ptr, i32 }
          cleanup
  %427 = extractvalue { ptr, i32 } %426, 0
  store ptr %427, ptr %15, align 8
  %428 = extractvalue { ptr, i32 } %426, 1
  store i32 %428, ptr %16, align 4
  br label %803

429:                                              ; preds = %393
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %15, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %16, align 4
  br label %802

433:                                              ; preds = %407
  %434 = load i32, ptr %38, align 4, !tbaa !39
  %435 = zext i32 %434 to i64
  %436 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %435) #8
  %437 = load ptr, ptr %436, align 8, !tbaa !5
  %438 = invoke noundef i32 @_ZN4xmem12MemoryWorker9getPassesEv(ptr noundef nonnull align 8 dereferenceable(106) %437)
          to label %439 unwind label %480

439:                                              ; preds = %433
  %440 = load i32, ptr %33, align 4, !tbaa !39
  %441 = add i32 %440, %438
  store i32 %441, ptr %33, align 4, !tbaa !39
  %442 = load i32, ptr %38, align 4, !tbaa !39
  %443 = zext i32 %442 to i64
  %444 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %443) #8
  %445 = load ptr, ptr %444, align 8, !tbaa !5
  %446 = invoke noundef i64 @_ZN4xmem12MemoryWorker16getAdjustedTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %445)
          to label %447 unwind label %480

447:                                              ; preds = %439
  %448 = load i64, ptr %34, align 8, !tbaa !33
  %449 = add i64 %448, %446
  store i64 %449, ptr %34, align 8, !tbaa !33
  %450 = load i32, ptr %38, align 4, !tbaa !39
  %451 = zext i32 %450 to i64
  %452 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %451) #8
  %453 = load ptr, ptr %452, align 8, !tbaa !5
  %454 = invoke noundef i64 @_ZN4xmem12MemoryWorker20getElapsedDummyTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %453)
          to label %455 unwind label %480

455:                                              ; preds = %447
  %456 = load i64, ptr %35, align 8, !tbaa !33
  %457 = add i64 %456, %454
  store i64 %457, ptr %35, align 8, !tbaa !33
  %458 = load i32, ptr %38, align 4, !tbaa !39
  %459 = zext i32 %458 to i64
  %460 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %459) #8
  %461 = load ptr, ptr %460, align 8, !tbaa !5
  %462 = invoke noundef i32 @_ZN4xmem12MemoryWorker15getBytesPerPassEv(ptr noundef nonnull align 8 dereferenceable(106) %461)
          to label %463 unwind label %480

463:                                              ; preds = %455
  store i32 %462, ptr %36, align 4, !tbaa !39
  %464 = load i32, ptr %38, align 4, !tbaa !39
  %465 = zext i32 %464 to i64
  %466 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %465) #8
  %467 = load ptr, ptr %466, align 8, !tbaa !5
  %468 = invoke noundef zeroext i1 @_ZN4xmem12MemoryWorker10hadWarningEv(ptr noundef nonnull align 8 dereferenceable(106) %467)
          to label %469 unwind label %480

469:                                              ; preds = %463
  %470 = zext i1 %468 to i32
  %471 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %472 = trunc i8 %471 to i1
  %473 = zext i1 %472 to i32
  %474 = or i32 %473, %470
  %475 = icmp ne i32 %474, 0
  %476 = zext i1 %475 to i8
  store i8 %476, ptr %27, align 1, !tbaa !42
  br label %477

477:                                              ; preds = %469
  %478 = load i32, ptr %38, align 4, !tbaa !39
  %479 = add i32 %478, 1
  store i32 %479, ptr %38, align 4, !tbaa !39
  br label %407, !llvm.loop !51

480:                                              ; preds = %463, %455, %447, %439, %433
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %15, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %801

484:                                              ; preds = %412
  %485 = load i64, ptr %34, align 8, !tbaa !33
  %486 = uitofp i64 %485 to double
  %487 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %488 = load i32, ptr %487, align 4, !tbaa !32
  %489 = sub i32 %488, 1
  %490 = uitofp i32 %489 to double
  %491 = fdiv double %486, %490
  store double %491, ptr %37, align 8, !tbaa !50
  %492 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %493 = load i32, ptr %492, align 4, !tbaa !32
  %494 = icmp ugt i32 %493, 1
  br i1 %494, label %495, label %512

495:                                              ; preds = %484
  %496 = load i32, ptr %33, align 4, !tbaa !39
  %497 = uitofp i32 %496 to double
  %498 = load i32, ptr %36, align 4, !tbaa !39
  %499 = uitofp i32 %498 to double
  %500 = fmul double %497, %499
  %501 = fdiv double %500, 0x4130000000000000
  %502 = load double, ptr %37, align 8, !tbaa !50
  %503 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %504 = fpext float %503 to double
  %505 = fmul double %502, %504
  %506 = fdiv double %505, 1.000000e+09
  %507 = fdiv double %501, %506
  %508 = getelementptr inbounds %"class.xmem::LatencyBenchmark", ptr %41, i32 0, i32 1
  %509 = load i32, ptr %17, align 4, !tbaa !39
  %510 = zext i32 %509 to i64
  %511 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %508, i64 noundef %510) #8
  store double %507, ptr %511, align 8, !tbaa !50
  br label %512

512:                                              ; preds = %495, %484
  %513 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %514 = trunc i8 %513 to i1
  br i1 %514, label %515, label %517

515:                                              ; preds = %512
  %516 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 29
  store i8 1, ptr %516, align 2, !tbaa !54
  br label %517

517:                                              ; preds = %515, %512
  %518 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %519 = trunc i8 %518 to i1
  br i1 %519, label %520, label %755

520:                                              ; preds = %517
  %521 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.56)
          to label %522 unwind label %544

522:                                              ; preds = %520
  %523 = load i32, ptr %17, align 4, !tbaa !39
  %524 = add i32 %523, 1
  %525 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %521, i32 noundef %524)
          to label %526 unwind label %544

526:                                              ; preds = %522
  %527 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %525, ptr noundef @.str.57)
          to label %528 unwind label %544

528:                                              ; preds = %526
  %529 = load i32, ptr %28, align 4, !tbaa !39
  %530 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %527, i32 noundef %529)
          to label %531 unwind label %544

531:                                              ; preds = %528
  %532 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %530, ptr noundef @.str.58)
          to label %533 unwind label %544

533:                                              ; preds = %531
  %534 = load i32, ptr %32, align 4, !tbaa !39
  %535 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %532, i32 noundef %534)
          to label %536 unwind label %544

536:                                              ; preds = %533
  %537 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %535, ptr noundef @.str.59)
          to label %538 unwind label %544

538:                                              ; preds = %536
  %539 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %540 = trunc i8 %539 to i1
  br i1 %540, label %541, label %548

541:                                              ; preds = %538
  %542 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.60)
          to label %543 unwind label %544

543:                                              ; preds = %541
  br label %548

544:                                              ; preds = %751, %748, %743, %735, %733, %725, %723, %718, %716, %714, %711, %706, %700, %698, %692, %690, %685, %683, %681, %678, %673, %670, %668, %665, %663, %658, %656, %654, %651, %646, %643, %641, %638, %636, %632, %630, %624, %621, %616, %608, %606, %598, %596, %594, %591, %586, %580, %578, %572, %570, %568, %565, %560, %557, %555, %552, %550, %548, %541, %536, %533, %531, %528, %526, %522, %520
  %545 = landingpad { ptr, i32 }
          cleanup
  %546 = extractvalue { ptr, i32 } %545, 0
  store ptr %546, ptr %15, align 8
  %547 = extractvalue { ptr, i32 } %545, 1
  store i32 %547, ptr %16, align 4
  br label %801

548:                                              ; preds = %543, %538
  %549 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %550 unwind label %544

550:                                              ; preds = %548
  %551 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.61)
          to label %552 unwind label %544

552:                                              ; preds = %550
  %553 = load i64, ptr %29, align 8, !tbaa !33
  %554 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %551, i64 noundef %553)
          to label %555 unwind label %544

555:                                              ; preds = %552
  %556 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %554, ptr noundef @.str.62)
          to label %557 unwind label %544

557:                                              ; preds = %555
  %558 = load i64, ptr %30, align 8, !tbaa !33
  %559 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %556, i64 noundef %558)
          to label %560 unwind label %544

560:                                              ; preds = %557
  %561 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %559, ptr noundef @.str.63)
          to label %562 unwind label %544

562:                                              ; preds = %560
  %563 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %564 = trunc i8 %563 to i1
  br i1 %564, label %565, label %568

565:                                              ; preds = %562
  %566 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.60)
          to label %567 unwind label %544

567:                                              ; preds = %565
  br label %568

568:                                              ; preds = %567, %562
  %569 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %570 unwind label %544

570:                                              ; preds = %568
  %571 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.64)
          to label %572 unwind label %544

572:                                              ; preds = %570
  %573 = load i64, ptr %29, align 8, !tbaa !33
  %574 = uitofp i64 %573 to float
  %575 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %576 = fmul float %574, %575
  %577 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %571, float noundef %576)
          to label %578 unwind label %544

578:                                              ; preds = %572
  %579 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %577, ptr noundef @.str.62)
          to label %580 unwind label %544

580:                                              ; preds = %578
  %581 = load i64, ptr %30, align 8, !tbaa !33
  %582 = uitofp i64 %581 to float
  %583 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %584 = fmul float %582, %583
  %585 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %579, float noundef %584)
          to label %586 unwind label %544

586:                                              ; preds = %580
  %587 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %585, ptr noundef @.str.63)
          to label %588 unwind label %544

588:                                              ; preds = %586
  %589 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %590 = trunc i8 %589 to i1
  br i1 %590, label %591, label %594

591:                                              ; preds = %588
  %592 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.60)
          to label %593 unwind label %544

593:                                              ; preds = %591
  br label %594

594:                                              ; preds = %593, %588
  %595 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %596 unwind label %544

596:                                              ; preds = %594
  %597 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.65)
          to label %598 unwind label %544

598:                                              ; preds = %596
  %599 = load i64, ptr %29, align 8, !tbaa !33
  %600 = uitofp i64 %599 to float
  %601 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %602 = fmul float %600, %601
  %603 = fpext float %602 to double
  %604 = fdiv double %603, 1.000000e+09
  %605 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %597, double noundef %604)
          to label %606 unwind label %544

606:                                              ; preds = %598
  %607 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %605, ptr noundef @.str.62)
          to label %608 unwind label %544

608:                                              ; preds = %606
  %609 = load i64, ptr %30, align 8, !tbaa !33
  %610 = uitofp i64 %609 to float
  %611 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %612 = fmul float %610, %611
  %613 = fpext float %612 to double
  %614 = fdiv double %613, 1.000000e+09
  %615 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %607, double noundef %614)
          to label %616 unwind label %544

616:                                              ; preds = %608
  %617 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %615, ptr noundef @.str.63)
          to label %618 unwind label %544

618:                                              ; preds = %616
  %619 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %620 = trunc i8 %619 to i1
  br i1 %620, label %621, label %624

621:                                              ; preds = %618
  %622 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.60)
          to label %623 unwind label %544

623:                                              ; preds = %621
  br label %624

624:                                              ; preds = %623, %618
  %625 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %626 unwind label %544

626:                                              ; preds = %624
  %627 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %628 = load i32, ptr %627, align 4, !tbaa !32
  %629 = icmp ugt i32 %628, 1
  br i1 %629, label %630, label %754

630:                                              ; preds = %626
  %631 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.56)
          to label %632 unwind label %544

632:                                              ; preds = %630
  %633 = load i32, ptr %17, align 4, !tbaa !39
  %634 = add i32 %633, 1
  %635 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %631, i32 noundef %634)
          to label %636 unwind label %544

636:                                              ; preds = %632
  %637 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %635, ptr noundef @.str.57)
          to label %638 unwind label %544

638:                                              ; preds = %636
  %639 = load i32, ptr %33, align 4, !tbaa !39
  %640 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %637, i32 noundef %639)
          to label %641 unwind label %544

641:                                              ; preds = %638
  %642 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %640, ptr noundef @.str.66)
          to label %643 unwind label %544

643:                                              ; preds = %641
  %644 = load i32, ptr %36, align 4, !tbaa !39
  %645 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %642, i32 noundef %644)
          to label %646 unwind label %544

646:                                              ; preds = %643
  %647 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %645, ptr noundef @.str.67)
          to label %648 unwind label %544

648:                                              ; preds = %646
  %649 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %650 = trunc i8 %649 to i1
  br i1 %650, label %651, label %654

651:                                              ; preds = %648
  %652 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.60)
          to label %653 unwind label %544

653:                                              ; preds = %651
  br label %654

654:                                              ; preds = %653, %648
  %655 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %656 unwind label %544

656:                                              ; preds = %654
  %657 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.68)
          to label %658 unwind label %544

658:                                              ; preds = %656
  %659 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %660 = load i32, ptr %659, align 4, !tbaa !32
  %661 = sub i32 %660, 1
  %662 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %657, i32 noundef %661)
          to label %663 unwind label %544

663:                                              ; preds = %658
  %664 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %662, ptr noundef @.str.69)
          to label %665 unwind label %544

665:                                              ; preds = %663
  %666 = load i64, ptr %34, align 8, !tbaa !33
  %667 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %664, i64 noundef %666)
          to label %668 unwind label %544

668:                                              ; preds = %665
  %669 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %667, ptr noundef @.str.62)
          to label %670 unwind label %544

670:                                              ; preds = %668
  %671 = load i64, ptr %35, align 8, !tbaa !33
  %672 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %669, i64 noundef %671)
          to label %673 unwind label %544

673:                                              ; preds = %670
  %674 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %672, ptr noundef @.str.63)
          to label %675 unwind label %544

675:                                              ; preds = %673
  %676 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %677 = trunc i8 %676 to i1
  br i1 %677, label %678, label %681

678:                                              ; preds = %675
  %679 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.60)
          to label %680 unwind label %544

680:                                              ; preds = %678
  br label %681

681:                                              ; preds = %680, %675
  %682 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %683 unwind label %544

683:                                              ; preds = %681
  %684 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.70)
          to label %685 unwind label %544

685:                                              ; preds = %683
  %686 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %687 = load i32, ptr %686, align 4, !tbaa !32
  %688 = sub i32 %687, 1
  %689 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %684, i32 noundef %688)
          to label %690 unwind label %544

690:                                              ; preds = %685
  %691 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %689, ptr noundef @.str.69)
          to label %692 unwind label %544

692:                                              ; preds = %690
  %693 = load i64, ptr %34, align 8, !tbaa !33
  %694 = uitofp i64 %693 to float
  %695 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %696 = fmul float %694, %695
  %697 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %691, float noundef %696)
          to label %698 unwind label %544

698:                                              ; preds = %692
  %699 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %697, ptr noundef @.str.62)
          to label %700 unwind label %544

700:                                              ; preds = %698
  %701 = load i64, ptr %35, align 8, !tbaa !33
  %702 = uitofp i64 %701 to float
  %703 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %704 = fmul float %702, %703
  %705 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %699, float noundef %704)
          to label %706 unwind label %544

706:                                              ; preds = %700
  %707 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %705, ptr noundef @.str.63)
          to label %708 unwind label %544

708:                                              ; preds = %706
  %709 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %710 = trunc i8 %709 to i1
  br i1 %710, label %711, label %714

711:                                              ; preds = %708
  %712 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.60)
          to label %713 unwind label %544

713:                                              ; preds = %711
  br label %714

714:                                              ; preds = %713, %708
  %715 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %716 unwind label %544

716:                                              ; preds = %714
  %717 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.71)
          to label %718 unwind label %544

718:                                              ; preds = %716
  %719 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %720 = load i32, ptr %719, align 4, !tbaa !32
  %721 = sub i32 %720, 1
  %722 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %717, i32 noundef %721)
          to label %723 unwind label %544

723:                                              ; preds = %718
  %724 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %722, ptr noundef @.str.69)
          to label %725 unwind label %544

725:                                              ; preds = %723
  %726 = load i64, ptr %34, align 8, !tbaa !33
  %727 = uitofp i64 %726 to float
  %728 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %729 = fmul float %727, %728
  %730 = fpext float %729 to double
  %731 = fdiv double %730, 1.000000e+09
  %732 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %724, double noundef %731)
          to label %733 unwind label %544

733:                                              ; preds = %725
  %734 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %732, ptr noundef @.str.62)
          to label %735 unwind label %544

735:                                              ; preds = %733
  %736 = load i64, ptr %35, align 8, !tbaa !33
  %737 = uitofp i64 %736 to float
  %738 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %739 = fmul float %737, %738
  %740 = fpext float %739 to double
  %741 = fdiv double %740, 1.000000e+09
  %742 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %734, double noundef %741)
          to label %743 unwind label %544

743:                                              ; preds = %735
  %744 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %742, ptr noundef @.str.63)
          to label %745 unwind label %544

745:                                              ; preds = %743
  %746 = load i8, ptr %27, align 1, !tbaa !42, !range !43, !noundef !44
  %747 = trunc i8 %746 to i1
  br i1 %747, label %748, label %751

748:                                              ; preds = %745
  %749 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.60)
          to label %750 unwind label %544

750:                                              ; preds = %748
  br label %751

751:                                              ; preds = %750, %745
  %752 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %753 unwind label %544

753:                                              ; preds = %751
  br label %754

754:                                              ; preds = %753, %626
  br label %755

755:                                              ; preds = %754, %517
  %756 = load i64, ptr %29, align 8, !tbaa !33
  %757 = uitofp i64 %756 to float
  %758 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %759 = fmul float %757, %758
  %760 = fpext float %759 to double
  %761 = load i32, ptr %32, align 4, !tbaa !39
  %762 = load i32, ptr %28, align 4, !tbaa !39
  %763 = mul i32 %761, %762
  %764 = uitofp i32 %763 to double
  %765 = fdiv double %760, %764
  %766 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 13
  %767 = load i32, ptr %17, align 4, !tbaa !39
  %768 = zext i32 %767 to i64
  %769 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %766, i64 noundef %768) #8
  store double %765, ptr %769, align 8, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  store i32 0, ptr %39, align 4, !tbaa !39
  br label %770

770:                                              ; preds = %794, %755
  %771 = load i32, ptr %39, align 4, !tbaa !39
  %772 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 4
  %773 = load i32, ptr %772, align 4, !tbaa !32
  %774 = icmp ult i32 %771, %773
  br i1 %774, label %776, label %775

775:                                              ; preds = %770
  store i32 20, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %797

776:                                              ; preds = %770
  %777 = load i32, ptr %39, align 4, !tbaa !39
  %778 = zext i32 %777 to i64
  %779 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %778) #8
  %780 = load ptr, ptr %779, align 8, !tbaa !5
  %781 = icmp eq ptr %780, null
  br i1 %781, label %783, label %782

782:                                              ; preds = %776
  call void @_ZN4xmem6ThreadD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %780) #8
  call void @_ZdlPvm(ptr noundef %780, i64 noundef 32) #10
  br label %783

783:                                              ; preds = %782, %776
  %784 = load i32, ptr %39, align 4, !tbaa !39
  %785 = zext i32 %784 to i64
  %786 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %785) #8
  %787 = load ptr, ptr %786, align 8, !tbaa !5
  %788 = icmp eq ptr %787, null
  br i1 %788, label %793, label %789

789:                                              ; preds = %783
  %790 = load ptr, ptr %787, align 8, !tbaa !55
  %791 = getelementptr inbounds ptr, ptr %790, i64 2
  %792 = load ptr, ptr %791, align 8
  call void %792(ptr noundef nonnull align 8 dereferenceable(106) %787) #8
  br label %793

793:                                              ; preds = %789, %783
  br label %794

794:                                              ; preds = %793
  %795 = load i32, ptr %39, align 4, !tbaa !39
  %796 = add i32 %795, 1
  store i32 %796, ptr %39, align 4, !tbaa !39
  br label %770, !llvm.loop !57

797:                                              ; preds = %775
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  call void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #8
  br label %798

798:                                              ; preds = %797
  %799 = load i32, ptr %17, align 4, !tbaa !39
  %800 = add i32 %799, 1
  store i32 %800, ptr %17, align 4, !tbaa !39
  br label %186, !llvm.loop !58

801:                                              ; preds = %544, %480
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %802

802:                                              ; preds = %801, %429
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  br label %803

803:                                              ; preds = %802, %425
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  br label %804

804:                                              ; preds = %803, %421
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %805

805:                                              ; preds = %804, %417
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %806

806:                                              ; preds = %805, %413
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #8
  br label %807

807:                                              ; preds = %806, %369, %346, %328
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  br label %869

808:                                              ; preds = %191
  %809 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %810 = trunc i8 %809 to i1
  br i1 %810, label %811, label %816

811:                                              ; preds = %808
  %812 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %813 unwind label %146

813:                                              ; preds = %811
  %814 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.72)
          to label %815 unwind label %146

815:                                              ; preds = %813
  br label %816

816:                                              ; preds = %815, %808
  %817 = invoke noundef zeroext i1 @_ZN4xmem9Benchmark16stopPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315) %41)
          to label %818 unwind label %146

818:                                              ; preds = %816
  br i1 %817, label %832, label %819

819:                                              ; preds = %818
  %820 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %821 = trunc i8 %820 to i1
  br i1 %821, label %822, label %827

822:                                              ; preds = %819
  %823 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.48)
          to label %824 unwind label %146

824:                                              ; preds = %822
  %825 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %823, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %826 unwind label %146

826:                                              ; preds = %824
  br label %827

827:                                              ; preds = %826, %819
  %828 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.73)
          to label %829 unwind label %146

829:                                              ; preds = %827
  %830 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %828, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %831 unwind label %146

831:                                              ; preds = %829
  br label %841

832:                                              ; preds = %818
  %833 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %834 = trunc i8 %833 to i1
  br i1 %834, label %835, label %840

835:                                              ; preds = %832
  %836 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.50)
          to label %837 unwind label %146

837:                                              ; preds = %835
  %838 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %836, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %839 unwind label %146

839:                                              ; preds = %837
  br label %840

840:                                              ; preds = %839, %832
  br label %841

841:                                              ; preds = %840, %831
  %842 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 28
  store i8 1, ptr %842, align 1, !tbaa !59
  invoke void @_ZN4xmem9Benchmark14computeMetricsEv(ptr noundef nonnull align 8 dereferenceable(315) %41)
          to label %843 unwind label %146

843:                                              ; preds = %841
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  store i32 0, ptr %40, align 4, !tbaa !39
  br label %844

844:                                              ; preds = %859, %843
  %845 = load i32, ptr %40, align 4, !tbaa !39
  %846 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 3
  %847 = load i32, ptr %846, align 8, !tbaa !45
  %848 = icmp ult i32 %845, %847
  br i1 %848, label %850, label %849

849:                                              ; preds = %844
  store i32 23, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %862

850:                                              ; preds = %844
  %851 = getelementptr inbounds %"class.xmem::LatencyBenchmark", ptr %41, i32 0, i32 1
  %852 = load i32, ptr %40, align 4, !tbaa !39
  %853 = zext i32 %852 to i64
  %854 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %851, i64 noundef %853) #8
  %855 = load double, ptr %854, align 8, !tbaa !50
  %856 = getelementptr inbounds %"class.xmem::LatencyBenchmark", ptr %41, i32 0, i32 2
  %857 = load double, ptr %856, align 8, !tbaa !60
  %858 = fadd double %857, %855
  store double %858, ptr %856, align 8, !tbaa !60
  br label %859

859:                                              ; preds = %850
  %860 = load i32, ptr %40, align 4, !tbaa !39
  %861 = add i32 %860, 1
  store i32 %861, ptr %40, align 4, !tbaa !39
  br label %844, !llvm.loop !62

862:                                              ; preds = %849
  %863 = getelementptr inbounds %"class.xmem::Benchmark", ptr %41, i32 0, i32 3
  %864 = load i32, ptr %863, align 8, !tbaa !45
  %865 = uitofp i32 %864 to double
  %866 = getelementptr inbounds %"class.xmem::LatencyBenchmark", ptr %41, i32 0, i32 2
  %867 = load double, ptr %866, align 8, !tbaa !60
  %868 = fdiv double %867, %865
  store double %868, ptr %866, align 8, !tbaa !60
  store i1 true, ptr %2, align 1
  store i32 1, ptr %7, align 4
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #8
  call void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #8
  br label %870

869:                                              ; preds = %807, %146
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #8
  call void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  br label %873

870:                                              ; preds = %862, %135, %132, %96, %82
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  br label %871

871:                                              ; preds = %870, %63
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  %872 = load i1, ptr %2, align 1
  ret i1 %872

873:                                              ; preds = %869
  %874 = load ptr, ptr %15, align 8
  %875 = load i32, ptr %16, align 4
  %876 = insertvalue { ptr, i32 } poison, ptr %874, 0
  %877 = insertvalue { ptr, i32 } %876, i32 %875, 1
  resume { ptr, i32 } %877
}

declare noundef i32 @_ZN4xmem13chasePointersEPmPS0_m(ptr noundef, ptr noundef, i64 noundef) #3

declare noundef i32 @_ZN4xmem19dummy_chasePointersEPmPS0_m(ptr noundef, ptr noundef, i64 noundef) #3

declare noundef i32 @_ZN4xmem26forwSequentialWrite_Word32EPvS0_(ptr noundef, ptr noundef) #3

declare noundef zeroext i1 @_ZN4xmem32build_random_pointer_permutationEPvS0_NS_12chunk_size_tE(ptr noundef, ptr noundef, i32 noundef) #3

declare noundef zeroext i1 @_ZN4xmem27determine_sequential_kernelENS_9rw_mode_tENS_12chunk_size_tEiPPFiPvS2_ES5_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #3

declare noundef zeroext i1 @_ZN4xmem23determine_random_kernelENS_9rw_mode_tENS_12chunk_size_tEPPFiPmPS2_mES6_(i32 noundef, i32 noundef, ptr noundef, ptr noundef) #3

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

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

declare noundef zeroext i1 @_ZN4xmem9Benchmark17startPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315)) #3

declare noundef i32 @_ZN4xmem19cpu_id_in_numa_nodeEjj(i32 noundef, i32 noundef) #3

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #5

declare void @_ZN4xmem13LatencyWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #6

declare void @_ZN4xmem10LoadWorkerC1EPvmPFiS1_S1_ES3_i(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #3

declare void @_ZN4xmem10LoadWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #3

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

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

declare void @_ZN4xmem6ThreadC1EPNS_8RunnableE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) unnamed_addr #3

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

declare noundef zeroext i1 @_ZN4xmem6Thread16create_and_startEv(ptr noundef nonnull align 8 dereferenceable(32)) #3

declare noundef zeroext i1 @_ZN4xmem6Thread4joinEv(ptr noundef nonnull align 8 dereferenceable(32)) #3

declare noundef i32 @_ZN4xmem12MemoryWorker9getPassesEv(ptr noundef nonnull align 8 dereferenceable(106)) #3

declare noundef i64 @_ZN4xmem12MemoryWorker16getAdjustedTicksEv(ptr noundef nonnull align 8 dereferenceable(106)) #3

declare noundef i64 @_ZN4xmem12MemoryWorker20getElapsedDummyTicksEv(ptr noundef nonnull align 8 dereferenceable(106)) #3

declare noundef i32 @_ZN4xmem12MemoryWorker15getBytesPerPassEv(ptr noundef nonnull align 8 dereferenceable(106)) #3

declare noundef zeroext i1 @_ZN4xmem12MemoryWorker10hadWarningEv(ptr noundef nonnull align 8 dereferenceable(106)) #3

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8), float noundef) #2 align 2

; Function Attrs: nounwind
declare void @_ZN4xmem6ThreadD1Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #7

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

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

declare noundef zeroext i1 @_ZN4xmem9Benchmark16stopPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315)) #3

declare void @_ZN4xmem9Benchmark14computeMetricsEv(ptr noundef nonnull align 8 dereferenceable(315)) #3

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nobuiltin allocsize(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 #6 = { nobuiltin 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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { builtin 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, !11, i64 16}
!10 = !{!"_ZTSN4xmem9BenchmarkE", !6, i64 8, !11, i64 16, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !13, i64 40, !14, i64 44, !15, i64 48, !12, i64 52, !16, i64 56, !20, i64 80, !24, i64 104, !28, i64 128, !28, i64 136, !28, i64 144, !28, i64 152, !28, i64 160, !28, i64 168, !28, i64 176, !28, i64 184, !28, i64 192, !29, i64 200, !24, i64 232, !24, i64 256, !29, i64 280, !31, i64 312, !31, i64 313, !31, i64 314}
!11 = !{!"long", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTSN4xmem14pattern_mode_tE", !7, i64 0}
!14 = !{!"_ZTSN4xmem9rw_mode_tE", !7, i64 0}
!15 = !{!"_ZTSN4xmem12chunk_size_tE", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIPN4xmem11PowerReaderESaIS2_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIPN4xmem11PowerReaderESaIS2_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIPN4xmem11PowerReaderESaIS2_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIPN4xmem11PowerReaderESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"_ZTSSt6vectorIPN4xmem6ThreadESaIS2_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIPN4xmem6ThreadESaIS2_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIPN4xmem6ThreadESaIS2_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIPN4xmem6ThreadESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSSt6vectorIdSaIdEE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!"double", !7, i64 0}
!29 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !30, i64 0, !11, i64 8, !7, i64 16}
!30 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!31 = !{!"bool", !7, i64 0}
!32 = !{!10, !12, i64 28}
!33 = !{!11, !11, i64 0}
!34 = !{!10, !6, i64 8}
!35 = !{!10, !13, i64 40}
!36 = !{!10, !14, i64 44}
!37 = !{!10, !15, i64 48}
!38 = !{!10, !12, i64 52}
!39 = !{!12, !12, i64 0}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = !{!31, !31, i64 0}
!43 = !{i8 0, i8 2}
!44 = !{}
!45 = !{!10, !12, i64 24}
!46 = !{!10, !12, i64 36}
!47 = distinct !{!47, !41}
!48 = distinct !{!48, !41}
!49 = distinct !{!49, !41}
!50 = !{!28, !28, i64 0}
!51 = distinct !{!51, !41}
!52 = !{!53, !53, i64 0}
!53 = !{!"float", !7, i64 0}
!54 = !{!10, !31, i64 314}
!55 = !{!56, !56, i64 0}
!56 = !{!"vtable pointer", !8, i64 0}
!57 = distinct !{!57, !41}
!58 = distinct !{!58, !41}
!59 = !{!10, !31, i64 313}
!60 = !{!61, !28, i64 344}
!61 = !{!"_ZTSN4xmem16LatencyBenchmarkE", !10, i64 0, !24, i64 320, !28, i64 344}
!62 = distinct !{!62, !41}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<xmem::MemoryWorker *, std::allocator<xmem::MemoryWorker *>>::_Vector_impl" }
%"struct.std::_Vector_base<xmem::MemoryWorker *, std::allocator<xmem::MemoryWorker *>>::_Vector_impl" = type { %"struct.std::_Vector_base<xmem::MemoryWorker *, std::allocator<xmem::MemoryWorker *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<xmem::MemoryWorker *, std::allocator<xmem::MemoryWorker *>>::_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<xmem::Thread *, std::allocator<xmem::Thread *>>::_Vector_impl" }
%"struct.std::_Vector_base<xmem::Thread *, std::allocator<xmem::Thread *>>::_Vector_impl" = type { %"struct.std::_Vector_base<xmem::Thread *, std::allocator<xmem::Thread *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<xmem::Thread *, std::allocator<xmem::Thread *>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@_ZSt4cerr = external global %"class.std::basic_ostream", align 8
@.str.43 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [36 x i8], align 1
@_ZN4xmem9g_verboseE = external local_unnamed_addr global i8, align 1
@.str.47 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [55 x i8], align 1
@_ZN4xmem13g_ns_per_tickE = external local_unnamed_addr global float, align 4
@.str.56 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [51 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4xmem16LatencyBenchmark7runCoreEv(ptr noundef nonnull align 8 dereferenceable(352) %0) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca %"class.std::vector.13", align 8
  %7 = alloca %"class.std::vector.3", align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = getelementptr inbounds i8, ptr %0, i64 16
  %13 = load i64, ptr %12, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %0, i64 28
  %15 = load i32, ptr %14, align 4, !tbaa !31
  %16 = zext i32 %15 to i64
  %17 = udiv i64 %13, %16
  %18 = getelementptr inbounds i8, ptr %0, i64 8
  %19 = load ptr, ptr %18, align 8, !tbaa !32
  %20 = getelementptr inbounds i8, ptr %19, i64 %13
  %21 = tail call noundef i32 @_ZN4xmem26forwSequentialWrite_Word32EPvS0_(ptr noundef %19, ptr noundef %20)
  %22 = load ptr, ptr %18, align 8, !tbaa !32
  %23 = getelementptr inbounds i8, ptr %22, i64 %17
  %24 = tail call noundef zeroext i1 @_ZN4xmem32build_random_pointer_permutationEPvS0_NS_12chunk_size_tE(ptr noundef %22, ptr noundef %23, i32 noundef 1)
  br i1 %24, label %28, label %25

25:                                               ; preds = %1
  %26 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.43)
  %27 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %553

28:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #8
  store ptr null, ptr %2, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #8
  store ptr null, ptr %3, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  store ptr null, ptr %4, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  store ptr null, ptr %5, align 8, !tbaa !33
  %29 = load i32, ptr %14, align 4, !tbaa !31
  %30 = icmp ugt i32 %29, 1
  br i1 %30, label %31, label %.critedge

31:                                               ; preds = %28
  %32 = getelementptr inbounds i8, ptr %0, i64 40
  %33 = load i32, ptr %32, align 8, !tbaa !34
  switch i32 %33, label %67 [
    i32 0, label %34
    i32 1, label %45
  ]

34:                                               ; preds = %31
  %35 = getelementptr inbounds i8, ptr %0, i64 44
  %36 = load i32, ptr %35, align 4, !tbaa !35
  %37 = getelementptr inbounds i8, ptr %0, i64 48
  %38 = load i32, ptr %37, align 8, !tbaa !36
  %39 = getelementptr inbounds i8, ptr %0, i64 52
  %40 = load i32, ptr %39, align 4, !tbaa !37
  %41 = call noundef zeroext i1 @_ZN4xmem27determine_sequential_kernelENS_9rw_mode_tENS_12chunk_size_tEiPPFiPvS2_ES5_(i32 noundef %36, i32 noundef %38, i32 noundef %40, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br i1 %41, label %.critedge, label %42

42:                                               ; preds = %34
  %43 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.44)
  %44 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %552

45:                                               ; preds = %31
  %46 = getelementptr inbounds i8, ptr %0, i64 44
  %47 = load i32, ptr %46, align 4, !tbaa !35
  %48 = getelementptr inbounds i8, ptr %0, i64 48
  %49 = load i32, ptr %48, align 8, !tbaa !36
  %50 = call noundef zeroext i1 @_ZN4xmem23determine_random_kernelENS_9rw_mode_tENS_12chunk_size_tEPPFiPmPS2_mES6_(i32 noundef %47, i32 noundef %49, ptr noundef nonnull %4, ptr noundef nonnull %5)
  br i1 %50, label %.preheader152, label %51

51:                                               ; preds = %45
  %52 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.44)
  %53 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %552

.preheader152:                                    ; preds = %45, %56
  %indvars.iv = phi i64 [ %indvars.iv.next, %56 ], [ 1, %45 ]
  %54 = load i32, ptr %14, align 4, !tbaa !31
  %55 = zext i32 %54 to i64
  %.not = icmp ult i64 %indvars.iv, %55
  br i1 %.not, label %56, label %.critedge

56:                                               ; preds = %.preheader152
  %57 = load ptr, ptr %18, align 8, !tbaa !32
  %58 = mul i64 %17, %indvars.iv
  %59 = getelementptr inbounds i8, ptr %57, i64 %58
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %60 = mul i64 %17, %indvars.iv.next
  %61 = getelementptr inbounds i8, ptr %57, i64 %60
  %62 = load i32, ptr %48, align 8, !tbaa !36
  %63 = call noundef zeroext i1 @_ZN4xmem32build_random_pointer_permutationEPvS0_NS_12chunk_size_tE(ptr noundef %59, ptr noundef %61, i32 noundef %62)
  br i1 %63, label %.preheader152, label %64, !llvm.loop !38

64:                                               ; preds = %56
  %65 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.45)
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %552

67:                                               ; preds = %31
  %68 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.46)
  %69 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %552

.critedge:                                        ; preds = %.preheader152, %34, %28
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #8
  call void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #8
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  %70 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %71 = trunc nuw i8 %70 to i1
  br i1 %71, label %72, label %76

72:                                               ; preds = %.critedge
  %73 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.47)
          to label %76 unwind label %74

74:                                               ; preds = %.invoke358, %.invoke357, %.invoke356, %.invoke, %534, %527, %525, %519, %517, %515, %98, %96, %94, %84, %82, %76, %72
  %75 = landingpad { ptr, i32 }
          cleanup
  br label %551

76:                                               ; preds = %72, %.critedge
  %77 = invoke noundef zeroext i1 @_ZN4xmem9Benchmark17startPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315) %0)
          to label %78 unwind label %74

78:                                               ; preds = %76
  %79 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %80 = trunc nuw i8 %79 to i1
  br i1 %77, label %86, label %81

81:                                               ; preds = %78
  br i1 %80, label %82, label %.invoke358

82:                                               ; preds = %81
  %83 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.48)
          to label %84 unwind label %74

84:                                               ; preds = %82
  %85 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %83, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.invoke358 unwind label %74

86:                                               ; preds = %78
  br i1 %80, label %.invoke358, label %91

.invoke358:                                       ; preds = %86, %81, %84
  %87 = phi ptr [ @_ZSt4cerr, %84 ], [ @_ZSt4cerr, %81 ], [ @_ZSt4cout, %86 ]
  %88 = phi ptr [ @.str.49, %84 ], [ @.str.49, %81 ], [ @.str.50, %86 ]
  %89 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef nonnull %88)
          to label %.invoke356 unwind label %74

.invoke356:                                       ; preds = %.invoke358
  %90 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %89, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %91 unwind label %74

91:                                               ; preds = %.invoke356, %86
  %92 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %93 = trunc nuw i8 %92 to i1
  br i1 %93, label %94, label %100

94:                                               ; preds = %91
  %95 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.51)
          to label %96 unwind label %74

96:                                               ; preds = %94
  %97 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %95, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %98 unwind label %74

98:                                               ; preds = %96
  %99 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %100 unwind label %74

100:                                              ; preds = %98, %91
  %101 = getelementptr inbounds i8, ptr %0, i64 24
  %102 = load i32, ptr %101, align 8, !tbaa !43
  %.not210 = icmp eq i32 %102, 0
  br i1 %.not210, label %._crit_edge205, label %.preheader151.lr.ph

.preheader151.lr.ph:                              ; preds = %100
  %103 = getelementptr inbounds i8, ptr %0, i64 36
  %104 = getelementptr inbounds i8, ptr %0, i64 40
  %105 = getelementptr inbounds i8, ptr %0, i64 320
  %106 = getelementptr inbounds i8, ptr %0, i64 314
  %107 = getelementptr inbounds i8, ptr %0, i64 104
  br label %.preheader151

.preheader151:                                    ; preds = %.preheader151.lr.ph, %._crit_edge203
  %indvars.iv288 = phi i64 [ 0, %.preheader151.lr.ph ], [ %indvars.iv.next289, %._crit_edge203 ]
  %108 = load i32, ptr %14, align 4, !tbaa !31
  %.not211 = icmp eq i32 %108, 0
  br i1 %.not211, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader151
  %109 = load ptr, ptr %18, align 8, !tbaa !32
  %110 = load i32, ptr %103, align 4, !tbaa !44
  %111 = invoke noundef i32 @_ZN4xmem19cpu_id_in_numa_nodeEjj(i32 noundef %110, i32 noundef 0)
          to label %112 unwind label %.loopexit.split-lp

112:                                              ; preds = %.lr.ph.preheader
  %113 = icmp slt i32 %111, 0
  br i1 %113, label %114, label %125

114:                                              ; preds = %112
  %115 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.52)
          to label %116 unwind label %.loopexit.split-lp

116:                                              ; preds = %114
  %117 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %115, i32 noundef 0)
          to label %118 unwind label %.loopexit.split-lp

118:                                              ; preds = %116
  %119 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef nonnull @.str.53)
          to label %120 unwind label %.loopexit.split-lp

120:                                              ; preds = %118
  %121 = load i32, ptr %103, align 4, !tbaa !44
  %122 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %119, i32 noundef %121)
          to label %123 unwind label %.loopexit.split-lp

123:                                              ; preds = %120
  %124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %122, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %125 unwind label %.loopexit.split-lp

125:                                              ; preds = %112, %123
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %126 = invoke noalias noundef nonnull dereferenceable(128) ptr @_Znwm(i64 noundef 128) #9
          to label %127 unwind label %160

127:                                              ; preds = %125
  invoke void @_ZN4xmem13LatencyWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(128) %126, ptr noundef %109, i64 noundef %17, ptr noundef nonnull @_ZN4xmem13chasePointersEPmPS0_m, ptr noundef nonnull @_ZN4xmem19dummy_chasePointersEPmPS0_m, i32 noundef %111)
          to label %128 unwind label %161

128:                                              ; preds = %127
  store ptr %126, ptr %8, align 8, !tbaa !33
  invoke void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %129 unwind label %160

129:                                              ; preds = %128
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %130 = invoke noalias noundef nonnull dereferenceable(32) ptr @_Znwm(i64 noundef 32) #9
          to label %131 unwind label %.loopexit.split-lp267

131:                                              ; preds = %129
  %132 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #8
  %133 = load ptr, ptr %132, align 8, !tbaa !33
  invoke void @_ZN4xmem6ThreadC1EPNS_8RunnableE(ptr noundef nonnull align 8 dereferenceable(32) %130, ptr noundef %133)
          to label %134 unwind label %.loopexit.split-lp272

134:                                              ; preds = %131
  store ptr %130, ptr %11, align 8, !tbaa !33
  invoke void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %135 unwind label %.loopexit.split-lp267

135:                                              ; preds = %134
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  %136 = load i32, ptr %14, align 4, !tbaa !31
  %137 = icmp ugt i32 %136, 1
  br i1 %137, label %.lr.ph, label %.preheader150

._crit_edge205:                                   ; preds = %._crit_edge203, %100
  %138 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %139 = trunc nuw i8 %138 to i1
  br i1 %139, label %515, label %519

.preheader150:                                    ; preds = %195, %135
  %140 = phi i32 [ %136, %135 ], [ %196, %195 ]
  %.not212 = icmp eq i32 %140, 0
  br i1 %.not212, label %._crit_edge, label %.lr.ph185

.lr.ph:                                           ; preds = %135, %195
  %indvars.iv229 = phi i64 [ %indvars.iv.next230, %195 ], [ 1, %135 ]
  %141 = load ptr, ptr %18, align 8, !tbaa !32
  %142 = mul i64 %17, %indvars.iv229
  %143 = getelementptr inbounds i8, ptr %141, i64 %142
  %144 = load i32, ptr %103, align 4, !tbaa !44
  %145 = trunc nuw i64 %indvars.iv229 to i32
  %146 = invoke noundef i32 @_ZN4xmem19cpu_id_in_numa_nodeEjj(i32 noundef %144, i32 noundef %145)
          to label %147 unwind label %.loopexit

147:                                              ; preds = %.lr.ph
  %148 = icmp slt i32 %146, 0
  br i1 %148, label %149, label %163

149:                                              ; preds = %147
  %150 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.52)
          to label %151 unwind label %.loopexit

151:                                              ; preds = %149
  %152 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %150, i32 noundef %145)
          to label %153 unwind label %.loopexit

153:                                              ; preds = %151
  %154 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %152, ptr noundef nonnull @.str.53)
          to label %155 unwind label %.loopexit

155:                                              ; preds = %153
  %156 = load i32, ptr %103, align 4, !tbaa !44
  %157 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %154, i32 noundef %156)
          to label %158 unwind label %.loopexit

158:                                              ; preds = %155
  %159 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %157, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %163 unwind label %.loopexit

.loopexit:                                        ; preds = %.lr.ph, %149, %151, %153, %155, %158, %185, %187
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %551

.loopexit.split-lp:                               ; preds = %.lr.ph.preheader, %114, %116, %118, %120, %123
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %551

160:                                              ; preds = %128, %125
  %lpad.loopexit.split-lp258 = landingpad { ptr, i32 }
          cleanup
  br label %162

161:                                              ; preds = %127
  %lpad.loopexit.split-lp264 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %126, i64 noundef 128) #10
  br label %162

162:                                              ; preds = %161, %160
  %.pn141 = phi { ptr, i32 } [ %lpad.loopexit.split-lp258, %160 ], [ %lpad.loopexit.split-lp264, %161 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %551

163:                                              ; preds = %147, %158
  %164 = load i32, ptr %104, align 8, !tbaa !34
  switch i32 %164, label %185 [
    i32 0, label %165
    i32 1, label %175
  ]

165:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %166 = invoke noalias noundef nonnull dereferenceable(144) ptr @_Znwm(i64 noundef 144) #9
          to label %167 unwind label %172

167:                                              ; preds = %165
  %168 = load ptr, ptr %2, align 8, !tbaa !33
  %169 = load ptr, ptr %3, align 8, !tbaa !33
  invoke void @_ZN4xmem10LoadWorkerC1EPvmPFiS1_S1_ES3_i(ptr noundef nonnull align 8 dereferenceable(144) %166, ptr noundef %143, i64 noundef %17, ptr noundef %168, ptr noundef %169, i32 noundef %146)
          to label %170 unwind label %173

170:                                              ; preds = %167
  store ptr %166, ptr %9, align 8, !tbaa !33
  invoke void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %171 unwind label %172

171:                                              ; preds = %170
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br label %189

172:                                              ; preds = %170, %165
  %lpad.loopexit246 = landingpad { ptr, i32 }
          cleanup
  br label %174

173:                                              ; preds = %167
  %lpad.loopexit252 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %166, i64 noundef 144) #10
  br label %174

174:                                              ; preds = %173, %172
  %.pn139 = phi { ptr, i32 } [ %lpad.loopexit246, %172 ], [ %lpad.loopexit252, %173 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br label %551

175:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  %176 = invoke noalias noundef nonnull dereferenceable(144) ptr @_Znwm(i64 noundef 144) #9
          to label %177 unwind label %182

177:                                              ; preds = %175
  %178 = load ptr, ptr %4, align 8, !tbaa !33
  %179 = load ptr, ptr %5, align 8, !tbaa !33
  invoke void @_ZN4xmem10LoadWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(144) %176, ptr noundef %143, i64 noundef %17, ptr noundef %178, ptr noundef %179, i32 noundef %146)
          to label %180 unwind label %183

180:                                              ; preds = %177
  store ptr %176, ptr %10, align 8, !tbaa !33
  invoke void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %181 unwind label %182

181:                                              ; preds = %180
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %189

182:                                              ; preds = %180, %175
  %lpad.loopexit235 = landingpad { ptr, i32 }
          cleanup
  br label %184

183:                                              ; preds = %177
  %lpad.loopexit241 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %176, i64 noundef 144) #10
  br label %184

184:                                              ; preds = %183, %182
  %.pn137 = phi { ptr, i32 } [ %lpad.loopexit235, %182 ], [ %lpad.loopexit241, %183 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %551

185:                                              ; preds = %163
  %186 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.54)
          to label %187 unwind label %.loopexit

187:                                              ; preds = %185
  %188 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %186, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %189 unwind label %.loopexit

189:                                              ; preds = %171, %187, %181
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %190 = invoke noalias noundef nonnull dereferenceable(32) ptr @_Znwm(i64 noundef 32) #9
          to label %191 unwind label %.loopexit266

191:                                              ; preds = %189
  %192 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv229) #8
  %193 = load ptr, ptr %192, align 8, !tbaa !33
  invoke void @_ZN4xmem6ThreadC1EPNS_8RunnableE(ptr noundef nonnull align 8 dereferenceable(32) %190, ptr noundef %193)
          to label %194 unwind label %.loopexit271

194:                                              ; preds = %191
  store ptr %190, ptr %11, align 8, !tbaa !33
  invoke void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %195 unwind label %.loopexit266

195:                                              ; preds = %194
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  %indvars.iv.next230 = add nuw nsw i64 %indvars.iv229, 1
  %196 = load i32, ptr %14, align 4, !tbaa !31
  %197 = zext i32 %196 to i64
  %198 = icmp ult i64 %indvars.iv.next230, %197
  br i1 %198, label %.lr.ph, label %.preheader150, !llvm.loop !45

.loopexit266:                                     ; preds = %189, %194
  %lpad.loopexit268 = landingpad { ptr, i32 }
          cleanup
  br label %200

.loopexit.split-lp267:                            ; preds = %129, %134
  %lpad.loopexit.split-lp269 = landingpad { ptr, i32 }
          cleanup
  br label %200

.loopexit271:                                     ; preds = %191
  %lpad.loopexit274 = landingpad { ptr, i32 }
          cleanup
  br label %199

.loopexit.split-lp272:                            ; preds = %131
  %lpad.loopexit.split-lp275 = landingpad { ptr, i32 }
          cleanup
  br label %199

199:                                              ; preds = %.loopexit.split-lp272, %.loopexit271
  %.lcssa220 = phi ptr [ %190, %.loopexit271 ], [ %130, %.loopexit.split-lp272 ]
  %lpad.phi276 = phi { ptr, i32 } [ %lpad.loopexit274, %.loopexit271 ], [ %lpad.loopexit.split-lp275, %.loopexit.split-lp272 ]
  call void @_ZdlPvm(ptr noundef nonnull %.lcssa220, i64 noundef 32) #10
  br label %200

200:                                              ; preds = %.loopexit266, %.loopexit.split-lp267, %199
  %.pn143 = phi { ptr, i32 } [ %lpad.phi276, %199 ], [ %lpad.loopexit268, %.loopexit266 ], [ %lpad.loopexit.split-lp269, %.loopexit.split-lp267 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br label %551

.preheader149:                                    ; preds = %204
  %.not213 = icmp eq i32 %205, 0
  br i1 %.not213, label %._crit_edge, label %.lr.ph187

.lr.ph185:                                        ; preds = %.preheader150, %204
  %indvars.iv277 = phi i64 [ %indvars.iv.next278, %204 ], [ 0, %.preheader150 ]
  %201 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv277) #8
  %202 = load ptr, ptr %201, align 8, !tbaa !33
  %203 = invoke noundef zeroext i1 @_ZN4xmem6Thread16create_and_startEv(ptr noundef nonnull align 8 dereferenceable(32) %202)
          to label %204 unwind label %208

204:                                              ; preds = %.lr.ph185
  %indvars.iv.next278 = add nuw nsw i64 %indvars.iv277, 1
  %205 = load i32, ptr %14, align 4, !tbaa !31
  %206 = zext i32 %205 to i64
  %207 = icmp ult i64 %indvars.iv.next278, %206
  br i1 %207, label %.lr.ph185, label %.preheader149, !llvm.loop !47

208:                                              ; preds = %.lr.ph185
  %209 = landingpad { ptr, i32 }
          cleanup
  br label %551

._crit_edge:                                      ; preds = %223, %.preheader151, %.preheader150, %.preheader149
  %210 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #8
  %211 = load ptr, ptr %210, align 8, !tbaa !33
  %212 = invoke noundef i32 @_ZN4xmem12MemoryWorker9getPassesEv(ptr noundef nonnull align 8 dereferenceable(106) %211)
          to label %227 unwind label %247

.lr.ph187:                                        ; preds = %.preheader149, %223
  %indvars.iv280 = phi i64 [ %indvars.iv.next281, %223 ], [ 0, %.preheader149 ]
  %213 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv280) #8
  %214 = load ptr, ptr %213, align 8, !tbaa !33
  %215 = invoke noundef zeroext i1 @_ZN4xmem6Thread4joinEv(ptr noundef nonnull align 8 dereferenceable(32) %214)
          to label %216 unwind label %221

216:                                              ; preds = %.lr.ph187
  br i1 %215, label %223, label %217

217:                                              ; preds = %216
  %218 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.55)
          to label %219 unwind label %221

219:                                              ; preds = %217
  %220 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %218, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %223 unwind label %221

221:                                              ; preds = %219, %217, %.lr.ph187
  %222 = landingpad { ptr, i32 }
          cleanup
  br label %551

223:                                              ; preds = %216, %219
  %indvars.iv.next281 = add nuw nsw i64 %indvars.iv280, 1
  %224 = load i32, ptr %14, align 4, !tbaa !31
  %225 = zext i32 %224 to i64
  %226 = icmp ult i64 %indvars.iv.next281, %225
  br i1 %226, label %.lr.ph187, label %._crit_edge, !llvm.loop !48

227:                                              ; preds = %._crit_edge
  %228 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #8
  %229 = load ptr, ptr %228, align 8, !tbaa !33
  %230 = invoke noundef i64 @_ZN4xmem12MemoryWorker16getAdjustedTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %229)
          to label %231 unwind label %249

231:                                              ; preds = %227
  %232 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #8
  %233 = load ptr, ptr %232, align 8, !tbaa !33
  %234 = invoke noundef i64 @_ZN4xmem12MemoryWorker20getElapsedDummyTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %233)
          to label %235 unwind label %251

235:                                              ; preds = %231
  %236 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #8
  %237 = load ptr, ptr %236, align 8, !tbaa !33
  %238 = invoke noundef i32 @_ZN4xmem12MemoryWorker15getBytesPerPassEv(ptr noundef nonnull align 8 dereferenceable(106) %237)
          to label %239 unwind label %253

239:                                              ; preds = %235
  %240 = lshr i32 %238, 3
  %241 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #8
  %242 = load ptr, ptr %241, align 8, !tbaa !33
  %243 = invoke noundef zeroext i1 @_ZN4xmem12MemoryWorker10hadWarningEv(ptr noundef nonnull align 8 dereferenceable(106) %242)
          to label %.preheader148 unwind label %255

.preheader148:                                    ; preds = %239
  %244 = load i32, ptr %14, align 4, !tbaa !31
  %245 = icmp ugt i32 %244, 1
  br i1 %245, label %.lr.ph193, label %._crit_edge194.thread

._crit_edge194.thread:                            ; preds = %.preheader148
  br i1 %243, label %302, label %303

._crit_edge194:                                   ; preds = %279
  %246 = icmp ugt i32 %281, 1
  br i1 %246, label %286, label %301

247:                                              ; preds = %._crit_edge
  %248 = landingpad { ptr, i32 }
          cleanup
  br label %551

249:                                              ; preds = %227
  %250 = landingpad { ptr, i32 }
          cleanup
  br label %551

251:                                              ; preds = %231
  %252 = landingpad { ptr, i32 }
          cleanup
  br label %551

253:                                              ; preds = %235
  %254 = landingpad { ptr, i32 }
          cleanup
  br label %551

255:                                              ; preds = %239
  %256 = landingpad { ptr, i32 }
          cleanup
  br label %551

.lr.ph193:                                        ; preds = %.preheader148, %279
  %indvars.iv283 = phi i64 [ %indvars.iv.next284, %279 ], [ 1, %.preheader148 ]
  %.098191 = phi i64 [ %271, %279 ], [ 0, %.preheader148 ]
  %.099190 = phi i64 [ %266, %279 ], [ 0, %.preheader148 ]
  %.0100189 = phi i32 [ %261, %279 ], [ 0, %.preheader148 ]
  %.0120.in188 = phi i1 [ %280, %279 ], [ %243, %.preheader148 ]
  %257 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv283) #8
  %258 = load ptr, ptr %257, align 8, !tbaa !33
  %259 = invoke noundef i32 @_ZN4xmem12MemoryWorker9getPassesEv(ptr noundef nonnull align 8 dereferenceable(106) %258)
          to label %260 unwind label %284

260:                                              ; preds = %.lr.ph193
  %261 = add i32 %259, %.0100189
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv283) #8
  %263 = load ptr, ptr %262, align 8, !tbaa !33
  %264 = invoke noundef i64 @_ZN4xmem12MemoryWorker16getAdjustedTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %263)
          to label %265 unwind label %284

265:                                              ; preds = %260
  %266 = add i64 %264, %.099190
  %267 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv283) #8
  %268 = load ptr, ptr %267, align 8, !tbaa !33
  %269 = invoke noundef i64 @_ZN4xmem12MemoryWorker20getElapsedDummyTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %268)
          to label %270 unwind label %284

270:                                              ; preds = %265
  %271 = add i64 %269, %.098191
  %272 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv283) #8
  %273 = load ptr, ptr %272, align 8, !tbaa !33
  %274 = invoke noundef i32 @_ZN4xmem12MemoryWorker15getBytesPerPassEv(ptr noundef nonnull align 8 dereferenceable(106) %273)
          to label %275 unwind label %284

275:                                              ; preds = %270
  %276 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv283) #8
  %277 = load ptr, ptr %276, align 8, !tbaa !33
  %278 = invoke noundef zeroext i1 @_ZN4xmem12MemoryWorker10hadWarningEv(ptr noundef nonnull align 8 dereferenceable(106) %277)
          to label %279 unwind label %284

279:                                              ; preds = %275
  %280 = or i1 %.0120.in188, %278
  %indvars.iv.next284 = add nuw nsw i64 %indvars.iv283, 1
  %281 = load i32, ptr %14, align 4, !tbaa !31
  %282 = zext i32 %281 to i64
  %283 = icmp ult i64 %indvars.iv.next284, %282
  br i1 %283, label %.lr.ph193, label %._crit_edge194, !llvm.loop !49

284:                                              ; preds = %275, %270, %265, %260, %.lr.ph193
  %285 = landingpad { ptr, i32 }
          cleanup
  br label %551

286:                                              ; preds = %._crit_edge194
  %287 = uitofp i64 %266 to double
  %288 = add i32 %281, -1
  %289 = uitofp i32 %288 to double
  %290 = fdiv double %287, %289
  %291 = uitofp i32 %261 to double
  %292 = uitofp i32 %274 to double
  %293 = fmul double %291, %292
  %294 = fmul double %293, 0x3EB0000000000000
  %295 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %296 = fpext float %295 to double
  %297 = fmul double %290, %296
  %298 = fdiv double %297, 1.000000e+09
  %299 = fdiv double %294, %298
  %300 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %105, i64 noundef %indvars.iv288) #8
  store double %299, ptr %300, align 8, !tbaa !52
  br i1 %280, label %302, label %303

301:                                              ; preds = %._crit_edge194
  br i1 %280, label %302, label %303

302:                                              ; preds = %286, %._crit_edge194.thread, %301
  %.0100.lcssa306317 = phi i32 [ 0, %._crit_edge194.thread ], [ %261, %301 ], [ %261, %286 ]
  %.099.lcssa307315 = phi i64 [ 0, %._crit_edge194.thread ], [ %266, %301 ], [ %266, %286 ]
  %.098.lcssa308313 = phi i64 [ 0, %._crit_edge194.thread ], [ %271, %301 ], [ %271, %286 ]
  %.097.lcssa309311 = phi i32 [ 0, %._crit_edge194.thread ], [ %274, %301 ], [ %274, %286 ]
  store i8 1, ptr %106, align 2, !tbaa !53
  br label %303

303:                                              ; preds = %286, %._crit_edge194.thread, %302, %301
  %.0120.in.lcssa305318 = phi i1 [ false, %._crit_edge194.thread ], [ true, %302 ], [ false, %301 ], [ false, %286 ]
  %.0100.lcssa306316 = phi i32 [ 0, %._crit_edge194.thread ], [ %.0100.lcssa306317, %302 ], [ %261, %301 ], [ %261, %286 ]
  %.099.lcssa307314 = phi i64 [ 0, %._crit_edge194.thread ], [ %.099.lcssa307315, %302 ], [ %266, %301 ], [ %266, %286 ]
  %.098.lcssa308312 = phi i64 [ 0, %._crit_edge194.thread ], [ %.098.lcssa308313, %302 ], [ %271, %301 ], [ %271, %286 ]
  %.097.lcssa309310 = phi i32 [ 0, %._crit_edge194.thread ], [ %.097.lcssa309311, %302 ], [ %274, %301 ], [ %274, %286 ]
  %304 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %305 = trunc nuw i8 %304 to i1
  br i1 %305, label %306, label %._crit_edge295

._crit_edge295:                                   ; preds = %303
  %.pre296 = uitofp i64 %230 to float
  br label %487

306:                                              ; preds = %303
  %307 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.56)
          to label %308 unwind label %325

308:                                              ; preds = %306
  %309 = trunc i64 %indvars.iv288 to i32
  %310 = add i32 %309, 1
  %311 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %307, i32 noundef %310)
          to label %312 unwind label %325

312:                                              ; preds = %308
  %313 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %311, ptr noundef nonnull @.str.57)
          to label %314 unwind label %325

314:                                              ; preds = %312
  %315 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %313, i32 noundef %212)
          to label %316 unwind label %325

316:                                              ; preds = %314
  %317 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %315, ptr noundef nonnull @.str.58)
          to label %318 unwind label %325

318:                                              ; preds = %316
  %319 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %317, i32 noundef %240)
          to label %320 unwind label %325

320:                                              ; preds = %318
  %321 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %319, ptr noundef nonnull @.str.59)
          to label %322 unwind label %325

322:                                              ; preds = %320
  br i1 %.0120.in.lcssa305318, label %323, label %327

323:                                              ; preds = %322
  %324 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.60)
          to label %327 unwind label %325

325:                                              ; preds = %485, %483, %480, %474, %472, %466, %464, %460, %458, %456, %454, %451, %446, %444, %439, %437, %433, %431, %429, %427, %424, %422, %420, %418, %416, %412, %410, %408, %406, %403, %401, %399, %397, %395, %393, %391, %386, %384, %381, %375, %373, %367, %365, %363, %361, %358, %353, %351, %346, %344, %342, %340, %337, %335, %333, %331, %329, %327, %323, %320, %318, %316, %314, %312, %308, %306
  %326 = landingpad { ptr, i32 }
          cleanup
  br label %551

327:                                              ; preds = %323, %322
  %328 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %329 unwind label %325

329:                                              ; preds = %327
  %330 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.61)
          to label %331 unwind label %325

331:                                              ; preds = %329
  %332 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %330, i64 noundef %230)
          to label %333 unwind label %325

333:                                              ; preds = %331
  %334 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %332, ptr noundef nonnull @.str.62)
          to label %335 unwind label %325

335:                                              ; preds = %333
  %336 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %334, i64 noundef %234)
          to label %337 unwind label %325

337:                                              ; preds = %335
  %338 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %336, ptr noundef nonnull @.str.63)
          to label %339 unwind label %325

339:                                              ; preds = %337
  br i1 %.0120.in.lcssa305318, label %340, label %342

340:                                              ; preds = %339
  %341 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.60)
          to label %342 unwind label %325

342:                                              ; preds = %340, %339
  %343 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %344 unwind label %325

344:                                              ; preds = %342
  %345 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.64)
          to label %346 unwind label %325

346:                                              ; preds = %344
  %347 = uitofp i64 %230 to float
  %348 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %349 = fmul float %348, %347
  %350 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %345, float noundef %349)
          to label %351 unwind label %325

351:                                              ; preds = %346
  %352 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %350, ptr noundef nonnull @.str.62)
          to label %353 unwind label %325

353:                                              ; preds = %351
  %354 = uitofp i64 %234 to float
  %355 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %356 = fmul float %355, %354
  %357 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %352, float noundef %356)
          to label %358 unwind label %325

358:                                              ; preds = %353
  %359 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %357, ptr noundef nonnull @.str.63)
          to label %360 unwind label %325

360:                                              ; preds = %358
  br i1 %.0120.in.lcssa305318, label %361, label %363

361:                                              ; preds = %360
  %362 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.60)
          to label %363 unwind label %325

363:                                              ; preds = %361, %360
  %364 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %365 unwind label %325

365:                                              ; preds = %363
  %366 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.65)
          to label %367 unwind label %325

367:                                              ; preds = %365
  %368 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %369 = fmul float %368, %347
  %370 = fpext float %369 to double
  %371 = fdiv double %370, 1.000000e+09
  %372 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %366, double noundef %371)
          to label %373 unwind label %325

373:                                              ; preds = %367
  %374 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %372, ptr noundef nonnull @.str.62)
          to label %375 unwind label %325

375:                                              ; preds = %373
  %376 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %377 = fmul float %376, %354
  %378 = fpext float %377 to double
  %379 = fdiv double %378, 1.000000e+09
  %380 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %374, double noundef %379)
          to label %381 unwind label %325

381:                                              ; preds = %375
  %382 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %380, ptr noundef nonnull @.str.63)
          to label %383 unwind label %325

383:                                              ; preds = %381
  br i1 %.0120.in.lcssa305318, label %384, label %386

384:                                              ; preds = %383
  %385 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.60)
          to label %386 unwind label %325

386:                                              ; preds = %384, %383
  %387 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %388 unwind label %325

388:                                              ; preds = %386
  %389 = load i32, ptr %14, align 4, !tbaa !31
  %390 = icmp ugt i32 %389, 1
  br i1 %390, label %391, label %487

391:                                              ; preds = %388
  %392 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.56)
          to label %393 unwind label %325

393:                                              ; preds = %391
  %394 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %392, i32 noundef %310)
          to label %395 unwind label %325

395:                                              ; preds = %393
  %396 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %394, ptr noundef nonnull @.str.57)
          to label %397 unwind label %325

397:                                              ; preds = %395
  %398 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %396, i32 noundef %.0100.lcssa306316)
          to label %399 unwind label %325

399:                                              ; preds = %397
  %400 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %398, ptr noundef nonnull @.str.66)
          to label %401 unwind label %325

401:                                              ; preds = %399
  %402 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %400, i32 noundef %.097.lcssa309310)
          to label %403 unwind label %325

403:                                              ; preds = %401
  %404 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %402, ptr noundef nonnull @.str.67)
          to label %405 unwind label %325

405:                                              ; preds = %403
  br i1 %.0120.in.lcssa305318, label %406, label %408

406:                                              ; preds = %405
  %407 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.60)
          to label %408 unwind label %325

408:                                              ; preds = %406, %405
  %409 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %410 unwind label %325

410:                                              ; preds = %408
  %411 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.68)
          to label %412 unwind label %325

412:                                              ; preds = %410
  %413 = load i32, ptr %14, align 4, !tbaa !31
  %414 = add i32 %413, -1
  %415 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %411, i32 noundef %414)
          to label %416 unwind label %325

416:                                              ; preds = %412
  %417 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %415, ptr noundef nonnull @.str.69)
          to label %418 unwind label %325

418:                                              ; preds = %416
  %419 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %417, i64 noundef %.099.lcssa307314)
          to label %420 unwind label %325

420:                                              ; preds = %418
  %421 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %419, ptr noundef nonnull @.str.62)
          to label %422 unwind label %325

422:                                              ; preds = %420
  %423 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %421, i64 noundef %.098.lcssa308312)
          to label %424 unwind label %325

424:                                              ; preds = %422
  %425 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %423, ptr noundef nonnull @.str.63)
          to label %426 unwind label %325

426:                                              ; preds = %424
  br i1 %.0120.in.lcssa305318, label %427, label %429

427:                                              ; preds = %426
  %428 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.60)
          to label %429 unwind label %325

429:                                              ; preds = %427, %426
  %430 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %431 unwind label %325

431:                                              ; preds = %429
  %432 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.70)
          to label %433 unwind label %325

433:                                              ; preds = %431
  %434 = load i32, ptr %14, align 4, !tbaa !31
  %435 = add i32 %434, -1
  %436 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %432, i32 noundef %435)
          to label %437 unwind label %325

437:                                              ; preds = %433
  %438 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %436, ptr noundef nonnull @.str.69)
          to label %439 unwind label %325

439:                                              ; preds = %437
  %440 = uitofp i64 %.099.lcssa307314 to float
  %441 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %442 = fmul float %441, %440
  %443 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %438, float noundef %442)
          to label %444 unwind label %325

444:                                              ; preds = %439
  %445 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %443, ptr noundef nonnull @.str.62)
          to label %446 unwind label %325

446:                                              ; preds = %444
  %447 = uitofp i64 %.098.lcssa308312 to float
  %448 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %449 = fmul float %448, %447
  %450 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %445, float noundef %449)
          to label %451 unwind label %325

451:                                              ; preds = %446
  %452 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %450, ptr noundef nonnull @.str.63)
          to label %453 unwind label %325

453:                                              ; preds = %451
  br i1 %.0120.in.lcssa305318, label %454, label %456

454:                                              ; preds = %453
  %455 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.60)
          to label %456 unwind label %325

456:                                              ; preds = %454, %453
  %457 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %458 unwind label %325

458:                                              ; preds = %456
  %459 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.71)
          to label %460 unwind label %325

460:                                              ; preds = %458
  %461 = load i32, ptr %14, align 4, !tbaa !31
  %462 = add i32 %461, -1
  %463 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %459, i32 noundef %462)
          to label %464 unwind label %325

464:                                              ; preds = %460
  %465 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %463, ptr noundef nonnull @.str.69)
          to label %466 unwind label %325

466:                                              ; preds = %464
  %467 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %468 = fmul float %467, %440
  %469 = fpext float %468 to double
  %470 = fdiv double %469, 1.000000e+09
  %471 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %465, double noundef %470)
          to label %472 unwind label %325

472:                                              ; preds = %466
  %473 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %471, ptr noundef nonnull @.str.62)
          to label %474 unwind label %325

474:                                              ; preds = %472
  %475 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %476 = fmul float %475, %447
  %477 = fpext float %476 to double
  %478 = fdiv double %477, 1.000000e+09
  %479 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %473, double noundef %478)
          to label %480 unwind label %325

480:                                              ; preds = %474
  %481 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %479, ptr noundef nonnull @.str.63)
          to label %482 unwind label %325

482:                                              ; preds = %480
  br i1 %.0120.in.lcssa305318, label %483, label %485

483:                                              ; preds = %482
  %484 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.60)
          to label %485 unwind label %325

485:                                              ; preds = %483, %482
  %486 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %487 unwind label %325

487:                                              ; preds = %._crit_edge295, %388, %485
  %.pre-phi = phi float [ %.pre296, %._crit_edge295 ], [ %347, %388 ], [ %347, %485 ]
  %488 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %489 = fmul float %488, %.pre-phi
  %490 = fpext float %489 to double
  %491 = mul i32 %240, %212
  %492 = uitofp i32 %491 to double
  %493 = fdiv double %490, %492
  %494 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %indvars.iv288) #8
  store double %493, ptr %494, align 8, !tbaa !52
  %495 = load i32, ptr %14, align 4, !tbaa !31
  %.not214 = icmp eq i32 %495, 0
  br i1 %.not214, label %._crit_edge203, label %.lr.ph202

._crit_edge203:                                   ; preds = %511, %487
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  %indvars.iv.next289 = add nuw nsw i64 %indvars.iv288, 1
  %496 = load i32, ptr %101, align 8, !tbaa !43
  %497 = zext i32 %496 to i64
  %498 = icmp ult i64 %indvars.iv.next289, %497
  br i1 %498, label %.preheader151, label %._crit_edge205, !llvm.loop !54

.lr.ph202:                                        ; preds = %487, %511
  %indvars.iv285 = phi i64 [ %indvars.iv.next286, %511 ], [ 0, %487 ]
  %499 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv285) #8
  %500 = load ptr, ptr %499, align 8, !tbaa !33
  %501 = icmp eq ptr %500, null
  br i1 %501, label %503, label %502

502:                                              ; preds = %.lr.ph202
  call void @_ZN4xmem6ThreadD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %500) #8
  call void @_ZdlPvm(ptr noundef nonnull %500, i64 noundef 32) #10
  br label %503

503:                                              ; preds = %502, %.lr.ph202
  %504 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv285) #8
  %505 = load ptr, ptr %504, align 8, !tbaa !33
  %506 = icmp eq ptr %505, null
  br i1 %506, label %511, label %507

507:                                              ; preds = %503
  %508 = load ptr, ptr %505, align 8, !tbaa !55
  %509 = getelementptr inbounds i8, ptr %508, i64 16
  %510 = load ptr, ptr %509, align 8
  call void %510(ptr noundef nonnull align 8 dereferenceable(106) %505) #8
  br label %511

511:                                              ; preds = %503, %507
  %indvars.iv.next286 = add nuw nsw i64 %indvars.iv285, 1
  %512 = load i32, ptr %14, align 4, !tbaa !31
  %513 = zext i32 %512 to i64
  %514 = icmp ult i64 %indvars.iv.next286, %513
  br i1 %514, label %.lr.ph202, label %._crit_edge203, !llvm.loop !57

515:                                              ; preds = %._crit_edge205
  %516 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %517 unwind label %74

517:                                              ; preds = %515
  %518 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.72)
          to label %519 unwind label %74

519:                                              ; preds = %517, %._crit_edge205
  %520 = invoke noundef zeroext i1 @_ZN4xmem9Benchmark16stopPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315) %0)
          to label %521 unwind label %74

521:                                              ; preds = %519
  %522 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %523 = trunc nuw i8 %522 to i1
  br i1 %520, label %529, label %524

524:                                              ; preds = %521
  br i1 %523, label %525, label %.invoke357

525:                                              ; preds = %524
  %526 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.48)
          to label %527 unwind label %74

527:                                              ; preds = %525
  %528 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %526, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.invoke357 unwind label %74

529:                                              ; preds = %521
  br i1 %523, label %.invoke357, label %534

.invoke357:                                       ; preds = %529, %524, %527
  %530 = phi ptr [ @_ZSt4cerr, %527 ], [ @_ZSt4cerr, %524 ], [ @_ZSt4cout, %529 ]
  %531 = phi ptr [ @.str.73, %527 ], [ @.str.73, %524 ], [ @.str.50, %529 ]
  %532 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %530, ptr noundef nonnull %531)
          to label %.invoke unwind label %74

.invoke:                                          ; preds = %.invoke357
  %533 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %532, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %534 unwind label %74

534:                                              ; preds = %.invoke, %529
  %535 = getelementptr inbounds i8, ptr %0, i64 313
  store i8 1, ptr %535, align 1, !tbaa !58
  invoke void @_ZN4xmem9Benchmark14computeMetricsEv(ptr noundef nonnull align 8 dereferenceable(315) %0)
          to label %.preheader unwind label %74

.preheader:                                       ; preds = %534
  %536 = load i32, ptr %101, align 8, !tbaa !43
  %.not215 = icmp eq i32 %536, 0
  br i1 %.not215, label %.preheader.._crit_edge208_crit_edge, label %.lr.ph207

.preheader.._crit_edge208_crit_edge:              ; preds = %.preheader
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 344
  %.pre = load double, ptr %.phi.trans.insert, align 8, !tbaa !59
  br label %._crit_edge208

.lr.ph207:                                        ; preds = %.preheader
  %537 = getelementptr inbounds i8, ptr %0, i64 320
  %538 = getelementptr inbounds i8, ptr %0, i64 344
  br label %543

._crit_edge208.loopexit:                          ; preds = %543
  %539 = uitofp i32 %548 to double
  br label %._crit_edge208

._crit_edge208:                                   ; preds = %.preheader.._crit_edge208_crit_edge, %._crit_edge208.loopexit
  %540 = phi double [ %.pre, %.preheader.._crit_edge208_crit_edge ], [ %547, %._crit_edge208.loopexit ]
  %.lcssa = phi double [ 0.000000e+00, %.preheader.._crit_edge208_crit_edge ], [ %539, %._crit_edge208.loopexit ]
  %541 = getelementptr inbounds i8, ptr %0, i64 344
  %542 = fdiv double %540, %.lcssa
  store double %542, ptr %541, align 8, !tbaa !59
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  call void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #8
  br label %552

543:                                              ; preds = %.lr.ph207, %543
  %indvars.iv291 = phi i64 [ 0, %.lr.ph207 ], [ %indvars.iv.next292, %543 ]
  %544 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %537, i64 noundef %indvars.iv291) #8
  %545 = load double, ptr %544, align 8, !tbaa !52
  %546 = load double, ptr %538, align 8, !tbaa !59
  %547 = fadd double %545, %546
  store double %547, ptr %538, align 8, !tbaa !59
  %indvars.iv.next292 = add nuw nsw i64 %indvars.iv291, 1
  %548 = load i32, ptr %101, align 8, !tbaa !43
  %549 = zext i32 %548 to i64
  %550 = icmp ult i64 %indvars.iv.next292, %549
  br i1 %550, label %543, label %._crit_edge208.loopexit, !llvm.loop !61

551:                                              ; preds = %.loopexit, %.loopexit.split-lp, %208, %221, %200, %184, %174, %162, %249, %253, %284, %325, %255, %251, %247, %74
  %.pn143.pn.pn.pn = phi { ptr, i32 } [ %75, %74 ], [ %209, %208 ], [ %222, %221 ], [ %.pn143, %200 ], [ %.pn141, %162 ], [ %.pn139, %174 ], [ %.pn137, %184 ], [ %248, %247 ], [ %250, %249 ], [ %252, %251 ], [ %254, %253 ], [ %256, %255 ], [ %285, %284 ], [ %326, %325 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  call void @_ZNSt6vectorIPN4xmem12MemoryWorkerESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #8
  resume { ptr, i32 } %.pn143.pn.pn.pn

552:                                              ; preds = %64, %._crit_edge208, %67, %51, %42
  %.1 = phi i1 [ true, %._crit_edge208 ], [ false, %42 ], [ false, %64 ], [ false, %51 ], [ false, %67 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #8
  br label %553

553:                                              ; preds = %552, %25
  %.2 = phi i1 [ %.1, %552 ], [ false, %25 ]
  ret i1 %.2
}

declare noundef i32 @_ZN4xmem13chasePointersEPmPS0_m(ptr noundef, ptr noundef, i64 noundef) #3

declare noundef i32 @_ZN4xmem19dummy_chasePointersEPmPS0_m(ptr noundef, ptr noundef, i64 noundef) #3

declare noundef i32 @_ZN4xmem26forwSequentialWrite_Word32EPvS0_(ptr noundef, ptr noundef) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN4xmem32build_random_pointer_permutationEPvS0_NS_12chunk_size_tE(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN4xmem27determine_sequential_kernelENS_9rw_mode_tENS_12chunk_size_tEiPPFiPvS2_ES5_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN4xmem23determine_random_kernelENS_9rw_mode_tENS_12chunk_size_tEPPFiPmPS2_mES6_(i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

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

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

declare noundef zeroext i1 @_ZN4xmem9Benchmark17startPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315)) local_unnamed_addr #3

declare noundef i32 @_ZN4xmem19cpu_id_in_numa_nodeEjj(i32 noundef, i32 noundef) local_unnamed_addr #3

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #5

declare void @_ZN4xmem13LatencyWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #6

declare void @_ZN4xmem10LoadWorkerC1EPvmPFiS1_S1_ES3_i(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #3

declare void @_ZN4xmem10LoadWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #3

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

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

declare void @_ZN4xmem6ThreadC1EPNS_8RunnableE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) unnamed_addr #3

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

declare noundef zeroext i1 @_ZN4xmem6Thread16create_and_startEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN4xmem6Thread4joinEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

declare noundef i32 @_ZN4xmem12MemoryWorker9getPassesEv(ptr noundef nonnull align 8 dereferenceable(106)) local_unnamed_addr #3

declare noundef i64 @_ZN4xmem12MemoryWorker16getAdjustedTicksEv(ptr noundef nonnull align 8 dereferenceable(106)) local_unnamed_addr #3

declare noundef i64 @_ZN4xmem12MemoryWorker20getElapsedDummyTicksEv(ptr noundef nonnull align 8 dereferenceable(106)) local_unnamed_addr #3

declare noundef i32 @_ZN4xmem12MemoryWorker15getBytesPerPassEv(ptr noundef nonnull align 8 dereferenceable(106)) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN4xmem12MemoryWorker10hadWarningEv(ptr noundef nonnull align 8 dereferenceable(106)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8), float noundef) local_unnamed_addr #2 align 2

; Function Attrs: nounwind
declare void @_ZN4xmem6ThreadD1Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #7

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

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

declare noundef zeroext i1 @_ZN4xmem9Benchmark16stopPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315)) local_unnamed_addr #3

declare void @_ZN4xmem9Benchmark14computeMetricsEv(ptr noundef nonnull align 8 dereferenceable(315)) local_unnamed_addr #3

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nobuiltin allocsize(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 #6 = { nobuiltin 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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { builtin nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 16}
!6 = !{!"_ZTSN4xmem9BenchmarkE", !7, i64 8, !10, i64 16, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !12, i64 40, !13, i64 44, !14, i64 48, !11, i64 52, !15, i64 56, !19, i64 80, !23, i64 104, !27, i64 128, !27, i64 136, !27, i64 144, !27, i64 152, !27, i64 160, !27, i64 168, !27, i64 176, !27, i64 184, !27, i64 192, !28, i64 200, !23, i64 232, !23, i64 256, !28, i64 280, !30, i64 312, !30, i64 313, !30, i64 314}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"_ZTSN4xmem14pattern_mode_tE", !8, i64 0}
!13 = !{!"_ZTSN4xmem9rw_mode_tE", !8, i64 0}
!14 = !{!"_ZTSN4xmem12chunk_size_tE", !8, i64 0}
!15 = !{!"_ZTSSt6vectorIPN4xmem11PowerReaderESaIS2_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIPN4xmem11PowerReaderESaIS2_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIPN4xmem11PowerReaderESaIS2_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIPN4xmem11PowerReaderESaIS2_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!19 = !{!"_ZTSSt6vectorIPN4xmem6ThreadESaIS2_EE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIPN4xmem6ThreadESaIS2_EE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIPN4xmem6ThreadESaIS2_EE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIPN4xmem6ThreadESaIS2_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!23 = !{!"_ZTSSt6vectorIdSaIdEE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!27 = !{!"double", !8, i64 0}
!28 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !29, i64 0, !10, i64 8, !8, i64 16}
!29 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !7, i64 0}
!30 = !{!"bool", !8, i64 0}
!31 = !{!6, !11, i64 28}
!32 = !{!6, !7, i64 8}
!33 = !{!7, !7, i64 0}
!34 = !{!6, !12, i64 40}
!35 = !{!6, !13, i64 44}
!36 = !{!6, !14, i64 48}
!37 = !{!6, !11, i64 52}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = !{!30, !30, i64 0}
!41 = !{i8 0, i8 2}
!42 = !{}
!43 = !{!6, !11, i64 24}
!44 = !{!6, !11, i64 36}
!45 = distinct !{!45, !39, !46}
!46 = !{!"llvm.loop.peeled.count", i32 1}
!47 = distinct !{!47, !39}
!48 = distinct !{!48, !39}
!49 = distinct !{!49, !39}
!50 = !{!51, !51, i64 0}
!51 = !{!"float", !8, i64 0}
!52 = !{!27, !27, i64 0}
!53 = !{!6, !30, i64 314}
!54 = distinct !{!54, !39}
!55 = !{!56, !56, i64 0}
!56 = !{!"vtable pointer", !9, i64 0}
!57 = distinct !{!57, !39}
!58 = !{!6, !30, i64 313}
!59 = !{!60, !27, i64 344}
!60 = !{!"_ZTSN4xmem16LatencyBenchmarkE", !6, i64 0, !23, i64 320, !27, i64 344}
!61 = distinct !{!61, !39}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass