; LLVM IR from alekmaul/pvsneslib :: snes-examples/graphics/Effects/TransparentWindow/src (window)

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

@hdmaTableLeft = external dso_local global <{ i8, i8, i8, i8, i8, i8, [1018 x i8] }>, align 16
@hdmaTableRight = external dso_local global <{ i8, i8, i8, i8, i8, i8, [1018 x i8] }>, align 16
@windowIndex = external dso_local global i8, align 1

; Function Attrs: nounwind uwtable
define dso_local void @createTransparentWindow(i8 noundef zeroext %0, i8 noundef zeroext %1, i8 noundef zeroext %2, i8 noundef zeroext %3, i8 noundef zeroext %4, i8 noundef zeroext %5, i8 noundef zeroext %6, i8 noundef zeroext %7) #0 {
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  store i8 %0, ptr %9, align 1, !tbaa !5
  store i8 %1, ptr %10, align 1, !tbaa !5
  store i8 %2, ptr %11, align 1, !tbaa !5
  store i8 %3, ptr %12, align 1, !tbaa !5
  store i8 %4, ptr %13, align 1, !tbaa !5
  store i8 %5, ptr %14, align 1, !tbaa !5
  store i8 %6, ptr %15, align 1, !tbaa !5
  store i8 %7, ptr %16, align 1, !tbaa !5
  %17 = load i8, ptr %10, align 1, !tbaa !5
  store i8 %17, ptr @hdmaTableLeft, align 16, !tbaa !5
  %18 = load i8, ptr %10, align 1, !tbaa !5
  store i8 %18, ptr @hdmaTableRight, align 16, !tbaa !5
  store i8 -1, ptr getelementptr inbounds ([1024 x i8], ptr @hdmaTableLeft, i64 0, i64 1), align 1, !tbaa !5
  store i8 0, ptr getelementptr inbounds ([1024 x i8], ptr @hdmaTableRight, i64 0, i64 1), align 1, !tbaa !5
  %19 = load i8, ptr %12, align 1, !tbaa !5
  %20 = zext i8 %19 to i32
  %21 = or i32 128, %20
  %22 = trunc i32 %21 to i8
  store i8 %22, ptr getelementptr inbounds ([1024 x i8], ptr @hdmaTableLeft, i64 0, i64 2), align 2, !tbaa !5
  %23 = load i8, ptr %12, align 1, !tbaa !5
  %24 = zext i8 %23 to i32
  %25 = or i32 128, %24
  %26 = trunc i32 %25 to i8
  store i8 %26, ptr getelementptr inbounds ([1024 x i8], ptr @hdmaTableRight, i64 0, i64 2), align 2, !tbaa !5
  store i8 3, ptr @windowIndex, align 1, !tbaa !5
  br label %27

27:                                               ; preds = %34, %8
  %28 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %29 = zext i8 %28 to i32
  %30 = load i8, ptr %12, align 1, !tbaa !5
  %31 = zext i8 %30 to i32
  %32 = add nsw i32 %31, 3
  %33 = icmp slt i32 %29, %32
  br i1 %33, label %34, label %50

34:                                               ; preds = %27
  %35 = load i8, ptr %9, align 1, !tbaa !5
  %36 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %37 = zext i8 %36 to i64
  %38 = getelementptr inbounds [1024 x i8], ptr @hdmaTableLeft, i64 0, i64 %37
  store i8 %35, ptr %38, align 1, !tbaa !5
  %39 = load i8, ptr %9, align 1, !tbaa !5
  %40 = zext i8 %39 to i32
  %41 = load i8, ptr %11, align 1, !tbaa !5
  %42 = zext i8 %41 to i32
  %43 = add nsw i32 %40, %42
  %44 = trunc i32 %43 to i8
  %45 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %46 = zext i8 %45 to i64
  %47 = getelementptr inbounds [1024 x i8], ptr @hdmaTableRight, i64 0, i64 %46
  store i8 %44, ptr %47, align 1, !tbaa !5
  %48 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %49 = add i8 %48, 1
  store i8 %49, ptr @windowIndex, align 1, !tbaa !5
  br label %27, !llvm.loop !8

50:                                               ; preds = %27
  %51 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %52 = zext i8 %51 to i64
  %53 = getelementptr inbounds [1024 x i8], ptr @hdmaTableLeft, i64 0, i64 %52
  store i8 1, ptr %53, align 1, !tbaa !5
  %54 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %55 = zext i8 %54 to i32
  %56 = add nsw i32 %55, 1
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds [1024 x i8], ptr @hdmaTableLeft, i64 0, i64 %57
  store i8 -1, ptr %58, align 1, !tbaa !5
  %59 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %60 = zext i8 %59 to i32
  %61 = add nsw i32 %60, 2
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds [1024 x i8], ptr @hdmaTableLeft, i64 0, i64 %62
  store i8 0, ptr %63, align 1, !tbaa !5
  %64 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %65 = zext i8 %64 to i64
  %66 = getelementptr inbounds [1024 x i8], ptr @hdmaTableRight, i64 0, i64 %65
  store i8 0, ptr %66, align 1, !tbaa !5
  %67 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %68 = zext i8 %67 to i32
  %69 = add nsw i32 %68, 1
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds [1024 x i8], ptr @hdmaTableRight, i64 0, i64 %70
  store i8 -1, ptr %71, align 1, !tbaa !5
  %72 = load i8, ptr @windowIndex, align 1, !tbaa !5
  %73 = zext i8 %72 to i32
  %74 = add nsw i32 %73, 2
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds [1024 x i8], ptr @hdmaTableRight, i64 0, i64 %75
  store i8 0, ptr %76, align 1, !tbaa !5
  %77 = load i8, ptr %16, align 1, !tbaa !5
  %78 = zext i8 %77 to i32
  %79 = load i8, ptr %13, align 1, !tbaa !5
  %80 = zext i8 %79 to i32
  %81 = add nsw i32 %80, 1
  %82 = or i32 %78, %81
  %83 = trunc i32 %82 to i8
  call void @setColorEffect(i8 noundef zeroext 16, i8 noundef zeroext %83)
  %84 = load i8, ptr %14, align 1, !tbaa !5
  %85 = zext i8 %84 to i32
  %86 = load i8, ptr %15, align 1, !tbaa !5
  %87 = zext i8 %86 to i32
  %88 = or i32 %85, %87
  %89 = trunc i32 %88 to i8
  store volatile i8 %89, ptr inttoptr (i64 8498 to ptr), align 1, !tbaa !5
  %90 = load i8, ptr %13, align 1, !tbaa !5
  %91 = zext i8 %90 to i32
  switch i32 %91, label %94 [
    i32 0, label %92
    i32 1, label %93
  ]

92:                                               ; preds = %50
  call void @setModeHdmaWindow(i8 noundef zeroext 1, i8 noundef zeroext 2, ptr noundef @hdmaTableLeft, ptr noundef @hdmaTableRight)
  br label %94

93:                                               ; preds = %50
  call void @setModeHdmaWindow(i8 noundef zeroext 2, i8 noundef zeroext 32, ptr noundef @hdmaTableLeft, ptr noundef @hdmaTableRight)
  br label %94

94:                                               ; preds = %93, %92, %50
  store volatile i8 0, ptr inttoptr (i64 8494 to ptr), align 1, !tbaa !5
  store volatile i8 32, ptr inttoptr (i64 8485 to ptr), align 1, !tbaa !5
  store volatile i8 0, ptr inttoptr (i64 17216 to ptr), align 1, !tbaa !5
  store volatile i8 0, ptr inttoptr (i64 17232 to ptr), align 1, !tbaa !5
  ret void
}

declare void @setColorEffect(i8 noundef zeroext, i8 noundef zeroext) #1

declare void @setModeHdmaWindow(i8 noundef zeroext, i8 noundef zeroext, ptr noundef, ptr noundef) #1

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

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = distinct !{!8, !9}
!9 = !{!"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"

@hdmaTableLeft = external dso_local global <{ i8, i8, i8, i8, i8, i8, [1018 x i8] }>, align 16
@hdmaTableRight = external dso_local global <{ i8, i8, i8, i8, i8, i8, [1018 x i8] }>, align 16
@windowIndex = external dso_local local_unnamed_addr global i8, align 1

; Function Attrs: nounwind uwtable
define dso_local void @createTransparentWindow(i8 noundef zeroext %0, i8 noundef zeroext %1, i8 noundef zeroext %2, i8 noundef zeroext %3, i8 noundef zeroext %4, i8 noundef zeroext %5, i8 noundef zeroext %6, i8 noundef zeroext %7) local_unnamed_addr #0 {
  store i8 %1, ptr @hdmaTableLeft, align 16, !tbaa !5
  store i8 %1, ptr @hdmaTableRight, align 16, !tbaa !5
  store i8 -1, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 1), align 1, !tbaa !5
  store i8 0, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 1), align 1, !tbaa !5
  %9 = zext i8 %3 to i32
  %10 = or i8 %3, -128
  store i8 %10, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 2), align 2, !tbaa !5
  store i8 %10, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 2), align 2, !tbaa !5
  %11 = add nuw nsw i32 %9, 3
  %.not = icmp eq i8 %3, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %8
  %12 = add i8 %2, %0
  %min.iters.check = icmp ult i8 %3, 32
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph
  %13 = add nsw i32 %9, -1
  %14 = and i32 %13, 252
  %15 = icmp eq i32 %14, 252
  %16 = trunc i32 %13 to i8
  %17 = icmp ugt i8 %16, -4
  %18 = icmp ugt i32 %13, 255
  %19 = or i1 %17, %18
  %20 = or i1 %15, %19
  br i1 %20, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.scevcheck
  %n.vec = and i32 %9, 224
  %.cast = trunc nuw i32 %n.vec to i8
  %ind.end = or disjoint i8 %.cast, 3
  %broadcast.splatinsert = insertelement <16 x i8> poison, i8 %0, i64 0
  %broadcast.splat = shufflevector <16 x i8> %broadcast.splatinsert, <16 x i8> poison, <16 x i32> zeroinitializer
  %broadcast.splatinsert17 = insertelement <16 x i8> poison, i8 %12, i64 0
  %broadcast.splat18 = shufflevector <16 x i8> %broadcast.splatinsert17, <16 x i8> poison, <16 x i32> zeroinitializer
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 3), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 19), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 3), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 19), align 1, !tbaa !5
  %21 = icmp eq i32 %n.vec, 32
  br i1 %21, label %middle.block, label %vector.body.1, !llvm.loop !8

vector.body.1:                                    ; preds = %vector.ph
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 35), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 51), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 35), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 51), align 1, !tbaa !5
  %22 = icmp eq i32 %n.vec, 64
  br i1 %22, label %middle.block, label %vector.body.2, !llvm.loop !8

vector.body.2:                                    ; preds = %vector.body.1
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 67), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 83), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 67), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 83), align 1, !tbaa !5
  %23 = icmp eq i32 %n.vec, 96
  br i1 %23, label %middle.block, label %vector.body.3, !llvm.loop !8

vector.body.3:                                    ; preds = %vector.body.2
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 99), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 115), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 99), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 115), align 1, !tbaa !5
  %24 = icmp eq i32 %n.vec, 128
  br i1 %24, label %middle.block, label %vector.body.4, !llvm.loop !8

vector.body.4:                                    ; preds = %vector.body.3
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 131), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 147), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 131), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 147), align 1, !tbaa !5
  %25 = icmp eq i32 %n.vec, 160
  br i1 %25, label %middle.block, label %vector.body.5, !llvm.loop !8

vector.body.5:                                    ; preds = %vector.body.4
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 163), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 179), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 163), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 179), align 1, !tbaa !5
  %26 = icmp eq i32 %n.vec, 192
  br i1 %26, label %middle.block, label %vector.body.6, !llvm.loop !8

vector.body.6:                                    ; preds = %vector.body.5
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 195), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat, ptr getelementptr inbounds (i8, ptr @hdmaTableLeft, i64 211), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 195), align 1, !tbaa !5
  store <16 x i8> %broadcast.splat18, ptr getelementptr inbounds (i8, ptr @hdmaTableRight, i64 211), align 1, !tbaa !5
  br label %middle.block

middle.block:                                     ; preds = %vector.body.6, %vector.body.5, %vector.body.4, %vector.body.3, %vector.body.2, %vector.body.1, %vector.ph
  %cmp.n = icmp eq i32 %n.vec, %9
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.scevcheck, %.lr.ph
  %storemerge14.ph = phi i8 [ 3, %vector.scevcheck ], [ 3, %.lr.ph ], [ %ind.end, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %storemerge14 = phi i8 [ %30, %scalar.ph ], [ %storemerge14.ph, %scalar.ph.preheader ]
  %27 = zext i8 %storemerge14 to i64
  %28 = getelementptr inbounds [1024 x i8], ptr @hdmaTableLeft, i64 0, i64 %27
  store i8 %0, ptr %28, align 1, !tbaa !5
  %29 = getelementptr inbounds [1024 x i8], ptr @hdmaTableRight, i64 0, i64 %27
  store i8 %12, ptr %29, align 1, !tbaa !5
  %30 = add i8 %storemerge14, 1
  %31 = zext i8 %30 to i32
  %32 = icmp ugt i32 %11, %31
  br i1 %32, label %scalar.ph, label %._crit_edge, !llvm.loop !12

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %8
  %storemerge.lcssa13 = phi i8 [ 3, %8 ], [ %ind.end, %middle.block ], [ %30, %scalar.ph ]
  store i8 %storemerge.lcssa13, ptr @windowIndex, align 1, !tbaa !5
  %33 = zext i8 %storemerge.lcssa13 to i64
  %34 = getelementptr inbounds [1024 x i8], ptr @hdmaTableLeft, i64 0, i64 %33
  store i8 1, ptr %34, align 1, !tbaa !5
  %35 = add nuw nsw i64 %33, 1
  %36 = getelementptr inbounds [1024 x i8], ptr @hdmaTableLeft, i64 0, i64 %35
  store i8 -1, ptr %36, align 1, !tbaa !5
  %37 = add nuw nsw i64 %33, 2
  %38 = getelementptr inbounds [1024 x i8], ptr @hdmaTableLeft, i64 0, i64 %37
  store i8 0, ptr %38, align 1, !tbaa !5
  %39 = getelementptr inbounds [1024 x i8], ptr @hdmaTableRight, i64 0, i64 %33
  store i8 0, ptr %39, align 1, !tbaa !5
  %40 = getelementptr inbounds [1024 x i8], ptr @hdmaTableRight, i64 0, i64 %35
  store i8 -1, ptr %40, align 1, !tbaa !5
  %41 = getelementptr inbounds [1024 x i8], ptr @hdmaTableRight, i64 0, i64 %37
  store i8 0, ptr %41, align 1, !tbaa !5
  %42 = add i8 %4, 1
  %43 = or i8 %42, %7
  tail call void @setColorEffect(i8 noundef zeroext 16, i8 noundef zeroext %43) #2
  %44 = or i8 %6, %5
  store volatile i8 %44, ptr inttoptr (i64 8498 to ptr), align 2, !tbaa !5
  switch i8 %4, label %47 [
    i8 0, label %45
    i8 1, label %46
  ]

45:                                               ; preds = %._crit_edge
  tail call void @setModeHdmaWindow(i8 noundef zeroext 1, i8 noundef zeroext 2, ptr noundef nonnull @hdmaTableLeft, ptr noundef nonnull @hdmaTableRight) #2
  br label %47

46:                                               ; preds = %._crit_edge
  tail call void @setModeHdmaWindow(i8 noundef zeroext 2, i8 noundef zeroext 32, ptr noundef nonnull @hdmaTableLeft, ptr noundef nonnull @hdmaTableRight) #2
  br label %47

47:                                               ; preds = %46, %45, %._crit_edge
  store volatile i8 0, ptr inttoptr (i64 8494 to ptr), align 2, !tbaa !5
  store volatile i8 32, ptr inttoptr (i64 8485 to ptr), align 1, !tbaa !5
  store volatile i8 0, ptr inttoptr (i64 17216 to ptr), align 64, !tbaa !5
  store volatile i8 0, ptr inttoptr (i64 17232 to ptr), align 16, !tbaa !5
  ret void
}

declare void @setColorEffect(i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #1

declare void @setModeHdmaWindow(i8 noundef zeroext, i8 noundef zeroext, ptr noundef, ptr noundef) local_unnamed_addr #1

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

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = distinct !{!8, !9, !10, !11}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!"llvm.loop.isvectorized", i32 1}
!11 = !{!"llvm.loop.unroll.runtime.disable"}
!12 = distinct !{!12, !9, !10}


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