; LLVM IR from ARM-software/Arm-2D :: Library/Source/arm_2d_alpha_blending.ll_ (arm_2d_cccn888_sw_tile_copy_with_masks)

; 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_op_control = type { %struct.anon.10 }
%struct.anon.10 = type { ptr, %struct.anon.11, %struct.anon.12, i16, i16, i16, i16, ptr, %union.anon.13 }
%struct.anon.11 = type { ptr, ptr }
%struct.anon.12 = type { ptr, ptr }
%union.anon.13 = type { %struct.arm_2d_op_trans_msk_opa_t }
%struct.arm_2d_op_trans_msk_opa_t = type { %struct.arm_2d_op_core_t, %struct.anon.67, %struct.anon.68, %union.anon.69, %struct.anon.71, %struct.anon.72, %struct.__arm_2d_transform_info_t, i8 }
%struct.arm_2d_op_core_t = type { %struct.anon.14, i64 }
%struct.anon.14 = type { ptr, ptr, %struct.anon.15, i8, %union.arm_2d_op_status_t, %struct.arm_2d_op_evt_t }
%struct.anon.15 = type { i8 }
%union.arm_2d_op_status_t = type { %struct.anon.16 }
%struct.anon.16 = type { i16 }
%struct.arm_2d_op_evt_t = type { ptr, ptr }
%struct.anon.67 = type { ptr, ptr }
%struct.anon.68 = type { ptr }
%union.anon.69 = type { %struct.anon.70 }
%struct.anon.70 = type { i32 }
%struct.anon.71 = type { ptr, %struct.arm_2d_tile_t }
%struct.arm_2d_tile_t = type { %union.anon.48, %union.anon.57, %union.anon.58 }
%union.anon.48 = type { %struct.anon.49 }
%struct.anon.49 = type { i8, %union.arm_2d_color_info_t, %union.anon.50 }
%union.arm_2d_color_info_t = type { %struct.anon.1 }
%struct.anon.1 = type { i8 }
%union.anon.50 = type { i16 }
%union.anon.57 = type { %struct.arm_2d_region_t }
%struct.arm_2d_region_t = type { %union.anon.3, %union.anon.4 }
%union.anon.3 = type { %struct.arm_2d_location_t }
%struct.arm_2d_location_t = type { i16, i16 }
%union.anon.4 = type { %struct.arm_2d_size_t }
%struct.arm_2d_size_t = type { i16, i16 }
%union.anon.58 = type { ptr }
%struct.anon.72 = type { ptr, ptr }
%struct.__arm_2d_transform_info_t = type { float, float, float, %struct.arm_2d_point_float_t, %union.anon.59, %struct.anon.60 }
%struct.arm_2d_point_float_t = type { float, float }
%union.anon.59 = type { i32 }
%struct.anon.60 = type { %struct.arm_2d_location_t, %struct.anon.61 }
%struct.anon.61 = type { %struct.arm_2d_region_t, %struct.arm_2d_tile_t }
%struct.__arm_2d_sub_task_t = type { %struct.anon.0 }
%struct.anon.0 = type <{ ptr, ptr, i8, i32, [3 x i8], %union.anon }>
%union.anon = type { %struct.__arm_2d_param_copy_orig_msk_t }
%struct.__arm_2d_param_copy_orig_msk_t = type { %union.anon.7, %struct.__arm_2d_tile_param_t, %struct.__arm_2d_tile_param_t }
%union.anon.7 = type { %struct.__arm_2d_param_copy_orig_t }
%struct.__arm_2d_param_copy_orig_t = type { %union.anon.6, %struct.__arm_2d_tile_param_t }
%union.anon.6 = type { %struct.__arm_2d_param_copy_t }
%struct.__arm_2d_param_copy_t = type { %struct.__arm_2d_tile_param_t, %struct.__arm_2d_tile_param_t, %struct.arm_2d_size_t }
%struct.__arm_2d_tile_param_t = type { ptr, i32, i16, %union.arm_2d_color_info_t, i8, %struct.arm_2d_region_t, %struct.arm_2d_region_t, ptr }
%struct.arm_2d_op_src_msk_t = type { %struct.arm_2d_op_core_t, %struct.anon.36, %struct.anon.37, i32, %struct.anon.38 }
%struct.anon.36 = type { ptr, ptr }
%struct.anon.37 = type { ptr }
%struct.anon.38 = type { ptr, ptr }
%struct.anon.79 = type { %union.arm_2d_color_info_t, %union.anon.80, i8, i8, %union.anon.82, %union.anon.86 }
%union.anon.80 = type { %struct.anon.81 }
%struct.anon.81 = type { i8 }
%union.anon.82 = type { %struct.anon.83 }
%struct.anon.83 = type { i8, i8 }
%union.anon.86 = type { [2 x ptr] }
%struct.__arm_2d_param_copy_msk_t = type { %union.anon.5, %struct.__arm_2d_tile_param_t, %struct.__arm_2d_tile_param_t }
%union.anon.5 = type { %struct.__arm_2d_param_copy_t }

@ARM_2D_CTRL = external global %struct.__arm_2d_op_control, align 8
@.str.5 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [104 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [73 x i8], align 1
@__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks = external hidden unnamed_addr constant [77 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_masks_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_masks_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_msk_1h_des_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_msk_1h_des_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_1h_des_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_1h_des_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_msk_des_chn_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_msk_des_chn_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_des_chn_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_des_chn_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @__arm_2d_cccn888_sw_tile_copy_with_masks(ptr noundef %0) #2 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #3
  %7 = load ptr, ptr %3, align 8, !tbaa !5
  %8 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %7, i32 0, i32 0
  %9 = getelementptr inbounds %struct.anon.0, ptr %8, i32 0, i32 1
  %10 = load ptr, ptr %9, align 8, !tbaa !9
  store ptr %10, ptr %4, align 8, !tbaa !5
  %11 = load ptr, ptr %4, align 8, !tbaa !5
  %12 = icmp eq ptr null, %11
  br i1 %12, label %13, label %14

13:                                               ; preds = %1
  store ptr getelementptr inbounds (%struct.anon.10, ptr @ARM_2D_CTRL, i32 0, i32 8), ptr %4, align 8, !tbaa !5
  br label %14

14:                                               ; preds = %13, %1
  %15 = load ptr, ptr %4, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct.arm_2d_op_src_msk_t, ptr %15, i32 0, i32 0
  %17 = getelementptr inbounds %struct.arm_2d_op_core_t, ptr %16, i32 0, i32 0
  %18 = getelementptr inbounds %struct.anon.14, ptr %17, i32 0, i32 1
  %19 = load ptr, ptr %18, align 8, !tbaa !12
  %20 = getelementptr inbounds %struct.anon.79, ptr %19, i32 0, i32 0
  %21 = load i8, ptr %20, align 8
  %22 = lshr i8 %21, 1
  %23 = and i8 %22, 7
  %24 = zext i8 %23 to i32
  %25 = icmp eq i32 5, %24
  br i1 %25, label %26, label %27

26:                                               ; preds = %14
  br label %28

27:                                               ; preds = %14
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.6, i32 noundef 495, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #4
  unreachable

28:                                               ; preds = %26
  %29 = load ptr, ptr %4, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.arm_2d_op_src_msk_t, ptr %29, i32 0, i32 4
  %31 = getelementptr inbounds %struct.anon.38, ptr %30, i32 0, i32 0
  %32 = load ptr, ptr %31, align 8, !tbaa !22
  %33 = icmp eq ptr null, %32
  br i1 %33, label %34, label %40

34:                                               ; preds = %28
  %35 = load ptr, ptr %4, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.arm_2d_op_src_msk_t, ptr %35, i32 0, i32 4
  %37 = getelementptr inbounds %struct.anon.38, ptr %36, i32 0, i32 1
  %38 = load ptr, ptr %37, align 8, !tbaa !23
  %39 = icmp eq ptr null, %38
  br i1 %39, label %41, label %40

40:                                               ; preds = %34, %28
  br label %42

41:                                               ; preds = %34
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.6, i32 noundef 499, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #4
  unreachable

42:                                               ; preds = %40
  %43 = load ptr, ptr %3, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %43, i32 0, i32 0
  %45 = getelementptr inbounds %struct.anon.0, ptr %44, i32 0, i32 5
  %46 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %45, i32 0, i32 1
  %47 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %46, i32 0, i32 4
  %48 = load i8, ptr %47, align 1
  %49 = and i8 %48, 1
  %50 = zext i8 %49 to i32
  %51 = icmp ne i32 %50, 0
  br i1 %51, label %62, label %52

52:                                               ; preds = %42
  %53 = load ptr, ptr %3, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %53, i32 0, i32 0
  %55 = getelementptr inbounds %struct.anon.0, ptr %54, i32 0, i32 5
  %56 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %55, i32 0, i32 2
  %57 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %56, i32 0, i32 4
  %58 = load i8, ptr %57, align 1
  %59 = and i8 %58, 1
  %60 = zext i8 %59 to i32
  %61 = icmp ne i32 %60, 0
  br i1 %61, label %62, label %63

62:                                               ; preds = %52, %42
  store i32 -2, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %1087

63:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.arm_2d_op_src_msk_t, ptr %64, i32 0, i32 3
  %66 = load i32, ptr %65, align 8, !tbaa !24
  store i32 %66, ptr %6, align 4, !tbaa !25
  %67 = load ptr, ptr %3, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %67, i32 0, i32 0
  %69 = getelementptr inbounds %struct.anon.0, ptr %68, i32 0, i32 5
  %70 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %69, i32 0, i32 1
  %71 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %70, i32 0, i32 3
  %72 = load i8, ptr %71, align 2, !tbaa !26
  %73 = zext i8 %72 to i32
  %74 = icmp eq i32 107, %73
  br i1 %74, label %75, label %248

75:                                               ; preds = %63
  %76 = load ptr, ptr %3, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %76, i32 0, i32 0
  %78 = getelementptr inbounds %struct.anon.0, ptr %77, i32 0, i32 5
  %79 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %78, i32 0, i32 2
  %80 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %79, i32 0, i32 3
  %81 = load i8, ptr %80, align 2, !tbaa !26
  %82 = zext i8 %81 to i32
  %83 = icmp eq i32 107, %82
  br i1 %83, label %84, label %248

84:                                               ; preds = %75
  %85 = load ptr, ptr %3, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %85, i32 0, i32 0
  %87 = getelementptr inbounds %struct.anon.0, ptr %86, i32 0, i32 5
  %88 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %87, i32 0, i32 2
  %89 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %88, i32 0, i32 5
  %90 = getelementptr inbounds %struct.arm_2d_region_t, ptr %89, i32 0, i32 1
  %91 = getelementptr inbounds %struct.arm_2d_size_t, ptr %90, i32 0, i32 1
  %92 = load i16, ptr %91, align 2, !tbaa !26
  %93 = sext i16 %92 to i32
  %94 = load ptr, ptr %3, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %94, i32 0, i32 0
  %96 = getelementptr inbounds %struct.anon.0, ptr %95, i32 0, i32 5
  %97 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %96, i32 0, i32 2
  %98 = getelementptr inbounds %struct.arm_2d_size_t, ptr %97, i32 0, i32 1
  %99 = load i16, ptr %98, align 2, !tbaa !26
  %100 = sext i16 %99 to i32
  %101 = icmp sge i32 %93, %100
  br i1 %101, label %102, label %103

102:                                              ; preds = %84
  br label %104

103:                                              ; preds = %84
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.6, i32 noundef 522, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #4
  unreachable

104:                                              ; preds = %102
  %105 = load i32, ptr %6, align 4, !tbaa !25
  %106 = and i32 %105, 12
  %107 = icmp ne i32 %106, 0
  br i1 %107, label %108, label %178

108:                                              ; preds = %104
  %109 = load ptr, ptr %3, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %109, i32 0, i32 0
  %111 = getelementptr inbounds %struct.anon.0, ptr %110, i32 0, i32 5
  %112 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %111, i32 0, i32 0
  %113 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %112, i32 0, i32 0
  %114 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %113, i32 0, i32 0
  %115 = load ptr, ptr %114, align 8, !tbaa !26
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %116, i32 0, i32 0
  %118 = getelementptr inbounds %struct.anon.0, ptr %117, i32 0, i32 5
  %119 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %118, i32 0, i32 0
  %120 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %119, i32 0, i32 0
  %121 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %120, i32 0, i32 2
  %122 = load i16, ptr %121, align 4, !tbaa !26
  %123 = load ptr, ptr %3, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %123, i32 0, i32 0
  %125 = getelementptr inbounds %struct.anon.0, ptr %124, i32 0, i32 5
  %126 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %125, i32 0, i32 1
  %127 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %126, i32 0, i32 0
  %128 = load ptr, ptr %127, align 8, !tbaa !26
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %129, i32 0, i32 0
  %131 = getelementptr inbounds %struct.anon.0, ptr %130, i32 0, i32 5
  %132 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %131, i32 0, i32 1
  %133 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %132, i32 0, i32 2
  %134 = load i16, ptr %133, align 4, !tbaa !26
  %135 = load ptr, ptr %3, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %135, i32 0, i32 0
  %137 = getelementptr inbounds %struct.anon.0, ptr %136, i32 0, i32 5
  %138 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %137, i32 0, i32 1
  %139 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %138, i32 0, i32 5
  %140 = getelementptr inbounds %struct.arm_2d_region_t, ptr %139, i32 0, i32 1
  %141 = load ptr, ptr %3, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %141, i32 0, i32 0
  %143 = getelementptr inbounds %struct.anon.0, ptr %142, i32 0, i32 5
  %144 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %143, i32 0, i32 0
  %145 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %144, i32 0, i32 1
  %146 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %145, i32 0, i32 0
  %147 = load ptr, ptr %146, align 8, !tbaa !26
  %148 = load ptr, ptr %3, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %148, i32 0, i32 0
  %150 = getelementptr inbounds %struct.anon.0, ptr %149, i32 0, i32 5
  %151 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %150, i32 0, i32 0
  %152 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %151, i32 0, i32 1
  %153 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %152, i32 0, i32 2
  %154 = load i16, ptr %153, align 4, !tbaa !26
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %155, i32 0, i32 0
  %157 = getelementptr inbounds %struct.anon.0, ptr %156, i32 0, i32 5
  %158 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %157, i32 0, i32 2
  %159 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %158, i32 0, i32 0
  %160 = load ptr, ptr %159, align 8, !tbaa !26
  %161 = load ptr, ptr %3, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %161, i32 0, i32 0
  %163 = getelementptr inbounds %struct.anon.0, ptr %162, i32 0, i32 5
  %164 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %163, i32 0, i32 2
  %165 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %164, i32 0, i32 2
  %166 = load i16, ptr %165, align 4, !tbaa !26
  %167 = load ptr, ptr %3, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %167, i32 0, i32 0
  %169 = getelementptr inbounds %struct.anon.0, ptr %168, i32 0, i32 5
  %170 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %169, i32 0, i32 2
  %171 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %170, i32 0, i32 5
  %172 = getelementptr inbounds %struct.arm_2d_region_t, ptr %171, i32 0, i32 1
  %173 = load ptr, ptr %3, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %173, i32 0, i32 0
  %175 = getelementptr inbounds %struct.anon.0, ptr %174, i32 0, i32 5
  %176 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %175, i32 0, i32 2
  %177 = load i32, ptr %6, align 4, !tbaa !25
  call void @__arm_2d_impl_cccn888_src_chn_msk_des_chn_msk_copy_mirror(ptr noundef %115, i16 noundef signext %122, ptr noundef %128, i16 noundef signext %134, ptr noundef %140, ptr noundef %147, i16 noundef signext %154, ptr noundef %160, i16 noundef signext %166, ptr noundef %172, ptr noundef %176, i32 noundef %177)
  br label %247

178:                                              ; preds = %104
  %179 = load ptr, ptr %3, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %179, i32 0, i32 0
  %181 = getelementptr inbounds %struct.anon.0, ptr %180, i32 0, i32 5
  %182 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %181, i32 0, i32 0
  %183 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %182, i32 0, i32 0
  %184 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %183, i32 0, i32 0
  %185 = load ptr, ptr %184, align 8, !tbaa !26
  %186 = load ptr, ptr %3, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %186, i32 0, i32 0
  %188 = getelementptr inbounds %struct.anon.0, ptr %187, i32 0, i32 5
  %189 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %188, i32 0, i32 0
  %190 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %189, i32 0, i32 0
  %191 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %190, i32 0, i32 2
  %192 = load i16, ptr %191, align 4, !tbaa !26
  %193 = load ptr, ptr %3, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %193, i32 0, i32 0
  %195 = getelementptr inbounds %struct.anon.0, ptr %194, i32 0, i32 5
  %196 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %195, i32 0, i32 1
  %197 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %196, i32 0, i32 0
  %198 = load ptr, ptr %197, align 8, !tbaa !26
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %199, i32 0, i32 0
  %201 = getelementptr inbounds %struct.anon.0, ptr %200, i32 0, i32 5
  %202 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %201, i32 0, i32 1
  %203 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %202, i32 0, i32 2
  %204 = load i16, ptr %203, align 4, !tbaa !26
  %205 = load ptr, ptr %3, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %205, i32 0, i32 0
  %207 = getelementptr inbounds %struct.anon.0, ptr %206, i32 0, i32 5
  %208 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %207, i32 0, i32 1
  %209 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %208, i32 0, i32 5
  %210 = getelementptr inbounds %struct.arm_2d_region_t, ptr %209, i32 0, i32 1
  %211 = load ptr, ptr %3, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %211, i32 0, i32 0
  %213 = getelementptr inbounds %struct.anon.0, ptr %212, i32 0, i32 5
  %214 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %213, i32 0, i32 0
  %215 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %214, i32 0, i32 1
  %216 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %215, i32 0, i32 0
  %217 = load ptr, ptr %216, align 8, !tbaa !26
  %218 = load ptr, ptr %3, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %218, i32 0, i32 0
  %220 = getelementptr inbounds %struct.anon.0, ptr %219, i32 0, i32 5
  %221 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %220, i32 0, i32 0
  %222 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %221, i32 0, i32 1
  %223 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %222, i32 0, i32 2
  %224 = load i16, ptr %223, align 4, !tbaa !26
  %225 = load ptr, ptr %3, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %225, i32 0, i32 0
  %227 = getelementptr inbounds %struct.anon.0, ptr %226, i32 0, i32 5
  %228 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %227, i32 0, i32 2
  %229 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %228, i32 0, i32 0
  %230 = load ptr, ptr %229, align 8, !tbaa !26
  %231 = load ptr, ptr %3, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %231, i32 0, i32 0
  %233 = getelementptr inbounds %struct.anon.0, ptr %232, i32 0, i32 5
  %234 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %233, i32 0, i32 2
  %235 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %234, i32 0, i32 2
  %236 = load i16, ptr %235, align 4, !tbaa !26
  %237 = load ptr, ptr %3, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %237, i32 0, i32 0
  %239 = getelementptr inbounds %struct.anon.0, ptr %238, i32 0, i32 5
  %240 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %239, i32 0, i32 2
  %241 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %240, i32 0, i32 5
  %242 = getelementptr inbounds %struct.arm_2d_region_t, ptr %241, i32 0, i32 1
  %243 = load ptr, ptr %3, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %243, i32 0, i32 0
  %245 = getelementptr inbounds %struct.anon.0, ptr %244, i32 0, i32 5
  %246 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %245, i32 0, i32 2
  call void @__arm_2d_impl_cccn888_src_chn_msk_des_chn_msk_copy(ptr noundef %185, i16 noundef signext %192, ptr noundef %198, i16 noundef signext %204, ptr noundef %210, ptr noundef %217, i16 noundef signext %224, ptr noundef %230, i16 noundef signext %236, ptr noundef %242, ptr noundef %246)
  br label %247

247:                                              ; preds = %178, %108
  br label %1086

248:                                              ; preds = %75, %63
  %249 = load ptr, ptr %3, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %249, i32 0, i32 0
  %251 = getelementptr inbounds %struct.anon.0, ptr %250, i32 0, i32 5
  %252 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %251, i32 0, i32 1
  %253 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %252, i32 0, i32 3
  %254 = load i8, ptr %253, align 2, !tbaa !26
  %255 = zext i8 %254 to i32
  %256 = icmp eq i32 107, %255
  br i1 %256, label %257, label %573

257:                                              ; preds = %248
  %258 = load ptr, ptr %3, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %258, i32 0, i32 0
  %260 = getelementptr inbounds %struct.anon.0, ptr %259, i32 0, i32 5
  %261 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %260, i32 0, i32 2
  %262 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %261, i32 0, i32 3
  %263 = load i8, ptr %262, align 2, !tbaa !26
  %264 = zext i8 %263 to i32
  %265 = icmp ne i32 107, %264
  br i1 %265, label %266, label %573

266:                                              ; preds = %257
  %267 = load i32, ptr %6, align 4, !tbaa !25
  %268 = and i32 %267, 12
  %269 = icmp ne i32 %268, 0
  br i1 %269, label %270, label %422

270:                                              ; preds = %266
  %271 = load ptr, ptr %3, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %271, i32 0, i32 0
  %273 = getelementptr inbounds %struct.anon.0, ptr %272, i32 0, i32 5
  %274 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %273, i32 0, i32 2
  %275 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %274, i32 0, i32 5
  %276 = getelementptr inbounds %struct.arm_2d_region_t, ptr %275, i32 0, i32 1
  %277 = getelementptr inbounds %struct.arm_2d_size_t, ptr %276, i32 0, i32 1
  %278 = load i16, ptr %277, align 2, !tbaa !26
  %279 = sext i16 %278 to i32
  %280 = icmp sgt i32 %279, 1
  br i1 %280, label %281, label %351

281:                                              ; preds = %270
  %282 = load ptr, ptr %3, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %282, i32 0, i32 0
  %284 = getelementptr inbounds %struct.anon.0, ptr %283, i32 0, i32 5
  %285 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %284, i32 0, i32 0
  %286 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %285, i32 0, i32 0
  %287 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %286, i32 0, i32 0
  %288 = load ptr, ptr %287, align 8, !tbaa !26
  %289 = load ptr, ptr %3, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %289, i32 0, i32 0
  %291 = getelementptr inbounds %struct.anon.0, ptr %290, i32 0, i32 5
  %292 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %291, i32 0, i32 0
  %293 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %292, i32 0, i32 0
  %294 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %293, i32 0, i32 2
  %295 = load i16, ptr %294, align 4, !tbaa !26
  %296 = load ptr, ptr %3, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %296, i32 0, i32 0
  %298 = getelementptr inbounds %struct.anon.0, ptr %297, i32 0, i32 5
  %299 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %298, i32 0, i32 1
  %300 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %299, i32 0, i32 0
  %301 = load ptr, ptr %300, align 8, !tbaa !26
  %302 = load ptr, ptr %3, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %302, i32 0, i32 0
  %304 = getelementptr inbounds %struct.anon.0, ptr %303, i32 0, i32 5
  %305 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %304, i32 0, i32 1
  %306 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %305, i32 0, i32 2
  %307 = load i16, ptr %306, align 4, !tbaa !26
  %308 = load ptr, ptr %3, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %308, i32 0, i32 0
  %310 = getelementptr inbounds %struct.anon.0, ptr %309, i32 0, i32 5
  %311 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %310, i32 0, i32 1
  %312 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %311, i32 0, i32 5
  %313 = getelementptr inbounds %struct.arm_2d_region_t, ptr %312, i32 0, i32 1
  %314 = load ptr, ptr %3, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %314, i32 0, i32 0
  %316 = getelementptr inbounds %struct.anon.0, ptr %315, i32 0, i32 5
  %317 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %316, i32 0, i32 0
  %318 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %317, i32 0, i32 1
  %319 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %318, i32 0, i32 0
  %320 = load ptr, ptr %319, align 8, !tbaa !26
  %321 = load ptr, ptr %3, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %321, i32 0, i32 0
  %323 = getelementptr inbounds %struct.anon.0, ptr %322, i32 0, i32 5
  %324 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %323, i32 0, i32 0
  %325 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %324, i32 0, i32 1
  %326 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %325, i32 0, i32 2
  %327 = load i16, ptr %326, align 4, !tbaa !26
  %328 = load ptr, ptr %3, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %328, i32 0, i32 0
  %330 = getelementptr inbounds %struct.anon.0, ptr %329, i32 0, i32 5
  %331 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %330, i32 0, i32 2
  %332 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %331, i32 0, i32 0
  %333 = load ptr, ptr %332, align 8, !tbaa !26
  %334 = load ptr, ptr %3, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %334, i32 0, i32 0
  %336 = getelementptr inbounds %struct.anon.0, ptr %335, i32 0, i32 5
  %337 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %336, i32 0, i32 2
  %338 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %337, i32 0, i32 2
  %339 = load i16, ptr %338, align 4, !tbaa !26
  %340 = load ptr, ptr %3, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %340, i32 0, i32 0
  %342 = getelementptr inbounds %struct.anon.0, ptr %341, i32 0, i32 5
  %343 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %342, i32 0, i32 2
  %344 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %343, i32 0, i32 5
  %345 = getelementptr inbounds %struct.arm_2d_region_t, ptr %344, i32 0, i32 1
  %346 = load ptr, ptr %3, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %346, i32 0, i32 0
  %348 = getelementptr inbounds %struct.anon.0, ptr %347, i32 0, i32 5
  %349 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %348, i32 0, i32 2
  %350 = load i32, ptr %6, align 4, !tbaa !25
  call void @__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy_mirror(ptr noundef %288, i16 noundef signext %295, ptr noundef %301, i16 noundef signext %307, ptr noundef %313, ptr noundef %320, i16 noundef signext %327, ptr noundef %333, i16 noundef signext %339, ptr noundef %345, ptr noundef %349, i32 noundef %350)
  br label %421

351:                                              ; preds = %270
  %352 = load ptr, ptr %3, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %352, i32 0, i32 0
  %354 = getelementptr inbounds %struct.anon.0, ptr %353, i32 0, i32 5
  %355 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %354, i32 0, i32 0
  %356 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %355, i32 0, i32 0
  %357 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %356, i32 0, i32 0
  %358 = load ptr, ptr %357, align 8, !tbaa !26
  %359 = load ptr, ptr %3, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %359, i32 0, i32 0
  %361 = getelementptr inbounds %struct.anon.0, ptr %360, i32 0, i32 5
  %362 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %361, i32 0, i32 0
  %363 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %362, i32 0, i32 0
  %364 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %363, i32 0, i32 2
  %365 = load i16, ptr %364, align 4, !tbaa !26
  %366 = load ptr, ptr %3, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %366, i32 0, i32 0
  %368 = getelementptr inbounds %struct.anon.0, ptr %367, i32 0, i32 5
  %369 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %368, i32 0, i32 1
  %370 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %369, i32 0, i32 0
  %371 = load ptr, ptr %370, align 8, !tbaa !26
  %372 = load ptr, ptr %3, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %372, i32 0, i32 0
  %374 = getelementptr inbounds %struct.anon.0, ptr %373, i32 0, i32 5
  %375 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %374, i32 0, i32 1
  %376 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %375, i32 0, i32 2
  %377 = load i16, ptr %376, align 4, !tbaa !26
  %378 = load ptr, ptr %3, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %378, i32 0, i32 0
  %380 = getelementptr inbounds %struct.anon.0, ptr %379, i32 0, i32 5
  %381 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %380, i32 0, i32 1
  %382 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %381, i32 0, i32 5
  %383 = getelementptr inbounds %struct.arm_2d_region_t, ptr %382, i32 0, i32 1
  %384 = load ptr, ptr %3, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %384, i32 0, i32 0
  %386 = getelementptr inbounds %struct.anon.0, ptr %385, i32 0, i32 5
  %387 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %386, i32 0, i32 0
  %388 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %387, i32 0, i32 1
  %389 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %388, i32 0, i32 0
  %390 = load ptr, ptr %389, align 8, !tbaa !26
  %391 = load ptr, ptr %3, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %391, i32 0, i32 0
  %393 = getelementptr inbounds %struct.anon.0, ptr %392, i32 0, i32 5
  %394 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %393, i32 0, i32 0
  %395 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %394, i32 0, i32 1
  %396 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %395, i32 0, i32 2
  %397 = load i16, ptr %396, align 4, !tbaa !26
  %398 = load ptr, ptr %3, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %398, i32 0, i32 0
  %400 = getelementptr inbounds %struct.anon.0, ptr %399, i32 0, i32 5
  %401 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %400, i32 0, i32 2
  %402 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %401, i32 0, i32 0
  %403 = load ptr, ptr %402, align 8, !tbaa !26
  %404 = load ptr, ptr %3, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %404, i32 0, i32 0
  %406 = getelementptr inbounds %struct.anon.0, ptr %405, i32 0, i32 5
  %407 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %406, i32 0, i32 2
  %408 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %407, i32 0, i32 2
  %409 = load i16, ptr %408, align 4, !tbaa !26
  %410 = load ptr, ptr %3, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %410, i32 0, i32 0
  %412 = getelementptr inbounds %struct.anon.0, ptr %411, i32 0, i32 5
  %413 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %412, i32 0, i32 2
  %414 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %413, i32 0, i32 5
  %415 = getelementptr inbounds %struct.arm_2d_region_t, ptr %414, i32 0, i32 1
  %416 = load ptr, ptr %3, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %416, i32 0, i32 0
  %418 = getelementptr inbounds %struct.anon.0, ptr %417, i32 0, i32 5
  %419 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %418, i32 0, i32 2
  %420 = load i32, ptr %6, align 4, !tbaa !25
  call void @__arm_2d_impl_cccn888_src_chn_msk_1h_des_msk_copy_mirror(ptr noundef %358, i16 noundef signext %365, ptr noundef %371, i16 noundef signext %377, ptr noundef %383, ptr noundef %390, i16 noundef signext %397, ptr noundef %403, i16 noundef signext %409, ptr noundef %415, ptr noundef %419, i32 noundef %420)
  br label %421

421:                                              ; preds = %351, %281
  br label %572

422:                                              ; preds = %266
  %423 = load ptr, ptr %3, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %423, i32 0, i32 0
  %425 = getelementptr inbounds %struct.anon.0, ptr %424, i32 0, i32 5
  %426 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %425, i32 0, i32 2
  %427 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %426, i32 0, i32 5
  %428 = getelementptr inbounds %struct.arm_2d_region_t, ptr %427, i32 0, i32 1
  %429 = getelementptr inbounds %struct.arm_2d_size_t, ptr %428, i32 0, i32 1
  %430 = load i16, ptr %429, align 2, !tbaa !26
  %431 = sext i16 %430 to i32
  %432 = icmp sgt i32 %431, 1
  br i1 %432, label %433, label %502

433:                                              ; preds = %422
  %434 = load ptr, ptr %3, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %434, i32 0, i32 0
  %436 = getelementptr inbounds %struct.anon.0, ptr %435, i32 0, i32 5
  %437 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %436, i32 0, i32 0
  %438 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %437, i32 0, i32 0
  %439 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %438, i32 0, i32 0
  %440 = load ptr, ptr %439, align 8, !tbaa !26
  %441 = load ptr, ptr %3, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %441, i32 0, i32 0
  %443 = getelementptr inbounds %struct.anon.0, ptr %442, i32 0, i32 5
  %444 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %443, i32 0, i32 0
  %445 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %444, i32 0, i32 0
  %446 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %445, i32 0, i32 2
  %447 = load i16, ptr %446, align 4, !tbaa !26
  %448 = load ptr, ptr %3, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %448, i32 0, i32 0
  %450 = getelementptr inbounds %struct.anon.0, ptr %449, i32 0, i32 5
  %451 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %450, i32 0, i32 1
  %452 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %451, i32 0, i32 0
  %453 = load ptr, ptr %452, align 8, !tbaa !26
  %454 = load ptr, ptr %3, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %454, i32 0, i32 0
  %456 = getelementptr inbounds %struct.anon.0, ptr %455, i32 0, i32 5
  %457 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %456, i32 0, i32 1
  %458 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %457, i32 0, i32 2
  %459 = load i16, ptr %458, align 4, !tbaa !26
  %460 = load ptr, ptr %3, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %460, i32 0, i32 0
  %462 = getelementptr inbounds %struct.anon.0, ptr %461, i32 0, i32 5
  %463 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %462, i32 0, i32 1
  %464 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %463, i32 0, i32 5
  %465 = getelementptr inbounds %struct.arm_2d_region_t, ptr %464, i32 0, i32 1
  %466 = load ptr, ptr %3, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %466, i32 0, i32 0
  %468 = getelementptr inbounds %struct.anon.0, ptr %467, i32 0, i32 5
  %469 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %468, i32 0, i32 0
  %470 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %469, i32 0, i32 1
  %471 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %470, i32 0, i32 0
  %472 = load ptr, ptr %471, align 8, !tbaa !26
  %473 = load ptr, ptr %3, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %473, i32 0, i32 0
  %475 = getelementptr inbounds %struct.anon.0, ptr %474, i32 0, i32 5
  %476 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %475, i32 0, i32 0
  %477 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %476, i32 0, i32 1
  %478 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %477, i32 0, i32 2
  %479 = load i16, ptr %478, align 4, !tbaa !26
  %480 = load ptr, ptr %3, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %480, i32 0, i32 0
  %482 = getelementptr inbounds %struct.anon.0, ptr %481, i32 0, i32 5
  %483 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %482, i32 0, i32 2
  %484 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %483, i32 0, i32 0
  %485 = load ptr, ptr %484, align 8, !tbaa !26
  %486 = load ptr, ptr %3, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %486, i32 0, i32 0
  %488 = getelementptr inbounds %struct.anon.0, ptr %487, i32 0, i32 5
  %489 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %488, i32 0, i32 2
  %490 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %489, i32 0, i32 2
  %491 = load i16, ptr %490, align 4, !tbaa !26
  %492 = load ptr, ptr %3, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %492, i32 0, i32 0
  %494 = getelementptr inbounds %struct.anon.0, ptr %493, i32 0, i32 5
  %495 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %494, i32 0, i32 2
  %496 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %495, i32 0, i32 5
  %497 = getelementptr inbounds %struct.arm_2d_region_t, ptr %496, i32 0, i32 1
  %498 = load ptr, ptr %3, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %498, i32 0, i32 0
  %500 = getelementptr inbounds %struct.anon.0, ptr %499, i32 0, i32 5
  %501 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %500, i32 0, i32 2
  call void @__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy(ptr noundef %440, i16 noundef signext %447, ptr noundef %453, i16 noundef signext %459, ptr noundef %465, ptr noundef %472, i16 noundef signext %479, ptr noundef %485, i16 noundef signext %491, ptr noundef %497, ptr noundef %501)
  br label %571

502:                                              ; preds = %422
  %503 = load ptr, ptr %3, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %503, i32 0, i32 0
  %505 = getelementptr inbounds %struct.anon.0, ptr %504, i32 0, i32 5
  %506 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %505, i32 0, i32 0
  %507 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %506, i32 0, i32 0
  %508 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %507, i32 0, i32 0
  %509 = load ptr, ptr %508, align 8, !tbaa !26
  %510 = load ptr, ptr %3, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %510, i32 0, i32 0
  %512 = getelementptr inbounds %struct.anon.0, ptr %511, i32 0, i32 5
  %513 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %512, i32 0, i32 0
  %514 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %513, i32 0, i32 0
  %515 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %514, i32 0, i32 2
  %516 = load i16, ptr %515, align 4, !tbaa !26
  %517 = load ptr, ptr %3, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %517, i32 0, i32 0
  %519 = getelementptr inbounds %struct.anon.0, ptr %518, i32 0, i32 5
  %520 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %519, i32 0, i32 1
  %521 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %520, i32 0, i32 0
  %522 = load ptr, ptr %521, align 8, !tbaa !26
  %523 = load ptr, ptr %3, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %523, i32 0, i32 0
  %525 = getelementptr inbounds %struct.anon.0, ptr %524, i32 0, i32 5
  %526 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %525, i32 0, i32 1
  %527 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %526, i32 0, i32 2
  %528 = load i16, ptr %527, align 4, !tbaa !26
  %529 = load ptr, ptr %3, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %529, i32 0, i32 0
  %531 = getelementptr inbounds %struct.anon.0, ptr %530, i32 0, i32 5
  %532 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %531, i32 0, i32 1
  %533 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %532, i32 0, i32 5
  %534 = getelementptr inbounds %struct.arm_2d_region_t, ptr %533, i32 0, i32 1
  %535 = load ptr, ptr %3, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %535, i32 0, i32 0
  %537 = getelementptr inbounds %struct.anon.0, ptr %536, i32 0, i32 5
  %538 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %537, i32 0, i32 0
  %539 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %538, i32 0, i32 1
  %540 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %539, i32 0, i32 0
  %541 = load ptr, ptr %540, align 8, !tbaa !26
  %542 = load ptr, ptr %3, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %542, i32 0, i32 0
  %544 = getelementptr inbounds %struct.anon.0, ptr %543, i32 0, i32 5
  %545 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %544, i32 0, i32 0
  %546 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %545, i32 0, i32 1
  %547 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %546, i32 0, i32 2
  %548 = load i16, ptr %547, align 4, !tbaa !26
  %549 = load ptr, ptr %3, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %549, i32 0, i32 0
  %551 = getelementptr inbounds %struct.anon.0, ptr %550, i32 0, i32 5
  %552 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %551, i32 0, i32 2
  %553 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %552, i32 0, i32 0
  %554 = load ptr, ptr %553, align 8, !tbaa !26
  %555 = load ptr, ptr %3, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %555, i32 0, i32 0
  %557 = getelementptr inbounds %struct.anon.0, ptr %556, i32 0, i32 5
  %558 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %557, i32 0, i32 2
  %559 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %558, i32 0, i32 2
  %560 = load i16, ptr %559, align 4, !tbaa !26
  %561 = load ptr, ptr %3, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %561, i32 0, i32 0
  %563 = getelementptr inbounds %struct.anon.0, ptr %562, i32 0, i32 5
  %564 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %563, i32 0, i32 2
  %565 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %564, i32 0, i32 5
  %566 = getelementptr inbounds %struct.arm_2d_region_t, ptr %565, i32 0, i32 1
  %567 = load ptr, ptr %3, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %567, i32 0, i32 0
  %569 = getelementptr inbounds %struct.anon.0, ptr %568, i32 0, i32 5
  %570 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %569, i32 0, i32 2
  call void @__arm_2d_impl_cccn888_src_chn_msk_1h_des_msk_copy(ptr noundef %509, i16 noundef signext %516, ptr noundef %522, i16 noundef signext %528, ptr noundef %534, ptr noundef %541, i16 noundef signext %548, ptr noundef %554, i16 noundef signext %560, ptr noundef %566, ptr noundef %570)
  br label %571

571:                                              ; preds = %502, %433
  br label %572

572:                                              ; preds = %571, %421
  br label %1085

573:                                              ; preds = %257, %248
  %574 = load ptr, ptr %3, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %574, i32 0, i32 0
  %576 = getelementptr inbounds %struct.anon.0, ptr %575, i32 0, i32 5
  %577 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %576, i32 0, i32 1
  %578 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %577, i32 0, i32 3
  %579 = load i8, ptr %578, align 2, !tbaa !26
  %580 = zext i8 %579 to i32
  %581 = icmp ne i32 107, %580
  br i1 %581, label %582, label %755

582:                                              ; preds = %573
  %583 = load ptr, ptr %3, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %583, i32 0, i32 0
  %585 = getelementptr inbounds %struct.anon.0, ptr %584, i32 0, i32 5
  %586 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %585, i32 0, i32 2
  %587 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %586, i32 0, i32 3
  %588 = load i8, ptr %587, align 2, !tbaa !26
  %589 = zext i8 %588 to i32
  %590 = icmp eq i32 107, %589
  br i1 %590, label %591, label %755

591:                                              ; preds = %582
  %592 = load ptr, ptr %3, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %592, i32 0, i32 0
  %594 = getelementptr inbounds %struct.anon.0, ptr %593, i32 0, i32 5
  %595 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %594, i32 0, i32 2
  %596 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %595, i32 0, i32 5
  %597 = getelementptr inbounds %struct.arm_2d_region_t, ptr %596, i32 0, i32 1
  %598 = getelementptr inbounds %struct.arm_2d_size_t, ptr %597, i32 0, i32 1
  %599 = load i16, ptr %598, align 2, !tbaa !26
  %600 = sext i16 %599 to i32
  %601 = load ptr, ptr %3, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %601, i32 0, i32 0
  %603 = getelementptr inbounds %struct.anon.0, ptr %602, i32 0, i32 5
  %604 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %603, i32 0, i32 2
  %605 = getelementptr inbounds %struct.arm_2d_size_t, ptr %604, i32 0, i32 1
  %606 = load i16, ptr %605, align 2, !tbaa !26
  %607 = sext i16 %606 to i32
  %608 = icmp sge i32 %600, %607
  br i1 %608, label %609, label %610

609:                                              ; preds = %591
  br label %611

610:                                              ; preds = %591
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.6, i32 noundef 692, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #4
  unreachable

611:                                              ; preds = %609
  %612 = load i32, ptr %6, align 4, !tbaa !25
  %613 = and i32 %612, 12
  %614 = icmp ne i32 %613, 0
  br i1 %614, label %615, label %685

615:                                              ; preds = %611
  %616 = load ptr, ptr %3, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %616, i32 0, i32 0
  %618 = getelementptr inbounds %struct.anon.0, ptr %617, i32 0, i32 5
  %619 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %618, i32 0, i32 0
  %620 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %619, i32 0, i32 0
  %621 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %620, i32 0, i32 0
  %622 = load ptr, ptr %621, align 8, !tbaa !26
  %623 = load ptr, ptr %3, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %623, i32 0, i32 0
  %625 = getelementptr inbounds %struct.anon.0, ptr %624, i32 0, i32 5
  %626 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %625, i32 0, i32 0
  %627 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %626, i32 0, i32 0
  %628 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %627, i32 0, i32 2
  %629 = load i16, ptr %628, align 4, !tbaa !26
  %630 = load ptr, ptr %3, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %630, i32 0, i32 0
  %632 = getelementptr inbounds %struct.anon.0, ptr %631, i32 0, i32 5
  %633 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %632, i32 0, i32 1
  %634 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %633, i32 0, i32 0
  %635 = load ptr, ptr %634, align 8, !tbaa !26
  %636 = load ptr, ptr %3, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %636, i32 0, i32 0
  %638 = getelementptr inbounds %struct.anon.0, ptr %637, i32 0, i32 5
  %639 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %638, i32 0, i32 1
  %640 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %639, i32 0, i32 2
  %641 = load i16, ptr %640, align 4, !tbaa !26
  %642 = load ptr, ptr %3, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %642, i32 0, i32 0
  %644 = getelementptr inbounds %struct.anon.0, ptr %643, i32 0, i32 5
  %645 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %644, i32 0, i32 1
  %646 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %645, i32 0, i32 5
  %647 = getelementptr inbounds %struct.arm_2d_region_t, ptr %646, i32 0, i32 1
  %648 = load ptr, ptr %3, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %648, i32 0, i32 0
  %650 = getelementptr inbounds %struct.anon.0, ptr %649, i32 0, i32 5
  %651 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %650, i32 0, i32 0
  %652 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %651, i32 0, i32 1
  %653 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %652, i32 0, i32 0
  %654 = load ptr, ptr %653, align 8, !tbaa !26
  %655 = load ptr, ptr %3, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %655, i32 0, i32 0
  %657 = getelementptr inbounds %struct.anon.0, ptr %656, i32 0, i32 5
  %658 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %657, i32 0, i32 0
  %659 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %658, i32 0, i32 1
  %660 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %659, i32 0, i32 2
  %661 = load i16, ptr %660, align 4, !tbaa !26
  %662 = load ptr, ptr %3, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %662, i32 0, i32 0
  %664 = getelementptr inbounds %struct.anon.0, ptr %663, i32 0, i32 5
  %665 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %664, i32 0, i32 2
  %666 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %665, i32 0, i32 0
  %667 = load ptr, ptr %666, align 8, !tbaa !26
  %668 = load ptr, ptr %3, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %668, i32 0, i32 0
  %670 = getelementptr inbounds %struct.anon.0, ptr %669, i32 0, i32 5
  %671 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %670, i32 0, i32 2
  %672 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %671, i32 0, i32 2
  %673 = load i16, ptr %672, align 4, !tbaa !26
  %674 = load ptr, ptr %3, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %674, i32 0, i32 0
  %676 = getelementptr inbounds %struct.anon.0, ptr %675, i32 0, i32 5
  %677 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %676, i32 0, i32 2
  %678 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %677, i32 0, i32 5
  %679 = getelementptr inbounds %struct.arm_2d_region_t, ptr %678, i32 0, i32 1
  %680 = load ptr, ptr %3, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %680, i32 0, i32 0
  %682 = getelementptr inbounds %struct.anon.0, ptr %681, i32 0, i32 5
  %683 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %682, i32 0, i32 2
  %684 = load i32, ptr %6, align 4, !tbaa !25
  call void @__arm_2d_impl_cccn888_src_msk_des_chn_msk_copy_mirror(ptr noundef %622, i16 noundef signext %629, ptr noundef %635, i16 noundef signext %641, ptr noundef %647, ptr noundef %654, i16 noundef signext %661, ptr noundef %667, i16 noundef signext %673, ptr noundef %679, ptr noundef %683, i32 noundef %684)
  br label %754

685:                                              ; preds = %611
  %686 = load ptr, ptr %3, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %686, i32 0, i32 0
  %688 = getelementptr inbounds %struct.anon.0, ptr %687, i32 0, i32 5
  %689 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %688, i32 0, i32 0
  %690 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %689, i32 0, i32 0
  %691 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %690, i32 0, i32 0
  %692 = load ptr, ptr %691, align 8, !tbaa !26
  %693 = load ptr, ptr %3, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %693, i32 0, i32 0
  %695 = getelementptr inbounds %struct.anon.0, ptr %694, i32 0, i32 5
  %696 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %695, i32 0, i32 0
  %697 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %696, i32 0, i32 0
  %698 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %697, i32 0, i32 2
  %699 = load i16, ptr %698, align 4, !tbaa !26
  %700 = load ptr, ptr %3, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %700, i32 0, i32 0
  %702 = getelementptr inbounds %struct.anon.0, ptr %701, i32 0, i32 5
  %703 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %702, i32 0, i32 1
  %704 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %703, i32 0, i32 0
  %705 = load ptr, ptr %704, align 8, !tbaa !26
  %706 = load ptr, ptr %3, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %706, i32 0, i32 0
  %708 = getelementptr inbounds %struct.anon.0, ptr %707, i32 0, i32 5
  %709 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %708, i32 0, i32 1
  %710 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %709, i32 0, i32 2
  %711 = load i16, ptr %710, align 4, !tbaa !26
  %712 = load ptr, ptr %3, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %712, i32 0, i32 0
  %714 = getelementptr inbounds %struct.anon.0, ptr %713, i32 0, i32 5
  %715 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %714, i32 0, i32 1
  %716 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %715, i32 0, i32 5
  %717 = getelementptr inbounds %struct.arm_2d_region_t, ptr %716, i32 0, i32 1
  %718 = load ptr, ptr %3, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %718, i32 0, i32 0
  %720 = getelementptr inbounds %struct.anon.0, ptr %719, i32 0, i32 5
  %721 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %720, i32 0, i32 0
  %722 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %721, i32 0, i32 1
  %723 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %722, i32 0, i32 0
  %724 = load ptr, ptr %723, align 8, !tbaa !26
  %725 = load ptr, ptr %3, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %725, i32 0, i32 0
  %727 = getelementptr inbounds %struct.anon.0, ptr %726, i32 0, i32 5
  %728 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %727, i32 0, i32 0
  %729 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %728, i32 0, i32 1
  %730 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %729, i32 0, i32 2
  %731 = load i16, ptr %730, align 4, !tbaa !26
  %732 = load ptr, ptr %3, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %732, i32 0, i32 0
  %734 = getelementptr inbounds %struct.anon.0, ptr %733, i32 0, i32 5
  %735 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %734, i32 0, i32 2
  %736 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %735, i32 0, i32 0
  %737 = load ptr, ptr %736, align 8, !tbaa !26
  %738 = load ptr, ptr %3, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %738, i32 0, i32 0
  %740 = getelementptr inbounds %struct.anon.0, ptr %739, i32 0, i32 5
  %741 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %740, i32 0, i32 2
  %742 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %741, i32 0, i32 2
  %743 = load i16, ptr %742, align 4, !tbaa !26
  %744 = load ptr, ptr %3, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %744, i32 0, i32 0
  %746 = getelementptr inbounds %struct.anon.0, ptr %745, i32 0, i32 5
  %747 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %746, i32 0, i32 2
  %748 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %747, i32 0, i32 5
  %749 = getelementptr inbounds %struct.arm_2d_region_t, ptr %748, i32 0, i32 1
  %750 = load ptr, ptr %3, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %750, i32 0, i32 0
  %752 = getelementptr inbounds %struct.anon.0, ptr %751, i32 0, i32 5
  %753 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %752, i32 0, i32 2
  call void @__arm_2d_impl_cccn888_src_msk_des_chn_msk_copy(ptr noundef %692, i16 noundef signext %699, ptr noundef %705, i16 noundef signext %711, ptr noundef %717, ptr noundef %724, i16 noundef signext %731, ptr noundef %737, i16 noundef signext %743, ptr noundef %749, ptr noundef %753)
  br label %754

754:                                              ; preds = %685, %615
  br label %1084

755:                                              ; preds = %582, %573
  %756 = load ptr, ptr %3, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %756, i32 0, i32 0
  %758 = getelementptr inbounds %struct.anon.0, ptr %757, i32 0, i32 5
  %759 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %758, i32 0, i32 1
  %760 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %759, i32 0, i32 3
  %761 = load i8, ptr %760, align 2, !tbaa !26
  %762 = zext i8 %761 to i32
  %763 = icmp eq i32 6, %762
  br i1 %763, label %764, label %765

764:                                              ; preds = %755
  br label %766

765:                                              ; preds = %755
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.6, i32 noundef 748, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #4
  unreachable

766:                                              ; preds = %764
  %767 = load ptr, ptr %3, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %767, i32 0, i32 0
  %769 = getelementptr inbounds %struct.anon.0, ptr %768, i32 0, i32 5
  %770 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %769, i32 0, i32 2
  %771 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %770, i32 0, i32 3
  %772 = load i8, ptr %771, align 2, !tbaa !26
  %773 = zext i8 %772 to i32
  %774 = icmp eq i32 6, %773
  br i1 %774, label %775, label %776

775:                                              ; preds = %766
  br label %777

776:                                              ; preds = %766
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.6, i32 noundef 750, ptr noundef @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #4
  unreachable

777:                                              ; preds = %775
  %778 = load i32, ptr %6, align 4, !tbaa !25
  %779 = and i32 %778, 12
  %780 = icmp ne i32 %779, 0
  br i1 %780, label %781, label %933

781:                                              ; preds = %777
  %782 = load ptr, ptr %3, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %782, i32 0, i32 0
  %784 = getelementptr inbounds %struct.anon.0, ptr %783, i32 0, i32 5
  %785 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %784, i32 0, i32 2
  %786 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %785, i32 0, i32 5
  %787 = getelementptr inbounds %struct.arm_2d_region_t, ptr %786, i32 0, i32 1
  %788 = getelementptr inbounds %struct.arm_2d_size_t, ptr %787, i32 0, i32 1
  %789 = load i16, ptr %788, align 2, !tbaa !26
  %790 = sext i16 %789 to i32
  %791 = icmp sgt i32 %790, 1
  br i1 %791, label %792, label %862

792:                                              ; preds = %781
  %793 = load ptr, ptr %3, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %793, i32 0, i32 0
  %795 = getelementptr inbounds %struct.anon.0, ptr %794, i32 0, i32 5
  %796 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %795, i32 0, i32 0
  %797 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %796, i32 0, i32 0
  %798 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %797, i32 0, i32 0
  %799 = load ptr, ptr %798, align 8, !tbaa !26
  %800 = load ptr, ptr %3, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %800, i32 0, i32 0
  %802 = getelementptr inbounds %struct.anon.0, ptr %801, i32 0, i32 5
  %803 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %802, i32 0, i32 0
  %804 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %803, i32 0, i32 0
  %805 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %804, i32 0, i32 2
  %806 = load i16, ptr %805, align 4, !tbaa !26
  %807 = load ptr, ptr %3, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %807, i32 0, i32 0
  %809 = getelementptr inbounds %struct.anon.0, ptr %808, i32 0, i32 5
  %810 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %809, i32 0, i32 1
  %811 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %810, i32 0, i32 0
  %812 = load ptr, ptr %811, align 8, !tbaa !26
  %813 = load ptr, ptr %3, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %813, i32 0, i32 0
  %815 = getelementptr inbounds %struct.anon.0, ptr %814, i32 0, i32 5
  %816 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %815, i32 0, i32 1
  %817 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %816, i32 0, i32 2
  %818 = load i16, ptr %817, align 4, !tbaa !26
  %819 = load ptr, ptr %3, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %819, i32 0, i32 0
  %821 = getelementptr inbounds %struct.anon.0, ptr %820, i32 0, i32 5
  %822 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %821, i32 0, i32 1
  %823 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %822, i32 0, i32 5
  %824 = getelementptr inbounds %struct.arm_2d_region_t, ptr %823, i32 0, i32 1
  %825 = load ptr, ptr %3, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %825, i32 0, i32 0
  %827 = getelementptr inbounds %struct.anon.0, ptr %826, i32 0, i32 5
  %828 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %827, i32 0, i32 0
  %829 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %828, i32 0, i32 1
  %830 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %829, i32 0, i32 0
  %831 = load ptr, ptr %830, align 8, !tbaa !26
  %832 = load ptr, ptr %3, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %832, i32 0, i32 0
  %834 = getelementptr inbounds %struct.anon.0, ptr %833, i32 0, i32 5
  %835 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %834, i32 0, i32 0
  %836 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %835, i32 0, i32 1
  %837 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %836, i32 0, i32 2
  %838 = load i16, ptr %837, align 4, !tbaa !26
  %839 = load ptr, ptr %3, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %839, i32 0, i32 0
  %841 = getelementptr inbounds %struct.anon.0, ptr %840, i32 0, i32 5
  %842 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %841, i32 0, i32 2
  %843 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %842, i32 0, i32 0
  %844 = load ptr, ptr %843, align 8, !tbaa !26
  %845 = load ptr, ptr %3, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %845, i32 0, i32 0
  %847 = getelementptr inbounds %struct.anon.0, ptr %846, i32 0, i32 5
  %848 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %847, i32 0, i32 2
  %849 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %848, i32 0, i32 2
  %850 = load i16, ptr %849, align 4, !tbaa !26
  %851 = load ptr, ptr %3, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %851, i32 0, i32 0
  %853 = getelementptr inbounds %struct.anon.0, ptr %852, i32 0, i32 5
  %854 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %853, i32 0, i32 2
  %855 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %854, i32 0, i32 5
  %856 = getelementptr inbounds %struct.arm_2d_region_t, ptr %855, i32 0, i32 1
  %857 = load ptr, ptr %3, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %857, i32 0, i32 0
  %859 = getelementptr inbounds %struct.anon.0, ptr %858, i32 0, i32 5
  %860 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %859, i32 0, i32 2
  %861 = load i32, ptr %6, align 4, !tbaa !25
  call void @__arm_2d_impl_cccn888_masks_copy_mirror(ptr noundef %799, i16 noundef signext %806, ptr noundef %812, i16 noundef signext %818, ptr noundef %824, ptr noundef %831, i16 noundef signext %838, ptr noundef %844, i16 noundef signext %850, ptr noundef %856, ptr noundef %860, i32 noundef %861)
  br label %932

862:                                              ; preds = %781
  %863 = load ptr, ptr %3, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %863, i32 0, i32 0
  %865 = getelementptr inbounds %struct.anon.0, ptr %864, i32 0, i32 5
  %866 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %865, i32 0, i32 0
  %867 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %866, i32 0, i32 0
  %868 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %867, i32 0, i32 0
  %869 = load ptr, ptr %868, align 8, !tbaa !26
  %870 = load ptr, ptr %3, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %870, i32 0, i32 0
  %872 = getelementptr inbounds %struct.anon.0, ptr %871, i32 0, i32 5
  %873 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %872, i32 0, i32 0
  %874 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %873, i32 0, i32 0
  %875 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %874, i32 0, i32 2
  %876 = load i16, ptr %875, align 4, !tbaa !26
  %877 = load ptr, ptr %3, align 8, !tbaa !5
  %878 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %877, i32 0, i32 0
  %879 = getelementptr inbounds %struct.anon.0, ptr %878, i32 0, i32 5
  %880 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %879, i32 0, i32 1
  %881 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %880, i32 0, i32 0
  %882 = load ptr, ptr %881, align 8, !tbaa !26
  %883 = load ptr, ptr %3, align 8, !tbaa !5
  %884 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %883, i32 0, i32 0
  %885 = getelementptr inbounds %struct.anon.0, ptr %884, i32 0, i32 5
  %886 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %885, i32 0, i32 1
  %887 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %886, i32 0, i32 2
  %888 = load i16, ptr %887, align 4, !tbaa !26
  %889 = load ptr, ptr %3, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %889, i32 0, i32 0
  %891 = getelementptr inbounds %struct.anon.0, ptr %890, i32 0, i32 5
  %892 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %891, i32 0, i32 1
  %893 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %892, i32 0, i32 5
  %894 = getelementptr inbounds %struct.arm_2d_region_t, ptr %893, i32 0, i32 1
  %895 = load ptr, ptr %3, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %895, i32 0, i32 0
  %897 = getelementptr inbounds %struct.anon.0, ptr %896, i32 0, i32 5
  %898 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %897, i32 0, i32 0
  %899 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %898, i32 0, i32 1
  %900 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %899, i32 0, i32 0
  %901 = load ptr, ptr %900, align 8, !tbaa !26
  %902 = load ptr, ptr %3, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %902, i32 0, i32 0
  %904 = getelementptr inbounds %struct.anon.0, ptr %903, i32 0, i32 5
  %905 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %904, i32 0, i32 0
  %906 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %905, i32 0, i32 1
  %907 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %906, i32 0, i32 2
  %908 = load i16, ptr %907, align 4, !tbaa !26
  %909 = load ptr, ptr %3, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %909, i32 0, i32 0
  %911 = getelementptr inbounds %struct.anon.0, ptr %910, i32 0, i32 5
  %912 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %911, i32 0, i32 2
  %913 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %912, i32 0, i32 0
  %914 = load ptr, ptr %913, align 8, !tbaa !26
  %915 = load ptr, ptr %3, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %915, i32 0, i32 0
  %917 = getelementptr inbounds %struct.anon.0, ptr %916, i32 0, i32 5
  %918 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %917, i32 0, i32 2
  %919 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %918, i32 0, i32 2
  %920 = load i16, ptr %919, align 4, !tbaa !26
  %921 = load ptr, ptr %3, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %921, i32 0, i32 0
  %923 = getelementptr inbounds %struct.anon.0, ptr %922, i32 0, i32 5
  %924 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %923, i32 0, i32 2
  %925 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %924, i32 0, i32 5
  %926 = getelementptr inbounds %struct.arm_2d_region_t, ptr %925, i32 0, i32 1
  %927 = load ptr, ptr %3, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %927, i32 0, i32 0
  %929 = getelementptr inbounds %struct.anon.0, ptr %928, i32 0, i32 5
  %930 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %929, i32 0, i32 2
  %931 = load i32, ptr %6, align 4, !tbaa !25
  call void @__arm_2d_impl_cccn888_src_msk_1h_des_msk_copy_mirror(ptr noundef %869, i16 noundef signext %876, ptr noundef %882, i16 noundef signext %888, ptr noundef %894, ptr noundef %901, i16 noundef signext %908, ptr noundef %914, i16 noundef signext %920, ptr noundef %926, ptr noundef %930, i32 noundef %931)
  br label %932

932:                                              ; preds = %862, %792
  br label %1083

933:                                              ; preds = %777
  %934 = load ptr, ptr %3, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %934, i32 0, i32 0
  %936 = getelementptr inbounds %struct.anon.0, ptr %935, i32 0, i32 5
  %937 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %936, i32 0, i32 2
  %938 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %937, i32 0, i32 5
  %939 = getelementptr inbounds %struct.arm_2d_region_t, ptr %938, i32 0, i32 1
  %940 = getelementptr inbounds %struct.arm_2d_size_t, ptr %939, i32 0, i32 1
  %941 = load i16, ptr %940, align 2, !tbaa !26
  %942 = sext i16 %941 to i32
  %943 = icmp sgt i32 %942, 1
  br i1 %943, label %944, label %1013

944:                                              ; preds = %933
  %945 = load ptr, ptr %3, align 8, !tbaa !5
  %946 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %945, i32 0, i32 0
  %947 = getelementptr inbounds %struct.anon.0, ptr %946, i32 0, i32 5
  %948 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %947, i32 0, i32 0
  %949 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %948, i32 0, i32 0
  %950 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %949, i32 0, i32 0
  %951 = load ptr, ptr %950, align 8, !tbaa !26
  %952 = load ptr, ptr %3, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %952, i32 0, i32 0
  %954 = getelementptr inbounds %struct.anon.0, ptr %953, i32 0, i32 5
  %955 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %954, i32 0, i32 0
  %956 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %955, i32 0, i32 0
  %957 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %956, i32 0, i32 2
  %958 = load i16, ptr %957, align 4, !tbaa !26
  %959 = load ptr, ptr %3, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %959, i32 0, i32 0
  %961 = getelementptr inbounds %struct.anon.0, ptr %960, i32 0, i32 5
  %962 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %961, i32 0, i32 1
  %963 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %962, i32 0, i32 0
  %964 = load ptr, ptr %963, align 8, !tbaa !26
  %965 = load ptr, ptr %3, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %965, i32 0, i32 0
  %967 = getelementptr inbounds %struct.anon.0, ptr %966, i32 0, i32 5
  %968 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %967, i32 0, i32 1
  %969 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %968, i32 0, i32 2
  %970 = load i16, ptr %969, align 4, !tbaa !26
  %971 = load ptr, ptr %3, align 8, !tbaa !5
  %972 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %971, i32 0, i32 0
  %973 = getelementptr inbounds %struct.anon.0, ptr %972, i32 0, i32 5
  %974 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %973, i32 0, i32 1
  %975 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %974, i32 0, i32 5
  %976 = getelementptr inbounds %struct.arm_2d_region_t, ptr %975, i32 0, i32 1
  %977 = load ptr, ptr %3, align 8, !tbaa !5
  %978 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %977, i32 0, i32 0
  %979 = getelementptr inbounds %struct.anon.0, ptr %978, i32 0, i32 5
  %980 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %979, i32 0, i32 0
  %981 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %980, i32 0, i32 1
  %982 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %981, i32 0, i32 0
  %983 = load ptr, ptr %982, align 8, !tbaa !26
  %984 = load ptr, ptr %3, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %984, i32 0, i32 0
  %986 = getelementptr inbounds %struct.anon.0, ptr %985, i32 0, i32 5
  %987 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %986, i32 0, i32 0
  %988 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %987, i32 0, i32 1
  %989 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %988, i32 0, i32 2
  %990 = load i16, ptr %989, align 4, !tbaa !26
  %991 = load ptr, ptr %3, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %991, i32 0, i32 0
  %993 = getelementptr inbounds %struct.anon.0, ptr %992, i32 0, i32 5
  %994 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %993, i32 0, i32 2
  %995 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %994, i32 0, i32 0
  %996 = load ptr, ptr %995, align 8, !tbaa !26
  %997 = load ptr, ptr %3, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %997, i32 0, i32 0
  %999 = getelementptr inbounds %struct.anon.0, ptr %998, i32 0, i32 5
  %1000 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %999, i32 0, i32 2
  %1001 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1000, i32 0, i32 2
  %1002 = load i16, ptr %1001, align 4, !tbaa !26
  %1003 = load ptr, ptr %3, align 8, !tbaa !5
  %1004 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1003, i32 0, i32 0
  %1005 = getelementptr inbounds %struct.anon.0, ptr %1004, i32 0, i32 5
  %1006 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1005, i32 0, i32 2
  %1007 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1006, i32 0, i32 5
  %1008 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1007, i32 0, i32 1
  %1009 = load ptr, ptr %3, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1009, i32 0, i32 0
  %1011 = getelementptr inbounds %struct.anon.0, ptr %1010, i32 0, i32 5
  %1012 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %1011, i32 0, i32 2
  call void @__arm_2d_impl_cccn888_masks_copy(ptr noundef %951, i16 noundef signext %958, ptr noundef %964, i16 noundef signext %970, ptr noundef %976, ptr noundef %983, i16 noundef signext %990, ptr noundef %996, i16 noundef signext %1002, ptr noundef %1008, ptr noundef %1012)
  br label %1082

1013:                                             ; preds = %933
  %1014 = load ptr, ptr %3, align 8, !tbaa !5
  %1015 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1014, i32 0, i32 0
  %1016 = getelementptr inbounds %struct.anon.0, ptr %1015, i32 0, i32 5
  %1017 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1016, i32 0, i32 0
  %1018 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %1017, i32 0, i32 0
  %1019 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1018, i32 0, i32 0
  %1020 = load ptr, ptr %1019, align 8, !tbaa !26
  %1021 = load ptr, ptr %3, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1021, i32 0, i32 0
  %1023 = getelementptr inbounds %struct.anon.0, ptr %1022, i32 0, i32 5
  %1024 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1023, i32 0, i32 0
  %1025 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %1024, i32 0, i32 0
  %1026 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1025, i32 0, i32 2
  %1027 = load i16, ptr %1026, align 4, !tbaa !26
  %1028 = load ptr, ptr %3, align 8, !tbaa !5
  %1029 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1028, i32 0, i32 0
  %1030 = getelementptr inbounds %struct.anon.0, ptr %1029, i32 0, i32 5
  %1031 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1030, i32 0, i32 1
  %1032 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1031, i32 0, i32 0
  %1033 = load ptr, ptr %1032, align 8, !tbaa !26
  %1034 = load ptr, ptr %3, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1034, i32 0, i32 0
  %1036 = getelementptr inbounds %struct.anon.0, ptr %1035, i32 0, i32 5
  %1037 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1036, i32 0, i32 1
  %1038 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1037, i32 0, i32 2
  %1039 = load i16, ptr %1038, align 4, !tbaa !26
  %1040 = load ptr, ptr %3, align 8, !tbaa !5
  %1041 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1040, i32 0, i32 0
  %1042 = getelementptr inbounds %struct.anon.0, ptr %1041, i32 0, i32 5
  %1043 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1042, i32 0, i32 1
  %1044 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1043, i32 0, i32 5
  %1045 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1044, i32 0, i32 1
  %1046 = load ptr, ptr %3, align 8, !tbaa !5
  %1047 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1046, i32 0, i32 0
  %1048 = getelementptr inbounds %struct.anon.0, ptr %1047, i32 0, i32 5
  %1049 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1048, i32 0, i32 0
  %1050 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %1049, i32 0, i32 1
  %1051 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1050, i32 0, i32 0
  %1052 = load ptr, ptr %1051, align 8, !tbaa !26
  %1053 = load ptr, ptr %3, align 8, !tbaa !5
  %1054 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1053, i32 0, i32 0
  %1055 = getelementptr inbounds %struct.anon.0, ptr %1054, i32 0, i32 5
  %1056 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1055, i32 0, i32 0
  %1057 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %1056, i32 0, i32 1
  %1058 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1057, i32 0, i32 2
  %1059 = load i16, ptr %1058, align 4, !tbaa !26
  %1060 = load ptr, ptr %3, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1060, i32 0, i32 0
  %1062 = getelementptr inbounds %struct.anon.0, ptr %1061, i32 0, i32 5
  %1063 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1062, i32 0, i32 2
  %1064 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1063, i32 0, i32 0
  %1065 = load ptr, ptr %1064, align 8, !tbaa !26
  %1066 = load ptr, ptr %3, align 8, !tbaa !5
  %1067 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1066, i32 0, i32 0
  %1068 = getelementptr inbounds %struct.anon.0, ptr %1067, i32 0, i32 5
  %1069 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1068, i32 0, i32 2
  %1070 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1069, i32 0, i32 2
  %1071 = load i16, ptr %1070, align 4, !tbaa !26
  %1072 = load ptr, ptr %3, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1072, i32 0, i32 0
  %1074 = getelementptr inbounds %struct.anon.0, ptr %1073, i32 0, i32 5
  %1075 = getelementptr inbounds %struct.__arm_2d_param_copy_msk_t, ptr %1074, i32 0, i32 2
  %1076 = getelementptr inbounds %struct.__arm_2d_tile_param_t, ptr %1075, i32 0, i32 5
  %1077 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1076, i32 0, i32 1
  %1078 = load ptr, ptr %3, align 8, !tbaa !5
  %1079 = getelementptr inbounds %struct.__arm_2d_sub_task_t, ptr %1078, i32 0, i32 0
  %1080 = getelementptr inbounds %struct.anon.0, ptr %1079, i32 0, i32 5
  %1081 = getelementptr inbounds %struct.__arm_2d_param_copy_t, ptr %1080, i32 0, i32 2
  call void @__arm_2d_impl_cccn888_src_msk_1h_des_msk_copy(ptr noundef %1020, i16 noundef signext %1027, ptr noundef %1033, i16 noundef signext %1039, ptr noundef %1045, ptr noundef %1052, i16 noundef signext %1059, ptr noundef %1065, i16 noundef signext %1071, ptr noundef %1077, ptr noundef %1081)
  br label %1082

1082:                                             ; preds = %1013, %944
  br label %1083

1083:                                             ; preds = %1082, %932
  br label %1084

1084:                                             ; preds = %1083, %754
  br label %1085

1085:                                             ; preds = %1084, %572
  br label %1086

1086:                                             ; preds = %1085, %247
  store i32 0, ptr %2, align 4
  store i32 1, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  br label %1087

1087:                                             ; preds = %1086, %62
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #3
  %1088 = load i32, ptr %2, align 4
  ret i32 %1088
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 8}
!10 = !{!"__arm_2d_sub_task_t", !11, i64 0}
!11 = !{!"", !6, i64 0, !6, i64 8, !7, i64 16, !7, i64 17, !7, i64 24}
!12 = !{!13, !6, i64 8}
!13 = !{!"arm_2d_op_src_msk_t", !14, i64 0, !19, i64 48, !20, i64 64, !21, i64 72, !19, i64 80}
!14 = !{!"arm_2d_op_core_t", !15, i64 0, !18, i64 40}
!15 = !{!"", !6, i64 0, !6, i64 8, !16, i64 16, !7, i64 17, !7, i64 18, !17, i64 24}
!16 = !{!"", !7, i64 0}
!17 = !{!"arm_2d_op_evt_t", !6, i64 0, !6, i64 8}
!18 = !{!"long", !7, i64 0}
!19 = !{!"", !6, i64 0, !6, i64 8}
!20 = !{!"", !6, i64 0}
!21 = !{!"int", !7, i64 0}
!22 = !{!13, !6, i64 80}
!23 = !{!13, !6, i64 88}
!24 = !{!13, !21, i64 72}
!25 = !{!21, !21, i64 0}
!26 = !{!7, !7, i64 0}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.__arm_2d_op_control = type { %struct.anon.10 }
%struct.anon.10 = type { ptr, %struct.anon.11, %struct.anon.12, i16, i16, i16, i16, ptr, %union.anon.13 }
%struct.anon.11 = type { ptr, ptr }
%struct.anon.12 = type { ptr, ptr }
%union.anon.13 = type { %struct.arm_2d_op_trans_msk_opa_t }
%struct.arm_2d_op_trans_msk_opa_t = type { %struct.arm_2d_op_core_t, %struct.anon.67, %struct.anon.68, %union.anon.69, %struct.anon.71, %struct.anon.72, %struct.__arm_2d_transform_info_t, i8 }
%struct.arm_2d_op_core_t = type { %struct.anon.14, i64 }
%struct.anon.14 = type { ptr, ptr, %struct.anon.15, i8, %union.arm_2d_op_status_t, %struct.arm_2d_op_evt_t }
%struct.anon.15 = type { i8 }
%union.arm_2d_op_status_t = type { %struct.anon.16 }
%struct.anon.16 = type { i16 }
%struct.arm_2d_op_evt_t = type { ptr, ptr }
%struct.anon.67 = type { ptr, ptr }
%struct.anon.68 = type { ptr }
%union.anon.69 = type { %struct.anon.70 }
%struct.anon.70 = type { i32 }
%struct.anon.71 = type { ptr, %struct.arm_2d_tile_t }
%struct.arm_2d_tile_t = type { %union.anon.48, %union.anon.57, %union.anon.58 }
%union.anon.48 = type { %struct.anon.49 }
%struct.anon.49 = type { i8, %union.arm_2d_color_info_t, %union.anon.50 }
%union.arm_2d_color_info_t = type { %struct.anon.1 }
%struct.anon.1 = type { i8 }
%union.anon.50 = type { i16 }
%union.anon.57 = type { %struct.arm_2d_region_t }
%struct.arm_2d_region_t = type { %union.anon.3, %union.anon.4 }
%union.anon.3 = type { %struct.arm_2d_location_t }
%struct.arm_2d_location_t = type { i16, i16 }
%union.anon.4 = type { %struct.arm_2d_size_t }
%struct.arm_2d_size_t = type { i16, i16 }
%union.anon.58 = type { ptr }
%struct.anon.72 = type { ptr, ptr }
%struct.__arm_2d_transform_info_t = type { float, float, float, %struct.arm_2d_point_float_t, %union.anon.59, %struct.anon.60 }
%struct.arm_2d_point_float_t = type { float, float }
%union.anon.59 = type { i32 }
%struct.anon.60 = type { %struct.arm_2d_location_t, %struct.anon.61 }
%struct.anon.61 = type { %struct.arm_2d_region_t, %struct.arm_2d_tile_t }

@ARM_2D_CTRL = external local_unnamed_addr global %struct.__arm_2d_op_control, align 8
@.str.5 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [104 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [73 x i8], align 1
@__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks = external hidden unnamed_addr constant [77 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
declare dso_local void @__arm_2d_impl_cccn888_masks_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_masks_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_msk_1h_des_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_msk_1h_des_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_1h_des_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_1h_des_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_msk_des_chn_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_msk_des_chn_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_des_chn_msk_copy(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @__arm_2d_impl_cccn888_src_chn_msk_des_chn_msk_copy_mirror(ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, i16 noundef signext, ptr noalias noundef, ptr noalias noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local range(i32 -2, 1) i32 @__arm_2d_cccn888_sw_tile_copy_with_masks(ptr noundef %0) local_unnamed_addr #1 {
  %2 = getelementptr inbounds i8, ptr %0, i64 8
  %3 = load ptr, ptr %2, align 8, !tbaa !5
  %4 = icmp eq ptr %3, null
  %spec.store.select = select i1 %4, ptr getelementptr inbounds (i8, ptr @ARM_2D_CTRL, i64 56), ptr %3
  %5 = getelementptr inbounds i8, ptr %spec.store.select, i64 8
  %6 = load ptr, ptr %5, align 8, !tbaa !11
  %7 = load i8, ptr %6, align 8
  %8 = and i8 %7, 14
  %9 = icmp eq i8 %8, 10
  br i1 %9, label %11, label %10

10:                                               ; preds = %1
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, i32 noundef 495, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #2
  unreachable

11:                                               ; preds = %1
  %12 = getelementptr inbounds i8, ptr %spec.store.select, i64 80
  %13 = load ptr, ptr %12, align 8, !tbaa !21
  %14 = icmp eq ptr %13, null
  br i1 %14, label %15, label %20

15:                                               ; preds = %11
  %16 = getelementptr inbounds i8, ptr %spec.store.select, i64 88
  %17 = load ptr, ptr %16, align 8, !tbaa !22
  %18 = icmp eq ptr %17, null
  br i1 %18, label %19, label %20

19:                                               ; preds = %15
  tail call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.6, i32 noundef 499, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #2
  unreachable

20:                                               ; preds = %11, %15
  %21 = getelementptr inbounds i8, ptr %0, i64 24
  %22 = getelementptr inbounds i8, ptr %0, i64 112
  %23 = getelementptr inbounds i8, ptr %0, i64 127
  %24 = load i8, ptr %23, align 1
  %25 = and i8 %24, 1
  %.not = icmp eq i8 %25, 0
  br i1 %.not, label %26, label %153

26:                                               ; preds = %20
  %27 = getelementptr inbounds i8, ptr %0, i64 152
  %28 = getelementptr inbounds i8, ptr %0, i64 167
  %29 = load i8, ptr %28, align 1
  %30 = and i8 %29, 1
  %.not166 = icmp eq i8 %30, 0
  br i1 %.not166, label %31, label %153

31:                                               ; preds = %26
  %32 = getelementptr inbounds i8, ptr %spec.store.select, i64 72
  %33 = load i32, ptr %32, align 8, !tbaa !23
  %34 = getelementptr inbounds i8, ptr %0, i64 126
  %35 = load i8, ptr %34, align 2, !tbaa !24
  %36 = icmp eq i8 %35, 107
  %37 = getelementptr inbounds i8, ptr %0, i64 166
  %38 = load i8, ptr %37, align 2, !tbaa !24
  %39 = icmp eq i8 %38, 107
  br i1 %36, label %40, label %94

40:                                               ; preds = %31
  br i1 %39, label %41, label %67

41:                                               ; preds = %40
  %42 = getelementptr inbounds i8, ptr %0, i64 172
  %43 = getelementptr inbounds i8, ptr %0, i64 174
  %44 = load i16, ptr %43, align 2, !tbaa !24
  %45 = getelementptr inbounds i8, ptr %0, i64 104
  %46 = getelementptr inbounds i8, ptr %0, i64 106
  %47 = load i16, ptr %46, align 2, !tbaa !24
  %.not173 = icmp slt i16 %44, %47
  br i1 %.not173, label %48, label %49

48:                                               ; preds = %41
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.6, i32 noundef 522, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #2
  unreachable

49:                                               ; preds = %41
  %50 = and i32 %33, 12
  %.not174 = icmp eq i32 %50, 0
  %51 = load ptr, ptr %21, align 8, !tbaa !24
  %52 = getelementptr inbounds i8, ptr %0, i64 36
  %53 = load i16, ptr %52, align 4, !tbaa !24
  %54 = load ptr, ptr %22, align 8, !tbaa !24
  %55 = getelementptr inbounds i8, ptr %0, i64 124
  %56 = load i16, ptr %55, align 4, !tbaa !24
  %57 = getelementptr inbounds i8, ptr %0, i64 132
  %58 = getelementptr inbounds i8, ptr %0, i64 64
  %59 = load ptr, ptr %58, align 8, !tbaa !24
  %60 = getelementptr inbounds i8, ptr %0, i64 76
  %61 = load i16, ptr %60, align 4, !tbaa !24
  %62 = load ptr, ptr %27, align 8, !tbaa !24
  %63 = getelementptr inbounds i8, ptr %0, i64 164
  %64 = load i16, ptr %63, align 4, !tbaa !24
  br i1 %.not174, label %66, label %65

65:                                               ; preds = %49
  tail call void @__arm_2d_impl_cccn888_src_chn_msk_des_chn_msk_copy_mirror(ptr noundef %51, i16 noundef signext %53, ptr noundef %54, i16 noundef signext %56, ptr noundef nonnull %57, ptr noundef %59, i16 noundef signext %61, ptr noundef %62, i16 noundef signext %64, ptr noundef nonnull %42, ptr noundef nonnull %45, i32 noundef %33)
  br label %153

66:                                               ; preds = %49
  tail call void @__arm_2d_impl_cccn888_src_chn_msk_des_chn_msk_copy(ptr noundef %51, i16 noundef signext %53, ptr noundef %54, i16 noundef signext %56, ptr noundef nonnull %57, ptr noundef %59, i16 noundef signext %61, ptr noundef %62, i16 noundef signext %64, ptr noundef nonnull %42, ptr noundef nonnull %45)
  br label %153

67:                                               ; preds = %40
  %68 = and i32 %33, 12
  %.not172 = icmp eq i32 %68, 0
  %69 = getelementptr inbounds i8, ptr %0, i64 172
  %70 = getelementptr inbounds i8, ptr %0, i64 174
  %71 = load i16, ptr %70, align 2, !tbaa !24
  %72 = icmp sgt i16 %71, 1
  %73 = load ptr, ptr %21, align 8, !tbaa !24
  %74 = getelementptr inbounds i8, ptr %0, i64 36
  %75 = load i16, ptr %74, align 4, !tbaa !24
  %76 = load ptr, ptr %22, align 8, !tbaa !24
  %77 = getelementptr inbounds i8, ptr %0, i64 124
  %78 = load i16, ptr %77, align 4, !tbaa !24
  %79 = getelementptr inbounds i8, ptr %0, i64 132
  %80 = getelementptr inbounds i8, ptr %0, i64 64
  %81 = load ptr, ptr %80, align 8, !tbaa !24
  %82 = getelementptr inbounds i8, ptr %0, i64 76
  %83 = load i16, ptr %82, align 4, !tbaa !24
  %84 = load ptr, ptr %27, align 8, !tbaa !24
  %85 = getelementptr inbounds i8, ptr %0, i64 164
  %86 = load i16, ptr %85, align 4, !tbaa !24
  %87 = getelementptr inbounds i8, ptr %0, i64 104
  br i1 %.not172, label %91, label %88

88:                                               ; preds = %67
  br i1 %72, label %89, label %90

89:                                               ; preds = %88
  tail call void @__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy_mirror(ptr noundef %73, i16 noundef signext %75, ptr noundef %76, i16 noundef signext %78, ptr noundef nonnull %79, ptr noundef %81, i16 noundef signext %83, ptr noundef %84, i16 noundef signext %86, ptr noundef nonnull %69, ptr noundef nonnull %87, i32 noundef %33)
  br label %153

90:                                               ; preds = %88
  tail call void @__arm_2d_impl_cccn888_src_chn_msk_1h_des_msk_copy_mirror(ptr noundef %73, i16 noundef signext %75, ptr noundef %76, i16 noundef signext %78, ptr noundef nonnull %79, ptr noundef %81, i16 noundef signext %83, ptr noundef %84, i16 noundef signext %86, ptr noundef nonnull %69, ptr noundef nonnull %87, i32 noundef %33)
  br label %153

91:                                               ; preds = %67
  br i1 %72, label %92, label %93

92:                                               ; preds = %91
  tail call void @__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy(ptr noundef %73, i16 noundef signext %75, ptr noundef %76, i16 noundef signext %78, ptr noundef nonnull %79, ptr noundef %81, i16 noundef signext %83, ptr noundef %84, i16 noundef signext %86, ptr noundef nonnull %69, ptr noundef nonnull %87)
  br label %153

93:                                               ; preds = %91
  tail call void @__arm_2d_impl_cccn888_src_chn_msk_1h_des_msk_copy(ptr noundef %73, i16 noundef signext %75, ptr noundef %76, i16 noundef signext %78, ptr noundef nonnull %79, ptr noundef %81, i16 noundef signext %83, ptr noundef %84, i16 noundef signext %86, ptr noundef nonnull %69, ptr noundef nonnull %87)
  br label %153

94:                                               ; preds = %31
  br i1 %39, label %95, label %121

95:                                               ; preds = %94
  %96 = getelementptr inbounds i8, ptr %0, i64 172
  %97 = getelementptr inbounds i8, ptr %0, i64 174
  %98 = load i16, ptr %97, align 2, !tbaa !24
  %99 = getelementptr inbounds i8, ptr %0, i64 104
  %100 = getelementptr inbounds i8, ptr %0, i64 106
  %101 = load i16, ptr %100, align 2, !tbaa !24
  %.not170 = icmp slt i16 %98, %101
  br i1 %.not170, label %102, label %103

102:                                              ; preds = %95
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.6, i32 noundef 692, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #2
  unreachable

103:                                              ; preds = %95
  %104 = and i32 %33, 12
  %.not171 = icmp eq i32 %104, 0
  %105 = load ptr, ptr %21, align 8, !tbaa !24
  %106 = getelementptr inbounds i8, ptr %0, i64 36
  %107 = load i16, ptr %106, align 4, !tbaa !24
  %108 = load ptr, ptr %22, align 8, !tbaa !24
  %109 = getelementptr inbounds i8, ptr %0, i64 124
  %110 = load i16, ptr %109, align 4, !tbaa !24
  %111 = getelementptr inbounds i8, ptr %0, i64 132
  %112 = getelementptr inbounds i8, ptr %0, i64 64
  %113 = load ptr, ptr %112, align 8, !tbaa !24
  %114 = getelementptr inbounds i8, ptr %0, i64 76
  %115 = load i16, ptr %114, align 4, !tbaa !24
  %116 = load ptr, ptr %27, align 8, !tbaa !24
  %117 = getelementptr inbounds i8, ptr %0, i64 164
  %118 = load i16, ptr %117, align 4, !tbaa !24
  br i1 %.not171, label %120, label %119

119:                                              ; preds = %103
  tail call void @__arm_2d_impl_cccn888_src_msk_des_chn_msk_copy_mirror(ptr noundef %105, i16 noundef signext %107, ptr noundef %108, i16 noundef signext %110, ptr noundef nonnull %111, ptr noundef %113, i16 noundef signext %115, ptr noundef %116, i16 noundef signext %118, ptr noundef nonnull %96, ptr noundef nonnull %99, i32 noundef %33)
  br label %153

120:                                              ; preds = %103
  tail call void @__arm_2d_impl_cccn888_src_msk_des_chn_msk_copy(ptr noundef %105, i16 noundef signext %107, ptr noundef %108, i16 noundef signext %110, ptr noundef nonnull %111, ptr noundef %113, i16 noundef signext %115, ptr noundef %116, i16 noundef signext %118, ptr noundef nonnull %96, ptr noundef nonnull %99)
  br label %153

121:                                              ; preds = %94
  %122 = icmp eq i8 %35, 6
  br i1 %122, label %123, label %.thread176

.thread176:                                       ; preds = %121
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.6, i32 noundef 748, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #2
  unreachable

123:                                              ; preds = %121
  %124 = icmp eq i8 %38, 6
  br i1 %124, label %126, label %125

125:                                              ; preds = %123
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.6, i32 noundef 750, ptr noundef nonnull @__PRETTY_FUNCTION__.__arm_2d_cccn888_sw_tile_copy_with_masks) #2
  unreachable

126:                                              ; preds = %123
  %127 = and i32 %33, 12
  %.not169 = icmp eq i32 %127, 0
  %128 = getelementptr inbounds i8, ptr %0, i64 172
  %129 = getelementptr inbounds i8, ptr %0, i64 174
  %130 = load i16, ptr %129, align 2, !tbaa !24
  %131 = icmp sgt i16 %130, 1
  %132 = load ptr, ptr %21, align 8, !tbaa !24
  %133 = getelementptr inbounds i8, ptr %0, i64 36
  %134 = load i16, ptr %133, align 4, !tbaa !24
  %135 = load ptr, ptr %22, align 8, !tbaa !24
  %136 = getelementptr inbounds i8, ptr %0, i64 124
  %137 = load i16, ptr %136, align 4, !tbaa !24
  %138 = getelementptr inbounds i8, ptr %0, i64 132
  %139 = getelementptr inbounds i8, ptr %0, i64 64
  %140 = load ptr, ptr %139, align 8, !tbaa !24
  %141 = getelementptr inbounds i8, ptr %0, i64 76
  %142 = load i16, ptr %141, align 4, !tbaa !24
  %143 = load ptr, ptr %27, align 8, !tbaa !24
  %144 = getelementptr inbounds i8, ptr %0, i64 164
  %145 = load i16, ptr %144, align 4, !tbaa !24
  %146 = getelementptr inbounds i8, ptr %0, i64 104
  br i1 %.not169, label %150, label %147

147:                                              ; preds = %126
  br i1 %131, label %148, label %149

148:                                              ; preds = %147
  tail call void @__arm_2d_impl_cccn888_masks_copy_mirror(ptr noundef %132, i16 noundef signext %134, ptr noundef %135, i16 noundef signext %137, ptr noundef nonnull %138, ptr noundef %140, i16 noundef signext %142, ptr noundef %143, i16 noundef signext %145, ptr noundef nonnull %128, ptr noundef nonnull %146, i32 noundef %33)
  br label %153

149:                                              ; preds = %147
  tail call void @__arm_2d_impl_cccn888_src_msk_1h_des_msk_copy_mirror(ptr noundef %132, i16 noundef signext %134, ptr noundef %135, i16 noundef signext %137, ptr noundef nonnull %138, ptr noundef %140, i16 noundef signext %142, ptr noundef %143, i16 noundef signext %145, ptr noundef nonnull %128, ptr noundef nonnull %146, i32 noundef %33)
  br label %153

150:                                              ; preds = %126
  br i1 %131, label %151, label %152

151:                                              ; preds = %150
  tail call void @__arm_2d_impl_cccn888_masks_copy(ptr noundef %132, i16 noundef signext %134, ptr noundef %135, i16 noundef signext %137, ptr noundef nonnull %138, ptr noundef %140, i16 noundef signext %142, ptr noundef %143, i16 noundef signext %145, ptr noundef nonnull %128, ptr noundef nonnull %146)
  br label %153

152:                                              ; preds = %150
  tail call void @__arm_2d_impl_cccn888_src_msk_1h_des_msk_copy(ptr noundef %132, i16 noundef signext %134, ptr noundef %135, i16 noundef signext %137, ptr noundef nonnull %138, ptr noundef %140, i16 noundef signext %142, ptr noundef %143, i16 noundef signext %145, ptr noundef nonnull %128, ptr noundef nonnull %146)
  br label %153

153:                                              ; preds = %66, %65, %120, %119, %151, %152, %148, %149, %90, %89, %93, %92, %20, %26
  %.0 = phi i32 [ -2, %26 ], [ -2, %20 ], [ 0, %92 ], [ 0, %93 ], [ 0, %89 ], [ 0, %90 ], [ 0, %149 ], [ 0, %148 ], [ 0, %152 ], [ 0, %151 ], [ 0, %119 ], [ 0, %120 ], [ 0, %65 ], [ 0, %66 ]
  ret i32 %.0
}

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 = { 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, !8, i64 8}
!6 = !{!"__arm_2d_sub_task_t", !7, i64 0}
!7 = !{!"", !8, i64 0, !8, i64 8, !9, i64 16, !9, i64 17, !9, i64 24}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!12, !8, i64 8}
!12 = !{!"arm_2d_op_src_msk_t", !13, i64 0, !18, i64 48, !19, i64 64, !20, i64 72, !18, i64 80}
!13 = !{!"arm_2d_op_core_t", !14, i64 0, !17, i64 40}
!14 = !{!"", !8, i64 0, !8, i64 8, !15, i64 16, !9, i64 17, !9, i64 18, !16, i64 24}
!15 = !{!"", !9, i64 0}
!16 = !{!"arm_2d_op_evt_t", !8, i64 0, !8, i64 8}
!17 = !{!"long", !9, i64 0}
!18 = !{!"", !8, i64 0, !8, i64 8}
!19 = !{!"", !8, i64 0}
!20 = !{!"int", !9, i64 0}
!21 = !{!12, !8, i64 80}
!22 = !{!12, !8, i64 88}
!23 = !{!12, !20, i64 72}
!24 = !{!9, !9, i64 0}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass