; LLVM IR from microsoft/X-Mem :: src/ThroughputBenchmark.ll (ZN4xmem19ThroughputBenchmark7runCoreEv)

; 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::LoadWorker *, std::allocator<xmem::LoadWorker *>>::_Vector_impl" }
%"struct.std::_Vector_base<xmem::LoadWorker *, std::allocator<xmem::LoadWorker *>>::_Vector_impl" = type { %"struct.std::_Vector_base<xmem::LoadWorker *, std::allocator<xmem::LoadWorker *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<xmem::LoadWorker *, std::allocator<xmem::LoadWorker *>>::_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] }

@_ZSt4cerr = external global %"class.std::basic_ostream", align 8
@.str.1 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [36 x i8], align 1
@_ZN4xmem9g_verboseE = external global i8, align 1
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.4 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [23 x i8], align 1
@_ZN4xmem13g_ns_per_tickE = external global float, align 4
@.str.24 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.26 = 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: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4xmem19ThroughputBenchmark7runCoreEv(ptr noundef nonnull align 8 dereferenceable(315) %0) unnamed_addr #1 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 ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca %"class.std::vector.13", align 8
  %12 = alloca %"class.std::vector.3", align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i32, align 4
  %29 = alloca i8, align 1
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  %32 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #8
  %33 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 2
  %34 = load i64, ptr %33, align 8, !tbaa !9
  %35 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %36 = load i32, ptr %35, align 4, !tbaa !32
  %37 = zext i32 %36 to i64
  %38 = udiv i64 %34, %37
  store i64 %38, ptr %4, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  store ptr null, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  store ptr null, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  store ptr null, ptr %8, align 8, !tbaa !5
  %39 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 7
  %40 = load i32, ptr %39, align 8, !tbaa !34
  %41 = icmp eq i32 %40, 0
  br i1 %41, label %42, label %54

42:                                               ; preds = %1
  %43 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 8
  %44 = load i32, ptr %43, align 4, !tbaa !35
  %45 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 9
  %46 = load i32, ptr %45, align 8, !tbaa !36
  %47 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 10
  %48 = load i32, ptr %47, align 4, !tbaa !37
  %49 = call noundef zeroext i1 @_ZN4xmem27determine_sequential_kernelENS_9rw_mode_tENS_12chunk_size_tEiPPFiPvS2_ES5_(i32 noundef %44, i32 noundef %46, i32 noundef %48, ptr noundef %5, ptr noundef %6)
  br i1 %49, label %53, label %50

50:                                               ; preds = %42
  %51 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.1)
  %52 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i1 false, ptr %2, align 1
  store i32 1, ptr %9, align 4
  br label %612

53:                                               ; preds = %42
  br label %107

54:                                               ; preds = %1
  %55 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 7
  %56 = load i32, ptr %55, align 8, !tbaa !34
  %57 = icmp eq i32 %56, 1
  br i1 %57, label %58, label %103

58:                                               ; preds = %54
  %59 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 8
  %60 = load i32, ptr %59, align 4, !tbaa !35
  %61 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 9
  %62 = load i32, ptr %61, align 8, !tbaa !36
  %63 = call noundef zeroext i1 @_ZN4xmem23determine_random_kernelENS_9rw_mode_tENS_12chunk_size_tEPPFiPmPS2_mES6_(i32 noundef %60, i32 noundef %62, ptr noundef %7, ptr noundef %8)
  br i1 %63, label %67, label %64

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

67:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  store i32 0, ptr %10, align 4, !tbaa !38
  br label %68

68:                                               ; preds = %97, %67
  %69 = load i32, ptr %10, align 4, !tbaa !38
  %70 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %71 = load i32, ptr %70, align 4, !tbaa !32
  %72 = icmp ult i32 %69, %71
  br i1 %72, label %74, label %73

73:                                               ; preds = %68
  store i32 2, ptr %9, align 4
  br label %100

74:                                               ; preds = %68
  %75 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 1
  %76 = load ptr, ptr %75, align 8, !tbaa !39
  %77 = load i32, ptr %10, align 4, !tbaa !38
  %78 = zext i32 %77 to i64
  %79 = load i64, ptr %4, align 8, !tbaa !33
  %80 = mul i64 %78, %79
  %81 = getelementptr inbounds i8, ptr %76, i64 %80
  %82 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 1
  %83 = load ptr, ptr %82, align 8, !tbaa !39
  %84 = load i32, ptr %10, align 4, !tbaa !38
  %85 = add i32 %84, 1
  %86 = zext i32 %85 to i64
  %87 = load i64, ptr %4, align 8, !tbaa !33
  %88 = mul i64 %86, %87
  %89 = getelementptr inbounds i8, ptr %83, i64 %88
  %90 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 9
  %91 = load i32, ptr %90, align 8, !tbaa !36
  %92 = call noundef zeroext i1 @_ZN4xmem32build_random_pointer_permutationEPvS0_NS_12chunk_size_tE(ptr noundef %81, ptr noundef %89, i32 noundef %91)
  br i1 %92, label %96, label %93

93:                                               ; preds = %74
  %94 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.2)
  %95 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %94, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i1 false, ptr %2, align 1
  store i32 1, ptr %9, align 4
  br label %100

96:                                               ; preds = %74
  br label %97

97:                                               ; preds = %96
  %98 = load i32, ptr %10, align 4, !tbaa !38
  %99 = add i32 %98, 1
  store i32 %99, ptr %10, align 4, !tbaa !38
  br label %68, !llvm.loop !40

100:                                              ; preds = %93, %73
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  %101 = load i32, ptr %9, align 4
  switch i32 %101, label %612 [
    i32 2, label %102
  ]

102:                                              ; preds = %100
  br label %106

103:                                              ; preds = %54
  %104 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.3)
  %105 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %104, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i1 false, ptr %2, align 1
  store i32 1, ptr %9, align 4
  br label %612

106:                                              ; preds = %102
  br label %107

107:                                              ; preds = %106, %53
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #8
  call void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #8
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  %108 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %109 = trunc i8 %108 to i1
  br i1 %109, label %110, label %117

110:                                              ; preds = %107
  %111 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.4)
          to label %112 unwind label %113

112:                                              ; preds = %110
  br label %117

113:                                              ; preds = %608, %604, %602, %596, %594, %591, %589, %583, %580, %149, %147, %145, %138, %136, %130, %128, %125, %123, %117, %110
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %13, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %14, align 4
  br label %611

117:                                              ; preds = %112, %107
  %118 = invoke noundef zeroext i1 @_ZN4xmem9Benchmark17startPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315) %32)
          to label %119 unwind label %113

119:                                              ; preds = %117
  br i1 %118, label %133, label %120

120:                                              ; preds = %119
  %121 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %122 = trunc i8 %121 to i1
  br i1 %122, label %123, label %128

123:                                              ; preds = %120
  %124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.5)
          to label %125 unwind label %113

125:                                              ; preds = %123
  %126 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %124, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %127 unwind label %113

127:                                              ; preds = %125
  br label %128

128:                                              ; preds = %127, %120
  %129 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.6)
          to label %130 unwind label %113

130:                                              ; preds = %128
  %131 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %129, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %132 unwind label %113

132:                                              ; preds = %130
  br label %142

133:                                              ; preds = %119
  %134 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %135 = trunc i8 %134 to i1
  br i1 %135, label %136, label %141

136:                                              ; preds = %133
  %137 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.7)
          to label %138 unwind label %113

138:                                              ; preds = %136
  %139 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %137, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %140 unwind label %113

140:                                              ; preds = %138
  br label %141

141:                                              ; preds = %140, %133
  br label %142

142:                                              ; preds = %141, %132
  %143 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %144 = trunc i8 %143 to i1
  br i1 %144, label %145, label %152

145:                                              ; preds = %142
  %146 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.8)
          to label %147 unwind label %113

147:                                              ; preds = %145
  %148 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %146, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %149 unwind label %113

149:                                              ; preds = %147
  %150 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %148, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %151 unwind label %113

151:                                              ; preds = %149
  br label %152

152:                                              ; preds = %151, %142
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  store i32 0, ptr %15, align 4, !tbaa !38
  br label %153

153:                                              ; preds = %571, %152
  %154 = load i32, ptr %15, align 4, !tbaa !38
  %155 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 3
  %156 = load i32, ptr %155, align 8, !tbaa !45
  %157 = icmp ult i32 %154, %156
  br i1 %157, label %159, label %158

158:                                              ; preds = %153
  store i32 5, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  br label %577

159:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  store i32 0, ptr %16, align 4, !tbaa !38
  br label %160

160:                                              ; preds = %260, %159
  %161 = load i32, ptr %16, align 4, !tbaa !38
  %162 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %163 = load i32, ptr %162, align 4, !tbaa !32
  %164 = icmp ult i32 %161, %163
  br i1 %164, label %166, label %165

165:                                              ; preds = %160
  store i32 8, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  br label %273

166:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %167 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 1
  %168 = load ptr, ptr %167, align 8, !tbaa !39
  %169 = load i32, ptr %16, align 4, !tbaa !38
  %170 = zext i32 %169 to i64
  %171 = load i64, ptr %4, align 8, !tbaa !33
  %172 = mul i64 %170, %171
  %173 = getelementptr inbounds i8, ptr %168, i64 %172
  store ptr %173, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %174 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 6
  %175 = load i32, ptr %174, align 4, !tbaa !46
  %176 = load i32, ptr %16, align 4, !tbaa !38
  %177 = invoke noundef i32 @_ZN4xmem19cpu_id_in_numa_nodeEjj(i32 noundef %175, i32 noundef %176)
          to label %178 unwind label %195

178:                                              ; preds = %166
  store i32 %177, ptr %18, align 4, !tbaa !38
  %179 = load i32, ptr %18, align 4, !tbaa !38
  %180 = icmp slt i32 %179, 0
  br i1 %180, label %181, label %199

181:                                              ; preds = %178
  %182 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.9)
          to label %183 unwind label %195

183:                                              ; preds = %181
  %184 = load i32, ptr %16, align 4, !tbaa !38
  %185 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %182, i32 noundef %184)
          to label %186 unwind label %195

186:                                              ; preds = %183
  %187 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %185, ptr noundef @.str.10)
          to label %188 unwind label %195

188:                                              ; preds = %186
  %189 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 6
  %190 = load i32, ptr %189, align 4, !tbaa !46
  %191 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %187, i32 noundef %190)
          to label %192 unwind label %195

192:                                              ; preds = %188
  %193 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %191, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %194 unwind label %195

194:                                              ; preds = %192
  br label %199

195:                                              ; preds = %247, %245, %192, %188, %186, %183, %181, %166
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %13, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %14, align 4
  br label %272

199:                                              ; preds = %194, %178
  %200 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 7
  %201 = load i32, ptr %200, align 8, !tbaa !34
  %202 = icmp eq i32 %201, 0
  br i1 %202, label %203, label %222

203:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %204 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 144) #9
          to label %205 unwind label %213

205:                                              ; preds = %203
  %206 = load ptr, ptr %17, align 8, !tbaa !5
  %207 = load i64, ptr %4, align 8, !tbaa !33
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  %209 = load ptr, ptr %6, align 8, !tbaa !5
  %210 = load i32, ptr %18, align 4, !tbaa !38
  invoke void @_ZN4xmem10LoadWorkerC1EPvmPFiS1_S1_ES3_i(ptr noundef nonnull align 8 dereferenceable(144) %204, ptr noundef %206, i64 noundef %207, ptr noundef %208, ptr noundef %209, i32 noundef %210)
          to label %211 unwind label %217

211:                                              ; preds = %205
  store ptr %204, ptr %19, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %212 unwind label %213

212:                                              ; preds = %211
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %251

213:                                              ; preds = %211, %203
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %13, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %14, align 4
  br label %221

217:                                              ; preds = %205
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %13, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %14, align 4
  call void @_ZdlPvm(ptr noundef %204, i64 noundef 144) #10
  br label %221

221:                                              ; preds = %217, %213
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %272

222:                                              ; preds = %199
  %223 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 7
  %224 = load i32, ptr %223, align 8, !tbaa !34
  %225 = icmp eq i32 %224, 1
  br i1 %225, label %226, label %245

226:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %227 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 144) #9
          to label %228 unwind label %236

228:                                              ; preds = %226
  %229 = load ptr, ptr %17, align 8, !tbaa !5
  %230 = load i64, ptr %4, align 8, !tbaa !33
  %231 = load ptr, ptr %7, align 8, !tbaa !5
  %232 = load ptr, ptr %8, align 8, !tbaa !5
  %233 = load i32, ptr %18, align 4, !tbaa !38
  invoke void @_ZN4xmem10LoadWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(144) %227, ptr noundef %229, i64 noundef %230, ptr noundef %231, ptr noundef %232, i32 noundef %233)
          to label %234 unwind label %240

234:                                              ; preds = %228
  store ptr %227, ptr %20, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %235 unwind label %236

235:                                              ; preds = %234
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %250

236:                                              ; preds = %234, %226
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %13, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %14, align 4
  br label %244

240:                                              ; preds = %228
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %13, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %14, align 4
  call void @_ZdlPvm(ptr noundef %227, i64 noundef 144) #10
  br label %244

244:                                              ; preds = %240, %236
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %272

245:                                              ; preds = %222
  %246 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.11)
          to label %247 unwind label %195

247:                                              ; preds = %245
  %248 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %246, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %249 unwind label %195

249:                                              ; preds = %247
  br label %250

250:                                              ; preds = %249, %235
  br label %251

251:                                              ; preds = %250, %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %252 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 32) #9
          to label %253 unwind label %263

253:                                              ; preds = %251
  %254 = load i32, ptr %16, align 4, !tbaa !38
  %255 = zext i32 %254 to i64
  %256 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %255) #8
  %257 = load ptr, ptr %256, align 8, !tbaa !5
  invoke void @_ZN4xmem6ThreadC1EPNS_8RunnableE(ptr noundef nonnull align 8 dereferenceable(32) %252, ptr noundef %257)
          to label %258 unwind label %267

258:                                              ; preds = %253
  store ptr %252, ptr %21, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %259 unwind label %263

259:                                              ; preds = %258
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  br label %260

260:                                              ; preds = %259
  %261 = load i32, ptr %16, align 4, !tbaa !38
  %262 = add i32 %261, 1
  store i32 %262, ptr %16, align 4, !tbaa !38
  br label %160, !llvm.loop !47

263:                                              ; preds = %258, %251
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %13, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %14, align 4
  br label %271

267:                                              ; preds = %253
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %13, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %14, align 4
  call void @_ZdlPvm(ptr noundef %252, i64 noundef 32) #10
  br label %271

271:                                              ; preds = %267, %263
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %272

272:                                              ; preds = %271, %244, %221, %195
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  br label %576

273:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 0, ptr %22, align 4, !tbaa !38
  br label %274

274:                                              ; preds = %287, %273
  %275 = load i32, ptr %22, align 4, !tbaa !38
  %276 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %277 = load i32, ptr %276, align 4, !tbaa !32
  %278 = icmp ult i32 %275, %277
  br i1 %278, label %280, label %279

279:                                              ; preds = %274
  store i32 11, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %294

280:                                              ; preds = %274
  %281 = load i32, ptr %22, align 4, !tbaa !38
  %282 = zext i32 %281 to i64
  %283 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %282) #8
  %284 = load ptr, ptr %283, align 8, !tbaa !5
  %285 = invoke noundef zeroext i1 @_ZN4xmem6Thread16create_and_startEv(ptr noundef nonnull align 8 dereferenceable(32) %284)
          to label %286 unwind label %290

286:                                              ; preds = %280
  br label %287

287:                                              ; preds = %286
  %288 = load i32, ptr %22, align 4, !tbaa !38
  %289 = add i32 %288, 1
  store i32 %289, ptr %22, align 4, !tbaa !38
  br label %274, !llvm.loop !48

290:                                              ; preds = %280
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %13, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %576

294:                                              ; preds = %279
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  store i32 0, ptr %23, align 4, !tbaa !38
  br label %295

295:                                              ; preds = %318, %294
  %296 = load i32, ptr %23, align 4, !tbaa !38
  %297 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %298 = load i32, ptr %297, align 4, !tbaa !32
  %299 = icmp ult i32 %296, %298
  br i1 %299, label %301, label %300

300:                                              ; preds = %295
  store i32 14, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %321

301:                                              ; preds = %295
  %302 = load i32, ptr %23, align 4, !tbaa !38
  %303 = zext i32 %302 to i64
  %304 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %303) #8
  %305 = load ptr, ptr %304, align 8, !tbaa !5
  %306 = invoke noundef zeroext i1 @_ZN4xmem6Thread4joinEv(ptr noundef nonnull align 8 dereferenceable(32) %305)
          to label %307 unwind label %313

307:                                              ; preds = %301
  br i1 %306, label %317, label %308

308:                                              ; preds = %307
  %309 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.12)
          to label %310 unwind label %313

310:                                              ; preds = %308
  %311 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %309, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %312 unwind label %313

312:                                              ; preds = %310
  br label %317

313:                                              ; preds = %310, %308, %301
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %13, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %576

317:                                              ; preds = %312, %307
  br label %318

318:                                              ; preds = %317
  %319 = load i32, ptr %23, align 4, !tbaa !38
  %320 = add i32 %319, 1
  store i32 %320, ptr %23, align 4, !tbaa !38
  br label %295, !llvm.loop !49

321:                                              ; preds = %300
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 0, ptr %24, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  store i64 0, ptr %25, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  store i64 0, ptr %26, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  store i64 0, ptr %27, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  %322 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #8
  %323 = load ptr, ptr %322, align 8, !tbaa !5
  %324 = invoke noundef i32 @_ZN4xmem12MemoryWorker15getBytesPerPassEv(ptr noundef nonnull align 8 dereferenceable(106) %323)
          to label %325 unwind label %332

325:                                              ; preds = %321
  store i32 %324, ptr %28, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #8
  store i8 0, ptr %29, align 1, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  store i32 0, ptr %30, align 4, !tbaa !38
  br label %326

326:                                              ; preds = %374, %325
  %327 = load i32, ptr %30, align 4, !tbaa !38
  %328 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %329 = load i32, ptr %328, align 4, !tbaa !32
  %330 = icmp ult i32 %327, %329
  br i1 %330, label %336, label %331

331:                                              ; preds = %326
  store i32 17, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  br label %381

332:                                              ; preds = %321
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %13, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %14, align 4
  br label %575

336:                                              ; preds = %326
  %337 = load i32, ptr %30, align 4, !tbaa !38
  %338 = zext i32 %337 to i64
  %339 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %338) #8
  %340 = load ptr, ptr %339, align 8, !tbaa !5
  %341 = invoke noundef i32 @_ZN4xmem12MemoryWorker9getPassesEv(ptr noundef nonnull align 8 dereferenceable(106) %340)
          to label %342 unwind label %377

342:                                              ; preds = %336
  %343 = load i32, ptr %24, align 4, !tbaa !38
  %344 = add i32 %343, %341
  store i32 %344, ptr %24, align 4, !tbaa !38
  %345 = load i32, ptr %30, align 4, !tbaa !38
  %346 = zext i32 %345 to i64
  %347 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %346) #8
  %348 = load ptr, ptr %347, align 8, !tbaa !5
  %349 = invoke noundef i64 @_ZN4xmem12MemoryWorker16getAdjustedTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %348)
          to label %350 unwind label %377

350:                                              ; preds = %342
  %351 = load i64, ptr %25, align 8, !tbaa !33
  %352 = add i64 %351, %349
  store i64 %352, ptr %25, align 8, !tbaa !33
  %353 = load i32, ptr %30, align 4, !tbaa !38
  %354 = zext i32 %353 to i64
  %355 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %354) #8
  %356 = load ptr, ptr %355, align 8, !tbaa !5
  %357 = invoke noundef i64 @_ZN4xmem12MemoryWorker20getElapsedDummyTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %356)
          to label %358 unwind label %377

358:                                              ; preds = %350
  %359 = load i64, ptr %27, align 8, !tbaa !33
  %360 = add i64 %359, %357
  store i64 %360, ptr %27, align 8, !tbaa !33
  %361 = load i32, ptr %30, align 4, !tbaa !38
  %362 = zext i32 %361 to i64
  %363 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %362) #8
  %364 = load ptr, ptr %363, align 8, !tbaa !5
  %365 = invoke noundef zeroext i1 @_ZN4xmem12MemoryWorker10hadWarningEv(ptr noundef nonnull align 8 dereferenceable(106) %364)
          to label %366 unwind label %377

366:                                              ; preds = %358
  %367 = zext i1 %365 to i32
  %368 = load i8, ptr %29, align 1, !tbaa !42, !range !43, !noundef !44
  %369 = trunc i8 %368 to i1
  %370 = zext i1 %369 to i32
  %371 = or i32 %370, %367
  %372 = icmp ne i32 %371, 0
  %373 = zext i1 %372 to i8
  store i8 %373, ptr %29, align 1, !tbaa !42
  br label %374

374:                                              ; preds = %366
  %375 = load i32, ptr %30, align 4, !tbaa !38
  %376 = add i32 %375, 1
  store i32 %376, ptr %30, align 4, !tbaa !38
  br label %326, !llvm.loop !50

377:                                              ; preds = %358, %350, %342, %336
  %378 = landingpad { ptr, i32 }
          cleanup
  %379 = extractvalue { ptr, i32 } %378, 0
  store ptr %379, ptr %13, align 8
  %380 = extractvalue { ptr, i32 } %378, 1
  store i32 %380, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  br label %574

381:                                              ; preds = %331
  %382 = load i64, ptr %25, align 8, !tbaa !33
  %383 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %384 = load i32, ptr %383, align 4, !tbaa !32
  %385 = zext i32 %384 to i64
  %386 = udiv i64 %382, %385
  store i64 %386, ptr %26, align 8, !tbaa !33
  %387 = load i8, ptr %29, align 1, !tbaa !42, !range !43, !noundef !44
  %388 = trunc i8 %387 to i1
  br i1 %388, label %389, label %391

389:                                              ; preds = %381
  %390 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 29
  store i8 1, ptr %390, align 2, !tbaa !51
  br label %391

391:                                              ; preds = %389, %381
  %392 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %393 = trunc i8 %392 to i1
  br i1 %393, label %394, label %525

394:                                              ; preds = %391
  %395 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.13)
          to label %396 unwind label %424

396:                                              ; preds = %394
  %397 = load i32, ptr %15, align 4, !tbaa !38
  %398 = add i32 %397, 1
  %399 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %395, i32 noundef %398)
          to label %400 unwind label %424

400:                                              ; preds = %396
  %401 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %399, ptr noundef @.str.14)
          to label %402 unwind label %424

402:                                              ; preds = %400
  %403 = load i32, ptr %24, align 4, !tbaa !38
  %404 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %401, i32 noundef %403)
          to label %405 unwind label %424

405:                                              ; preds = %402
  %406 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %404, ptr noundef @.str.15)
          to label %407 unwind label %424

407:                                              ; preds = %405
  %408 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %409 = load i32, ptr %408, align 4, !tbaa !32
  %410 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %406, i32 noundef %409)
          to label %411 unwind label %424

411:                                              ; preds = %407
  %412 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %410, ptr noundef @.str.16)
          to label %413 unwind label %424

413:                                              ; preds = %411
  %414 = load i32, ptr %28, align 4, !tbaa !38
  %415 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %412, i32 noundef %414)
          to label %416 unwind label %424

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

418:                                              ; preds = %416
  %419 = load i8, ptr %29, align 1, !tbaa !42, !range !43, !noundef !44
  %420 = trunc i8 %419 to i1
  br i1 %420, label %421, label %428

421:                                              ; preds = %418
  %422 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.18)
          to label %423 unwind label %424

423:                                              ; preds = %421
  br label %428

424:                                              ; preds = %522, %519, %514, %506, %504, %496, %494, %490, %488, %486, %483, %478, %472, %470, %464, %462, %458, %456, %454, %451, %446, %443, %441, %438, %436, %432, %430, %428, %421, %416, %413, %411, %407, %405, %402, %400, %396, %394
  %425 = landingpad { ptr, i32 }
          cleanup
  %426 = extractvalue { ptr, i32 } %425, 0
  store ptr %426, ptr %13, align 8
  %427 = extractvalue { ptr, i32 } %425, 1
  store i32 %427, ptr %14, align 4
  br label %574

428:                                              ; preds = %423, %418
  %429 = 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 %430 unwind label %424

430:                                              ; preds = %428
  %431 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.19)
          to label %432 unwind label %424

432:                                              ; preds = %430
  %433 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %434 = load i32, ptr %433, align 4, !tbaa !32
  %435 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %431, i32 noundef %434)
          to label %436 unwind label %424

436:                                              ; preds = %432
  %437 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %435, ptr noundef @.str.20)
          to label %438 unwind label %424

438:                                              ; preds = %436
  %439 = load i64, ptr %25, align 8, !tbaa !33
  %440 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %437, i64 noundef %439)
          to label %441 unwind label %424

441:                                              ; preds = %438
  %442 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %440, ptr noundef @.str.21)
          to label %443 unwind label %424

443:                                              ; preds = %441
  %444 = load i64, ptr %27, align 8, !tbaa !33
  %445 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %442, i64 noundef %444)
          to label %446 unwind label %424

446:                                              ; preds = %443
  %447 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %445, ptr noundef @.str.22)
          to label %448 unwind label %424

448:                                              ; preds = %446
  %449 = load i8, ptr %29, align 1, !tbaa !42, !range !43, !noundef !44
  %450 = trunc i8 %449 to i1
  br i1 %450, label %451, label %454

451:                                              ; preds = %448
  %452 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.18)
          to label %453 unwind label %424

453:                                              ; preds = %451
  br label %454

454:                                              ; preds = %453, %448
  %455 = 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 %456 unwind label %424

456:                                              ; preds = %454
  %457 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.23)
          to label %458 unwind label %424

458:                                              ; preds = %456
  %459 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %460 = load i32, ptr %459, align 4, !tbaa !32
  %461 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %457, i32 noundef %460)
          to label %462 unwind label %424

462:                                              ; preds = %458
  %463 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %461, ptr noundef @.str.20)
          to label %464 unwind label %424

464:                                              ; preds = %462
  %465 = load i64, ptr %25, align 8, !tbaa !33
  %466 = uitofp i64 %465 to float
  %467 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %468 = fmul float %466, %467
  %469 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %463, float noundef %468)
          to label %470 unwind label %424

470:                                              ; preds = %464
  %471 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %469, ptr noundef @.str.21)
          to label %472 unwind label %424

472:                                              ; preds = %470
  %473 = load i64, ptr %27, align 8, !tbaa !33
  %474 = uitofp i64 %473 to float
  %475 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %476 = fmul float %474, %475
  %477 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %471, float noundef %476)
          to label %478 unwind label %424

478:                                              ; preds = %472
  %479 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %477, ptr noundef @.str.22)
          to label %480 unwind label %424

480:                                              ; preds = %478
  %481 = load i8, ptr %29, align 1, !tbaa !42, !range !43, !noundef !44
  %482 = trunc i8 %481 to i1
  br i1 %482, label %483, label %486

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

485:                                              ; preds = %483
  br label %486

486:                                              ; preds = %485, %480
  %487 = 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 %488 unwind label %424

488:                                              ; preds = %486
  %489 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.24)
          to label %490 unwind label %424

490:                                              ; preds = %488
  %491 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %492 = load i32, ptr %491, align 4, !tbaa !32
  %493 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %489, i32 noundef %492)
          to label %494 unwind label %424

494:                                              ; preds = %490
  %495 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %493, ptr noundef @.str.20)
          to label %496 unwind label %424

496:                                              ; preds = %494
  %497 = load i64, ptr %25, align 8, !tbaa !33
  %498 = uitofp i64 %497 to float
  %499 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %500 = fmul float %498, %499
  %501 = fpext float %500 to double
  %502 = fdiv double %501, 1.000000e+09
  %503 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %495, double noundef %502)
          to label %504 unwind label %424

504:                                              ; preds = %496
  %505 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %503, ptr noundef @.str.21)
          to label %506 unwind label %424

506:                                              ; preds = %504
  %507 = load i64, ptr %27, align 8, !tbaa !33
  %508 = uitofp i64 %507 to float
  %509 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %510 = fmul float %508, %509
  %511 = fpext float %510 to double
  %512 = fdiv double %511, 1.000000e+09
  %513 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %505, double noundef %512)
          to label %514 unwind label %424

514:                                              ; preds = %506
  %515 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %513, ptr noundef @.str.22)
          to label %516 unwind label %424

516:                                              ; preds = %514
  %517 = load i8, ptr %29, align 1, !tbaa !42, !range !43, !noundef !44
  %518 = trunc i8 %517 to i1
  br i1 %518, label %519, label %522

519:                                              ; preds = %516
  %520 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.18)
          to label %521 unwind label %424

521:                                              ; preds = %519
  br label %522

522:                                              ; preds = %521, %516
  %523 = 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 %524 unwind label %424

524:                                              ; preds = %522
  br label %525

525:                                              ; preds = %524, %391
  %526 = load i32, ptr %24, align 4, !tbaa !38
  %527 = uitofp i32 %526 to double
  %528 = load i32, ptr %28, align 4, !tbaa !38
  %529 = uitofp i32 %528 to double
  %530 = fmul double %527, %529
  %531 = fdiv double %530, 0x4130000000000000
  %532 = load i64, ptr %26, align 8, !tbaa !33
  %533 = uitofp i64 %532 to double
  %534 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !52
  %535 = fpext float %534 to double
  %536 = fmul double %533, %535
  %537 = fdiv double %536, 1.000000e+09
  %538 = fdiv double %531, %537
  %539 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 13
  %540 = load i32, ptr %15, align 4, !tbaa !38
  %541 = zext i32 %540 to i64
  %542 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %539, i64 noundef %541) #8
  store double %538, ptr %542, align 8, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  store i32 0, ptr %31, align 4, !tbaa !38
  br label %543

543:                                              ; preds = %567, %525
  %544 = load i32, ptr %31, align 4, !tbaa !38
  %545 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 4
  %546 = load i32, ptr %545, align 4, !tbaa !32
  %547 = icmp ult i32 %544, %546
  br i1 %547, label %549, label %548

548:                                              ; preds = %543
  store i32 20, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  br label %570

549:                                              ; preds = %543
  %550 = load i32, ptr %31, align 4, !tbaa !38
  %551 = zext i32 %550 to i64
  %552 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %551) #8
  %553 = load ptr, ptr %552, align 8, !tbaa !5
  %554 = icmp eq ptr %553, null
  br i1 %554, label %556, label %555

555:                                              ; preds = %549
  call void @_ZN4xmem6ThreadD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %553) #8
  call void @_ZdlPvm(ptr noundef %553, i64 noundef 32) #10
  br label %556

556:                                              ; preds = %555, %549
  %557 = load i32, ptr %31, align 4, !tbaa !38
  %558 = zext i32 %557 to i64
  %559 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %558) #8
  %560 = load ptr, ptr %559, align 8, !tbaa !5
  %561 = icmp eq ptr %560, null
  br i1 %561, label %566, label %562

562:                                              ; preds = %556
  %563 = load ptr, ptr %560, align 8, !tbaa !55
  %564 = getelementptr inbounds ptr, ptr %563, i64 2
  %565 = load ptr, ptr %564, align 8
  call void %565(ptr noundef nonnull align 8 dereferenceable(144) %560) #8
  br label %566

566:                                              ; preds = %562, %556
  br label %567

567:                                              ; preds = %566
  %568 = load i32, ptr %31, align 4, !tbaa !38
  %569 = add i32 %568, 1
  store i32 %569, ptr %31, align 4, !tbaa !38
  br label %543, !llvm.loop !57

570:                                              ; preds = %548
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  call void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %571

571:                                              ; preds = %570
  %572 = load i32, ptr %15, align 4, !tbaa !38
  %573 = add i32 %572, 1
  store i32 %573, ptr %15, align 4, !tbaa !38
  br label %153, !llvm.loop !58

574:                                              ; preds = %424, %377
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #8
  br label %575

575:                                              ; preds = %574, %332
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %576

576:                                              ; preds = %575, %313, %290, %272
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  br label %611

577:                                              ; preds = %158
  %578 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %579 = trunc i8 %578 to i1
  br i1 %579, label %580, label %583

580:                                              ; preds = %577
  %581 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.25)
          to label %582 unwind label %113

582:                                              ; preds = %580
  br label %583

583:                                              ; preds = %582, %577
  %584 = invoke noundef zeroext i1 @_ZN4xmem9Benchmark16stopPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315) %32)
          to label %585 unwind label %113

585:                                              ; preds = %583
  br i1 %584, label %599, label %586

586:                                              ; preds = %585
  %587 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %588 = trunc i8 %587 to i1
  br i1 %588, label %589, label %594

589:                                              ; preds = %586
  %590 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.5)
          to label %591 unwind label %113

591:                                              ; preds = %589
  %592 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %590, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %593 unwind label %113

593:                                              ; preds = %591
  br label %594

594:                                              ; preds = %593, %586
  %595 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.26)
          to label %596 unwind label %113

596:                                              ; preds = %594
  %597 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %595, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %598 unwind label %113

598:                                              ; preds = %596
  br label %608

599:                                              ; preds = %585
  %600 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !42, !range !43, !noundef !44
  %601 = trunc i8 %600 to i1
  br i1 %601, label %602, label %607

602:                                              ; preds = %599
  %603 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.7)
          to label %604 unwind label %113

604:                                              ; preds = %602
  %605 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %603, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %606 unwind label %113

606:                                              ; preds = %604
  br label %607

607:                                              ; preds = %606, %599
  br label %608

608:                                              ; preds = %607, %598
  %609 = getelementptr inbounds %"class.xmem::Benchmark", ptr %32, i32 0, i32 28
  store i8 1, ptr %609, align 1, !tbaa !59
  invoke void @_ZN4xmem9Benchmark14computeMetricsEv(ptr noundef nonnull align 8 dereferenceable(315) %32)
          to label %610 unwind label %113

610:                                              ; preds = %608
  store i1 true, ptr %2, align 1
  store i32 1, ptr %9, align 4
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #8
  call void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #8
  br label %612

611:                                              ; preds = %576, %113
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #8
  call void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #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 %614

612:                                              ; preds = %610, %103, %100, %64, %50
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #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
  %613 = load i1, ptr %2, align 1
  ret i1 %613

614:                                              ; preds = %611
  %615 = load ptr, ptr %13, align 8
  %616 = load i32, ptr %14, align 4
  %617 = insertvalue { ptr, i32 } poison, ptr %615, 0
  %618 = insertvalue { ptr, i32 } %617, i32 %616, 1
  resume { ptr, i32 } %618
}

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #1 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)) #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_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)) #2

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

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

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

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

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 #2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_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 #2

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

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

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

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

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

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

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

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

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

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

; 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: 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 @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

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

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

; 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 @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_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 = { 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 = { "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 = { 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 #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, !13, i64 40}
!35 = !{!10, !14, i64 44}
!36 = !{!10, !15, i64 48}
!37 = !{!10, !12, i64 52}
!38 = !{!12, !12, i64 0}
!39 = !{!10, !6, i64 8}
!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 = distinct !{!50, !41}
!51 = !{!10, !31, i64 314}
!52 = !{!53, !53, i64 0}
!53 = !{!"float", !7, i64 0}
!54 = !{!28, !28, i64 0}
!55 = !{!56, !56, i64 0}
!56 = !{!"vtable pointer", !8, i64 0}
!57 = distinct !{!57, !41}
!58 = distinct !{!58, !41}
!59 = !{!10, !31, i64 313}


; 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::LoadWorker *, std::allocator<xmem::LoadWorker *>>::_Vector_impl" }
%"struct.std::_Vector_base<xmem::LoadWorker *, std::allocator<xmem::LoadWorker *>>::_Vector_impl" = type { %"struct.std::_Vector_base<xmem::LoadWorker *, std::allocator<xmem::LoadWorker *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<xmem::LoadWorker *, std::allocator<xmem::LoadWorker *>>::_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 }

@_ZSt4cerr = external global %"class.std::basic_ostream", align 8
@.str.1 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [36 x i8], align 1
@_ZN4xmem9g_verboseE = external local_unnamed_addr global i8, align 1
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.4 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [23 x i8], align 1
@_ZN4xmem13g_ns_per_tickE = external local_unnamed_addr global float, align 4
@.str.24 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.26 = 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: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4xmem19ThroughputBenchmark7runCoreEv(ptr noundef nonnull align 8 dereferenceable(315) %0) unnamed_addr #1 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 = getelementptr inbounds i8, ptr %0, i64 16
  %12 = load i64, ptr %11, align 8, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %0, i64 28
  %14 = load i32, ptr %13, align 4, !tbaa !31
  %15 = zext i32 %14 to i64
  %16 = udiv i64 %12, %15
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #8
  store ptr null, ptr %2, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #8
  store ptr null, ptr %3, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  store ptr null, ptr %4, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  store ptr null, ptr %5, align 8, !tbaa !32
  %17 = getelementptr inbounds i8, ptr %0, i64 40
  %18 = load i32, ptr %17, align 8, !tbaa !33
  switch i32 %18, label %54 [
    i32 0, label %19
    i32 1, label %30
  ]

19:                                               ; preds = %1
  %20 = getelementptr inbounds i8, ptr %0, i64 44
  %21 = load i32, ptr %20, align 4, !tbaa !34
  %22 = getelementptr inbounds i8, ptr %0, i64 48
  %23 = load i32, ptr %22, align 8, !tbaa !35
  %24 = getelementptr inbounds i8, ptr %0, i64 52
  %25 = load i32, ptr %24, align 4, !tbaa !36
  %26 = call noundef zeroext i1 @_ZN4xmem27determine_sequential_kernelENS_9rw_mode_tENS_12chunk_size_tEiPPFiPvS2_ES5_(i32 noundef %21, i32 noundef %23, i32 noundef %25, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br i1 %26, label %.critedge, label %27

27:                                               ; preds = %19
  %28 = 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.1)
  %29 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %378

30:                                               ; preds = %1
  %31 = getelementptr inbounds i8, ptr %0, i64 44
  %32 = load i32, ptr %31, align 4, !tbaa !34
  %33 = getelementptr inbounds i8, ptr %0, i64 48
  %34 = load i32, ptr %33, align 8, !tbaa !35
  %35 = call noundef zeroext i1 @_ZN4xmem23determine_random_kernelENS_9rw_mode_tENS_12chunk_size_tEPPFiPmPS2_mES6_(i32 noundef %32, i32 noundef %34, ptr noundef nonnull %4, ptr noundef nonnull %5)
  br i1 %35, label %.preheader106, label %37

.preheader106:                                    ; preds = %30
  %36 = getelementptr inbounds i8, ptr %0, i64 8
  br label %40

37:                                               ; preds = %30
  %38 = 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.1)
  %39 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %38, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %378

40:                                               ; preds = %.preheader106, %43
  %indvars.iv = phi i64 [ 0, %.preheader106 ], [ %indvars.iv.next, %43 ]
  %41 = load i32, ptr %13, align 4, !tbaa !31
  %42 = zext i32 %41 to i64
  %.not = icmp ult i64 %indvars.iv, %42
  br i1 %.not, label %43, label %.critedge

43:                                               ; preds = %40
  %44 = load ptr, ptr %36, align 8, !tbaa !37
  %45 = mul i64 %16, %indvars.iv
  %46 = getelementptr inbounds i8, ptr %44, i64 %45
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %47 = mul i64 %16, %indvars.iv.next
  %48 = getelementptr inbounds i8, ptr %44, i64 %47
  %49 = load i32, ptr %33, align 8, !tbaa !35
  %50 = call noundef zeroext i1 @_ZN4xmem32build_random_pointer_permutationEPvS0_NS_12chunk_size_tE(ptr noundef %46, ptr noundef %48, i32 noundef %49)
  br i1 %50, label %40, label %51, !llvm.loop !38

51:                                               ; preds = %43
  %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.2)
  %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 %378

54:                                               ; preds = %1
  %55 = 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.3)
  %56 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %378

.critedge:                                        ; preds = %40, %19
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #8
  call void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_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
  %57 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %58 = trunc nuw i8 %57 to i1
  br i1 %58, label %59, label %63

59:                                               ; preds = %.critedge
  %60 = 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.4)
          to label %63 unwind label %61

61:                                               ; preds = %.invoke192, %.invoke191, %.invoke190, %.invoke, %374, %367, %365, %359, %357, %85, %83, %81, %71, %69, %63, %59
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %377

63:                                               ; preds = %59, %.critedge
  %64 = invoke noundef zeroext i1 @_ZN4xmem9Benchmark17startPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315) %0)
          to label %65 unwind label %61

65:                                               ; preds = %63
  %66 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %67 = trunc nuw i8 %66 to i1
  br i1 %64, label %73, label %68

68:                                               ; preds = %65
  br i1 %67, label %69, label %.invoke192

69:                                               ; preds = %68
  %70 = 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.5)
          to label %71 unwind label %61

71:                                               ; preds = %69
  %72 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.invoke192 unwind label %61

73:                                               ; preds = %65
  br i1 %67, label %.invoke192, label %78

.invoke192:                                       ; preds = %73, %68, %71
  %74 = phi ptr [ @_ZSt4cerr, %71 ], [ @_ZSt4cerr, %68 ], [ @_ZSt4cout, %73 ]
  %75 = phi ptr [ @.str.6, %71 ], [ @.str.6, %68 ], [ @.str.7, %73 ]
  %76 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %74, ptr noundef nonnull %75)
          to label %.invoke190 unwind label %61

.invoke190:                                       ; preds = %.invoke192
  %77 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %78 unwind label %61

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

81:                                               ; preds = %78
  %82 = 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.8)
          to label %83 unwind label %61

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

85:                                               ; preds = %83
  %86 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %84, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %87 unwind label %61

87:                                               ; preds = %85, %78
  %88 = getelementptr inbounds i8, ptr %0, i64 24
  %89 = load i32, ptr %88, align 8, !tbaa !43
  %.not137 = icmp eq i32 %89, 0
  br i1 %.not137, label %._crit_edge136, label %.preheader105.lr.ph

.preheader105.lr.ph:                              ; preds = %87
  %90 = getelementptr inbounds i8, ptr %0, i64 8
  %91 = getelementptr inbounds i8, ptr %0, i64 36
  %92 = getelementptr inbounds i8, ptr %0, i64 314
  %93 = getelementptr inbounds i8, ptr %0, i64 104
  br label %.preheader105

.preheader105:                                    ; preds = %.preheader105.lr.ph, %._crit_edge134
  %indvars.iv166 = phi i64 [ 0, %.preheader105.lr.ph ], [ %indvars.iv.next167, %._crit_edge134 ]
  %94 = load i32, ptr %13, align 4, !tbaa !31
  %.not138 = icmp eq i32 %94, 0
  br i1 %.not138, label %._crit_edge, label %.lr.ph

._crit_edge136:                                   ; preds = %._crit_edge134, %87
  %95 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %96 = trunc nuw i8 %95 to i1
  br i1 %96, label %357, label %359

.preheader104:                                    ; preds = %154
  %.not139 = icmp eq i32 %155, 0
  br i1 %.not139, label %._crit_edge, label %.lr.ph117

.lr.ph:                                           ; preds = %.preheader105, %154
  %indvars.iv152 = phi i64 [ %indvars.iv.next153, %154 ], [ 0, %.preheader105 ]
  %97 = load ptr, ptr %90, align 8, !tbaa !37
  %98 = mul i64 %16, %indvars.iv152
  %99 = getelementptr inbounds i8, ptr %97, i64 %98
  %100 = load i32, ptr %91, align 4, !tbaa !44
  %101 = trunc nuw i64 %indvars.iv152 to i32
  %102 = invoke noundef i32 @_ZN4xmem19cpu_id_in_numa_nodeEjj(i32 noundef %100, i32 noundef %101)
          to label %103 unwind label %116

103:                                              ; preds = %.lr.ph
  %104 = icmp slt i32 %102, 0
  br i1 %104, label %105, label %118

105:                                              ; preds = %103
  %106 = 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.9)
          to label %107 unwind label %116

107:                                              ; preds = %105
  %108 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %106, i32 noundef %101)
          to label %109 unwind label %116

109:                                              ; preds = %107
  %110 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %108, ptr noundef nonnull @.str.10)
          to label %111 unwind label %116

111:                                              ; preds = %109
  %112 = load i32, ptr %91, align 4, !tbaa !44
  %113 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %110, i32 noundef %112)
          to label %114 unwind label %116

114:                                              ; preds = %111
  %115 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %113, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %118 unwind label %116

116:                                              ; preds = %146, %144, %114, %111, %109, %107, %105, %.lr.ph
  %117 = landingpad { ptr, i32 }
          cleanup
  br label %377

118:                                              ; preds = %114, %103
  %119 = load i32, ptr %17, align 8, !tbaa !33
  switch i32 %119, label %144 [
    i32 0, label %120
    i32 1, label %132
  ]

120:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %121 = invoke noalias noundef nonnull dereferenceable(144) ptr @_Znwm(i64 noundef 144) #9
          to label %122 unwind label %127

122:                                              ; preds = %120
  %123 = load ptr, ptr %2, align 8, !tbaa !32
  %124 = load ptr, ptr %3, align 8, !tbaa !32
  invoke void @_ZN4xmem10LoadWorkerC1EPvmPFiS1_S1_ES3_i(ptr noundef nonnull align 8 dereferenceable(144) %121, ptr noundef %99, i64 noundef %16, ptr noundef %123, ptr noundef %124, i32 noundef %102)
          to label %125 unwind label %129

125:                                              ; preds = %122
  store ptr %121, ptr %8, align 8, !tbaa !32
  invoke void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %126 unwind label %127

126:                                              ; preds = %125
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %148

127:                                              ; preds = %125, %120
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %131

129:                                              ; preds = %122
  %130 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %121, i64 noundef 144) #10
  br label %131

131:                                              ; preds = %129, %127
  %.pn96 = phi { ptr, i32 } [ %128, %127 ], [ %130, %129 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %377

132:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %133 = invoke noalias noundef nonnull dereferenceable(144) ptr @_Znwm(i64 noundef 144) #9
          to label %134 unwind label %139

134:                                              ; preds = %132
  %135 = load ptr, ptr %4, align 8, !tbaa !32
  %136 = load ptr, ptr %5, align 8, !tbaa !32
  invoke void @_ZN4xmem10LoadWorkerC1EPvmPFiPmPS2_mES5_i(ptr noundef nonnull align 8 dereferenceable(144) %133, ptr noundef %99, i64 noundef %16, ptr noundef %135, ptr noundef %136, i32 noundef %102)
          to label %137 unwind label %141

137:                                              ; preds = %134
  store ptr %133, ptr %9, align 8, !tbaa !32
  invoke void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %138 unwind label %139

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

139:                                              ; preds = %137, %132
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %143

141:                                              ; preds = %134
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %133, i64 noundef 144) #10
  br label %143

143:                                              ; preds = %141, %139
  %.pn94 = phi { ptr, i32 } [ %140, %139 ], [ %142, %141 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br label %377

144:                                              ; preds = %118
  %145 = 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.11)
          to label %146 unwind label %116

146:                                              ; preds = %144
  %147 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %145, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %148 unwind label %116

148:                                              ; preds = %138, %146, %126
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  %149 = invoke noalias noundef nonnull dereferenceable(32) ptr @_Znwm(i64 noundef 32) #9
          to label %150 unwind label %158

150:                                              ; preds = %148
  %151 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv152) #8
  %152 = load ptr, ptr %151, align 8, !tbaa !32
  invoke void @_ZN4xmem6ThreadC1EPNS_8RunnableE(ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef %152)
          to label %153 unwind label %160

153:                                              ; preds = %150
  store ptr %149, ptr %10, align 8, !tbaa !32
  invoke void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %154 unwind label %158

154:                                              ; preds = %153
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  %indvars.iv.next153 = add nuw nsw i64 %indvars.iv152, 1
  %155 = load i32, ptr %13, align 4, !tbaa !31
  %156 = zext i32 %155 to i64
  %157 = icmp ult i64 %indvars.iv.next153, %156
  br i1 %157, label %.lr.ph, label %.preheader104, !llvm.loop !45

158:                                              ; preds = %153, %148
  %159 = landingpad { ptr, i32 }
          cleanup
  br label %162

160:                                              ; preds = %150
  %161 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %149, i64 noundef 32) #10
  br label %162

162:                                              ; preds = %160, %158
  %.pn98 = phi { ptr, i32 } [ %159, %158 ], [ %161, %160 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %377

.preheader103:                                    ; preds = %166
  %.not140 = icmp eq i32 %167, 0
  br i1 %.not140, label %._crit_edge, label %.lr.ph119

.lr.ph117:                                        ; preds = %.preheader104, %166
  %indvars.iv155 = phi i64 [ %indvars.iv.next156, %166 ], [ 0, %.preheader104 ]
  %163 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv155) #8
  %164 = load ptr, ptr %163, align 8, !tbaa !32
  %165 = invoke noundef zeroext i1 @_ZN4xmem6Thread16create_and_startEv(ptr noundef nonnull align 8 dereferenceable(32) %164)
          to label %166 unwind label %170

166:                                              ; preds = %.lr.ph117
  %indvars.iv.next156 = add nuw nsw i64 %indvars.iv155, 1
  %167 = load i32, ptr %13, align 4, !tbaa !31
  %168 = zext i32 %167 to i64
  %169 = icmp ult i64 %indvars.iv.next156, %168
  br i1 %169, label %.lr.ph117, label %.preheader103, !llvm.loop !46

170:                                              ; preds = %.lr.ph117
  %171 = landingpad { ptr, i32 }
          cleanup
  br label %377

._crit_edge:                                      ; preds = %186, %.preheader105, %.preheader104, %.preheader103
  %172 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #8
  %173 = load ptr, ptr %172, align 8, !tbaa !32
  %174 = invoke noundef i32 @_ZN4xmem12MemoryWorker15getBytesPerPassEv(ptr noundef nonnull align 8 dereferenceable(106) %173)
          to label %.preheader unwind label %192

.preheader:                                       ; preds = %._crit_edge
  %175 = load i32, ptr %13, align 4, !tbaa !31
  %.not141 = icmp eq i32 %175, 0
  br i1 %.not141, label %._crit_edge126.thread, label %.lr.ph125

.lr.ph119:                                        ; preds = %.preheader103, %186
  %indvars.iv158 = phi i64 [ %indvars.iv.next159, %186 ], [ 0, %.preheader103 ]
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv158) #8
  %177 = load ptr, ptr %176, align 8, !tbaa !32
  %178 = invoke noundef zeroext i1 @_ZN4xmem6Thread4joinEv(ptr noundef nonnull align 8 dereferenceable(32) %177)
          to label %179 unwind label %184

179:                                              ; preds = %.lr.ph119
  br i1 %178, label %186, label %180

180:                                              ; preds = %179
  %181 = 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.12)
          to label %182 unwind label %184

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

184:                                              ; preds = %182, %180, %.lr.ph119
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %377

186:                                              ; preds = %179, %182
  %indvars.iv.next159 = add nuw nsw i64 %indvars.iv158, 1
  %187 = load i32, ptr %13, align 4, !tbaa !31
  %188 = zext i32 %187 to i64
  %189 = icmp ult i64 %indvars.iv.next159, %188
  br i1 %189, label %.lr.ph119, label %._crit_edge, !llvm.loop !47

._crit_edge126:                                   ; preds = %211
  %190 = zext i32 %214 to i64
  %191 = udiv i64 %203, %190
  br i1 %213, label %219, label %._crit_edge126.thread

192:                                              ; preds = %._crit_edge
  %193 = landingpad { ptr, i32 }
          cleanup
  br label %377

.lr.ph125:                                        ; preds = %.preheader, %211
  %indvars.iv161 = phi i64 [ %indvars.iv.next162, %211 ], [ 0, %.preheader ]
  %.066123 = phi i1 [ %213, %211 ], [ false, %.preheader ]
  %.068122 = phi i64 [ %212, %211 ], [ 0, %.preheader ]
  %.069121 = phi i64 [ %203, %211 ], [ 0, %.preheader ]
  %.070120 = phi i32 [ %198, %211 ], [ 0, %.preheader ]
  %194 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv161) #8
  %195 = load ptr, ptr %194, align 8, !tbaa !32
  %196 = invoke noundef i32 @_ZN4xmem12MemoryWorker9getPassesEv(ptr noundef nonnull align 8 dereferenceable(106) %195)
          to label %197 unwind label %217

197:                                              ; preds = %.lr.ph125
  %198 = add i32 %196, %.070120
  %199 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv161) #8
  %200 = load ptr, ptr %199, align 8, !tbaa !32
  %201 = invoke noundef i64 @_ZN4xmem12MemoryWorker16getAdjustedTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %200)
          to label %202 unwind label %217

202:                                              ; preds = %197
  %203 = add i64 %201, %.069121
  %204 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv161) #8
  %205 = load ptr, ptr %204, align 8, !tbaa !32
  %206 = invoke noundef i64 @_ZN4xmem12MemoryWorker20getElapsedDummyTicksEv(ptr noundef nonnull align 8 dereferenceable(106) %205)
          to label %207 unwind label %217

207:                                              ; preds = %202
  %208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv161) #8
  %209 = load ptr, ptr %208, align 8, !tbaa !32
  %210 = invoke noundef zeroext i1 @_ZN4xmem12MemoryWorker10hadWarningEv(ptr noundef nonnull align 8 dereferenceable(106) %209)
          to label %211 unwind label %217

211:                                              ; preds = %207
  %212 = add i64 %206, %.068122
  %213 = or i1 %.066123, %210
  %indvars.iv.next162 = add nuw nsw i64 %indvars.iv161, 1
  %214 = load i32, ptr %13, align 4, !tbaa !31
  %215 = zext i32 %214 to i64
  %216 = icmp ult i64 %indvars.iv.next162, %215
  br i1 %216, label %.lr.ph125, label %._crit_edge126, !llvm.loop !48

217:                                              ; preds = %207, %202, %197, %.lr.ph125
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %377

219:                                              ; preds = %._crit_edge126
  store i8 1, ptr %92, align 2, !tbaa !49
  br label %._crit_edge126.thread

._crit_edge126.thread:                            ; preds = %.preheader, %219, %._crit_edge126
  %220 = phi i64 [ %191, %219 ], [ %191, %._crit_edge126 ], [ poison, %.preheader ]
  %.066.lcssa179 = phi i1 [ true, %219 ], [ false, %._crit_edge126 ], [ false, %.preheader ]
  %.068.lcssa178 = phi i64 [ %212, %219 ], [ %212, %._crit_edge126 ], [ 0, %.preheader ]
  %.069.lcssa177 = phi i64 [ %203, %219 ], [ %203, %._crit_edge126 ], [ 0, %.preheader ]
  %.070.lcssa176 = phi i32 [ %198, %219 ], [ %198, %._crit_edge126 ], [ 0, %.preheader ]
  %221 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %222 = trunc nuw i8 %221 to i1
  br i1 %222, label %223, label %325

223:                                              ; preds = %._crit_edge126.thread
  %224 = 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.13)
          to label %225 unwind label %247

225:                                              ; preds = %223
  %226 = trunc i64 %indvars.iv166 to i32
  %227 = add i32 %226, 1
  %228 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %224, i32 noundef %227)
          to label %229 unwind label %247

229:                                              ; preds = %225
  %230 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %228, ptr noundef nonnull @.str.14)
          to label %231 unwind label %247

231:                                              ; preds = %229
  %232 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %230, i32 noundef %.070.lcssa176)
          to label %233 unwind label %247

233:                                              ; preds = %231
  %234 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %232, ptr noundef nonnull @.str.15)
          to label %235 unwind label %247

235:                                              ; preds = %233
  %236 = load i32, ptr %13, align 4, !tbaa !31
  %237 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %234, i32 noundef %236)
          to label %238 unwind label %247

238:                                              ; preds = %235
  %239 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %237, ptr noundef nonnull @.str.16)
          to label %240 unwind label %247

240:                                              ; preds = %238
  %241 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %239, i32 noundef %174)
          to label %242 unwind label %247

242:                                              ; preds = %240
  %243 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %241, ptr noundef nonnull @.str.17)
          to label %244 unwind label %247

244:                                              ; preds = %242
  br i1 %.066.lcssa179, label %245, label %249

245:                                              ; preds = %244
  %246 = 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.18)
          to label %249 unwind label %247

247:                                              ; preds = %323, %321, %318, %312, %310, %304, %302, %299, %297, %295, %293, %290, %285, %283, %278, %276, %273, %271, %269, %267, %264, %262, %260, %258, %256, %253, %251, %249, %245, %242, %240, %238, %235, %233, %231, %229, %225, %223
  %248 = landingpad { ptr, i32 }
          cleanup
  br label %377

249:                                              ; preds = %245, %244
  %250 = 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 %251 unwind label %247

251:                                              ; preds = %249
  %252 = 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.19)
          to label %253 unwind label %247

253:                                              ; preds = %251
  %254 = load i32, ptr %13, align 4, !tbaa !31
  %255 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %252, i32 noundef %254)
          to label %256 unwind label %247

256:                                              ; preds = %253
  %257 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %255, ptr noundef nonnull @.str.20)
          to label %258 unwind label %247

258:                                              ; preds = %256
  %259 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %257, i64 noundef %.069.lcssa177)
          to label %260 unwind label %247

260:                                              ; preds = %258
  %261 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %259, ptr noundef nonnull @.str.21)
          to label %262 unwind label %247

262:                                              ; preds = %260
  %263 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %261, i64 noundef %.068.lcssa178)
          to label %264 unwind label %247

264:                                              ; preds = %262
  %265 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %263, ptr noundef nonnull @.str.22)
          to label %266 unwind label %247

266:                                              ; preds = %264
  br i1 %.066.lcssa179, label %267, label %269

267:                                              ; preds = %266
  %268 = 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.18)
          to label %269 unwind label %247

269:                                              ; preds = %267, %266
  %270 = 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 %271 unwind label %247

271:                                              ; preds = %269
  %272 = 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.23)
          to label %273 unwind label %247

273:                                              ; preds = %271
  %274 = load i32, ptr %13, align 4, !tbaa !31
  %275 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %272, i32 noundef %274)
          to label %276 unwind label %247

276:                                              ; preds = %273
  %277 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %275, ptr noundef nonnull @.str.20)
          to label %278 unwind label %247

278:                                              ; preds = %276
  %279 = uitofp i64 %.069.lcssa177 to float
  %280 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %281 = fmul float %280, %279
  %282 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %277, float noundef %281)
          to label %283 unwind label %247

283:                                              ; preds = %278
  %284 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %282, ptr noundef nonnull @.str.21)
          to label %285 unwind label %247

285:                                              ; preds = %283
  %286 = uitofp i64 %.068.lcssa178 to float
  %287 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %288 = fmul float %287, %286
  %289 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %284, float noundef %288)
          to label %290 unwind label %247

290:                                              ; preds = %285
  %291 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %289, ptr noundef nonnull @.str.22)
          to label %292 unwind label %247

292:                                              ; preds = %290
  br i1 %.066.lcssa179, label %293, label %295

293:                                              ; preds = %292
  %294 = 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.18)
          to label %295 unwind label %247

295:                                              ; preds = %293, %292
  %296 = 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 %297 unwind label %247

297:                                              ; preds = %295
  %298 = 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.24)
          to label %299 unwind label %247

299:                                              ; preds = %297
  %300 = load i32, ptr %13, align 4, !tbaa !31
  %301 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %298, i32 noundef %300)
          to label %302 unwind label %247

302:                                              ; preds = %299
  %303 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %301, ptr noundef nonnull @.str.20)
          to label %304 unwind label %247

304:                                              ; preds = %302
  %305 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %306 = fmul float %305, %279
  %307 = fpext float %306 to double
  %308 = fdiv double %307, 1.000000e+09
  %309 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %303, double noundef %308)
          to label %310 unwind label %247

310:                                              ; preds = %304
  %311 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %309, ptr noundef nonnull @.str.21)
          to label %312 unwind label %247

312:                                              ; preds = %310
  %313 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %314 = fmul float %313, %286
  %315 = fpext float %314 to double
  %316 = fdiv double %315, 1.000000e+09
  %317 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %311, double noundef %316)
          to label %318 unwind label %247

318:                                              ; preds = %312
  %319 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %317, ptr noundef nonnull @.str.22)
          to label %320 unwind label %247

320:                                              ; preds = %318
  br i1 %.066.lcssa179, label %321, label %323

321:                                              ; preds = %320
  %322 = 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.18)
          to label %323 unwind label %247

323:                                              ; preds = %321, %320
  %324 = 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 %325 unwind label %247

325:                                              ; preds = %323, %._crit_edge126.thread
  %326 = uitofp i32 %.070.lcssa176 to double
  %327 = uitofp i32 %174 to double
  %328 = fmul double %327, %326
  %329 = fmul double %328, 0x3EB0000000000000
  %330 = uitofp i64 %220 to double
  %331 = load float, ptr @_ZN4xmem13g_ns_per_tickE, align 4, !tbaa !50
  %332 = fpext float %331 to double
  %333 = fmul double %330, %332
  %334 = fdiv double %333, 1.000000e+09
  %335 = fdiv double %329, %334
  %336 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %93, i64 noundef %indvars.iv166) #8
  store double %335, ptr %336, align 8, !tbaa !52
  %337 = load i32, ptr %13, align 4, !tbaa !31
  %.not142 = icmp eq i32 %337, 0
  br i1 %.not142, label %._crit_edge134, label %.lr.ph133

._crit_edge134:                                   ; preds = %353, %325
  call void @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  %indvars.iv.next167 = add nuw nsw i64 %indvars.iv166, 1
  %338 = load i32, ptr %88, align 8, !tbaa !43
  %339 = zext i32 %338 to i64
  %340 = icmp ult i64 %indvars.iv.next167, %339
  br i1 %340, label %.preheader105, label %._crit_edge136, !llvm.loop !53

.lr.ph133:                                        ; preds = %325, %353
  %indvars.iv163 = phi i64 [ %indvars.iv.next164, %353 ], [ 0, %325 ]
  %341 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem6ThreadESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv163) #8
  %342 = load ptr, ptr %341, align 8, !tbaa !32
  %343 = icmp eq ptr %342, null
  br i1 %343, label %345, label %344

344:                                              ; preds = %.lr.ph133
  call void @_ZN4xmem6ThreadD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %342) #8
  call void @_ZdlPvm(ptr noundef nonnull %342, i64 noundef 32) #10
  br label %345

345:                                              ; preds = %344, %.lr.ph133
  %346 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv163) #8
  %347 = load ptr, ptr %346, align 8, !tbaa !32
  %348 = icmp eq ptr %347, null
  br i1 %348, label %353, label %349

349:                                              ; preds = %345
  %350 = load ptr, ptr %347, align 8, !tbaa !54
  %351 = getelementptr inbounds i8, ptr %350, i64 16
  %352 = load ptr, ptr %351, align 8
  call void %352(ptr noundef nonnull align 8 dereferenceable(144) %347) #8
  br label %353

353:                                              ; preds = %345, %349
  %indvars.iv.next164 = add nuw nsw i64 %indvars.iv163, 1
  %354 = load i32, ptr %13, align 4, !tbaa !31
  %355 = zext i32 %354 to i64
  %356 = icmp ult i64 %indvars.iv.next164, %355
  br i1 %356, label %.lr.ph133, label %._crit_edge134, !llvm.loop !56

357:                                              ; preds = %._crit_edge136
  %358 = 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.25)
          to label %359 unwind label %61

359:                                              ; preds = %357, %._crit_edge136
  %360 = invoke noundef zeroext i1 @_ZN4xmem9Benchmark16stopPowerThreadsEv(ptr noundef nonnull align 8 dereferenceable(315) %0)
          to label %361 unwind label %61

361:                                              ; preds = %359
  %362 = load i8, ptr @_ZN4xmem9g_verboseE, align 1, !tbaa !40, !range !41, !noundef !42
  %363 = trunc nuw i8 %362 to i1
  br i1 %360, label %369, label %364

364:                                              ; preds = %361
  br i1 %363, label %365, label %.invoke191

365:                                              ; preds = %364
  %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.5)
          to label %367 unwind label %61

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

369:                                              ; preds = %361
  br i1 %363, label %.invoke191, label %374

.invoke191:                                       ; preds = %369, %364, %367
  %370 = phi ptr [ @_ZSt4cerr, %367 ], [ @_ZSt4cerr, %364 ], [ @_ZSt4cout, %369 ]
  %371 = phi ptr [ @.str.26, %367 ], [ @.str.26, %364 ], [ @.str.7, %369 ]
  %372 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %370, ptr noundef nonnull %371)
          to label %.invoke unwind label %61

.invoke:                                          ; preds = %.invoke191
  %373 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %372, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %374 unwind label %61

374:                                              ; preds = %.invoke, %369
  %375 = getelementptr inbounds i8, ptr %0, i64 313
  store i8 1, ptr %375, align 1, !tbaa !57
  invoke void @_ZN4xmem9Benchmark14computeMetricsEv(ptr noundef nonnull align 8 dereferenceable(315) %0)
          to label %376 unwind label %61

376:                                              ; preds = %374
  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 @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #8
  br label %378

377:                                              ; preds = %170, %184, %162, %143, %131, %116, %217, %247, %192, %61
  %.pn98.pn.pn.pn = phi { ptr, i32 } [ %62, %61 ], [ %171, %170 ], [ %185, %184 ], [ %.pn98, %162 ], [ %.pn96, %131 ], [ %.pn94, %143 ], [ %117, %116 ], [ %193, %192 ], [ %218, %217 ], [ %248, %247 ]
  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 @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_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 } %.pn98.pn.pn.pn

378:                                              ; preds = %51, %376, %54, %37, %27
  %.1 = phi i1 [ true, %376 ], [ false, %27 ], [ false, %51 ], [ false, %37 ], [ false, %54 ]
  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
  ret i1 %.1
}

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 #2

; 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 #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_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 #2

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

; 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 #1 align 2

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

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

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 #2

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

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

; 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 #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_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 #2

; 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 #2

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

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

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

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

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

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

; 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 #1 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 #1 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 #1 align 2

; 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: 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 @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_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 #2

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

; 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 @_ZNSt6vectorIPN4xmem10LoadWorkerESaIS2_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 = { 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 = { "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 = { 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 #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 = !{!7, !7, i64 0}
!33 = !{!6, !12, i64 40}
!34 = !{!6, !13, i64 44}
!35 = !{!6, !14, i64 48}
!36 = !{!6, !11, i64 52}
!37 = !{!6, !7, i64 8}
!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 = distinct !{!46, !39}
!47 = distinct !{!47, !39}
!48 = distinct !{!48, !39}
!49 = !{!6, !30, i64 314}
!50 = !{!51, !51, i64 0}
!51 = !{!"float", !8, i64 0}
!52 = !{!27, !27, i64 0}
!53 = distinct !{!53, !39}
!54 = !{!55, !55, i64 0}
!55 = !{!"vtable pointer", !9, i64 0}
!56 = distinct !{!56, !39}
!57 = !{!6, !30, i64 313}


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