; LLVM IR from SSBMTonberry/pocketlzma :: pocketlzma_program (LzmaEncProps_Normalize)

; 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.plz::c::_CLzmaEncProps" = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64 }

; 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: mustprogress nounwind uwtable
define dso_local void @LzmaEncProps_Normalize(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #2
  %6 = load ptr, ptr %2, align 8, !tbaa !5
  %7 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %6, i32 0, i32 0
  %8 = load i32, ptr %7, align 8, !tbaa !9
  store i32 %8, ptr %3, align 4, !tbaa !13
  %9 = load i32, ptr %3, align 4, !tbaa !13
  %10 = icmp slt i32 %9, 0
  br i1 %10, label %11, label %12

11:                                               ; preds = %1
  store i32 5, ptr %3, align 4, !tbaa !13
  br label %12

12:                                               ; preds = %11, %1
  %13 = load i32, ptr %3, align 4, !tbaa !13
  %14 = load ptr, ptr %2, align 8, !tbaa !5
  %15 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %14, i32 0, i32 0
  store i32 %13, ptr %15, align 8, !tbaa !9
  %16 = load ptr, ptr %2, align 8, !tbaa !5
  %17 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %16, i32 0, i32 1
  %18 = load i32, ptr %17, align 4, !tbaa !14
  %19 = icmp eq i32 %18, 0
  br i1 %19, label %20, label %37

20:                                               ; preds = %12
  %21 = load i32, ptr %3, align 4, !tbaa !13
  %22 = icmp sle i32 %21, 5
  br i1 %22, label %23, label %28

23:                                               ; preds = %20
  %24 = load i32, ptr %3, align 4, !tbaa !13
  %25 = mul nsw i32 %24, 2
  %26 = add nsw i32 %25, 14
  %27 = shl i32 1, %26
  br label %33

28:                                               ; preds = %20
  %29 = load i32, ptr %3, align 4, !tbaa !13
  %30 = icmp sle i32 %29, 7
  %31 = zext i1 %30 to i64
  %32 = select i1 %30, i32 33554432, i32 67108864
  br label %33

33:                                               ; preds = %28, %23
  %34 = phi i32 [ %27, %23 ], [ %32, %28 ]
  %35 = load ptr, ptr %2, align 8, !tbaa !5
  %36 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %35, i32 0, i32 1
  store i32 %34, ptr %36, align 4, !tbaa !14
  br label %37

37:                                               ; preds = %33, %12
  %38 = load ptr, ptr %2, align 8, !tbaa !5
  %39 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %38, i32 0, i32 1
  %40 = load i32, ptr %39, align 4, !tbaa !14
  %41 = zext i32 %40 to i64
  %42 = load ptr, ptr %2, align 8, !tbaa !5
  %43 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %42, i32 0, i32 12
  %44 = load i64, ptr %43, align 8, !tbaa !15
  %45 = icmp ugt i64 %41, %44
  br i1 %45, label %46, label %79

46:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #2
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %47, i32 0, i32 12
  %49 = load i64, ptr %48, align 8, !tbaa !15
  %50 = trunc i64 %49 to i32
  store i32 %50, ptr %5, align 4, !tbaa !13
  store i32 11, ptr %4, align 4, !tbaa !13
  br label %51

51:                                               ; preds = %75, %46
  %52 = load i32, ptr %4, align 4, !tbaa !13
  %53 = icmp ule i32 %52, 30
  br i1 %53, label %54, label %78

54:                                               ; preds = %51
  %55 = load i32, ptr %5, align 4, !tbaa !13
  %56 = load i32, ptr %4, align 4, !tbaa !13
  %57 = shl i32 2, %56
  %58 = icmp ule i32 %55, %57
  br i1 %58, label %59, label %64

59:                                               ; preds = %54
  %60 = load i32, ptr %4, align 4, !tbaa !13
  %61 = shl i32 2, %60
  %62 = load ptr, ptr %2, align 8, !tbaa !5
  %63 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %62, i32 0, i32 1
  store i32 %61, ptr %63, align 4, !tbaa !14
  br label %78

64:                                               ; preds = %54
  %65 = load i32, ptr %5, align 4, !tbaa !13
  %66 = load i32, ptr %4, align 4, !tbaa !13
  %67 = shl i32 3, %66
  %68 = icmp ule i32 %65, %67
  br i1 %68, label %69, label %74

69:                                               ; preds = %64
  %70 = load i32, ptr %4, align 4, !tbaa !13
  %71 = shl i32 3, %70
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %72, i32 0, i32 1
  store i32 %71, ptr %73, align 4, !tbaa !14
  br label %78

74:                                               ; preds = %64
  br label %75

75:                                               ; preds = %74
  %76 = load i32, ptr %4, align 4, !tbaa !13
  %77 = add i32 %76, 1
  store i32 %77, ptr %4, align 4, !tbaa !13
  br label %51, !llvm.loop !16

78:                                               ; preds = %69, %59, %51
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #2
  br label %79

79:                                               ; preds = %78, %37
  %80 = load ptr, ptr %2, align 8, !tbaa !5
  %81 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %80, i32 0, i32 2
  %82 = load i32, ptr %81, align 8, !tbaa !18
  %83 = icmp slt i32 %82, 0
  br i1 %83, label %84, label %87

84:                                               ; preds = %79
  %85 = load ptr, ptr %2, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %85, i32 0, i32 2
  store i32 3, ptr %86, align 8, !tbaa !18
  br label %87

87:                                               ; preds = %84, %79
  %88 = load ptr, ptr %2, align 8, !tbaa !5
  %89 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %88, i32 0, i32 3
  %90 = load i32, ptr %89, align 4, !tbaa !19
  %91 = icmp slt i32 %90, 0
  br i1 %91, label %92, label %95

92:                                               ; preds = %87
  %93 = load ptr, ptr %2, align 8, !tbaa !5
  %94 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %93, i32 0, i32 3
  store i32 0, ptr %94, align 4, !tbaa !19
  br label %95

95:                                               ; preds = %92, %87
  %96 = load ptr, ptr %2, align 8, !tbaa !5
  %97 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %96, i32 0, i32 4
  %98 = load i32, ptr %97, align 8, !tbaa !20
  %99 = icmp slt i32 %98, 0
  br i1 %99, label %100, label %103

100:                                              ; preds = %95
  %101 = load ptr, ptr %2, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %101, i32 0, i32 4
  store i32 2, ptr %102, align 8, !tbaa !20
  br label %103

103:                                              ; preds = %100, %95
  %104 = load ptr, ptr %2, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %104, i32 0, i32 5
  %106 = load i32, ptr %105, align 4, !tbaa !21
  %107 = icmp slt i32 %106, 0
  br i1 %107, label %108, label %115

108:                                              ; preds = %103
  %109 = load i32, ptr %3, align 4, !tbaa !13
  %110 = icmp slt i32 %109, 5
  %111 = zext i1 %110 to i64
  %112 = select i1 %110, i32 0, i32 1
  %113 = load ptr, ptr %2, align 8, !tbaa !5
  %114 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %113, i32 0, i32 5
  store i32 %112, ptr %114, align 4, !tbaa !21
  br label %115

115:                                              ; preds = %108, %103
  %116 = load ptr, ptr %2, align 8, !tbaa !5
  %117 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %116, i32 0, i32 6
  %118 = load i32, ptr %117, align 8, !tbaa !22
  %119 = icmp slt i32 %118, 0
  br i1 %119, label %120, label %127

120:                                              ; preds = %115
  %121 = load i32, ptr %3, align 4, !tbaa !13
  %122 = icmp slt i32 %121, 7
  %123 = zext i1 %122 to i64
  %124 = select i1 %122, i32 32, i32 64
  %125 = load ptr, ptr %2, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %125, i32 0, i32 6
  store i32 %124, ptr %126, align 8, !tbaa !22
  br label %127

127:                                              ; preds = %120, %115
  %128 = load ptr, ptr %2, align 8, !tbaa !5
  %129 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %128, i32 0, i32 7
  %130 = load i32, ptr %129, align 4, !tbaa !23
  %131 = icmp slt i32 %130, 0
  br i1 %131, label %132, label %141

132:                                              ; preds = %127
  %133 = load ptr, ptr %2, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %133, i32 0, i32 5
  %135 = load i32, ptr %134, align 4, !tbaa !21
  %136 = icmp eq i32 %135, 0
  %137 = zext i1 %136 to i64
  %138 = select i1 %136, i32 0, i32 1
  %139 = load ptr, ptr %2, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %139, i32 0, i32 7
  store i32 %138, ptr %140, align 4, !tbaa !23
  br label %141

141:                                              ; preds = %132, %127
  %142 = load ptr, ptr %2, align 8, !tbaa !5
  %143 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %142, i32 0, i32 8
  %144 = load i32, ptr %143, align 8, !tbaa !24
  %145 = icmp slt i32 %144, 0
  br i1 %145, label %146, label %149

146:                                              ; preds = %141
  %147 = load ptr, ptr %2, align 8, !tbaa !5
  %148 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %147, i32 0, i32 8
  store i32 4, ptr %148, align 8, !tbaa !24
  br label %149

149:                                              ; preds = %146, %141
  %150 = load ptr, ptr %2, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %150, i32 0, i32 9
  %152 = load i32, ptr %151, align 4, !tbaa !25
  %153 = icmp eq i32 %152, 0
  br i1 %153, label %154, label %169

154:                                              ; preds = %149
  %155 = load ptr, ptr %2, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %155, i32 0, i32 6
  %157 = load i32, ptr %156, align 8, !tbaa !22
  %158 = ashr i32 %157, 1
  %159 = add nsw i32 16, %158
  %160 = load ptr, ptr %2, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %160, i32 0, i32 7
  %162 = load i32, ptr %161, align 4, !tbaa !23
  %163 = icmp ne i32 %162, 0
  %164 = zext i1 %163 to i64
  %165 = select i1 %163, i32 0, i32 1
  %166 = ashr i32 %159, %165
  %167 = load ptr, ptr %2, align 8, !tbaa !5
  %168 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %167, i32 0, i32 9
  store i32 %166, ptr %168, align 4, !tbaa !25
  br label %169

169:                                              ; preds = %154, %149
  %170 = load ptr, ptr %2, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %170, i32 0, i32 11
  %172 = load i32, ptr %171, align 4, !tbaa !26
  %173 = icmp slt i32 %172, 0
  br i1 %173, label %174, label %177

174:                                              ; preds = %169
  %175 = load ptr, ptr %2, align 8, !tbaa !5
  %176 = getelementptr inbounds %"struct.plz::c::_CLzmaEncProps", ptr %175, i32 0, i32 11
  store i32 1, ptr %176, align 4, !tbaa !26
  br label %177

177:                                              ; preds = %174, %169
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #2
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTSN3plz1c14_CLzmaEncPropsE", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !12, i64 48}
!11 = !{!"int", !7, i64 0}
!12 = !{!"long long", !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!10, !11, i64 4}
!15 = !{!10, !12, i64 48}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!10, !11, i64 8}
!19 = !{!10, !11, i64 12}
!20 = !{!10, !11, i64 16}
!21 = !{!10, !11, i64 20}
!22 = !{!10, !11, i64 24}
!23 = !{!10, !11, i64 28}
!24 = !{!10, !11, i64 32}
!25 = !{!10, !11, i64 36}
!26 = !{!10, !11, i64 44}


; 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: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable
define dso_local void @LzmaEncProps_Normalize(ptr nocapture noundef %0) local_unnamed_addr #0 {
  %2 = load i32, ptr %0, align 8, !tbaa !5
  %3 = icmp slt i32 %2, 0
  %spec.store.select = select i1 %3, i32 5, i32 %2
  store i32 %spec.store.select, ptr %0, align 8, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 4
  %5 = load i32, ptr %4, align 4, !tbaa !11
  %6 = icmp eq i32 %5, 0
  br i1 %6, label %7, label %18

7:                                                ; preds = %1
  %8 = icmp slt i32 %spec.store.select, 6
  br i1 %8, label %9, label %13

9:                                                ; preds = %7
  %10 = shl nsw i32 %spec.store.select, 1
  %11 = add nsw i32 %10, 14
  %12 = shl nuw nsw i32 1, %11
  br label %16

13:                                               ; preds = %7
  %14 = icmp ult i32 %spec.store.select, 8
  %15 = select i1 %14, i32 33554432, i32 67108864
  br label %16

16:                                               ; preds = %13, %9
  %17 = phi i32 [ %12, %9 ], [ %15, %13 ]
  store i32 %17, ptr %4, align 4, !tbaa !11
  br label %18

18:                                               ; preds = %16, %1
  %19 = phi i32 [ %17, %16 ], [ %5, %1 ]
  %20 = zext i32 %19 to i64
  %21 = getelementptr inbounds i8, ptr %0, i64 48
  %22 = load i64, ptr %21, align 8, !tbaa !12
  %23 = icmp ult i64 %22, %20
  br i1 %23, label %24, label %.loopexit

24:                                               ; preds = %18
  %.not = icmp ugt i64 %22, 4096
  br i1 %.not, label %63, label %.loopexit.sink.split

25:                                               ; preds = %63
  %.not.1 = icmp ugt i64 %22, 8192
  br i1 %.not.1, label %26, label %.loopexit.sink.split

26:                                               ; preds = %25
  %.not48.1 = icmp ugt i64 %22, 12288
  br i1 %.not48.1, label %27, label %.loopexit.sink.split

27:                                               ; preds = %26
  %.not.2 = icmp ugt i64 %22, 16384
  br i1 %.not.2, label %28, label %.loopexit.sink.split

28:                                               ; preds = %27
  %.not48.2 = icmp ugt i64 %22, 24576
  br i1 %.not48.2, label %29, label %.loopexit.sink.split

29:                                               ; preds = %28
  %.not.3 = icmp ugt i64 %22, 32768
  br i1 %.not.3, label %30, label %.loopexit.sink.split

30:                                               ; preds = %29
  %.not48.3 = icmp ugt i64 %22, 49152
  br i1 %.not48.3, label %31, label %.loopexit.sink.split

31:                                               ; preds = %30
  %.not.4 = icmp ugt i64 %22, 65536
  br i1 %.not.4, label %32, label %.loopexit.sink.split

32:                                               ; preds = %31
  %.not48.4 = icmp ugt i64 %22, 98304
  br i1 %.not48.4, label %33, label %.loopexit.sink.split

33:                                               ; preds = %32
  %.not.5 = icmp ugt i64 %22, 131072
  br i1 %.not.5, label %34, label %.loopexit.sink.split

34:                                               ; preds = %33
  %.not48.5 = icmp ugt i64 %22, 196608
  br i1 %.not48.5, label %35, label %.loopexit.sink.split

35:                                               ; preds = %34
  %.not.6 = icmp ugt i64 %22, 262144
  br i1 %.not.6, label %36, label %.loopexit.sink.split

36:                                               ; preds = %35
  %.not48.6 = icmp ugt i64 %22, 393216
  br i1 %.not48.6, label %37, label %.loopexit.sink.split

37:                                               ; preds = %36
  %.not.7 = icmp ugt i64 %22, 524288
  br i1 %.not.7, label %38, label %.loopexit.sink.split

38:                                               ; preds = %37
  %.not48.7 = icmp ugt i64 %22, 786432
  br i1 %.not48.7, label %39, label %.loopexit.sink.split

39:                                               ; preds = %38
  %.not.8 = icmp ugt i64 %22, 1048576
  br i1 %.not.8, label %40, label %.loopexit.sink.split

40:                                               ; preds = %39
  %.not48.8 = icmp ugt i64 %22, 1572864
  br i1 %.not48.8, label %41, label %.loopexit.sink.split

41:                                               ; preds = %40
  %.not.9 = icmp ugt i64 %22, 2097152
  br i1 %.not.9, label %42, label %.loopexit.sink.split

42:                                               ; preds = %41
  %.not48.9 = icmp ugt i64 %22, 3145728
  br i1 %.not48.9, label %43, label %.loopexit.sink.split

43:                                               ; preds = %42
  %.not.10 = icmp ugt i64 %22, 4194304
  br i1 %.not.10, label %44, label %.loopexit.sink.split

44:                                               ; preds = %43
  %.not48.10 = icmp ugt i64 %22, 6291456
  br i1 %.not48.10, label %45, label %.loopexit.sink.split

45:                                               ; preds = %44
  %.not.11 = icmp ugt i64 %22, 8388608
  br i1 %.not.11, label %46, label %.loopexit.sink.split

46:                                               ; preds = %45
  %.not48.11 = icmp ugt i64 %22, 12582912
  br i1 %.not48.11, label %47, label %.loopexit.sink.split

47:                                               ; preds = %46
  %.not.12 = icmp ugt i64 %22, 16777216
  br i1 %.not.12, label %48, label %.loopexit.sink.split

48:                                               ; preds = %47
  %.not48.12 = icmp ugt i64 %22, 25165824
  br i1 %.not48.12, label %49, label %.loopexit.sink.split

49:                                               ; preds = %48
  %.not.13 = icmp ugt i64 %22, 33554432
  br i1 %.not.13, label %50, label %.loopexit.sink.split

50:                                               ; preds = %49
  %.not48.13 = icmp ugt i64 %22, 50331648
  br i1 %.not48.13, label %51, label %.loopexit.sink.split

51:                                               ; preds = %50
  %.not.14 = icmp ugt i64 %22, 67108864
  br i1 %.not.14, label %52, label %.loopexit.sink.split

52:                                               ; preds = %51
  %.not48.14 = icmp ugt i64 %22, 100663296
  br i1 %.not48.14, label %53, label %.loopexit.sink.split

53:                                               ; preds = %52
  %.not.15 = icmp ugt i64 %22, 134217728
  br i1 %.not.15, label %54, label %.loopexit.sink.split

54:                                               ; preds = %53
  %.not48.15 = icmp ugt i64 %22, 201326592
  br i1 %.not48.15, label %55, label %.loopexit.sink.split

55:                                               ; preds = %54
  %.not.16 = icmp ugt i64 %22, 268435456
  br i1 %.not.16, label %56, label %.loopexit.sink.split

56:                                               ; preds = %55
  %.not48.16 = icmp ugt i64 %22, 402653184
  br i1 %.not48.16, label %57, label %.loopexit.sink.split

57:                                               ; preds = %56
  %.not.17 = icmp ugt i64 %22, 536870912
  br i1 %.not.17, label %58, label %.loopexit.sink.split

58:                                               ; preds = %57
  %.not48.17 = icmp ugt i64 %22, 805306368
  br i1 %.not48.17, label %59, label %.loopexit.sink.split

59:                                               ; preds = %58
  %.not.18 = icmp ugt i64 %22, 1073741824
  br i1 %.not.18, label %60, label %.loopexit.sink.split

60:                                               ; preds = %59
  %.not48.18 = icmp ugt i64 %22, 1610612736
  br i1 %.not48.18, label %61, label %.loopexit.sink.split

61:                                               ; preds = %60
  %.not.19 = icmp ugt i64 %22, 2147483648
  br i1 %.not.19, label %62, label %.loopexit.sink.split

62:                                               ; preds = %61
  %.not48.19 = icmp ugt i64 %22, 3221225472
  br i1 %.not48.19, label %.loopexit, label %.loopexit.sink.split

63:                                               ; preds = %24
  %.not48 = icmp ugt i64 %22, 6144
  br i1 %.not48, label %25, label %.loopexit.sink.split

.loopexit.sink.split:                             ; preds = %63, %26, %28, %30, %32, %34, %36, %38, %40, %42, %44, %46, %48, %50, %52, %54, %56, %58, %60, %62, %24, %25, %27, %29, %31, %33, %35, %37, %39, %41, %43, %45, %47, %49, %51, %53, %55, %57, %59, %61
  %.lcssa.sink = phi i32 [ 4096, %24 ], [ 8192, %25 ], [ 16384, %27 ], [ 32768, %29 ], [ 65536, %31 ], [ 131072, %33 ], [ 262144, %35 ], [ 524288, %37 ], [ 1048576, %39 ], [ 2097152, %41 ], [ 4194304, %43 ], [ 8388608, %45 ], [ 16777216, %47 ], [ 33554432, %49 ], [ 67108864, %51 ], [ 134217728, %53 ], [ 268435456, %55 ], [ 536870912, %57 ], [ 1073741824, %59 ], [ -2147483648, %61 ], [ 6144, %63 ], [ 12288, %26 ], [ 24576, %28 ], [ 49152, %30 ], [ 98304, %32 ], [ 196608, %34 ], [ 393216, %36 ], [ 786432, %38 ], [ 1572864, %40 ], [ 3145728, %42 ], [ 6291456, %44 ], [ 12582912, %46 ], [ 25165824, %48 ], [ 50331648, %50 ], [ 100663296, %52 ], [ 201326592, %54 ], [ 402653184, %56 ], [ 805306368, %58 ], [ 1610612736, %60 ], [ -1073741824, %62 ]
  store i32 %.lcssa.sink, ptr %4, align 4, !tbaa !11
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.sink.split, %62, %18
  %64 = getelementptr inbounds i8, ptr %0, i64 8
  %65 = load i32, ptr %64, align 8, !tbaa !13
  %66 = icmp slt i32 %65, 0
  br i1 %66, label %67, label %68

67:                                               ; preds = %.loopexit
  store i32 3, ptr %64, align 8, !tbaa !13
  br label %68

68:                                               ; preds = %67, %.loopexit
  %69 = getelementptr inbounds i8, ptr %0, i64 12
  %70 = load i32, ptr %69, align 4, !tbaa !14
  %71 = icmp slt i32 %70, 0
  br i1 %71, label %72, label %73

72:                                               ; preds = %68
  store i32 0, ptr %69, align 4, !tbaa !14
  br label %73

73:                                               ; preds = %72, %68
  %74 = getelementptr inbounds i8, ptr %0, i64 16
  %75 = load i32, ptr %74, align 8, !tbaa !15
  %76 = icmp slt i32 %75, 0
  br i1 %76, label %77, label %78

77:                                               ; preds = %73
  store i32 2, ptr %74, align 8, !tbaa !15
  br label %78

78:                                               ; preds = %77, %73
  %79 = getelementptr inbounds i8, ptr %0, i64 20
  %80 = load i32, ptr %79, align 4, !tbaa !16
  %81 = icmp slt i32 %80, 0
  br i1 %81, label %82, label %85

82:                                               ; preds = %78
  %83 = icmp sgt i32 %spec.store.select, 4
  %84 = zext i1 %83 to i32
  store i32 %84, ptr %79, align 4, !tbaa !16
  br label %85

85:                                               ; preds = %82, %78
  %86 = phi i32 [ %84, %82 ], [ %80, %78 ]
  %87 = getelementptr inbounds i8, ptr %0, i64 24
  %88 = load i32, ptr %87, align 8, !tbaa !17
  %89 = icmp slt i32 %88, 0
  br i1 %89, label %90, label %93

90:                                               ; preds = %85
  %91 = icmp slt i32 %spec.store.select, 7
  %92 = select i1 %91, i32 32, i32 64
  store i32 %92, ptr %87, align 8, !tbaa !17
  br label %93

93:                                               ; preds = %90, %85
  %94 = phi i32 [ %92, %90 ], [ %88, %85 ]
  %95 = getelementptr inbounds i8, ptr %0, i64 28
  %96 = load i32, ptr %95, align 4, !tbaa !18
  %97 = icmp slt i32 %96, 0
  br i1 %97, label %98, label %101

98:                                               ; preds = %93
  %99 = icmp ne i32 %86, 0
  %100 = zext i1 %99 to i32
  store i32 %100, ptr %95, align 4, !tbaa !18
  br label %101

101:                                              ; preds = %98, %93
  %102 = phi i32 [ %100, %98 ], [ %96, %93 ]
  %103 = getelementptr inbounds i8, ptr %0, i64 32
  %104 = load i32, ptr %103, align 8, !tbaa !19
  %105 = icmp slt i32 %104, 0
  br i1 %105, label %106, label %107

106:                                              ; preds = %101
  store i32 4, ptr %103, align 8, !tbaa !19
  br label %107

107:                                              ; preds = %106, %101
  %108 = getelementptr inbounds i8, ptr %0, i64 36
  %109 = load i32, ptr %108, align 4, !tbaa !20
  %110 = icmp eq i32 %109, 0
  br i1 %110, label %111, label %116

111:                                              ; preds = %107
  %112 = lshr i32 %94, 1
  %113 = add nuw nsw i32 %112, 16
  %.not49 = icmp eq i32 %102, 0
  %114 = zext i1 %.not49 to i32
  %115 = lshr i32 %113, %114
  store i32 %115, ptr %108, align 4, !tbaa !20
  br label %116

116:                                              ; preds = %111, %107
  %117 = getelementptr inbounds i8, ptr %0, i64 44
  %118 = load i32, ptr %117, align 4, !tbaa !21
  %119 = icmp slt i32 %118, 0
  br i1 %119, label %120, label %121

120:                                              ; preds = %116
  store i32 1, ptr %117, align 4, !tbaa !21
  br label %121

121:                                              ; preds = %120, %116
  ret void
}

attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn 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" }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTSN3plz1c14_CLzmaEncPropsE", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !10, i64 48}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"long long", !8, i64 0}
!11 = !{!6, !7, i64 4}
!12 = !{!6, !10, i64 48}
!13 = !{!6, !7, i64 8}
!14 = !{!6, !7, i64 12}
!15 = !{!6, !7, i64 16}
!16 = !{!6, !7, i64 20}
!17 = !{!6, !7, i64 24}
!18 = !{!6, !7, i64 28}
!19 = !{!6, !7, i64 32}
!20 = !{!6, !7, i64 36}
!21 = !{!6, !7, i64 44}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass