; LLVM IR from intel/intel-ipsec-mb :: lib/x86_64 (ooo_mgr_reset)

; 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.MB_MGR_SNOW3G_OOO = type { %struct.SNOW3G_ARGS, [16 x i32], [16 x ptr], [16 x i32], i64, i64, i64, i64, [128 x i32], i64, [24 x i8] }
%struct.SNOW3G_ARGS = type { [16 x ptr], [16 x ptr], [16 x ptr], [16 x ptr], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i32], [16 x i64], [16 x 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 nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

; 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 hidden void @ooo_mgr_snow3g_reset(ptr noundef %0, i32 noundef %1) #2 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #3
  %6 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %6, ptr %5, align 8, !tbaa !5
  %7 = load ptr, ptr %5, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 64 %7, i8 0, i64 2784, i1 false)
  %8 = load ptr, ptr %5, align 8, !tbaa !5
  %9 = getelementptr inbounds %struct.MB_MGR_SNOW3G_OOO, ptr %8, i32 0, i32 1
  %10 = getelementptr inbounds [16 x i32], ptr %9, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 64 %10, i8 -1, i64 64, i1 false)
  %11 = load i32, ptr %4, align 4, !tbaa !9
  %12 = icmp eq i32 %11, 4
  br i1 %12, label %13, label %28

13:                                               ; preds = %2
  %14 = load ptr, ptr %5, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.MB_MGR_SNOW3G_OOO, ptr %14, i32 0, i32 1
  %16 = getelementptr inbounds [16 x i32], ptr %15, i64 0, i64 8
  store i32 -1, ptr %16, align 32, !tbaa !9
  %17 = load ptr, ptr %5, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.MB_MGR_SNOW3G_OOO, ptr %17, i32 0, i32 1
  %19 = getelementptr inbounds [16 x i32], ptr %18, i64 0, i64 9
  store i32 -1, ptr %19, align 4, !tbaa !9
  %20 = load ptr, ptr %5, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.MB_MGR_SNOW3G_OOO, ptr %20, i32 0, i32 1
  %22 = getelementptr inbounds [16 x i32], ptr %21, i64 0, i64 10
  store i32 -1, ptr %22, align 8, !tbaa !9
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.MB_MGR_SNOW3G_OOO, ptr %23, i32 0, i32 1
  %25 = getelementptr inbounds [16 x i32], ptr %24, i64 0, i64 11
  store i32 -1, ptr %25, align 4, !tbaa !9
  %26 = load ptr, ptr %5, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.MB_MGR_SNOW3G_OOO, ptr %26, i32 0, i32 5
  store i64 12816, ptr %27, align 8, !tbaa !11
  br label %35

28:                                               ; preds = %2
  %29 = load i32, ptr %4, align 4, !tbaa !9
  %30 = icmp eq i32 %29, 16
  br i1 %30, label %31, label %34

31:                                               ; preds = %28
  %32 = load ptr, ptr %5, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.MB_MGR_SNOW3G_OOO, ptr %32, i32 0, i32 5
  store i64 -81985529216486896, ptr %33, align 8, !tbaa !11
  br label %34

34:                                               ; preds = %31, %28
  br label %35

35:                                               ; preds = %34, %13
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #3
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !14, i64 2248}
!12 = !{!"", !13, i64 0, !7, i64 1984, !7, i64 2048, !7, i64 2176, !14, i64 2240, !14, i64 2248, !14, i64 2256, !14, i64 2264, !7, i64 2272, !14, i64 2784}
!13 = !{!"", !7, i64 0, !7, i64 128, !7, i64 256, !7, i64 384, !7, i64 512, !7, i64 576, !7, i64 640, !7, i64 704, !7, i64 768, !7, i64 832, !7, i64 896, !7, i64 960, !7, i64 1024, !7, i64 1088, !7, i64 1152, !7, i64 1216, !7, i64 1280, !7, i64 1344, !7, i64 1408, !7, i64 1472, !7, i64 1536, !7, i64 1600, !7, i64 1664, !7, i64 1728, !7, i64 1856}
!14 = !{!"long", !7, i64 0}


; 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 nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #0

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: write) uwtable
define hidden void @ooo_mgr_snow3g_reset(ptr nocapture noundef writeonly %0, i32 noundef %1) local_unnamed_addr #1 {
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 64 dereferenceable(2784) %0, i8 0, i64 2784, i1 false)
  %3 = getelementptr inbounds i8, ptr %0, i64 1984
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 64 dereferenceable(64) %3, i8 -1, i64 64, i1 false)
  switch i32 %1, label %9 [
    i32 4, label %4
    i32 16, label %7
  ]

4:                                                ; preds = %2
  %5 = getelementptr inbounds i8, ptr %0, i64 2016
  %6 = getelementptr inbounds i8, ptr %0, i64 2248
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 32 dereferenceable(16) %5, i8 -1, i64 16, i1 false)
  store i64 12816, ptr %6, align 8, !tbaa !5
  br label %9

7:                                                ; preds = %2
  %8 = getelementptr inbounds i8, ptr %0, i64 2248
  store i64 -81985529216486896, ptr %8, align 8, !tbaa !5
  br label %9

9:                                                ; preds = %2, %7, %4
  ret void
}

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: write) 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, !10, i64 2248}
!6 = !{!"", !7, i64 0, !8, i64 1984, !8, i64 2048, !8, i64 2176, !10, i64 2240, !10, i64 2248, !10, i64 2256, !10, i64 2264, !8, i64 2272, !10, i64 2784}
!7 = !{!"", !8, i64 0, !8, i64 128, !8, i64 256, !8, i64 384, !8, i64 512, !8, i64 576, !8, i64 640, !8, i64 704, !8, i64 768, !8, i64 832, !8, i64 896, !8, i64 960, !8, i64 1024, !8, i64 1088, !8, i64 1152, !8, i64 1216, !8, i64 1280, !8, i64 1344, !8, i64 1408, !8, i64 1472, !8, i64 1536, !8, i64 1600, !8, i64 1664, !8, i64 1728, !8, i64 1856}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,MemCpyOptPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass