; LLVM IR from DanEngelbrecht/longtail :: test/main.ll (Z12jc_test_logfPK15jc_test_fixturePK13jc_test_entryPK13jc_test_statsiPKcz)

; 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"

%struct.__va_list_tag = type { i32, i32, ptr, ptr }
%struct.jc_test_state = type { [1 x %struct.__jmp_buf_tag], [8 x i8], ptr, ptr, ptr, %struct.jc_test_stats, i64 }
%struct.__jmp_buf_tag = type { [8 x i64], i32, %struct.__sigset_t }
%struct.__sigset_t = type { [16 x i64] }
%struct.jc_test_stats = type { i32, i32, i32, i32, i64 }
%struct.jc_test_fixture = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.jc_test_stats, i32, i32, i32, i32 }
%struct.jc_test_entry = type { ptr, ptr, ptr, ptr, i64 }

@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #0

; Function Attrs: mustprogress uwtable
define dso_local void @_Z12jc_test_logfPK15jc_test_fixturePK13jc_test_entryPK13jc_test_statsiPKcz(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, ...) #1 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca [1024 x i8], align 16
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca [1 x %struct.__va_list_tag], align 16
  %19 = alloca [1 x %struct.__va_list_tag], align 16
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store i32 %3, ptr %9, align 4, !tbaa !9
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1024, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %20 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  store ptr %20, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %21 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %22 = getelementptr inbounds i8, ptr %21, i64 1024
  store ptr %22, ptr %13, align 8, !tbaa !5
  %23 = load i32, ptr %9, align 4, !tbaa !9
  %24 = icmp eq i32 %23, 0
  br i1 %24, label %25, label %54

25:                                               ; preds = %5
  %26 = load ptr, ptr %12, align 8, !tbaa !5
  %27 = load ptr, ptr %13, align 8, !tbaa !5
  %28 = load ptr, ptr %12, align 8, !tbaa !5
  %29 = ptrtoint ptr %27 to i64
  %30 = ptrtoint ptr %28 to i64
  %31 = sub i64 %29, %30
  %32 = call noundef ptr @_Z17jc_test_get_statev()
  %33 = getelementptr inbounds %struct.jc_test_state, ptr %32, i32 0, i32 6
  %34 = load i64, ptr %33, align 8
  %35 = lshr i64 %34, 31
  %36 = and i64 %35, 1
  %37 = trunc i64 %36 to i32
  %38 = icmp ne i32 %37, 0
  %39 = zext i1 %38 to i64
  %40 = select i1 %38, ptr @.str.5, ptr @.str.6
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.jc_test_fixture, ptr %41, i32 0, i32 3
  %43 = load ptr, ptr %42, align 8, !tbaa !11
  %44 = call noundef ptr @_Z17jc_test_get_statev()
  %45 = getelementptr inbounds %struct.jc_test_state, ptr %44, i32 0, i32 6
  %46 = load i64, ptr %45, align 8
  %47 = lshr i64 %46, 31
  %48 = and i64 %47, 1
  %49 = trunc i64 %48 to i32
  %50 = icmp ne i32 %49, 0
  %51 = zext i1 %50 to i64
  %52 = select i1 %50, ptr @.str.7, ptr @.str.6
  %53 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %26, i64 noundef %31, ptr noundef @.str.4, ptr noundef %40, ptr noundef %43, ptr noundef %52) #6
  br label %604

54:                                               ; preds = %5
  %55 = load i32, ptr %9, align 4, !tbaa !9
  %56 = icmp eq i32 %55, 1
  br i1 %56, label %57, label %122

57:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.jc_test_fixture, ptr %58, i32 0, i32 8
  %60 = getelementptr inbounds %struct.jc_test_stats, ptr %59, i32 0, i32 4
  %61 = load i64, ptr %60, align 8, !tbaa !15
  store i64 %61, ptr %14, align 8, !tbaa !16
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.jc_test_fixture, ptr %62, i32 0, i32 5
  %64 = load ptr, ptr %63, align 8, !tbaa !17
  %65 = icmp ne ptr %64, null
  br i1 %65, label %66, label %73

66:                                               ; preds = %57
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.jc_test_fixture, ptr %67, i32 0, i32 5
  %69 = load ptr, ptr %68, align 8, !tbaa !17
  %70 = getelementptr inbounds %struct.jc_test_fixture, ptr %69, i32 0, i32 8
  %71 = getelementptr inbounds %struct.jc_test_stats, ptr %70, i32 0, i32 4
  %72 = load i64, ptr %71, align 8, !tbaa !15
  store i64 %72, ptr %14, align 8, !tbaa !16
  br label %73

73:                                               ; preds = %66, %57
  %74 = load ptr, ptr %12, align 8, !tbaa !5
  %75 = load ptr, ptr %13, align 8, !tbaa !5
  %76 = load ptr, ptr %12, align 8, !tbaa !5
  %77 = ptrtoint ptr %75 to i64
  %78 = ptrtoint ptr %76 to i64
  %79 = sub i64 %77, %78
  %80 = call noundef ptr @_Z17jc_test_get_statev()
  %81 = getelementptr inbounds %struct.jc_test_state, ptr %80, i32 0, i32 6
  %82 = load i64, ptr %81, align 8
  %83 = lshr i64 %82, 31
  %84 = and i64 %83, 1
  %85 = trunc i64 %84 to i32
  %86 = icmp ne i32 %85, 0
  %87 = zext i1 %86 to i64
  %88 = select i1 %86, ptr @.str.5, ptr @.str.6
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.jc_test_fixture, ptr %89, i32 0, i32 3
  %91 = load ptr, ptr %90, align 8, !tbaa !11
  %92 = call noundef ptr @_Z17jc_test_get_statev()
  %93 = getelementptr inbounds %struct.jc_test_state, ptr %92, i32 0, i32 6
  %94 = load i64, ptr %93, align 8
  %95 = lshr i64 %94, 31
  %96 = and i64 %95, 1
  %97 = trunc i64 %96 to i32
  %98 = icmp ne i32 %97, 0
  %99 = zext i1 %98 to i64
  %100 = select i1 %98, ptr @.str.7, ptr @.str.6
  %101 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %74, i64 noundef %79, ptr noundef @.str.8, ptr noundef %88, ptr noundef %91, ptr noundef %100) #6
  %102 = load ptr, ptr %12, align 8, !tbaa !5
  %103 = sext i32 %101 to i64
  %104 = getelementptr inbounds i8, ptr %102, i64 %103
  store ptr %104, ptr %12, align 8, !tbaa !5
  %105 = load ptr, ptr %12, align 8, !tbaa !5
  %106 = load ptr, ptr %13, align 8, !tbaa !5
  %107 = load ptr, ptr %12, align 8, !tbaa !5
  %108 = ptrtoint ptr %106 to i64
  %109 = ptrtoint ptr %107 to i64
  %110 = sub i64 %108, %109
  %111 = load i64, ptr %14, align 8, !tbaa !16
  %112 = call noundef i64 @_ZL20jc_test_snprint_timePcmm(ptr noundef %105, i64 noundef %110, i64 noundef %111)
  %113 = load ptr, ptr %12, align 8, !tbaa !5
  %114 = getelementptr inbounds i8, ptr %113, i64 %112
  store ptr %114, ptr %12, align 8, !tbaa !5
  %115 = load ptr, ptr %12, align 8, !tbaa !5
  %116 = load ptr, ptr %13, align 8, !tbaa !5
  %117 = load ptr, ptr %12, align 8, !tbaa !5
  %118 = ptrtoint ptr %116 to i64
  %119 = ptrtoint ptr %117 to i64
  %120 = sub i64 %118, %119
  %121 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %115, i64 noundef %120, ptr noundef @.str.9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %603

122:                                              ; preds = %54
  %123 = load i32, ptr %9, align 4, !tbaa !9
  %124 = icmp eq i32 %123, 2
  br i1 %124, label %125, label %173

125:                                              ; preds = %122
  %126 = load ptr, ptr %12, align 8, !tbaa !5
  %127 = load ptr, ptr %13, align 8, !tbaa !5
  %128 = load ptr, ptr %12, align 8, !tbaa !5
  %129 = ptrtoint ptr %127 to i64
  %130 = ptrtoint ptr %128 to i64
  %131 = sub i64 %129, %130
  %132 = call noundef ptr @_Z17jc_test_get_statev()
  %133 = getelementptr inbounds %struct.jc_test_state, ptr %132, i32 0, i32 6
  %134 = load i64, ptr %133, align 8
  %135 = lshr i64 %134, 31
  %136 = and i64 %135, 1
  %137 = trunc i64 %136 to i32
  %138 = icmp ne i32 %137, 0
  %139 = zext i1 %138 to i64
  %140 = select i1 %138, ptr @.str.11, ptr @.str.6
  %141 = load ptr, ptr %7, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.jc_test_entry, ptr %141, i32 0, i32 1
  %143 = load ptr, ptr %142, align 8, !tbaa !18
  %144 = call noundef ptr @_Z17jc_test_get_statev()
  %145 = getelementptr inbounds %struct.jc_test_state, ptr %144, i32 0, i32 6
  %146 = load i64, ptr %145, align 8
  %147 = lshr i64 %146, 31
  %148 = and i64 %147, 1
  %149 = trunc i64 %148 to i32
  %150 = icmp ne i32 %149, 0
  %151 = zext i1 %150 to i64
  %152 = select i1 %150, ptr @.str.7, ptr @.str.6
  %153 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %126, i64 noundef %131, ptr noundef @.str.10, ptr noundef %140, ptr noundef %143, ptr noundef %152) #6
  %154 = load ptr, ptr %12, align 8, !tbaa !5
  %155 = sext i32 %153 to i64
  %156 = getelementptr inbounds i8, ptr %154, i64 %155
  store ptr %156, ptr %12, align 8, !tbaa !5
  %157 = load ptr, ptr %6, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.jc_test_fixture, ptr %157, i32 0, i32 10
  %159 = load i32, ptr %158, align 4, !tbaa !20
  %160 = icmp ne i32 %159, -1
  br i1 %160, label %161, label %172

161:                                              ; preds = %125
  %162 = load ptr, ptr %12, align 8, !tbaa !5
  %163 = load ptr, ptr %13, align 8, !tbaa !5
  %164 = load ptr, ptr %12, align 8, !tbaa !5
  %165 = ptrtoint ptr %163 to i64
  %166 = ptrtoint ptr %164 to i64
  %167 = sub i64 %165, %166
  %168 = load ptr, ptr %6, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.jc_test_fixture, ptr %168, i32 0, i32 10
  %170 = load i32, ptr %169, align 4, !tbaa !20
  %171 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %162, i64 noundef %167, ptr noundef @.str.12, i32 noundef %170) #6
  br label %172

172:                                              ; preds = %161, %125
  br label %602

173:                                              ; preds = %122
  %174 = load i32, ptr %9, align 4, !tbaa !9
  %175 = icmp eq i32 %174, 3
  br i1 %175, label %176, label %307

176:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %177 = call noundef ptr @_Z17jc_test_get_statev()
  %178 = getelementptr inbounds %struct.jc_test_state, ptr %177, i32 0, i32 6
  %179 = load i64, ptr %178, align 8
  %180 = lshr i64 %179, 31
  %181 = and i64 %180, 1
  %182 = trunc i64 %181 to i32
  %183 = icmp ne i32 %182, 0
  %184 = zext i1 %183 to i64
  %185 = select i1 %183, ptr @.str.13, ptr @.str.14
  store ptr %185, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %186 = call noundef ptr @_Z17jc_test_get_statev()
  %187 = getelementptr inbounds %struct.jc_test_state, ptr %186, i32 0, i32 6
  %188 = load i64, ptr %187, align 8
  %189 = lshr i64 %188, 31
  %190 = and i64 %189, 1
  %191 = trunc i64 %190 to i32
  %192 = icmp ne i32 %191, 0
  %193 = zext i1 %192 to i64
  %194 = select i1 %192, ptr @.str.15, ptr @.str.16
  store ptr %194, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %195 = call noundef ptr @_Z17jc_test_get_statev()
  %196 = getelementptr inbounds %struct.jc_test_state, ptr %195, i32 0, i32 6
  %197 = load i64, ptr %196, align 8
  %198 = lshr i64 %197, 31
  %199 = and i64 %198, 1
  %200 = trunc i64 %199 to i32
  %201 = icmp ne i32 %200, 0
  %202 = zext i1 %201 to i64
  %203 = select i1 %201, ptr @.str.17, ptr @.str.18
  store ptr %203, ptr %17, align 8, !tbaa !5
  %204 = load ptr, ptr %12, align 8, !tbaa !5
  %205 = load ptr, ptr %13, align 8, !tbaa !5
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  %207 = ptrtoint ptr %205 to i64
  %208 = ptrtoint ptr %206 to i64
  %209 = sub i64 %207, %208
  %210 = call noundef ptr @_Z17jc_test_get_statev()
  %211 = getelementptr inbounds %struct.jc_test_state, ptr %210, i32 0, i32 6
  %212 = load i64, ptr %211, align 8
  %213 = lshr i64 %212, 31
  %214 = and i64 %213, 1
  %215 = trunc i64 %214 to i32
  %216 = icmp ne i32 %215, 0
  %217 = zext i1 %216 to i64
  %218 = select i1 %216, ptr @.str.11, ptr @.str.6
  %219 = load ptr, ptr %7, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.jc_test_entry, ptr %219, i32 0, i32 1
  %221 = load ptr, ptr %220, align 8, !tbaa !18
  %222 = call noundef ptr @_Z17jc_test_get_statev()
  %223 = getelementptr inbounds %struct.jc_test_state, ptr %222, i32 0, i32 6
  %224 = load i64, ptr %223, align 8
  %225 = lshr i64 %224, 31
  %226 = and i64 %225, 1
  %227 = trunc i64 %226 to i32
  %228 = icmp ne i32 %227, 0
  %229 = zext i1 %228 to i64
  %230 = select i1 %228, ptr @.str.7, ptr @.str.6
  %231 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %204, i64 noundef %209, ptr noundef @.str.19, ptr noundef %218, ptr noundef %221, ptr noundef %230) #6
  %232 = load ptr, ptr %12, align 8, !tbaa !5
  %233 = sext i32 %231 to i64
  %234 = getelementptr inbounds i8, ptr %232, i64 %233
  store ptr %234, ptr %12, align 8, !tbaa !5
  %235 = load ptr, ptr %6, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.jc_test_fixture, ptr %235, i32 0, i32 10
  %237 = load i32, ptr %236, align 4, !tbaa !20
  %238 = icmp ne i32 %237, -1
  br i1 %238, label %239, label %253

239:                                              ; preds = %176
  %240 = load ptr, ptr %12, align 8, !tbaa !5
  %241 = load ptr, ptr %13, align 8, !tbaa !5
  %242 = load ptr, ptr %12, align 8, !tbaa !5
  %243 = ptrtoint ptr %241 to i64
  %244 = ptrtoint ptr %242 to i64
  %245 = sub i64 %243, %244
  %246 = load ptr, ptr %6, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.jc_test_fixture, ptr %246, i32 0, i32 10
  %248 = load i32, ptr %247, align 4, !tbaa !20
  %249 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %240, i64 noundef %245, ptr noundef @.str.12, i32 noundef %248) #6
  %250 = load ptr, ptr %12, align 8, !tbaa !5
  %251 = sext i32 %249 to i64
  %252 = getelementptr inbounds i8, ptr %250, i64 %251
  store ptr %252, ptr %12, align 8, !tbaa !5
  br label %253

253:                                              ; preds = %239, %176
  %254 = load ptr, ptr %12, align 8, !tbaa !5
  %255 = load ptr, ptr %13, align 8, !tbaa !5
  %256 = load ptr, ptr %12, align 8, !tbaa !5
  %257 = ptrtoint ptr %255 to i64
  %258 = ptrtoint ptr %256 to i64
  %259 = sub i64 %257, %258
  %260 = load ptr, ptr %7, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.jc_test_entry, ptr %260, i32 0, i32 4
  %262 = load i64, ptr %261, align 8
  %263 = and i64 %262, 1
  %264 = trunc i64 %263 to i32
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %268

266:                                              ; preds = %253
  %267 = load ptr, ptr %16, align 8, !tbaa !5
  br label %282

268:                                              ; preds = %253
  %269 = load ptr, ptr %7, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.jc_test_entry, ptr %269, i32 0, i32 4
  %271 = load i64, ptr %270, align 8
  %272 = lshr i64 %271, 1
  %273 = and i64 %272, 1
  %274 = trunc i64 %273 to i32
  %275 = icmp ne i32 %274, 0
  br i1 %275, label %276, label %278

276:                                              ; preds = %268
  %277 = load ptr, ptr %17, align 8, !tbaa !5
  br label %280

278:                                              ; preds = %268
  %279 = load ptr, ptr %15, align 8, !tbaa !5
  br label %280

280:                                              ; preds = %278, %276
  %281 = phi ptr [ %277, %276 ], [ %279, %278 ]
  br label %282

282:                                              ; preds = %280, %266
  %283 = phi ptr [ %267, %266 ], [ %281, %280 ]
  %284 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %254, i64 noundef %259, ptr noundef @.str.20, ptr noundef %283) #6
  %285 = load ptr, ptr %12, align 8, !tbaa !5
  %286 = sext i32 %284 to i64
  %287 = getelementptr inbounds i8, ptr %285, i64 %286
  store ptr %287, ptr %12, align 8, !tbaa !5
  %288 = load ptr, ptr %12, align 8, !tbaa !5
  %289 = load ptr, ptr %13, align 8, !tbaa !5
  %290 = load ptr, ptr %12, align 8, !tbaa !5
  %291 = ptrtoint ptr %289 to i64
  %292 = ptrtoint ptr %290 to i64
  %293 = sub i64 %291, %292
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.jc_test_stats, ptr %294, i32 0, i32 4
  %296 = load i64, ptr %295, align 8, !tbaa !21
  %297 = call noundef i64 @_ZL20jc_test_snprint_timePcmm(ptr noundef %288, i64 noundef %293, i64 noundef %296)
  %298 = load ptr, ptr %12, align 8, !tbaa !5
  %299 = getelementptr inbounds i8, ptr %298, i64 %297
  store ptr %299, ptr %12, align 8, !tbaa !5
  %300 = load ptr, ptr %12, align 8, !tbaa !5
  %301 = load ptr, ptr %13, align 8, !tbaa !5
  %302 = load ptr, ptr %12, align 8, !tbaa !5
  %303 = ptrtoint ptr %301 to i64
  %304 = ptrtoint ptr %302 to i64
  %305 = sub i64 %303, %304
  %306 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %300, i64 noundef %305, ptr noundef @.str.21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br label %601

307:                                              ; preds = %173
  %308 = load i32, ptr %9, align 4, !tbaa !9
  %309 = icmp eq i32 %308, 4
  br i1 %309, label %310, label %362

310:                                              ; preds = %307
  %311 = load ptr, ptr %12, align 8, !tbaa !5
  %312 = load ptr, ptr %13, align 8, !tbaa !5
  %313 = load ptr, ptr %12, align 8, !tbaa !5
  %314 = ptrtoint ptr %312 to i64
  %315 = ptrtoint ptr %313 to i64
  %316 = sub i64 %314, %315
  %317 = call noundef ptr @_Z17jc_test_get_statev()
  %318 = getelementptr inbounds %struct.jc_test_state, ptr %317, i32 0, i32 6
  %319 = load i64, ptr %318, align 8
  %320 = lshr i64 %319, 31
  %321 = and i64 %320, 1
  %322 = trunc i64 %321 to i32
  %323 = icmp ne i32 %322, 0
  %324 = zext i1 %323 to i64
  %325 = select i1 %323, ptr @.str.23, ptr @.str.6
  %326 = load ptr, ptr %6, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.jc_test_fixture, ptr %326, i32 0, i32 4
  %328 = load ptr, ptr %327, align 8, !tbaa !22
  %329 = call noundef ptr @_Z17jc_test_get_statev()
  %330 = getelementptr inbounds %struct.jc_test_state, ptr %329, i32 0, i32 6
  %331 = load i64, ptr %330, align 8
  %332 = lshr i64 %331, 31
  %333 = and i64 %332, 1
  %334 = trunc i64 %333 to i32
  %335 = icmp ne i32 %334, 0
  %336 = zext i1 %335 to i64
  %337 = select i1 %335, ptr @.str.7, ptr @.str.6
  %338 = load ptr, ptr %6, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.jc_test_fixture, ptr %338, i32 0, i32 11
  %340 = load i32, ptr %339, align 8
  %341 = shl i32 %340, 8
  %342 = ashr i32 %341, 16
  %343 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %311, i64 noundef %316, ptr noundef @.str.22, ptr noundef %325, ptr noundef %328, ptr noundef %337, i32 noundef %342) #6
  %344 = load ptr, ptr %12, align 8, !tbaa !5
  %345 = sext i32 %343 to i64
  %346 = getelementptr inbounds i8, ptr %344, i64 %345
  store ptr %346, ptr %12, align 8, !tbaa !5
  %347 = load ptr, ptr %10, align 8, !tbaa !5
  %348 = icmp ne ptr %347, null
  br i1 %348, label %349, label %361

349:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #6
  %350 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %18, i64 0, i64 0
  call void @llvm.va_start.p0(ptr %350)
  %351 = load ptr, ptr %12, align 8, !tbaa !5
  %352 = load ptr, ptr %13, align 8, !tbaa !5
  %353 = load ptr, ptr %12, align 8, !tbaa !5
  %354 = ptrtoint ptr %352 to i64
  %355 = ptrtoint ptr %353 to i64
  %356 = sub i64 %354, %355
  %357 = load ptr, ptr %10, align 8, !tbaa !5
  %358 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %18, i64 0, i64 0
  %359 = call i32 @vsnprintf(ptr noundef %351, i64 noundef %356, ptr noundef %357, ptr noundef %358) #6
  %360 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %18, i64 0, i64 0
  call void @llvm.va_end.p0(ptr %360)
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #6
  br label %361

361:                                              ; preds = %349, %310
  br label %600

362:                                              ; preds = %307
  %363 = load i32, ptr %9, align 4, !tbaa !9
  %364 = icmp eq i32 %363, 5
  br i1 %364, label %365, label %579

365:                                              ; preds = %362
  %366 = call noundef ptr @_Z17jc_test_get_statev()
  %367 = getelementptr inbounds %struct.jc_test_state, ptr %366, i32 0, i32 4
  %368 = load ptr, ptr %367, align 8, !tbaa !23
  store ptr %368, ptr %6, align 8, !tbaa !5
  br label %369

369:                                              ; preds = %468, %365
  %370 = load ptr, ptr %8, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.jc_test_stats, ptr %370, i32 0, i32 1
  %372 = load i32, ptr %371, align 4
  %373 = shl i32 %372, 16
  %374 = ashr i32 %373, 16
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %376, label %379

376:                                              ; preds = %369
  %377 = load ptr, ptr %6, align 8, !tbaa !5
  %378 = icmp ne ptr %377, null
  br label %379

379:                                              ; preds = %376, %369
  %380 = phi i1 [ false, %369 ], [ %378, %376 ]
  br i1 %380, label %381, label %472

381:                                              ; preds = %379
  %382 = load ptr, ptr %6, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.jc_test_fixture, ptr %382, i32 0, i32 9
  %384 = load i32, ptr %383, align 8
  %385 = and i32 %384, 134217727
  %386 = icmp ne i32 %385, 0
  br i1 %386, label %468, label %387

387:                                              ; preds = %381
  %388 = load ptr, ptr %6, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.jc_test_fixture, ptr %388, i32 0, i32 2
  %390 = load ptr, ptr %389, align 8, !tbaa !25
  store ptr %390, ptr %7, align 8, !tbaa !5
  br label %391

391:                                              ; preds = %463, %387
  %392 = load ptr, ptr %7, align 8, !tbaa !5
  %393 = icmp ne ptr %392, null
  br i1 %393, label %394, label %467

394:                                              ; preds = %391
  %395 = load ptr, ptr %7, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.jc_test_entry, ptr %395, i32 0, i32 4
  %397 = load i64, ptr %396, align 8
  %398 = and i64 %397, 1
  %399 = trunc i64 %398 to i32
  %400 = icmp ne i32 %399, 0
  br i1 %400, label %401, label %463

401:                                              ; preds = %394
  %402 = load ptr, ptr %12, align 8, !tbaa !5
  %403 = load ptr, ptr %13, align 8, !tbaa !5
  %404 = load ptr, ptr %12, align 8, !tbaa !5
  %405 = ptrtoint ptr %403 to i64
  %406 = ptrtoint ptr %404 to i64
  %407 = sub i64 %405, %406
  %408 = call noundef ptr @_Z17jc_test_get_statev()
  %409 = getelementptr inbounds %struct.jc_test_state, ptr %408, i32 0, i32 6
  %410 = load i64, ptr %409, align 8
  %411 = lshr i64 %410, 31
  %412 = and i64 %411, 1
  %413 = trunc i64 %412 to i32
  %414 = icmp ne i32 %413, 0
  %415 = zext i1 %414 to i64
  %416 = select i1 %414, ptr @.str.23, ptr @.str.6
  %417 = load ptr, ptr %6, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.jc_test_fixture, ptr %417, i32 0, i32 3
  %419 = load ptr, ptr %418, align 8, !tbaa !11
  %420 = call noundef ptr @_Z17jc_test_get_statev()
  %421 = getelementptr inbounds %struct.jc_test_state, ptr %420, i32 0, i32 6
  %422 = load i64, ptr %421, align 8
  %423 = lshr i64 %422, 31
  %424 = and i64 %423, 1
  %425 = trunc i64 %424 to i32
  %426 = icmp ne i32 %425, 0
  %427 = zext i1 %426 to i64
  %428 = select i1 %426, ptr @.str.7, ptr @.str.6
  %429 = call noundef ptr @_Z17jc_test_get_statev()
  %430 = getelementptr inbounds %struct.jc_test_state, ptr %429, i32 0, i32 6
  %431 = load i64, ptr %430, align 8
  %432 = lshr i64 %431, 31
  %433 = and i64 %432, 1
  %434 = trunc i64 %433 to i32
  %435 = icmp ne i32 %434, 0
  %436 = zext i1 %435 to i64
  %437 = select i1 %435, ptr @.str.11, ptr @.str.6
  %438 = load ptr, ptr %7, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.jc_test_entry, ptr %438, i32 0, i32 1
  %440 = load ptr, ptr %439, align 8, !tbaa !18
  %441 = call noundef ptr @_Z17jc_test_get_statev()
  %442 = getelementptr inbounds %struct.jc_test_state, ptr %441, i32 0, i32 6
  %443 = load i64, ptr %442, align 8
  %444 = lshr i64 %443, 31
  %445 = and i64 %444, 1
  %446 = trunc i64 %445 to i32
  %447 = icmp ne i32 %446, 0
  %448 = zext i1 %447 to i64
  %449 = select i1 %447, ptr @.str.25, ptr @.str.6
  %450 = call noundef ptr @_Z17jc_test_get_statev()
  %451 = getelementptr inbounds %struct.jc_test_state, ptr %450, i32 0, i32 6
  %452 = load i64, ptr %451, align 8
  %453 = lshr i64 %452, 31
  %454 = and i64 %453, 1
  %455 = trunc i64 %454 to i32
  %456 = icmp ne i32 %455, 0
  %457 = zext i1 %456 to i64
  %458 = select i1 %456, ptr @.str.7, ptr @.str.6
  %459 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %402, i64 noundef %407, ptr noundef @.str.24, ptr noundef %416, ptr noundef %419, ptr noundef %428, ptr noundef %437, ptr noundef %440, ptr noundef %449, ptr noundef %458) #6
  %460 = load ptr, ptr %12, align 8, !tbaa !5
  %461 = sext i32 %459 to i64
  %462 = getelementptr inbounds i8, ptr %460, i64 %461
  store ptr %462, ptr %12, align 8, !tbaa !5
  br label %463

463:                                              ; preds = %401, %394
  %464 = load ptr, ptr %7, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.jc_test_entry, ptr %464, i32 0, i32 0
  %466 = load ptr, ptr %465, align 8, !tbaa !26
  store ptr %466, ptr %7, align 8, !tbaa !5
  br label %391, !llvm.loop !27

467:                                              ; preds = %391
  br label %468

468:                                              ; preds = %467, %381
  %469 = load ptr, ptr %6, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.jc_test_fixture, ptr %469, i32 0, i32 1
  %471 = load ptr, ptr %470, align 8, !tbaa !29
  store ptr %471, ptr %6, align 8, !tbaa !5
  br label %369, !llvm.loop !30

472:                                              ; preds = %379
  %473 = load ptr, ptr %12, align 8, !tbaa !5
  %474 = load ptr, ptr %13, align 8, !tbaa !5
  %475 = load ptr, ptr %12, align 8, !tbaa !5
  %476 = ptrtoint ptr %474 to i64
  %477 = ptrtoint ptr %475 to i64
  %478 = sub i64 %476, %477
  %479 = load ptr, ptr %8, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.jc_test_stats, ptr %479, i32 0, i32 3
  %481 = load i32, ptr %480, align 4, !tbaa !31
  %482 = load ptr, ptr %8, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.jc_test_stats, ptr %482, i32 0, i32 2
  %484 = load i32, ptr %483, align 8, !tbaa !32
  %485 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %473, i64 noundef %478, ptr noundef @.str.26, i32 noundef %481, i32 noundef %484) #6
  %486 = load ptr, ptr %12, align 8, !tbaa !5
  %487 = sext i32 %485 to i64
  %488 = getelementptr inbounds i8, ptr %486, i64 %487
  store ptr %488, ptr %12, align 8, !tbaa !5
  %489 = load ptr, ptr %12, align 8, !tbaa !5
  %490 = load ptr, ptr %13, align 8, !tbaa !5
  %491 = load ptr, ptr %12, align 8, !tbaa !5
  %492 = ptrtoint ptr %490 to i64
  %493 = ptrtoint ptr %491 to i64
  %494 = sub i64 %492, %493
  %495 = load ptr, ptr %8, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.jc_test_stats, ptr %495, i32 0, i32 4
  %497 = load i64, ptr %496, align 8, !tbaa !21
  %498 = call noundef i64 @_ZL20jc_test_snprint_timePcmm(ptr noundef %489, i64 noundef %494, i64 noundef %497)
  %499 = load ptr, ptr %12, align 8, !tbaa !5
  %500 = getelementptr inbounds i8, ptr %499, i64 %498
  store ptr %500, ptr %12, align 8, !tbaa !5
  %501 = load ptr, ptr %8, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.jc_test_stats, ptr %501, i32 0, i32 1
  %503 = load i32, ptr %502, align 4
  %504 = shl i32 %503, 16
  %505 = ashr i32 %504, 16
  %506 = icmp ne i32 %505, 0
  br i1 %506, label %507, label %545

507:                                              ; preds = %472
  %508 = load ptr, ptr %12, align 8, !tbaa !5
  %509 = load ptr, ptr %13, align 8, !tbaa !5
  %510 = load ptr, ptr %12, align 8, !tbaa !5
  %511 = ptrtoint ptr %509 to i64
  %512 = ptrtoint ptr %510 to i64
  %513 = sub i64 %511, %512
  %514 = load ptr, ptr %8, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.jc_test_stats, ptr %514, i32 0, i32 0
  %516 = load i32, ptr %515, align 8, !tbaa !33
  %517 = load ptr, ptr %8, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.jc_test_stats, ptr %517, i32 0, i32 1
  %519 = load i32, ptr %518, align 4
  %520 = ashr i32 %519, 16
  %521 = load ptr, ptr %8, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.jc_test_stats, ptr %521, i32 0, i32 1
  %523 = load i32, ptr %522, align 4
  %524 = shl i32 %523, 16
  %525 = ashr i32 %524, 16
  %526 = call noundef ptr @_Z17jc_test_get_statev()
  %527 = getelementptr inbounds %struct.jc_test_state, ptr %526, i32 0, i32 6
  %528 = load i64, ptr %527, align 8
  %529 = lshr i64 %528, 31
  %530 = and i64 %529, 1
  %531 = trunc i64 %530 to i32
  %532 = icmp ne i32 %531, 0
  %533 = zext i1 %532 to i64
  %534 = select i1 %532, ptr @.str.25, ptr @.str.6
  %535 = call noundef ptr @_Z17jc_test_get_statev()
  %536 = getelementptr inbounds %struct.jc_test_state, ptr %535, i32 0, i32 6
  %537 = load i64, ptr %536, align 8
  %538 = lshr i64 %537, 31
  %539 = and i64 %538, 1
  %540 = trunc i64 %539 to i32
  %541 = icmp ne i32 %540, 0
  %542 = zext i1 %541 to i64
  %543 = select i1 %541, ptr @.str.7, ptr @.str.6
  %544 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %508, i64 noundef %513, ptr noundef @.str.27, i32 noundef %516, i32 noundef %520, i32 noundef %525, ptr noundef %534, ptr noundef %543) #6
  br label %578

545:                                              ; preds = %472
  %546 = load ptr, ptr %12, align 8, !tbaa !5
  %547 = load ptr, ptr %13, align 8, !tbaa !5
  %548 = load ptr, ptr %12, align 8, !tbaa !5
  %549 = ptrtoint ptr %547 to i64
  %550 = ptrtoint ptr %548 to i64
  %551 = sub i64 %549, %550
  %552 = load ptr, ptr %8, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.jc_test_stats, ptr %552, i32 0, i32 0
  %554 = load i32, ptr %553, align 8, !tbaa !33
  %555 = call noundef ptr @_Z17jc_test_get_statev()
  %556 = getelementptr inbounds %struct.jc_test_state, ptr %555, i32 0, i32 6
  %557 = load i64, ptr %556, align 8
  %558 = lshr i64 %557, 31
  %559 = and i64 %558, 1
  %560 = trunc i64 %559 to i32
  %561 = icmp ne i32 %560, 0
  %562 = zext i1 %561 to i64
  %563 = select i1 %561, ptr @.str.29, ptr @.str.6
  %564 = call noundef ptr @_Z17jc_test_get_statev()
  %565 = getelementptr inbounds %struct.jc_test_state, ptr %564, i32 0, i32 6
  %566 = load i64, ptr %565, align 8
  %567 = lshr i64 %566, 31
  %568 = and i64 %567, 1
  %569 = trunc i64 %568 to i32
  %570 = icmp ne i32 %569, 0
  %571 = zext i1 %570 to i64
  %572 = select i1 %570, ptr @.str.7, ptr @.str.6
  %573 = load ptr, ptr %8, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.jc_test_stats, ptr %573, i32 0, i32 1
  %575 = load i32, ptr %574, align 4
  %576 = ashr i32 %575, 16
  %577 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %546, i64 noundef %551, ptr noundef @.str.28, i32 noundef %554, ptr noundef %563, ptr noundef %572, i32 noundef %576) #6
  br label %578

578:                                              ; preds = %545, %507
  br label %599

579:                                              ; preds = %362
  %580 = load i32, ptr %9, align 4, !tbaa !9
  %581 = icmp eq i32 %580, 6
  br i1 %581, label %582, label %598

582:                                              ; preds = %579
  %583 = load ptr, ptr %10, align 8, !tbaa !5
  %584 = icmp ne ptr %583, null
  br i1 %584, label %585, label %597

585:                                              ; preds = %582
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #6
  %586 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %19, i64 0, i64 0
  call void @llvm.va_start.p0(ptr %586)
  %587 = load ptr, ptr %12, align 8, !tbaa !5
  %588 = load ptr, ptr %13, align 8, !tbaa !5
  %589 = load ptr, ptr %12, align 8, !tbaa !5
  %590 = ptrtoint ptr %588 to i64
  %591 = ptrtoint ptr %589 to i64
  %592 = sub i64 %590, %591
  %593 = load ptr, ptr %10, align 8, !tbaa !5
  %594 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %19, i64 0, i64 0
  %595 = call i32 @vsnprintf(ptr noundef %587, i64 noundef %592, ptr noundef %593, ptr noundef %594) #6
  %596 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %19, i64 0, i64 0
  call void @llvm.va_end.p0(ptr %596)
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #6
  br label %597

597:                                              ; preds = %585, %582
  br label %598

598:                                              ; preds = %597, %579
  br label %599

599:                                              ; preds = %598, %578
  br label %600

600:                                              ; preds = %599, %361
  br label %601

601:                                              ; preds = %600, %282
  br label %602

602:                                              ; preds = %601, %172
  br label %603

603:                                              ; preds = %602, %73
  br label %604

604:                                              ; preds = %603, %25
  %605 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 1023
  store i8 0, ptr %605, align 1, !tbaa !34
  %606 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %607 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, ptr noundef %606)
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 1024, ptr %11) #6
  ret void
}

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z17jc_test_get_statev() #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i64 @_ZL20jc_test_snprint_timePcmm(ptr noundef, i64 noundef, i64 noundef) #3

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

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.va_start.p0(ptr) #4

; Function Attrs: nounwind
declare i32 @vsnprintf(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.va_end.p0(ptr) #4

declare i32 @printf(ptr noundef, ...) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 24}
!12 = !{!"_ZTS15jc_test_fixture", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !13, i64 64, !10, i64 88, !10, i64 91, !10, i64 91, !10, i64 91, !10, i64 91, !10, i64 92, !10, i64 96, !10, i64 97, !10, i64 99, !10, i64 100}
!13 = !{!"_ZTS13jc_test_stats", !10, i64 0, !10, i64 4, !10, i64 6, !10, i64 8, !10, i64 12, !14, i64 16}
!14 = !{!"long", !7, i64 0}
!15 = !{!12, !14, i64 80}
!16 = !{!14, !14, i64 0}
!17 = !{!12, !6, i64 40}
!18 = !{!19, !6, i64 8}
!19 = !{!"_ZTS13jc_test_entry", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !10, i64 32}
!20 = !{!12, !10, i64 92}
!21 = !{!13, !14, i64 16}
!22 = !{!12, !6, i64 32}
!23 = !{!24, !6, i64 224}
!24 = !{!"_ZTS13jc_test_state", !7, i64 0, !7, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !13, i64 232, !10, i64 256, !10, i64 259}
!25 = !{!12, !6, i64 16}
!26 = !{!19, !6, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!12, !6, i64 8}
!30 = distinct !{!30, !28}
!31 = !{!13, !10, i64 12}
!32 = !{!13, !10, i64 8}
!33 = !{!13, !10, i64 0}
!34 = !{!7, !7, i64 0}


; 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"

%struct.__va_list_tag = type { i32, i32, ptr, ptr }

@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
define dso_local void @_Z12jc_test_logfPK15jc_test_fixturePK13jc_test_entryPK13jc_test_statsiPKcz(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, i32 noundef %3, ptr noundef readonly %4, ...) local_unnamed_addr #1 {
  %6 = alloca [1024 x i8], align 16
  %7 = alloca [1 x %struct.__va_list_tag], align 16
  %8 = alloca [1 x %struct.__va_list_tag], align 16
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %6) #5
  %9 = getelementptr inbounds i8, ptr %6, i64 1024
  switch i32 %3, label %260 [
    i32 0, label %10
    i32 1, label %24
    i32 2, label %48
    i32 3, label %68
    i32 4, label %127
    i32 5, label %149
  ]

10:                                               ; preds = %5
  %11 = tail call noundef ptr @_Z17jc_test_get_statev()
  %12 = getelementptr inbounds i8, ptr %11, i64 256
  %13 = load i64, ptr %12, align 8
  %14 = and i64 %13, 2147483648
  %.not160 = icmp eq i64 %14, 0
  %15 = select i1 %.not160, ptr @.str.6, ptr @.str.5
  %16 = getelementptr inbounds i8, ptr %0, i64 24
  %17 = load ptr, ptr %16, align 8, !tbaa !5
  %18 = tail call noundef ptr @_Z17jc_test_get_statev()
  %19 = getelementptr inbounds i8, ptr %18, i64 256
  %20 = load i64, ptr %19, align 8
  %21 = and i64 %20, 2147483648
  %.not161 = icmp eq i64 %21, 0
  %22 = select i1 %.not161, ptr @.str.6, ptr @.str.7
  %23 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %6, i64 noundef 1024, ptr noundef nonnull @.str.4, ptr noundef nonnull %15, ptr noundef %17, ptr noundef nonnull %22) #5
  br label %265

24:                                               ; preds = %5
  %25 = getelementptr inbounds i8, ptr %0, i64 40
  %26 = load ptr, ptr %25, align 8, !tbaa !13
  %.not156 = icmp eq ptr %26, null
  %spec.select = select i1 %.not156, ptr %0, ptr %26
  %.0120.in = getelementptr inbounds i8, ptr %spec.select, i64 80
  %.0120 = load i64, ptr %.0120.in, align 8, !tbaa !14
  %27 = ptrtoint ptr %9 to i64
  %28 = call noundef ptr @_Z17jc_test_get_statev()
  %29 = getelementptr inbounds i8, ptr %28, i64 256
  %30 = load i64, ptr %29, align 8
  %31 = and i64 %30, 2147483648
  %.not157 = icmp eq i64 %31, 0
  %32 = select i1 %.not157, ptr @.str.6, ptr @.str.5
  %33 = getelementptr inbounds i8, ptr %0, i64 24
  %34 = load ptr, ptr %33, align 8, !tbaa !5
  %35 = call noundef ptr @_Z17jc_test_get_statev()
  %36 = getelementptr inbounds i8, ptr %35, i64 256
  %37 = load i64, ptr %36, align 8
  %38 = and i64 %37, 2147483648
  %.not158 = icmp eq i64 %38, 0
  %39 = select i1 %.not158, ptr @.str.6, ptr @.str.7
  %40 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %6, i64 noundef 1024, ptr noundef nonnull @.str.8, ptr noundef nonnull %32, ptr noundef %34, ptr noundef nonnull %39) #5
  %41 = sext i32 %40 to i64
  %42 = getelementptr inbounds i8, ptr %6, i64 %41
  %gepdiff159 = sub nsw i64 1024, %41
  %43 = call noundef i64 @_ZL20jc_test_snprint_timePcmm(ptr noundef nonnull %42, i64 noundef %gepdiff159, i64 noundef %.0120)
  %44 = getelementptr inbounds i8, ptr %42, i64 %43
  %45 = ptrtoint ptr %44 to i64
  %46 = sub i64 %27, %45
  %47 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull %44, i64 noundef %46, ptr noundef nonnull @.str.9) #5
  br label %265

48:                                               ; preds = %5
  %49 = tail call noundef ptr @_Z17jc_test_get_statev()
  %50 = getelementptr inbounds i8, ptr %49, i64 256
  %51 = load i64, ptr %50, align 8
  %52 = and i64 %51, 2147483648
  %.not152 = icmp eq i64 %52, 0
  %53 = select i1 %.not152, ptr @.str.6, ptr @.str.11
  %54 = getelementptr inbounds i8, ptr %1, i64 8
  %55 = load ptr, ptr %54, align 8, !tbaa !15
  %56 = tail call noundef ptr @_Z17jc_test_get_statev()
  %57 = getelementptr inbounds i8, ptr %56, i64 256
  %58 = load i64, ptr %57, align 8
  %59 = and i64 %58, 2147483648
  %.not153 = icmp eq i64 %59, 0
  %60 = select i1 %.not153, ptr @.str.6, ptr @.str.7
  %61 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %6, i64 noundef 1024, ptr noundef nonnull @.str.10, ptr noundef nonnull %53, ptr noundef %55, ptr noundef nonnull %60) #5
  %62 = getelementptr inbounds i8, ptr %0, i64 92
  %63 = load i32, ptr %62, align 4, !tbaa !17
  %.not154 = icmp eq i32 %63, -1
  br i1 %.not154, label %265, label %64

64:                                               ; preds = %48
  %65 = sext i32 %61 to i64
  %66 = getelementptr inbounds i8, ptr %6, i64 %65
  %gepdiff155 = sub nsw i64 1024, %65
  %67 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull %66, i64 noundef %gepdiff155, ptr noundef nonnull @.str.12, i32 noundef %63) #5
  br label %265

68:                                               ; preds = %5
  %69 = tail call noundef ptr @_Z17jc_test_get_statev()
  %70 = getelementptr inbounds i8, ptr %69, i64 256
  %71 = load i64, ptr %70, align 8
  %72 = and i64 %71, 2147483648
  %.not143 = icmp eq i64 %72, 0
  %73 = select i1 %.not143, ptr @.str.14, ptr @.str.13
  %74 = tail call noundef ptr @_Z17jc_test_get_statev()
  %75 = getelementptr inbounds i8, ptr %74, i64 256
  %76 = load i64, ptr %75, align 8
  %77 = and i64 %76, 2147483648
  %.not144 = icmp eq i64 %77, 0
  %78 = select i1 %.not144, ptr @.str.16, ptr @.str.15
  %79 = tail call noundef ptr @_Z17jc_test_get_statev()
  %80 = getelementptr inbounds i8, ptr %79, i64 256
  %81 = load i64, ptr %80, align 8
  %82 = and i64 %81, 2147483648
  %.not145 = icmp eq i64 %82, 0
  %83 = select i1 %.not145, ptr @.str.18, ptr @.str.17
  %84 = ptrtoint ptr %9 to i64
  %85 = call noundef ptr @_Z17jc_test_get_statev()
  %86 = getelementptr inbounds i8, ptr %85, i64 256
  %87 = load i64, ptr %86, align 8
  %88 = and i64 %87, 2147483648
  %.not146 = icmp eq i64 %88, 0
  %89 = select i1 %.not146, ptr @.str.6, ptr @.str.11
  %90 = getelementptr inbounds i8, ptr %1, i64 8
  %91 = load ptr, ptr %90, align 8, !tbaa !15
  %92 = call noundef ptr @_Z17jc_test_get_statev()
  %93 = getelementptr inbounds i8, ptr %92, i64 256
  %94 = load i64, ptr %93, align 8
  %95 = and i64 %94, 2147483648
  %.not147 = icmp eq i64 %95, 0
  %96 = select i1 %.not147, ptr @.str.6, ptr @.str.7
  %97 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %6, i64 noundef 1024, ptr noundef nonnull @.str.19, ptr noundef nonnull %89, ptr noundef %91, ptr noundef nonnull %96) #5
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds i8, ptr %6, i64 %98
  %100 = getelementptr inbounds i8, ptr %0, i64 92
  %101 = load i32, ptr %100, align 4, !tbaa !17
  %.not148 = icmp eq i32 %101, -1
  br i1 %.not148, label %106, label %102

102:                                              ; preds = %68
  %gepdiff149 = sub nsw i64 1024, %98
  %103 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull %99, i64 noundef %gepdiff149, ptr noundef nonnull @.str.12, i32 noundef %101) #5
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds i8, ptr %99, i64 %104
  br label %106

106:                                              ; preds = %102, %68
  %.0119 = phi ptr [ %105, %102 ], [ %99, %68 ]
  %107 = ptrtoint ptr %.0119 to i64
  %108 = sub i64 %84, %107
  %109 = getelementptr inbounds i8, ptr %1, i64 32
  %110 = load i64, ptr %109, align 8
  %111 = and i64 %110, 1
  %.not150 = icmp eq i64 %111, 0
  %112 = and i64 %110, 2
  %.not151 = icmp eq i64 %112, 0
  %113 = select i1 %.not151, ptr %73, ptr %83
  %114 = select i1 %.not150, ptr %113, ptr %78
  %115 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull %.0119, i64 noundef %108, ptr noundef nonnull @.str.20, ptr noundef nonnull %114) #5
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i8, ptr %.0119, i64 %116
  %118 = ptrtoint ptr %117 to i64
  %119 = sub i64 %84, %118
  %120 = getelementptr inbounds i8, ptr %2, i64 16
  %121 = load i64, ptr %120, align 8, !tbaa !18
  %122 = call noundef i64 @_ZL20jc_test_snprint_timePcmm(ptr noundef %117, i64 noundef %119, i64 noundef %121)
  %123 = getelementptr inbounds i8, ptr %117, i64 %122
  %124 = ptrtoint ptr %123 to i64
  %125 = sub i64 %84, %124
  %126 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %123, i64 noundef %125, ptr noundef nonnull @.str.21) #5
  br label %265

127:                                              ; preds = %5
  %128 = tail call noundef ptr @_Z17jc_test_get_statev()
  %129 = getelementptr inbounds i8, ptr %128, i64 256
  %130 = load i64, ptr %129, align 8
  %131 = and i64 %130, 2147483648
  %.not140 = icmp eq i64 %131, 0
  %132 = select i1 %.not140, ptr @.str.6, ptr @.str.23
  %133 = getelementptr inbounds i8, ptr %0, i64 32
  %134 = load ptr, ptr %133, align 8, !tbaa !19
  %135 = tail call noundef ptr @_Z17jc_test_get_statev()
  %136 = getelementptr inbounds i8, ptr %135, i64 256
  %137 = load i64, ptr %136, align 8
  %138 = and i64 %137, 2147483648
  %.not141 = icmp eq i64 %138, 0
  %139 = select i1 %.not141, ptr @.str.6, ptr @.str.7
  %140 = getelementptr inbounds i8, ptr %0, i64 96
  %141 = load i32, ptr %140, align 8
  %142 = shl i32 %141, 8
  %143 = ashr i32 %142, 16
  %144 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %6, i64 noundef 1024, ptr noundef nonnull @.str.22, ptr noundef nonnull %132, ptr noundef %134, ptr noundef nonnull %139, i32 noundef %143) #5
  %.not142 = icmp eq ptr %4, null
  br i1 %.not142, label %265, label %145

145:                                              ; preds = %127
  %146 = sext i32 %144 to i64
  %147 = getelementptr inbounds i8, ptr %6, i64 %146
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #5
  call void @llvm.va_start.p0(ptr nonnull %7)
  %gepdiff = sub nsw i64 1024, %146
  %148 = call i32 @vsnprintf(ptr noundef nonnull %147, i64 noundef %gepdiff, ptr noundef nonnull %4, ptr noundef nonnull %7) #5
  call void @llvm.va_end.p0(ptr nonnull %7)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  br label %265

149:                                              ; preds = %5
  %150 = tail call noundef ptr @_Z17jc_test_get_statev()
  %151 = getelementptr inbounds i8, ptr %150, i64 224
  %152 = getelementptr inbounds i8, ptr %2, i64 4
  %.0166 = load ptr, ptr %151, align 8, !tbaa !20
  %153 = load i32, ptr %152, align 4
  %.mask167 = and i32 %153, 65535
  %154 = icmp ne i32 %.mask167, 0
  %155 = icmp ne ptr %.0166, null
  %156 = select i1 %154, i1 %155, i1 false
  %157 = ptrtoint ptr %9 to i64
  br i1 %156, label %.lr.ph170, label %._crit_edge

.lr.ph170:                                        ; preds = %149, %.loopexit
  %158 = phi i32 [ %204, %.loopexit ], [ %153, %149 ]
  %.0169 = phi ptr [ %.0, %.loopexit ], [ %.0166, %149 ]
  %.1168 = phi ptr [ %.4, %.loopexit ], [ %6, %149 ]
  %159 = getelementptr inbounds i8, ptr %.0169, i64 88
  %160 = load i32, ptr %159, align 8
  %161 = and i32 %160, 134217727
  %.not132 = icmp eq i32 %161, 0
  br i1 %.not132, label %162, label %.loopexit

162:                                              ; preds = %.lr.ph170
  %163 = getelementptr inbounds i8, ptr %.0169, i64 16
  %.0118162 = load ptr, ptr %163, align 8, !tbaa !20
  %.not133163 = icmp eq ptr %.0118162, null
  br i1 %.not133163, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %162
  %164 = getelementptr inbounds i8, ptr %.0169, i64 24
  br label %165

165:                                              ; preds = %.lr.ph, %203
  %.0118165 = phi ptr [ %.0118162, %.lr.ph ], [ %.0118, %203 ]
  %.2164 = phi ptr [ %.1168, %.lr.ph ], [ %.3, %203 ]
  %166 = getelementptr inbounds i8, ptr %.0118165, i64 32
  %167 = load i64, ptr %166, align 8
  %168 = and i64 %167, 1
  %.not134 = icmp eq i64 %168, 0
  br i1 %.not134, label %203, label %169

169:                                              ; preds = %165
  %170 = ptrtoint ptr %.2164 to i64
  %171 = sub i64 %157, %170
  %172 = call noundef ptr @_Z17jc_test_get_statev()
  %173 = getelementptr inbounds i8, ptr %172, i64 256
  %174 = load i64, ptr %173, align 8
  %175 = and i64 %174, 2147483648
  %.not135 = icmp eq i64 %175, 0
  %176 = select i1 %.not135, ptr @.str.6, ptr @.str.23
  %177 = load ptr, ptr %164, align 8, !tbaa !5
  %178 = call noundef ptr @_Z17jc_test_get_statev()
  %179 = getelementptr inbounds i8, ptr %178, i64 256
  %180 = load i64, ptr %179, align 8
  %181 = and i64 %180, 2147483648
  %.not136 = icmp eq i64 %181, 0
  %182 = select i1 %.not136, ptr @.str.6, ptr @.str.7
  %183 = call noundef ptr @_Z17jc_test_get_statev()
  %184 = getelementptr inbounds i8, ptr %183, i64 256
  %185 = load i64, ptr %184, align 8
  %186 = and i64 %185, 2147483648
  %.not137 = icmp eq i64 %186, 0
  %187 = select i1 %.not137, ptr @.str.6, ptr @.str.11
  %188 = getelementptr inbounds i8, ptr %.0118165, i64 8
  %189 = load ptr, ptr %188, align 8, !tbaa !15
  %190 = call noundef ptr @_Z17jc_test_get_statev()
  %191 = getelementptr inbounds i8, ptr %190, i64 256
  %192 = load i64, ptr %191, align 8
  %193 = and i64 %192, 2147483648
  %.not138 = icmp eq i64 %193, 0
  %194 = select i1 %.not138, ptr @.str.6, ptr @.str.25
  %195 = call noundef ptr @_Z17jc_test_get_statev()
  %196 = getelementptr inbounds i8, ptr %195, i64 256
  %197 = load i64, ptr %196, align 8
  %198 = and i64 %197, 2147483648
  %.not139 = icmp eq i64 %198, 0
  %199 = select i1 %.not139, ptr @.str.6, ptr @.str.7
  %200 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %.2164, i64 noundef %171, ptr noundef nonnull @.str.24, ptr noundef nonnull %176, ptr noundef %177, ptr noundef nonnull %182, ptr noundef nonnull %187, ptr noundef %189, ptr noundef nonnull %194, ptr noundef nonnull %199) #5
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds i8, ptr %.2164, i64 %201
  br label %203

203:                                              ; preds = %169, %165
  %.3 = phi ptr [ %202, %169 ], [ %.2164, %165 ]
  %.0118 = load ptr, ptr %.0118165, align 8, !tbaa !20
  %.not133 = icmp eq ptr %.0118, null
  br i1 %.not133, label %.loopexit.loopexit, label %165, !llvm.loop !21

.loopexit.loopexit:                               ; preds = %203
  %.pre = load i32, ptr %152, align 4
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %162, %.lr.ph170
  %204 = phi i32 [ %158, %.lr.ph170 ], [ %158, %162 ], [ %.pre, %.loopexit.loopexit ]
  %.4 = phi ptr [ %.1168, %.lr.ph170 ], [ %.1168, %162 ], [ %.3, %.loopexit.loopexit ]
  %205 = getelementptr inbounds i8, ptr %.0169, i64 8
  %.0 = load ptr, ptr %205, align 8, !tbaa !20
  %.mask = and i32 %204, 65535
  %206 = icmp ne i32 %.mask, 0
  %207 = icmp ne ptr %.0, null
  %208 = select i1 %206, i1 %207, i1 false
  br i1 %208, label %.lr.ph170, label %._crit_edge, !llvm.loop !23

._crit_edge:                                      ; preds = %.loopexit, %149
  %.1.lcssa = phi ptr [ %6, %149 ], [ %.4, %.loopexit ]
  %209 = ptrtoint ptr %.1.lcssa to i64
  %210 = sub i64 %157, %209
  %211 = getelementptr inbounds i8, ptr %2, i64 12
  %212 = load i32, ptr %211, align 4, !tbaa !24
  %213 = getelementptr inbounds i8, ptr %2, i64 8
  %214 = load i32, ptr %213, align 8, !tbaa !25
  %215 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %.1.lcssa, i64 noundef %210, ptr noundef nonnull @.str.26, i32 noundef %212, i32 noundef %214) #5
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds i8, ptr %.1.lcssa, i64 %216
  %218 = ptrtoint ptr %217 to i64
  %219 = sub i64 %157, %218
  %220 = getelementptr inbounds i8, ptr %2, i64 16
  %221 = load i64, ptr %220, align 8, !tbaa !18
  %222 = call noundef i64 @_ZL20jc_test_snprint_timePcmm(ptr noundef %217, i64 noundef %219, i64 noundef %221)
  %223 = getelementptr inbounds i8, ptr %217, i64 %222
  %224 = load i32, ptr %152, align 4
  %225 = shl i32 %224, 16
  %.not = icmp eq i32 %225, 0
  br i1 %.not, label %243, label %226

226:                                              ; preds = %._crit_edge
  %227 = ashr exact i32 %225, 16
  %228 = ptrtoint ptr %223 to i64
  %229 = sub i64 %157, %228
  %230 = load i32, ptr %2, align 8, !tbaa !26
  %231 = ashr i32 %224, 16
  %232 = call noundef ptr @_Z17jc_test_get_statev()
  %233 = getelementptr inbounds i8, ptr %232, i64 256
  %234 = load i64, ptr %233, align 8
  %235 = and i64 %234, 2147483648
  %.not130 = icmp eq i64 %235, 0
  %236 = select i1 %.not130, ptr @.str.6, ptr @.str.25
  %237 = call noundef ptr @_Z17jc_test_get_statev()
  %238 = getelementptr inbounds i8, ptr %237, i64 256
  %239 = load i64, ptr %238, align 8
  %240 = and i64 %239, 2147483648
  %.not131 = icmp eq i64 %240, 0
  %241 = select i1 %.not131, ptr @.str.6, ptr @.str.7
  %242 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %223, i64 noundef %229, ptr noundef nonnull @.str.27, i32 noundef %230, i32 noundef %231, i32 noundef %227, ptr noundef nonnull %236, ptr noundef nonnull %241) #5
  br label %265

243:                                              ; preds = %._crit_edge
  %244 = ptrtoint ptr %223 to i64
  %245 = sub i64 %157, %244
  %246 = load i32, ptr %2, align 8, !tbaa !26
  %247 = call noundef ptr @_Z17jc_test_get_statev()
  %248 = getelementptr inbounds i8, ptr %247, i64 256
  %249 = load i64, ptr %248, align 8
  %250 = and i64 %249, 2147483648
  %.not128 = icmp eq i64 %250, 0
  %251 = select i1 %.not128, ptr @.str.6, ptr @.str.29
  %252 = call noundef ptr @_Z17jc_test_get_statev()
  %253 = getelementptr inbounds i8, ptr %252, i64 256
  %254 = load i64, ptr %253, align 8
  %255 = and i64 %254, 2147483648
  %.not129 = icmp eq i64 %255, 0
  %256 = select i1 %.not129, ptr @.str.6, ptr @.str.7
  %257 = load i32, ptr %152, align 4
  %258 = ashr i32 %257, 16
  %259 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %223, i64 noundef %245, ptr noundef nonnull @.str.28, i32 noundef %246, ptr noundef nonnull %251, ptr noundef nonnull %256, i32 noundef %258) #5
  br label %265

260:                                              ; preds = %5
  %261 = icmp eq i32 %3, 6
  %262 = icmp ne ptr %4, null
  %or.cond = and i1 %261, %262
  br i1 %or.cond, label %263, label %265

263:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #5
  call void @llvm.va_start.p0(ptr nonnull %8)
  %264 = call i32 @vsnprintf(ptr noundef nonnull %6, i64 noundef 1024, ptr noundef nonnull %4, ptr noundef nonnull %8) #5
  call void @llvm.va_end.p0(ptr nonnull %8)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #5
  br label %265

265:                                              ; preds = %24, %106, %243, %226, %263, %260, %127, %145, %48, %64, %10
  %266 = getelementptr inbounds i8, ptr %6, i64 1023
  store i8 0, ptr %266, align 1, !tbaa !27
  %267 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef nonnull %6)
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #5
  ret void
}

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z17jc_test_get_statev() local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i64 @_ZL20jc_test_snprint_timePcmm(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.va_start.p0(ptr) #4

; Function Attrs: nofree nounwind
declare noundef i32 @vsnprintf(ptr nocapture noundef, i64 noundef, ptr nocapture noundef readonly, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.va_end.p0(ptr) #4

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #0

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 24}
!6 = !{!"_ZTS15jc_test_fixture", !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !10, i64 64, !11, i64 88, !11, i64 91, !11, i64 91, !11, i64 91, !11, i64 91, !11, i64 92, !11, i64 96, !11, i64 97, !11, i64 99, !11, i64 100}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTS13jc_test_stats", !11, i64 0, !11, i64 4, !11, i64 6, !11, i64 8, !11, i64 12, !12, i64 16}
!11 = !{!"int", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!6, !7, i64 40}
!14 = !{!6, !12, i64 80}
!15 = !{!16, !7, i64 8}
!16 = !{!"_ZTS13jc_test_entry", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !11, i64 32, !11, i64 32}
!17 = !{!6, !11, i64 92}
!18 = !{!10, !12, i64 16}
!19 = !{!6, !7, i64 32}
!20 = !{!7, !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = !{!10, !11, i64 12}
!25 = !{!10, !11, i64 8}
!26 = !{!10, !11, i64 0}
!27 = !{!8, !8, i64 0}


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