; LLVM IR from ARM-software/Arm-2D :: Helper/Source/arm_2d_helper_list.ll_ (arm_2d_list_core_init)

; 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.arm_2d_helper_pi_slider_cfg_t = type { i32, float, float }
%struct.__arm_2d_list_core_cfg_t = type { %struct.arm_2d_size_t, ptr, %union.anon, ptr, ptr, ptr, i32, ptr, i16, i16, i16, i16, ptr }
%struct.arm_2d_size_t = type { i16, i16 }
%union.anon = type { ptr }
%struct.__arm_2d_list_core_t = type { %struct.anon, %struct.anon.0, %struct.anon.22 }
%struct.anon = type { %struct.__arm_2d_list_core_cfg_t }
%struct.anon.0 = type { %struct.anon.1, %struct.anon.19 }
%struct.anon.1 = type { %struct.arm_2d_tile_t, %struct.arm_2d_tile_t, %struct.__arm_2d_list_work_area_t, i8, %union.anon.17 }
%struct.arm_2d_tile_t = type { %union.anon.2, %union.anon.13, %union.anon.16 }
%union.anon.2 = type { %struct.anon.3 }
%struct.anon.3 = type { i8, %union.arm_2d_color_info_t, %union.anon.6 }
%union.arm_2d_color_info_t = type { %struct.anon.4 }
%struct.anon.4 = type { i8 }
%union.anon.6 = type { i16 }
%union.anon.13 = type { %struct.arm_2d_region_t }
%struct.arm_2d_region_t = type { %union.anon.14, %union.anon.15 }
%union.anon.14 = type { %struct.arm_2d_location_t }
%struct.arm_2d_location_t = type { i16, i16 }
%union.anon.15 = type { %struct.arm_2d_size_t }
%union.anon.16 = type { ptr }
%struct.__arm_2d_list_work_area_t = type { ptr, %struct.arm_2d_region_t, %struct.arm_2d_list_item_param_t, i32 }
%struct.arm_2d_list_item_param_t = type { i8, i8, i16 }
%union.anon.17 = type { %struct.anon.18 }
%struct.anon.18 = type { i16 }
%struct.anon.19 = type { %struct.arm_2d_tile_t, i64, i64, %struct.arm_2d_helper_pi_slider_t, %struct.anon.20, i16, i8, i8, %struct.anon.21 }
%struct.arm_2d_helper_pi_slider_t = type { [40 x i8] }
%struct.anon.20 = type { i32, i32, i32, %struct.arm_2d_region_t }
%struct.anon.21 = type { i16, i32 }
%struct.anon.22 = type { i8, i8, i16, i32, %union.anon.23 }
%union.anon.23 = type { %struct.anon.24 }
%struct.anon.24 = type { i16, i16, i16, i16 }

@.str = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [88 x i8], align 1
@__PRETTY_FUNCTION__.__arm_2d_list_core_init = external hidden unnamed_addr constant [89 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@c_tDefaultPICFG = external hidden constant %struct.arm_2d_helper_pi_slider_cfg_t, align 4

; Function Attrs: nounwind uwtable
define dso_local i32 @__arm_2d_list_core_init(ptr noundef nonnull %0, ptr noundef nonnull %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %5 = load ptr, ptr %3, align 8, !tbaa !5
  %6 = icmp ne ptr null, %5
  br i1 %6, label %7, label %8

7:                                                ; preds = %2
  br label %9

8:                                                ; preds = %2
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 122, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_list_core_init) #5
  unreachable

9:                                                ; preds = %7
  %10 = load ptr, ptr %4, align 8, !tbaa !5
  %11 = icmp ne ptr null, %10
  br i1 %11, label %12, label %13

12:                                               ; preds = %9
  br label %14

13:                                               ; preds = %9
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 123, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_list_core_init) #5
  unreachable

14:                                               ; preds = %12
  %15 = load ptr, ptr %4, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %15, i32 0, i32 2
  %17 = load ptr, ptr %16, align 8, !tbaa !9
  %18 = icmp ne ptr null, %17
  br i1 %18, label %19, label %20

19:                                               ; preds = %14
  br label %21

20:                                               ; preds = %14
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 124, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_list_core_init) #5
  unreachable

21:                                               ; preds = %19
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %22, i32 0, i32 1
  %24 = load ptr, ptr %23, align 8, !tbaa !10
  %25 = icmp ne ptr null, %24
  br i1 %25, label %26, label %27

26:                                               ; preds = %21
  br label %28

27:                                               ; preds = %21
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 125, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_list_core_init) #5
  unreachable

28:                                               ; preds = %26
  %29 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %29, i8 0, i64 288, i1 false)
  %30 = load ptr, ptr %3, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %30, i32 0, i32 0
  %32 = getelementptr inbounds %struct.anon, ptr %31, i32 0, i32 0
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 8 %33, i64 80, i1 false), !tbaa.struct !15
  %34 = load ptr, ptr %3, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %34, i32 0, i32 0
  %36 = getelementptr inbounds %struct.anon, ptr %35, i32 0, i32 0
  %37 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %36, i32 0, i32 10
  %38 = load i16, ptr %37, align 4, !tbaa !18
  %39 = icmp ne i16 %38, 0
  br i1 %39, label %40, label %52

40:                                               ; preds = %28
  %41 = load ptr, ptr %3, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %41, i32 0, i32 0
  %43 = getelementptr inbounds %struct.anon, ptr %42, i32 0, i32 0
  %44 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %43, i32 0, i32 10
  %45 = load i16, ptr %44, align 4, !tbaa !18
  %46 = zext i16 %45 to i32
  %47 = call i64 @arm_2d_helper_convert_ms_to_ticks(i32 noundef %46)
  %48 = load ptr, ptr %3, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %48, i32 0, i32 1
  %50 = getelementptr inbounds %struct.anon.0, ptr %49, i32 0, i32 1
  %51 = getelementptr inbounds %struct.anon.19, ptr %50, i32 0, i32 1
  store i64 %47, ptr %51, align 8, !tbaa !34
  br label %58

52:                                               ; preds = %28
  %53 = call i64 @arm_2d_helper_convert_ms_to_ticks(i32 noundef 500)
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %54, i32 0, i32 1
  %56 = getelementptr inbounds %struct.anon.0, ptr %55, i32 0, i32 1
  %57 = getelementptr inbounds %struct.anon.19, ptr %56, i32 0, i32 1
  store i64 %53, ptr %57, align 8, !tbaa !34
  br label %58

58:                                               ; preds = %52, %40
  %59 = load ptr, ptr %3, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %59, i32 0, i32 0
  %61 = getelementptr inbounds %struct.anon, ptr %60, i32 0, i32 0
  %62 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %61, i32 0, i32 8
  %63 = load i16, ptr %62, align 8, !tbaa !35
  %64 = zext i16 %63 to i64
  %65 = icmp ult i64 %64, 56
  br i1 %65, label %66, label %71

66:                                               ; preds = %58
  %67 = load ptr, ptr %3, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %67, i32 0, i32 0
  %69 = getelementptr inbounds %struct.anon, ptr %68, i32 0, i32 0
  %70 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %69, i32 0, i32 8
  store i16 56, ptr %70, align 8, !tbaa !35
  br label %71

71:                                               ; preds = %66, %58
  %72 = load ptr, ptr %3, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %72, i32 0, i32 0
  %74 = getelementptr inbounds %struct.anon, ptr %73, i32 0, i32 0
  %75 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %74, i32 0, i32 11
  %76 = load i16, ptr %75, align 2
  %77 = lshr i16 %76, 2
  %78 = and i16 %77, 1
  %79 = icmp ne i16 %78, 0
  br i1 %79, label %80, label %105

80:                                               ; preds = %71
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %81, i32 0, i32 0
  %83 = getelementptr inbounds %struct.anon, ptr %82, i32 0, i32 0
  %84 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %83, i32 0, i32 12
  %85 = load ptr, ptr %84, align 8, !tbaa !36
  %86 = icmp eq ptr null, %85
  br i1 %86, label %87, label %93

87:                                               ; preds = %80
  %88 = load ptr, ptr %3, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %88, i32 0, i32 1
  %90 = getelementptr inbounds %struct.anon.0, ptr %89, i32 0, i32 1
  %91 = getelementptr inbounds %struct.anon.19, ptr %90, i32 0, i32 3
  %92 = call ptr @arm_2d_helper_pi_slider_init(ptr noundef %91, ptr noundef @c_tDefaultPICFG, i16 noundef signext 0)
  br label %104

93:                                               ; preds = %80
  %94 = load ptr, ptr %3, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %94, i32 0, i32 1
  %96 = getelementptr inbounds %struct.anon.0, ptr %95, i32 0, i32 1
  %97 = getelementptr inbounds %struct.anon.19, ptr %96, i32 0, i32 3
  %98 = load ptr, ptr %3, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %98, i32 0, i32 0
  %100 = getelementptr inbounds %struct.anon, ptr %99, i32 0, i32 0
  %101 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %100, i32 0, i32 12
  %102 = load ptr, ptr %101, align 8, !tbaa !36
  %103 = call ptr @arm_2d_helper_pi_slider_init(ptr noundef %97, ptr noundef %102, i16 noundef signext 0)
  br label %104

104:                                              ; preds = %93, %87
  br label %105

105:                                              ; preds = %104, %71
  %106 = load ptr, ptr %3, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %106, i32 0, i32 2
  %108 = getelementptr inbounds %struct.anon.22, ptr %107, i32 0, i32 1
  store i8 1, ptr %108, align 1, !tbaa !37
  %109 = load ptr, ptr %3, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %109, i32 0, i32 1
  %111 = getelementptr inbounds %struct.anon.0, ptr %110, i32 0, i32 0
  %112 = getelementptr inbounds %struct.anon.1, ptr %111, i32 0, i32 3
  %113 = load i8, ptr %112, align 8
  %114 = and i8 %113, -2
  %115 = or i8 %114, 0
  store i8 %115, ptr %112, align 8
  ret i32 0
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare i64 @arm_2d_helper_convert_ms_to_ticks(i32 noundef) #4

declare ptr @arm_2d_helper_pi_slider_init(ptr noundef, ptr noundef, i16 noundef signext) #4

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 = { noreturn 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 #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { "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 #5 = { noreturn 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 = !{!7, !7, i64 0}
!10 = !{!11, !6, i64 8}
!11 = !{!"__arm_2d_list_core_cfg_t", !12, i64 0, !6, i64 8, !7, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !14, i64 48, !6, i64 56, !13, i64 64, !13, i64 66, !13, i64 68, !13, i64 70, !13, i64 70, !13, i64 70, !6, i64 72}
!12 = !{!"arm_2d_size_t", !13, i64 0, !13, i64 2}
!13 = !{!"short", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{i64 0, i64 2, !16, i64 2, i64 2, !16, i64 8, i64 8, !5, i64 16, i64 8, !9, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 4, !17, i64 56, i64 8, !5, i64 64, i64 2, !16, i64 66, i64 2, !16, i64 68, i64 2, !16, i64 70, i64 2, !9, i64 72, i64 8, !5}
!16 = !{!13, !13, i64 0}
!17 = !{!14, !14, i64 0}
!18 = !{!19, !13, i64 68}
!19 = !{!"__arm_2d_list_core_t", !20, i64 0, !21, i64 80, !32, i64 272}
!20 = !{!"", !11, i64 0}
!21 = !{!"", !22, i64 0, !27, i64 80}
!22 = !{!"", !23, i64 0, !23, i64 24, !24, i64 48, !7, i64 72, !7, i64 74}
!23 = !{!"arm_2d_tile_t", !7, i64 0, !7, i64 4, !7, i64 16}
!24 = !{!"__arm_2d_list_work_area_t", !6, i64 0, !25, i64 8, !26, i64 16, !14, i64 20}
!25 = !{!"arm_2d_region_t", !7, i64 0, !7, i64 4}
!26 = !{!"arm_2d_list_item_param_t", !7, i64 0, !7, i64 0, !7, i64 1, !13, i64 2}
!27 = !{!"", !23, i64 0, !28, i64 24, !28, i64 32, !29, i64 40, !30, i64 80, !13, i64 100, !7, i64 102, !7, i64 103, !7, i64 103, !7, i64 103, !31, i64 104}
!28 = !{!"long", !7, i64 0}
!29 = !{!"arm_2d_helper_pi_slider_t", !7, i64 0}
!30 = !{!"", !14, i64 0, !14, i64 4, !14, i64 8, !25, i64 12}
!31 = !{!"", !13, i64 0, !14, i64 4}
!32 = !{!"", !7, i64 0, !33, i64 1, !13, i64 2, !14, i64 4, !7, i64 8}
!33 = !{!"_Bool", !7, i64 0}
!34 = !{!19, !28, i64 184}
!35 = !{!19, !13, i64 64}
!36 = !{!19, !6, i64 72}
!37 = !{!19, !33, i64 273}


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

%struct.arm_2d_helper_pi_slider_cfg_t = type { i32, float, float }

@.str.1 = external hidden unnamed_addr constant [88 x i8], align 1
@__PRETTY_FUNCTION__.__arm_2d_list_core_init = external hidden unnamed_addr constant [89 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@c_tDefaultPICFG = external hidden constant %struct.arm_2d_helper_pi_slider_cfg_t, align 4

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @__arm_2d_list_core_init(ptr noundef nonnull %0, ptr nocapture noundef nonnull readonly %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %1, i64 16
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %.not = icmp eq ptr %4, null
  br i1 %.not, label %5, label %6

5:                                                ; preds = %2
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 124, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_list_core_init) #5
  unreachable

6:                                                ; preds = %2
  %7 = getelementptr inbounds i8, ptr %1, i64 8
  %8 = load ptr, ptr %7, align 8, !tbaa !8
  %.not21 = icmp eq ptr %8, null
  br i1 %.not21, label %9, label %10

9:                                                ; preds = %6
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 125, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_list_core_init) #5
  unreachable

10:                                               ; preds = %6
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(288) %0, i8 0, i64 288, i1 false)
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %0, ptr noundef nonnull align 8 dereferenceable(80) %1, i64 80, i1 false), !tbaa.struct !14
  %11 = getelementptr inbounds i8, ptr %0, i64 68
  %12 = load i16, ptr %11, align 4, !tbaa !18
  %.not22 = icmp eq i16 %12, 0
  %narrow = select i1 %.not22, i16 500, i16 %12
  %.sink24 = zext i16 %narrow to i32
  %13 = tail call i64 @arm_2d_helper_convert_ms_to_ticks(i32 noundef %.sink24) #6
  %14 = getelementptr inbounds i8, ptr %0, i64 184
  store i64 %13, ptr %14, align 8
  %15 = getelementptr inbounds i8, ptr %0, i64 64
  %16 = load i16, ptr %15, align 8, !tbaa !34
  %17 = icmp ult i16 %16, 56
  br i1 %17, label %18, label %19

18:                                               ; preds = %10
  store i16 56, ptr %15, align 8, !tbaa !34
  br label %19

19:                                               ; preds = %18, %10
  %20 = getelementptr inbounds i8, ptr %0, i64 70
  %21 = load i16, ptr %20, align 2
  %22 = and i16 %21, 4
  %.not23 = icmp eq i16 %22, 0
  br i1 %.not23, label %28, label %.sink.split

.sink.split:                                      ; preds = %19
  %23 = getelementptr inbounds i8, ptr %0, i64 72
  %24 = load ptr, ptr %23, align 8, !tbaa !35
  %25 = icmp eq ptr %24, null
  %26 = getelementptr inbounds i8, ptr %0, i64 200
  %c_tDefaultPICFG. = select i1 %25, ptr @c_tDefaultPICFG, ptr %24
  %27 = tail call ptr @arm_2d_helper_pi_slider_init(ptr noundef nonnull %26, ptr noundef nonnull %c_tDefaultPICFG., i16 noundef signext 0) #6
  br label %28

28:                                               ; preds = %.sink.split, %19
  %29 = getelementptr inbounds i8, ptr %0, i64 273
  store i8 1, ptr %29, align 1, !tbaa !36
  %30 = getelementptr inbounds i8, ptr %0, i64 152
  %31 = load i8, ptr %30, align 8
  %32 = and i8 %31, -2
  store i8 %32, ptr %30, align 8
  ret i32 0
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare i64 @arm_2d_helper_convert_ms_to_ticks(i32 noundef) local_unnamed_addr #4

declare ptr @arm_2d_helper_pi_slider_init(ptr noundef, ptr noundef, i16 noundef signext) local_unnamed_addr #4

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 = { noreturn 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { "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 #5 = { noreturn nounwind }
attributes #6 = { 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 = !{!9, !12, i64 8}
!9 = !{!"__arm_2d_list_core_cfg_t", !10, i64 0, !12, i64 8, !6, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !13, i64 48, !12, i64 56, !11, i64 64, !11, i64 66, !11, i64 68, !11, i64 70, !11, i64 70, !11, i64 70, !12, i64 72}
!10 = !{!"arm_2d_size_t", !11, i64 0, !11, i64 2}
!11 = !{!"short", !6, i64 0}
!12 = !{!"any pointer", !6, i64 0}
!13 = !{!"int", !6, i64 0}
!14 = !{i64 0, i64 2, !15, i64 2, i64 2, !15, i64 8, i64 8, !16, i64 16, i64 8, !5, i64 24, i64 8, !16, i64 32, i64 8, !16, i64 40, i64 8, !16, i64 48, i64 4, !17, i64 56, i64 8, !16, i64 64, i64 2, !15, i64 66, i64 2, !15, i64 68, i64 2, !15, i64 70, i64 2, !5, i64 72, i64 8, !16}
!15 = !{!11, !11, i64 0}
!16 = !{!12, !12, i64 0}
!17 = !{!13, !13, i64 0}
!18 = !{!19, !11, i64 68}
!19 = !{!"__arm_2d_list_core_t", !20, i64 0, !21, i64 80, !32, i64 272}
!20 = !{!"", !9, i64 0}
!21 = !{!"", !22, i64 0, !27, i64 80}
!22 = !{!"", !23, i64 0, !23, i64 24, !24, i64 48, !6, i64 72, !6, i64 74}
!23 = !{!"arm_2d_tile_t", !6, i64 0, !6, i64 4, !6, i64 16}
!24 = !{!"__arm_2d_list_work_area_t", !12, i64 0, !25, i64 8, !26, i64 16, !13, i64 20}
!25 = !{!"arm_2d_region_t", !6, i64 0, !6, i64 4}
!26 = !{!"arm_2d_list_item_param_t", !6, i64 0, !6, i64 0, !6, i64 1, !11, i64 2}
!27 = !{!"", !23, i64 0, !28, i64 24, !28, i64 32, !29, i64 40, !30, i64 80, !11, i64 100, !6, i64 102, !6, i64 103, !6, i64 103, !6, i64 103, !31, i64 104}
!28 = !{!"long", !6, i64 0}
!29 = !{!"arm_2d_helper_pi_slider_t", !6, i64 0}
!30 = !{!"", !13, i64 0, !13, i64 4, !13, i64 8, !25, i64 12}
!31 = !{!"", !11, i64 0, !13, i64 4}
!32 = !{!"", !6, i64 0, !33, i64 1, !11, i64 2, !13, i64 4, !6, i64 8}
!33 = !{!"_Bool", !6, i64 0}
!34 = !{!19, !11, i64 64}
!35 = !{!19, !12, i64 72}
!36 = !{!19, !33, i64 273}


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