; LLVM IR from mitdbg/deneva :: concurrency_control/maat.ll (ZN4Maat8validateEP10TxnManager)

; 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.Stats = type { ptr, ptr, i64, i64, i64, i64 }
%class.TimeTable = type { i64, ptr, %union.sem_t }
%union.sem_t = type { i64, [24 x i8] }
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<unsigned long, unsigned long, std::_Identity<unsigned long>, std::less<unsigned long>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned long, unsigned long, std::_Identity<unsigned long>, std::less<unsigned long>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"struct.std::pair" = type <{ %"struct.std::_Rb_tree_const_iterator", i8, [7 x i8] }>
%class.Maat = type { %union.sem_t }
%class.TxnManager = type { ptr, ptr, ptr, i8, ptr, i32, i8, i32, i32, i8, i64, i64, i64, i64, ptr, ptr, ptr, i64, i8, i8, ptr, ptr, i64, i64, i64, %class.TxnStats, i32, i32, i32, i8, i32, %class.Array, i32, ptr, ptr, i32, %union.sem_t }
%class.TxnStats = type { i64, i64, i64, i64, i64, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i64, i64, double, double, double, double, double, double, double, double }
%class.Array = type { ptr, i64, i64 }
%class.Stats_thd = type { [64 x i8], ptr, ptr, double, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, double, i64, double, i64, double, i64, i64, double, double, double, double, double, double, double, double, i64, double, double, double, double, double, double, double, double, i64, i64, double, i64, double, i64, double, double, double, i64, i64, i64, double, double, double, double, double, double, double, double, double, i64, ptr, ptr, double, i64, i64, double, double, double, i64, i64, i64, i64, i64, i64, i64, double, double, double, i64, i64, i64, i64, i64, i64, i64, i64, i64, double, double, double, double, double, i64, i64, double, double, i64, i64, i64, double, double, i64, i64, double, double, double, double, i64, i64, double, double, double, i64, i64, double, double, double, double, double, i64, double, double, double, double, double, double, double, double, i64, i64, i64, double, i64, double, double, i64, i64, i64, i64, i64, double, i64, i64, double, i64, double, double, i64, i64, i64, i64, i64, double, double, double, %class.StatsArr, %class.StatsArr, %class.StatsArr, %class.StatsArr, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, ptr, [64 x i8] }
%class.StatsArr = type { ptr, i64, i64, i32, %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }

@simulation = external global ptr, align 8
@stats = external global %class.Stats, align 8
@time_table = external global %class.TimeTable, align 8
@.str = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [76 x i8], align 1
@__PRETTY_FUNCTION__._ZN4Maat8validateEP10TxnManager = external hidden unnamed_addr constant [32 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN4Maat8validateEP10TxnManager(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1) #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i32, align 4
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca %"class.std::set", align 8
  %11 = alloca %"class.std::set", align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %15 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca %"struct.std::pair", align 8
  %19 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %20 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %21 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %22 = alloca i64, align 8
  %23 = alloca i32, align 4
  %24 = alloca %"struct.std::pair", align 8
  %25 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %26 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %27 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i64, align 8
  %31 = alloca %"struct.std::pair", align 8
  %32 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %33 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %34 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %35 = alloca i64, align 8
  %36 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %37 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %38 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %39 = alloca i64, align 8
  %40 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %41 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %42 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %46 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %47 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %48 = alloca i64, align 8
  %49 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %50 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %51 = call noundef i64 @_Z13get_sys_clockv()
  store i64 %51, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  %52 = getelementptr inbounds %class.Maat, ptr %50, i32 0, i32 0
  %53 = call i32 @sem_wait(ptr noundef %52)
  %54 = call noundef i64 @_Z13get_sys_clockv()
  %55 = load i64, ptr %5, align 8, !tbaa !9
  %56 = sub i64 %54, %55
  store i64 %56, ptr %6, align 8, !tbaa !9
  %57 = load i64, ptr %6, align 8, !tbaa !9
  %58 = uitofp i64 %57 to double
  %59 = load ptr, ptr %4, align 8, !tbaa !5
  %60 = getelementptr inbounds %class.TxnManager, ptr %59, i32 0, i32 25
  %61 = getelementptr inbounds %class.TxnStats, ptr %60, i32 0, i32 19
  %62 = load double, ptr %61, align 8, !tbaa !11
  %63 = fadd double %62, %58
  store double %63, ptr %61, align 8, !tbaa !11
  %64 = load i64, ptr %6, align 8, !tbaa !9
  %65 = uitofp i64 %64 to double
  %66 = load ptr, ptr %4, align 8, !tbaa !5
  %67 = getelementptr inbounds %class.TxnManager, ptr %66, i32 0, i32 25
  %68 = getelementptr inbounds %class.TxnStats, ptr %67, i32 0, i32 25
  %69 = load double, ptr %68, align 8, !tbaa !20
  %70 = fadd double %69, %65
  store double %70, ptr %68, align 8, !tbaa !20
  %71 = load ptr, ptr @simulation, align 8, !tbaa !5
  %72 = call noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %71)
  br i1 %72, label %73, label %84

73:                                               ; preds = %2
  %74 = load i64, ptr %6, align 8, !tbaa !9
  %75 = uitofp i64 %74 to double
  %76 = load ptr, ptr @stats, align 8, !tbaa !21
  %77 = load ptr, ptr %4, align 8, !tbaa !5
  %78 = call noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %77)
  %79 = getelementptr inbounds ptr, ptr %76, i64 %78
  %80 = load ptr, ptr %79, align 8, !tbaa !5
  %81 = getelementptr inbounds %class.Stats_thd, ptr %80, i32 0, i32 136
  %82 = load double, ptr %81, align 8, !tbaa !23
  %83 = fadd double %82, %75
  store double %83, ptr %81, align 8, !tbaa !23
  br label %84

84:                                               ; preds = %73, %2
  %85 = call noundef i64 @_Z13get_sys_clockv()
  store i64 %85, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  store i32 0, ptr %7, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  %86 = load ptr, ptr %4, align 8, !tbaa !5
  %87 = call noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %86)
  %88 = load ptr, ptr %4, align 8, !tbaa !5
  %89 = call noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %88)
  %90 = call noundef i64 @_ZN9TimeTable9get_lowerEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %87, i64 noundef %89)
  store i64 %90, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %91 = load ptr, ptr %4, align 8, !tbaa !5
  %92 = call noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %91)
  %93 = load ptr, ptr %4, align 8, !tbaa !5
  %94 = call noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %93)
  %95 = call noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %92, i64 noundef %94)
  store i64 %95, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr %10) #6
  call void @_ZNSt3setImSt4lessImESaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %10) #6
  call void @llvm.lifetime.start.p0(i64 48, ptr %11) #6
  call void @_ZNSt3setImSt4lessImESaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  %96 = load i64, ptr %8, align 8, !tbaa !9
  %97 = load ptr, ptr %4, align 8, !tbaa !5
  %98 = getelementptr inbounds %class.TxnManager, ptr %97, i32 0, i32 12
  %99 = load i64, ptr %98, align 8, !tbaa !29
  %100 = icmp ule i64 %96, %99
  br i1 %100, label %101, label %124

101:                                              ; preds = %84
  %102 = load ptr, ptr %4, align 8, !tbaa !5
  %103 = getelementptr inbounds %class.TxnManager, ptr %102, i32 0, i32 12
  %104 = load i64, ptr %103, align 8, !tbaa !29
  %105 = add i64 %104, 1
  store i64 %105, ptr %8, align 8, !tbaa !9
  %106 = load ptr, ptr @simulation, align 8, !tbaa !5
  %107 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %106)
          to label %108 unwind label %119

108:                                              ; preds = %101
  br i1 %107, label %109, label %123

109:                                              ; preds = %108
  %110 = load ptr, ptr @stats, align 8, !tbaa !21
  %111 = load ptr, ptr %4, align 8, !tbaa !5
  %112 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %111)
          to label %113 unwind label %119

113:                                              ; preds = %109
  %114 = getelementptr inbounds ptr, ptr %110, i64 %112
  %115 = load ptr, ptr %114, align 8, !tbaa !5
  %116 = getelementptr inbounds %class.Stats_thd, ptr %115, i32 0, i32 137
  %117 = load i64, ptr %116, align 8, !tbaa !30
  %118 = add i64 %117, 1
  store i64 %118, ptr %116, align 8, !tbaa !30
  br label %123

119:                                              ; preds = %704, %698, %696, %686, %682, %680, %677, %674, %672, %669, %666, %655, %651, %637, %633, %432, %429, %426, %424, %421, %418, %224, %216, %109, %101
  %120 = landingpad { ptr, i32 }
          cleanup
  %121 = extractvalue { ptr, i32 } %120, 0
  store ptr %121, ptr %12, align 8
  %122 = extractvalue { ptr, i32 } %120, 1
  store i32 %122, ptr %13, align 4
  br label %734

123:                                              ; preds = %113, %108
  br label %124

124:                                              ; preds = %123, %84
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %125 = load ptr, ptr %4, align 8, !tbaa !5
  %126 = getelementptr inbounds %class.TxnManager, ptr %125, i32 0, i32 15
  %127 = load ptr, ptr %126, align 8, !tbaa !31
  %128 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %127) #6
  %129 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %14, i32 0, i32 0
  store ptr %128, ptr %129, align 8
  br label %130

130:                                              ; preds = %206, %124
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %131 = load ptr, ptr %4, align 8, !tbaa !5
  %132 = getelementptr inbounds %class.TxnManager, ptr %131, i32 0, i32 15
  %133 = load ptr, ptr %132, align 8, !tbaa !31
  %134 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %133) #6
  %135 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %15, i32 0, i32 0
  store ptr %134, ptr %135, align 8
  %136 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br i1 %136, label %138, label %137

137:                                              ; preds = %130
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %210

138:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %139 = load ptr, ptr %4, align 8, !tbaa !5
  %140 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %139)
          to label %141 unwind label %176

141:                                              ; preds = %138
  %142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #6
  %143 = load i64, ptr %142, align 8, !tbaa !9
  %144 = invoke noundef i64 @_ZN9TimeTable9get_lowerEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %140, i64 noundef %143)
          to label %145 unwind label %176

145:                                              ; preds = %141
  store i64 %144, ptr %16, align 8, !tbaa !9
  %146 = load i64, ptr %9, align 8, !tbaa !9
  %147 = load i64, ptr %16, align 8, !tbaa !9
  %148 = icmp uge i64 %146, %147
  br i1 %148, label %149, label %205

149:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  %150 = load ptr, ptr %4, align 8, !tbaa !5
  %151 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %150)
          to label %152 unwind label %180

152:                                              ; preds = %149
  %153 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #6
  %154 = load i64, ptr %153, align 8, !tbaa !9
  %155 = invoke noundef i32 @_ZN9TimeTable9get_stateEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %151, i64 noundef %154)
          to label %156 unwind label %180

156:                                              ; preds = %152
  store i32 %155, ptr %17, align 4, !tbaa !32
  %157 = load i32, ptr %17, align 4, !tbaa !32
  %158 = icmp eq i32 %157, 1
  br i1 %158, label %162, label %159

159:                                              ; preds = %156
  %160 = load i32, ptr %17, align 4, !tbaa !32
  %161 = icmp eq i32 %160, 2
  br i1 %161, label %162, label %193

162:                                              ; preds = %159, %156
  %163 = load ptr, ptr @simulation, align 8, !tbaa !5
  %164 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %163)
          to label %165 unwind label %180

165:                                              ; preds = %162
  br i1 %164, label %166, label %184

166:                                              ; preds = %165
  %167 = load ptr, ptr @stats, align 8, !tbaa !21
  %168 = load ptr, ptr %4, align 8, !tbaa !5
  %169 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %168)
          to label %170 unwind label %180

170:                                              ; preds = %166
  %171 = getelementptr inbounds ptr, ptr %167, i64 %169
  %172 = load ptr, ptr %171, align 8, !tbaa !5
  %173 = getelementptr inbounds %class.Stats_thd, ptr %172, i32 0, i32 138
  %174 = load i64, ptr %173, align 8, !tbaa !34
  %175 = add i64 %174, 1
  store i64 %175, ptr %173, align 8, !tbaa !34
  br label %184

176:                                              ; preds = %141, %138
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %12, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %13, align 4
  br label %209

180:                                              ; preds = %196, %166, %162, %152, %149
  %181 = landingpad { ptr, i32 }
          cleanup
  %182 = extractvalue { ptr, i32 } %181, 0
  store ptr %182, ptr %12, align 8
  %183 = extractvalue { ptr, i32 } %181, 1
  store i32 %183, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %209

184:                                              ; preds = %170, %165
  %185 = load i64, ptr %16, align 8, !tbaa !9
  %186 = icmp ugt i64 %185, 0
  br i1 %186, label %187, label %190

187:                                              ; preds = %184
  %188 = load i64, ptr %16, align 8, !tbaa !9
  %189 = sub i64 %188, 1
  store i64 %189, ptr %9, align 8, !tbaa !9
  br label %192

190:                                              ; preds = %184
  %191 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %191, ptr %9, align 8, !tbaa !9
  br label %192

192:                                              ; preds = %190, %187
  br label %193

193:                                              ; preds = %192, %159
  %194 = load i32, ptr %17, align 4, !tbaa !32
  %195 = icmp eq i32 %194, 0
  br i1 %195, label %196, label %204

196:                                              ; preds = %193
  %197 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #6
  %198 = invoke { ptr, i8 } @_ZNSt3setImSt4lessImESaImEE6insertERKm(ptr noundef nonnull align 8 dereferenceable(48) %10, ptr noundef nonnull align 8 dereferenceable(8) %197)
          to label %199 unwind label %180

199:                                              ; preds = %196
  %200 = getelementptr inbounds { ptr, i8 }, ptr %18, i32 0, i32 0
  %201 = extractvalue { ptr, i8 } %198, 0
  store ptr %201, ptr %200, align 8
  %202 = getelementptr inbounds { ptr, i8 }, ptr %18, i32 0, i32 1
  %203 = extractvalue { ptr, i8 } %198, 1
  store i8 %203, ptr %202, align 8
  br label %204

204:                                              ; preds = %199, %193
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %205

205:                                              ; preds = %204, %145
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  br label %206

206:                                              ; preds = %205
  %207 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %14, i32 noundef 0) #6
  %208 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %19, i32 0, i32 0
  store ptr %207, ptr %208, align 8
  br label %130, !llvm.loop !35

209:                                              ; preds = %180, %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %734

210:                                              ; preds = %137
  %211 = load i64, ptr %8, align 8, !tbaa !9
  %212 = load ptr, ptr %4, align 8, !tbaa !5
  %213 = getelementptr inbounds %class.TxnManager, ptr %212, i32 0, i32 13
  %214 = load i64, ptr %213, align 8, !tbaa !37
  %215 = icmp ule i64 %211, %214
  br i1 %215, label %216, label %235

216:                                              ; preds = %210
  %217 = load ptr, ptr %4, align 8, !tbaa !5
  %218 = getelementptr inbounds %class.TxnManager, ptr %217, i32 0, i32 13
  %219 = load i64, ptr %218, align 8, !tbaa !37
  %220 = add i64 %219, 1
  store i64 %220, ptr %8, align 8, !tbaa !9
  %221 = load ptr, ptr @simulation, align 8, !tbaa !5
  %222 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %221)
          to label %223 unwind label %119

223:                                              ; preds = %216
  br i1 %222, label %224, label %234

224:                                              ; preds = %223
  %225 = load ptr, ptr @stats, align 8, !tbaa !21
  %226 = load ptr, ptr %4, align 8, !tbaa !5
  %227 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %226)
          to label %228 unwind label %119

228:                                              ; preds = %224
  %229 = getelementptr inbounds ptr, ptr %225, i64 %227
  %230 = load ptr, ptr %229, align 8, !tbaa !5
  %231 = getelementptr inbounds %class.Stats_thd, ptr %230, i32 0, i32 139
  %232 = load i64, ptr %231, align 8, !tbaa !38
  %233 = add i64 %232, 1
  store i64 %233, ptr %231, align 8, !tbaa !38
  br label %234

234:                                              ; preds = %228, %223
  br label %235

235:                                              ; preds = %234, %210
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %236 = load ptr, ptr %4, align 8, !tbaa !5
  %237 = getelementptr inbounds %class.TxnManager, ptr %236, i32 0, i32 14
  %238 = load ptr, ptr %237, align 8, !tbaa !39
  %239 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %238) #6
  %240 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %20, i32 0, i32 0
  store ptr %239, ptr %240, align 8
  br label %241

241:                                              ; preds = %317, %235
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %242 = load ptr, ptr %4, align 8, !tbaa !5
  %243 = getelementptr inbounds %class.TxnManager, ptr %242, i32 0, i32 14
  %244 = load ptr, ptr %243, align 8, !tbaa !39
  %245 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %244) #6
  %246 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %21, i32 0, i32 0
  store ptr %245, ptr %246, align 8
  %247 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br i1 %247, label %249, label %248

248:                                              ; preds = %241
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %321

249:                                              ; preds = %241
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %250 = load ptr, ptr %4, align 8, !tbaa !5
  %251 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %250)
          to label %252 unwind label %287

252:                                              ; preds = %249
  %253 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #6
  %254 = load i64, ptr %253, align 8, !tbaa !9
  %255 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %251, i64 noundef %254)
          to label %256 unwind label %287

256:                                              ; preds = %252
  store i64 %255, ptr %22, align 8, !tbaa !9
  %257 = load i64, ptr %8, align 8, !tbaa !9
  %258 = load i64, ptr %22, align 8, !tbaa !9
  %259 = icmp ule i64 %257, %258
  br i1 %259, label %260, label %316

260:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  %261 = load ptr, ptr %4, align 8, !tbaa !5
  %262 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %261)
          to label %263 unwind label %291

263:                                              ; preds = %260
  %264 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #6
  %265 = load i64, ptr %264, align 8, !tbaa !9
  %266 = invoke noundef i32 @_ZN9TimeTable9get_stateEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %262, i64 noundef %265)
          to label %267 unwind label %291

267:                                              ; preds = %263
  store i32 %266, ptr %23, align 4, !tbaa !32
  %268 = load i32, ptr %23, align 4, !tbaa !32
  %269 = icmp eq i32 %268, 1
  br i1 %269, label %273, label %270

270:                                              ; preds = %267
  %271 = load i32, ptr %23, align 4, !tbaa !32
  %272 = icmp eq i32 %271, 2
  br i1 %272, label %273, label %304

273:                                              ; preds = %270, %267
  %274 = load ptr, ptr @simulation, align 8, !tbaa !5
  %275 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %274)
          to label %276 unwind label %291

276:                                              ; preds = %273
  br i1 %275, label %277, label %295

277:                                              ; preds = %276
  %278 = load ptr, ptr @stats, align 8, !tbaa !21
  %279 = load ptr, ptr %4, align 8, !tbaa !5
  %280 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %279)
          to label %281 unwind label %291

281:                                              ; preds = %277
  %282 = getelementptr inbounds ptr, ptr %278, i64 %280
  %283 = load ptr, ptr %282, align 8, !tbaa !5
  %284 = getelementptr inbounds %class.Stats_thd, ptr %283, i32 0, i32 140
  %285 = load i64, ptr %284, align 8, !tbaa !40
  %286 = add i64 %285, 1
  store i64 %286, ptr %284, align 8, !tbaa !40
  br label %295

287:                                              ; preds = %252, %249
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %12, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %13, align 4
  br label %320

291:                                              ; preds = %307, %277, %273, %263, %260
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %12, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %320

295:                                              ; preds = %281, %276
  %296 = load i64, ptr %22, align 8, !tbaa !9
  %297 = icmp ult i64 %296, -1
  br i1 %297, label %298, label %301

298:                                              ; preds = %295
  %299 = load i64, ptr %22, align 8, !tbaa !9
  %300 = add i64 %299, 1
  store i64 %300, ptr %8, align 8, !tbaa !9
  br label %303

301:                                              ; preds = %295
  %302 = load i64, ptr %22, align 8, !tbaa !9
  store i64 %302, ptr %8, align 8, !tbaa !9
  br label %303

303:                                              ; preds = %301, %298
  br label %304

304:                                              ; preds = %303, %270
  %305 = load i32, ptr %23, align 4, !tbaa !32
  %306 = icmp eq i32 %305, 0
  br i1 %306, label %307, label %315

307:                                              ; preds = %304
  %308 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #6
  %309 = invoke { ptr, i8 } @_ZNSt3setImSt4lessImESaImEE6insertERKm(ptr noundef nonnull align 8 dereferenceable(48) %11, ptr noundef nonnull align 8 dereferenceable(8) %308)
          to label %310 unwind label %291

310:                                              ; preds = %307
  %311 = getelementptr inbounds { ptr, i8 }, ptr %24, i32 0, i32 0
  %312 = extractvalue { ptr, i8 } %309, 0
  store ptr %312, ptr %311, align 8
  %313 = getelementptr inbounds { ptr, i8 }, ptr %24, i32 0, i32 1
  %314 = extractvalue { ptr, i8 } %309, 1
  store i8 %314, ptr %313, align 8
  br label %315

315:                                              ; preds = %310, %304
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %316

316:                                              ; preds = %315, %256
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %317

317:                                              ; preds = %316
  %318 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %20, i32 noundef 0) #6
  %319 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %25, i32 0, i32 0
  store ptr %318, ptr %319, align 8
  br label %241, !llvm.loop !41

320:                                              ; preds = %291, %287
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %734

321:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %322 = load ptr, ptr %4, align 8, !tbaa !5
  %323 = getelementptr inbounds %class.TxnManager, ptr %322, i32 0, i32 16
  %324 = load ptr, ptr %323, align 8, !tbaa !42
  %325 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %324) #6
  %326 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %26, i32 0, i32 0
  store ptr %325, ptr %326, align 8
  br label %327

327:                                              ; preds = %410, %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %328 = load ptr, ptr %4, align 8, !tbaa !5
  %329 = getelementptr inbounds %class.TxnManager, ptr %328, i32 0, i32 16
  %330 = load ptr, ptr %329, align 8, !tbaa !42
  %331 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %330) #6
  %332 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %27, i32 0, i32 0
  store ptr %331, ptr %332, align 8
  %333 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  br i1 %333, label %335, label %334

334:                                              ; preds = %327
  store i32 8, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %414

335:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %336)
          to label %338 unwind label %353

338:                                              ; preds = %335
  %339 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #6
  %340 = load i64, ptr %339, align 8, !tbaa !9
  %341 = invoke noundef i32 @_ZN9TimeTable9get_stateEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %337, i64 noundef %340)
          to label %342 unwind label %353

342:                                              ; preds = %338
  store i32 %341, ptr %29, align 4, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %343 = load ptr, ptr %4, align 8, !tbaa !5
  %344 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %343)
          to label %345 unwind label %357

345:                                              ; preds = %342
  %346 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #6
  %347 = load i64, ptr %346, align 8, !tbaa !9
  %348 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %344, i64 noundef %347)
          to label %349 unwind label %357

349:                                              ; preds = %345
  store i64 %348, ptr %30, align 8, !tbaa !9
  %350 = load i32, ptr %29, align 4, !tbaa !32
  %351 = icmp eq i32 %350, 3
  br i1 %351, label %352, label %361

352:                                              ; preds = %349
  store i32 10, ptr %28, align 4
  br label %407

353:                                              ; preds = %338, %335
  %354 = landingpad { ptr, i32 }
          cleanup
  %355 = extractvalue { ptr, i32 } %354, 0
  store ptr %355, ptr %12, align 8
  %356 = extractvalue { ptr, i32 } %354, 1
  store i32 %356, ptr %13, align 4
  br label %413

357:                                              ; preds = %398, %375, %371, %345, %342
  %358 = landingpad { ptr, i32 }
          cleanup
  %359 = extractvalue { ptr, i32 } %358, 0
  store ptr %359, ptr %12, align 8
  %360 = extractvalue { ptr, i32 } %358, 1
  store i32 %360, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %413

361:                                              ; preds = %349
  %362 = load i32, ptr %29, align 4, !tbaa !32
  %363 = icmp eq i32 %362, 1
  br i1 %363, label %367, label %364

364:                                              ; preds = %361
  %365 = load i32, ptr %29, align 4, !tbaa !32
  %366 = icmp eq i32 %365, 2
  br i1 %366, label %367, label %395

367:                                              ; preds = %364, %361
  %368 = load i64, ptr %8, align 8, !tbaa !9
  %369 = load i64, ptr %30, align 8, !tbaa !9
  %370 = icmp ule i64 %368, %369
  br i1 %370, label %371, label %394

371:                                              ; preds = %367
  %372 = load ptr, ptr @simulation, align 8, !tbaa !5
  %373 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %372)
          to label %374 unwind label %357

374:                                              ; preds = %371
  br i1 %373, label %375, label %385

375:                                              ; preds = %374
  %376 = load ptr, ptr @stats, align 8, !tbaa !21
  %377 = load ptr, ptr %4, align 8, !tbaa !5
  %378 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %377)
          to label %379 unwind label %357

379:                                              ; preds = %375
  %380 = getelementptr inbounds ptr, ptr %376, i64 %378
  %381 = load ptr, ptr %380, align 8, !tbaa !5
  %382 = getelementptr inbounds %class.Stats_thd, ptr %381, i32 0, i32 141
  %383 = load i64, ptr %382, align 8, !tbaa !43
  %384 = add i64 %383, 1
  store i64 %384, ptr %382, align 8, !tbaa !43
  br label %385

385:                                              ; preds = %379, %374
  %386 = load i64, ptr %30, align 8, !tbaa !9
  %387 = icmp ult i64 %386, -1
  br i1 %387, label %388, label %391

388:                                              ; preds = %385
  %389 = load i64, ptr %30, align 8, !tbaa !9
  %390 = add i64 %389, 1
  store i64 %390, ptr %8, align 8, !tbaa !9
  br label %393

391:                                              ; preds = %385
  %392 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %392, ptr %8, align 8, !tbaa !9
  br label %393

393:                                              ; preds = %391, %388
  br label %394

394:                                              ; preds = %393, %367
  br label %395

395:                                              ; preds = %394, %364
  %396 = load i32, ptr %29, align 4, !tbaa !32
  %397 = icmp eq i32 %396, 0
  br i1 %397, label %398, label %406

398:                                              ; preds = %395
  %399 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #6
  %400 = invoke { ptr, i8 } @_ZNSt3setImSt4lessImESaImEE6insertERKm(ptr noundef nonnull align 8 dereferenceable(48) %10, ptr noundef nonnull align 8 dereferenceable(8) %399)
          to label %401 unwind label %357

401:                                              ; preds = %398
  %402 = getelementptr inbounds { ptr, i8 }, ptr %31, i32 0, i32 0
  %403 = extractvalue { ptr, i8 } %400, 0
  store ptr %403, ptr %402, align 8
  %404 = getelementptr inbounds { ptr, i8 }, ptr %31, i32 0, i32 1
  %405 = extractvalue { ptr, i8 } %400, 1
  store i8 %405, ptr %404, align 8
  br label %406

406:                                              ; preds = %401, %395
  store i32 0, ptr %28, align 4
  br label %407

407:                                              ; preds = %406, %352
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  %408 = load i32, ptr %28, align 4
  switch i32 %408, label %740 [
    i32 0, label %409
    i32 10, label %410
  ]

409:                                              ; preds = %407
  br label %410

410:                                              ; preds = %409, %407
  %411 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %26, i32 noundef 0) #6
  %412 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %32, i32 0, i32 0
  store ptr %411, ptr %412, align 8
  br label %327, !llvm.loop !44

413:                                              ; preds = %357, %353
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %734

414:                                              ; preds = %334
  %415 = load i64, ptr %8, align 8, !tbaa !9
  %416 = load i64, ptr %9, align 8, !tbaa !9
  %417 = icmp uge i64 %415, %416
  br i1 %417, label %418, label %426

418:                                              ; preds = %414
  %419 = load ptr, ptr %4, align 8, !tbaa !5
  %420 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %419)
          to label %421 unwind label %119

421:                                              ; preds = %418
  %422 = load ptr, ptr %4, align 8, !tbaa !5
  %423 = invoke noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %422)
          to label %424 unwind label %119

424:                                              ; preds = %421
  invoke void @_ZN9TimeTable9set_stateEmm9MAATState(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %420, i64 noundef %423, i32 noundef 3)
          to label %425 unwind label %119

425:                                              ; preds = %424
  store i32 2, ptr %7, align 4, !tbaa !27
  br label %666

426:                                              ; preds = %414
  %427 = load ptr, ptr %4, align 8, !tbaa !5
  %428 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %427)
          to label %429 unwind label %119

429:                                              ; preds = %426
  %430 = load ptr, ptr %4, align 8, !tbaa !5
  %431 = invoke noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %430)
          to label %432 unwind label %119

432:                                              ; preds = %429
  invoke void @_ZN9TimeTable9set_stateEmm9MAATState(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %428, i64 noundef %431, i32 noundef 1)
          to label %433 unwind label %119

433:                                              ; preds = %432
  store i32 0, ptr %7, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %434 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  %435 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %33, i32 0, i32 0
  store ptr %434, ptr %435, align 8
  br label %436

436:                                              ; preds = %465, %433
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %437 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  %438 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %34, i32 0, i32 0
  store ptr %437, ptr %438, align 8
  %439 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br i1 %439, label %441, label %440

440:                                              ; preds = %436
  store i32 11, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %468

441:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %442 = load ptr, ptr %4, align 8, !tbaa !5
  %443 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %442)
          to label %444 unwind label %460

444:                                              ; preds = %441
  %445 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #6
  %446 = load i64, ptr %445, align 8, !tbaa !9
  %447 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %443, i64 noundef %446)
          to label %448 unwind label %460

448:                                              ; preds = %444
  store i64 %447, ptr %35, align 8, !tbaa !9
  %449 = load i64, ptr %35, align 8, !tbaa !9
  %450 = load i64, ptr %8, align 8, !tbaa !9
  %451 = icmp ugt i64 %449, %450
  br i1 %451, label %452, label %464

452:                                              ; preds = %448
  %453 = load i64, ptr %35, align 8, !tbaa !9
  %454 = load i64, ptr %9, align 8, !tbaa !9
  %455 = sub i64 %454, 1
  %456 = icmp ult i64 %453, %455
  br i1 %456, label %457, label %464

457:                                              ; preds = %452
  %458 = load i64, ptr %35, align 8, !tbaa !9
  %459 = add i64 %458, 1
  store i64 %459, ptr %8, align 8, !tbaa !9
  br label %464

460:                                              ; preds = %444, %441
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %12, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %734

464:                                              ; preds = %457, %452, %448
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %465

465:                                              ; preds = %464
  %466 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %33, i32 noundef 0) #6
  %467 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %36, i32 0, i32 0
  store ptr %466, ptr %467, align 8
  br label %436, !llvm.loop !45

468:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %469 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  %470 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %37, i32 0, i32 0
  store ptr %469, ptr %470, align 8
  br label %471

471:                                              ; preds = %513, %468
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %472 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  %473 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %38, i32 0, i32 0
  store ptr %472, ptr %473, align 8
  %474 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br i1 %474, label %476, label %475

475:                                              ; preds = %471
  store i32 14, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %516

476:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %477 = load ptr, ptr %4, align 8, !tbaa !5
  %478 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %477)
          to label %479 unwind label %499

479:                                              ; preds = %476
  %480 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #6
  %481 = load i64, ptr %480, align 8, !tbaa !9
  %482 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %478, i64 noundef %481)
          to label %483 unwind label %499

483:                                              ; preds = %479
  store i64 %482, ptr %39, align 8, !tbaa !9
  %484 = load i64, ptr %39, align 8, !tbaa !9
  %485 = load i64, ptr %8, align 8, !tbaa !9
  %486 = icmp uge i64 %484, %485
  br i1 %486, label %487, label %512

487:                                              ; preds = %483
  %488 = load i64, ptr %8, align 8, !tbaa !9
  %489 = icmp ugt i64 %488, 0
  br i1 %489, label %490, label %503

490:                                              ; preds = %487
  %491 = load ptr, ptr %4, align 8, !tbaa !5
  %492 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %491)
          to label %493 unwind label %499

493:                                              ; preds = %490
  %494 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #6
  %495 = load i64, ptr %494, align 8, !tbaa !9
  %496 = load i64, ptr %8, align 8, !tbaa !9
  %497 = sub i64 %496, 1
  invoke void @_ZN9TimeTable9set_upperEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %492, i64 noundef %495, i64 noundef %497)
          to label %498 unwind label %499

498:                                              ; preds = %493
  br label %511

499:                                              ; preds = %506, %503, %493, %490, %479, %476
  %500 = landingpad { ptr, i32 }
          cleanup
  %501 = extractvalue { ptr, i32 } %500, 0
  store ptr %501, ptr %12, align 8
  %502 = extractvalue { ptr, i32 } %500, 1
  store i32 %502, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %734

503:                                              ; preds = %487
  %504 = load ptr, ptr %4, align 8, !tbaa !5
  %505 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %504)
          to label %506 unwind label %499

506:                                              ; preds = %503
  %507 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #6
  %508 = load i64, ptr %507, align 8, !tbaa !9
  %509 = load i64, ptr %8, align 8, !tbaa !9
  invoke void @_ZN9TimeTable9set_upperEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %505, i64 noundef %508, i64 noundef %509)
          to label %510 unwind label %499

510:                                              ; preds = %506
  br label %511

511:                                              ; preds = %510, %498
  br label %512

512:                                              ; preds = %511, %483
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  br label %513

513:                                              ; preds = %512
  %514 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %37, i32 noundef 0) #6
  %515 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %40, i32 0, i32 0
  store ptr %514, ptr %515, align 8
  br label %471, !llvm.loop !46

516:                                              ; preds = %475
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  %517 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %10) #6
  %518 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %41, i32 0, i32 0
  store ptr %517, ptr %518, align 8
  br label %519

519:                                              ; preds = %574, %516
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %520 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %10) #6
  %521 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %42, i32 0, i32 0
  store ptr %520, ptr %521, align 8
  %522 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br i1 %522, label %524, label %523

523:                                              ; preds = %519
  store i32 17, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  br label %578

524:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  %525 = load ptr, ptr %4, align 8, !tbaa !5
  %526 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %525)
          to label %527 unwind label %553

527:                                              ; preds = %524
  %528 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #6
  %529 = load i64, ptr %528, align 8, !tbaa !9
  %530 = invoke noundef i64 @_ZN9TimeTable9get_lowerEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %526, i64 noundef %529)
          to label %531 unwind label %553

531:                                              ; preds = %527
  store i64 %530, ptr %43, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %532 = load ptr, ptr %4, align 8, !tbaa !5
  %533 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %532)
          to label %534 unwind label %557

534:                                              ; preds = %531
  %535 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #6
  %536 = load i64, ptr %535, align 8, !tbaa !9
  %537 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %533, i64 noundef %536)
          to label %538 unwind label %557

538:                                              ; preds = %534
  store i64 %537, ptr %44, align 8, !tbaa !9
  %539 = load i64, ptr %44, align 8, !tbaa !9
  %540 = icmp ne i64 %539, -1
  br i1 %540, label %541, label %561

541:                                              ; preds = %538
  %542 = load i64, ptr %44, align 8, !tbaa !9
  %543 = load i64, ptr %8, align 8, !tbaa !9
  %544 = add i64 %543, 2
  %545 = icmp ugt i64 %542, %544
  br i1 %545, label %546, label %561

546:                                              ; preds = %541
  %547 = load i64, ptr %44, align 8, !tbaa !9
  %548 = load i64, ptr %9, align 8, !tbaa !9
  %549 = icmp ult i64 %547, %548
  br i1 %549, label %550, label %561

550:                                              ; preds = %546
  %551 = load i64, ptr %44, align 8, !tbaa !9
  %552 = sub i64 %551, 2
  store i64 %552, ptr %9, align 8, !tbaa !9
  br label %561

553:                                              ; preds = %527, %524
  %554 = landingpad { ptr, i32 }
          cleanup
  %555 = extractvalue { ptr, i32 } %554, 0
  store ptr %555, ptr %12, align 8
  %556 = extractvalue { ptr, i32 } %554, 1
  store i32 %556, ptr %13, align 4
  br label %577

557:                                              ; preds = %534, %531
  %558 = landingpad { ptr, i32 }
          cleanup
  %559 = extractvalue { ptr, i32 } %558, 0
  store ptr %559, ptr %12, align 8
  %560 = extractvalue { ptr, i32 } %558, 1
  store i32 %560, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  br label %577

561:                                              ; preds = %550, %546, %541, %538
  %562 = load i64, ptr %43, align 8, !tbaa !9
  %563 = load i64, ptr %9, align 8, !tbaa !9
  %564 = icmp ult i64 %562, %563
  br i1 %564, label %565, label %573

565:                                              ; preds = %561
  %566 = load i64, ptr %43, align 8, !tbaa !9
  %567 = load i64, ptr %8, align 8, !tbaa !9
  %568 = add i64 %567, 1
  %569 = icmp ugt i64 %566, %568
  br i1 %569, label %570, label %573

570:                                              ; preds = %565
  %571 = load i64, ptr %43, align 8, !tbaa !9
  %572 = sub i64 %571, 1
  store i64 %572, ptr %9, align 8, !tbaa !9
  br label %573

573:                                              ; preds = %570, %565, %561
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  br label %574

574:                                              ; preds = %573
  %575 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %41, i32 noundef 0) #6
  %576 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %45, i32 0, i32 0
  store ptr %575, ptr %576, align 8
  br label %519, !llvm.loop !47

577:                                              ; preds = %557, %553
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  br label %734

578:                                              ; preds = %523
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %579 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %10) #6
  %580 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %46, i32 0, i32 0
  store ptr %579, ptr %580, align 8
  br label %581

581:                                              ; preds = %623, %578
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %582 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %10) #6
  %583 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %47, i32 0, i32 0
  store ptr %582, ptr %583, align 8
  %584 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  br i1 %584, label %586, label %585

585:                                              ; preds = %581
  store i32 20, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  br label %626

586:                                              ; preds = %581
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #6
  %587 = load ptr, ptr %4, align 8, !tbaa !5
  %588 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %587)
          to label %589 unwind label %609

589:                                              ; preds = %586
  %590 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #6
  %591 = load i64, ptr %590, align 8, !tbaa !9
  %592 = invoke noundef i64 @_ZN9TimeTable9get_lowerEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %588, i64 noundef %591)
          to label %593 unwind label %609

593:                                              ; preds = %589
  store i64 %592, ptr %48, align 8, !tbaa !9
  %594 = load i64, ptr %48, align 8, !tbaa !9
  %595 = load i64, ptr %9, align 8, !tbaa !9
  %596 = icmp ule i64 %594, %595
  br i1 %596, label %597, label %622

597:                                              ; preds = %593
  %598 = load i64, ptr %9, align 8, !tbaa !9
  %599 = icmp ult i64 %598, -1
  br i1 %599, label %600, label %613

600:                                              ; preds = %597
  %601 = load ptr, ptr %4, align 8, !tbaa !5
  %602 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %601)
          to label %603 unwind label %609

603:                                              ; preds = %600
  %604 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #6
  %605 = load i64, ptr %604, align 8, !tbaa !9
  %606 = load i64, ptr %9, align 8, !tbaa !9
  %607 = add i64 %606, 1
  invoke void @_ZN9TimeTable9set_lowerEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %602, i64 noundef %605, i64 noundef %607)
          to label %608 unwind label %609

608:                                              ; preds = %603
  br label %621

609:                                              ; preds = %616, %613, %603, %600, %589, %586
  %610 = landingpad { ptr, i32 }
          cleanup
  %611 = extractvalue { ptr, i32 } %610, 0
  store ptr %611, ptr %12, align 8
  %612 = extractvalue { ptr, i32 } %610, 1
  store i32 %612, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  br label %734

613:                                              ; preds = %597
  %614 = load ptr, ptr %4, align 8, !tbaa !5
  %615 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %614)
          to label %616 unwind label %609

616:                                              ; preds = %613
  %617 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #6
  %618 = load i64, ptr %617, align 8, !tbaa !9
  %619 = load i64, ptr %9, align 8, !tbaa !9
  invoke void @_ZN9TimeTable9set_lowerEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %615, i64 noundef %618, i64 noundef %619)
          to label %620 unwind label %609

620:                                              ; preds = %616
  br label %621

621:                                              ; preds = %620, %608
  br label %622

622:                                              ; preds = %621, %593
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  br label %623

623:                                              ; preds = %622
  %624 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %46, i32 noundef 0) #6
  %625 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %49, i32 0, i32 0
  store ptr %624, ptr %625, align 8
  br label %581, !llvm.loop !48

626:                                              ; preds = %585
  %627 = load i64, ptr %8, align 8, !tbaa !9
  %628 = load i64, ptr %9, align 8, !tbaa !9
  %629 = icmp ult i64 %627, %628
  br i1 %629, label %630, label %631

630:                                              ; preds = %626
  br label %633

631:                                              ; preds = %626
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 159, ptr noundef @__PRETTY_FUNCTION__._ZN4Maat8validateEP10TxnManager) #7
  unreachable

632:                                              ; No predecessors!
  br label %633

633:                                              ; preds = %632, %630
  %634 = load ptr, ptr @simulation, align 8, !tbaa !5
  %635 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %634)
          to label %636 unwind label %119

636:                                              ; preds = %633
  br i1 %635, label %637, label %651

637:                                              ; preds = %636
  %638 = load i64, ptr %9, align 8, !tbaa !9
  %639 = load i64, ptr %8, align 8, !tbaa !9
  %640 = sub i64 %638, %639
  %641 = uitofp i64 %640 to double
  %642 = load ptr, ptr @stats, align 8, !tbaa !21
  %643 = load ptr, ptr %4, align 8, !tbaa !5
  %644 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %643)
          to label %645 unwind label %119

645:                                              ; preds = %637
  %646 = getelementptr inbounds ptr, ptr %642, i64 %644
  %647 = load ptr, ptr %646, align 8, !tbaa !5
  %648 = getelementptr inbounds %class.Stats_thd, ptr %647, i32 0, i32 142
  %649 = load double, ptr %648, align 8, !tbaa !49
  %650 = fadd double %649, %641
  store double %650, ptr %648, align 8, !tbaa !49
  br label %651

651:                                              ; preds = %645, %636
  %652 = load ptr, ptr @simulation, align 8, !tbaa !5
  %653 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %652)
          to label %654 unwind label %119

654:                                              ; preds = %651
  br i1 %653, label %655, label %665

655:                                              ; preds = %654
  %656 = load ptr, ptr @stats, align 8, !tbaa !21
  %657 = load ptr, ptr %4, align 8, !tbaa !5
  %658 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %657)
          to label %659 unwind label %119

659:                                              ; preds = %655
  %660 = getelementptr inbounds ptr, ptr %656, i64 %658
  %661 = load ptr, ptr %660, align 8, !tbaa !5
  %662 = getelementptr inbounds %class.Stats_thd, ptr %661, i32 0, i32 143
  %663 = load i64, ptr %662, align 8, !tbaa !50
  %664 = add i64 %663, 1
  store i64 %664, ptr %662, align 8, !tbaa !50
  br label %665

665:                                              ; preds = %659, %654
  br label %666

666:                                              ; preds = %665, %425
  %667 = load ptr, ptr %4, align 8, !tbaa !5
  %668 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %667)
          to label %669 unwind label %119

669:                                              ; preds = %666
  %670 = load ptr, ptr %4, align 8, !tbaa !5
  %671 = invoke noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %670)
          to label %672 unwind label %119

672:                                              ; preds = %669
  %673 = load i64, ptr %8, align 8, !tbaa !9
  invoke void @_ZN9TimeTable9set_lowerEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %668, i64 noundef %671, i64 noundef %673)
          to label %674 unwind label %119

674:                                              ; preds = %672
  %675 = load ptr, ptr %4, align 8, !tbaa !5
  %676 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %675)
          to label %677 unwind label %119

677:                                              ; preds = %674
  %678 = load ptr, ptr %4, align 8, !tbaa !5
  %679 = invoke noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %678)
          to label %680 unwind label %119

680:                                              ; preds = %677
  %681 = load i64, ptr %9, align 8, !tbaa !9
  invoke void @_ZN9TimeTable9set_upperEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %676, i64 noundef %679, i64 noundef %681)
          to label %682 unwind label %119

682:                                              ; preds = %680
  %683 = load ptr, ptr @simulation, align 8, !tbaa !5
  %684 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %683)
          to label %685 unwind label %119

685:                                              ; preds = %682
  br i1 %684, label %686, label %696

686:                                              ; preds = %685
  %687 = load ptr, ptr @stats, align 8, !tbaa !21
  %688 = load ptr, ptr %4, align 8, !tbaa !5
  %689 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %688)
          to label %690 unwind label %119

690:                                              ; preds = %686
  %691 = getelementptr inbounds ptr, ptr %687, i64 %689
  %692 = load ptr, ptr %691, align 8, !tbaa !5
  %693 = getelementptr inbounds %class.Stats_thd, ptr %692, i32 0, i32 134
  %694 = load i64, ptr %693, align 8, !tbaa !51
  %695 = add i64 %694, 1
  store i64 %695, ptr %693, align 8, !tbaa !51
  br label %696

696:                                              ; preds = %690, %685
  %697 = invoke noundef i64 @_Z13get_sys_clockv()
          to label %698 unwind label %119

698:                                              ; preds = %696
  %699 = load i64, ptr %5, align 8, !tbaa !9
  %700 = sub i64 %697, %699
  store i64 %700, ptr %6, align 8, !tbaa !9
  %701 = load ptr, ptr @simulation, align 8, !tbaa !5
  %702 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %701)
          to label %703 unwind label %119

703:                                              ; preds = %698
  br i1 %702, label %704, label %716

704:                                              ; preds = %703
  %705 = load i64, ptr %6, align 8, !tbaa !9
  %706 = uitofp i64 %705 to double
  %707 = load ptr, ptr @stats, align 8, !tbaa !21
  %708 = load ptr, ptr %4, align 8, !tbaa !5
  %709 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %708)
          to label %710 unwind label %119

710:                                              ; preds = %704
  %711 = getelementptr inbounds ptr, ptr %707, i64 %709
  %712 = load ptr, ptr %711, align 8, !tbaa !5
  %713 = getelementptr inbounds %class.Stats_thd, ptr %712, i32 0, i32 135
  %714 = load double, ptr %713, align 8, !tbaa !52
  %715 = fadd double %714, %706
  store double %715, ptr %713, align 8, !tbaa !52
  br label %716

716:                                              ; preds = %710, %703
  %717 = load i64, ptr %6, align 8, !tbaa !9
  %718 = uitofp i64 %717 to double
  %719 = load ptr, ptr %4, align 8, !tbaa !5
  %720 = getelementptr inbounds %class.TxnManager, ptr %719, i32 0, i32 25
  %721 = getelementptr inbounds %class.TxnStats, ptr %720, i32 0, i32 21
  %722 = load double, ptr %721, align 8, !tbaa !53
  %723 = fadd double %722, %718
  store double %723, ptr %721, align 8, !tbaa !53
  %724 = load i64, ptr %6, align 8, !tbaa !9
  %725 = uitofp i64 %724 to double
  %726 = load ptr, ptr %4, align 8, !tbaa !5
  %727 = getelementptr inbounds %class.TxnManager, ptr %726, i32 0, i32 25
  %728 = getelementptr inbounds %class.TxnStats, ptr %727, i32 0, i32 26
  %729 = load double, ptr %728, align 8, !tbaa !54
  %730 = fadd double %729, %725
  store double %730, ptr %728, align 8, !tbaa !54
  %731 = getelementptr inbounds %class.Maat, ptr %50, i32 0, i32 0
  %732 = call i32 @sem_post(ptr noundef %731) #6
  %733 = load i32, ptr %7, align 4, !tbaa !27
  store i32 1, ptr %28, align 4
  call void @_ZNSt3setImSt4lessImESaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr %11) #6
  call void @_ZNSt3setImSt4lessImESaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %10) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  ret i32 %733

734:                                              ; preds = %609, %577, %499, %460, %413, %320, %209, %119
  call void @_ZNSt3setImSt4lessImESaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr %11) #6
  call void @_ZNSt3setImSt4lessImESaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %10) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  br label %735

735:                                              ; preds = %734
  %736 = load ptr, ptr %12, align 8
  %737 = load i32, ptr %13, align 4
  %738 = insertvalue { ptr, i32 } poison, ptr %736, 0
  %739 = insertvalue { ptr, i32 } %738, i32 %737, 1
  resume { ptr, i32 } %739

740:                                              ; preds = %407
  unreachable
}

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

declare noundef i64 @_Z13get_sys_clockv() #2

declare i32 @sem_wait(ptr noundef) #2

declare noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96)) #2

declare noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544)) #2

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

declare noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544)) #2

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9TimeTable9get_stateEmm(ptr noundef nonnull align 8 dereferenceable(48), i64 noundef, i64 noundef) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setImSt4lessImESaImEE6insertERKm(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9TimeTable9set_stateEmm9MAATState(ptr noundef nonnull align 8 dereferenceable(48), i64 noundef, i64 noundef, i32 noundef) #0 align 2

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

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

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

; Function Attrs: nounwind
declare i32 @sem_post(ptr noundef) #5

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !16, i64 328}
!12 = !{!"_ZTS10TxnManager", !6, i64 8, !6, i64 16, !13, i64 24, !6, i64 32, !14, i64 40, !13, i64 44, !14, i64 48, !14, i64 52, !13, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !10, i64 120, !13, i64 128, !13, i64 129, !6, i64 136, !6, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !15, i64 176, !14, i64 432, !14, i64 436, !14, i64 440, !13, i64 444, !17, i64 448, !18, i64 456, !14, i64 480, !6, i64 488, !6, i64 496, !19, i64 504, !7, i64 512}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_ZTS8TxnStats", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !16, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !16, i64 72, !16, i64 80, !16, i64 88, !16, i64 96, !16, i64 104, !16, i64 112, !16, i64 120, !16, i64 128, !16, i64 136, !16, i64 144, !16, i64 152, !16, i64 160, !16, i64 168, !10, i64 176, !10, i64 184, !16, i64 192, !16, i64 200, !16, i64 208, !16, i64 216, !16, i64 224, !16, i64 232, !16, i64 240, !16, i64 248}
!16 = !{!"double", !7, i64 0}
!17 = !{!"_ZTS12CALVIN_PHASE", !7, i64 0}
!18 = !{!"_ZTS5ArrayIP5row_tE", !6, i64 0, !10, i64 8, !10, i64 16}
!19 = !{!"_ZTS8access_t", !7, i64 0}
!20 = !{!12, !16, i64 376}
!21 = !{!22, !6, i64 0}
!22 = !{!"_ZTS5Stats", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!23 = !{!24, !16, i64 1144}
!24 = !{!"_ZTS9Stats_thd", !7, i64 0, !6, i64 64, !6, i64 72, !16, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !16, i64 184, !10, i64 192, !16, i64 200, !10, i64 208, !16, i64 216, !10, i64 224, !10, i64 232, !16, i64 240, !16, i64 248, !16, i64 256, !16, i64 264, !16, i64 272, !16, i64 280, !16, i64 288, !16, i64 296, !10, i64 304, !16, i64 312, !16, i64 320, !16, i64 328, !16, i64 336, !16, i64 344, !16, i64 352, !16, i64 360, !16, i64 368, !10, i64 376, !10, i64 384, !16, i64 392, !10, i64 400, !16, i64 408, !10, i64 416, !16, i64 424, !16, i64 432, !16, i64 440, !10, i64 448, !10, i64 456, !10, i64 464, !16, i64 472, !16, i64 480, !16, i64 488, !16, i64 496, !16, i64 504, !16, i64 512, !16, i64 520, !16, i64 528, !16, i64 536, !10, i64 544, !6, i64 552, !6, i64 560, !16, i64 568, !10, i64 576, !10, i64 584, !16, i64 592, !16, i64 600, !16, i64 608, !10, i64 616, !10, i64 624, !10, i64 632, !10, i64 640, !10, i64 648, !10, i64 656, !10, i64 664, !16, i64 672, !16, i64 680, !16, i64 688, !10, i64 696, !10, i64 704, !10, i64 712, !10, i64 720, !10, i64 728, !10, i64 736, !10, i64 744, !10, i64 752, !10, i64 760, !16, i64 768, !16, i64 776, !16, i64 784, !16, i64 792, !16, i64 800, !10, i64 808, !10, i64 816, !16, i64 824, !16, i64 832, !10, i64 840, !10, i64 848, !10, i64 856, !16, i64 864, !16, i64 872, !10, i64 880, !10, i64 888, !16, i64 896, !16, i64 904, !16, i64 912, !16, i64 920, !10, i64 928, !10, i64 936, !16, i64 944, !16, i64 952, !16, i64 960, !10, i64 968, !10, i64 976, !16, i64 984, !16, i64 992, !16, i64 1000, !16, i64 1008, !16, i64 1016, !10, i64 1024, !16, i64 1032, !16, i64 1040, !16, i64 1048, !16, i64 1056, !16, i64 1064, !16, i64 1072, !16, i64 1080, !16, i64 1088, !10, i64 1096, !10, i64 1104, !10, i64 1112, !16, i64 1120, !10, i64 1128, !16, i64 1136, !16, i64 1144, !10, i64 1152, !10, i64 1160, !10, i64 1168, !10, i64 1176, !10, i64 1184, !16, i64 1192, !10, i64 1200, !10, i64 1208, !16, i64 1216, !10, i64 1224, !16, i64 1232, !16, i64 1240, !10, i64 1248, !10, i64 1256, !10, i64 1264, !10, i64 1272, !10, i64 1280, !16, i64 1288, !16, i64 1296, !16, i64 1304, !25, i64 1312, !25, i64 1384, !25, i64 1456, !25, i64 1528, !16, i64 1600, !16, i64 1608, !16, i64 1616, !16, i64 1624, !16, i64 1632, !16, i64 1640, !16, i64 1648, !16, i64 1656, !16, i64 1664, !16, i64 1672, !16, i64 1680, !16, i64 1688, !16, i64 1696, !16, i64 1704, !16, i64 1712, !16, i64 1720, !16, i64 1728, !16, i64 1736, !16, i64 1744, !16, i64 1752, !16, i64 1760, !16, i64 1768, !16, i64 1776, !16, i64 1784, !16, i64 1792, !16, i64 1800, !16, i64 1808, !16, i64 1816, !16, i64 1824, !16, i64 1832, !16, i64 1840, !16, i64 1848, !16, i64 1856, !16, i64 1864, !16, i64 1872, !16, i64 1880, !6, i64 1888, !7, i64 1896}
!25 = !{!"_ZTS8StatsArr", !6, i64 0, !10, i64 8, !10, i64 16, !26, i64 24, !7, i64 32}
!26 = !{!"_ZTS12StatsArrType", !7, i64 0}
!27 = !{!28, !28, i64 0}
!28 = !{!"_ZTS2RC", !7, i64 0}
!29 = !{!12, !10, i64 80}
!30 = !{!24, !10, i64 1152}
!31 = !{!12, !6, i64 104}
!32 = !{!33, !33, i64 0}
!33 = !{!"_ZTS9MAATState", !7, i64 0}
!34 = !{!24, !10, i64 1160}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = !{!12, !10, i64 88}
!38 = !{!24, !10, i64 1168}
!39 = !{!12, !6, i64 96}
!40 = !{!24, !10, i64 1176}
!41 = distinct !{!41, !36}
!42 = !{!12, !6, i64 112}
!43 = !{!24, !10, i64 1184}
!44 = distinct !{!44, !36}
!45 = distinct !{!45, !36}
!46 = distinct !{!46, !36}
!47 = distinct !{!47, !36}
!48 = distinct !{!48, !36}
!49 = !{!24, !16, i64 1192}
!50 = !{!24, !10, i64 1200}
!51 = !{!24, !10, i64 1128}
!52 = !{!24, !16, i64 1136}
!53 = !{!12, !16, i64 344}
!54 = !{!12, !16, i64 384}


; 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.Stats = type { ptr, ptr, i64, i64, i64, i64 }
%class.TimeTable = type { i64, ptr, %union.sem_t }
%union.sem_t = type { i64, [24 x i8] }
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<unsigned long, unsigned long, std::_Identity<unsigned long>, std::less<unsigned long>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned long, unsigned long, std::_Identity<unsigned long>, std::less<unsigned long>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }

@simulation = external local_unnamed_addr global ptr, align 8
@stats = external local_unnamed_addr global %class.Stats, align 8
@time_table = external global %class.TimeTable, align 8
@.str = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [76 x i8], align 1
@__PRETTY_FUNCTION__._ZN4Maat8validateEP10TxnManager = external hidden unnamed_addr constant [32 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 0, 3) i32 @_ZN4Maat8validateEP10TxnManager(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::set", align 8
  %4 = alloca %"class.std::set", align 8
  %5 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %6 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %7 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %8 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %9 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %10 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %11 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %12 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %13 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %14 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %15 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %16 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %17 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %18 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %19 = tail call noundef i64 @_Z13get_sys_clockv()
  %20 = tail call i32 @sem_wait(ptr noundef nonnull %0)
  %21 = tail call noundef i64 @_Z13get_sys_clockv()
  %22 = sub i64 %21, %19
  %23 = uitofp i64 %22 to double
  %24 = getelementptr inbounds i8, ptr %1, i64 328
  %25 = load double, ptr %24, align 8, !tbaa !5
  %26 = fadd double %25, %23
  store double %26, ptr %24, align 8, !tbaa !5
  %27 = getelementptr inbounds i8, ptr %1, i64 376
  %28 = load double, ptr %27, align 8, !tbaa !18
  %29 = fadd double %28, %23
  store double %29, ptr %27, align 8, !tbaa !18
  %30 = load ptr, ptr @simulation, align 8, !tbaa !19
  %31 = tail call noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %30)
  br i1 %31, label %32, label %40

32:                                               ; preds = %2
  %33 = load ptr, ptr @stats, align 8, !tbaa !20
  %34 = tail call noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
  %35 = getelementptr inbounds ptr, ptr %33, i64 %34
  %36 = load ptr, ptr %35, align 8, !tbaa !19
  %37 = getelementptr inbounds i8, ptr %36, i64 1144
  %38 = load double, ptr %37, align 8, !tbaa !22
  %39 = fadd double %38, %23
  store double %39, ptr %37, align 8, !tbaa !22
  br label %40

40:                                               ; preds = %32, %2
  %41 = tail call noundef i64 @_Z13get_sys_clockv()
  %42 = tail call noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
  %43 = tail call noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
  %44 = tail call noundef i64 @_ZN9TimeTable9get_lowerEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %42, i64 noundef %43)
  %45 = tail call noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
  %46 = tail call noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
  %47 = tail call noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %45, i64 noundef %46)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %3) #7
  call void @_ZNSt3setImSt4lessImESaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %3) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %4) #7
  call void @_ZNSt3setImSt4lessImESaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %4) #7
  %48 = getelementptr inbounds i8, ptr %1, i64 80
  %49 = load i64, ptr %48, align 8, !tbaa !26
  %.not = icmp ugt i64 %44, %49
  br i1 %.not, label %66, label %50

50:                                               ; preds = %40
  %51 = add i64 %49, 1
  %52 = load ptr, ptr @simulation, align 8, !tbaa !19
  %53 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %52)
          to label %54 unwind label %64

54:                                               ; preds = %50
  br i1 %53, label %55, label %66

55:                                               ; preds = %54
  %56 = load ptr, ptr @stats, align 8, !tbaa !20
  %57 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %58 unwind label %64

58:                                               ; preds = %55
  %59 = getelementptr inbounds ptr, ptr %56, i64 %57
  %60 = load ptr, ptr %59, align 8, !tbaa !19
  %61 = getelementptr inbounds i8, ptr %60, i64 1152
  %62 = load i64, ptr %61, align 8, !tbaa !27
  %63 = add i64 %62, 1
  store i64 %63, ptr %61, align 8, !tbaa !27
  br label %66

64:                                               ; preds = %405, %400, %398, %389, %385, %384, %382, %380, %379, %377, %375, %366, %362, %351, %347, %240, %238, %236, %235, %233, %231, %122, %117, %55, %50
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %423

66:                                               ; preds = %54, %58, %40
  %.0139 = phi i64 [ %51, %58 ], [ %51, %54 ], [ %44, %40 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #7
  %67 = getelementptr inbounds i8, ptr %1, i64 104
  %68 = load ptr, ptr %67, align 8, !tbaa !28
  %69 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %68) #7
  store ptr %69, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  %70 = load ptr, ptr %67, align 8, !tbaa !28
  %71 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %70) #7
  store ptr %71, ptr %6, align 8
  %72 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  br i1 %72, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %111, %66
  %.0140.lcssa = phi i64 [ %47, %66 ], [ %.2142, %111 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #7
  %73 = getelementptr inbounds i8, ptr %1, i64 88
  %74 = load i64, ptr %73, align 8, !tbaa !29
  %.not167 = icmp ugt i64 %.0139, %74
  br i1 %.not167, label %131, label %117

.lr.ph:                                           ; preds = %66, %111
  %.0140212 = phi i64 [ %.2142, %111 ], [ %47, %66 ]
  %75 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %76 unwind label %102

76:                                               ; preds = %.lr.ph
  %77 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #7
  %78 = load i64, ptr %77, align 8, !tbaa !30
  %79 = invoke noundef i64 @_ZN9TimeTable9get_lowerEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %75, i64 noundef %78)
          to label %80 unwind label %102

80:                                               ; preds = %76
  %.not183 = icmp ult i64 %.0140212, %79
  br i1 %.not183, label %111, label %81

81:                                               ; preds = %80
  %82 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %83 unwind label %104

83:                                               ; preds = %81
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #7
  %85 = load i64, ptr %84, align 8, !tbaa !30
  %86 = invoke noundef i32 @_ZN9TimeTable9get_stateEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %82, i64 noundef %85)
          to label %87 unwind label %104

87:                                               ; preds = %83
  %88 = add i32 %86, -1
  %or.cond = icmp ult i32 %88, 2
  br i1 %or.cond, label %89, label %106

89:                                               ; preds = %87
  %90 = load ptr, ptr @simulation, align 8, !tbaa !19
  %91 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %90)
          to label %92 unwind label %104

92:                                               ; preds = %89
  br i1 %91, label %93, label %.thread

93:                                               ; preds = %92
  %94 = load ptr, ptr @stats, align 8, !tbaa !20
  %95 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %96 unwind label %104

96:                                               ; preds = %93
  %97 = getelementptr inbounds ptr, ptr %94, i64 %95
  %98 = load ptr, ptr %97, align 8, !tbaa !19
  %99 = getelementptr inbounds i8, ptr %98, i64 1160
  %100 = load i64, ptr %99, align 8, !tbaa !31
  %101 = add i64 %100, 1
  store i64 %101, ptr %99, align 8, !tbaa !31
  br label %.thread

102:                                              ; preds = %76, %.lr.ph
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %116

104:                                              ; preds = %108, %93, %89, %83, %81
  %105 = landingpad { ptr, i32 }
          cleanup
  br label %116

.thread:                                          ; preds = %92, %96
  %spec.select = call i64 @llvm.usub.sat.i64(i64 %79, i64 1)
  br label %111

106:                                              ; preds = %87
  %107 = icmp eq i32 %86, 0
  br i1 %107, label %108, label %111

108:                                              ; preds = %106
  %109 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #7
  %110 = invoke { ptr, i8 } @_ZNSt3setImSt4lessImESaImEE6insertERKm(ptr noundef nonnull align 8 dereferenceable(48) %3, ptr noundef nonnull align 8 dereferenceable(8) %109)
          to label %111 unwind label %104

111:                                              ; preds = %.thread, %106, %108, %80
  %.2142 = phi i64 [ %.0140212, %80 ], [ %.0140212, %108 ], [ %.0140212, %106 ], [ %spec.select, %.thread ]
  %112 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %5, i32 noundef 0) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  %113 = load ptr, ptr %67, align 8, !tbaa !28
  %114 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %113) #7
  store ptr %114, ptr %6, align 8
  %115 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  br i1 %115, label %.lr.ph, label %._crit_edge, !llvm.loop !32

116:                                              ; preds = %104, %102
  %.pn185 = phi { ptr, i32 } [ %105, %104 ], [ %103, %102 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #7
  br label %423

117:                                              ; preds = %._crit_edge
  %118 = add i64 %74, 1
  %119 = load ptr, ptr @simulation, align 8, !tbaa !19
  %120 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %119)
          to label %121 unwind label %64

121:                                              ; preds = %117
  br i1 %120, label %122, label %131

122:                                              ; preds = %121
  %123 = load ptr, ptr @stats, align 8, !tbaa !20
  %124 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %125 unwind label %64

125:                                              ; preds = %122
  %126 = getelementptr inbounds ptr, ptr %123, i64 %124
  %127 = load ptr, ptr %126, align 8, !tbaa !19
  %128 = getelementptr inbounds i8, ptr %127, i64 1168
  %129 = load i64, ptr %128, align 8, !tbaa !34
  %130 = add i64 %129, 1
  store i64 %130, ptr %128, align 8, !tbaa !34
  br label %131

131:                                              ; preds = %121, %125, %._crit_edge
  %.1 = phi i64 [ %118, %125 ], [ %118, %121 ], [ %.0139, %._crit_edge ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  %132 = getelementptr inbounds i8, ptr %1, i64 96
  %133 = load ptr, ptr %132, align 8, !tbaa !35
  %134 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %133) #7
  store ptr %134, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  %135 = load ptr, ptr %132, align 8, !tbaa !35
  %136 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %135) #7
  store ptr %136, ptr %8, align 8
  %137 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br i1 %137, label %.lr.ph215, label %._crit_edge216

._crit_edge216:                                   ; preds = %181, %131
  %.2.lcssa = phi i64 [ %.1, %131 ], [ %.4, %181 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #7
  %138 = getelementptr inbounds i8, ptr %1, i64 112
  %139 = load ptr, ptr %138, align 8, !tbaa !36
  %140 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %139) #7
  store ptr %140, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %141 = load ptr, ptr %138, align 8, !tbaa !36
  %142 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %141) #7
  store ptr %142, ptr %10, align 8
  %143 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  br i1 %143, label %.lr.ph220, label %._crit_edge221

.lr.ph215:                                        ; preds = %131, %181
  %.2213 = phi i64 [ %.4, %181 ], [ %.1, %131 ]
  %144 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %145 unwind label %171

145:                                              ; preds = %.lr.ph215
  %146 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #7
  %147 = load i64, ptr %146, align 8, !tbaa !30
  %148 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %144, i64 noundef %147)
          to label %149 unwind label %171

149:                                              ; preds = %145
  %.not179 = icmp ugt i64 %.2213, %148
  br i1 %.not179, label %181, label %150

150:                                              ; preds = %149
  %151 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %152 unwind label %173

152:                                              ; preds = %150
  %153 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #7
  %154 = load i64, ptr %153, align 8, !tbaa !30
  %155 = invoke noundef i32 @_ZN9TimeTable9get_stateEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %151, i64 noundef %154)
          to label %156 unwind label %173

156:                                              ; preds = %152
  %157 = add i32 %155, -1
  %or.cond3 = icmp ult i32 %157, 2
  br i1 %or.cond3, label %158, label %176

158:                                              ; preds = %156
  %159 = load ptr, ptr @simulation, align 8, !tbaa !19
  %160 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %159)
          to label %161 unwind label %173

161:                                              ; preds = %158
  br i1 %160, label %162, label %.thread199

162:                                              ; preds = %161
  %163 = load ptr, ptr @stats, align 8, !tbaa !20
  %164 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %165 unwind label %173

165:                                              ; preds = %162
  %166 = getelementptr inbounds ptr, ptr %163, i64 %164
  %167 = load ptr, ptr %166, align 8, !tbaa !19
  %168 = getelementptr inbounds i8, ptr %167, i64 1176
  %169 = load i64, ptr %168, align 8, !tbaa !37
  %170 = add i64 %169, 1
  store i64 %170, ptr %168, align 8, !tbaa !37
  br label %.thread199

171:                                              ; preds = %145, %.lr.ph215
  %172 = landingpad { ptr, i32 }
          cleanup
  br label %186

173:                                              ; preds = %178, %162, %158, %152, %150
  %174 = landingpad { ptr, i32 }
          cleanup
  br label %186

.thread199:                                       ; preds = %161, %165
  %.not180 = icmp eq i64 %148, -1
  %175 = add nuw i64 %148, 1
  %spec.select196 = select i1 %.not180, i64 -1, i64 %175
  br label %181

176:                                              ; preds = %156
  %177 = icmp eq i32 %155, 0
  br i1 %177, label %178, label %181

178:                                              ; preds = %176
  %179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #7
  %180 = invoke { ptr, i8 } @_ZNSt3setImSt4lessImESaImEE6insertERKm(ptr noundef nonnull align 8 dereferenceable(48) %4, ptr noundef nonnull align 8 dereferenceable(8) %179)
          to label %181 unwind label %173

181:                                              ; preds = %.thread199, %176, %178, %149
  %.4 = phi i64 [ %.2213, %149 ], [ %.2213, %178 ], [ %.2213, %176 ], [ %spec.select196, %.thread199 ]
  %182 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %7, i32 noundef 0) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  %183 = load ptr, ptr %132, align 8, !tbaa !35
  %184 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %183) #7
  store ptr %184, ptr %8, align 8
  %185 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br i1 %185, label %.lr.ph215, label %._crit_edge216, !llvm.loop !38

186:                                              ; preds = %173, %171
  %.pn181 = phi { ptr, i32 } [ %174, %173 ], [ %172, %171 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br label %423

._crit_edge221:                                   ; preds = %225, %._crit_edge216
  %.5.lcssa = phi i64 [ %.2.lcssa, %._crit_edge216 ], [ %.7, %225 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  %.not168 = icmp ult i64 %.5.lcssa, %.0140.lcssa
  br i1 %.not168, label %236, label %231

.lr.ph220:                                        ; preds = %._crit_edge216, %225
  %.5218 = phi i64 [ %.7, %225 ], [ %.2.lcssa, %._crit_edge216 ]
  %187 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %188 unwind label %200

188:                                              ; preds = %.lr.ph220
  %189 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #7
  %190 = load i64, ptr %189, align 8, !tbaa !30
  %191 = invoke noundef i32 @_ZN9TimeTable9get_stateEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %187, i64 noundef %190)
          to label %192 unwind label %200

192:                                              ; preds = %188
  %193 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %194 unwind label %202

194:                                              ; preds = %192
  %195 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #7
  %196 = load i64, ptr %195, align 8, !tbaa !30
  %197 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %193, i64 noundef %196)
          to label %198 unwind label %202

198:                                              ; preds = %194
  %199 = icmp eq i32 %191, 3
  br i1 %199, label %225, label %204

200:                                              ; preds = %188, %.lr.ph220
  %201 = landingpad { ptr, i32 }
          cleanup
  br label %230

202:                                              ; preds = %222, %210, %206, %194, %192
  %203 = landingpad { ptr, i32 }
          cleanup
  br label %230

204:                                              ; preds = %198
  %205 = add i32 %191, -3
  %or.cond5 = icmp ult i32 %205, -2
  %.not175 = icmp ugt i64 %.5218, %197
  %or.cond188 = select i1 %or.cond5, i1 true, i1 %.not175
  br i1 %or.cond188, label %220, label %206

206:                                              ; preds = %204
  %207 = load ptr, ptr @simulation, align 8, !tbaa !19
  %208 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %207)
          to label %209 unwind label %202

209:                                              ; preds = %206
  br i1 %208, label %210, label %.thread201

210:                                              ; preds = %209
  %211 = load ptr, ptr @stats, align 8, !tbaa !20
  %212 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %213 unwind label %202

213:                                              ; preds = %210
  %214 = getelementptr inbounds ptr, ptr %211, i64 %212
  %215 = load ptr, ptr %214, align 8, !tbaa !19
  %216 = getelementptr inbounds i8, ptr %215, i64 1184
  %217 = load i64, ptr %216, align 8, !tbaa !39
  %218 = add i64 %217, 1
  store i64 %218, ptr %216, align 8, !tbaa !39
  br label %.thread201

.thread201:                                       ; preds = %209, %213
  %.not176 = icmp eq i64 %197, -1
  %219 = add nuw i64 %197, 1
  %spec.select197 = select i1 %.not176, i64 -1, i64 %219
  br label %225

220:                                              ; preds = %204
  %221 = icmp eq i32 %191, 0
  br i1 %221, label %222, label %225

222:                                              ; preds = %220
  %223 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #7
  %224 = invoke { ptr, i8 } @_ZNSt3setImSt4lessImESaImEE6insertERKm(ptr noundef nonnull align 8 dereferenceable(48) %3, ptr noundef nonnull align 8 dereferenceable(8) %223)
          to label %225 unwind label %202

225:                                              ; preds = %.thread201, %220, %222, %198
  %.7 = phi i64 [ %.5218, %198 ], [ %.5218, %222 ], [ %.5218, %220 ], [ %spec.select197, %.thread201 ]
  %226 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %9, i32 noundef 0) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %227 = load ptr, ptr %138, align 8, !tbaa !36
  %228 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %227) #7
  store ptr %228, ptr %10, align 8
  %229 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  br i1 %229, label %.lr.ph220, label %._crit_edge221, !llvm.loop !40

230:                                              ; preds = %202, %200
  %.pn177 = phi { ptr, i32 } [ %203, %202 ], [ %201, %200 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  br label %423

231:                                              ; preds = %._crit_edge221
  %232 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %233 unwind label %64

233:                                              ; preds = %231
  %234 = invoke noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %235 unwind label %64

235:                                              ; preds = %233
  invoke void @_ZN9TimeTable9set_stateEmm9MAATState(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %232, i64 noundef %234, i32 noundef 3)
          to label %375 unwind label %64

236:                                              ; preds = %._crit_edge221
  %237 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %238 unwind label %64

238:                                              ; preds = %236
  %239 = invoke noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %240 unwind label %64

240:                                              ; preds = %238
  invoke void @_ZN9TimeTable9set_stateEmm9MAATState(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %237, i64 noundef %239, i32 noundef 1)
          to label %241 unwind label %64

241:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %242 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %4) #7
  store ptr %242, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  %243 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %4) #7
  store ptr %243, ptr %12, align 8
  %244 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  br i1 %244, label %.lr.ph225, label %._crit_edge226

.lr.ph225:                                        ; preds = %241
  %245 = add i64 %.0140.lcssa, -1
  br label %250

._crit_edge226:                                   ; preds = %256, %241
  %.8.lcssa = phi i64 [ %.5.lcssa, %241 ], [ %.9, %256 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  %246 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %4) #7
  store ptr %246, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %247 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %4) #7
  store ptr %247, ptr %14, align 8
  %248 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br i1 %248, label %.lr.ph229, label %._crit_edge230

.lr.ph229:                                        ; preds = %._crit_edge226
  %.not174 = icmp eq i64 %.8.lcssa, 0
  %249 = add i64 %.8.lcssa, -1
  br label %270

250:                                              ; preds = %.lr.ph225, %256
  %.8223 = phi i64 [ %.5.lcssa, %.lr.ph225 ], [ %.9, %256 ]
  %251 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %252 unwind label %263

252:                                              ; preds = %250
  %253 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  %254 = load i64, ptr %253, align 8, !tbaa !30
  %255 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %251, i64 noundef %254)
          to label %256 unwind label %263

256:                                              ; preds = %252
  %257 = icmp ugt i64 %255, %.8223
  %258 = icmp ult i64 %255, %245
  %or.cond190 = select i1 %257, i1 %258, i1 false
  %259 = add i64 %255, 1
  %.9 = select i1 %or.cond190, i64 %259, i64 %.8223
  %260 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef 0) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  %261 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %4) #7
  store ptr %261, ptr %12, align 8
  %262 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  br i1 %262, label %250, label %._crit_edge226, !llvm.loop !41

263:                                              ; preds = %252, %250
  %264 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br label %423

._crit_edge230:                                   ; preds = %288, %._crit_edge226
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %265 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %3) #7
  store ptr %265, ptr %15, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  %266 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %3) #7
  store ptr %266, ptr %16, align 8
  %267 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  br i1 %267, label %.lr.ph233, label %._crit_edge234

.lr.ph233:                                        ; preds = %._crit_edge230
  %268 = add i64 %.8.lcssa, 2
  %269 = add i64 %.8.lcssa, 1
  br label %296

270:                                              ; preds = %.lr.ph229, %288
  %271 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %272 unwind label %280

272:                                              ; preds = %270
  %273 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  %274 = load i64, ptr %273, align 8, !tbaa !30
  %275 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %271, i64 noundef %274)
          to label %276 unwind label %280

276:                                              ; preds = %272
  %.not173 = icmp ult i64 %275, %.8.lcssa
  br i1 %.not173, label %288, label %277

277:                                              ; preds = %276
  br i1 %.not174, label %282, label %278

278:                                              ; preds = %277
  %279 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %.invoke unwind label %280

280:                                              ; preds = %.invoke, %282, %278, %272, %270
  %281 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  br label %423

282:                                              ; preds = %277
  %283 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %.invoke unwind label %280

.invoke:                                          ; preds = %282, %278
  %284 = phi i64 [ %279, %278 ], [ %283, %282 ]
  %285 = phi i64 [ %249, %278 ], [ 0, %282 ]
  %286 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  %287 = load i64, ptr %286, align 8, !tbaa !30
  invoke void @_ZN9TimeTable9set_upperEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %284, i64 noundef %287, i64 noundef %285)
          to label %288 unwind label %280

288:                                              ; preds = %.invoke, %276
  %289 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %13, i32 noundef 0) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %290 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %4) #7
  store ptr %290, ptr %14, align 8
  %291 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br i1 %291, label %270, label %._crit_edge230, !llvm.loop !42

._crit_edge234:                                   ; preds = %308, %._crit_edge230
  %.3143.lcssa = phi i64 [ %.0140.lcssa, %._crit_edge230 ], [ %.5145, %308 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #7
  %292 = call ptr @_ZNKSt3setImSt4lessImESaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %3) #7
  store ptr %292, ptr %17, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  %293 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %3) #7
  store ptr %293, ptr %18, align 8
  %294 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  br i1 %294, label %.lr.ph237, label %._crit_edge238

.lr.ph237:                                        ; preds = %._crit_edge234
  %.not170 = icmp eq i64 %.3143.lcssa, -1
  %295 = add nuw i64 %.3143.lcssa, 1
  br label %324

296:                                              ; preds = %.lr.ph233, %308
  %.3143231 = phi i64 [ %.0140.lcssa, %.lr.ph233 ], [ %.5145, %308 ]
  %297 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %298 unwind label %318

298:                                              ; preds = %296
  %299 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  %300 = load i64, ptr %299, align 8, !tbaa !30
  %301 = invoke noundef i64 @_ZN9TimeTable9get_lowerEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %297, i64 noundef %300)
          to label %302 unwind label %318

302:                                              ; preds = %298
  %303 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %304 unwind label %320

304:                                              ; preds = %302
  %305 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  %306 = load i64, ptr %305, align 8, !tbaa !30
  %307 = invoke noundef i64 @_ZN9TimeTable9get_upperEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %303, i64 noundef %306)
          to label %308 unwind label %320

308:                                              ; preds = %304
  %.not172 = icmp ne i64 %307, -1
  %309 = icmp ugt i64 %307, %268
  %or.cond192 = select i1 %.not172, i1 %309, i1 false
  %310 = icmp ult i64 %307, %.3143231
  %or.cond193 = select i1 %or.cond192, i1 %310, i1 false
  %311 = add i64 %307, -2
  %.4144 = select i1 %or.cond193, i64 %311, i64 %.3143231
  %312 = icmp ult i64 %301, %.4144
  %313 = icmp ugt i64 %301, %269
  %or.cond195 = select i1 %312, i1 %313, i1 false
  %314 = add i64 %301, -1
  %.5145 = select i1 %or.cond195, i64 %314, i64 %.4144
  %315 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %15, i32 noundef 0) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  %316 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %3) #7
  store ptr %316, ptr %16, align 8
  %317 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  br i1 %317, label %296, label %._crit_edge234, !llvm.loop !43

318:                                              ; preds = %298, %296
  %319 = landingpad { ptr, i32 }
          cleanup
  br label %322

320:                                              ; preds = %304, %302
  %321 = landingpad { ptr, i32 }
          cleanup
  br label %322

322:                                              ; preds = %320, %318
  %.pn = phi { ptr, i32 } [ %321, %320 ], [ %319, %318 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  br label %423

._crit_edge238:                                   ; preds = %342, %._crit_edge234
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  %323 = icmp ult i64 %.8.lcssa, %.3143.lcssa
  br i1 %323, label %347, label %346

324:                                              ; preds = %.lr.ph237, %342
  %325 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %326 unwind label %334

326:                                              ; preds = %324
  %327 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  %328 = load i64, ptr %327, align 8, !tbaa !30
  %329 = invoke noundef i64 @_ZN9TimeTable9get_lowerEmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %325, i64 noundef %328)
          to label %330 unwind label %334

330:                                              ; preds = %326
  %.not169 = icmp ugt i64 %329, %.3143.lcssa
  br i1 %.not169, label %342, label %331

331:                                              ; preds = %330
  br i1 %.not170, label %336, label %332

332:                                              ; preds = %331
  %333 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %.invoke240 unwind label %334

334:                                              ; preds = %.invoke240, %336, %332, %326, %324
  %335 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  br label %423

336:                                              ; preds = %331
  %337 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %.invoke240 unwind label %334

.invoke240:                                       ; preds = %336, %332
  %338 = phi i64 [ %333, %332 ], [ %337, %336 ]
  %339 = phi i64 [ %295, %332 ], [ -1, %336 ]
  %340 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt23_Rb_tree_const_iteratorImEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  %341 = load i64, ptr %340, align 8, !tbaa !30
  invoke void @_ZN9TimeTable9set_lowerEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %338, i64 noundef %341, i64 noundef %339)
          to label %342 unwind label %334

342:                                              ; preds = %.invoke240, %330
  %343 = call ptr @_ZNSt23_Rb_tree_const_iteratorImEppEi(ptr noundef nonnull align 8 dereferenceable(8) %17, i32 noundef 0) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  %344 = call ptr @_ZNKSt3setImSt4lessImESaImEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %3) #7
  store ptr %344, ptr %18, align 8
  %345 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorImES2_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  br i1 %345, label %324, label %._crit_edge238, !llvm.loop !44

346:                                              ; preds = %._crit_edge238
  call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 159, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN4Maat8validateEP10TxnManager) #8
  unreachable

347:                                              ; preds = %._crit_edge238
  %348 = load ptr, ptr @simulation, align 8, !tbaa !19
  %349 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %348)
          to label %350 unwind label %64

350:                                              ; preds = %347
  br i1 %349, label %351, label %362

351:                                              ; preds = %350
  %352 = load ptr, ptr @stats, align 8, !tbaa !20
  %353 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %354 unwind label %64

354:                                              ; preds = %351
  %355 = sub i64 %.3143.lcssa, %.8.lcssa
  %356 = uitofp i64 %355 to double
  %357 = getelementptr inbounds ptr, ptr %352, i64 %353
  %358 = load ptr, ptr %357, align 8, !tbaa !19
  %359 = getelementptr inbounds i8, ptr %358, i64 1192
  %360 = load double, ptr %359, align 8, !tbaa !45
  %361 = fadd double %360, %356
  store double %361, ptr %359, align 8, !tbaa !45
  br label %362

362:                                              ; preds = %354, %350
  %363 = load ptr, ptr @simulation, align 8, !tbaa !19
  %364 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %363)
          to label %365 unwind label %64

365:                                              ; preds = %362
  br i1 %364, label %366, label %375

366:                                              ; preds = %365
  %367 = load ptr, ptr @stats, align 8, !tbaa !20
  %368 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %369 unwind label %64

369:                                              ; preds = %366
  %370 = getelementptr inbounds ptr, ptr %367, i64 %368
  %371 = load ptr, ptr %370, align 8, !tbaa !19
  %372 = getelementptr inbounds i8, ptr %371, i64 1200
  %373 = load i64, ptr %372, align 8, !tbaa !46
  %374 = add i64 %373, 1
  store i64 %374, ptr %372, align 8, !tbaa !46
  br label %375

375:                                              ; preds = %235, %365, %369
  %.6146 = phi i64 [ %.3143.lcssa, %369 ], [ %.3143.lcssa, %365 ], [ %.0140.lcssa, %235 ]
  %.10 = phi i64 [ %.8.lcssa, %369 ], [ %.8.lcssa, %365 ], [ %.5.lcssa, %235 ]
  %.0 = phi i32 [ 0, %369 ], [ 0, %365 ], [ 2, %235 ]
  %376 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %377 unwind label %64

377:                                              ; preds = %375
  %378 = invoke noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %379 unwind label %64

379:                                              ; preds = %377
  invoke void @_ZN9TimeTable9set_lowerEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %376, i64 noundef %378, i64 noundef %.10)
          to label %380 unwind label %64

380:                                              ; preds = %379
  %381 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %382 unwind label %64

382:                                              ; preds = %380
  %383 = invoke noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %384 unwind label %64

384:                                              ; preds = %382
  invoke void @_ZN9TimeTable9set_upperEmmm(ptr noundef nonnull align 8 dereferenceable(48) @time_table, i64 noundef %381, i64 noundef %383, i64 noundef %.6146)
          to label %385 unwind label %64

385:                                              ; preds = %384
  %386 = load ptr, ptr @simulation, align 8, !tbaa !19
  %387 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %386)
          to label %388 unwind label %64

388:                                              ; preds = %385
  br i1 %387, label %389, label %398

389:                                              ; preds = %388
  %390 = load ptr, ptr @stats, align 8, !tbaa !20
  %391 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %392 unwind label %64

392:                                              ; preds = %389
  %393 = getelementptr inbounds ptr, ptr %390, i64 %391
  %394 = load ptr, ptr %393, align 8, !tbaa !19
  %395 = getelementptr inbounds i8, ptr %394, i64 1128
  %396 = load i64, ptr %395, align 8, !tbaa !47
  %397 = add i64 %396, 1
  store i64 %397, ptr %395, align 8, !tbaa !47
  br label %398

398:                                              ; preds = %392, %388
  %399 = invoke noundef i64 @_Z13get_sys_clockv()
          to label %400 unwind label %64

400:                                              ; preds = %398
  %401 = sub i64 %399, %41
  %402 = load ptr, ptr @simulation, align 8, !tbaa !19
  %403 = invoke noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96) %402)
          to label %404 unwind label %64

404:                                              ; preds = %400
  br i1 %403, label %405, label %._crit_edge239

._crit_edge239:                                   ; preds = %404
  %.pre = uitofp i64 %401 to double
  br label %415

405:                                              ; preds = %404
  %406 = load ptr, ptr @stats, align 8, !tbaa !20
  %407 = invoke noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544) %1)
          to label %408 unwind label %64

408:                                              ; preds = %405
  %409 = uitofp i64 %401 to double
  %410 = getelementptr inbounds ptr, ptr %406, i64 %407
  %411 = load ptr, ptr %410, align 8, !tbaa !19
  %412 = getelementptr inbounds i8, ptr %411, i64 1136
  %413 = load double, ptr %412, align 8, !tbaa !48
  %414 = fadd double %413, %409
  store double %414, ptr %412, align 8, !tbaa !48
  br label %415

415:                                              ; preds = %._crit_edge239, %408
  %.pre-phi = phi double [ %.pre, %._crit_edge239 ], [ %409, %408 ]
  %416 = getelementptr inbounds i8, ptr %1, i64 344
  %417 = load double, ptr %416, align 8, !tbaa !49
  %418 = fadd double %417, %.pre-phi
  store double %418, ptr %416, align 8, !tbaa !49
  %419 = getelementptr inbounds i8, ptr %1, i64 384
  %420 = load double, ptr %419, align 8, !tbaa !50
  %421 = fadd double %420, %.pre-phi
  store double %421, ptr %419, align 8, !tbaa !50
  %422 = call i32 @sem_post(ptr noundef nonnull %0) #7
  call void @_ZNSt3setImSt4lessImESaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %4) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %4) #7
  call void @_ZNSt3setImSt4lessImESaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %3) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %3) #7
  ret i32 %.0

423:                                              ; preds = %334, %322, %280, %263, %230, %186, %116, %64
  %.pn185.pn = phi { ptr, i32 } [ %.pn185, %116 ], [ %.pn181, %186 ], [ %.pn177, %230 ], [ %65, %64 ], [ %264, %263 ], [ %281, %280 ], [ %.pn, %322 ], [ %335, %334 ]
  call void @_ZNSt3setImSt4lessImESaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %4) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %4) #7
  call void @_ZNSt3setImSt4lessImESaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %3) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %3) #7
  resume { ptr, i32 } %.pn185.pn
}

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

declare noundef i64 @_Z13get_sys_clockv() local_unnamed_addr #2

declare i32 @sem_wait(ptr noundef) local_unnamed_addr #2

declare noundef zeroext i1 @_ZN10SimManager14is_warmup_doneEv(ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #2

declare noundef i64 @_ZN10TxnManager10get_thd_idEv(ptr noundef nonnull align 8 dereferenceable(544)) local_unnamed_addr #2

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

declare noundef i64 @_ZN10TxnManager10get_txn_idEv(ptr noundef nonnull align 8 dereferenceable(544)) local_unnamed_addr #2

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9TimeTable9get_stateEmm(ptr noundef nonnull align 8 dereferenceable(48), i64 noundef, i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setImSt4lessImESaImEE6insertERKm(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

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

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

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

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

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

; Function Attrs: nounwind
declare i32 @sem_post(ptr noundef) local_unnamed_addr #5

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.usub.sat.i64(i64, i64) #6

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { noreturn 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, !14, i64 328}
!6 = !{!"_ZTS10TxnManager", !7, i64 8, !7, i64 16, !10, i64 24, !7, i64 32, !11, i64 40, !10, i64 44, !11, i64 48, !11, i64 52, !10, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !12, i64 120, !10, i64 128, !10, i64 129, !7, i64 136, !7, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !13, i64 176, !11, i64 432, !11, i64 436, !11, i64 440, !10, i64 444, !15, i64 448, !16, i64 456, !11, i64 480, !7, i64 488, !7, i64 496, !17, i64 504, !8, i64 512}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!"_ZTS8TxnStats", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !14, i64 80, !14, i64 88, !14, i64 96, !14, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !12, i64 176, !12, i64 184, !14, i64 192, !14, i64 200, !14, i64 208, !14, i64 216, !14, i64 224, !14, i64 232, !14, i64 240, !14, i64 248}
!14 = !{!"double", !8, i64 0}
!15 = !{!"_ZTS12CALVIN_PHASE", !8, i64 0}
!16 = !{!"_ZTS5ArrayIP5row_tE", !7, i64 0, !12, i64 8, !12, i64 16}
!17 = !{!"_ZTS8access_t", !8, i64 0}
!18 = !{!6, !14, i64 376}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !7, i64 0}
!21 = !{!"_ZTS5Stats", !7, i64 0, !7, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40}
!22 = !{!23, !14, i64 1144}
!23 = !{!"_ZTS9Stats_thd", !8, i64 0, !7, i64 64, !7, i64 72, !14, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !14, i64 184, !12, i64 192, !14, i64 200, !12, i64 208, !14, i64 216, !12, i64 224, !12, i64 232, !14, i64 240, !14, i64 248, !14, i64 256, !14, i64 264, !14, i64 272, !14, i64 280, !14, i64 288, !14, i64 296, !12, i64 304, !14, i64 312, !14, i64 320, !14, i64 328, !14, i64 336, !14, i64 344, !14, i64 352, !14, i64 360, !14, i64 368, !12, i64 376, !12, i64 384, !14, i64 392, !12, i64 400, !14, i64 408, !12, i64 416, !14, i64 424, !14, i64 432, !14, i64 440, !12, i64 448, !12, i64 456, !12, i64 464, !14, i64 472, !14, i64 480, !14, i64 488, !14, i64 496, !14, i64 504, !14, i64 512, !14, i64 520, !14, i64 528, !14, i64 536, !12, i64 544, !7, i64 552, !7, i64 560, !14, i64 568, !12, i64 576, !12, i64 584, !14, i64 592, !14, i64 600, !14, i64 608, !12, i64 616, !12, i64 624, !12, i64 632, !12, i64 640, !12, i64 648, !12, i64 656, !12, i64 664, !14, i64 672, !14, i64 680, !14, i64 688, !12, i64 696, !12, i64 704, !12, i64 712, !12, i64 720, !12, i64 728, !12, i64 736, !12, i64 744, !12, i64 752, !12, i64 760, !14, i64 768, !14, i64 776, !14, i64 784, !14, i64 792, !14, i64 800, !12, i64 808, !12, i64 816, !14, i64 824, !14, i64 832, !12, i64 840, !12, i64 848, !12, i64 856, !14, i64 864, !14, i64 872, !12, i64 880, !12, i64 888, !14, i64 896, !14, i64 904, !14, i64 912, !14, i64 920, !12, i64 928, !12, i64 936, !14, i64 944, !14, i64 952, !14, i64 960, !12, i64 968, !12, i64 976, !14, i64 984, !14, i64 992, !14, i64 1000, !14, i64 1008, !14, i64 1016, !12, i64 1024, !14, i64 1032, !14, i64 1040, !14, i64 1048, !14, i64 1056, !14, i64 1064, !14, i64 1072, !14, i64 1080, !14, i64 1088, !12, i64 1096, !12, i64 1104, !12, i64 1112, !14, i64 1120, !12, i64 1128, !14, i64 1136, !14, i64 1144, !12, i64 1152, !12, i64 1160, !12, i64 1168, !12, i64 1176, !12, i64 1184, !14, i64 1192, !12, i64 1200, !12, i64 1208, !14, i64 1216, !12, i64 1224, !14, i64 1232, !14, i64 1240, !12, i64 1248, !12, i64 1256, !12, i64 1264, !12, i64 1272, !12, i64 1280, !14, i64 1288, !14, i64 1296, !14, i64 1304, !24, i64 1312, !24, i64 1384, !24, i64 1456, !24, i64 1528, !14, i64 1600, !14, i64 1608, !14, i64 1616, !14, i64 1624, !14, i64 1632, !14, i64 1640, !14, i64 1648, !14, i64 1656, !14, i64 1664, !14, i64 1672, !14, i64 1680, !14, i64 1688, !14, i64 1696, !14, i64 1704, !14, i64 1712, !14, i64 1720, !14, i64 1728, !14, i64 1736, !14, i64 1744, !14, i64 1752, !14, i64 1760, !14, i64 1768, !14, i64 1776, !14, i64 1784, !14, i64 1792, !14, i64 1800, !14, i64 1808, !14, i64 1816, !14, i64 1824, !14, i64 1832, !14, i64 1840, !14, i64 1848, !14, i64 1856, !14, i64 1864, !14, i64 1872, !14, i64 1880, !7, i64 1888, !8, i64 1896}
!24 = !{!"_ZTS8StatsArr", !7, i64 0, !12, i64 8, !12, i64 16, !25, i64 24, !8, i64 32}
!25 = !{!"_ZTS12StatsArrType", !8, i64 0}
!26 = !{!6, !12, i64 80}
!27 = !{!23, !12, i64 1152}
!28 = !{!6, !7, i64 104}
!29 = !{!6, !12, i64 88}
!30 = !{!12, !12, i64 0}
!31 = !{!23, !12, i64 1160}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!23, !12, i64 1168}
!35 = !{!6, !7, i64 96}
!36 = !{!6, !7, i64 112}
!37 = !{!23, !12, i64 1176}
!38 = distinct !{!38, !33}
!39 = !{!23, !12, i64 1184}
!40 = distinct !{!40, !33}
!41 = distinct !{!41, !33}
!42 = distinct !{!42, !33}
!43 = distinct !{!43, !33}
!44 = distinct !{!44, !33}
!45 = !{!23, !14, i64 1192}
!46 = !{!23, !12, i64 1200}
!47 = !{!23, !12, i64 1128}
!48 = !{!23, !14, i64 1136}
!49 = !{!6, !14, i64 344}
!50 = !{!6, !14, i64 384}


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