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

; 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_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 }
%struct.arm_2d_size_t = type { i16, i16 }
%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.__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 }
%union.anon = type { ptr }
%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 }
%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 }
%struct.arm_2d_i_list_region_calculator_t = type { ptr, ptr, i32 }
%struct.arm_2d_list_item_t = type { %struct.anon.25, i16, %union.anon.26, ptr, ptr, %struct.anon.28, %struct.arm_2d_margin_t, %struct.arm_2d_size_t, i64 }
%struct.anon.25 = type { ptr }
%union.anon.26 = type { i16 }
%struct.anon.28 = type { i8, i8 }
%struct.arm_2d_margin_t = type { i8, i8, i8, i8 }

@.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_show = external hidden unnamed_addr constant [116 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 x i8], align 1

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #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 nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @__arm_2d_list_core_show(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef %2, i1 noundef zeroext %3) #3 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca %struct.arm_2d_region_t, align 2
  %13 = alloca %struct.arm_2d_region_t, align 2
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca %struct.arm_2d_region_t, align 2
  %19 = alloca ptr, align 8
  %20 = alloca %struct.arm_2d_region_t, align 2
  %21 = alloca ptr, align 8
  %22 = alloca %struct.arm_2d_size_t, align 2
  %23 = alloca i16, align 2
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca i32, align 4
  %27 = alloca i8, align 1
  %28 = alloca i16, align 2
  %29 = alloca ptr, align 8
  %30 = alloca i16, align 2
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  %33 = zext i1 %3 to i8
  store i8 %33, ptr %9, align 1, !tbaa !9
  %34 = load ptr, ptr %6, align 8, !tbaa !5
  %35 = icmp ne ptr null, %34
  br i1 %35, label %36, label %37

36:                                               ; preds = %4
  br label %38

37:                                               ; preds = %4
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 176, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_list_core_show) #6
  unreachable

38:                                               ; preds = %36
  %39 = load ptr, ptr %7, align 8, !tbaa !5
  %40 = icmp ne ptr null, %39
  br i1 %40, label %41, label %42

41:                                               ; preds = %38
  br label %43

42:                                               ; preds = %38
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 177, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_list_core_show) #6
  unreachable

43:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %44 = load ptr, ptr %8, align 8, !tbaa !5
  %45 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %46 = trunc i8 %45 to i1
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %47, i32 0, i32 1
  %49 = getelementptr inbounds %struct.anon.0, ptr %48, i32 0, i32 1
  %50 = getelementptr inbounds %struct.anon.19, ptr %49, i32 0, i32 6
  store ptr %50, ptr %11, align 8, !tbaa !5
  %51 = load ptr, ptr %6, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %51, i32 0, i32 1
  %53 = getelementptr inbounds %struct.anon.0, ptr %52, i32 0, i32 1
  %54 = getelementptr inbounds %struct.anon.19, ptr %53, i32 0, i32 6
  %55 = load i8, ptr %54, align 2, !tbaa !13
  %56 = zext i8 %55 to i32
  switch i32 %56, label %1185 [
    i32 0, label %57
    i32 1, label %520
    i32 2, label %561
    i32 3, label %568
    i32 4, label %884
    i32 5, label %936
    i32 6, label %943
    i32 7, label %950
    i32 8, label %998
    i32 9, label %1005
    i32 10, label %1048
    i32 11, label %1089
  ]

57:                                               ; preds = %43
  br label %58

58:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  call void @llvm.memset.p0.i64(ptr align 2 %12, i8 0, i64 8, i1 false)
  %59 = load ptr, ptr %8, align 8, !tbaa !5
  %60 = icmp eq ptr null, %59
  br i1 %60, label %61, label %66

61:                                               ; preds = %58
  %62 = getelementptr inbounds %struct.arm_2d_region_t, ptr %12, i32 0, i32 1
  %63 = load ptr, ptr %7, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %63, i32 0, i32 1
  %65 = getelementptr inbounds %struct.arm_2d_region_t, ptr %64, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %62, ptr align 4 %65, i64 4, i1 false), !tbaa.struct !32
  store ptr %12, ptr %8, align 8, !tbaa !5
  br label %66

66:                                               ; preds = %61, %58
  %67 = load ptr, ptr %6, 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 0
  %71 = getelementptr inbounds %struct.arm_2d_size_t, ptr %70, i32 0, i32 0
  %72 = load i16, ptr %71, align 8, !tbaa !34
  %73 = sext i16 %72 to i32
  %74 = icmp sle i32 %73, 0
  br i1 %74, label %75, label %85

75:                                               ; preds = %66
  %76 = load ptr, ptr %8, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.arm_2d_region_t, ptr %76, i32 0, i32 1
  %78 = getelementptr inbounds %struct.arm_2d_size_t, ptr %77, i32 0, i32 0
  %79 = load i16, ptr %78, align 2, !tbaa !35
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %80, i32 0, i32 0
  %82 = getelementptr inbounds %struct.anon, ptr %81, i32 0, i32 0
  %83 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %82, i32 0, i32 0
  %84 = getelementptr inbounds %struct.arm_2d_size_t, ptr %83, i32 0, i32 0
  store i16 %79, ptr %84, align 8, !tbaa !34
  br label %85

85:                                               ; preds = %75, %66
  %86 = load ptr, ptr %6, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %86, i32 0, i32 0
  %88 = getelementptr inbounds %struct.anon, ptr %87, i32 0, i32 0
  %89 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %88, i32 0, i32 0
  %90 = getelementptr inbounds %struct.arm_2d_size_t, ptr %89, i32 0, i32 1
  %91 = load i16, ptr %90, align 2, !tbaa !36
  %92 = sext i16 %91 to i32
  %93 = icmp sle i32 %92, 0
  br i1 %93, label %94, label %104

94:                                               ; preds = %85
  %95 = load ptr, ptr %8, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.arm_2d_region_t, ptr %95, i32 0, i32 1
  %97 = getelementptr inbounds %struct.arm_2d_size_t, ptr %96, i32 0, i32 1
  %98 = load i16, ptr %97, align 2, !tbaa !35
  %99 = load ptr, ptr %6, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %99, i32 0, i32 0
  %101 = getelementptr inbounds %struct.anon, ptr %100, i32 0, i32 0
  %102 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %101, i32 0, i32 0
  %103 = getelementptr inbounds %struct.arm_2d_size_t, ptr %102, i32 0, i32 1
  store i16 %98, ptr %103, align 2, !tbaa !36
  br label %104

104:                                              ; preds = %94, %85
  %105 = load ptr, ptr %7, align 8, !tbaa !5
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  %107 = load ptr, ptr %6, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %107, i32 0, i32 1
  %109 = getelementptr inbounds %struct.anon.0, ptr %108, i32 0, i32 0
  %110 = getelementptr inbounds %struct.anon.1, ptr %109, i32 0, i32 0
  %111 = call ptr @arm_2d_tile_generate_child(ptr noundef %105, ptr noundef %106, ptr noundef %110, i1 noundef zeroext false)
  %112 = icmp eq ptr null, %111
  br i1 %112, label %113, label %114

113:                                              ; preds = %104
  store i32 5, ptr %15, align 4
  br label %480

114:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  call void @llvm.memset.p0.i64(ptr align 2 %13, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  store ptr null, ptr %14, align 8, !tbaa !5
  br label %115

115:                                              ; preds = %233, %114
  %116 = load ptr, ptr %14, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.arm_2d_region_t, ptr %116, i32 1
  store ptr %117, ptr %14, align 8, !tbaa !5
  %118 = icmp eq ptr %116, null
  br i1 %118, label %119, label %127

119:                                              ; preds = %115
  %120 = getelementptr inbounds %struct.arm_2d_region_t, ptr %13, i32 0, i32 1
  %121 = load ptr, ptr %6, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %121, i32 0, i32 1
  %123 = getelementptr inbounds %struct.anon.0, ptr %122, i32 0, i32 0
  %124 = getelementptr inbounds %struct.anon.1, ptr %123, i32 0, i32 0
  %125 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %124, i32 0, i32 1
  %126 = getelementptr inbounds %struct.arm_2d_region_t, ptr %125, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %120, ptr align 4 %126, i64 4, i1 false), !tbaa.struct !32
  br label %128

127:                                              ; preds = %115
  br label %128

128:                                              ; preds = %127, %119
  %129 = phi i32 [ 1, %119 ], [ 0, %127 ]
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %132, label %131

131:                                              ; preds = %128
  store i32 6, ptr %15, align 4
  br label %238

132:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %133 = load ptr, ptr %6, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %133, i32 0, i32 1
  %135 = getelementptr inbounds %struct.anon.0, ptr %134, i32 0, i32 0
  %136 = getelementptr inbounds %struct.anon.1, ptr %135, i32 0, i32 0
  store ptr %136, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  store ptr null, ptr %17, align 8, !tbaa !5
  br label %137

137:                                              ; preds = %228, %132
  %138 = load ptr, ptr %17, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %138, i32 1
  store ptr %139, ptr %17, align 8, !tbaa !5
  %140 = icmp eq ptr %138, null
  br i1 %140, label %142, label %141

141:                                              ; preds = %137
  store i32 9, ptr %15, align 4
  br label %230

142:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %18, ptr align 2 %13, i64 8, i1 false), !tbaa.struct !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  store ptr null, ptr %19, align 8, !tbaa !5
  br label %143

143:                                              ; preds = %224, %142
  %144 = load ptr, ptr %19, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.arm_2d_region_t, ptr %144, i32 1
  store ptr %145, ptr %19, align 8, !tbaa !5
  %146 = icmp eq ptr %144, null
  br i1 %146, label %148, label %147

147:                                              ; preds = %143
  store i32 12, ptr %15, align 4
  br label %225

148:                                              ; preds = %143
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  store ptr null, ptr %21, align 8, !tbaa !5
  br label %149

149:                                              ; preds = %217, %148
  %150 = load ptr, ptr %21, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.arm_2d_region_t, ptr %150, i32 1
  store ptr %151, ptr %21, align 8, !tbaa !5
  %152 = icmp eq ptr %150, null
  br i1 %152, label %153, label %199

153:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %154 = load ptr, ptr %6, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %154, i32 0, i32 0
  %156 = getelementptr inbounds %struct.anon, ptr %155, i32 0, i32 0
  %157 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %156, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %22, ptr align 8 %157, i64 4, i1 false), !tbaa.struct !32
  %158 = getelementptr inbounds %struct.arm_2d_size_t, ptr %22, i32 0, i32 0
  %159 = load i16, ptr %158, align 2, !tbaa !38
  %160 = getelementptr inbounds %struct.arm_2d_region_t, ptr %20, i32 0, i32 1
  %161 = getelementptr inbounds %struct.arm_2d_size_t, ptr %160, i32 0, i32 0
  store i16 %159, ptr %161, align 2, !tbaa !35
  %162 = getelementptr inbounds %struct.arm_2d_size_t, ptr %22, i32 0, i32 1
  %163 = load i16, ptr %162, align 2, !tbaa !39
  %164 = getelementptr inbounds %struct.arm_2d_region_t, ptr %20, i32 0, i32 1
  %165 = getelementptr inbounds %struct.arm_2d_size_t, ptr %164, i32 0, i32 1
  store i16 %163, ptr %165, align 2, !tbaa !35
  %166 = getelementptr inbounds %struct.arm_2d_region_t, ptr %20, i32 0, i32 0
  %167 = getelementptr inbounds %struct.arm_2d_region_t, ptr %18, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %166, ptr align 2 %167, i64 4, i1 false), !tbaa.struct !32
  %168 = getelementptr inbounds %struct.arm_2d_region_t, ptr %18, i32 0, i32 1
  %169 = getelementptr inbounds %struct.arm_2d_size_t, ptr %168, i32 0, i32 0
  %170 = load i16, ptr %169, align 2, !tbaa !35
  %171 = sext i16 %170 to i32
  %172 = getelementptr inbounds %struct.arm_2d_size_t, ptr %22, i32 0, i32 0
  %173 = load i16, ptr %172, align 2, !tbaa !38
  %174 = sext i16 %173 to i32
  %175 = sub nsw i32 %171, %174
  %176 = ashr i32 %175, 1
  %177 = getelementptr inbounds %struct.arm_2d_region_t, ptr %20, i32 0, i32 0
  %178 = getelementptr inbounds %struct.arm_2d_location_t, ptr %177, i32 0, i32 0
  %179 = load i16, ptr %178, align 2, !tbaa !35
  %180 = sext i16 %179 to i32
  %181 = add nsw i32 %180, %176
  %182 = trunc i32 %181 to i16
  store i16 %182, ptr %178, align 2, !tbaa !35
  %183 = getelementptr inbounds %struct.arm_2d_region_t, ptr %18, i32 0, i32 1
  %184 = getelementptr inbounds %struct.arm_2d_size_t, ptr %183, i32 0, i32 1
  %185 = load i16, ptr %184, align 2, !tbaa !35
  %186 = sext i16 %185 to i32
  %187 = getelementptr inbounds %struct.arm_2d_size_t, ptr %22, i32 0, i32 1
  %188 = load i16, ptr %187, align 2, !tbaa !39
  %189 = sext i16 %188 to i32
  %190 = sub nsw i32 %186, %189
  %191 = ashr i32 %190, 1
  %192 = getelementptr inbounds %struct.arm_2d_region_t, ptr %20, i32 0, i32 0
  %193 = getelementptr inbounds %struct.arm_2d_location_t, ptr %192, i32 0, i32 1
  %194 = load i16, ptr %193, align 2, !tbaa !35
  %195 = sext i16 %194 to i32
  %196 = add nsw i32 %195, %191
  %197 = trunc i32 %196 to i16
  store i16 %197, ptr %193, align 2, !tbaa !35
  store i16 %197, ptr %23, align 2, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  %198 = load i16, ptr %23, align 2, !tbaa !33
  br label %200

199:                                              ; preds = %149
  br label %200

200:                                              ; preds = %199, %153
  %201 = phi i32 [ 1, %153 ], [ 0, %199 ]
  %202 = icmp ne i32 %201, 0
  br i1 %202, label %204, label %203

203:                                              ; preds = %200
  store i32 14, ptr %15, align 4
  br label %222

204:                                              ; preds = %200
  %205 = load ptr, ptr %6, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %205, i32 0, i32 1
  %207 = getelementptr inbounds %struct.anon.0, ptr %206, i32 0, i32 0
  %208 = getelementptr inbounds %struct.anon.1, ptr %207, i32 0, i32 0
  %209 = load ptr, ptr %6, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %209, i32 0, i32 1
  %211 = getelementptr inbounds %struct.anon.0, ptr %210, i32 0, i32 0
  %212 = getelementptr inbounds %struct.anon.1, ptr %211, i32 0, i32 1
  %213 = call ptr @arm_2d_tile_generate_child(ptr noundef %208, ptr noundef %20, ptr noundef %212, i1 noundef zeroext false)
  %214 = icmp eq ptr null, %213
  br i1 %214, label %215, label %216

215:                                              ; preds = %204
  store i32 5, ptr %15, align 4
  br label %222

216:                                              ; preds = %204
  br label %217

217:                                              ; preds = %216
  %218 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null)
  %219 = zext i1 %218 to i8
  store i8 %219, ptr %24, align 1, !tbaa !9
  %220 = load i8, ptr %24, align 1, !tbaa !9, !range !11, !noundef !12
  %221 = trunc i8 %220 to i1
  br label %149, !llvm.loop !40

222:                                              ; preds = %215, %203
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  %223 = load i32, ptr %15, align 4
  switch i32 %223, label %225 [
    i32 14, label %224
  ]

224:                                              ; preds = %222
  br label %143, !llvm.loop !42

225:                                              ; preds = %222, %147
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  %226 = load i32, ptr %15, align 4
  switch i32 %226, label %230 [
    i32 12, label %227
  ]

227:                                              ; preds = %225
  br label %228

228:                                              ; preds = %227
  %229 = load ptr, ptr %16, align 8, !tbaa !5
  br label %137, !llvm.loop !43

230:                                              ; preds = %225, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  %231 = load i32, ptr %15, align 4
  switch i32 %231, label %238 [
    i32 9, label %232
  ]

232:                                              ; preds = %230
  br label %233

233:                                              ; preds = %232
  %234 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null)
  %235 = zext i1 %234 to i8
  store i8 %235, ptr %25, align 1, !tbaa !9
  %236 = load i8, ptr %25, align 1, !tbaa !9, !range !11, !noundef !12
  %237 = trunc i8 %236 to i1
  br label %115, !llvm.loop !44

238:                                              ; preds = %230, %131
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  %239 = load i32, ptr %15, align 4
  switch i32 %239, label %480 [
    i32 6, label %240
  ]

240:                                              ; preds = %238
  %241 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %242 = trunc i8 %241 to i1
  br i1 %242, label %243, label %479

243:                                              ; preds = %240
  %244 = load ptr, ptr %6, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %244, i32 0, i32 1
  %246 = getelementptr inbounds %struct.anon.0, ptr %245, i32 0, i32 0
  %247 = getelementptr inbounds %struct.anon.1, ptr %246, i32 0, i32 3
  %248 = load i8, ptr %247, align 8
  %249 = and i8 %248, 1
  %250 = icmp ne i8 %249, 0
  br i1 %250, label %285, label %251

251:                                              ; preds = %243
  %252 = load ptr, ptr %6, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %252, i32 0, i32 0
  %254 = getelementptr inbounds %struct.anon, ptr %253, i32 0, i32 0
  %255 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %254, i32 0, i32 2
  %256 = load ptr, ptr %255, align 8, !tbaa !35
  %257 = getelementptr inbounds %struct.arm_2d_i_list_region_calculator_t, ptr %256, i32 0, i32 0
  %258 = load ptr, ptr %257, align 8, !tbaa !45
  %259 = icmp eq ptr null, %258
  br i1 %259, label %260, label %261

260:                                              ; preds = %251
  br label %280

261:                                              ; preds = %251
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %262, i32 0, i32 0
  %264 = getelementptr inbounds %struct.anon, ptr %263, i32 0, i32 0
  %265 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %264, i32 0, i32 2
  %266 = load ptr, ptr %265, align 8, !tbaa !35
  %267 = getelementptr inbounds %struct.arm_2d_i_list_region_calculator_t, ptr %266, i32 0, i32 0
  %268 = load ptr, ptr %267, align 8, !tbaa !45
  %269 = load ptr, ptr %6, align 8, !tbaa !5
  %270 = load ptr, ptr %6, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %270, i32 0, i32 0
  %272 = getelementptr inbounds %struct.anon, ptr %271, i32 0, i32 0
  %273 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %272, i32 0, i32 1
  %274 = load ptr, ptr %273, align 8, !tbaa !47
  %275 = load ptr, ptr %6, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %275, i32 0, i32 2
  %277 = getelementptr inbounds %struct.anon.22, ptr %276, i32 0, i32 3
  %278 = load i32, ptr %277, align 4, !tbaa !48
  %279 = call ptr %268(ptr noundef %269, ptr noundef %274, i32 noundef %278)
  br label %280

280:                                              ; preds = %261, %260
  %281 = phi ptr [ null, %260 ], [ %279, %261 ]
  %282 = load ptr, ptr %6, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %282, i32 0, i32 2
  %284 = getelementptr inbounds %struct.anon.22, ptr %283, i32 0, i32 0
  store i8 0, ptr %284, align 8, !tbaa !49
  br label %285

285:                                              ; preds = %280, %243
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %286 = load ptr, ptr %6, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %286, i32 0, i32 1
  %288 = getelementptr inbounds %struct.anon.0, ptr %287, i32 0, i32 1
  %289 = getelementptr inbounds %struct.anon.19, ptr %288, i32 0, i32 4
  %290 = getelementptr inbounds %struct.anon.20, ptr %289, i32 0, i32 0
  %291 = load i32, ptr %290, align 8, !tbaa !50
  store i32 %291, ptr %26, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #7
  store i8 0, ptr %27, align 1, !tbaa !9
  %292 = load ptr, ptr %6, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %292, i32 0, i32 1
  %294 = getelementptr inbounds %struct.anon.0, ptr %293, i32 0, i32 1
  %295 = getelementptr inbounds %struct.anon.19, ptr %294, i32 0, i32 8
  %296 = getelementptr inbounds %struct.anon.21, ptr %295, i32 0, i32 1
  %297 = load i32, ptr %296, align 4, !tbaa !52
  %298 = icmp eq i32 0, %297
  br i1 %298, label %299, label %309

299:                                              ; preds = %285
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %300, i32 0, i32 1
  %302 = getelementptr inbounds %struct.anon.0, ptr %301, i32 0, i32 1
  %303 = getelementptr inbounds %struct.anon.19, ptr %302, i32 0, i32 8
  %304 = getelementptr inbounds %struct.anon.21, ptr %303, i32 0, i32 0
  %305 = load i16, ptr %304, align 8, !tbaa !53
  %306 = sext i16 %305 to i32
  %307 = icmp ne i32 0, %306
  br i1 %307, label %308, label %309

308:                                              ; preds = %299
  store i8 1, ptr %27, align 1, !tbaa !9
  br label %414

309:                                              ; preds = %299, %285
  %310 = load ptr, ptr %6, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %310, i32 0, i32 0
  %312 = getelementptr inbounds %struct.anon, ptr %311, i32 0, i32 0
  %313 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %312, i32 0, i32 11
  %314 = load i16, ptr %313, align 2
  %315 = lshr i16 %314, 2
  %316 = and i16 %315, 1
  %317 = icmp ne i16 %316, 0
  br i1 %317, label %318, label %354

318:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 2, ptr %28) #7
  store i16 0, ptr %28, align 2, !tbaa !33
  %319 = load ptr, ptr %6, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %319, i32 0, i32 1
  %321 = getelementptr inbounds %struct.anon.0, ptr %320, i32 0, i32 1
  %322 = getelementptr inbounds %struct.anon.19, ptr %321, i32 0, i32 3
  %323 = load ptr, ptr %6, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %323, i32 0, i32 1
  %325 = getelementptr inbounds %struct.anon.0, ptr %324, i32 0, i32 1
  %326 = getelementptr inbounds %struct.anon.19, ptr %325, i32 0, i32 4
  %327 = getelementptr inbounds %struct.anon.20, ptr %326, i32 0, i32 2
  %328 = load i32, ptr %327, align 8, !tbaa !54
  %329 = trunc i32 %328 to i16
  %330 = call zeroext i1 @arm_2d_helper_pi_slider(ptr noundef %322, i16 noundef signext %329, ptr noundef %28)
  br i1 %330, label %331, label %346

331:                                              ; preds = %318
  %332 = load ptr, ptr %6, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %332, i32 0, i32 1
  %334 = getelementptr inbounds %struct.anon.0, ptr %333, i32 0, i32 1
  %335 = getelementptr inbounds %struct.anon.19, ptr %334, i32 0, i32 7
  %336 = load i8, ptr %335, align 1
  %337 = and i8 %336, -2
  %338 = or i8 %337, 0
  store i8 %338, ptr %335, align 1
  %339 = load i16, ptr %28, align 2, !tbaa !33
  %340 = sext i16 %339 to i32
  %341 = load ptr, ptr %6, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %341, i32 0, i32 1
  %343 = getelementptr inbounds %struct.anon.0, ptr %342, i32 0, i32 1
  %344 = getelementptr inbounds %struct.anon.19, ptr %343, i32 0, i32 4
  %345 = getelementptr inbounds %struct.anon.20, ptr %344, i32 0, i32 1
  store i32 %340, ptr %345, align 4, !tbaa !55
  br label %346

346:                                              ; preds = %331, %318
  %347 = load i16, ptr %28, align 2, !tbaa !33
  %348 = sext i16 %347 to i32
  %349 = load ptr, ptr %6, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %349, i32 0, i32 1
  %351 = getelementptr inbounds %struct.anon.0, ptr %350, i32 0, i32 1
  %352 = getelementptr inbounds %struct.anon.19, ptr %351, i32 0, i32 4
  %353 = getelementptr inbounds %struct.anon.20, ptr %352, i32 0, i32 0
  store i32 %348, ptr %353, align 8, !tbaa !50
  store i8 1, ptr %27, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #7
  br label %413

354:                                              ; preds = %309
  %355 = load ptr, ptr %6, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %355, i32 0, i32 1
  %357 = getelementptr inbounds %struct.anon.0, ptr %356, i32 0, i32 1
  %358 = getelementptr inbounds %struct.anon.19, ptr %357, i32 0, i32 4
  %359 = getelementptr inbounds %struct.anon.20, ptr %358, i32 0, i32 1
  %360 = load i32, ptr %359, align 4, !tbaa !55
  %361 = load ptr, ptr %6, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %361, i32 0, i32 1
  %363 = getelementptr inbounds %struct.anon.0, ptr %362, i32 0, i32 1
  %364 = getelementptr inbounds %struct.anon.19, ptr %363, i32 0, i32 4
  %365 = getelementptr inbounds %struct.anon.20, ptr %364, i32 0, i32 2
  %366 = load i32, ptr %365, align 8, !tbaa !54
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %367, i32 0, i32 1
  %369 = getelementptr inbounds %struct.anon.0, ptr %368, i32 0, i32 1
  %370 = getelementptr inbounds %struct.anon.19, ptr %369, i32 0, i32 1
  %371 = load i64, ptr %370, align 8, !tbaa !56
  %372 = load ptr, ptr %6, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %372, i32 0, i32 1
  %374 = getelementptr inbounds %struct.anon.0, ptr %373, i32 0, i32 1
  %375 = getelementptr inbounds %struct.anon.19, ptr %374, i32 0, i32 4
  %376 = getelementptr inbounds %struct.anon.20, ptr %375, i32 0, i32 0
  %377 = load ptr, ptr %6, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %377, i32 0, i32 1
  %379 = getelementptr inbounds %struct.anon.0, ptr %378, i32 0, i32 1
  %380 = getelementptr inbounds %struct.anon.19, ptr %379, i32 0, i32 2
  %381 = call zeroext i1 @__arm_2d_helper_time_liner_slider(i32 noundef %360, i32 noundef %366, i64 noundef %371, ptr noundef %376, ptr noundef %380)
  br i1 %381, label %382, label %412

382:                                              ; preds = %354
  %383 = load ptr, ptr %6, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %383, i32 0, i32 1
  %385 = getelementptr inbounds %struct.anon.0, ptr %384, i32 0, i32 1
  %386 = getelementptr inbounds %struct.anon.19, ptr %385, i32 0, i32 4
  %387 = getelementptr inbounds %struct.anon.20, ptr %386, i32 0, i32 0
  %388 = load i32, ptr %387, align 8, !tbaa !50
  %389 = load ptr, ptr %6, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %389, i32 0, i32 1
  %391 = getelementptr inbounds %struct.anon.0, ptr %390, i32 0, i32 1
  %392 = getelementptr inbounds %struct.anon.19, ptr %391, i32 0, i32 4
  %393 = getelementptr inbounds %struct.anon.20, ptr %392, i32 0, i32 2
  store i32 %388, ptr %393, align 8, !tbaa !54
  %394 = load ptr, ptr %6, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %394, i32 0, i32 1
  %396 = getelementptr inbounds %struct.anon.0, ptr %395, i32 0, i32 1
  %397 = getelementptr inbounds %struct.anon.19, ptr %396, i32 0, i32 4
  %398 = getelementptr inbounds %struct.anon.20, ptr %397, i32 0, i32 2
  %399 = load i32, ptr %398, align 8, !tbaa !54
  %400 = load ptr, ptr %6, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %400, i32 0, i32 1
  %402 = getelementptr inbounds %struct.anon.0, ptr %401, i32 0, i32 1
  %403 = getelementptr inbounds %struct.anon.19, ptr %402, i32 0, i32 4
  %404 = getelementptr inbounds %struct.anon.20, ptr %403, i32 0, i32 1
  store i32 %399, ptr %404, align 4, !tbaa !55
  %405 = load ptr, ptr %6, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %405, i32 0, i32 1
  %407 = getelementptr inbounds %struct.anon.0, ptr %406, i32 0, i32 1
  %408 = getelementptr inbounds %struct.anon.19, ptr %407, i32 0, i32 7
  %409 = load i8, ptr %408, align 1
  %410 = and i8 %409, -2
  %411 = or i8 %410, 0
  store i8 %411, ptr %408, align 1
  store i8 1, ptr %27, align 1, !tbaa !9
  br label %412

412:                                              ; preds = %382, %354
  br label %413

413:                                              ; preds = %412, %346
  br label %414

414:                                              ; preds = %413, %308
  %415 = load i8, ptr %27, align 1, !tbaa !9, !range !11, !noundef !12
  %416 = trunc i8 %415 to i1
  br i1 %416, label %417, label %461

417:                                              ; preds = %414
  %418 = load ptr, ptr %6, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %418, i32 0, i32 1
  %420 = getelementptr inbounds %struct.anon.0, ptr %419, i32 0, i32 1
  %421 = getelementptr inbounds %struct.anon.19, ptr %420, i32 0, i32 8
  %422 = getelementptr inbounds %struct.anon.21, ptr %421, i32 0, i32 0
  %423 = load i16, ptr %422, align 8, !tbaa !53
  %424 = sext i16 %423 to i32
  %425 = icmp ne i32 %424, 0
  br i1 %425, label %426, label %460

426:                                              ; preds = %417
  %427 = load ptr, ptr %6, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %427, i32 0, i32 1
  %429 = getelementptr inbounds %struct.anon.0, ptr %428, i32 0, i32 0
  %430 = getelementptr inbounds %struct.anon.1, ptr %429, i32 0, i32 3
  %431 = load i8, ptr %430, align 8
  %432 = and i8 %431, 1
  %433 = zext i8 %432 to i32
  %434 = icmp ne i32 %433, 0
  br i1 %434, label %435, label %460

435:                                              ; preds = %426
  %436 = load ptr, ptr %6, align 8, !tbaa !5
  %437 = load ptr, ptr %6, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %437, i32 0, i32 1
  %439 = getelementptr inbounds %struct.anon.0, ptr %438, i32 0, i32 1
  %440 = getelementptr inbounds %struct.anon.19, ptr %439, i32 0, i32 8
  %441 = getelementptr inbounds %struct.anon.21, ptr %440, i32 0, i32 0
  %442 = load i16, ptr %441, align 8, !tbaa !53
  %443 = load ptr, ptr %6, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %443, i32 0, i32 1
  %445 = getelementptr inbounds %struct.anon.0, ptr %444, i32 0, i32 1
  %446 = getelementptr inbounds %struct.anon.19, ptr %445, i32 0, i32 8
  %447 = getelementptr inbounds %struct.anon.21, ptr %446, i32 0, i32 1
  %448 = load i32, ptr %447, align 4, !tbaa !52
  %449 = call i32 @__arm_2d_list_core_move_selection(ptr noundef %436, i16 noundef signext %442, i32 noundef %448)
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %450, i32 0, i32 1
  %452 = getelementptr inbounds %struct.anon.0, ptr %451, i32 0, i32 1
  %453 = getelementptr inbounds %struct.anon.19, ptr %452, i32 0, i32 8
  %454 = getelementptr inbounds %struct.anon.21, ptr %453, i32 0, i32 0
  store i16 0, ptr %454, align 8, !tbaa !53
  %455 = load ptr, ptr %6, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %455, i32 0, i32 1
  %457 = getelementptr inbounds %struct.anon.0, ptr %456, i32 0, i32 1
  %458 = getelementptr inbounds %struct.anon.19, ptr %457, i32 0, i32 8
  %459 = getelementptr inbounds %struct.anon.21, ptr %458, i32 0, i32 1
  store i32 0, ptr %459, align 4, !tbaa !52
  br label %460

460:                                              ; preds = %435, %426, %417
  br label %461

461:                                              ; preds = %460, %414
  %462 = load i32, ptr %26, align 4, !tbaa !51
  %463 = load ptr, ptr %6, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %463, i32 0, i32 1
  %465 = getelementptr inbounds %struct.anon.0, ptr %464, i32 0, i32 1
  %466 = getelementptr inbounds %struct.anon.19, ptr %465, i32 0, i32 4
  %467 = getelementptr inbounds %struct.anon.20, ptr %466, i32 0, i32 0
  %468 = load i32, ptr %467, align 8, !tbaa !50
  %469 = icmp ne i32 %462, %468
  br i1 %469, label %470, label %478

470:                                              ; preds = %461
  %471 = load ptr, ptr %6, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %471, i32 0, i32 1
  %473 = getelementptr inbounds %struct.anon.0, ptr %472, i32 0, i32 1
  %474 = getelementptr inbounds %struct.anon.19, ptr %473, i32 0, i32 7
  %475 = load i8, ptr %474, align 1
  %476 = and i8 %475, -3
  %477 = or i8 %476, 2
  store i8 %477, ptr %474, align 1
  br label %478

478:                                              ; preds = %470, %461
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %479

479:                                              ; preds = %478, %240
  store i32 0, ptr %15, align 4
  br label %480

480:                                              ; preds = %479, %238, %113
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  %481 = load i32, ptr %15, align 4
  switch i32 %481, label %1186 [
    i32 0, label %482
    i32 5, label %1183
  ]

482:                                              ; preds = %480
  br label %483

483:                                              ; preds = %482
  br label %484

484:                                              ; preds = %483
  %485 = load ptr, ptr %6, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %485, i32 0, i32 0
  %487 = getelementptr inbounds %struct.anon, ptr %486, i32 0, i32 0
  %488 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %487, i32 0, i32 2
  %489 = load ptr, ptr %488, align 8, !tbaa !35
  %490 = getelementptr inbounds %struct.arm_2d_i_list_region_calculator_t, ptr %489, i32 0, i32 0
  %491 = load ptr, ptr %490, align 8, !tbaa !45
  %492 = icmp eq ptr null, %491
  br i1 %492, label %493, label %494

493:                                              ; preds = %484
  br label %513

494:                                              ; preds = %484
  %495 = load ptr, ptr %6, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %495, i32 0, i32 0
  %497 = getelementptr inbounds %struct.anon, ptr %496, i32 0, i32 0
  %498 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %497, i32 0, i32 2
  %499 = load ptr, ptr %498, align 8, !tbaa !35
  %500 = getelementptr inbounds %struct.arm_2d_i_list_region_calculator_t, ptr %499, i32 0, i32 0
  %501 = load ptr, ptr %500, align 8, !tbaa !45
  %502 = load ptr, ptr %6, align 8, !tbaa !5
  %503 = load ptr, ptr %6, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %503, i32 0, i32 0
  %505 = getelementptr inbounds %struct.anon, ptr %504, i32 0, i32 0
  %506 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %505, i32 0, i32 1
  %507 = load ptr, ptr %506, align 8, !tbaa !47
  %508 = load ptr, ptr %6, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %508, i32 0, i32 2
  %510 = getelementptr inbounds %struct.anon.22, ptr %509, i32 0, i32 3
  %511 = load i32, ptr %510, align 4, !tbaa !48
  %512 = call ptr %501(ptr noundef %502, ptr noundef %507, i32 noundef %511)
  br label %513

513:                                              ; preds = %494, %493
  %514 = phi ptr [ null, %493 ], [ %512, %494 ]
  %515 = icmp eq ptr null, %514
  br i1 %515, label %516, label %517

516:                                              ; preds = %513
  br label %1183

517:                                              ; preds = %513
  br label %518

518:                                              ; preds = %517
  %519 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 1, ptr %519, align 1, !tbaa !35
  br label %520

520:                                              ; preds = %518, %43
  %521 = load ptr, ptr %11, align 8, !tbaa !5
  %522 = load i8, ptr %521, align 1, !tbaa !35
  %523 = load ptr, ptr %6, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %523, i32 0, i32 0
  %525 = getelementptr inbounds %struct.anon, ptr %524, i32 0, i32 0
  %526 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %525, i32 0, i32 4
  %527 = load ptr, ptr %526, align 8, !tbaa !57
  %528 = icmp eq ptr null, %527
  br i1 %528, label %529, label %530

529:                                              ; preds = %520
  br label %544

530:                                              ; preds = %520
  %531 = load ptr, ptr %6, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %531, i32 0, i32 0
  %533 = getelementptr inbounds %struct.anon, ptr %532, i32 0, i32 0
  %534 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %533, i32 0, i32 4
  %535 = load ptr, ptr %534, align 8, !tbaa !57
  %536 = load ptr, ptr %6, align 8, !tbaa !5
  %537 = load ptr, ptr %6, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %537, i32 0, i32 1
  %539 = getelementptr inbounds %struct.anon.0, ptr %538, i32 0, i32 0
  %540 = getelementptr inbounds %struct.anon.1, ptr %539, i32 0, i32 1
  %541 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %542 = trunc i8 %541 to i1
  %543 = call i32 %535(ptr noundef %536, ptr noundef %540, i1 noundef zeroext %542)
  br label %544

544:                                              ; preds = %530, %529
  %545 = phi i32 [ 0, %529 ], [ %543, %530 ]
  store i32 %545, ptr %10, align 4, !tbaa !51
  %546 = load i32, ptr %10, align 4, !tbaa !51
  %547 = icmp eq i32 1, %546
  br i1 %547, label %548, label %549

548:                                              ; preds = %544
  store i32 1, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

549:                                              ; preds = %544
  %550 = load i32, ptr %10, align 4, !tbaa !51
  %551 = icmp slt i32 %550, 0
  br i1 %551, label %552, label %555

552:                                              ; preds = %549
  %553 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 0, ptr %553, align 1, !tbaa !35
  %554 = load i32, ptr %10, align 4, !tbaa !51
  store i32 %554, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

555:                                              ; preds = %549
  %556 = load i32, ptr %10, align 4, !tbaa !51
  %557 = icmp ne i32 0, %556
  br i1 %557, label %558, label %564

558:                                              ; preds = %555
  %559 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 2, ptr %559, align 1, !tbaa !35
  %560 = load i32, ptr %10, align 4, !tbaa !51
  store i32 %560, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

561:                                              ; preds = %43
  %562 = load ptr, ptr %11, align 8, !tbaa !5
  %563 = load i8, ptr %562, align 1, !tbaa !35
  br label %564

564:                                              ; preds = %561, %555
  br label %565

565:                                              ; preds = %564
  br label %566

566:                                              ; preds = %565
  %567 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 3, ptr %567, align 1, !tbaa !35
  store i32 1, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

568:                                              ; preds = %43
  %569 = load ptr, ptr %11, align 8, !tbaa !5
  %570 = load i8, ptr %569, align 1, !tbaa !35
  br label %571

571:                                              ; preds = %568
  br label %572

572:                                              ; preds = %571
  %573 = load ptr, ptr %6, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %573, i32 0, i32 0
  %575 = getelementptr inbounds %struct.anon, ptr %574, i32 0, i32 0
  %576 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %575, i32 0, i32 2
  %577 = load ptr, ptr %576, align 8, !tbaa !35
  %578 = icmp ne ptr null, %577
  br i1 %578, label %579, label %580

579:                                              ; preds = %572
  br label %581

580:                                              ; preds = %572
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 324, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_list_core_show) #6
  unreachable

581:                                              ; preds = %579
  br label %582

582:                                              ; preds = %1044, %581
  %583 = load ptr, ptr %6, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %583, i32 0, i32 1
  %585 = getelementptr inbounds %struct.anon.0, ptr %584, i32 0, i32 0
  %586 = getelementptr inbounds %struct.anon.1, ptr %585, i32 0, i32 2
  %587 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %586, i32 0, i32 0
  %588 = load ptr, ptr %587, align 8, !tbaa !58
  store ptr %588, ptr %29, align 8, !tbaa !5
  %589 = load ptr, ptr %29, align 8, !tbaa !5
  %590 = icmp ne ptr null, %589
  br i1 %590, label %591, label %592

591:                                              ; preds = %582
  br label %593

592:                                              ; preds = %582
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 330, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_list_core_show) #6
  unreachable

593:                                              ; preds = %591
  %594 = load ptr, ptr %29, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %594, i32 0, i32 2
  %596 = load i16, ptr %595, align 2
  %597 = lshr i16 %596, 2
  %598 = and i16 %597, 1
  %599 = icmp ne i16 %598, 0
  br i1 %599, label %604, label %600

600:                                              ; preds = %593
  %601 = load ptr, ptr %6, align 8, !tbaa !5
  %602 = load ptr, ptr %29, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %602, i32 0, i32 3
  store ptr %601, ptr %603, align 8, !tbaa !59
  br label %604

604:                                              ; preds = %600, %593
  br label %605

605:                                              ; preds = %604
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #7
  store i16 0, ptr %30, align 2, !tbaa !33
  %606 = load ptr, ptr %6, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %606, i32 0, i32 1
  %608 = getelementptr inbounds %struct.anon.0, ptr %607, i32 0, i32 0
  %609 = getelementptr inbounds %struct.anon.1, ptr %608, i32 0, i32 2
  %610 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %609, i32 0, i32 3
  %611 = load i32, ptr %610, align 4, !tbaa !64
  %612 = icmp eq i32 %611, 1
  br i1 %612, label %613, label %670

613:                                              ; preds = %605
  %614 = load ptr, ptr %29, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %614, i32 0, i32 2
  %616 = load i16, ptr %615, align 2
  %617 = lshr i16 %616, 4
  %618 = and i16 %617, 15
  %619 = zext i16 %618 to i32
  %620 = and i32 %619, 12
  switch i32 %620, label %638 [
    i32 4, label %656
    i32 8, label %621
  ]

621:                                              ; preds = %613
  %622 = load ptr, ptr %6, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %622, i32 0, i32 1
  %624 = getelementptr inbounds %struct.anon.0, ptr %623, i32 0, i32 0
  %625 = getelementptr inbounds %struct.anon.1, ptr %624, i32 0, i32 1
  %626 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %625, i32 0, i32 1
  %627 = getelementptr inbounds %struct.arm_2d_region_t, ptr %626, i32 0, i32 1
  %628 = getelementptr inbounds %struct.arm_2d_size_t, ptr %627, i32 0, i32 1
  %629 = load i16, ptr %628, align 2, !tbaa !35
  %630 = sext i16 %629 to i32
  %631 = load ptr, ptr %29, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %631, i32 0, i32 7
  %633 = getelementptr inbounds %struct.arm_2d_size_t, ptr %632, i32 0, i32 1
  %634 = load i16, ptr %633, align 2, !tbaa !65
  %635 = sext i16 %634 to i32
  %636 = sub nsw i32 %630, %635
  %637 = trunc i32 %636 to i16
  store i16 %637, ptr %30, align 2, !tbaa !33
  br label %656

638:                                              ; preds = %613
  %639 = load ptr, ptr %6, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %639, i32 0, i32 1
  %641 = getelementptr inbounds %struct.anon.0, ptr %640, i32 0, i32 0
  %642 = getelementptr inbounds %struct.anon.1, ptr %641, i32 0, i32 1
  %643 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %642, i32 0, i32 1
  %644 = getelementptr inbounds %struct.arm_2d_region_t, ptr %643, i32 0, i32 1
  %645 = getelementptr inbounds %struct.arm_2d_size_t, ptr %644, i32 0, i32 1
  %646 = load i16, ptr %645, align 2, !tbaa !35
  %647 = sext i16 %646 to i32
  %648 = load ptr, ptr %29, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %648, i32 0, i32 7
  %650 = getelementptr inbounds %struct.arm_2d_size_t, ptr %649, i32 0, i32 1
  %651 = load i16, ptr %650, align 2, !tbaa !65
  %652 = sext i16 %651 to i32
  %653 = sub nsw i32 %647, %652
  %654 = ashr i32 %653, 1
  %655 = trunc i32 %654 to i16
  store i16 %655, ptr %30, align 2, !tbaa !33
  br label %656

656:                                              ; preds = %638, %621, %613
  %657 = load i16, ptr %30, align 2, !tbaa !33
  %658 = sext i16 %657 to i32
  %659 = load ptr, ptr %6, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %659, i32 0, i32 1
  %661 = getelementptr inbounds %struct.anon.0, ptr %660, i32 0, i32 0
  %662 = getelementptr inbounds %struct.anon.1, ptr %661, i32 0, i32 2
  %663 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %662, i32 0, i32 1
  %664 = getelementptr inbounds %struct.arm_2d_region_t, ptr %663, i32 0, i32 0
  %665 = getelementptr inbounds %struct.arm_2d_location_t, ptr %664, i32 0, i32 1
  %666 = load i16, ptr %665, align 2, !tbaa !35
  %667 = sext i16 %666 to i32
  %668 = add nsw i32 %667, %658
  %669 = trunc i32 %668 to i16
  store i16 %669, ptr %665, align 2, !tbaa !35
  br label %727

670:                                              ; preds = %605
  %671 = load ptr, ptr %29, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %671, i32 0, i32 2
  %673 = load i16, ptr %672, align 2
  %674 = lshr i16 %673, 4
  %675 = and i16 %674, 15
  %676 = zext i16 %675 to i32
  %677 = and i32 %676, 3
  switch i32 %677, label %695 [
    i32 1, label %713
    i32 2, label %678
  ]

678:                                              ; preds = %670
  %679 = load ptr, ptr %6, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %679, i32 0, i32 1
  %681 = getelementptr inbounds %struct.anon.0, ptr %680, i32 0, i32 0
  %682 = getelementptr inbounds %struct.anon.1, ptr %681, i32 0, i32 1
  %683 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %682, i32 0, i32 1
  %684 = getelementptr inbounds %struct.arm_2d_region_t, ptr %683, i32 0, i32 1
  %685 = getelementptr inbounds %struct.arm_2d_size_t, ptr %684, i32 0, i32 0
  %686 = load i16, ptr %685, align 4, !tbaa !35
  %687 = sext i16 %686 to i32
  %688 = load ptr, ptr %29, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %688, i32 0, i32 7
  %690 = getelementptr inbounds %struct.arm_2d_size_t, ptr %689, i32 0, i32 0
  %691 = load i16, ptr %690, align 2, !tbaa !66
  %692 = sext i16 %691 to i32
  %693 = sub nsw i32 %687, %692
  %694 = trunc i32 %693 to i16
  store i16 %694, ptr %30, align 2, !tbaa !33
  br label %713

695:                                              ; preds = %670
  %696 = load ptr, ptr %6, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %696, i32 0, i32 1
  %698 = getelementptr inbounds %struct.anon.0, ptr %697, i32 0, i32 0
  %699 = getelementptr inbounds %struct.anon.1, ptr %698, i32 0, i32 1
  %700 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %699, i32 0, i32 1
  %701 = getelementptr inbounds %struct.arm_2d_region_t, ptr %700, i32 0, i32 1
  %702 = getelementptr inbounds %struct.arm_2d_size_t, ptr %701, i32 0, i32 0
  %703 = load i16, ptr %702, align 4, !tbaa !35
  %704 = sext i16 %703 to i32
  %705 = load ptr, ptr %29, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %705, i32 0, i32 7
  %707 = getelementptr inbounds %struct.arm_2d_size_t, ptr %706, i32 0, i32 0
  %708 = load i16, ptr %707, align 2, !tbaa !66
  %709 = sext i16 %708 to i32
  %710 = sub nsw i32 %704, %709
  %711 = ashr i32 %710, 1
  %712 = trunc i32 %711 to i16
  store i16 %712, ptr %30, align 2, !tbaa !33
  br label %713

713:                                              ; preds = %695, %678, %670
  %714 = load i16, ptr %30, align 2, !tbaa !33
  %715 = sext i16 %714 to i32
  %716 = load ptr, ptr %6, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %716, i32 0, i32 1
  %718 = getelementptr inbounds %struct.anon.0, ptr %717, i32 0, i32 0
  %719 = getelementptr inbounds %struct.anon.1, ptr %718, i32 0, i32 2
  %720 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %719, i32 0, i32 1
  %721 = getelementptr inbounds %struct.arm_2d_region_t, ptr %720, i32 0, i32 0
  %722 = getelementptr inbounds %struct.arm_2d_location_t, ptr %721, i32 0, i32 0
  %723 = load i16, ptr %722, align 8, !tbaa !35
  %724 = sext i16 %723 to i32
  %725 = add nsw i32 %724, %715
  %726 = trunc i32 %725 to i16
  store i16 %726, ptr %722, align 8, !tbaa !35
  br label %727

727:                                              ; preds = %713, %656
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #7
  br label %728

728:                                              ; preds = %727
  br label %729

729:                                              ; preds = %728
  %730 = load ptr, ptr %29, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %730, i32 0, i32 6
  %732 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %731, i32 0, i32 0
  %733 = load i8, ptr %732, align 2, !tbaa !67
  %734 = zext i8 %733 to i32
  %735 = load ptr, ptr %6, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %735, i32 0, i32 1
  %737 = getelementptr inbounds %struct.anon.0, ptr %736, i32 0, i32 0
  %738 = getelementptr inbounds %struct.anon.1, ptr %737, i32 0, i32 2
  %739 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %738, i32 0, i32 1
  %740 = getelementptr inbounds %struct.arm_2d_region_t, ptr %739, i32 0, i32 0
  %741 = getelementptr inbounds %struct.arm_2d_location_t, ptr %740, i32 0, i32 0
  %742 = load i16, ptr %741, align 8, !tbaa !35
  %743 = sext i16 %742 to i32
  %744 = add nsw i32 %743, %734
  %745 = trunc i32 %744 to i16
  store i16 %745, ptr %741, align 8, !tbaa !35
  %746 = load ptr, ptr %29, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %746, i32 0, i32 6
  %748 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %747, i32 0, i32 2
  %749 = load i8, ptr %748, align 2, !tbaa !68
  %750 = zext i8 %749 to i32
  %751 = load ptr, ptr %6, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %751, i32 0, i32 1
  %753 = getelementptr inbounds %struct.anon.0, ptr %752, i32 0, i32 0
  %754 = getelementptr inbounds %struct.anon.1, ptr %753, i32 0, i32 2
  %755 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %754, i32 0, i32 1
  %756 = getelementptr inbounds %struct.arm_2d_region_t, ptr %755, i32 0, i32 0
  %757 = getelementptr inbounds %struct.arm_2d_location_t, ptr %756, i32 0, i32 1
  %758 = load i16, ptr %757, align 2, !tbaa !35
  %759 = sext i16 %758 to i32
  %760 = add nsw i32 %759, %750
  %761 = trunc i32 %760 to i16
  store i16 %761, ptr %757, align 2, !tbaa !35
  %762 = load ptr, ptr %29, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %762, i32 0, i32 6
  %764 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %763, i32 0, i32 0
  %765 = load i8, ptr %764, align 2, !tbaa !67
  %766 = zext i8 %765 to i32
  %767 = load ptr, ptr %29, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %767, i32 0, i32 6
  %769 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %768, i32 0, i32 1
  %770 = load i8, ptr %769, align 1, !tbaa !69
  %771 = zext i8 %770 to i32
  %772 = add nsw i32 %766, %771
  %773 = load ptr, ptr %6, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %773, i32 0, i32 1
  %775 = getelementptr inbounds %struct.anon.0, ptr %774, i32 0, i32 0
  %776 = getelementptr inbounds %struct.anon.1, ptr %775, i32 0, i32 2
  %777 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %776, i32 0, i32 1
  %778 = getelementptr inbounds %struct.arm_2d_region_t, ptr %777, i32 0, i32 1
  %779 = getelementptr inbounds %struct.arm_2d_size_t, ptr %778, i32 0, i32 0
  %780 = load i16, ptr %779, align 4, !tbaa !35
  %781 = sext i16 %780 to i32
  %782 = sub nsw i32 %781, %772
  %783 = trunc i32 %782 to i16
  store i16 %783, ptr %779, align 4, !tbaa !35
  %784 = load ptr, ptr %6, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %784, i32 0, i32 1
  %786 = getelementptr inbounds %struct.anon.0, ptr %785, i32 0, i32 0
  %787 = getelementptr inbounds %struct.anon.1, ptr %786, i32 0, i32 2
  %788 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %787, i32 0, i32 1
  %789 = getelementptr inbounds %struct.arm_2d_region_t, ptr %788, i32 0, i32 1
  %790 = getelementptr inbounds %struct.arm_2d_size_t, ptr %789, i32 0, i32 0
  %791 = load i16, ptr %790, align 4, !tbaa !35
  %792 = sext i16 %791 to i32
  %793 = icmp eq i32 0, %792
  br i1 %793, label %794, label %795

794:                                              ; preds = %729
  br label %1010

795:                                              ; preds = %729
  %796 = load ptr, ptr %29, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %796, i32 0, i32 6
  %798 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %797, i32 0, i32 2
  %799 = load i8, ptr %798, align 2, !tbaa !68
  %800 = zext i8 %799 to i32
  %801 = load ptr, ptr %29, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %801, i32 0, i32 6
  %803 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %802, i32 0, i32 3
  %804 = load i8, ptr %803, align 1, !tbaa !70
  %805 = zext i8 %804 to i32
  %806 = add nsw i32 %800, %805
  %807 = load ptr, ptr %6, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %807, i32 0, i32 1
  %809 = getelementptr inbounds %struct.anon.0, ptr %808, i32 0, i32 0
  %810 = getelementptr inbounds %struct.anon.1, ptr %809, i32 0, i32 2
  %811 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %810, i32 0, i32 1
  %812 = getelementptr inbounds %struct.arm_2d_region_t, ptr %811, i32 0, i32 1
  %813 = getelementptr inbounds %struct.arm_2d_size_t, ptr %812, i32 0, i32 1
  %814 = load i16, ptr %813, align 2, !tbaa !35
  %815 = sext i16 %814 to i32
  %816 = sub nsw i32 %815, %806
  %817 = trunc i32 %816 to i16
  store i16 %817, ptr %813, align 2, !tbaa !35
  %818 = load ptr, ptr %6, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %818, i32 0, i32 1
  %820 = getelementptr inbounds %struct.anon.0, ptr %819, i32 0, i32 0
  %821 = getelementptr inbounds %struct.anon.1, ptr %820, i32 0, i32 2
  %822 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %821, i32 0, i32 1
  %823 = getelementptr inbounds %struct.arm_2d_region_t, ptr %822, i32 0, i32 1
  %824 = getelementptr inbounds %struct.arm_2d_size_t, ptr %823, i32 0, i32 1
  %825 = load i16, ptr %824, align 2, !tbaa !35
  %826 = sext i16 %825 to i32
  %827 = icmp eq i32 0, %826
  br i1 %827, label %828, label %829

828:                                              ; preds = %795
  br label %1010

829:                                              ; preds = %795
  %830 = load ptr, ptr %6, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %830, i32 0, i32 1
  %832 = getelementptr inbounds %struct.anon.0, ptr %831, i32 0, i32 1
  %833 = getelementptr inbounds %struct.anon.19, ptr %832, i32 0, i32 5
  %834 = load i16, ptr %833, align 4, !tbaa !71
  %835 = zext i16 %834 to i32
  %836 = load ptr, ptr %29, align 8, !tbaa !5
  %837 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %836, i32 0, i32 1
  %838 = load i16, ptr %837, align 8, !tbaa !72
  %839 = zext i16 %838 to i32
  %840 = icmp eq i32 %835, %839
  %841 = zext i1 %840 to i32
  %842 = trunc i32 %841 to i8
  %843 = load ptr, ptr %6, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %843, i32 0, i32 1
  %845 = getelementptr inbounds %struct.anon.0, ptr %844, i32 0, i32 0
  %846 = getelementptr inbounds %struct.anon.1, ptr %845, i32 0, i32 2
  %847 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %846, i32 0, i32 2
  %848 = load i8, ptr %847, align 8
  %849 = and i8 %842, 1
  %850 = shl i8 %849, 1
  %851 = and i8 %848, -3
  %852 = or i8 %851, %850
  store i8 %852, ptr %847, align 8
  %853 = load ptr, ptr %6, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %853, i32 0, i32 1
  %855 = getelementptr inbounds %struct.anon.0, ptr %854, i32 0, i32 0
  %856 = getelementptr inbounds %struct.anon.1, ptr %855, i32 0, i32 1
  %857 = load ptr, ptr %6, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %857, i32 0, i32 1
  %859 = getelementptr inbounds %struct.anon.0, ptr %858, i32 0, i32 0
  %860 = getelementptr inbounds %struct.anon.1, ptr %859, i32 0, i32 2
  %861 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %860, i32 0, i32 1
  %862 = call zeroext i1 @__arm_2d_helper_pfb_is_region_active0(ptr noundef %856, ptr noundef %861, i1 noundef zeroext true)
  br i1 %862, label %864, label %863

863:                                              ; preds = %829
  br label %1010

864:                                              ; preds = %829
  %865 = load ptr, ptr %6, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %865, i32 0, i32 1
  %867 = getelementptr inbounds %struct.anon.0, ptr %866, i32 0, i32 0
  %868 = getelementptr inbounds %struct.anon.1, ptr %867, i32 0, i32 1
  %869 = load ptr, ptr %6, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %869, i32 0, i32 1
  %871 = getelementptr inbounds %struct.anon.0, ptr %870, i32 0, i32 0
  %872 = getelementptr inbounds %struct.anon.1, ptr %871, i32 0, i32 2
  %873 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %872, i32 0, i32 1
  %874 = load ptr, ptr %6, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %874, i32 0, i32 1
  %876 = getelementptr inbounds %struct.anon.0, ptr %875, i32 0, i32 1
  %877 = getelementptr inbounds %struct.anon.19, ptr %876, i32 0, i32 0
  %878 = call ptr @arm_2d_tile_generate_child(ptr noundef %868, ptr noundef %873, ptr noundef %877, i1 noundef zeroext false)
  %879 = icmp eq ptr null, %878
  br i1 %879, label %880, label %881

880:                                              ; preds = %864
  br label %1010

881:                                              ; preds = %864
  br label %882

882:                                              ; preds = %881
  %883 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 4, ptr %883, align 1, !tbaa !35
  br label %884

884:                                              ; preds = %882, %43
  %885 = load ptr, ptr %11, align 8, !tbaa !5
  %886 = load i8, ptr %885, align 1, !tbaa !35
  %887 = load ptr, ptr %6, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %887, i32 0, i32 1
  %889 = getelementptr inbounds %struct.anon.0, ptr %888, i32 0, i32 0
  %890 = getelementptr inbounds %struct.anon.1, ptr %889, i32 0, i32 2
  %891 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %890, i32 0, i32 0
  %892 = load ptr, ptr %891, align 8, !tbaa !58
  store ptr %892, ptr %29, align 8, !tbaa !5
  %893 = load ptr, ptr %6, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %893, i32 0, i32 0
  %895 = getelementptr inbounds %struct.anon, ptr %894, i32 0, i32 0
  %896 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %895, i32 0, i32 3
  %897 = load ptr, ptr %896, align 8, !tbaa !73
  %898 = icmp eq ptr null, %897
  br i1 %898, label %899, label %900

899:                                              ; preds = %884
  br label %919

900:                                              ; preds = %884
  %901 = load ptr, ptr %6, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %901, i32 0, i32 0
  %903 = getelementptr inbounds %struct.anon, ptr %902, i32 0, i32 0
  %904 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %903, i32 0, i32 3
  %905 = load ptr, ptr %904, align 8, !tbaa !73
  %906 = load ptr, ptr %29, align 8, !tbaa !5
  %907 = load ptr, ptr %6, align 8, !tbaa !5
  %908 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %907, i32 0, i32 1
  %909 = getelementptr inbounds %struct.anon.0, ptr %908, i32 0, i32 1
  %910 = getelementptr inbounds %struct.anon.19, ptr %909, i32 0, i32 0
  %911 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %912 = trunc i8 %911 to i1
  %913 = load ptr, ptr %6, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %913, i32 0, i32 1
  %915 = getelementptr inbounds %struct.anon.0, ptr %914, i32 0, i32 0
  %916 = getelementptr inbounds %struct.anon.1, ptr %915, i32 0, i32 2
  %917 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %916, i32 0, i32 2
  %918 = call i32 %905(ptr noundef %906, ptr noundef %910, i1 noundef zeroext %912, ptr noundef %917)
  br label %919

919:                                              ; preds = %900, %899
  %920 = phi i32 [ 0, %899 ], [ %918, %900 ]
  store i32 %920, ptr %10, align 4, !tbaa !51
  %921 = load i32, ptr %10, align 4, !tbaa !51
  %922 = icmp eq i32 1, %921
  br i1 %922, label %923, label %924

923:                                              ; preds = %919
  store i32 1, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

924:                                              ; preds = %919
  %925 = load i32, ptr %10, align 4, !tbaa !51
  %926 = icmp slt i32 %925, 0
  br i1 %926, label %927, label %930

927:                                              ; preds = %924
  %928 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 0, ptr %928, align 1, !tbaa !35
  %929 = load i32, ptr %10, align 4, !tbaa !51
  store i32 %929, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

930:                                              ; preds = %924
  %931 = load i32, ptr %10, align 4, !tbaa !51
  %932 = icmp ne i32 0, %931
  br i1 %932, label %933, label %939

933:                                              ; preds = %930
  %934 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 5, ptr %934, align 1, !tbaa !35
  %935 = load i32, ptr %10, align 4, !tbaa !51
  store i32 %935, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

936:                                              ; preds = %43
  %937 = load ptr, ptr %11, align 8, !tbaa !5
  %938 = load i8, ptr %937, align 1, !tbaa !35
  br label %939

939:                                              ; preds = %936, %930
  br label %940

940:                                              ; preds = %939
  br label %941

941:                                              ; preds = %940
  %942 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 6, ptr %942, align 1, !tbaa !35
  store i32 1, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

943:                                              ; preds = %43
  %944 = load ptr, ptr %11, align 8, !tbaa !5
  %945 = load i8, ptr %944, align 1, !tbaa !35
  br label %946

946:                                              ; preds = %943
  br label %947

947:                                              ; preds = %946
  br label %948

948:                                              ; preds = %947
  %949 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 7, ptr %949, align 1, !tbaa !35
  br label %950

950:                                              ; preds = %948, %43
  %951 = load ptr, ptr %11, align 8, !tbaa !5
  %952 = load i8, ptr %951, align 1, !tbaa !35
  %953 = load ptr, ptr %6, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %953, i32 0, i32 1
  %955 = getelementptr inbounds %struct.anon.0, ptr %954, i32 0, i32 0
  %956 = getelementptr inbounds %struct.anon.1, ptr %955, i32 0, i32 2
  %957 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %956, i32 0, i32 0
  %958 = load ptr, ptr %957, align 8, !tbaa !58
  store ptr %958, ptr %29, align 8, !tbaa !5
  %959 = load ptr, ptr %29, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %959, i32 0, i32 4
  %961 = load ptr, ptr %960, align 8, !tbaa !74
  %962 = icmp eq ptr null, %961
  br i1 %962, label %963, label %964

963:                                              ; preds = %950
  br label %981

964:                                              ; preds = %950
  %965 = load ptr, ptr %29, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.arm_2d_list_item_t, ptr %965, i32 0, i32 4
  %967 = load ptr, ptr %966, align 8, !tbaa !74
  %968 = load ptr, ptr %29, align 8, !tbaa !5
  %969 = load ptr, ptr %6, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %969, i32 0, i32 1
  %971 = getelementptr inbounds %struct.anon.0, ptr %970, i32 0, i32 1
  %972 = getelementptr inbounds %struct.anon.19, ptr %971, i32 0, i32 0
  %973 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %974 = trunc i8 %973 to i1
  %975 = load ptr, ptr %6, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %975, i32 0, i32 1
  %977 = getelementptr inbounds %struct.anon.0, ptr %976, i32 0, i32 0
  %978 = getelementptr inbounds %struct.anon.1, ptr %977, i32 0, i32 2
  %979 = getelementptr inbounds %struct.__arm_2d_list_work_area_t, ptr %978, i32 0, i32 2
  %980 = call i32 %967(ptr noundef %968, ptr noundef %972, i1 noundef zeroext %974, ptr noundef %979)
  br label %981

981:                                              ; preds = %964, %963
  %982 = phi i32 [ 0, %963 ], [ %980, %964 ]
  store i32 %982, ptr %10, align 4, !tbaa !51
  %983 = load i32, ptr %10, align 4, !tbaa !51
  %984 = icmp eq i32 1, %983
  br i1 %984, label %985, label %986

985:                                              ; preds = %981
  store i32 1, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

986:                                              ; preds = %981
  %987 = load i32, ptr %10, align 4, !tbaa !51
  %988 = icmp slt i32 %987, 0
  br i1 %988, label %989, label %992

989:                                              ; preds = %986
  %990 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 0, ptr %990, align 1, !tbaa !35
  %991 = load i32, ptr %10, align 4, !tbaa !51
  store i32 %991, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

992:                                              ; preds = %986
  %993 = load i32, ptr %10, align 4, !tbaa !51
  %994 = icmp ne i32 0, %993
  br i1 %994, label %995, label %1001

995:                                              ; preds = %992
  %996 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 8, ptr %996, align 1, !tbaa !35
  %997 = load i32, ptr %10, align 4, !tbaa !51
  store i32 %997, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

998:                                              ; preds = %43
  %999 = load ptr, ptr %11, align 8, !tbaa !5
  %1000 = load i8, ptr %999, align 1, !tbaa !35
  br label %1001

1001:                                             ; preds = %998, %992
  br label %1002

1002:                                             ; preds = %1001
  br label %1003

1003:                                             ; preds = %1002
  %1004 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 9, ptr %1004, align 1, !tbaa !35
  store i32 1, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

1005:                                             ; preds = %43
  %1006 = load ptr, ptr %11, align 8, !tbaa !5
  %1007 = load i8, ptr %1006, align 1, !tbaa !35
  br label %1008

1008:                                             ; preds = %1005
  br label %1009

1009:                                             ; preds = %1008
  br label %1010

1010:                                             ; preds = %1009, %880, %863, %828, %794
  %1011 = load ptr, ptr %6, align 8, !tbaa !5
  %1012 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1011, i32 0, i32 0
  %1013 = getelementptr inbounds %struct.anon, ptr %1012, i32 0, i32 0
  %1014 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %1013, i32 0, i32 2
  %1015 = load ptr, ptr %1014, align 8, !tbaa !35
  %1016 = getelementptr inbounds %struct.arm_2d_i_list_region_calculator_t, ptr %1015, i32 0, i32 0
  %1017 = load ptr, ptr %1016, align 8, !tbaa !45
  %1018 = icmp eq ptr null, %1017
  br i1 %1018, label %1019, label %1020

1019:                                             ; preds = %1010
  br label %1039

1020:                                             ; preds = %1010
  %1021 = load ptr, ptr %6, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1021, i32 0, i32 0
  %1023 = getelementptr inbounds %struct.anon, ptr %1022, i32 0, i32 0
  %1024 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %1023, i32 0, i32 2
  %1025 = load ptr, ptr %1024, align 8, !tbaa !35
  %1026 = getelementptr inbounds %struct.arm_2d_i_list_region_calculator_t, ptr %1025, i32 0, i32 0
  %1027 = load ptr, ptr %1026, align 8, !tbaa !45
  %1028 = load ptr, ptr %6, align 8, !tbaa !5
  %1029 = load ptr, ptr %6, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1029, i32 0, i32 0
  %1031 = getelementptr inbounds %struct.anon, ptr %1030, i32 0, i32 0
  %1032 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %1031, i32 0, i32 1
  %1033 = load ptr, ptr %1032, align 8, !tbaa !47
  %1034 = load ptr, ptr %6, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1034, i32 0, i32 2
  %1036 = getelementptr inbounds %struct.anon.22, ptr %1035, i32 0, i32 3
  %1037 = load i32, ptr %1036, align 4, !tbaa !48
  %1038 = call ptr %1027(ptr noundef %1028, ptr noundef %1033, i32 noundef %1037)
  br label %1039

1039:                                             ; preds = %1020, %1019
  %1040 = phi ptr [ null, %1019 ], [ %1038, %1020 ]
  %1041 = icmp eq ptr null, %1040
  br i1 %1041, label %1042, label %1043

1042:                                             ; preds = %1039
  br label %1045

1043:                                             ; preds = %1039
  br label %1044

1044:                                             ; preds = %1043
  br i1 true, label %582, label %1045

1045:                                             ; preds = %1044, %1042
  br label %1046

1046:                                             ; preds = %1045
  %1047 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 10, ptr %1047, align 1, !tbaa !35
  br label %1048

1048:                                             ; preds = %1046, %43
  %1049 = load ptr, ptr %11, align 8, !tbaa !5
  %1050 = load i8, ptr %1049, align 1, !tbaa !35
  %1051 = load ptr, ptr %6, align 8, !tbaa !5
  %1052 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1051, i32 0, i32 0
  %1053 = getelementptr inbounds %struct.anon, ptr %1052, i32 0, i32 0
  %1054 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %1053, i32 0, i32 5
  %1055 = load ptr, ptr %1054, align 8, !tbaa !75
  %1056 = icmp eq ptr null, %1055
  br i1 %1056, label %1057, label %1058

1057:                                             ; preds = %1048
  br label %1072

1058:                                             ; preds = %1048
  %1059 = load ptr, ptr %6, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1059, i32 0, i32 0
  %1061 = getelementptr inbounds %struct.anon, ptr %1060, i32 0, i32 0
  %1062 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %1061, i32 0, i32 5
  %1063 = load ptr, ptr %1062, align 8, !tbaa !75
  %1064 = load ptr, ptr %6, align 8, !tbaa !5
  %1065 = load ptr, ptr %6, align 8, !tbaa !5
  %1066 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1065, i32 0, i32 1
  %1067 = getelementptr inbounds %struct.anon.0, ptr %1066, i32 0, i32 0
  %1068 = getelementptr inbounds %struct.anon.1, ptr %1067, i32 0, i32 1
  %1069 = load i8, ptr %9, align 1, !tbaa !9, !range !11, !noundef !12
  %1070 = trunc i8 %1069 to i1
  %1071 = call i32 %1063(ptr noundef %1064, ptr noundef %1068, i1 noundef zeroext %1070)
  br label %1072

1072:                                             ; preds = %1058, %1057
  %1073 = phi i32 [ 0, %1057 ], [ %1071, %1058 ]
  store i32 %1073, ptr %10, align 4, !tbaa !51
  %1074 = load i32, ptr %10, align 4, !tbaa !51
  %1075 = icmp eq i32 1, %1074
  br i1 %1075, label %1076, label %1077

1076:                                             ; preds = %1072
  store i32 1, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

1077:                                             ; preds = %1072
  %1078 = load i32, ptr %10, align 4, !tbaa !51
  %1079 = icmp slt i32 %1078, 0
  br i1 %1079, label %1080, label %1083

1080:                                             ; preds = %1077
  %1081 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 0, ptr %1081, align 1, !tbaa !35
  %1082 = load i32, ptr %10, align 4, !tbaa !51
  store i32 %1082, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

1083:                                             ; preds = %1077
  %1084 = load i32, ptr %10, align 4, !tbaa !51
  %1085 = icmp ne i32 0, %1084
  br i1 %1085, label %1086, label %1092

1086:                                             ; preds = %1083
  %1087 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 11, ptr %1087, align 1, !tbaa !35
  %1088 = load i32, ptr %10, align 4, !tbaa !51
  store i32 %1088, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

1089:                                             ; preds = %43
  %1090 = load ptr, ptr %11, align 8, !tbaa !5
  %1091 = load i8, ptr %1090, align 1, !tbaa !35
  br label %1092

1092:                                             ; preds = %1089, %1083
  br label %1093

1093:                                             ; preds = %1092
  br label %1094

1094:                                             ; preds = %1093
  br label %1095

1095:                                             ; preds = %1094
  br label %1096

1096:                                             ; preds = %1095
  %1097 = load ptr, ptr %6, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1097, i32 0, i32 1
  %1099 = getelementptr inbounds %struct.anon.0, ptr %1098, i32 0, i32 1
  %1100 = getelementptr inbounds %struct.anon.19, ptr %1099, i32 0, i32 7
  %1101 = load i8, ptr %1100, align 1
  %1102 = and i8 %1101, 1
  %1103 = icmp ne i8 %1102, 0
  br i1 %1103, label %1182, label %1104

1104:                                             ; preds = %1096
  %1105 = load ptr, ptr %6, align 8, !tbaa !5
  %1106 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1105, i32 0, i32 0
  %1107 = getelementptr inbounds %struct.anon, ptr %1106, i32 0, i32 0
  %1108 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %1107, i32 0, i32 6
  %1109 = load i32, ptr %1108, align 8, !tbaa !76
  %1110 = icmp sgt i32 %1109, 0
  br i1 %1110, label %1111, label %1181

1111:                                             ; preds = %1104
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  %1112 = load ptr, ptr %6, align 8, !tbaa !5
  %1113 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1112, i32 0, i32 2
  %1114 = getelementptr inbounds %struct.anon.22, ptr %1113, i32 0, i32 3
  %1115 = load i32, ptr %1114, align 4, !tbaa !48
  %1116 = load ptr, ptr %6, align 8, !tbaa !5
  %1117 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1116, i32 0, i32 0
  %1118 = getelementptr inbounds %struct.anon, ptr %1117, i32 0, i32 0
  %1119 = getelementptr inbounds %struct.__arm_2d_list_core_cfg_t, ptr %1118, i32 0, i32 6
  %1120 = load i32, ptr %1119, align 8, !tbaa !76
  %1121 = srem i32 %1115, %1120
  store i32 %1121, ptr %31, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %1122 = load ptr, ptr %6, align 8, !tbaa !5
  %1123 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1122, i32 0, i32 1
  %1124 = getelementptr inbounds %struct.anon.0, ptr %1123, i32 0, i32 1
  %1125 = getelementptr inbounds %struct.anon.19, ptr %1124, i32 0, i32 4
  %1126 = getelementptr inbounds %struct.anon.20, ptr %1125, i32 0, i32 0
  %1127 = load i32, ptr %1126, align 8, !tbaa !50
  %1128 = load ptr, ptr %6, align 8, !tbaa !5
  %1129 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1128, i32 0, i32 2
  %1130 = getelementptr inbounds %struct.anon.22, ptr %1129, i32 0, i32 3
  %1131 = load i32, ptr %1130, align 4, !tbaa !48
  %1132 = sub nsw i32 %1127, %1131
  store i32 %1132, ptr %32, align 4, !tbaa !51
  %1133 = load i32, ptr %31, align 4, !tbaa !51
  %1134 = load ptr, ptr %6, align 8, !tbaa !5
  %1135 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1134, i32 0, i32 2
  %1136 = getelementptr inbounds %struct.anon.22, ptr %1135, i32 0, i32 3
  store i32 %1133, ptr %1136, align 4, !tbaa !48
  %1137 = load ptr, ptr %6, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1137, i32 0, i32 2
  %1139 = getelementptr inbounds %struct.anon.22, ptr %1138, i32 0, i32 3
  %1140 = load i32, ptr %1139, align 4, !tbaa !48
  %1141 = load i32, ptr %32, align 4, !tbaa !51
  %1142 = add nsw i32 %1140, %1141
  %1143 = load ptr, ptr %6, align 8, !tbaa !5
  %1144 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1143, i32 0, i32 1
  %1145 = getelementptr inbounds %struct.anon.0, ptr %1144, i32 0, i32 1
  %1146 = getelementptr inbounds %struct.anon.19, ptr %1145, i32 0, i32 4
  %1147 = getelementptr inbounds %struct.anon.20, ptr %1146, i32 0, i32 0
  store i32 %1142, ptr %1147, align 8, !tbaa !50
  %1148 = load ptr, ptr %6, align 8, !tbaa !5
  %1149 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1148, i32 0, i32 1
  %1150 = getelementptr inbounds %struct.anon.0, ptr %1149, i32 0, i32 1
  %1151 = getelementptr inbounds %struct.anon.19, ptr %1150, i32 0, i32 4
  %1152 = getelementptr inbounds %struct.anon.20, ptr %1151, i32 0, i32 0
  %1153 = load i32, ptr %1152, align 8, !tbaa !50
  %1154 = load ptr, ptr %6, align 8, !tbaa !5
  %1155 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1154, i32 0, i32 1
  %1156 = getelementptr inbounds %struct.anon.0, ptr %1155, i32 0, i32 1
  %1157 = getelementptr inbounds %struct.anon.19, ptr %1156, i32 0, i32 4
  %1158 = getelementptr inbounds %struct.anon.20, ptr %1157, i32 0, i32 1
  store i32 %1153, ptr %1158, align 4, !tbaa !55
  %1159 = load ptr, ptr %6, align 8, !tbaa !5
  %1160 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1159, i32 0, i32 1
  %1161 = getelementptr inbounds %struct.anon.0, ptr %1160, i32 0, i32 1
  %1162 = getelementptr inbounds %struct.anon.19, ptr %1161, i32 0, i32 4
  %1163 = getelementptr inbounds %struct.anon.20, ptr %1162, i32 0, i32 0
  %1164 = load i32, ptr %1163, align 8, !tbaa !50
  %1165 = load ptr, ptr %6, align 8, !tbaa !5
  %1166 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1165, i32 0, i32 1
  %1167 = getelementptr inbounds %struct.anon.0, ptr %1166, i32 0, i32 1
  %1168 = getelementptr inbounds %struct.anon.19, ptr %1167, i32 0, i32 4
  %1169 = getelementptr inbounds %struct.anon.20, ptr %1168, i32 0, i32 2
  store i32 %1164, ptr %1169, align 8, !tbaa !54
  %1170 = load ptr, ptr %6, align 8, !tbaa !5
  %1171 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1170, i32 0, i32 1
  %1172 = getelementptr inbounds %struct.anon.0, ptr %1171, i32 0, i32 1
  %1173 = getelementptr inbounds %struct.anon.19, ptr %1172, i32 0, i32 3
  %1174 = load ptr, ptr %6, align 8, !tbaa !5
  %1175 = getelementptr inbounds %struct.__arm_2d_list_core_t, ptr %1174, i32 0, i32 1
  %1176 = getelementptr inbounds %struct.anon.0, ptr %1175, i32 0, i32 1
  %1177 = getelementptr inbounds %struct.anon.19, ptr %1176, i32 0, i32 4
  %1178 = getelementptr inbounds %struct.anon.20, ptr %1177, i32 0, i32 0
  %1179 = load i32, ptr %1178, align 8, !tbaa !50
  %1180 = trunc i32 %1179 to i16
  call void @arm_2d_helper_pi_slider_set_current(ptr noundef %1173, i16 noundef signext %1180)
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  br label %1181

1181:                                             ; preds = %1111, %1104
  br label %1182

1182:                                             ; preds = %1181, %1096
  br label %1183

1183:                                             ; preds = %1182, %516, %480
  %1184 = load ptr, ptr %11, align 8, !tbaa !5
  store i8 0, ptr %1184, align 1, !tbaa !35
  br label %1185

1185:                                             ; preds = %1183, %43
  store i32 0, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %1186

1186:                                             ; preds = %1185, %1086, %1080, %1076, %1003, %995, %989, %985, %941, %933, %927, %923, %566, %558, %552, %548, %480
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  %1187 = load i32, ptr %5, align 4
  ret i32 %1187
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #4

declare ptr @arm_2d_tile_generate_child(ptr noundef, ptr noundef, ptr noundef, i1 noundef zeroext) #5

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #4

declare zeroext i1 @arm_2d_op_wait_async(ptr noundef) #5

declare zeroext i1 @arm_2d_helper_pi_slider(ptr noundef, i16 noundef signext, ptr noundef) #5

declare zeroext i1 @__arm_2d_helper_time_liner_slider(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i32 @__arm_2d_list_core_move_selection(ptr noundef, i16 noundef signext, i32 noundef) #3

declare zeroext i1 @__arm_2d_helper_pfb_is_region_active0(ptr noundef, ptr noundef, i1 noundef zeroext) #5

declare void @arm_2d_helper_pi_slider_set_current(ptr noundef, i16 noundef signext) #5

attributes #0 = { 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 #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { "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 #6 = { noreturn nounwind }
attributes #7 = { 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 = !{!"_Bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !7, i64 262}
!14 = !{!"__arm_2d_list_core_t", !15, i64 0, !20, i64 80, !31, i64 272}
!15 = !{!"", !16, i64 0}
!16 = !{!"__arm_2d_list_core_cfg_t", !17, i64 0, !6, i64 8, !7, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !19, i64 48, !6, i64 56, !18, i64 64, !18, i64 66, !18, i64 68, !18, i64 70, !18, i64 70, !18, i64 70, !6, i64 72}
!17 = !{!"arm_2d_size_t", !18, i64 0, !18, i64 2}
!18 = !{!"short", !7, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!"", !21, i64 0, !26, i64 80}
!21 = !{!"", !22, i64 0, !22, i64 24, !23, i64 48, !7, i64 72, !7, i64 74}
!22 = !{!"arm_2d_tile_t", !7, i64 0, !7, i64 4, !7, i64 16}
!23 = !{!"__arm_2d_list_work_area_t", !6, i64 0, !24, i64 8, !25, i64 16, !19, i64 20}
!24 = !{!"arm_2d_region_t", !7, i64 0, !7, i64 4}
!25 = !{!"arm_2d_list_item_param_t", !7, i64 0, !7, i64 0, !7, i64 1, !18, i64 2}
!26 = !{!"", !22, i64 0, !27, i64 24, !27, i64 32, !28, i64 40, !29, i64 80, !18, i64 100, !7, i64 102, !7, i64 103, !7, i64 103, !7, i64 103, !30, i64 104}
!27 = !{!"long", !7, i64 0}
!28 = !{!"arm_2d_helper_pi_slider_t", !7, i64 0}
!29 = !{!"", !19, i64 0, !19, i64 4, !19, i64 8, !24, i64 12}
!30 = !{!"", !18, i64 0, !19, i64 4}
!31 = !{!"", !7, i64 0, !10, i64 1, !18, i64 2, !19, i64 4, !7, i64 8}
!32 = !{i64 0, i64 2, !33, i64 2, i64 2, !33}
!33 = !{!18, !18, i64 0}
!34 = !{!14, !18, i64 0}
!35 = !{!7, !7, i64 0}
!36 = !{!14, !18, i64 2}
!37 = !{i64 0, i64 4, !35, i64 4, i64 4, !35}
!38 = !{!17, !18, i64 0}
!39 = !{!17, !18, i64 2}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = distinct !{!42, !41}
!43 = distinct !{!43, !41}
!44 = distinct !{!44, !41}
!45 = !{!46, !6, i64 0}
!46 = !{!"arm_2d_i_list_region_calculator_t", !6, i64 0, !6, i64 8, !19, i64 16}
!47 = !{!14, !6, i64 8}
!48 = !{!14, !19, i64 276}
!49 = !{!14, !7, i64 272}
!50 = !{!14, !19, i64 240}
!51 = !{!19, !19, i64 0}
!52 = !{!14, !19, i64 268}
!53 = !{!14, !18, i64 264}
!54 = !{!14, !19, i64 248}
!55 = !{!14, !19, i64 244}
!56 = !{!14, !27, i64 184}
!57 = !{!14, !6, i64 32}
!58 = !{!14, !6, i64 128}
!59 = !{!60, !6, i64 16}
!60 = !{!"arm_2d_list_item_t", !61, i64 0, !18, i64 8, !7, i64 10, !6, i64 16, !6, i64 24, !62, i64 32, !63, i64 34, !17, i64 38, !27, i64 48}
!61 = !{!"", !6, i64 0}
!62 = !{!"", !7, i64 0, !7, i64 1}
!63 = !{!"arm_2d_margin_t", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3}
!64 = !{!14, !19, i64 148}
!65 = !{!60, !18, i64 40}
!66 = !{!60, !18, i64 38}
!67 = !{!60, !7, i64 34}
!68 = !{!60, !7, i64 36}
!69 = !{!60, !7, i64 35}
!70 = !{!60, !7, i64 37}
!71 = !{!14, !18, i64 260}
!72 = !{!60, !18, i64 8}
!73 = !{!14, !6, i64 24}
!74 = !{!60, !6, i64 24}
!75 = !{!14, !6, i64 40}
!76 = !{!14, !19, i64 48}


; 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_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 }
%struct.arm_2d_size_t = type { i16, i16 }

@.str.1 = external hidden unnamed_addr constant [88 x i8], align 1
@__PRETTY_FUNCTION__.__arm_2d_list_core_show = external hidden unnamed_addr constant [116 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local i32 @__arm_2d_list_core_show(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef %2, i1 noundef zeroext %3) local_unnamed_addr #1 {
  %5 = alloca %struct.arm_2d_region_t, align 8
  %6 = alloca %struct.arm_2d_region_t, align 2
  %7 = alloca i16, align 2
  %.0221.sroa.gep = getelementptr inbounds i8, ptr %5, i64 4
  %8 = getelementptr inbounds i8, ptr %0, i64 80
  %9 = getelementptr inbounds i8, ptr %0, i64 160
  %10 = getelementptr inbounds i8, ptr %0, i64 262
  %11 = load i8, ptr %10, align 2, !tbaa !5
  switch i8 %11, label %329 [
    i8 0, label %12
    i8 1, label %135
    i8 2, label %.thread294
    i8 3, label %146
    i8 4, label %260
    i8 5, label %.thread298
    i8 6, label %273
    i8 7, label %274
    i8 8, label %.thread302
    i8 9, label %287
    i8 10, label %299
    i8 11, label %.thread307
  ]

12:                                               ; preds = %4
  %.0221.sroa.gep230 = getelementptr inbounds i8, ptr %2, i64 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4
  store i64 0, ptr %5, align 8
  %13 = icmp eq ptr %2, null
  br i1 %13, label %14, label %17

14:                                               ; preds = %12
  %15 = getelementptr inbounds i8, ptr %1, i64 8
  %16 = load i32, ptr %15, align 4
  store i32 %16, ptr %.0221.sroa.gep, align 4
  br label %17

17:                                               ; preds = %14, %12
  %.0221.sroa.phi231 = phi ptr [ %.0221.sroa.gep, %14 ], [ %.0221.sroa.gep230, %12 ]
  %.0221 = phi ptr [ %5, %14 ], [ %2, %12 ]
  %18 = load i16, ptr %0, align 8, !tbaa !28
  %19 = icmp slt i16 %18, 1
  br i1 %19, label %20, label %22

20:                                               ; preds = %17
  %21 = load i16, ptr %.0221.sroa.phi231, align 2, !tbaa !29
  store i16 %21, ptr %0, align 8, !tbaa !28
  br label %22

22:                                               ; preds = %20, %17
  %23 = getelementptr inbounds i8, ptr %0, i64 2
  %24 = load i16, ptr %23, align 2, !tbaa !30
  %25 = icmp slt i16 %24, 1
  br i1 %25, label %26, label %29

26:                                               ; preds = %22
  %27 = getelementptr inbounds i8, ptr %.0221.sroa.phi231, i64 2
  %28 = load i16, ptr %27, align 2, !tbaa !29
  store i16 %28, ptr %23, align 2, !tbaa !30
  br label %29

29:                                               ; preds = %26, %22
  %30 = call ptr @arm_2d_tile_generate_child(ptr noundef nonnull %1, ptr noundef nonnull %.0221, ptr noundef nonnull %8, i1 noundef zeroext false) #4
  %31 = icmp eq ptr %30, null
  br i1 %31, label %.thread290, label %.preheader309

.preheader309:                                    ; preds = %29
  %32 = getelementptr inbounds i8, ptr %0, i64 88
  %.sroa.6.4..sroa_idx = getelementptr inbounds i8, ptr %0, i64 90
  %33 = getelementptr inbounds i8, ptr %6, i64 4
  %34 = getelementptr inbounds i8, ptr %6, i64 6
  %35 = getelementptr inbounds i8, ptr %6, i64 2
  %36 = getelementptr inbounds i8, ptr %0, i64 104
  %.sroa.446.4.copyload = load i16, ptr %32, align 4, !tbaa !31
  %.sroa.6.4.copyload = load i16, ptr %.sroa.6.4..sroa_idx, align 2, !tbaa !31
  %37 = sext i16 %.sroa.446.4.copyload to i32
  %38 = sext i16 %.sroa.6.4.copyload to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  %.sroa.0.0.copyload = load i16, ptr %0, align 8, !tbaa !31
  %.sroa.5.0.copyload = load i16, ptr %23, align 2, !tbaa !31
  store i16 %.sroa.0.0.copyload, ptr %33, align 2, !tbaa !29
  store i16 %.sroa.5.0.copyload, ptr %34, align 2, !tbaa !29
  %39 = sext i16 %.sroa.0.0.copyload to i32
  %40 = sub nsw i32 %37, %39
  %41 = lshr i32 %40, 1
  %42 = trunc i32 %41 to i16
  store i16 %42, ptr %6, align 2, !tbaa !29
  %43 = sext i16 %.sroa.5.0.copyload to i32
  %44 = sub nsw i32 %38, %43
  %45 = lshr i32 %44, 1
  %46 = trunc i32 %45 to i16
  store i16 %46, ptr %35, align 2, !tbaa !29
  %47 = call ptr @arm_2d_tile_generate_child(ptr noundef nonnull %8, ptr noundef nonnull %6, ptr noundef nonnull %36, i1 noundef zeroext false) #4
  %48 = icmp eq ptr %47, null
  br i1 %48, label %.thread279, label %.critedge

.critedge:                                        ; preds = %.preheader309
  %49 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  %50 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null) #4
  br i1 %3, label %51, label %121

.thread279:                                       ; preds = %.preheader309
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  br label %.thread290

51:                                               ; preds = %.critedge
  %52 = getelementptr inbounds i8, ptr %0, i64 152
  %53 = load i8, ptr %52, align 8
  %54 = and i8 %53, 1
  %.not258 = icmp eq i8 %54, 0
  br i1 %.not258, label %55, label %68

55:                                               ; preds = %51
  %56 = getelementptr inbounds i8, ptr %0, i64 16
  %57 = load ptr, ptr %56, align 8, !tbaa !29
  %58 = load ptr, ptr %57, align 8, !tbaa !32
  %59 = icmp eq ptr %58, null
  br i1 %59, label %66, label %60

60:                                               ; preds = %55
  %61 = getelementptr inbounds i8, ptr %0, i64 8
  %62 = load ptr, ptr %61, align 8, !tbaa !34
  %63 = getelementptr inbounds i8, ptr %0, i64 276
  %64 = load i32, ptr %63, align 4, !tbaa !35
  %65 = call ptr %58(ptr noundef nonnull %0, ptr noundef %62, i32 noundef %64) #4
  br label %66

66:                                               ; preds = %55, %60
  %67 = getelementptr inbounds i8, ptr %0, i64 272
  store i8 0, ptr %67, align 8, !tbaa !36
  br label %68

68:                                               ; preds = %66, %51
  %69 = getelementptr inbounds i8, ptr %0, i64 240
  %70 = load i32, ptr %69, align 8, !tbaa !37
  %71 = getelementptr inbounds i8, ptr %0, i64 264
  %72 = getelementptr inbounds i8, ptr %0, i64 268
  %73 = load i32, ptr %72, align 4, !tbaa !38
  %74 = icmp eq i32 %73, 0
  br i1 %74, label %75, label %77

75:                                               ; preds = %68
  %76 = load i16, ptr %71, align 8, !tbaa !39
  %.not259 = icmp eq i16 %76, 0
  br i1 %.not259, label %77, label %.critedge266.thread

77:                                               ; preds = %75, %68
  %78 = getelementptr inbounds i8, ptr %0, i64 70
  %79 = load i16, ptr %78, align 2
  %80 = and i16 %79, 4
  %.not260 = icmp eq i16 %80, 0
  br i1 %.not260, label %94, label %81

81:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %7) #4
  store i16 0, ptr %7, align 2, !tbaa !31
  %82 = getelementptr inbounds i8, ptr %0, i64 200
  %83 = getelementptr inbounds i8, ptr %0, i64 248
  %84 = load i32, ptr %83, align 8, !tbaa !40
  %85 = trunc i32 %84 to i16
  %86 = call zeroext i1 @arm_2d_helper_pi_slider(ptr noundef nonnull %82, i16 noundef signext %85, ptr noundef nonnull %7) #4
  %.pre312 = load i16, ptr %7, align 2, !tbaa !31
  br i1 %86, label %87, label %._crit_edge

._crit_edge:                                      ; preds = %81
  %.pre315 = sext i16 %.pre312 to i32
  br label %93

87:                                               ; preds = %81
  %88 = getelementptr inbounds i8, ptr %0, i64 263
  %89 = load i8, ptr %88, align 1
  %90 = and i8 %89, -2
  store i8 %90, ptr %88, align 1
  %91 = sext i16 %.pre312 to i32
  %92 = getelementptr inbounds i8, ptr %0, i64 244
  store i32 %91, ptr %92, align 4, !tbaa !41
  br label %93

93:                                               ; preds = %._crit_edge, %87
  %.pre-phi = phi i32 [ %.pre315, %._crit_edge ], [ %91, %87 ]
  store i32 %.pre-phi, ptr %69, align 8, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %7) #4
  br label %.critedge266

94:                                               ; preds = %77
  %95 = getelementptr inbounds i8, ptr %0, i64 244
  %96 = load i32, ptr %95, align 4, !tbaa !41
  %97 = getelementptr inbounds i8, ptr %0, i64 248
  %98 = load i32, ptr %97, align 8, !tbaa !40
  %99 = getelementptr inbounds i8, ptr %0, i64 184
  %100 = load i64, ptr %99, align 8, !tbaa !42
  %101 = getelementptr inbounds i8, ptr %0, i64 192
  %102 = call zeroext i1 @__arm_2d_helper_time_liner_slider(i32 noundef %96, i32 noundef %98, i64 noundef %100, ptr noundef nonnull %69, ptr noundef nonnull %101) #4
  %.pre314 = load i32, ptr %69, align 8, !tbaa !37
  br i1 %102, label %103, label %115

103:                                              ; preds = %94
  store i32 %.pre314, ptr %97, align 8, !tbaa !40
  store i32 %.pre314, ptr %95, align 4, !tbaa !41
  %104 = getelementptr inbounds i8, ptr %0, i64 263
  %105 = load i8, ptr %104, align 1
  %106 = and i8 %105, -2
  store i8 %106, ptr %104, align 1
  br label %.critedge266

.critedge266:                                     ; preds = %103, %93
  %107 = phi i32 [ %.pre314, %103 ], [ %.pre-phi, %93 ]
  %.pr = load i16, ptr %71, align 8, !tbaa !39
  %.not261 = icmp eq i16 %.pr, 0
  br i1 %.not261, label %115, label %.critedge266.thread

.critedge266.thread:                              ; preds = %75, %.critedge266
  %108 = phi i32 [ %107, %.critedge266 ], [ %70, %75 ]
  %109 = phi i16 [ %.pr, %.critedge266 ], [ %76, %75 ]
  %110 = load i8, ptr %52, align 8
  %111 = and i8 %110, 1
  %.not262 = icmp eq i8 %111, 0
  br i1 %.not262, label %115, label %112

112:                                              ; preds = %.critedge266.thread
  %113 = load i32, ptr %72, align 4, !tbaa !38
  %114 = call i32 @__arm_2d_list_core_move_selection(ptr noundef nonnull %0, i16 noundef signext %109, i32 noundef %113)
  store i16 0, ptr %71, align 8, !tbaa !39
  store i32 0, ptr %72, align 4, !tbaa !38
  %.pre313 = load i32, ptr %69, align 8, !tbaa !37
  br label %115

115:                                              ; preds = %94, %.critedge266, %.critedge266.thread, %112
  %116 = phi i32 [ %.pre314, %94 ], [ %107, %.critedge266 ], [ %108, %.critedge266.thread ], [ %.pre313, %112 ]
  %.not263 = icmp eq i32 %70, %116
  br i1 %.not263, label %.thread287, label %117

117:                                              ; preds = %115
  %118 = getelementptr inbounds i8, ptr %0, i64 263
  %119 = load i8, ptr %118, align 1
  %120 = or i8 %119, 2
  store i8 %120, ptr %118, align 1
  br label %.thread287

.thread287:                                       ; preds = %115, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  br label %122

.thread290:                                       ; preds = %29, %.thread279
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  br label %.sink.split

121:                                              ; preds = %.critedge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  br label %122

122:                                              ; preds = %121, %.thread287
  %123 = getelementptr inbounds i8, ptr %0, i64 16
  %124 = load ptr, ptr %123, align 8, !tbaa !29
  %125 = load ptr, ptr %124, align 8, !tbaa !32
  %126 = icmp eq ptr %125, null
  br i1 %126, label %.sink.split, label %127

127:                                              ; preds = %122
  %128 = getelementptr inbounds i8, ptr %0, i64 8
  %129 = load ptr, ptr %128, align 8, !tbaa !34
  %130 = getelementptr inbounds i8, ptr %0, i64 276
  %131 = load i32, ptr %130, align 4, !tbaa !35
  %132 = call ptr %125(ptr noundef nonnull %0, ptr noundef %129, i32 noundef %131) #4
  %133 = icmp eq ptr %132, null
  br i1 %133, label %.sink.split, label %134

134:                                              ; preds = %127
  store i8 1, ptr %10, align 1, !tbaa !29
  br label %135

135:                                              ; preds = %134, %4
  %136 = getelementptr inbounds i8, ptr %0, i64 32
  %137 = load ptr, ptr %136, align 8, !tbaa !43
  %138 = icmp eq ptr %137, null
  br i1 %138, label %.thread294, label %139

139:                                              ; preds = %135
  %140 = getelementptr inbounds i8, ptr %0, i64 104
  %141 = call i32 %137(ptr noundef nonnull %0, ptr noundef nonnull %140, i1 noundef zeroext %3) #4
  %142 = icmp eq i32 %141, 1
  br i1 %142, label %329, label %143

143:                                              ; preds = %139
  %144 = icmp slt i32 %141, 0
  br i1 %144, label %.sink.split, label %145

145:                                              ; preds = %143
  %.not264 = icmp eq i32 %141, 0
  br i1 %.not264, label %.thread294, label %.sink.split

.thread294:                                       ; preds = %135, %4, %145
  br label %.sink.split

146:                                              ; preds = %4
  %147 = getelementptr inbounds i8, ptr %0, i64 16
  %148 = load ptr, ptr %147, align 8, !tbaa !29
  %.not248 = icmp eq ptr %148, null
  br i1 %.not248, label %149, label %150

149:                                              ; preds = %146
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 324, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_list_core_show) #5
  unreachable

150:                                              ; preds = %292, %146
  %151 = getelementptr inbounds i8, ptr %0, i64 128
  %152 = load ptr, ptr %151, align 8, !tbaa !44
  %.not249 = icmp eq ptr %152, null
  br i1 %.not249, label %153, label %154

153:                                              ; preds = %150
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 330, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_list_core_show) #5
  unreachable

154:                                              ; preds = %150
  %155 = getelementptr inbounds i8, ptr %152, i64 10
  %156 = load i16, ptr %155, align 2
  %157 = and i16 %156, 4
  %.not250 = icmp eq i16 %157, 0
  br i1 %.not250, label %158, label %160

158:                                              ; preds = %154
  %159 = getelementptr inbounds i8, ptr %152, i64 16
  store ptr %0, ptr %159, align 8, !tbaa !45
  br label %160

160:                                              ; preds = %154, %158
  %161 = getelementptr inbounds i8, ptr %0, i64 148
  %162 = load i32, ptr %161, align 4, !tbaa !50
  %163 = icmp eq i32 %162, 1
  %164 = lshr i16 %156, 4
  br i1 %163, label %165, label %187

165:                                              ; preds = %160
  %166 = and i16 %164, 12
  switch i16 %166, label %173 [
    i16 4, label %183
    i16 8, label %167
  ]

167:                                              ; preds = %165
  %168 = getelementptr inbounds i8, ptr %0, i64 114
  %169 = load i16, ptr %168, align 2, !tbaa !29
  %170 = getelementptr inbounds i8, ptr %152, i64 40
  %171 = load i16, ptr %170, align 2, !tbaa !51
  %172 = sub i16 %169, %171
  br label %183

173:                                              ; preds = %165
  %174 = getelementptr inbounds i8, ptr %0, i64 114
  %175 = load i16, ptr %174, align 2, !tbaa !29
  %176 = sext i16 %175 to i32
  %177 = getelementptr inbounds i8, ptr %152, i64 40
  %178 = load i16, ptr %177, align 2, !tbaa !51
  %179 = sext i16 %178 to i32
  %180 = sub nsw i32 %176, %179
  %181 = lshr i32 %180, 1
  %182 = trunc i32 %181 to i16
  br label %183

183:                                              ; preds = %173, %167, %165
  %.0222 = phi i16 [ %182, %173 ], [ %172, %167 ], [ 0, %165 ]
  %184 = getelementptr inbounds i8, ptr %0, i64 138
  %185 = load i16, ptr %184, align 2, !tbaa !29
  %186 = add i16 %185, %.0222
  store i16 %186, ptr %184, align 2, !tbaa !29
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 136
  %.pre = load i16, ptr %.phi.trans.insert, align 8, !tbaa !29
  br label %209

187:                                              ; preds = %160
  %188 = and i16 %164, 3
  switch i16 %188, label %195 [
    i16 1, label %205
    i16 2, label %189
  ]

189:                                              ; preds = %187
  %190 = getelementptr inbounds i8, ptr %0, i64 112
  %191 = load i16, ptr %190, align 4, !tbaa !29
  %192 = getelementptr inbounds i8, ptr %152, i64 38
  %193 = load i16, ptr %192, align 2, !tbaa !52
  %194 = sub i16 %191, %193
  br label %205

195:                                              ; preds = %187
  %196 = getelementptr inbounds i8, ptr %0, i64 112
  %197 = load i16, ptr %196, align 4, !tbaa !29
  %198 = sext i16 %197 to i32
  %199 = getelementptr inbounds i8, ptr %152, i64 38
  %200 = load i16, ptr %199, align 2, !tbaa !52
  %201 = sext i16 %200 to i32
  %202 = sub nsw i32 %198, %201
  %203 = lshr i32 %202, 1
  %204 = trunc i32 %203 to i16
  br label %205

205:                                              ; preds = %195, %189, %187
  %.1 = phi i16 [ %204, %195 ], [ %194, %189 ], [ 0, %187 ]
  %206 = getelementptr inbounds i8, ptr %0, i64 136
  %207 = load i16, ptr %206, align 8, !tbaa !29
  %208 = add i16 %207, %.1
  store i16 %208, ptr %206, align 8, !tbaa !29
  %.phi.trans.insert310 = getelementptr inbounds i8, ptr %0, i64 138
  %.pre311 = load i16, ptr %.phi.trans.insert310, align 2, !tbaa !29
  br label %209

209:                                              ; preds = %205, %183
  %210 = phi i16 [ %.pre311, %205 ], [ %186, %183 ]
  %211 = phi i16 [ %208, %205 ], [ %.pre, %183 ]
  %212 = getelementptr inbounds i8, ptr %152, i64 34
  %213 = load i8, ptr %212, align 2, !tbaa !53
  %214 = zext i8 %213 to i16
  %215 = getelementptr inbounds i8, ptr %0, i64 136
  %216 = add i16 %211, %214
  store i16 %216, ptr %215, align 8, !tbaa !29
  %217 = getelementptr inbounds i8, ptr %152, i64 36
  %218 = load i8, ptr %217, align 2, !tbaa !54
  %219 = zext i8 %218 to i16
  %220 = getelementptr inbounds i8, ptr %0, i64 138
  %221 = add i16 %210, %219
  store i16 %221, ptr %220, align 2, !tbaa !29
  %222 = load i8, ptr %212, align 2, !tbaa !53
  %223 = zext i8 %222 to i16
  %224 = getelementptr inbounds i8, ptr %152, i64 35
  %225 = load i8, ptr %224, align 1, !tbaa !55
  %226 = zext i8 %225 to i16
  %227 = add nuw nsw i16 %226, %223
  %228 = getelementptr inbounds i8, ptr %0, i64 140
  %229 = load i16, ptr %228, align 4, !tbaa !29
  %230 = sub i16 %229, %227
  store i16 %230, ptr %228, align 4, !tbaa !29
  %231 = icmp eq i16 %229, %227
  br i1 %231, label %287, label %232

232:                                              ; preds = %209
  %233 = load i8, ptr %217, align 2, !tbaa !54
  %234 = zext i8 %233 to i16
  %235 = getelementptr inbounds i8, ptr %152, i64 37
  %236 = load i8, ptr %235, align 1, !tbaa !56
  %237 = zext i8 %236 to i16
  %238 = add nuw nsw i16 %237, %234
  %239 = getelementptr inbounds i8, ptr %0, i64 142
  %240 = load i16, ptr %239, align 2, !tbaa !29
  %241 = sub i16 %240, %238
  store i16 %241, ptr %239, align 2, !tbaa !29
  %242 = icmp eq i16 %240, %238
  br i1 %242, label %287, label %243

243:                                              ; preds = %232
  %244 = getelementptr inbounds i8, ptr %0, i64 260
  %245 = load i16, ptr %244, align 4, !tbaa !57
  %246 = getelementptr inbounds i8, ptr %152, i64 8
  %247 = load i16, ptr %246, align 8, !tbaa !58
  %248 = icmp eq i16 %245, %247
  %249 = getelementptr inbounds i8, ptr %0, i64 144
  %250 = load i8, ptr %249, align 8
  %251 = select i1 %248, i8 2, i8 0
  %252 = and i8 %250, -3
  %253 = or disjoint i8 %252, %251
  store i8 %253, ptr %249, align 8
  %254 = getelementptr inbounds i8, ptr %0, i64 104
  %255 = tail call zeroext i1 @__arm_2d_helper_pfb_is_region_active0(ptr noundef nonnull %254, ptr noundef nonnull %215, i1 noundef zeroext true) #4
  br i1 %255, label %256, label %287

256:                                              ; preds = %243
  %257 = tail call ptr @arm_2d_tile_generate_child(ptr noundef nonnull %254, ptr noundef nonnull %215, ptr noundef nonnull %9, i1 noundef zeroext false) #4
  %258 = icmp eq ptr %257, null
  br i1 %258, label %287, label %259

259:                                              ; preds = %256
  store i8 4, ptr %10, align 1, !tbaa !29
  br label %260

260:                                              ; preds = %259, %4
  %261 = getelementptr inbounds i8, ptr %0, i64 24
  %262 = load ptr, ptr %261, align 8, !tbaa !59
  %263 = icmp eq ptr %262, null
  br i1 %263, label %.thread298, label %264

264:                                              ; preds = %260
  %265 = getelementptr inbounds i8, ptr %0, i64 128
  %266 = load ptr, ptr %265, align 8, !tbaa !44
  %267 = getelementptr inbounds i8, ptr %0, i64 144
  %268 = tail call i32 %262(ptr noundef %266, ptr noundef nonnull %9, i1 noundef zeroext %3, ptr noundef nonnull %267) #4
  %269 = icmp eq i32 %268, 1
  br i1 %269, label %329, label %270

270:                                              ; preds = %264
  %271 = icmp slt i32 %268, 0
  br i1 %271, label %.sink.split, label %272

272:                                              ; preds = %270
  %.not251 = icmp eq i32 %268, 0
  br i1 %.not251, label %.thread298, label %.sink.split

.thread298:                                       ; preds = %260, %4, %272
  br label %.sink.split

273:                                              ; preds = %4
  store i8 7, ptr %10, align 1, !tbaa !29
  br label %274

274:                                              ; preds = %273, %4
  %275 = getelementptr inbounds i8, ptr %0, i64 128
  %276 = load ptr, ptr %275, align 8, !tbaa !44
  %277 = getelementptr inbounds i8, ptr %276, i64 24
  %278 = load ptr, ptr %277, align 8, !tbaa !60
  %279 = icmp eq ptr %278, null
  br i1 %279, label %.thread302, label %280

280:                                              ; preds = %274
  %281 = getelementptr inbounds i8, ptr %0, i64 144
  %282 = tail call i32 %278(ptr noundef nonnull %276, ptr noundef nonnull %9, i1 noundef zeroext %3, ptr noundef nonnull %281) #4
  %283 = icmp eq i32 %282, 1
  br i1 %283, label %329, label %284

284:                                              ; preds = %280
  %285 = icmp slt i32 %282, 0
  br i1 %285, label %.sink.split, label %286

286:                                              ; preds = %284
  %.not = icmp eq i32 %282, 0
  br i1 %.not, label %.thread302, label %.sink.split

.thread302:                                       ; preds = %274, %4, %286
  br label %.sink.split

287:                                              ; preds = %4, %256, %243, %232, %209
  %288 = getelementptr inbounds i8, ptr %0, i64 16
  %289 = load ptr, ptr %288, align 8, !tbaa !29
  %290 = load ptr, ptr %289, align 8, !tbaa !32
  %291 = icmp eq ptr %290, null
  br i1 %291, label %.thread304, label %292

292:                                              ; preds = %287
  %293 = getelementptr inbounds i8, ptr %0, i64 8
  %294 = load ptr, ptr %293, align 8, !tbaa !34
  %295 = getelementptr inbounds i8, ptr %0, i64 276
  %296 = load i32, ptr %295, align 4, !tbaa !35
  %297 = tail call ptr %290(ptr noundef nonnull %0, ptr noundef %294, i32 noundef %296) #4
  %298 = icmp eq ptr %297, null
  br i1 %298, label %.thread304, label %150

.thread304:                                       ; preds = %287, %292
  store i8 10, ptr %10, align 1, !tbaa !29
  br label %299

299:                                              ; preds = %.thread304, %4
  %300 = getelementptr inbounds i8, ptr %0, i64 40
  %301 = load ptr, ptr %300, align 8, !tbaa !61
  %302 = icmp eq ptr %301, null
  br i1 %302, label %.thread307, label %303

303:                                              ; preds = %299
  %304 = getelementptr inbounds i8, ptr %0, i64 104
  %305 = tail call i32 %301(ptr noundef nonnull %0, ptr noundef nonnull %304, i1 noundef zeroext %3) #4
  %306 = icmp eq i32 %305, 1
  br i1 %306, label %329, label %307

307:                                              ; preds = %303
  %308 = icmp slt i32 %305, 0
  br i1 %308, label %.sink.split, label %309

309:                                              ; preds = %307
  %.not252 = icmp eq i32 %305, 0
  br i1 %.not252, label %.thread307, label %.sink.split

.thread307:                                       ; preds = %299, %4, %309
  %310 = getelementptr inbounds i8, ptr %0, i64 263
  %311 = load i8, ptr %310, align 1
  %312 = and i8 %311, 1
  %.not253 = icmp eq i8 %312, 0
  br i1 %.not253, label %313, label %.sink.split

313:                                              ; preds = %.thread307
  %314 = getelementptr inbounds i8, ptr %0, i64 48
  %315 = load i32, ptr %314, align 8, !tbaa !62
  %316 = icmp sgt i32 %315, 0
  br i1 %316, label %317, label %.sink.split

317:                                              ; preds = %313
  %318 = getelementptr inbounds i8, ptr %0, i64 276
  %319 = load i32, ptr %318, align 4, !tbaa !35
  %320 = srem i32 %319, %315
  %321 = getelementptr inbounds i8, ptr %0, i64 240
  %322 = load i32, ptr %321, align 8, !tbaa !37
  %323 = sub nsw i32 %322, %319
  store i32 %320, ptr %318, align 4, !tbaa !35
  %324 = add nsw i32 %323, %320
  store i32 %324, ptr %321, align 8, !tbaa !37
  %325 = getelementptr inbounds i8, ptr %0, i64 244
  store i32 %324, ptr %325, align 4, !tbaa !41
  %326 = getelementptr inbounds i8, ptr %0, i64 248
  store i32 %324, ptr %326, align 8, !tbaa !40
  %327 = getelementptr inbounds i8, ptr %0, i64 200
  %328 = trunc i32 %324 to i16
  tail call void @arm_2d_helper_pi_slider_set_current(ptr noundef nonnull %327, i16 noundef signext %328) #4
  br label %.sink.split

.sink.split:                                      ; preds = %127, %313, %317, %.thread307, %122, %.thread290, %309, %307, %286, %284, %272, %270, %145, %143, %.thread294, %.thread298, %.thread302
  %.sink = phi i8 [ 9, %.thread302 ], [ 6, %.thread298 ], [ 3, %.thread294 ], [ 0, %143 ], [ 2, %145 ], [ 0, %270 ], [ 5, %272 ], [ 0, %284 ], [ 8, %286 ], [ 0, %307 ], [ 11, %309 ], [ 0, %.thread290 ], [ 0, %122 ], [ 0, %.thread307 ], [ 0, %317 ], [ 0, %313 ], [ 0, %127 ]
  %.0.ph = phi i32 [ 1, %.thread302 ], [ 1, %.thread298 ], [ 1, %.thread294 ], [ %141, %143 ], [ %141, %145 ], [ %268, %270 ], [ %268, %272 ], [ %282, %284 ], [ %282, %286 ], [ %305, %307 ], [ %305, %309 ], [ 0, %.thread290 ], [ 0, %122 ], [ 0, %.thread307 ], [ 0, %317 ], [ 0, %313 ], [ 0, %127 ]
  store i8 %.sink, ptr %10, align 1, !tbaa !29
  br label %329

329:                                              ; preds = %.sink.split, %4, %303, %280, %264, %139
  %.0 = phi i32 [ 1, %139 ], [ 1, %264 ], [ 1, %280 ], [ 1, %303 ], [ 0, %4 ], [ %.0.ph, %.sink.split ]
  ret i32 %.0
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2

declare ptr @arm_2d_tile_generate_child(ptr noundef, ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2

declare zeroext i1 @arm_2d_op_wait_async(ptr noundef) local_unnamed_addr #3

declare zeroext i1 @arm_2d_helper_pi_slider(ptr noundef, i16 noundef signext, ptr noundef) local_unnamed_addr #3

declare zeroext i1 @__arm_2d_helper_time_liner_slider(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @__arm_2d_list_core_move_selection(ptr noundef, i16 noundef signext, i32 noundef) local_unnamed_addr #1

declare zeroext i1 @__arm_2d_helper_pfb_is_region_active0(ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #3

declare void @arm_2d_helper_pi_slider_set_current(ptr noundef, i16 noundef signext) local_unnamed_addr #3

attributes #0 = { 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 #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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "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 #4 = { nounwind }
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, !11, i64 262}
!6 = !{!"__arm_2d_list_core_t", !7, i64 0, !15, i64 80, !26, i64 272}
!7 = !{!"", !8, i64 0}
!8 = !{!"__arm_2d_list_core_cfg_t", !9, i64 0, !13, i64 8, !11, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !14, i64 48, !13, i64 56, !10, i64 64, !10, i64 66, !10, i64 68, !10, i64 70, !10, i64 70, !10, i64 70, !13, i64 72}
!9 = !{!"arm_2d_size_t", !10, i64 0, !10, i64 2}
!10 = !{!"short", !11, i64 0}
!11 = !{!"omnipotent char", !12, i64 0}
!12 = !{!"Simple C/C++ TBAA"}
!13 = !{!"any pointer", !11, i64 0}
!14 = !{!"int", !11, i64 0}
!15 = !{!"", !16, i64 0, !21, i64 80}
!16 = !{!"", !17, i64 0, !17, i64 24, !18, i64 48, !11, i64 72, !11, i64 74}
!17 = !{!"arm_2d_tile_t", !11, i64 0, !11, i64 4, !11, i64 16}
!18 = !{!"__arm_2d_list_work_area_t", !13, i64 0, !19, i64 8, !20, i64 16, !14, i64 20}
!19 = !{!"arm_2d_region_t", !11, i64 0, !11, i64 4}
!20 = !{!"arm_2d_list_item_param_t", !11, i64 0, !11, i64 0, !11, i64 1, !10, i64 2}
!21 = !{!"", !17, i64 0, !22, i64 24, !22, i64 32, !23, i64 40, !24, i64 80, !10, i64 100, !11, i64 102, !11, i64 103, !11, i64 103, !11, i64 103, !25, i64 104}
!22 = !{!"long", !11, i64 0}
!23 = !{!"arm_2d_helper_pi_slider_t", !11, i64 0}
!24 = !{!"", !14, i64 0, !14, i64 4, !14, i64 8, !19, i64 12}
!25 = !{!"", !10, i64 0, !14, i64 4}
!26 = !{!"", !11, i64 0, !27, i64 1, !10, i64 2, !14, i64 4, !11, i64 8}
!27 = !{!"_Bool", !11, i64 0}
!28 = !{!6, !10, i64 0}
!29 = !{!11, !11, i64 0}
!30 = !{!6, !10, i64 2}
!31 = !{!10, !10, i64 0}
!32 = !{!33, !13, i64 0}
!33 = !{!"arm_2d_i_list_region_calculator_t", !13, i64 0, !13, i64 8, !14, i64 16}
!34 = !{!6, !13, i64 8}
!35 = !{!6, !14, i64 276}
!36 = !{!6, !11, i64 272}
!37 = !{!6, !14, i64 240}
!38 = !{!6, !14, i64 268}
!39 = !{!6, !10, i64 264}
!40 = !{!6, !14, i64 248}
!41 = !{!6, !14, i64 244}
!42 = !{!6, !22, i64 184}
!43 = !{!6, !13, i64 32}
!44 = !{!6, !13, i64 128}
!45 = !{!46, !13, i64 16}
!46 = !{!"arm_2d_list_item_t", !47, i64 0, !10, i64 8, !11, i64 10, !13, i64 16, !13, i64 24, !48, i64 32, !49, i64 34, !9, i64 38, !22, i64 48}
!47 = !{!"", !13, i64 0}
!48 = !{!"", !11, i64 0, !11, i64 1}
!49 = !{!"arm_2d_margin_t", !11, i64 0, !11, i64 1, !11, i64 2, !11, i64 3}
!50 = !{!6, !14, i64 148}
!51 = !{!46, !10, i64 40}
!52 = !{!46, !10, i64 38}
!53 = !{!46, !11, i64 34}
!54 = !{!46, !11, i64 36}
!55 = !{!46, !11, i64 35}
!56 = !{!46, !11, i64 37}
!57 = !{!6, !10, i64 260}
!58 = !{!46, !10, i64 8}
!59 = !{!6, !13, i64 24}
!60 = !{!46, !13, i64 24}
!61 = !{!6, !13, i64 40}
!62 = !{!6, !14, i64 48}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass