; 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.ctrs_core = type { [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 }

@.str.8 = external hidden unnamed_addr constant [44 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @difa_core_ctrs(ptr noundef %0, ptr noundef %1, ptr noundef %2) #2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  %9 = load ptr, ptr %4, align 8, !tbaa !5
  %10 = getelementptr inbounds %struct.ctrs_core, ptr %9, i32 0, i32 11
  %11 = load i32, ptr %10, align 8, !tbaa !9
  %12 = load ptr, ptr %5, align 8, !tbaa !5
  %13 = getelementptr inbounds %struct.ctrs_core, ptr %12, i32 0, i32 11
  %14 = load i32, ptr %13, align 8, !tbaa !9
  %15 = icmp ne i32 %11, %14
  br i1 %15, label %16, label %18

16:                                               ; preds = %3
  %17 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  store i32 1, ptr %8, align 4
  br label %252

18:                                               ; preds = %3
  store i32 0, ptr %7, align 4, !tbaa !12
  br label %19

19:                                               ; preds = %243, %18
  %20 = load i32, ptr %7, align 4, !tbaa !12
  %21 = icmp slt i32 %20, 28
  br i1 %21, label %22, label %246

22:                                               ; preds = %19
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.ctrs_core, ptr %23, i32 0, i32 0
  %25 = load i32, ptr %7, align 4, !tbaa !12
  %26 = sext i32 %25 to i64
  %27 = getelementptr inbounds [28 x i64], ptr %24, i64 0, i64 %26
  %28 = load i64, ptr %27, align 8, !tbaa !13
  %29 = load ptr, ptr %4, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.ctrs_core, ptr %29, i32 0, i32 0
  %31 = load i32, ptr %7, align 4, !tbaa !12
  %32 = sext i32 %31 to i64
  %33 = getelementptr inbounds [28 x i64], ptr %30, i64 0, i64 %32
  %34 = load i64, ptr %33, align 8, !tbaa !13
  %35 = sub i64 %28, %34
  %36 = load ptr, ptr %6, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.ctrs_core, ptr %36, i32 0, i32 0
  %38 = load i32, ptr %7, align 4, !tbaa !12
  %39 = sext i32 %38 to i64
  %40 = getelementptr inbounds [28 x i64], ptr %37, i64 0, i64 %39
  %41 = load i64, ptr %40, align 8, !tbaa !13
  %42 = add i64 %41, %35
  store i64 %42, ptr %40, align 8, !tbaa !13
  %43 = load ptr, ptr %5, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.ctrs_core, ptr %43, i32 0, i32 1
  %45 = load i32, ptr %7, align 4, !tbaa !12
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds [28 x i64], ptr %44, i64 0, i64 %46
  %48 = load i64, ptr %47, align 8, !tbaa !13
  %49 = load ptr, ptr %4, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.ctrs_core, ptr %49, i32 0, i32 1
  %51 = load i32, ptr %7, align 4, !tbaa !12
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds [28 x i64], ptr %50, i64 0, i64 %52
  %54 = load i64, ptr %53, align 8, !tbaa !13
  %55 = sub i64 %48, %54
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.ctrs_core, ptr %56, i32 0, i32 1
  %58 = load i32, ptr %7, align 4, !tbaa !12
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds [28 x i64], ptr %57, i64 0, i64 %59
  %61 = load i64, ptr %60, align 8, !tbaa !13
  %62 = add i64 %61, %55
  store i64 %62, ptr %60, align 8, !tbaa !13
  %63 = load ptr, ptr %5, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.ctrs_core, ptr %63, i32 0, i32 2
  %65 = load i32, ptr %7, align 4, !tbaa !12
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds [28 x i64], ptr %64, i64 0, i64 %66
  %68 = load i64, ptr %67, align 8, !tbaa !13
  %69 = load ptr, ptr %4, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.ctrs_core, ptr %69, i32 0, i32 2
  %71 = load i32, ptr %7, align 4, !tbaa !12
  %72 = sext i32 %71 to i64
  %73 = getelementptr inbounds [28 x i64], ptr %70, i64 0, i64 %72
  %74 = load i64, ptr %73, align 8, !tbaa !13
  %75 = sub i64 %68, %74
  %76 = load ptr, ptr %6, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.ctrs_core, ptr %76, i32 0, i32 2
  %78 = load i32, ptr %7, align 4, !tbaa !12
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds [28 x i64], ptr %77, i64 0, i64 %79
  %81 = load i64, ptr %80, align 8, !tbaa !13
  %82 = add i64 %81, %75
  store i64 %82, ptr %80, align 8, !tbaa !13
  %83 = load ptr, ptr %5, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.ctrs_core, ptr %83, i32 0, i32 3
  %85 = load i32, ptr %7, align 4, !tbaa !12
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds [28 x i64], ptr %84, i64 0, i64 %86
  %88 = load i64, ptr %87, align 8, !tbaa !13
  %89 = load ptr, ptr %4, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.ctrs_core, ptr %89, i32 0, i32 3
  %91 = load i32, ptr %7, align 4, !tbaa !12
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds [28 x i64], ptr %90, i64 0, i64 %92
  %94 = load i64, ptr %93, align 8, !tbaa !13
  %95 = sub i64 %88, %94
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.ctrs_core, ptr %96, i32 0, i32 3
  %98 = load i32, ptr %7, align 4, !tbaa !12
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds [28 x i64], ptr %97, i64 0, i64 %99
  %101 = load i64, ptr %100, align 8, !tbaa !13
  %102 = add i64 %101, %95
  store i64 %102, ptr %100, align 8, !tbaa !13
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.ctrs_core, ptr %103, i32 0, i32 4
  %105 = load i32, ptr %7, align 4, !tbaa !12
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds [28 x i64], ptr %104, i64 0, i64 %106
  %108 = load i64, ptr %107, align 8, !tbaa !13
  %109 = load ptr, ptr %4, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.ctrs_core, ptr %109, i32 0, i32 4
  %111 = load i32, ptr %7, align 4, !tbaa !12
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds [28 x i64], ptr %110, i64 0, i64 %112
  %114 = load i64, ptr %113, align 8, !tbaa !13
  %115 = sub i64 %108, %114
  %116 = load ptr, ptr %6, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.ctrs_core, ptr %116, i32 0, i32 4
  %118 = load i32, ptr %7, align 4, !tbaa !12
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds [28 x i64], ptr %117, i64 0, i64 %119
  %121 = load i64, ptr %120, align 8, !tbaa !13
  %122 = add i64 %121, %115
  store i64 %122, ptr %120, align 8, !tbaa !13
  %123 = load ptr, ptr %5, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.ctrs_core, ptr %123, i32 0, i32 5
  %125 = load i32, ptr %7, align 4, !tbaa !12
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds [28 x i64], ptr %124, i64 0, i64 %126
  %128 = load i64, ptr %127, align 8, !tbaa !13
  %129 = load ptr, ptr %4, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.ctrs_core, ptr %129, i32 0, i32 5
  %131 = load i32, ptr %7, align 4, !tbaa !12
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds [28 x i64], ptr %130, i64 0, i64 %132
  %134 = load i64, ptr %133, align 8, !tbaa !13
  %135 = sub i64 %128, %134
  %136 = load ptr, ptr %6, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.ctrs_core, ptr %136, i32 0, i32 5
  %138 = load i32, ptr %7, align 4, !tbaa !12
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds [28 x i64], ptr %137, i64 0, i64 %139
  %141 = load i64, ptr %140, align 8, !tbaa !13
  %142 = add i64 %141, %135
  store i64 %142, ptr %140, align 8, !tbaa !13
  %143 = load ptr, ptr %5, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.ctrs_core, ptr %143, i32 0, i32 6
  %145 = load i32, ptr %7, align 4, !tbaa !12
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds [28 x i64], ptr %144, i64 0, i64 %146
  %148 = load i64, ptr %147, align 8, !tbaa !13
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.ctrs_core, ptr %149, i32 0, i32 6
  %151 = load i32, ptr %7, align 4, !tbaa !12
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds [28 x i64], ptr %150, i64 0, i64 %152
  %154 = load i64, ptr %153, align 8, !tbaa !13
  %155 = sub i64 %148, %154
  %156 = load ptr, ptr %6, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.ctrs_core, ptr %156, i32 0, i32 6
  %158 = load i32, ptr %7, align 4, !tbaa !12
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds [28 x i64], ptr %157, i64 0, i64 %159
  %161 = load i64, ptr %160, align 8, !tbaa !13
  %162 = add i64 %161, %155
  store i64 %162, ptr %160, align 8, !tbaa !13
  %163 = load ptr, ptr %5, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.ctrs_core, ptr %163, i32 0, i32 7
  %165 = load i32, ptr %7, align 4, !tbaa !12
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds [28 x i64], ptr %164, i64 0, i64 %166
  %168 = load i64, ptr %167, align 8, !tbaa !13
  %169 = load ptr, ptr %4, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.ctrs_core, ptr %169, i32 0, i32 7
  %171 = load i32, ptr %7, align 4, !tbaa !12
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds [28 x i64], ptr %170, i64 0, i64 %172
  %174 = load i64, ptr %173, align 8, !tbaa !13
  %175 = sub i64 %168, %174
  %176 = load ptr, ptr %6, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.ctrs_core, ptr %176, i32 0, i32 7
  %178 = load i32, ptr %7, align 4, !tbaa !12
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds [28 x i64], ptr %177, i64 0, i64 %179
  %181 = load i64, ptr %180, align 8, !tbaa !13
  %182 = add i64 %181, %175
  store i64 %182, ptr %180, align 8, !tbaa !13
  %183 = load ptr, ptr %5, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.ctrs_core, ptr %183, i32 0, i32 8
  %185 = load i32, ptr %7, align 4, !tbaa !12
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [28 x i64], ptr %184, i64 0, i64 %186
  %188 = load i64, ptr %187, align 8, !tbaa !13
  %189 = load ptr, ptr %4, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.ctrs_core, ptr %189, i32 0, i32 8
  %191 = load i32, ptr %7, align 4, !tbaa !12
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds [28 x i64], ptr %190, i64 0, i64 %192
  %194 = load i64, ptr %193, align 8, !tbaa !13
  %195 = sub i64 %188, %194
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.ctrs_core, ptr %196, i32 0, i32 8
  %198 = load i32, ptr %7, align 4, !tbaa !12
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds [28 x i64], ptr %197, i64 0, i64 %199
  %201 = load i64, ptr %200, align 8, !tbaa !13
  %202 = add i64 %201, %195
  store i64 %202, ptr %200, align 8, !tbaa !13
  %203 = load ptr, ptr %5, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.ctrs_core, ptr %203, i32 0, i32 9
  %205 = load i32, ptr %7, align 4, !tbaa !12
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds [28 x i64], ptr %204, i64 0, i64 %206
  %208 = load i64, ptr %207, align 8, !tbaa !13
  %209 = load ptr, ptr %4, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.ctrs_core, ptr %209, i32 0, i32 9
  %211 = load i32, ptr %7, align 4, !tbaa !12
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds [28 x i64], ptr %210, i64 0, i64 %212
  %214 = load i64, ptr %213, align 8, !tbaa !13
  %215 = sub i64 %208, %214
  %216 = load ptr, ptr %6, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.ctrs_core, ptr %216, i32 0, i32 9
  %218 = load i32, ptr %7, align 4, !tbaa !12
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds [28 x i64], ptr %217, i64 0, i64 %219
  %221 = load i64, ptr %220, align 8, !tbaa !13
  %222 = add i64 %221, %215
  store i64 %222, ptr %220, align 8, !tbaa !13
  %223 = load ptr, ptr %5, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.ctrs_core, ptr %223, i32 0, i32 10
  %225 = load i32, ptr %7, align 4, !tbaa !12
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds [28 x i64], ptr %224, i64 0, i64 %226
  %228 = load i64, ptr %227, align 8, !tbaa !13
  %229 = load ptr, ptr %4, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.ctrs_core, ptr %229, i32 0, i32 10
  %231 = load i32, ptr %7, align 4, !tbaa !12
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds [28 x i64], ptr %230, i64 0, i64 %232
  %234 = load i64, ptr %233, align 8, !tbaa !13
  %235 = sub i64 %228, %234
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.ctrs_core, ptr %236, i32 0, i32 10
  %238 = load i32, ptr %7, align 4, !tbaa !12
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds [28 x i64], ptr %237, i64 0, i64 %239
  %241 = load i64, ptr %240, align 8, !tbaa !13
  %242 = add i64 %241, %235
  store i64 %242, ptr %240, align 8, !tbaa !13
  br label %243

243:                                              ; preds = %22
  %244 = load i32, ptr %7, align 4, !tbaa !12
  %245 = add nsw i32 %244, 1
  store i32 %245, ptr %7, align 4, !tbaa !12
  br label %19, !llvm.loop !15

246:                                              ; preds = %19
  %247 = load ptr, ptr %4, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.ctrs_core, ptr %247, i32 0, i32 11
  %249 = load i32, ptr %248, align 8, !tbaa !9
  %250 = load ptr, ptr %6, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.ctrs_core, ptr %250, i32 0, i32 11
  store i32 %249, ptr %251, align 8, !tbaa !9
  store i32 0, ptr %8, align 4
  br label %252

252:                                              ; preds = %246, %16
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  %253 = load i32, ptr %8, align 4
  switch i32 %253, label %255 [
    i32 0, label %254
    i32 1, label %254
  ]

254:                                              ; preds = %252, %252
  ret void

255:                                              ; preds = %252
  unreachable
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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, !11, i64 2464}
!10 = !{!"ctrs_core", !7, i64 0, !7, i64 224, !7, i64 448, !7, i64 672, !7, i64 896, !7, i64 1120, !7, i64 1344, !7, i64 1568, !7, i64 1792, !7, i64 2016, !7, i64 2240, !11, i64 2464}
!11 = !{!"int", !7, i64 0}
!12 = !{!11, !11, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}


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

@.str.8 = external hidden unnamed_addr constant [44 x i8], align 1

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

; Function Attrs: nofree nounwind uwtable
define dso_local void @difa_core_ctrs(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef %2) local_unnamed_addr #1 {
  %4 = getelementptr inbounds i8, ptr %0, i64 2464
  %5 = load i32, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %1, i64 2464
  %7 = load i32, ptr %6, align 8, !tbaa !5
  %.not = icmp eq i32 %5, %7
  br i1 %.not, label %.preheader, label %94

.preheader:                                       ; preds = %3
  %8 = getelementptr inbounds i8, ptr %1, i64 224
  %9 = getelementptr inbounds i8, ptr %0, i64 224
  %10 = getelementptr inbounds i8, ptr %2, i64 224
  %11 = getelementptr inbounds i8, ptr %1, i64 448
  %12 = getelementptr inbounds i8, ptr %0, i64 448
  %13 = getelementptr inbounds i8, ptr %2, i64 448
  %14 = getelementptr inbounds i8, ptr %1, i64 672
  %15 = getelementptr inbounds i8, ptr %0, i64 672
  %16 = getelementptr inbounds i8, ptr %2, i64 672
  %17 = getelementptr inbounds i8, ptr %1, i64 896
  %18 = getelementptr inbounds i8, ptr %0, i64 896
  %19 = getelementptr inbounds i8, ptr %2, i64 896
  %20 = getelementptr inbounds i8, ptr %1, i64 1120
  %21 = getelementptr inbounds i8, ptr %0, i64 1120
  %22 = getelementptr inbounds i8, ptr %2, i64 1120
  %23 = getelementptr inbounds i8, ptr %1, i64 1344
  %24 = getelementptr inbounds i8, ptr %0, i64 1344
  %25 = getelementptr inbounds i8, ptr %2, i64 1344
  %26 = getelementptr inbounds i8, ptr %1, i64 1568
  %27 = getelementptr inbounds i8, ptr %0, i64 1568
  %28 = getelementptr inbounds i8, ptr %2, i64 1568
  %29 = getelementptr inbounds i8, ptr %1, i64 1792
  %30 = getelementptr inbounds i8, ptr %0, i64 1792
  %31 = getelementptr inbounds i8, ptr %2, i64 1792
  %32 = getelementptr inbounds i8, ptr %1, i64 2016
  %33 = getelementptr inbounds i8, ptr %0, i64 2016
  %34 = getelementptr inbounds i8, ptr %2, i64 2016
  %35 = getelementptr inbounds i8, ptr %1, i64 2240
  %36 = getelementptr inbounds i8, ptr %0, i64 2240
  %37 = getelementptr inbounds i8, ptr %2, i64 2240
  %scevgep = getelementptr i8, ptr %2, i64 2464
  %scevgep83 = getelementptr i8, ptr %1, i64 2464
  %scevgep84 = getelementptr i8, ptr %0, i64 2464
  %bound0 = icmp ugt ptr %scevgep83, %2
  %bound1 = icmp ugt ptr %scevgep, %1
  %found.conflict = and i1 %bound0, %bound1
  %bound085 = icmp ugt ptr %scevgep84, %2
  %bound186 = icmp ugt ptr %scevgep, %0
  %found.conflict87 = and i1 %bound085, %bound186
  %conflict.rdx = or i1 %found.conflict, %found.conflict87
  br i1 %conflict.rdx, label %scalar.ph, label %vector.body

vector.body:                                      ; preds = %.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader ]
  %38 = getelementptr inbounds [28 x i64], ptr %1, i64 0, i64 %index
  %wide.load = load <2 x i64>, ptr %38, align 8, !tbaa !10, !alias.scope !12
  %39 = getelementptr inbounds [28 x i64], ptr %0, i64 0, i64 %index
  %wide.load88 = load <2 x i64>, ptr %39, align 8, !tbaa !10, !alias.scope !15
  %40 = sub <2 x i64> %wide.load, %wide.load88
  %41 = getelementptr inbounds [28 x i64], ptr %2, i64 0, i64 %index
  %wide.load89 = load <2 x i64>, ptr %41, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %42 = add <2 x i64> %40, %wide.load89
  store <2 x i64> %42, ptr %41, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %43 = getelementptr inbounds [28 x i64], ptr %8, i64 0, i64 %index
  %wide.load90 = load <2 x i64>, ptr %43, align 8, !tbaa !10, !alias.scope !12
  %44 = getelementptr inbounds [28 x i64], ptr %9, i64 0, i64 %index
  %wide.load91 = load <2 x i64>, ptr %44, align 8, !tbaa !10, !alias.scope !15
  %45 = sub <2 x i64> %wide.load90, %wide.load91
  %46 = getelementptr inbounds [28 x i64], ptr %10, i64 0, i64 %index
  %wide.load92 = load <2 x i64>, ptr %46, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %47 = add <2 x i64> %45, %wide.load92
  store <2 x i64> %47, ptr %46, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %48 = getelementptr inbounds [28 x i64], ptr %11, i64 0, i64 %index
  %wide.load93 = load <2 x i64>, ptr %48, align 8, !tbaa !10, !alias.scope !12
  %49 = getelementptr inbounds [28 x i64], ptr %12, i64 0, i64 %index
  %wide.load94 = load <2 x i64>, ptr %49, align 8, !tbaa !10, !alias.scope !15
  %50 = sub <2 x i64> %wide.load93, %wide.load94
  %51 = getelementptr inbounds [28 x i64], ptr %13, i64 0, i64 %index
  %wide.load95 = load <2 x i64>, ptr %51, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %52 = add <2 x i64> %50, %wide.load95
  store <2 x i64> %52, ptr %51, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %53 = getelementptr inbounds [28 x i64], ptr %14, i64 0, i64 %index
  %wide.load96 = load <2 x i64>, ptr %53, align 8, !tbaa !10, !alias.scope !12
  %54 = getelementptr inbounds [28 x i64], ptr %15, i64 0, i64 %index
  %wide.load97 = load <2 x i64>, ptr %54, align 8, !tbaa !10, !alias.scope !15
  %55 = sub <2 x i64> %wide.load96, %wide.load97
  %56 = getelementptr inbounds [28 x i64], ptr %16, i64 0, i64 %index
  %wide.load98 = load <2 x i64>, ptr %56, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %57 = add <2 x i64> %55, %wide.load98
  store <2 x i64> %57, ptr %56, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %58 = getelementptr inbounds [28 x i64], ptr %17, i64 0, i64 %index
  %wide.load99 = load <2 x i64>, ptr %58, align 8, !tbaa !10, !alias.scope !12
  %59 = getelementptr inbounds [28 x i64], ptr %18, i64 0, i64 %index
  %wide.load100 = load <2 x i64>, ptr %59, align 8, !tbaa !10, !alias.scope !15
  %60 = sub <2 x i64> %wide.load99, %wide.load100
  %61 = getelementptr inbounds [28 x i64], ptr %19, i64 0, i64 %index
  %wide.load101 = load <2 x i64>, ptr %61, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %62 = add <2 x i64> %60, %wide.load101
  store <2 x i64> %62, ptr %61, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %63 = getelementptr inbounds [28 x i64], ptr %20, i64 0, i64 %index
  %wide.load102 = load <2 x i64>, ptr %63, align 8, !tbaa !10, !alias.scope !12
  %64 = getelementptr inbounds [28 x i64], ptr %21, i64 0, i64 %index
  %wide.load103 = load <2 x i64>, ptr %64, align 8, !tbaa !10, !alias.scope !15
  %65 = sub <2 x i64> %wide.load102, %wide.load103
  %66 = getelementptr inbounds [28 x i64], ptr %22, i64 0, i64 %index
  %wide.load104 = load <2 x i64>, ptr %66, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %67 = add <2 x i64> %65, %wide.load104
  store <2 x i64> %67, ptr %66, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %68 = getelementptr inbounds [28 x i64], ptr %23, i64 0, i64 %index
  %wide.load105 = load <2 x i64>, ptr %68, align 8, !tbaa !10, !alias.scope !12
  %69 = getelementptr inbounds [28 x i64], ptr %24, i64 0, i64 %index
  %wide.load106 = load <2 x i64>, ptr %69, align 8, !tbaa !10, !alias.scope !15
  %70 = sub <2 x i64> %wide.load105, %wide.load106
  %71 = getelementptr inbounds [28 x i64], ptr %25, i64 0, i64 %index
  %wide.load107 = load <2 x i64>, ptr %71, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %72 = add <2 x i64> %70, %wide.load107
  store <2 x i64> %72, ptr %71, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %73 = getelementptr inbounds [28 x i64], ptr %26, i64 0, i64 %index
  %wide.load108 = load <2 x i64>, ptr %73, align 8, !tbaa !10, !alias.scope !12
  %74 = getelementptr inbounds [28 x i64], ptr %27, i64 0, i64 %index
  %wide.load109 = load <2 x i64>, ptr %74, align 8, !tbaa !10, !alias.scope !15
  %75 = sub <2 x i64> %wide.load108, %wide.load109
  %76 = getelementptr inbounds [28 x i64], ptr %28, i64 0, i64 %index
  %wide.load110 = load <2 x i64>, ptr %76, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %77 = add <2 x i64> %75, %wide.load110
  store <2 x i64> %77, ptr %76, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %78 = getelementptr inbounds [28 x i64], ptr %29, i64 0, i64 %index
  %wide.load111 = load <2 x i64>, ptr %78, align 8, !tbaa !10, !alias.scope !12
  %79 = getelementptr inbounds [28 x i64], ptr %30, i64 0, i64 %index
  %wide.load112 = load <2 x i64>, ptr %79, align 8, !tbaa !10, !alias.scope !15
  %80 = sub <2 x i64> %wide.load111, %wide.load112
  %81 = getelementptr inbounds [28 x i64], ptr %31, i64 0, i64 %index
  %wide.load113 = load <2 x i64>, ptr %81, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %82 = add <2 x i64> %80, %wide.load113
  store <2 x i64> %82, ptr %81, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %83 = getelementptr inbounds [28 x i64], ptr %32, i64 0, i64 %index
  %wide.load114 = load <2 x i64>, ptr %83, align 8, !tbaa !10, !alias.scope !12
  %84 = getelementptr inbounds [28 x i64], ptr %33, i64 0, i64 %index
  %wide.load115 = load <2 x i64>, ptr %84, align 8, !tbaa !10, !alias.scope !15
  %85 = sub <2 x i64> %wide.load114, %wide.load115
  %86 = getelementptr inbounds [28 x i64], ptr %34, i64 0, i64 %index
  %wide.load116 = load <2 x i64>, ptr %86, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %87 = add <2 x i64> %85, %wide.load116
  store <2 x i64> %87, ptr %86, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %88 = getelementptr inbounds [28 x i64], ptr %35, i64 0, i64 %index
  %wide.load117 = load <2 x i64>, ptr %88, align 8, !tbaa !10, !alias.scope !12
  %89 = getelementptr inbounds [28 x i64], ptr %36, i64 0, i64 %index
  %wide.load118 = load <2 x i64>, ptr %89, align 8, !tbaa !10, !alias.scope !15
  %90 = sub <2 x i64> %wide.load117, %wide.load118
  %91 = getelementptr inbounds [28 x i64], ptr %37, i64 0, i64 %index
  %wide.load119 = load <2 x i64>, ptr %91, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %92 = add <2 x i64> %90, %wide.load119
  store <2 x i64> %92, ptr %91, align 8, !tbaa !10, !alias.scope !17, !noalias !19
  %index.next = add nuw i64 %index, 2
  %93 = icmp eq i64 %index.next, 28
  br i1 %93, label %middle.block, label %vector.body, !llvm.loop !20

94:                                               ; preds = %3
  %95 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  br label %185

scalar.ph:                                        ; preds = %.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ 0, %.preheader ]
  %96 = getelementptr inbounds [28 x i64], ptr %1, i64 0, i64 %indvars.iv
  %97 = load i64, ptr %96, align 8, !tbaa !10
  %98 = getelementptr inbounds [28 x i64], ptr %0, i64 0, i64 %indvars.iv
  %99 = load i64, ptr %98, align 8, !tbaa !10
  %100 = sub i64 %97, %99
  %101 = getelementptr inbounds [28 x i64], ptr %2, i64 0, i64 %indvars.iv
  %102 = load i64, ptr %101, align 8, !tbaa !10
  %103 = add i64 %100, %102
  store i64 %103, ptr %101, align 8, !tbaa !10
  %104 = getelementptr inbounds [28 x i64], ptr %8, i64 0, i64 %indvars.iv
  %105 = load i64, ptr %104, align 8, !tbaa !10
  %106 = getelementptr inbounds [28 x i64], ptr %9, i64 0, i64 %indvars.iv
  %107 = load i64, ptr %106, align 8, !tbaa !10
  %108 = sub i64 %105, %107
  %109 = getelementptr inbounds [28 x i64], ptr %10, i64 0, i64 %indvars.iv
  %110 = load i64, ptr %109, align 8, !tbaa !10
  %111 = add i64 %108, %110
  store i64 %111, ptr %109, align 8, !tbaa !10
  %112 = getelementptr inbounds [28 x i64], ptr %11, i64 0, i64 %indvars.iv
  %113 = load i64, ptr %112, align 8, !tbaa !10
  %114 = getelementptr inbounds [28 x i64], ptr %12, i64 0, i64 %indvars.iv
  %115 = load i64, ptr %114, align 8, !tbaa !10
  %116 = sub i64 %113, %115
  %117 = getelementptr inbounds [28 x i64], ptr %13, i64 0, i64 %indvars.iv
  %118 = load i64, ptr %117, align 8, !tbaa !10
  %119 = add i64 %116, %118
  store i64 %119, ptr %117, align 8, !tbaa !10
  %120 = getelementptr inbounds [28 x i64], ptr %14, i64 0, i64 %indvars.iv
  %121 = load i64, ptr %120, align 8, !tbaa !10
  %122 = getelementptr inbounds [28 x i64], ptr %15, i64 0, i64 %indvars.iv
  %123 = load i64, ptr %122, align 8, !tbaa !10
  %124 = sub i64 %121, %123
  %125 = getelementptr inbounds [28 x i64], ptr %16, i64 0, i64 %indvars.iv
  %126 = load i64, ptr %125, align 8, !tbaa !10
  %127 = add i64 %124, %126
  store i64 %127, ptr %125, align 8, !tbaa !10
  %128 = getelementptr inbounds [28 x i64], ptr %17, i64 0, i64 %indvars.iv
  %129 = load i64, ptr %128, align 8, !tbaa !10
  %130 = getelementptr inbounds [28 x i64], ptr %18, i64 0, i64 %indvars.iv
  %131 = load i64, ptr %130, align 8, !tbaa !10
  %132 = sub i64 %129, %131
  %133 = getelementptr inbounds [28 x i64], ptr %19, i64 0, i64 %indvars.iv
  %134 = load i64, ptr %133, align 8, !tbaa !10
  %135 = add i64 %132, %134
  store i64 %135, ptr %133, align 8, !tbaa !10
  %136 = getelementptr inbounds [28 x i64], ptr %20, i64 0, i64 %indvars.iv
  %137 = load i64, ptr %136, align 8, !tbaa !10
  %138 = getelementptr inbounds [28 x i64], ptr %21, i64 0, i64 %indvars.iv
  %139 = load i64, ptr %138, align 8, !tbaa !10
  %140 = sub i64 %137, %139
  %141 = getelementptr inbounds [28 x i64], ptr %22, i64 0, i64 %indvars.iv
  %142 = load i64, ptr %141, align 8, !tbaa !10
  %143 = add i64 %140, %142
  store i64 %143, ptr %141, align 8, !tbaa !10
  %144 = getelementptr inbounds [28 x i64], ptr %23, i64 0, i64 %indvars.iv
  %145 = load i64, ptr %144, align 8, !tbaa !10
  %146 = getelementptr inbounds [28 x i64], ptr %24, i64 0, i64 %indvars.iv
  %147 = load i64, ptr %146, align 8, !tbaa !10
  %148 = sub i64 %145, %147
  %149 = getelementptr inbounds [28 x i64], ptr %25, i64 0, i64 %indvars.iv
  %150 = load i64, ptr %149, align 8, !tbaa !10
  %151 = add i64 %148, %150
  store i64 %151, ptr %149, align 8, !tbaa !10
  %152 = getelementptr inbounds [28 x i64], ptr %26, i64 0, i64 %indvars.iv
  %153 = load i64, ptr %152, align 8, !tbaa !10
  %154 = getelementptr inbounds [28 x i64], ptr %27, i64 0, i64 %indvars.iv
  %155 = load i64, ptr %154, align 8, !tbaa !10
  %156 = sub i64 %153, %155
  %157 = getelementptr inbounds [28 x i64], ptr %28, i64 0, i64 %indvars.iv
  %158 = load i64, ptr %157, align 8, !tbaa !10
  %159 = add i64 %156, %158
  store i64 %159, ptr %157, align 8, !tbaa !10
  %160 = getelementptr inbounds [28 x i64], ptr %29, i64 0, i64 %indvars.iv
  %161 = load i64, ptr %160, align 8, !tbaa !10
  %162 = getelementptr inbounds [28 x i64], ptr %30, i64 0, i64 %indvars.iv
  %163 = load i64, ptr %162, align 8, !tbaa !10
  %164 = sub i64 %161, %163
  %165 = getelementptr inbounds [28 x i64], ptr %31, i64 0, i64 %indvars.iv
  %166 = load i64, ptr %165, align 8, !tbaa !10
  %167 = add i64 %164, %166
  store i64 %167, ptr %165, align 8, !tbaa !10
  %168 = getelementptr inbounds [28 x i64], ptr %32, i64 0, i64 %indvars.iv
  %169 = load i64, ptr %168, align 8, !tbaa !10
  %170 = getelementptr inbounds [28 x i64], ptr %33, i64 0, i64 %indvars.iv
  %171 = load i64, ptr %170, align 8, !tbaa !10
  %172 = sub i64 %169, %171
  %173 = getelementptr inbounds [28 x i64], ptr %34, i64 0, i64 %indvars.iv
  %174 = load i64, ptr %173, align 8, !tbaa !10
  %175 = add i64 %172, %174
  store i64 %175, ptr %173, align 8, !tbaa !10
  %176 = getelementptr inbounds [28 x i64], ptr %35, i64 0, i64 %indvars.iv
  %177 = load i64, ptr %176, align 8, !tbaa !10
  %178 = getelementptr inbounds [28 x i64], ptr %36, i64 0, i64 %indvars.iv
  %179 = load i64, ptr %178, align 8, !tbaa !10
  %180 = sub i64 %177, %179
  %181 = getelementptr inbounds [28 x i64], ptr %37, i64 0, i64 %indvars.iv
  %182 = load i64, ptr %181, align 8, !tbaa !10
  %183 = add i64 %180, %182
  store i64 %183, ptr %181, align 8, !tbaa !10
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 28
  br i1 %exitcond.not, label %middle.block, label %scalar.ph, !llvm.loop !24

middle.block:                                     ; preds = %vector.body, %scalar.ph
  %184 = getelementptr inbounds i8, ptr %2, i64 2464
  store i32 %5, ptr %184, align 8, !tbaa !5
  br label %185

185:                                              ; preds = %middle.block, %94
  ret void
}

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 = { nofree 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 2464}
!6 = !{!"ctrs_core", !7, i64 0, !7, i64 224, !7, i64 448, !7, i64 672, !7, i64 896, !7, i64 1120, !7, i64 1344, !7, i64 1568, !7, i64 1792, !7, i64 2016, !7, i64 2240, !9, i64 2464}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"int", !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"long", !7, i64 0}
!12 = !{!13}
!13 = distinct !{!13, !14}
!14 = distinct !{!14, !"LVerDomain"}
!15 = !{!16}
!16 = distinct !{!16, !14}
!17 = !{!18}
!18 = distinct !{!18, !14}
!19 = !{!13, !16}
!20 = distinct !{!20, !21, !22, !23}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!"llvm.loop.isvectorized", i32 1}
!23 = !{!"llvm.loop.unroll.runtime.disable"}
!24 = distinct !{!24, !21, !22}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass