; LLVM IR from libxsmm/libxsmm :: samples/external_aux (perf_counter_markers)

; 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.perf_uncore_fd = type { [6 x i32], [6 x i32], [6 x i32], [6 x i32], [6 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], i32 }
%struct.ctrs_uncore = type { [6 x i64], [6 x i64], [6 x i64], [6 x i64], [6 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], i32 }

@gbl_uncore_perf_fd = external hidden global %struct.perf_uncore_fd, align 4

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

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

; Function Attrs: nounwind uwtable
define dso_local void @read_uncore_ctrs(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #2
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %5

5:                                                ; preds = %79, %1
  %6 = load i32, ptr %3, align 4, !tbaa !9
  %7 = icmp slt i32 %6, 6
  br i1 %7, label %8, label %82

8:                                                ; preds = %5
  %9 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %10 = icmp eq i32 %9, 0
  br i1 %10, label %11, label %42

11:                                               ; preds = %8
  %12 = load i32, ptr %3, align 4, !tbaa !9
  %13 = sext i32 %12 to i64
  %14 = getelementptr inbounds [6 x i32], ptr @gbl_uncore_perf_fd, i64 0, i64 %13
  %15 = load i32, ptr %14, align 4, !tbaa !9
  %16 = call i64 @readctr(i32 noundef %15)
  %17 = load ptr, ptr %2, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.ctrs_uncore, ptr %17, i32 0, i32 0
  %19 = load i32, ptr %3, align 4, !tbaa !9
  %20 = sext i32 %19 to i64
  %21 = getelementptr inbounds [6 x i64], ptr %18, i64 0, i64 %20
  store i64 %16, ptr %21, align 8, !tbaa !13
  %22 = load i32, ptr %3, align 4, !tbaa !9
  %23 = sext i32 %22 to i64
  %24 = getelementptr inbounds [6 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 1), i64 0, i64 %23
  %25 = load i32, ptr %24, align 4, !tbaa !9
  %26 = call i64 @readctr(i32 noundef %25)
  %27 = load ptr, ptr %2, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.ctrs_uncore, ptr %27, i32 0, i32 1
  %29 = load i32, ptr %3, align 4, !tbaa !9
  %30 = sext i32 %29 to i64
  %31 = getelementptr inbounds [6 x i64], ptr %28, i64 0, i64 %30
  store i64 %26, ptr %31, align 8, !tbaa !13
  %32 = load i32, ptr %3, align 4, !tbaa !9
  %33 = sext i32 %32 to i64
  %34 = getelementptr inbounds [6 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 4), i64 0, i64 %33
  %35 = load i32, ptr %34, align 4, !tbaa !9
  %36 = call i64 @readctr(i32 noundef %35)
  %37 = load ptr, ptr %2, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.ctrs_uncore, ptr %37, i32 0, i32 4
  %39 = load i32, ptr %3, align 4, !tbaa !9
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds [6 x i64], ptr %38, i64 0, i64 %40
  store i64 %36, ptr %41, align 8, !tbaa !13
  br label %78

42:                                               ; preds = %8
  %43 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %44 = icmp eq i32 %43, 1
  br i1 %44, label %45, label %76

45:                                               ; preds = %42
  %46 = load i32, ptr %3, align 4, !tbaa !9
  %47 = sext i32 %46 to i64
  %48 = getelementptr inbounds [6 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 2), i64 0, i64 %47
  %49 = load i32, ptr %48, align 4, !tbaa !9
  %50 = call i64 @readctr(i32 noundef %49)
  %51 = load ptr, ptr %2, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.ctrs_uncore, ptr %51, i32 0, i32 2
  %53 = load i32, ptr %3, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [6 x i64], ptr %52, i64 0, i64 %54
  store i64 %50, ptr %55, align 8, !tbaa !13
  %56 = load i32, ptr %3, align 4, !tbaa !9
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds [6 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 3), i64 0, i64 %57
  %59 = load i32, ptr %58, align 4, !tbaa !9
  %60 = call i64 @readctr(i32 noundef %59)
  %61 = load ptr, ptr %2, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.ctrs_uncore, ptr %61, i32 0, i32 3
  %63 = load i32, ptr %3, align 4, !tbaa !9
  %64 = sext i32 %63 to i64
  %65 = getelementptr inbounds [6 x i64], ptr %62, i64 0, i64 %64
  store i64 %60, ptr %65, align 8, !tbaa !13
  %66 = load i32, ptr %3, align 4, !tbaa !9
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds [6 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 4), i64 0, i64 %67
  %69 = load i32, ptr %68, align 4, !tbaa !9
  %70 = call i64 @readctr(i32 noundef %69)
  %71 = load ptr, ptr %2, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.ctrs_uncore, ptr %71, i32 0, i32 4
  %73 = load i32, ptr %3, align 4, !tbaa !9
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds [6 x i64], ptr %72, i64 0, i64 %74
  store i64 %70, ptr %75, align 8, !tbaa !13
  br label %77

76:                                               ; preds = %42
  br label %77

77:                                               ; preds = %76, %45
  br label %78

78:                                               ; preds = %77, %11
  br label %79

79:                                               ; preds = %78
  %80 = load i32, ptr %3, align 4, !tbaa !9
  %81 = add nsw i32 %80, 1
  store i32 %81, ptr %3, align 4, !tbaa !9
  br label %5, !llvm.loop !15

82:                                               ; preds = %5
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %83

83:                                               ; preds = %552, %82
  %84 = load i32, ptr %4, align 4, !tbaa !9
  %85 = icmp slt i32 %84, 28
  br i1 %85, label %86, label %555

86:                                               ; preds = %83
  %87 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %88 = icmp eq i32 %87, 2
  br i1 %88, label %89, label %120

89:                                               ; preds = %86
  %90 = load i32, ptr %4, align 4, !tbaa !9
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 5), i64 0, i64 %91
  %93 = load i32, ptr %92, align 4, !tbaa !9
  %94 = call i64 @readctr(i32 noundef %93)
  %95 = load ptr, ptr %2, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.ctrs_uncore, ptr %95, i32 0, i32 5
  %97 = load i32, ptr %4, align 4, !tbaa !9
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds [28 x i64], ptr %96, i64 0, i64 %98
  store i64 %94, ptr %99, align 8, !tbaa !13
  %100 = load i32, ptr %4, align 4, !tbaa !9
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 6), i64 0, i64 %101
  %103 = load i32, ptr %102, align 4, !tbaa !9
  %104 = call i64 @readctr(i32 noundef %103)
  %105 = load ptr, ptr %2, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.ctrs_uncore, ptr %105, i32 0, i32 6
  %107 = load i32, ptr %4, align 4, !tbaa !9
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [28 x i64], ptr %106, i64 0, i64 %108
  store i64 %104, ptr %109, align 8, !tbaa !13
  %110 = load i32, ptr %4, align 4, !tbaa !9
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 28), i64 0, i64 %111
  %113 = load i32, ptr %112, align 4, !tbaa !9
  %114 = call i64 @readctr(i32 noundef %113)
  %115 = load ptr, ptr %2, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.ctrs_uncore, ptr %115, i32 0, i32 30
  %117 = load i32, ptr %4, align 4, !tbaa !9
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds [28 x i64], ptr %116, i64 0, i64 %118
  store i64 %114, ptr %119, align 8, !tbaa !13
  br label %551

120:                                              ; preds = %86
  %121 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %122 = icmp eq i32 %121, 11
  br i1 %122, label %123, label %154

123:                                              ; preds = %120
  %124 = load i32, ptr %4, align 4, !tbaa !9
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 7), i64 0, i64 %125
  %127 = load i32, ptr %126, align 4, !tbaa !9
  %128 = call i64 @readctr(i32 noundef %127)
  %129 = load ptr, ptr %2, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.ctrs_uncore, ptr %129, i32 0, i32 7
  %131 = load i32, ptr %4, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds [28 x i64], ptr %130, i64 0, i64 %132
  store i64 %128, ptr %133, align 8, !tbaa !13
  %134 = load i32, ptr %4, align 4, !tbaa !9
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 8), i64 0, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !9
  %138 = call i64 @readctr(i32 noundef %137)
  %139 = load ptr, ptr %2, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.ctrs_uncore, ptr %139, i32 0, i32 8
  %141 = load i32, ptr %4, align 4, !tbaa !9
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds [28 x i64], ptr %140, i64 0, i64 %142
  store i64 %138, ptr %143, align 8, !tbaa !13
  %144 = load i32, ptr %4, align 4, !tbaa !9
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 29), i64 0, i64 %145
  %147 = load i32, ptr %146, align 4, !tbaa !9
  %148 = call i64 @readctr(i32 noundef %147)
  %149 = load ptr, ptr %2, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.ctrs_uncore, ptr %149, i32 0, i32 31
  %151 = load i32, ptr %4, align 4, !tbaa !9
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds [28 x i64], ptr %150, i64 0, i64 %152
  store i64 %148, ptr %153, align 8, !tbaa !13
  br label %550

154:                                              ; preds = %120
  %155 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %156 = icmp eq i32 %155, 12
  br i1 %156, label %157, label %188

157:                                              ; preds = %154
  %158 = load i32, ptr %4, align 4, !tbaa !9
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 9), i64 0, i64 %159
  %161 = load i32, ptr %160, align 4, !tbaa !9
  %162 = call i64 @readctr(i32 noundef %161)
  %163 = load ptr, ptr %2, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.ctrs_uncore, ptr %163, i32 0, i32 9
  %165 = load i32, ptr %4, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds [28 x i64], ptr %164, i64 0, i64 %166
  store i64 %162, ptr %167, align 8, !tbaa !13
  %168 = load i32, ptr %4, align 4, !tbaa !9
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 10), i64 0, i64 %169
  %171 = load i32, ptr %170, align 4, !tbaa !9
  %172 = call i64 @readctr(i32 noundef %171)
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.ctrs_uncore, ptr %173, i32 0, i32 10
  %175 = load i32, ptr %4, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds [28 x i64], ptr %174, i64 0, i64 %176
  store i64 %172, ptr %177, align 8, !tbaa !13
  %178 = load i32, ptr %4, align 4, !tbaa !9
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 29), i64 0, i64 %179
  %181 = load i32, ptr %180, align 4, !tbaa !9
  %182 = call i64 @readctr(i32 noundef %181)
  %183 = load ptr, ptr %2, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.ctrs_uncore, ptr %183, i32 0, i32 31
  %185 = load i32, ptr %4, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [28 x i64], ptr %184, i64 0, i64 %186
  store i64 %182, ptr %187, align 8, !tbaa !13
  br label %549

188:                                              ; preds = %154
  %189 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %190 = icmp eq i32 %189, 13
  br i1 %190, label %191, label %222

191:                                              ; preds = %188
  %192 = load i32, ptr %4, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 11), i64 0, i64 %193
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = call i64 @readctr(i32 noundef %195)
  %197 = load ptr, ptr %2, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.ctrs_uncore, ptr %197, i32 0, i32 11
  %199 = load i32, ptr %4, align 4, !tbaa !9
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds [28 x i64], ptr %198, i64 0, i64 %200
  store i64 %196, ptr %201, align 8, !tbaa !13
  %202 = load i32, ptr %4, align 4, !tbaa !9
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 12), i64 0, i64 %203
  %205 = load i32, ptr %204, align 4, !tbaa !9
  %206 = call i64 @readctr(i32 noundef %205)
  %207 = load ptr, ptr %2, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.ctrs_uncore, ptr %207, i32 0, i32 12
  %209 = load i32, ptr %4, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds [28 x i64], ptr %208, i64 0, i64 %210
  store i64 %206, ptr %211, align 8, !tbaa !13
  %212 = load i32, ptr %4, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 29), i64 0, i64 %213
  %215 = load i32, ptr %214, align 4, !tbaa !9
  %216 = call i64 @readctr(i32 noundef %215)
  %217 = load ptr, ptr %2, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.ctrs_uncore, ptr %217, i32 0, i32 31
  %219 = load i32, ptr %4, align 4, !tbaa !9
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds [28 x i64], ptr %218, i64 0, i64 %220
  store i64 %216, ptr %221, align 8, !tbaa !13
  br label %548

222:                                              ; preds = %188
  %223 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %224 = icmp eq i32 %223, 14
  br i1 %224, label %225, label %276

225:                                              ; preds = %222
  %226 = load i32, ptr %4, align 4, !tbaa !9
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 9), i64 0, i64 %227
  %229 = load i32, ptr %228, align 4, !tbaa !9
  %230 = call i64 @readctr(i32 noundef %229)
  %231 = load ptr, ptr %2, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.ctrs_uncore, ptr %231, i32 0, i32 9
  %233 = load i32, ptr %4, align 4, !tbaa !9
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds [28 x i64], ptr %232, i64 0, i64 %234
  store i64 %230, ptr %235, align 8, !tbaa !13
  %236 = load i32, ptr %4, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 10), i64 0, i64 %237
  %239 = load i32, ptr %238, align 4, !tbaa !9
  %240 = call i64 @readctr(i32 noundef %239)
  %241 = load ptr, ptr %2, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.ctrs_uncore, ptr %241, i32 0, i32 10
  %243 = load i32, ptr %4, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds [28 x i64], ptr %242, i64 0, i64 %244
  store i64 %240, ptr %245, align 8, !tbaa !13
  %246 = load i32, ptr %4, align 4, !tbaa !9
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 11), i64 0, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !9
  %250 = call i64 @readctr(i32 noundef %249)
  %251 = load ptr, ptr %2, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.ctrs_uncore, ptr %251, i32 0, i32 11
  %253 = load i32, ptr %4, align 4, !tbaa !9
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds [28 x i64], ptr %252, i64 0, i64 %254
  store i64 %250, ptr %255, align 8, !tbaa !13
  %256 = load i32, ptr %4, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 12), i64 0, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = call i64 @readctr(i32 noundef %259)
  %261 = load ptr, ptr %2, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.ctrs_uncore, ptr %261, i32 0, i32 12
  %263 = load i32, ptr %4, align 4, !tbaa !9
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds [28 x i64], ptr %262, i64 0, i64 %264
  store i64 %260, ptr %265, align 8, !tbaa !13
  %266 = load i32, ptr %4, align 4, !tbaa !9
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 29), i64 0, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !9
  %270 = call i64 @readctr(i32 noundef %269)
  %271 = load ptr, ptr %2, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.ctrs_uncore, ptr %271, i32 0, i32 31
  %273 = load i32, ptr %4, align 4, !tbaa !9
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds [28 x i64], ptr %272, i64 0, i64 %274
  store i64 %270, ptr %275, align 8, !tbaa !13
  br label %547

276:                                              ; preds = %222
  %277 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %278 = icmp eq i32 %277, 3
  br i1 %278, label %279, label %350

279:                                              ; preds = %276
  %280 = load i32, ptr %4, align 4, !tbaa !9
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 13), i64 0, i64 %281
  %283 = load i32, ptr %282, align 4, !tbaa !9
  %284 = call i64 @readctr(i32 noundef %283)
  %285 = load ptr, ptr %2, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.ctrs_uncore, ptr %285, i32 0, i32 15
  %287 = load i32, ptr %4, align 4, !tbaa !9
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds [28 x i64], ptr %286, i64 0, i64 %288
  store i64 %284, ptr %289, align 8, !tbaa !13
  %290 = load i32, ptr %4, align 4, !tbaa !9
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 14), i64 0, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !9
  %294 = call i64 @readctr(i32 noundef %293)
  %295 = load ptr, ptr %2, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.ctrs_uncore, ptr %295, i32 0, i32 16
  %297 = load i32, ptr %4, align 4, !tbaa !9
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds [28 x i64], ptr %296, i64 0, i64 %298
  store i64 %294, ptr %299, align 8, !tbaa !13
  %300 = load i32, ptr %4, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 15), i64 0, i64 %301
  %303 = load i32, ptr %302, align 4, !tbaa !9
  %304 = call i64 @readctr(i32 noundef %303)
  %305 = load ptr, ptr %2, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.ctrs_uncore, ptr %305, i32 0, i32 17
  %307 = load i32, ptr %4, align 4, !tbaa !9
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds [28 x i64], ptr %306, i64 0, i64 %308
  store i64 %304, ptr %309, align 8, !tbaa !13
  %310 = load i32, ptr %4, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 16), i64 0, i64 %311
  %313 = load i32, ptr %312, align 4, !tbaa !9
  %314 = call i64 @readctr(i32 noundef %313)
  %315 = load ptr, ptr %2, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.ctrs_uncore, ptr %315, i32 0, i32 18
  %317 = load i32, ptr %4, align 4, !tbaa !9
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds [28 x i64], ptr %316, i64 0, i64 %318
  store i64 %314, ptr %319, align 8, !tbaa !13
  %320 = load i32, ptr %4, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 17), i64 0, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !9
  %324 = call i64 @readctr(i32 noundef %323)
  %325 = load ptr, ptr %2, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.ctrs_uncore, ptr %325, i32 0, i32 19
  %327 = load i32, ptr %4, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds [28 x i64], ptr %326, i64 0, i64 %328
  store i64 %324, ptr %329, align 8, !tbaa !13
  %330 = load i32, ptr %4, align 4, !tbaa !9
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 18), i64 0, i64 %331
  %333 = load i32, ptr %332, align 4, !tbaa !9
  %334 = call i64 @readctr(i32 noundef %333)
  %335 = load ptr, ptr %2, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.ctrs_uncore, ptr %335, i32 0, i32 20
  %337 = load i32, ptr %4, align 4, !tbaa !9
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds [28 x i64], ptr %336, i64 0, i64 %338
  store i64 %334, ptr %339, align 8, !tbaa !13
  %340 = load i32, ptr %4, align 4, !tbaa !9
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 28), i64 0, i64 %341
  %343 = load i32, ptr %342, align 4, !tbaa !9
  %344 = call i64 @readctr(i32 noundef %343)
  %345 = load ptr, ptr %2, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.ctrs_uncore, ptr %345, i32 0, i32 30
  %347 = load i32, ptr %4, align 4, !tbaa !9
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds [28 x i64], ptr %346, i64 0, i64 %348
  store i64 %344, ptr %349, align 8, !tbaa !13
  br label %546

350:                                              ; preds = %276
  %351 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %352 = icmp eq i32 %351, 5
  br i1 %352, label %353, label %374

353:                                              ; preds = %350
  %354 = load i32, ptr %4, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 19), i64 0, i64 %355
  %357 = load i32, ptr %356, align 4, !tbaa !9
  %358 = call i64 @readctr(i32 noundef %357)
  %359 = load ptr, ptr %2, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.ctrs_uncore, ptr %359, i32 0, i32 21
  %361 = load i32, ptr %4, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds [28 x i64], ptr %360, i64 0, i64 %362
  store i64 %358, ptr %363, align 8, !tbaa !13
  %364 = load i32, ptr %4, align 4, !tbaa !9
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 28), i64 0, i64 %365
  %367 = load i32, ptr %366, align 4, !tbaa !9
  %368 = call i64 @readctr(i32 noundef %367)
  %369 = load ptr, ptr %2, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.ctrs_uncore, ptr %369, i32 0, i32 30
  %371 = load i32, ptr %4, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [28 x i64], ptr %370, i64 0, i64 %372
  store i64 %368, ptr %373, align 8, !tbaa !13
  br label %545

374:                                              ; preds = %350
  %375 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %376 = icmp eq i32 %375, 6
  br i1 %376, label %377, label %398

377:                                              ; preds = %374
  %378 = load i32, ptr %4, align 4, !tbaa !9
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 20), i64 0, i64 %379
  %381 = load i32, ptr %380, align 4, !tbaa !9
  %382 = call i64 @readctr(i32 noundef %381)
  %383 = load ptr, ptr %2, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.ctrs_uncore, ptr %383, i32 0, i32 22
  %385 = load i32, ptr %4, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds [28 x i64], ptr %384, i64 0, i64 %386
  store i64 %382, ptr %387, align 8, !tbaa !13
  %388 = load i32, ptr %4, align 4, !tbaa !9
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 28), i64 0, i64 %389
  %391 = load i32, ptr %390, align 4, !tbaa !9
  %392 = call i64 @readctr(i32 noundef %391)
  %393 = load ptr, ptr %2, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.ctrs_uncore, ptr %393, i32 0, i32 30
  %395 = load i32, ptr %4, align 4, !tbaa !9
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds [28 x i64], ptr %394, i64 0, i64 %396
  store i64 %392, ptr %397, align 8, !tbaa !13
  br label %544

398:                                              ; preds = %374
  %399 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %400 = icmp eq i32 %399, 7
  br i1 %400, label %401, label %422

401:                                              ; preds = %398
  %402 = load i32, ptr %4, align 4, !tbaa !9
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 21), i64 0, i64 %403
  %405 = load i32, ptr %404, align 4, !tbaa !9
  %406 = call i64 @readctr(i32 noundef %405)
  %407 = load ptr, ptr %2, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.ctrs_uncore, ptr %407, i32 0, i32 23
  %409 = load i32, ptr %4, align 4, !tbaa !9
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds [28 x i64], ptr %408, i64 0, i64 %410
  store i64 %406, ptr %411, align 8, !tbaa !13
  %412 = load i32, ptr %4, align 4, !tbaa !9
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 28), i64 0, i64 %413
  %415 = load i32, ptr %414, align 4, !tbaa !9
  %416 = call i64 @readctr(i32 noundef %415)
  %417 = load ptr, ptr %2, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.ctrs_uncore, ptr %417, i32 0, i32 30
  %419 = load i32, ptr %4, align 4, !tbaa !9
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds [28 x i64], ptr %418, i64 0, i64 %420
  store i64 %416, ptr %421, align 8, !tbaa !13
  br label %543

422:                                              ; preds = %398
  %423 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %424 = icmp eq i32 %423, 8
  br i1 %424, label %425, label %456

425:                                              ; preds = %422
  %426 = load i32, ptr %4, align 4, !tbaa !9
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 22), i64 0, i64 %427
  %429 = load i32, ptr %428, align 4, !tbaa !9
  %430 = call i64 @readctr(i32 noundef %429)
  %431 = load ptr, ptr %2, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.ctrs_uncore, ptr %431, i32 0, i32 24
  %433 = load i32, ptr %4, align 4, !tbaa !9
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds [28 x i64], ptr %432, i64 0, i64 %434
  store i64 %430, ptr %435, align 8, !tbaa !13
  %436 = load i32, ptr %4, align 4, !tbaa !9
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 23), i64 0, i64 %437
  %439 = load i32, ptr %438, align 4, !tbaa !9
  %440 = call i64 @readctr(i32 noundef %439)
  %441 = load ptr, ptr %2, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.ctrs_uncore, ptr %441, i32 0, i32 25
  %443 = load i32, ptr %4, align 4, !tbaa !9
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds [28 x i64], ptr %442, i64 0, i64 %444
  store i64 %440, ptr %445, align 8, !tbaa !13
  %446 = load i32, ptr %4, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 28), i64 0, i64 %447
  %449 = load i32, ptr %448, align 4, !tbaa !9
  %450 = call i64 @readctr(i32 noundef %449)
  %451 = load ptr, ptr %2, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.ctrs_uncore, ptr %451, i32 0, i32 30
  %453 = load i32, ptr %4, align 4, !tbaa !9
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds [28 x i64], ptr %452, i64 0, i64 %454
  store i64 %450, ptr %455, align 8, !tbaa !13
  br label %542

456:                                              ; preds = %422
  %457 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %458 = icmp eq i32 %457, 9
  br i1 %458, label %459, label %480

459:                                              ; preds = %456
  %460 = load i32, ptr %4, align 4, !tbaa !9
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 24), i64 0, i64 %461
  %463 = load i32, ptr %462, align 4, !tbaa !9
  %464 = call i64 @readctr(i32 noundef %463)
  %465 = load ptr, ptr %2, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.ctrs_uncore, ptr %465, i32 0, i32 26
  %467 = load i32, ptr %4, align 4, !tbaa !9
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds [28 x i64], ptr %466, i64 0, i64 %468
  store i64 %464, ptr %469, align 8, !tbaa !13
  %470 = load i32, ptr %4, align 4, !tbaa !9
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 28), i64 0, i64 %471
  %473 = load i32, ptr %472, align 4, !tbaa !9
  %474 = call i64 @readctr(i32 noundef %473)
  %475 = load ptr, ptr %2, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.ctrs_uncore, ptr %475, i32 0, i32 30
  %477 = load i32, ptr %4, align 4, !tbaa !9
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds [28 x i64], ptr %476, i64 0, i64 %478
  store i64 %474, ptr %479, align 8, !tbaa !13
  br label %541

480:                                              ; preds = %456
  %481 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %482 = icmp eq i32 %481, 10
  br i1 %482, label %483, label %514

483:                                              ; preds = %480
  %484 = load i32, ptr %4, align 4, !tbaa !9
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 25), i64 0, i64 %485
  %487 = load i32, ptr %486, align 4, !tbaa !9
  %488 = call i64 @readctr(i32 noundef %487)
  %489 = load ptr, ptr %2, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.ctrs_uncore, ptr %489, i32 0, i32 27
  %491 = load i32, ptr %4, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds [28 x i64], ptr %490, i64 0, i64 %492
  store i64 %488, ptr %493, align 8, !tbaa !13
  %494 = load i32, ptr %4, align 4, !tbaa !9
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 26), i64 0, i64 %495
  %497 = load i32, ptr %496, align 4, !tbaa !9
  %498 = call i64 @readctr(i32 noundef %497)
  %499 = load ptr, ptr %2, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.ctrs_uncore, ptr %499, i32 0, i32 28
  %501 = load i32, ptr %4, align 4, !tbaa !9
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds [28 x i64], ptr %500, i64 0, i64 %502
  store i64 %498, ptr %503, align 8, !tbaa !13
  %504 = load i32, ptr %4, align 4, !tbaa !9
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 28), i64 0, i64 %505
  %507 = load i32, ptr %506, align 4, !tbaa !9
  %508 = call i64 @readctr(i32 noundef %507)
  %509 = load ptr, ptr %2, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.ctrs_uncore, ptr %509, i32 0, i32 30
  %511 = load i32, ptr %4, align 4, !tbaa !9
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds [28 x i64], ptr %510, i64 0, i64 %512
  store i64 %508, ptr %513, align 8, !tbaa !13
  br label %540

514:                                              ; preds = %480
  %515 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %516 = icmp eq i32 %515, 4
  br i1 %516, label %517, label %538

517:                                              ; preds = %514
  %518 = load i32, ptr %4, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 27), i64 0, i64 %519
  %521 = load i32, ptr %520, align 4, !tbaa !9
  %522 = call i64 @readctr(i32 noundef %521)
  %523 = load ptr, ptr %2, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.ctrs_uncore, ptr %523, i32 0, i32 29
  %525 = load i32, ptr %4, align 4, !tbaa !9
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds [28 x i64], ptr %524, i64 0, i64 %526
  store i64 %522, ptr %527, align 8, !tbaa !13
  %528 = load i32, ptr %4, align 4, !tbaa !9
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 28), i64 0, i64 %529
  %531 = load i32, ptr %530, align 4, !tbaa !9
  %532 = call i64 @readctr(i32 noundef %531)
  %533 = load ptr, ptr %2, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.ctrs_uncore, ptr %533, i32 0, i32 30
  %535 = load i32, ptr %4, align 4, !tbaa !9
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds [28 x i64], ptr %534, i64 0, i64 %536
  store i64 %532, ptr %537, align 8, !tbaa !13
  br label %539

538:                                              ; preds = %514
  br label %539

539:                                              ; preds = %538, %517
  br label %540

540:                                              ; preds = %539, %483
  br label %541

541:                                              ; preds = %540, %459
  br label %542

542:                                              ; preds = %541, %425
  br label %543

543:                                              ; preds = %542, %401
  br label %544

544:                                              ; preds = %543, %377
  br label %545

545:                                              ; preds = %544, %353
  br label %546

546:                                              ; preds = %545, %279
  br label %547

547:                                              ; preds = %546, %225
  br label %548

548:                                              ; preds = %547, %191
  br label %549

549:                                              ; preds = %548, %157
  br label %550

550:                                              ; preds = %549, %123
  br label %551

551:                                              ; preds = %550, %89
  br label %552

552:                                              ; preds = %551
  %553 = load i32, ptr %4, align 4, !tbaa !9
  %554 = add nsw i32 %553, 1
  store i32 %554, ptr %4, align 4, !tbaa !9
  br label %83, !llvm.loop !17

555:                                              ; preds = %83
  %556 = load i32, ptr getelementptr inbounds (%struct.perf_uncore_fd, ptr @gbl_uncore_perf_fd, i32 0, i32 30), align 4, !tbaa !11
  %557 = load ptr, ptr %2, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.ctrs_uncore, ptr %557, i32 0, i32 32
  store i32 %556, ptr %558, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #2
  ret void
}

; Function Attrs: nounwind uwtable
declare hidden i64 @readctr(i32 noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 2920}
!12 = !{!"perf_uncore_fd", !7, i64 0, !7, i64 24, !7, i64 48, !7, i64 72, !7, i64 96, !7, i64 120, !7, i64 232, !7, i64 344, !7, i64 456, !7, i64 568, !7, i64 680, !7, i64 792, !7, i64 904, !7, i64 1016, !7, i64 1128, !7, i64 1240, !7, i64 1352, !7, i64 1464, !7, i64 1576, !7, i64 1688, !7, i64 1800, !7, i64 1912, !7, i64 2024, !7, i64 2136, !7, i64 2248, !7, i64 2360, !7, i64 2472, !7, i64 2584, !7, i64 2696, !7, i64 2808, !10, i64 2920}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!19, !10, i64 6288}
!19 = !{!"ctrs_uncore", !7, i64 0, !7, i64 48, !7, i64 96, !7, i64 144, !7, i64 192, !7, i64 240, !7, i64 464, !7, i64 688, !7, i64 912, !7, i64 1136, !7, i64 1360, !7, i64 1584, !7, i64 1808, !7, i64 2032, !7, i64 2256, !7, i64 2480, !7, i64 2704, !7, i64 2928, !7, i64 3152, !7, i64 3376, !7, i64 3600, !7, i64 3824, !7, i64 4048, !7, i64 4272, !7, i64 4496, !7, i64 4720, !7, i64 4944, !7, i64 5168, !7, i64 5392, !7, i64 5616, !7, i64 5840, !7, i64 6064, !10, i64 6288}


; 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.perf_uncore_fd = type { [6 x i32], [6 x i32], [6 x i32], [6 x i32], [6 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], i32 }

@gbl_uncore_perf_fd = external hidden local_unnamed_addr global %struct.perf_uncore_fd, align 4

; Function Attrs: nounwind uwtable
define dso_local void @read_uncore_ctrs(ptr noundef writeonly %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 192
  %3 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2920), align 4, !tbaa !5
  switch i32 %3, label %15 [
    i32 0, label %4
    i32 1, label %6
  ]

4:                                                ; preds = %1
  %5 = getelementptr inbounds i8, ptr %0, i64 48
  br label %thread-pre-split

6:                                                ; preds = %1
  %7 = getelementptr inbounds i8, ptr %0, i64 144
  %8 = getelementptr inbounds i8, ptr %0, i64 96
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %6, %4
  %.sink159 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 48), %6 ], [ @gbl_uncore_perf_fd, %4 ]
  %.sink157 = phi ptr [ %8, %6 ], [ %0, %4 ]
  %.sink = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 72), %6 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 24), %4 ]
  %.sink154 = phi ptr [ %7, %6 ], [ %5, %4 ]
  %9 = load i32, ptr %.sink159, align 4, !tbaa !10
  %10 = tail call i64 @readctr(i32 noundef %9)
  store i64 %10, ptr %.sink157, align 8, !tbaa !11
  %11 = load i32, ptr %.sink, align 4, !tbaa !10
  %12 = tail call i64 @readctr(i32 noundef %11)
  store i64 %12, ptr %.sink154, align 8, !tbaa !11
  %13 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 96), align 4, !tbaa !10
  %14 = tail call i64 @readctr(i32 noundef %13)
  store i64 %14, ptr %2, align 8, !tbaa !11
  %.pr = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2920), align 4, !tbaa !5
  br label %15

15:                                               ; preds = %thread-pre-split, %1
  %16 = phi i32 [ %.pr, %thread-pre-split ], [ %3, %1 ]
  switch i32 %16, label %27 [
    i32 0, label %17
    i32 1, label %.sink.split
  ]

17:                                               ; preds = %15
  br label %.sink.split

.sink.split:                                      ; preds = %15, %17
  %.sink172 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 4), %17 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 52), %15 ]
  %.sink170 = phi i64 [ 8, %17 ], [ 104, %15 ]
  %.sink167 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 28), %17 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 76), %15 ]
  %.sink165 = phi i64 [ 56, %17 ], [ 152, %15 ]
  %18 = load i32, ptr %.sink172, align 4, !tbaa !10
  %19 = tail call i64 @readctr(i32 noundef %18)
  %20 = getelementptr inbounds i8, ptr %0, i64 %.sink170
  store i64 %19, ptr %20, align 8, !tbaa !11
  %21 = load i32, ptr %.sink167, align 4, !tbaa !10
  %22 = tail call i64 @readctr(i32 noundef %21)
  %23 = getelementptr inbounds i8, ptr %0, i64 %.sink165
  store i64 %22, ptr %23, align 8, !tbaa !11
  %24 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 100), align 4, !tbaa !10
  %25 = tail call i64 @readctr(i32 noundef %24)
  %26 = getelementptr inbounds i8, ptr %0, i64 200
  store i64 %25, ptr %26, align 8, !tbaa !11
  br label %27

27:                                               ; preds = %.sink.split, %15
  %28 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2920), align 4, !tbaa !5
  switch i32 %28, label %39 [
    i32 0, label %29
    i32 1, label %thread-pre-split149
  ]

29:                                               ; preds = %27
  br label %thread-pre-split149

thread-pre-split149:                              ; preds = %27, %29
  %.sink185 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 8), %29 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 56), %27 ]
  %.sink183 = phi i64 [ 16, %29 ], [ 112, %27 ]
  %.sink180 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 32), %29 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 80), %27 ]
  %.sink178 = phi i64 [ 64, %29 ], [ 160, %27 ]
  %30 = load i32, ptr %.sink185, align 4, !tbaa !10
  %31 = tail call i64 @readctr(i32 noundef %30)
  %32 = getelementptr inbounds i8, ptr %0, i64 %.sink183
  store i64 %31, ptr %32, align 8, !tbaa !11
  %33 = load i32, ptr %.sink180, align 4, !tbaa !10
  %34 = tail call i64 @readctr(i32 noundef %33)
  %35 = getelementptr inbounds i8, ptr %0, i64 %.sink178
  store i64 %34, ptr %35, align 8, !tbaa !11
  %36 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 104), align 4, !tbaa !10
  %37 = tail call i64 @readctr(i32 noundef %36)
  %38 = getelementptr inbounds i8, ptr %0, i64 208
  store i64 %37, ptr %38, align 8, !tbaa !11
  %.pr150 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2920), align 4, !tbaa !5
  br label %39

39:                                               ; preds = %thread-pre-split149, %27
  %40 = phi i32 [ %.pr150, %thread-pre-split149 ], [ %28, %27 ]
  switch i32 %40, label %51 [
    i32 0, label %41
    i32 1, label %.sink.split186
  ]

41:                                               ; preds = %39
  br label %.sink.split186

.sink.split186:                                   ; preds = %39, %41
  %.sink199 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 12), %41 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 60), %39 ]
  %.sink197 = phi i64 [ 24, %41 ], [ 120, %39 ]
  %.sink194 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 36), %41 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 84), %39 ]
  %.sink192 = phi i64 [ 72, %41 ], [ 168, %39 ]
  %42 = load i32, ptr %.sink199, align 4, !tbaa !10
  %43 = tail call i64 @readctr(i32 noundef %42)
  %44 = getelementptr inbounds i8, ptr %0, i64 %.sink197
  store i64 %43, ptr %44, align 8, !tbaa !11
  %45 = load i32, ptr %.sink194, align 4, !tbaa !10
  %46 = tail call i64 @readctr(i32 noundef %45)
  %47 = getelementptr inbounds i8, ptr %0, i64 %.sink192
  store i64 %46, ptr %47, align 8, !tbaa !11
  %48 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 108), align 4, !tbaa !10
  %49 = tail call i64 @readctr(i32 noundef %48)
  %50 = getelementptr inbounds i8, ptr %0, i64 216
  store i64 %49, ptr %50, align 8, !tbaa !11
  br label %51

51:                                               ; preds = %.sink.split186, %39
  %52 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2920), align 4, !tbaa !5
  switch i32 %52, label %63 [
    i32 0, label %53
    i32 1, label %thread-pre-split151
  ]

53:                                               ; preds = %51
  br label %thread-pre-split151

thread-pre-split151:                              ; preds = %51, %53
  %.sink212 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 16), %53 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 64), %51 ]
  %.sink210 = phi i64 [ 32, %53 ], [ 128, %51 ]
  %.sink207 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 40), %53 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 88), %51 ]
  %.sink205 = phi i64 [ 80, %53 ], [ 176, %51 ]
  %54 = load i32, ptr %.sink212, align 4, !tbaa !10
  %55 = tail call i64 @readctr(i32 noundef %54)
  %56 = getelementptr inbounds i8, ptr %0, i64 %.sink210
  store i64 %55, ptr %56, align 8, !tbaa !11
  %57 = load i32, ptr %.sink207, align 4, !tbaa !10
  %58 = tail call i64 @readctr(i32 noundef %57)
  %59 = getelementptr inbounds i8, ptr %0, i64 %.sink205
  store i64 %58, ptr %59, align 8, !tbaa !11
  %60 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 112), align 4, !tbaa !10
  %61 = tail call i64 @readctr(i32 noundef %60)
  %62 = getelementptr inbounds i8, ptr %0, i64 224
  store i64 %61, ptr %62, align 8, !tbaa !11
  %.pr152 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2920), align 4, !tbaa !5
  br label %63

63:                                               ; preds = %thread-pre-split151, %51
  %64 = phi i32 [ %.pr152, %thread-pre-split151 ], [ %52, %51 ]
  switch i32 %64, label %.preheader [
    i32 0, label %65
    i32 1, label %.preheader.sink.split
  ]

65:                                               ; preds = %63
  br label %.preheader.sink.split

.preheader.sink.split:                            ; preds = %63, %65
  %.sink225 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 20), %65 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 68), %63 ]
  %.sink223 = phi i64 [ 40, %65 ], [ 136, %63 ]
  %.sink220 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 44), %65 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 92), %63 ]
  %.sink218 = phi i64 [ 88, %65 ], [ 184, %63 ]
  %66 = load i32, ptr %.sink225, align 4, !tbaa !10
  %67 = tail call i64 @readctr(i32 noundef %66)
  %68 = getelementptr inbounds i8, ptr %0, i64 %.sink223
  store i64 %67, ptr %68, align 8, !tbaa !11
  %69 = load i32, ptr %.sink220, align 4, !tbaa !10
  %70 = tail call i64 @readctr(i32 noundef %69)
  %71 = getelementptr inbounds i8, ptr %0, i64 %.sink218
  store i64 %70, ptr %71, align 8, !tbaa !11
  %72 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 116), align 4, !tbaa !10
  %73 = tail call i64 @readctr(i32 noundef %72)
  %74 = getelementptr inbounds i8, ptr %0, i64 232
  store i64 %73, ptr %74, align 8, !tbaa !11
  br label %.preheader

.preheader:                                       ; preds = %.preheader.sink.split, %63
  %75 = getelementptr inbounds i8, ptr %0, i64 5616
  %76 = getelementptr inbounds i8, ptr %0, i64 5840
  %77 = getelementptr inbounds i8, ptr %0, i64 5168
  %78 = getelementptr inbounds i8, ptr %0, i64 5392
  %79 = getelementptr inbounds i8, ptr %0, i64 4944
  %80 = getelementptr inbounds i8, ptr %0, i64 4496
  %81 = getelementptr inbounds i8, ptr %0, i64 4720
  %82 = getelementptr inbounds i8, ptr %0, i64 4272
  %83 = getelementptr inbounds i8, ptr %0, i64 4048
  %84 = getelementptr inbounds i8, ptr %0, i64 3824
  %85 = getelementptr inbounds i8, ptr %0, i64 2480
  %86 = getelementptr inbounds i8, ptr %0, i64 2704
  %87 = getelementptr inbounds i8, ptr %0, i64 2928
  %88 = getelementptr inbounds i8, ptr %0, i64 3152
  %89 = getelementptr inbounds i8, ptr %0, i64 3376
  %90 = getelementptr inbounds i8, ptr %0, i64 3600
  %91 = getelementptr inbounds i8, ptr %0, i64 1136
  %92 = getelementptr inbounds i8, ptr %0, i64 1360
  %93 = getelementptr inbounds i8, ptr %0, i64 1584
  %94 = getelementptr inbounds i8, ptr %0, i64 1808
  %95 = getelementptr inbounds i8, ptr %0, i64 6064
  %96 = getelementptr inbounds i8, ptr %0, i64 688
  %97 = getelementptr inbounds i8, ptr %0, i64 912
  %98 = getelementptr inbounds i8, ptr %0, i64 240
  %99 = getelementptr inbounds i8, ptr %0, i64 464
  br label %100

100:                                              ; preds = %.preheader, %178
  %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %178 ]
  %101 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2920), align 4, !tbaa !5
  switch i32 %101, label %178 [
    i32 2, label %102
    i32 11, label %107
    i32 12, label %112
    i32 13, label %117
    i32 14, label %122
    i32 3, label %135
    i32 5, label %.sink.split226
    i32 6, label %156
    i32 7, label %157
    i32 8, label %158
    i32 9, label %163
    i32 10, label %164
    i32 4, label %169
  ]

102:                                              ; preds = %100
  %103 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 120), i64 0, i64 %indvars.iv
  %104 = load i32, ptr %103, align 4, !tbaa !10
  %105 = tail call i64 @readctr(i32 noundef %104)
  %106 = getelementptr inbounds [28 x i64], ptr %98, i64 0, i64 %indvars.iv
  store i64 %105, ptr %106, align 8, !tbaa !11
  br label %.sink.split226

107:                                              ; preds = %100
  %108 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 344), i64 0, i64 %indvars.iv
  %109 = load i32, ptr %108, align 4, !tbaa !10
  %110 = tail call i64 @readctr(i32 noundef %109)
  %111 = getelementptr inbounds [28 x i64], ptr %96, i64 0, i64 %indvars.iv
  store i64 %110, ptr %111, align 8, !tbaa !11
  br label %.sink.split226

112:                                              ; preds = %100
  %113 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 568), i64 0, i64 %indvars.iv
  %114 = load i32, ptr %113, align 4, !tbaa !10
  %115 = tail call i64 @readctr(i32 noundef %114)
  %116 = getelementptr inbounds [28 x i64], ptr %91, i64 0, i64 %indvars.iv
  store i64 %115, ptr %116, align 8, !tbaa !11
  br label %.sink.split226

117:                                              ; preds = %100
  %118 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 792), i64 0, i64 %indvars.iv
  %119 = load i32, ptr %118, align 4, !tbaa !10
  %120 = tail call i64 @readctr(i32 noundef %119)
  %121 = getelementptr inbounds [28 x i64], ptr %93, i64 0, i64 %indvars.iv
  store i64 %120, ptr %121, align 8, !tbaa !11
  br label %.sink.split226

122:                                              ; preds = %100
  %123 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 568), i64 0, i64 %indvars.iv
  %124 = load i32, ptr %123, align 4, !tbaa !10
  %125 = tail call i64 @readctr(i32 noundef %124)
  %126 = getelementptr inbounds [28 x i64], ptr %91, i64 0, i64 %indvars.iv
  store i64 %125, ptr %126, align 8, !tbaa !11
  %127 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 680), i64 0, i64 %indvars.iv
  %128 = load i32, ptr %127, align 4, !tbaa !10
  %129 = tail call i64 @readctr(i32 noundef %128)
  %130 = getelementptr inbounds [28 x i64], ptr %92, i64 0, i64 %indvars.iv
  store i64 %129, ptr %130, align 8, !tbaa !11
  %131 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 792), i64 0, i64 %indvars.iv
  %132 = load i32, ptr %131, align 4, !tbaa !10
  %133 = tail call i64 @readctr(i32 noundef %132)
  %134 = getelementptr inbounds [28 x i64], ptr %93, i64 0, i64 %indvars.iv
  store i64 %133, ptr %134, align 8, !tbaa !11
  br label %.sink.split226

135:                                              ; preds = %100
  %136 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 1016), i64 0, i64 %indvars.iv
  %137 = load i32, ptr %136, align 4, !tbaa !10
  %138 = tail call i64 @readctr(i32 noundef %137)
  %139 = getelementptr inbounds [28 x i64], ptr %85, i64 0, i64 %indvars.iv
  store i64 %138, ptr %139, align 8, !tbaa !11
  %140 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 1128), i64 0, i64 %indvars.iv
  %141 = load i32, ptr %140, align 4, !tbaa !10
  %142 = tail call i64 @readctr(i32 noundef %141)
  %143 = getelementptr inbounds [28 x i64], ptr %86, i64 0, i64 %indvars.iv
  store i64 %142, ptr %143, align 8, !tbaa !11
  %144 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 1240), i64 0, i64 %indvars.iv
  %145 = load i32, ptr %144, align 4, !tbaa !10
  %146 = tail call i64 @readctr(i32 noundef %145)
  %147 = getelementptr inbounds [28 x i64], ptr %87, i64 0, i64 %indvars.iv
  store i64 %146, ptr %147, align 8, !tbaa !11
  %148 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 1352), i64 0, i64 %indvars.iv
  %149 = load i32, ptr %148, align 4, !tbaa !10
  %150 = tail call i64 @readctr(i32 noundef %149)
  %151 = getelementptr inbounds [28 x i64], ptr %88, i64 0, i64 %indvars.iv
  store i64 %150, ptr %151, align 8, !tbaa !11
  %152 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 1464), i64 0, i64 %indvars.iv
  %153 = load i32, ptr %152, align 4, !tbaa !10
  %154 = tail call i64 @readctr(i32 noundef %153)
  %155 = getelementptr inbounds [28 x i64], ptr %89, i64 0, i64 %indvars.iv
  store i64 %154, ptr %155, align 8, !tbaa !11
  br label %.sink.split226

156:                                              ; preds = %100
  br label %.sink.split226

157:                                              ; preds = %100
  br label %.sink.split226

158:                                              ; preds = %100
  %159 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2024), i64 0, i64 %indvars.iv
  %160 = load i32, ptr %159, align 4, !tbaa !10
  %161 = tail call i64 @readctr(i32 noundef %160)
  %162 = getelementptr inbounds [28 x i64], ptr %80, i64 0, i64 %indvars.iv
  store i64 %161, ptr %162, align 8, !tbaa !11
  br label %.sink.split226

163:                                              ; preds = %100
  br label %.sink.split226

164:                                              ; preds = %100
  %165 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2360), i64 0, i64 %indvars.iv
  %166 = load i32, ptr %165, align 4, !tbaa !10
  %167 = tail call i64 @readctr(i32 noundef %166)
  %168 = getelementptr inbounds [28 x i64], ptr %77, i64 0, i64 %indvars.iv
  store i64 %167, ptr %168, align 8, !tbaa !11
  br label %.sink.split226

169:                                              ; preds = %100
  br label %.sink.split226

.sink.split226:                                   ; preds = %100, %107, %117, %135, %156, %158, %164, %169, %163, %157, %122, %112, %102
  %.sink238 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 232), %102 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 680), %112 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 904), %122 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 1912), %157 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2248), %163 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2584), %169 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2472), %164 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2136), %158 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 1800), %156 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 1576), %135 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 904), %117 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 456), %107 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 1688), %100 ]
  %.sink235 = phi ptr [ %99, %102 ], [ %92, %112 ], [ %94, %122 ], [ %82, %157 ], [ %79, %163 ], [ %75, %169 ], [ %78, %164 ], [ %81, %158 ], [ %83, %156 ], [ %90, %135 ], [ %94, %117 ], [ %97, %107 ], [ %84, %100 ]
  %.sink232 = phi ptr [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2696), %102 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2808), %112 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2808), %122 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2696), %157 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2696), %163 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2696), %169 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2696), %164 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2696), %158 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2696), %156 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2696), %135 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2808), %117 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2808), %107 ], [ getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2696), %100 ]
  %.sink229 = phi ptr [ %76, %102 ], [ %95, %112 ], [ %95, %122 ], [ %76, %157 ], [ %76, %163 ], [ %76, %169 ], [ %76, %164 ], [ %76, %158 ], [ %76, %156 ], [ %76, %135 ], [ %95, %117 ], [ %95, %107 ], [ %76, %100 ]
  %170 = getelementptr inbounds [28 x i32], ptr %.sink238, i64 0, i64 %indvars.iv
  %171 = load i32, ptr %170, align 4, !tbaa !10
  %172 = tail call i64 @readctr(i32 noundef %171)
  %173 = getelementptr inbounds [28 x i64], ptr %.sink235, i64 0, i64 %indvars.iv
  store i64 %172, ptr %173, align 8, !tbaa !11
  %174 = getelementptr inbounds [28 x i32], ptr %.sink232, i64 0, i64 %indvars.iv
  %175 = load i32, ptr %174, align 4, !tbaa !10
  %176 = tail call i64 @readctr(i32 noundef %175)
  %177 = getelementptr inbounds [28 x i64], ptr %.sink229, i64 0, i64 %indvars.iv
  store i64 %176, ptr %177, align 8, !tbaa !11
  br label %178

178:                                              ; preds = %.sink.split226, %100
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 28
  br i1 %exitcond.not, label %179, label %100, !llvm.loop !13

179:                                              ; preds = %178
  %180 = load i32, ptr getelementptr inbounds (i8, ptr @gbl_uncore_perf_fd, i64 2920), align 4, !tbaa !5
  %181 = getelementptr inbounds i8, ptr %0, i64 6288
  store i32 %180, ptr %181, align 8, !tbaa !15
  ret void
}

; Function Attrs: nounwind uwtable
declare hidden i64 @readctr(i32 noundef) local_unnamed_addr #0

attributes #0 = { 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" }

!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, !9, i64 2920}
!6 = !{!"perf_uncore_fd", !7, i64 0, !7, i64 24, !7, i64 48, !7, i64 72, !7, i64 96, !7, i64 120, !7, i64 232, !7, i64 344, !7, i64 456, !7, i64 568, !7, i64 680, !7, i64 792, !7, i64 904, !7, i64 1016, !7, i64 1128, !7, i64 1240, !7, i64 1352, !7, i64 1464, !7, i64 1576, !7, i64 1688, !7, i64 1800, !7, i64 1912, !7, i64 2024, !7, i64 2136, !7, i64 2248, !7, i64 2360, !7, i64 2472, !7, i64 2584, !7, i64 2696, !7, i64 2808, !9, i64 2920}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"int", !7, i64 0}
!10 = !{!9, !9, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !9, i64 6288}
!16 = !{!"ctrs_uncore", !7, i64 0, !7, i64 48, !7, i64 96, !7, i64 144, !7, i64 192, !7, i64 240, !7, i64 464, !7, i64 688, !7, i64 912, !7, i64 1136, !7, i64 1360, !7, i64 1584, !7, i64 1808, !7, i64 2032, !7, i64 2256, !7, i64 2480, !7, i64 2704, !7, i64 2928, !7, i64 3152, !7, i64 3376, !7, i64 3600, !7, i64 3824, !7, i64 4048, !7, i64 4272, !7, i64 4496, !7, i64 4720, !7, i64 4944, !7, i64 5168, !7, i64 5392, !7, i64 5616, !7, i64 5840, !7, i64 6064, !9, i64 6288}


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