; LLVM IR from marcobambini/gravity :: src/compiler (gravity_ircode)

; 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.ircode_t = type { ptr, %struct.uint32_r, %struct.uint32_r, %struct.uint32_r, i32, i32, i32, i16, i8, [256 x i8], [256 x i8], %struct.uint32_r, %struct.context_r }
%struct.uint32_r = type { i64, i64, ptr }
%struct.context_r = type { i64, i64, ptr }

; 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 @ircode_register_temps_clear(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #2
  %4 = load ptr, ptr %2, align 8, !tbaa !5
  %5 = getelementptr inbounds %struct.ircode_t, ptr %4, i32 0, i32 7
  %6 = load i16, ptr %5, align 4, !tbaa !9
  %7 = zext i16 %6 to i32
  store i32 %7, ptr %3, align 4, !tbaa !16
  br label %8

8:                                                ; preds = %30, %1
  %9 = load i32, ptr %3, align 4, !tbaa !16
  %10 = load ptr, ptr %2, align 8, !tbaa !5
  %11 = getelementptr inbounds %struct.ircode_t, ptr %10, i32 0, i32 5
  %12 = load i32, ptr %11, align 4, !tbaa !17
  %13 = icmp ule i32 %9, %12
  br i1 %13, label %15, label %14

14:                                               ; preds = %8
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #2
  br label %33

15:                                               ; preds = %8
  %16 = load ptr, ptr %2, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.ircode_t, ptr %16, i32 0, i32 10
  %18 = load i32, ptr %3, align 4, !tbaa !16
  %19 = zext i32 %18 to i64
  %20 = getelementptr inbounds [256 x i8], ptr %17, i64 0, i64 %19
  %21 = load i8, ptr %20, align 1, !tbaa !18, !range !19, !noundef !20
  %22 = trunc i8 %21 to i1
  br i1 %22, label %29, label %23

23:                                               ; preds = %15
  %24 = load ptr, ptr %2, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.ircode_t, ptr %24, i32 0, i32 9
  %26 = load i32, ptr %3, align 4, !tbaa !16
  %27 = zext i32 %26 to i64
  %28 = getelementptr inbounds [256 x i8], ptr %25, i64 0, i64 %27
  store i8 0, ptr %28, align 1, !tbaa !18
  br label %29

29:                                               ; preds = %23, %15
  br label %30

30:                                               ; preds = %29
  %31 = load i32, ptr %3, align 4, !tbaa !16
  %32 = add i32 %31, 1
  store i32 %32, ptr %3, align 4, !tbaa !16
  br label %8, !llvm.loop !21

33:                                               ; preds = %14
  ret void
}

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, !14, i64 92}
!10 = !{!"ircode_t", !6, i64 0, !11, i64 8, !11, i64 32, !11, i64 56, !13, i64 80, !13, i64 84, !13, i64 88, !14, i64 92, !15, i64 94, !7, i64 95, !7, i64 351, !11, i64 608, !11, i64 632}
!11 = !{!"", !12, i64 0, !12, i64 8, !6, i64 16}
!12 = !{!"long", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!"_Bool", !7, i64 0}
!16 = !{!13, !13, i64 0}
!17 = !{!10, !13, i64 84}
!18 = !{!15, !15, i64 0}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = distinct !{!21, !22}
!22 = !{!"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"

; Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable
define dso_local void @ircode_register_temps_clear(ptr nocapture noundef %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 92
  %3 = load i16, ptr %2, align 4, !tbaa !5
  %4 = zext i16 %3 to i32
  %5 = getelementptr inbounds i8, ptr %0, i64 84
  %6 = load i32, ptr %5, align 4, !tbaa !15
  %.not7 = icmp ult i32 %6, %4
  br i1 %.not7, label %._crit_edge, label %iter.check

iter.check:                                       ; preds = %1
  %7 = getelementptr inbounds i8, ptr %0, i64 351
  %8 = getelementptr inbounds i8, ptr %0, i64 95
  %9 = add i32 %6, 1
  %10 = add nuw nsw i32 %4, 1
  %umax9 = tail call i32 @llvm.umax.i32(i32 %9, i32 %10)
  %11 = sub i32 %umax9, %4
  %min.iters.check = icmp ult i32 %11, 8
  br i1 %min.iters.check, label %vec.epilog.scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %iter.check
  %12 = add i32 %6, 1
  %13 = add nuw nsw i32 %4, 1
  %umax = tail call i32 @llvm.umax.i32(i32 %12, i32 %13)
  %14 = add i32 %umax, -1
  %15 = icmp ult i32 %14, %4
  br i1 %15, label %vec.epilog.scalar.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %vector.scevcheck
  %min.iters.check10 = icmp ult i32 %11, 32
  br i1 %min.iters.check10, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i32 %11, -32
  br label %vector.body

vector.body:                                      ; preds = %pred.store.continue73, %vector.ph
  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %pred.store.continue73 ]
  %offset.idx = add i32 %index, %4
  %16 = add i32 %offset.idx, 16
  %17 = zext i32 %offset.idx to i64
  %18 = getelementptr inbounds [256 x i8], ptr %7, i64 0, i64 %17
  %19 = getelementptr inbounds i8, ptr %18, i64 16
  %wide.load = load <16 x i8>, ptr %18, align 1, !tbaa !16
  %wide.load11 = load <16 x i8>, ptr %19, align 1, !tbaa !16
  %20 = trunc <16 x i8> %wide.load to <16 x i1>
  %21 = trunc <16 x i8> %wide.load11 to <16 x i1>
  %22 = xor <16 x i1> %20, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
  %23 = xor <16 x i1> %21, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
  %24 = extractelement <16 x i1> %22, i64 0
  br i1 %24, label %pred.store.if, label %pred.store.continue

pred.store.if:                                    ; preds = %vector.body
  %25 = zext i32 %offset.idx to i64
  %26 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %25
  store i8 0, ptr %26, align 1, !tbaa !16
  br label %pred.store.continue

pred.store.continue:                              ; preds = %pred.store.if, %vector.body
  %27 = extractelement <16 x i1> %22, i64 1
  br i1 %27, label %pred.store.if12, label %pred.store.continue13

pred.store.if12:                                  ; preds = %pred.store.continue
  %28 = add i32 %offset.idx, 1
  %29 = zext i32 %28 to i64
  %30 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %29
  store i8 0, ptr %30, align 1, !tbaa !16
  br label %pred.store.continue13

pred.store.continue13:                            ; preds = %pred.store.if12, %pred.store.continue
  %31 = extractelement <16 x i1> %22, i64 2
  br i1 %31, label %pred.store.if14, label %pred.store.continue15

pred.store.if14:                                  ; preds = %pred.store.continue13
  %32 = add i32 %offset.idx, 2
  %33 = zext i32 %32 to i64
  %34 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %33
  store i8 0, ptr %34, align 1, !tbaa !16
  br label %pred.store.continue15

pred.store.continue15:                            ; preds = %pred.store.if14, %pred.store.continue13
  %35 = extractelement <16 x i1> %22, i64 3
  br i1 %35, label %pred.store.if16, label %pred.store.continue17

pred.store.if16:                                  ; preds = %pred.store.continue15
  %36 = add i32 %offset.idx, 3
  %37 = zext i32 %36 to i64
  %38 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %37
  store i8 0, ptr %38, align 1, !tbaa !16
  br label %pred.store.continue17

pred.store.continue17:                            ; preds = %pred.store.if16, %pred.store.continue15
  %39 = extractelement <16 x i1> %22, i64 4
  br i1 %39, label %pred.store.if18, label %pred.store.continue19

pred.store.if18:                                  ; preds = %pred.store.continue17
  %40 = add i32 %offset.idx, 4
  %41 = zext i32 %40 to i64
  %42 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %41
  store i8 0, ptr %42, align 1, !tbaa !16
  br label %pred.store.continue19

pred.store.continue19:                            ; preds = %pred.store.if18, %pred.store.continue17
  %43 = extractelement <16 x i1> %22, i64 5
  br i1 %43, label %pred.store.if20, label %pred.store.continue21

pred.store.if20:                                  ; preds = %pred.store.continue19
  %44 = add i32 %offset.idx, 5
  %45 = zext i32 %44 to i64
  %46 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %45
  store i8 0, ptr %46, align 1, !tbaa !16
  br label %pred.store.continue21

pred.store.continue21:                            ; preds = %pred.store.if20, %pred.store.continue19
  %47 = extractelement <16 x i1> %22, i64 6
  br i1 %47, label %pred.store.if22, label %pred.store.continue23

pred.store.if22:                                  ; preds = %pred.store.continue21
  %48 = add i32 %offset.idx, 6
  %49 = zext i32 %48 to i64
  %50 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %49
  store i8 0, ptr %50, align 1, !tbaa !16
  br label %pred.store.continue23

pred.store.continue23:                            ; preds = %pred.store.if22, %pred.store.continue21
  %51 = extractelement <16 x i1> %22, i64 7
  br i1 %51, label %pred.store.if24, label %pred.store.continue25

pred.store.if24:                                  ; preds = %pred.store.continue23
  %52 = add i32 %offset.idx, 7
  %53 = zext i32 %52 to i64
  %54 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %53
  store i8 0, ptr %54, align 1, !tbaa !16
  br label %pred.store.continue25

pred.store.continue25:                            ; preds = %pred.store.if24, %pred.store.continue23
  %55 = extractelement <16 x i1> %22, i64 8
  br i1 %55, label %pred.store.if26, label %pred.store.continue27

pred.store.if26:                                  ; preds = %pred.store.continue25
  %56 = add i32 %offset.idx, 8
  %57 = zext i32 %56 to i64
  %58 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %57
  store i8 0, ptr %58, align 1, !tbaa !16
  br label %pred.store.continue27

pred.store.continue27:                            ; preds = %pred.store.if26, %pred.store.continue25
  %59 = extractelement <16 x i1> %22, i64 9
  br i1 %59, label %pred.store.if28, label %pred.store.continue29

pred.store.if28:                                  ; preds = %pred.store.continue27
  %60 = add i32 %offset.idx, 9
  %61 = zext i32 %60 to i64
  %62 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %61
  store i8 0, ptr %62, align 1, !tbaa !16
  br label %pred.store.continue29

pred.store.continue29:                            ; preds = %pred.store.if28, %pred.store.continue27
  %63 = extractelement <16 x i1> %22, i64 10
  br i1 %63, label %pred.store.if30, label %pred.store.continue31

pred.store.if30:                                  ; preds = %pred.store.continue29
  %64 = add i32 %offset.idx, 10
  %65 = zext i32 %64 to i64
  %66 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %65
  store i8 0, ptr %66, align 1, !tbaa !16
  br label %pred.store.continue31

pred.store.continue31:                            ; preds = %pred.store.if30, %pred.store.continue29
  %67 = extractelement <16 x i1> %22, i64 11
  br i1 %67, label %pred.store.if32, label %pred.store.continue33

pred.store.if32:                                  ; preds = %pred.store.continue31
  %68 = add i32 %offset.idx, 11
  %69 = zext i32 %68 to i64
  %70 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %69
  store i8 0, ptr %70, align 1, !tbaa !16
  br label %pred.store.continue33

pred.store.continue33:                            ; preds = %pred.store.if32, %pred.store.continue31
  %71 = extractelement <16 x i1> %22, i64 12
  br i1 %71, label %pred.store.if34, label %pred.store.continue35

pred.store.if34:                                  ; preds = %pred.store.continue33
  %72 = add i32 %offset.idx, 12
  %73 = zext i32 %72 to i64
  %74 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %73
  store i8 0, ptr %74, align 1, !tbaa !16
  br label %pred.store.continue35

pred.store.continue35:                            ; preds = %pred.store.if34, %pred.store.continue33
  %75 = extractelement <16 x i1> %22, i64 13
  br i1 %75, label %pred.store.if36, label %pred.store.continue37

pred.store.if36:                                  ; preds = %pred.store.continue35
  %76 = add i32 %offset.idx, 13
  %77 = zext i32 %76 to i64
  %78 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %77
  store i8 0, ptr %78, align 1, !tbaa !16
  br label %pred.store.continue37

pred.store.continue37:                            ; preds = %pred.store.if36, %pred.store.continue35
  %79 = extractelement <16 x i1> %22, i64 14
  br i1 %79, label %pred.store.if38, label %pred.store.continue39

pred.store.if38:                                  ; preds = %pred.store.continue37
  %80 = add i32 %offset.idx, 14
  %81 = zext i32 %80 to i64
  %82 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %81
  store i8 0, ptr %82, align 1, !tbaa !16
  br label %pred.store.continue39

pred.store.continue39:                            ; preds = %pred.store.if38, %pred.store.continue37
  %83 = extractelement <16 x i1> %22, i64 15
  br i1 %83, label %pred.store.if40, label %pred.store.continue41

pred.store.if40:                                  ; preds = %pred.store.continue39
  %84 = add i32 %offset.idx, 15
  %85 = zext i32 %84 to i64
  %86 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %85
  store i8 0, ptr %86, align 1, !tbaa !16
  br label %pred.store.continue41

pred.store.continue41:                            ; preds = %pred.store.if40, %pred.store.continue39
  %87 = extractelement <16 x i1> %23, i64 0
  br i1 %87, label %pred.store.if42, label %pred.store.continue43

pred.store.if42:                                  ; preds = %pred.store.continue41
  %88 = zext i32 %16 to i64
  %89 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %88
  store i8 0, ptr %89, align 1, !tbaa !16
  br label %pred.store.continue43

pred.store.continue43:                            ; preds = %pred.store.if42, %pred.store.continue41
  %90 = extractelement <16 x i1> %23, i64 1
  br i1 %90, label %pred.store.if44, label %pred.store.continue45

pred.store.if44:                                  ; preds = %pred.store.continue43
  %91 = add i32 %offset.idx, 17
  %92 = zext i32 %91 to i64
  %93 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %92
  store i8 0, ptr %93, align 1, !tbaa !16
  br label %pred.store.continue45

pred.store.continue45:                            ; preds = %pred.store.if44, %pred.store.continue43
  %94 = extractelement <16 x i1> %23, i64 2
  br i1 %94, label %pred.store.if46, label %pred.store.continue47

pred.store.if46:                                  ; preds = %pred.store.continue45
  %95 = add i32 %offset.idx, 18
  %96 = zext i32 %95 to i64
  %97 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %96
  store i8 0, ptr %97, align 1, !tbaa !16
  br label %pred.store.continue47

pred.store.continue47:                            ; preds = %pred.store.if46, %pred.store.continue45
  %98 = extractelement <16 x i1> %23, i64 3
  br i1 %98, label %pred.store.if48, label %pred.store.continue49

pred.store.if48:                                  ; preds = %pred.store.continue47
  %99 = add i32 %offset.idx, 19
  %100 = zext i32 %99 to i64
  %101 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %100
  store i8 0, ptr %101, align 1, !tbaa !16
  br label %pred.store.continue49

pred.store.continue49:                            ; preds = %pred.store.if48, %pred.store.continue47
  %102 = extractelement <16 x i1> %23, i64 4
  br i1 %102, label %pred.store.if50, label %pred.store.continue51

pred.store.if50:                                  ; preds = %pred.store.continue49
  %103 = add i32 %offset.idx, 20
  %104 = zext i32 %103 to i64
  %105 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %104
  store i8 0, ptr %105, align 1, !tbaa !16
  br label %pred.store.continue51

pred.store.continue51:                            ; preds = %pred.store.if50, %pred.store.continue49
  %106 = extractelement <16 x i1> %23, i64 5
  br i1 %106, label %pred.store.if52, label %pred.store.continue53

pred.store.if52:                                  ; preds = %pred.store.continue51
  %107 = add i32 %offset.idx, 21
  %108 = zext i32 %107 to i64
  %109 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %108
  store i8 0, ptr %109, align 1, !tbaa !16
  br label %pred.store.continue53

pred.store.continue53:                            ; preds = %pred.store.if52, %pred.store.continue51
  %110 = extractelement <16 x i1> %23, i64 6
  br i1 %110, label %pred.store.if54, label %pred.store.continue55

pred.store.if54:                                  ; preds = %pred.store.continue53
  %111 = add i32 %offset.idx, 22
  %112 = zext i32 %111 to i64
  %113 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %112
  store i8 0, ptr %113, align 1, !tbaa !16
  br label %pred.store.continue55

pred.store.continue55:                            ; preds = %pred.store.if54, %pred.store.continue53
  %114 = extractelement <16 x i1> %23, i64 7
  br i1 %114, label %pred.store.if56, label %pred.store.continue57

pred.store.if56:                                  ; preds = %pred.store.continue55
  %115 = add i32 %offset.idx, 23
  %116 = zext i32 %115 to i64
  %117 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %116
  store i8 0, ptr %117, align 1, !tbaa !16
  br label %pred.store.continue57

pred.store.continue57:                            ; preds = %pred.store.if56, %pred.store.continue55
  %118 = extractelement <16 x i1> %23, i64 8
  br i1 %118, label %pred.store.if58, label %pred.store.continue59

pred.store.if58:                                  ; preds = %pred.store.continue57
  %119 = add i32 %offset.idx, 24
  %120 = zext i32 %119 to i64
  %121 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %120
  store i8 0, ptr %121, align 1, !tbaa !16
  br label %pred.store.continue59

pred.store.continue59:                            ; preds = %pred.store.if58, %pred.store.continue57
  %122 = extractelement <16 x i1> %23, i64 9
  br i1 %122, label %pred.store.if60, label %pred.store.continue61

pred.store.if60:                                  ; preds = %pred.store.continue59
  %123 = add i32 %offset.idx, 25
  %124 = zext i32 %123 to i64
  %125 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %124
  store i8 0, ptr %125, align 1, !tbaa !16
  br label %pred.store.continue61

pred.store.continue61:                            ; preds = %pred.store.if60, %pred.store.continue59
  %126 = extractelement <16 x i1> %23, i64 10
  br i1 %126, label %pred.store.if62, label %pred.store.continue63

pred.store.if62:                                  ; preds = %pred.store.continue61
  %127 = add i32 %offset.idx, 26
  %128 = zext i32 %127 to i64
  %129 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %128
  store i8 0, ptr %129, align 1, !tbaa !16
  br label %pred.store.continue63

pred.store.continue63:                            ; preds = %pred.store.if62, %pred.store.continue61
  %130 = extractelement <16 x i1> %23, i64 11
  br i1 %130, label %pred.store.if64, label %pred.store.continue65

pred.store.if64:                                  ; preds = %pred.store.continue63
  %131 = add i32 %offset.idx, 27
  %132 = zext i32 %131 to i64
  %133 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %132
  store i8 0, ptr %133, align 1, !tbaa !16
  br label %pred.store.continue65

pred.store.continue65:                            ; preds = %pred.store.if64, %pred.store.continue63
  %134 = extractelement <16 x i1> %23, i64 12
  br i1 %134, label %pred.store.if66, label %pred.store.continue67

pred.store.if66:                                  ; preds = %pred.store.continue65
  %135 = add i32 %offset.idx, 28
  %136 = zext i32 %135 to i64
  %137 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %136
  store i8 0, ptr %137, align 1, !tbaa !16
  br label %pred.store.continue67

pred.store.continue67:                            ; preds = %pred.store.if66, %pred.store.continue65
  %138 = extractelement <16 x i1> %23, i64 13
  br i1 %138, label %pred.store.if68, label %pred.store.continue69

pred.store.if68:                                  ; preds = %pred.store.continue67
  %139 = add i32 %offset.idx, 29
  %140 = zext i32 %139 to i64
  %141 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %140
  store i8 0, ptr %141, align 1, !tbaa !16
  br label %pred.store.continue69

pred.store.continue69:                            ; preds = %pred.store.if68, %pred.store.continue67
  %142 = extractelement <16 x i1> %23, i64 14
  br i1 %142, label %pred.store.if70, label %pred.store.continue71

pred.store.if70:                                  ; preds = %pred.store.continue69
  %143 = add i32 %offset.idx, 30
  %144 = zext i32 %143 to i64
  %145 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %144
  store i8 0, ptr %145, align 1, !tbaa !16
  br label %pred.store.continue71

pred.store.continue71:                            ; preds = %pred.store.if70, %pred.store.continue69
  %146 = extractelement <16 x i1> %23, i64 15
  br i1 %146, label %pred.store.if72, label %pred.store.continue73

pred.store.if72:                                  ; preds = %pred.store.continue71
  %147 = add i32 %offset.idx, 31
  %148 = zext i32 %147 to i64
  %149 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %148
  store i8 0, ptr %149, align 1, !tbaa !16
  br label %pred.store.continue73

pred.store.continue73:                            ; preds = %pred.store.if72, %pred.store.continue71
  %index.next = add nuw i32 %index, 32
  %150 = icmp eq i32 %index.next, %n.vec
  br i1 %150, label %middle.block, label %vector.body, !llvm.loop !17

middle.block:                                     ; preds = %pred.store.continue73
  %cmp.n = icmp eq i32 %11, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  %ind.end76 = add i32 %n.vec, %4
  %n.vec.remaining = and i32 %11, 24
  %min.epilog.iters.check = icmp eq i32 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %vec.epilog.scalar.ph.preheader, label %vec.epilog.ph

vec.epilog.scalar.ph.preheader:                   ; preds = %vec.epilog.middle.block, %vector.scevcheck, %iter.check, %vec.epilog.iter.check
  %.08.ph = phi i32 [ %4, %iter.check ], [ %4, %vector.scevcheck ], [ %ind.end76, %vec.epilog.iter.check ], [ %ind.end, %vec.epilog.middle.block ]
  br label %vec.epilog.scalar.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i32 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec75 = and i32 %11, -8
  %ind.end = add i32 %n.vec75, %4
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %pred.store.continue95, %vec.epilog.ph
  %index77 = phi i32 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next96, %pred.store.continue95 ]
  %offset.idx78 = add i32 %index77, %4
  %151 = zext i32 %offset.idx78 to i64
  %152 = getelementptr inbounds [256 x i8], ptr %7, i64 0, i64 %151
  %wide.load79 = load <8 x i8>, ptr %152, align 1, !tbaa !16
  %153 = trunc <8 x i8> %wide.load79 to <8 x i1>
  %154 = xor <8 x i1> %153, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
  %155 = extractelement <8 x i1> %154, i64 0
  br i1 %155, label %pred.store.if80, label %pred.store.continue81

pred.store.if80:                                  ; preds = %vec.epilog.vector.body
  %156 = zext i32 %offset.idx78 to i64
  %157 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %156
  store i8 0, ptr %157, align 1, !tbaa !16
  br label %pred.store.continue81

pred.store.continue81:                            ; preds = %pred.store.if80, %vec.epilog.vector.body
  %158 = extractelement <8 x i1> %154, i64 1
  br i1 %158, label %pred.store.if82, label %pred.store.continue83

pred.store.if82:                                  ; preds = %pred.store.continue81
  %159 = add i32 %offset.idx78, 1
  %160 = zext i32 %159 to i64
  %161 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %160
  store i8 0, ptr %161, align 1, !tbaa !16
  br label %pred.store.continue83

pred.store.continue83:                            ; preds = %pred.store.if82, %pred.store.continue81
  %162 = extractelement <8 x i1> %154, i64 2
  br i1 %162, label %pred.store.if84, label %pred.store.continue85

pred.store.if84:                                  ; preds = %pred.store.continue83
  %163 = add i32 %offset.idx78, 2
  %164 = zext i32 %163 to i64
  %165 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %164
  store i8 0, ptr %165, align 1, !tbaa !16
  br label %pred.store.continue85

pred.store.continue85:                            ; preds = %pred.store.if84, %pred.store.continue83
  %166 = extractelement <8 x i1> %154, i64 3
  br i1 %166, label %pred.store.if86, label %pred.store.continue87

pred.store.if86:                                  ; preds = %pred.store.continue85
  %167 = add i32 %offset.idx78, 3
  %168 = zext i32 %167 to i64
  %169 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %168
  store i8 0, ptr %169, align 1, !tbaa !16
  br label %pred.store.continue87

pred.store.continue87:                            ; preds = %pred.store.if86, %pred.store.continue85
  %170 = extractelement <8 x i1> %154, i64 4
  br i1 %170, label %pred.store.if88, label %pred.store.continue89

pred.store.if88:                                  ; preds = %pred.store.continue87
  %171 = add i32 %offset.idx78, 4
  %172 = zext i32 %171 to i64
  %173 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %172
  store i8 0, ptr %173, align 1, !tbaa !16
  br label %pred.store.continue89

pred.store.continue89:                            ; preds = %pred.store.if88, %pred.store.continue87
  %174 = extractelement <8 x i1> %154, i64 5
  br i1 %174, label %pred.store.if90, label %pred.store.continue91

pred.store.if90:                                  ; preds = %pred.store.continue89
  %175 = add i32 %offset.idx78, 5
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %176
  store i8 0, ptr %177, align 1, !tbaa !16
  br label %pred.store.continue91

pred.store.continue91:                            ; preds = %pred.store.if90, %pred.store.continue89
  %178 = extractelement <8 x i1> %154, i64 6
  br i1 %178, label %pred.store.if92, label %pred.store.continue93

pred.store.if92:                                  ; preds = %pred.store.continue91
  %179 = add i32 %offset.idx78, 6
  %180 = zext i32 %179 to i64
  %181 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %180
  store i8 0, ptr %181, align 1, !tbaa !16
  br label %pred.store.continue93

pred.store.continue93:                            ; preds = %pred.store.if92, %pred.store.continue91
  %182 = extractelement <8 x i1> %154, i64 7
  br i1 %182, label %pred.store.if94, label %pred.store.continue95

pred.store.if94:                                  ; preds = %pred.store.continue93
  %183 = add i32 %offset.idx78, 7
  %184 = zext i32 %183 to i64
  %185 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %184
  store i8 0, ptr %185, align 1, !tbaa !16
  br label %pred.store.continue95

pred.store.continue95:                            ; preds = %pred.store.if94, %pred.store.continue93
  %index.next96 = add nuw i32 %index77, 8
  %186 = icmp eq i32 %index.next96, %n.vec75
  br i1 %186, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !21

vec.epilog.middle.block:                          ; preds = %pred.store.continue95
  %cmp.n97 = icmp eq i32 %11, %n.vec75
  br i1 %cmp.n97, label %._crit_edge, label %vec.epilog.scalar.ph.preheader

._crit_edge:                                      ; preds = %193, %middle.block, %vec.epilog.middle.block, %1
  ret void

vec.epilog.scalar.ph:                             ; preds = %vec.epilog.scalar.ph.preheader, %193
  %.08 = phi i32 [ %194, %193 ], [ %.08.ph, %vec.epilog.scalar.ph.preheader ]
  %187 = zext i32 %.08 to i64
  %188 = getelementptr inbounds [256 x i8], ptr %7, i64 0, i64 %187
  %189 = load i8, ptr %188, align 1, !tbaa !16, !range !22, !noundef !23
  %190 = trunc nuw i8 %189 to i1
  br i1 %190, label %193, label %191

191:                                              ; preds = %vec.epilog.scalar.ph
  %192 = getelementptr inbounds [256 x i8], ptr %8, i64 0, i64 %187
  store i8 0, ptr %192, align 1, !tbaa !16
  br label %193

193:                                              ; preds = %vec.epilog.scalar.ph, %191
  %194 = add i32 %.08, 1
  %.not = icmp ugt i32 %194, %6
  br i1 %.not, label %._crit_edge, label %vec.epilog.scalar.ph, !llvm.loop !24
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #1

attributes #0 = { nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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, !13, i64 92}
!6 = !{!"ircode_t", !7, i64 0, !10, i64 8, !10, i64 32, !10, i64 56, !12, i64 80, !12, i64 84, !12, i64 88, !13, i64 92, !14, i64 94, !8, i64 95, !8, i64 351, !10, i64 608, !10, i64 632}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !11, i64 0, !11, i64 8, !7, i64 16}
!11 = !{!"long", !8, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!"short", !8, i64 0}
!14 = !{!"_Bool", !8, i64 0}
!15 = !{!6, !12, i64 84}
!16 = !{!14, !14, i64 0}
!17 = distinct !{!17, !18, !19, !20}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!"llvm.loop.isvectorized", i32 1}
!20 = !{!"llvm.loop.unroll.runtime.disable"}
!21 = distinct !{!21, !18, !19, !20}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = distinct !{!24, !18, !19}


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