; LLVM IR from ARM-software/Arm-2D :: Helper/Source (arm_2d_helper_scene)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.arm_2d_helper_pfb_dependency_t = type { %struct.arm_2d_helper_render_evt_t, %struct.arm_2d_helper_draw_evt_t, %struct.arm_2d_evt_t, %struct.arm_2d_evt_t, %struct.anon.42, %struct.arm_2d_helper_before_flushing_evt_t }
%struct.arm_2d_helper_render_evt_t = type { ptr, ptr }
%struct.arm_2d_helper_draw_evt_t = type { ptr, ptr }
%struct.arm_2d_evt_t = type { ptr, ptr }
%struct.anon.42 = type { %struct.arm_2d_helper_draw_evt_t, ptr }
%struct.arm_2d_helper_before_flushing_evt_t = type { ptr, ptr }
%struct.arm_2d_location_t = type { i16, i16 }
%struct.arm_2d_scene_player_t = type { %struct.arm_2d_helper_pfb_t, %struct.anon.1, %struct.anon.2 }
%struct.arm_2d_helper_pfb_t = type { [344 x i8], %struct.anon.0 }
%struct.anon.0 = type { i64, i32, i32 }
%struct.anon.1 = type { i32, i32, i64, i64, i32, float, i16, i16, i32, i64 }
%struct.anon.2 = type { %struct.anon.3, %struct.anon.4, %struct.anon.5, %struct.anon.31 }
%struct.anon.3 = type { ptr, ptr }
%struct.anon.4 = type { i16, i8, i8 }
%struct.anon.5 = type { ptr, i8, i16, %union.anon, %union.__arm_2d_helper_scene_switch_t, %struct.arm_2d_location_t, i16, i16, i64 }
%union.anon = type { %struct.anon.23 }
%struct.anon.23 = type { %struct.arm_2d_tile_t, %struct.arm_2d_filter_iir_blur_descriptor_t }
%struct.arm_2d_tile_t = type { %union.anon.8, %union.anon.19, %union.anon.22 }
%union.anon.8 = type { %struct.anon.9 }
%struct.anon.9 = type { i8, %union.arm_2d_color_info_t, %union.anon.12 }
%union.arm_2d_color_info_t = type { %struct.anon.10 }
%struct.anon.10 = type { i8 }
%union.anon.12 = type { i16 }
%union.anon.19 = type { %struct.arm_2d_region_t }
%struct.arm_2d_region_t = type { %union.anon.20, %union.anon.21 }
%union.anon.20 = type { %struct.arm_2d_location_t }
%union.anon.21 = type { %struct.arm_2d_size_t }
%struct.arm_2d_size_t = type { i16, i16 }
%union.anon.22 = type { ptr }
%struct.arm_2d_filter_iir_blur_descriptor_t = type { [72 x i8], %struct.arm_2d_scratch_mem_t }
%struct.arm_2d_scratch_mem_t = type { %union.anon.24, i64 }
%union.anon.24 = type { %union.anon.25 }
%union.anon.25 = type { %struct.anon.26 }
%struct.anon.26 = type { i32 }
%union.__arm_2d_helper_scene_switch_t = type { i16 }
%struct.anon.31 = type { %struct.arm_2d_scene_evt_t, %struct.arm_2d_scene_evt_t }
%struct.arm_2d_scene_evt_t = type { ptr, ptr }
%struct.arm_2d_scene_t = type { %struct.anon.32, ptr, %union.arm_2d_colour_t, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.anon.41, [7 x i8], %struct.arm_2d_helper_dirty_region_t }
%struct.anon.32 = type { ptr, %struct.anon.33 }
%struct.anon.33 = type { i8 }
%union.arm_2d_colour_t = type { i32 }
%struct.anon.41 = type { i8 }
%struct.arm_2d_helper_dirty_region_t = type { [56 x i8], %struct.arm_2d_helper_dirty_region_item_t }
%struct.arm_2d_helper_dirty_region_item_t = type { [48 x i8], %struct.arm_2d_region_t }
%struct.anon.30 = type { i8, i8 }
%struct.anon = type { i8, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [89 x i8], align 1
@__PRETTY_FUNCTION__.arm_2d_scene_player_task = external hidden unnamed_addr constant [63 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [20 x i8], align 1

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

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

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

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

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

declare i32 @arm_2d_helper_pfb_update_dependency(ptr noundef, i8 noundef zeroext, ptr noundef) #4

; Function Attrs: nounwind uwtable
define dso_local i32 @arm_2d_scene_player_task(ptr noundef nonnull %0) #5 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i8, align 1
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca [1 x %struct.arm_2d_helper_pfb_dependency_t], align 8
  %11 = alloca [1 x %struct.arm_2d_helper_pfb_dependency_t], align 8
  %12 = alloca [1 x %struct.arm_2d_helper_pfb_dependency_t], align 8
  %13 = alloca [1 x %struct.arm_2d_helper_pfb_dependency_t], align 8
  %14 = alloca %struct.arm_2d_location_t, align 2
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  %19 = load ptr, ptr %3, align 8, !tbaa !5
  %20 = icmp ne ptr null, %19
  br i1 %20, label %21, label %22

21:                                               ; preds = %1
  br label %23

22:                                               ; preds = %1
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 2380, ptr noundef @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

23:                                               ; preds = %21
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  %24 = load ptr, ptr %3, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %24, i32 0, i32 2
  %26 = getelementptr inbounds %struct.anon.2, ptr %25, i32 0, i32 0
  %27 = getelementptr inbounds %struct.anon.3, ptr %26, i32 0, i32 0
  %28 = load ptr, ptr %27, align 8, !tbaa !9
  store ptr %28, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %29 = load ptr, ptr %3, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %29, i32 0, i32 2
  %31 = getelementptr inbounds %struct.anon.2, ptr %30, i32 0, i32 1
  %32 = getelementptr inbounds %struct.anon.4, ptr %31, i32 0, i32 2
  %33 = load i8, ptr %32, align 1, !tbaa !25
  %34 = zext i8 %33 to i32
  switch i32 %34, label %549 [
    i32 0, label %35
    i32 1, label %133
    i32 2, label %185
    i32 3, label %263
    i32 4, label %314
    i32 5, label %345
    i32 6, label %374
    i32 7, label %557
    i32 8, label %733
    i32 9, label %893
  ]

35:                                               ; preds = %23
  %36 = load ptr, ptr %4, align 8, !tbaa !5
  %37 = icmp eq ptr null, %36
  br i1 %37, label %38, label %89

38:                                               ; preds = %35
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #7
  store i8 0, ptr %6, align 1, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  store i32 0, ptr %7, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  store ptr null, ptr %8, align 8, !tbaa !5
  br label %39

39:                                               ; preds = %44, %38
  %40 = load ptr, ptr %8, align 8, !tbaa !5
  %41 = getelementptr inbounds i32, ptr %40, i32 1
  store ptr %41, ptr %8, align 8, !tbaa !5
  %42 = icmp eq ptr %40, null
  br i1 %42, label %44, label %43

43:                                               ; preds = %39
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  br label %59

44:                                               ; preds = %39
  %45 = load ptr, ptr %3, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %45, i32 0, i32 2
  %47 = getelementptr inbounds %struct.anon.2, ptr %46, i32 0, i32 1
  %48 = load i16, ptr %47, align 8
  %49 = and i16 %48, 1
  %50 = trunc i16 %49 to i8
  %51 = icmp ne i8 %50, 0
  %52 = zext i1 %51 to i8
  store i8 %52, ptr %6, align 1, !tbaa !26
  %53 = load ptr, ptr %3, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %53, i32 0, i32 2
  %55 = getelementptr inbounds %struct.anon.2, ptr %54, i32 0, i32 1
  %56 = load i16, ptr %55, align 8
  %57 = and i16 %56, -2
  %58 = or i16 %57, 0
  store i16 %58, ptr %55, align 8
  br label %39, !llvm.loop !29

59:                                               ; preds = %43
  %60 = load i8, ptr %6, align 1, !tbaa !26, !range !31, !noundef !32
  %61 = trunc i8 %60 to i1
  br i1 %61, label %62, label %86

62:                                               ; preds = %59
  %63 = load ptr, ptr %3, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %63, i32 0, i32 2
  %65 = getelementptr inbounds %struct.anon.2, ptr %64, i32 0, i32 3
  %66 = getelementptr inbounds %struct.anon.31, ptr %65, i32 0, i32 0
  %67 = getelementptr inbounds %struct.arm_2d_scene_evt_t, ptr %66, i32 0, i32 0
  %68 = load ptr, ptr %67, align 8, !tbaa !33
  %69 = icmp ne ptr null, %68
  br i1 %69, label %70, label %85

70:                                               ; preds = %62
  %71 = load ptr, ptr %3, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %71, i32 0, i32 2
  %73 = getelementptr inbounds %struct.anon.2, ptr %72, i32 0, i32 3
  %74 = getelementptr inbounds %struct.anon.31, ptr %73, i32 0, i32 0
  %75 = getelementptr inbounds %struct.arm_2d_scene_evt_t, ptr %74, i32 0, i32 0
  %76 = load ptr, ptr %75, align 8, !tbaa !33
  %77 = load ptr, ptr %3, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %77, i32 0, i32 2
  %79 = getelementptr inbounds %struct.anon.2, ptr %78, i32 0, i32 3
  %80 = getelementptr inbounds %struct.anon.31, ptr %79, i32 0, i32 0
  %81 = getelementptr inbounds %struct.arm_2d_scene_evt_t, ptr %80, i32 0, i32 1
  %82 = load ptr, ptr %81, align 8, !tbaa !34
  %83 = load ptr, ptr %3, align 8, !tbaa !5
  %84 = load ptr, ptr %4, align 8, !tbaa !5
  call void %76(ptr noundef %82, ptr noundef %83, ptr noundef %84)
  br label %85

85:                                               ; preds = %70, %62
  store i32 2, ptr %9, align 4
  br label %87

86:                                               ; preds = %59
  store i32 0, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %87

87:                                               ; preds = %86, %85
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #7
  %88 = load i32, ptr %9, align 4
  switch i32 %88, label %950 [
    i32 2, label %949
  ]

89:                                               ; preds = %35
  %90 = load ptr, ptr %4, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %90, i32 0, i32 0
  %92 = getelementptr inbounds %struct.anon.32, ptr %91, i32 0, i32 1
  %93 = load i8, ptr %92, align 8
  %94 = and i8 %93, 1
  %95 = icmp ne i8 %94, 0
  br i1 %95, label %113, label %96

96:                                               ; preds = %89
  %97 = load ptr, ptr %4, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %97, i32 0, i32 0
  %99 = getelementptr inbounds %struct.anon.32, ptr %98, i32 0, i32 1
  %100 = load i8, ptr %99, align 8
  %101 = and i8 %100, -2
  %102 = or i8 %101, 1
  store i8 %102, ptr %99, align 8
  %103 = load ptr, ptr %4, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %103, i32 0, i32 6
  %105 = load ptr, ptr %104, align 8, !tbaa !35
  %106 = icmp ne ptr null, %105
  br i1 %106, label %107, label %112

107:                                              ; preds = %96
  %108 = load ptr, ptr %4, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %108, i32 0, i32 6
  %110 = load ptr, ptr %109, align 8, !tbaa !35
  %111 = load ptr, ptr %4, align 8, !tbaa !5
  call void %110(ptr noundef %111)
  br label %112

112:                                              ; preds = %107, %96
  br label %113

113:                                              ; preds = %112, %89
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %114, i32 0, i32 2
  %116 = getelementptr inbounds %struct.anon.2, ptr %115, i32 0, i32 1
  %117 = getelementptr inbounds %struct.anon.4, ptr %116, i32 0, i32 1
  %118 = load i8, ptr %117, align 2
  %119 = and i8 %118, -3
  %120 = or i8 %119, 2
  store i8 %120, ptr %117, align 2
  %121 = load ptr, ptr %3, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %121, i32 0, i32 2
  %123 = getelementptr inbounds %struct.anon.2, ptr %122, i32 0, i32 1
  %124 = load i16, ptr %123, align 8
  %125 = and i16 %124, -2049
  %126 = or i16 %125, 2048
  store i16 %126, ptr %123, align 8
  %127 = load ptr, ptr %3, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %127, i32 0, i32 2
  %129 = getelementptr inbounds %struct.anon.2, ptr %128, i32 0, i32 1
  %130 = getelementptr inbounds %struct.anon.4, ptr %129, i32 0, i32 2
  %131 = load i8, ptr %130, align 1, !tbaa !25
  %132 = add i8 %131, 1
  store i8 %132, ptr %130, align 1, !tbaa !25
  br label %133

133:                                              ; preds = %113, %23
  %134 = load ptr, ptr %4, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %134, i32 0, i32 10
  %136 = load ptr, ptr %135, align 8, !tbaa !43
  %137 = icmp ne ptr null, %136
  br i1 %137, label %138, label %143

138:                                              ; preds = %133
  %139 = load ptr, ptr %4, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %139, i32 0, i32 10
  %141 = load ptr, ptr %140, align 8, !tbaa !43
  %142 = load ptr, ptr %4, align 8, !tbaa !5
  call void %141(ptr noundef %142)
  br label %143

143:                                              ; preds = %138, %133
  %144 = load ptr, ptr %4, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %144, i32 0, i32 14
  %146 = load i8, ptr %145, align 8
  %147 = lshr i8 %146, 7
  %148 = icmp ne i8 %147, 0
  br i1 %148, label %149, label %152

149:                                              ; preds = %143
  %150 = load ptr, ptr %4, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %150, i32 0, i32 16
  call void @arm_2d_helper_dirty_region_on_frame_start(ptr noundef %151)
  br label %152

152:                                              ; preds = %149, %143
  %153 = load ptr, ptr %3, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %153, i32 0, i32 2
  %155 = getelementptr inbounds %struct.anon.2, ptr %154, i32 0, i32 1
  %156 = getelementptr inbounds %struct.anon.4, ptr %155, i32 0, i32 1
  %157 = load i8, ptr %156, align 2
  %158 = lshr i8 %157, 1
  %159 = and i8 %158, 1
  %160 = icmp ne i8 %159, 0
  br i1 %160, label %166, label %161

161:                                              ; preds = %152
  %162 = load ptr, ptr %3, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %162, i32 0, i32 2
  %164 = getelementptr inbounds %struct.anon.2, ptr %163, i32 0, i32 1
  %165 = getelementptr inbounds %struct.anon.4, ptr %164, i32 0, i32 2
  store i8 4, ptr %165, align 1, !tbaa !25
  br label %949

166:                                              ; preds = %152
  %167 = load ptr, ptr %3, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %167, i32 0, i32 2
  %169 = getelementptr inbounds %struct.anon.2, ptr %168, i32 0, i32 1
  %170 = getelementptr inbounds %struct.anon.4, ptr %169, i32 0, i32 1
  %171 = load i8, ptr %170, align 2
  %172 = and i8 %171, -3
  %173 = or i8 %172, 0
  store i8 %173, ptr %170, align 2
  %174 = load ptr, ptr %3, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %174, i32 0, i32 2
  %176 = getelementptr inbounds %struct.anon.2, ptr %175, i32 0, i32 1
  %177 = getelementptr inbounds %struct.anon.4, ptr %176, i32 0, i32 2
  store i8 2, ptr %177, align 1, !tbaa !25
  br label %178

178:                                              ; preds = %166
  %179 = load ptr, ptr %3, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %179, i32 0, i32 0
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %181, i32 0, i32 2
  %183 = getelementptr inbounds %union.arm_2d_colour_t, ptr %182, i32 0, i32 0
  %184 = load i32, ptr %183, align 8
  call void @__arm_2d_helper_pfb_enable_drawing_canvas_colour(ptr noundef %180, i32 %184)
  br label %185

185:                                              ; preds = %178, %23
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %186, i32 0, i32 3
  %188 = load ptr, ptr %187, align 8, !tbaa !44
  %189 = icmp eq ptr null, %188
  br i1 %189, label %190, label %234

190:                                              ; preds = %185
  %191 = load ptr, ptr %4, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %191, i32 0, i32 4
  %193 = load ptr, ptr %192, align 8, !tbaa !45
  %194 = icmp ne ptr null, %193
  br i1 %194, label %195, label %228

195:                                              ; preds = %190
  %196 = load ptr, ptr %4, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %196, i32 0, i32 5
  %198 = load ptr, ptr %197, align 8, !tbaa !46
  %199 = icmp ne ptr null, %198
  br i1 %199, label %200, label %228

200:                                              ; preds = %195
  %201 = load ptr, ptr %4, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %201, i32 0, i32 8
  %203 = load ptr, ptr %202, align 8, !tbaa !47
  %204 = icmp ne ptr null, %203
  br i1 %204, label %205, label %210

205:                                              ; preds = %200
  %206 = load ptr, ptr %4, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %206, i32 0, i32 8
  %208 = load ptr, ptr %207, align 8, !tbaa !47
  %209 = load ptr, ptr %4, align 8, !tbaa !5
  call void %208(ptr noundef %209)
  br label %210

210:                                              ; preds = %205, %200
  %211 = load ptr, ptr %3, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %211, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 8 %10, i8 0, i64 104, i1 false)
  %213 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %10, i32 0, i32 0
  %214 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %10, i32 0, i32 1
  %215 = getelementptr inbounds %struct.arm_2d_helper_draw_evt_t, ptr %214, i32 0, i32 0
  store ptr @__pfb_draw_scene_handler, ptr %215, align 8, !tbaa !48
  %216 = getelementptr inbounds %struct.arm_2d_helper_draw_evt_t, ptr %214, i32 0, i32 1
  %217 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %217, ptr %216, align 8, !tbaa !50
  %218 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %10, i32 0, i32 2
  %219 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %10, i32 0, i32 3
  %220 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %10, i32 0, i32 4
  %221 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %10, i32 0, i32 5
  %222 = getelementptr inbounds [1 x %struct.arm_2d_helper_pfb_dependency_t], ptr %10, i64 0, i64 0
  %223 = call i32 @arm_2d_helper_pfb_update_dependency(ptr noundef %212, i8 noundef zeroext 2, ptr noundef %222)
  %224 = load ptr, ptr %3, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %224, i32 0, i32 2
  %226 = getelementptr inbounds %struct.anon.2, ptr %225, i32 0, i32 1
  %227 = getelementptr inbounds %struct.anon.4, ptr %226, i32 0, i32 2
  store i8 3, ptr %227, align 1, !tbaa !25
  br label %233

228:                                              ; preds = %195, %190
  %229 = load ptr, ptr %3, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %229, i32 0, i32 2
  %231 = getelementptr inbounds %struct.anon.2, ptr %230, i32 0, i32 1
  %232 = getelementptr inbounds %struct.anon.4, ptr %231, i32 0, i32 2
  store i8 4, ptr %232, align 1, !tbaa !25
  br label %233

233:                                              ; preds = %228, %210
  br label %949

234:                                              ; preds = %185
  %235 = load ptr, ptr %4, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %235, i32 0, i32 8
  %237 = load ptr, ptr %236, align 8, !tbaa !47
  %238 = icmp ne ptr null, %237
  br i1 %238, label %239, label %244

239:                                              ; preds = %234
  %240 = load ptr, ptr %4, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %240, i32 0, i32 8
  %242 = load ptr, ptr %241, align 8, !tbaa !47
  %243 = load ptr, ptr %4, align 8, !tbaa !5
  call void %242(ptr noundef %243)
  br label %244

244:                                              ; preds = %239, %234
  %245 = load ptr, ptr %3, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %245, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 8 %11, i8 0, i64 104, i1 false)
  %247 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %11, i32 0, i32 0
  %248 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %11, i32 0, i32 1
  %249 = getelementptr inbounds %struct.arm_2d_helper_draw_evt_t, ptr %248, i32 0, i32 0
  store ptr @__pfb_draw_scene_background_handler, ptr %249, align 8, !tbaa !48
  %250 = getelementptr inbounds %struct.arm_2d_helper_draw_evt_t, ptr %248, i32 0, i32 1
  %251 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %251, ptr %250, align 8, !tbaa !50
  %252 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %11, i32 0, i32 2
  %253 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %11, i32 0, i32 3
  %254 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %11, i32 0, i32 4
  %255 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %11, i32 0, i32 5
  %256 = getelementptr inbounds [1 x %struct.arm_2d_helper_pfb_dependency_t], ptr %11, i64 0, i64 0
  %257 = call i32 @arm_2d_helper_pfb_update_dependency(ptr noundef %246, i8 noundef zeroext 2, ptr noundef %256)
  %258 = load ptr, ptr %3, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %258, i32 0, i32 2
  %260 = getelementptr inbounds %struct.anon.2, ptr %259, i32 0, i32 1
  %261 = getelementptr inbounds %struct.anon.4, ptr %260, i32 0, i32 2
  store i8 3, ptr %261, align 1, !tbaa !25
  br label %262

262:                                              ; preds = %244
  br label %263

263:                                              ; preds = %262, %23
  %264 = load ptr, ptr %3, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %264, i32 0, i32 0
  %266 = call i32 @arm_2d_helper_pfb_task(ptr noundef %265, ptr noundef null)
  store i32 %266, ptr %5, align 4, !tbaa !28
  %267 = load i32, ptr %5, align 4, !tbaa !28
  %268 = icmp slt i32 %267, 0
  br i1 %268, label %269, label %278

269:                                              ; preds = %263
  br label %270

270:                                              ; preds = %269
  %271 = load ptr, ptr %3, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %271, i32 0, i32 2
  %273 = getelementptr inbounds %struct.anon.2, ptr %272, i32 0, i32 1
  %274 = getelementptr inbounds %struct.anon.4, ptr %273, i32 0, i32 2
  store i8 0, ptr %274, align 1, !tbaa !25
  br label %275

275:                                              ; preds = %270
  br label %276

276:                                              ; preds = %275
  %277 = load i32, ptr %5, align 4, !tbaa !28
  store i32 %277, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

278:                                              ; preds = %263
  %279 = load i32, ptr %5, align 4, !tbaa !28
  %280 = icmp ne i32 0, %279
  br i1 %280, label %281, label %283

281:                                              ; preds = %278
  %282 = load i32, ptr %5, align 4, !tbaa !28
  store i32 %282, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

283:                                              ; preds = %278
  br label %284

284:                                              ; preds = %283
  %285 = load ptr, ptr %4, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %285, i32 0, i32 9
  %287 = load ptr, ptr %286, align 8, !tbaa !51
  %288 = icmp ne ptr null, %287
  br i1 %288, label %289, label %294

289:                                              ; preds = %284
  %290 = load ptr, ptr %4, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %290, i32 0, i32 9
  %292 = load ptr, ptr %291, align 8, !tbaa !51
  %293 = load ptr, ptr %4, align 8, !tbaa !5
  call void %292(ptr noundef %293)
  br label %294

294:                                              ; preds = %289, %284
  %295 = load ptr, ptr %4, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %295, i32 0, i32 3
  %297 = load ptr, ptr %296, align 8, !tbaa !44
  %298 = icmp eq ptr null, %297
  br i1 %298, label %299, label %309

299:                                              ; preds = %294
  %300 = load ptr, ptr %4, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %300, i32 0, i32 5
  %302 = load ptr, ptr %301, align 8, !tbaa !46
  %303 = icmp ne ptr null, %302
  br i1 %303, label %304, label %309

304:                                              ; preds = %299
  %305 = load ptr, ptr %3, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %305, i32 0, i32 2
  %307 = getelementptr inbounds %struct.anon.2, ptr %306, i32 0, i32 1
  %308 = getelementptr inbounds %struct.anon.4, ptr %307, i32 0, i32 2
  store i8 6, ptr %308, align 1, !tbaa !25
  br label %949

309:                                              ; preds = %299, %294
  %310 = load ptr, ptr %3, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %310, i32 0, i32 2
  %312 = getelementptr inbounds %struct.anon.2, ptr %311, i32 0, i32 1
  %313 = getelementptr inbounds %struct.anon.4, ptr %312, i32 0, i32 2
  store i8 4, ptr %313, align 1, !tbaa !25
  br label %314

314:                                              ; preds = %309, %23
  %315 = load ptr, ptr %4, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %315, i32 0, i32 5
  %317 = load ptr, ptr %316, align 8, !tbaa !46
  %318 = icmp eq ptr null, %317
  br i1 %318, label %319, label %327

319:                                              ; preds = %314
  br label %320

320:                                              ; preds = %319
  %321 = load ptr, ptr %3, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %321, i32 0, i32 2
  %323 = getelementptr inbounds %struct.anon.2, ptr %322, i32 0, i32 1
  %324 = getelementptr inbounds %struct.anon.4, ptr %323, i32 0, i32 2
  store i8 0, ptr %324, align 1, !tbaa !25
  br label %325

325:                                              ; preds = %320
  br label %326

326:                                              ; preds = %325
  store i32 -2, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

327:                                              ; preds = %314
  %328 = load ptr, ptr %3, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %328, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 8 %12, i8 0, i64 104, i1 false)
  %330 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %12, i32 0, i32 0
  %331 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %12, i32 0, i32 1
  %332 = getelementptr inbounds %struct.arm_2d_helper_draw_evt_t, ptr %331, i32 0, i32 0
  store ptr @__pfb_draw_scene_handler, ptr %332, align 8, !tbaa !48
  %333 = getelementptr inbounds %struct.arm_2d_helper_draw_evt_t, ptr %331, i32 0, i32 1
  %334 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %334, ptr %333, align 8, !tbaa !50
  %335 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %12, i32 0, i32 2
  %336 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %12, i32 0, i32 3
  %337 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %12, i32 0, i32 4
  %338 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %12, i32 0, i32 5
  %339 = getelementptr inbounds [1 x %struct.arm_2d_helper_pfb_dependency_t], ptr %12, i64 0, i64 0
  %340 = call i32 @arm_2d_helper_pfb_update_dependency(ptr noundef %329, i8 noundef zeroext 2, ptr noundef %339)
  %341 = load ptr, ptr %3, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %341, i32 0, i32 2
  %343 = getelementptr inbounds %struct.anon.2, ptr %342, i32 0, i32 1
  %344 = getelementptr inbounds %struct.anon.4, ptr %343, i32 0, i32 2
  store i8 5, ptr %344, align 1, !tbaa !25
  br label %345

345:                                              ; preds = %327, %23
  %346 = load ptr, ptr %3, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %346, i32 0, i32 0
  %348 = load ptr, ptr %4, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %348, i32 0, i32 4
  %350 = load ptr, ptr %349, align 8, !tbaa !45
  %351 = call i32 @arm_2d_helper_pfb_task(ptr noundef %347, ptr noundef %350)
  store i32 %351, ptr %5, align 4, !tbaa !28
  %352 = load i32, ptr %5, align 4, !tbaa !28
  %353 = icmp slt i32 %352, 0
  br i1 %353, label %354, label %363

354:                                              ; preds = %345
  br label %355

355:                                              ; preds = %354
  %356 = load ptr, ptr %3, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %356, i32 0, i32 2
  %358 = getelementptr inbounds %struct.anon.2, ptr %357, i32 0, i32 1
  %359 = getelementptr inbounds %struct.anon.4, ptr %358, i32 0, i32 2
  store i8 0, ptr %359, align 1, !tbaa !25
  br label %360

360:                                              ; preds = %355
  br label %361

361:                                              ; preds = %360
  %362 = load i32, ptr %5, align 4, !tbaa !28
  store i32 %362, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

363:                                              ; preds = %345
  %364 = load i32, ptr %5, align 4, !tbaa !28
  %365 = icmp ne i32 0, %364
  br i1 %365, label %366, label %368

366:                                              ; preds = %363
  %367 = load i32, ptr %5, align 4, !tbaa !28
  store i32 %367, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

368:                                              ; preds = %363
  br label %369

369:                                              ; preds = %368
  %370 = load ptr, ptr %3, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %370, i32 0, i32 2
  %372 = getelementptr inbounds %struct.anon.2, ptr %371, i32 0, i32 1
  %373 = getelementptr inbounds %struct.anon.4, ptr %372, i32 0, i32 2
  store i8 6, ptr %373, align 1, !tbaa !25
  br label %374

374:                                              ; preds = %369, %23
  %375 = load ptr, ptr %4, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %375, i32 0, i32 11
  %377 = load ptr, ptr %376, align 8, !tbaa !52
  %378 = icmp ne ptr null, %377
  br i1 %378, label %379, label %384

379:                                              ; preds = %374
  %380 = load ptr, ptr %4, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %380, i32 0, i32 11
  %382 = load ptr, ptr %381, align 8, !tbaa !52
  %383 = load ptr, ptr %4, align 8, !tbaa !5
  call void %382(ptr noundef %383)
  br label %384

384:                                              ; preds = %379, %374
  %385 = load ptr, ptr %3, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %385, i32 0, i32 2
  %387 = getelementptr inbounds %struct.anon.2, ptr %386, i32 0, i32 1
  %388 = load i16, ptr %387, align 8
  %389 = lshr i16 %388, 11
  %390 = and i16 %389, 1
  %391 = trunc i16 %390 to i8
  %392 = icmp ne i8 %391, 0
  br i1 %392, label %393, label %410

393:                                              ; preds = %384
  %394 = load ptr, ptr %3, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %394, i32 0, i32 2
  %396 = getelementptr inbounds %struct.anon.2, ptr %395, i32 0, i32 1
  %397 = load i16, ptr %396, align 8
  %398 = and i16 %397, -2049
  %399 = or i16 %398, 0
  store i16 %399, ptr %396, align 8
  %400 = load ptr, ptr %4, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %400, i32 0, i32 7
  %402 = load ptr, ptr %401, align 8, !tbaa !53
  %403 = icmp ne ptr null, %402
  br i1 %403, label %404, label %409

404:                                              ; preds = %393
  %405 = load ptr, ptr %4, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %405, i32 0, i32 7
  %407 = load ptr, ptr %406, align 8, !tbaa !53
  %408 = load ptr, ptr %4, align 8, !tbaa !5
  call void %407(ptr noundef %408)
  br label %409

409:                                              ; preds = %404, %393
  br label %410

410:                                              ; preds = %409, %384
  %411 = load ptr, ptr %3, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %411, i32 0, i32 2
  %413 = getelementptr inbounds %struct.anon.2, ptr %412, i32 0, i32 1
  %414 = load i16, ptr %413, align 8
  %415 = and i16 %414, 1
  %416 = trunc i16 %415 to i8
  %417 = icmp ne i8 %416, 0
  br i1 %417, label %418, label %543

418:                                              ; preds = %410
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %419, i32 0, i32 2
  %421 = getelementptr inbounds %struct.anon.2, ptr %420, i32 0, i32 1
  %422 = load i16, ptr %421, align 8
  %423 = and i16 %422, -2
  %424 = or i16 %423, 0
  store i16 %424, ptr %421, align 8
  %425 = load ptr, ptr %4, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %425, i32 0, i32 12
  %427 = load ptr, ptr %426, align 8, !tbaa !54
  %428 = icmp ne ptr null, %427
  br i1 %428, label %429, label %434

429:                                              ; preds = %418
  %430 = load ptr, ptr %4, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %430, i32 0, i32 12
  %432 = load ptr, ptr %431, align 8, !tbaa !54
  %433 = load ptr, ptr %4, align 8, !tbaa !5
  call void %432(ptr noundef %433)
  br label %434

434:                                              ; preds = %429, %418
  %435 = load ptr, ptr %3, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %435, i32 0, i32 2
  %437 = getelementptr inbounds %struct.anon.2, ptr %436, i32 0, i32 3
  %438 = getelementptr inbounds %struct.anon.31, ptr %437, i32 0, i32 0
  %439 = getelementptr inbounds %struct.arm_2d_scene_evt_t, ptr %438, i32 0, i32 0
  %440 = load ptr, ptr %439, align 8, !tbaa !33
  %441 = icmp ne ptr null, %440
  br i1 %441, label %442, label %457

442:                                              ; preds = %434
  %443 = load ptr, ptr %3, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %443, i32 0, i32 2
  %445 = getelementptr inbounds %struct.anon.2, ptr %444, i32 0, i32 3
  %446 = getelementptr inbounds %struct.anon.31, ptr %445, i32 0, i32 0
  %447 = getelementptr inbounds %struct.arm_2d_scene_evt_t, ptr %446, i32 0, i32 0
  %448 = load ptr, ptr %447, align 8, !tbaa !33
  %449 = load ptr, ptr %3, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %449, i32 0, i32 2
  %451 = getelementptr inbounds %struct.anon.2, ptr %450, i32 0, i32 3
  %452 = getelementptr inbounds %struct.anon.31, ptr %451, i32 0, i32 0
  %453 = getelementptr inbounds %struct.arm_2d_scene_evt_t, ptr %452, i32 0, i32 1
  %454 = load ptr, ptr %453, align 8, !tbaa !34
  %455 = load ptr, ptr %3, align 8, !tbaa !5
  %456 = load ptr, ptr %4, align 8, !tbaa !5
  call void %448(ptr noundef %454, ptr noundef %455, ptr noundef %456)
  br label %457

457:                                              ; preds = %442, %434
  %458 = load ptr, ptr %3, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %458, i32 0, i32 2
  %460 = getelementptr inbounds %struct.anon.2, ptr %459, i32 0, i32 2
  %461 = getelementptr inbounds %struct.anon.5, ptr %460, i32 0, i32 0
  %462 = load ptr, ptr %461, align 8, !tbaa !55
  %463 = icmp eq ptr null, %462
  br i1 %463, label %464, label %470

464:                                              ; preds = %457
  %465 = load ptr, ptr %3, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %465, i32 0, i32 2
  %467 = getelementptr inbounds %struct.anon.2, ptr %466, i32 0, i32 2
  %468 = getelementptr inbounds %struct.anon.5, ptr %467, i32 0, i32 4
  %469 = getelementptr inbounds %struct.anon.30, ptr %468, i32 0, i32 0
  store i8 0, ptr %469, align 8, !tbaa !56
  br label %483

470:                                              ; preds = %457
  %471 = load ptr, ptr %3, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %471, i32 0, i32 2
  %473 = getelementptr inbounds %struct.anon.2, ptr %472, i32 0, i32 2
  %474 = getelementptr inbounds %struct.anon.5, ptr %473, i32 0, i32 0
  %475 = load ptr, ptr %474, align 8, !tbaa !55
  %476 = getelementptr inbounds %struct.anon, ptr %475, i32 0, i32 0
  %477 = load i8, ptr %476, align 8, !tbaa !57
  %478 = load ptr, ptr %3, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %478, i32 0, i32 2
  %480 = getelementptr inbounds %struct.anon.2, ptr %479, i32 0, i32 2
  %481 = getelementptr inbounds %struct.anon.5, ptr %480, i32 0, i32 4
  %482 = getelementptr inbounds %struct.anon.30, ptr %481, i32 0, i32 0
  store i8 %477, ptr %482, align 8, !tbaa !56
  br label %483

483:                                              ; preds = %470, %464
  %484 = load ptr, ptr %3, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %484, i32 0, i32 2
  %486 = getelementptr inbounds %struct.anon.2, ptr %485, i32 0, i32 1
  %487 = load i16, ptr %486, align 8
  %488 = and i16 %487, -9
  %489 = or i16 %488, 0
  store i16 %489, ptr %486, align 8
  %490 = load ptr, ptr %3, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %490, i32 0, i32 2
  %492 = getelementptr inbounds %struct.anon.2, ptr %491, i32 0, i32 1
  %493 = load i16, ptr %492, align 8
  %494 = and i16 %493, -1025
  %495 = or i16 %494, 0
  store i16 %495, ptr %492, align 8
  %496 = load ptr, ptr %3, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %496, i32 0, i32 2
  %498 = getelementptr inbounds %struct.anon.2, ptr %497, i32 0, i32 1
  %499 = load i16, ptr %498, align 8
  %500 = and i16 %499, -5
  %501 = or i16 %500, 0
  store i16 %501, ptr %498, align 8
  %502 = load ptr, ptr %3, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %502, i32 0, i32 2
  %504 = getelementptr inbounds %struct.anon.2, ptr %503, i32 0, i32 1
  %505 = load i16, ptr %504, align 8
  %506 = and i16 %505, -513
  %507 = or i16 %506, 0
  store i16 %507, ptr %504, align 8
  %508 = load ptr, ptr %3, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %508, i32 0, i32 2
  %510 = getelementptr inbounds %struct.anon.2, ptr %509, i32 0, i32 2
  %511 = getelementptr inbounds %struct.anon.5, ptr %510, i32 0, i32 4
  %512 = getelementptr inbounds %struct.anon.30, ptr %511, i32 0, i32 0
  %513 = load i8, ptr %512, align 8, !tbaa !56
  %514 = zext i8 %513 to i32
  %515 = icmp eq i32 0, %514
  br i1 %515, label %532, label %516

516:                                              ; preds = %483
  %517 = load ptr, ptr %3, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %517, i32 0, i32 2
  %519 = getelementptr inbounds %struct.anon.2, ptr %518, i32 0, i32 2
  %520 = getelementptr inbounds %struct.anon.5, ptr %519, i32 0, i32 4
  %521 = getelementptr inbounds %struct.anon.30, ptr %520, i32 0, i32 0
  %522 = load i8, ptr %521, align 8, !tbaa !56
  %523 = zext i8 %522 to i32
  %524 = icmp sge i32 %523, 16
  br i1 %524, label %532, label %525

525:                                              ; preds = %516
  %526 = load ptr, ptr %3, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %526, i32 0, i32 2
  %528 = getelementptr inbounds %struct.anon.2, ptr %527, i32 0, i32 2
  %529 = getelementptr inbounds %struct.anon.5, ptr %528, i32 0, i32 0
  %530 = load ptr, ptr %529, align 8, !tbaa !55
  %531 = icmp eq ptr null, %530
  br i1 %531, label %532, label %537

532:                                              ; preds = %525, %516, %483
  %533 = load ptr, ptr %3, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %533, i32 0, i32 2
  %535 = getelementptr inbounds %struct.anon.2, ptr %534, i32 0, i32 1
  %536 = getelementptr inbounds %struct.anon.4, ptr %535, i32 0, i32 2
  store i8 9, ptr %536, align 1, !tbaa !25
  br label %542

537:                                              ; preds = %525
  %538 = load ptr, ptr %3, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %538, i32 0, i32 2
  %540 = getelementptr inbounds %struct.anon.2, ptr %539, i32 0, i32 1
  %541 = getelementptr inbounds %struct.anon.4, ptr %540, i32 0, i32 2
  store i8 7, ptr %541, align 1, !tbaa !25
  br label %542

542:                                              ; preds = %537, %532
  br label %548

543:                                              ; preds = %410
  %544 = load ptr, ptr %3, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %544, i32 0, i32 2
  %546 = getelementptr inbounds %struct.anon.2, ptr %545, i32 0, i32 1
  %547 = getelementptr inbounds %struct.anon.4, ptr %546, i32 0, i32 2
  store i8 1, ptr %547, align 1, !tbaa !25
  br label %548

548:                                              ; preds = %543, %542
  store i32 0, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

549:                                              ; preds = %23
  br label %550

550:                                              ; preds = %549
  %551 = load ptr, ptr %3, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %551, i32 0, i32 2
  %553 = getelementptr inbounds %struct.anon.2, ptr %552, i32 0, i32 1
  %554 = getelementptr inbounds %struct.anon.4, ptr %553, i32 0, i32 2
  store i8 0, ptr %554, align 1, !tbaa !25
  br label %555

555:                                              ; preds = %550
  br label %556

556:                                              ; preds = %555
  br label %949

557:                                              ; preds = %23
  %558 = load ptr, ptr %3, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %558, i32 0, i32 2
  %560 = getelementptr inbounds %struct.anon.2, ptr %559, i32 0, i32 2
  %561 = getelementptr inbounds %struct.anon.5, ptr %560, i32 0, i32 0
  %562 = load ptr, ptr %561, align 8, !tbaa !55
  %563 = getelementptr inbounds %struct.anon, ptr %562, i32 0, i32 0
  %564 = load i8, ptr %563, align 8, !tbaa !57
  %565 = zext i8 %564 to i32
  %566 = icmp ne i32 %565, 0
  br i1 %566, label %567, label %568

567:                                              ; preds = %557
  br label %569

568:                                              ; preds = %557
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 2583, ptr noundef @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

569:                                              ; preds = %567
  %570 = load ptr, ptr %3, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %570, i32 0, i32 0
  call void @__arm_2d_helper_pfb_disable_drawing_canvas_colour(ptr noundef %571)
  %572 = load ptr, ptr %3, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %572, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 8 %13, i8 0, i64 104, i1 false)
  %574 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %13, i32 0, i32 0
  %575 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %13, i32 0, i32 1
  %576 = getelementptr inbounds %struct.arm_2d_helper_draw_evt_t, ptr %575, i32 0, i32 0
  %577 = load ptr, ptr %3, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %577, i32 0, i32 2
  %579 = getelementptr inbounds %struct.anon.2, ptr %578, i32 0, i32 2
  %580 = getelementptr inbounds %struct.anon.5, ptr %579, i32 0, i32 0
  %581 = load ptr, ptr %580, align 8, !tbaa !55
  %582 = getelementptr inbounds %struct.anon, ptr %581, i32 0, i32 1
  %583 = load ptr, ptr %582, align 8, !tbaa !59
  store ptr %583, ptr %576, align 8, !tbaa !48
  %584 = getelementptr inbounds %struct.arm_2d_helper_draw_evt_t, ptr %575, i32 0, i32 1
  %585 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %585, ptr %584, align 8, !tbaa !50
  %586 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %13, i32 0, i32 2
  %587 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %13, i32 0, i32 3
  %588 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %13, i32 0, i32 4
  %589 = getelementptr inbounds %struct.arm_2d_helper_pfb_dependency_t, ptr %13, i32 0, i32 5
  %590 = getelementptr inbounds [1 x %struct.arm_2d_helper_pfb_dependency_t], ptr %13, i64 0, i64 0
  %591 = call i32 @arm_2d_helper_pfb_update_dependency(ptr noundef %573, i8 noundef zeroext 2, ptr noundef %590)
  %592 = load ptr, ptr %3, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %592, i32 0, i32 2
  %594 = getelementptr inbounds %struct.anon.2, ptr %593, i32 0, i32 1
  %595 = getelementptr inbounds %struct.anon.4, ptr %594, i32 0, i32 1
  %596 = load i8, ptr %595, align 2
  %597 = and i8 %596, -2
  %598 = or i8 %597, 0
  store i8 %598, ptr %595, align 2
  %599 = load ptr, ptr %3, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %599, i32 0, i32 2
  %601 = getelementptr inbounds %struct.anon.2, ptr %600, i32 0, i32 2
  %602 = getelementptr inbounds %struct.anon.5, ptr %601, i32 0, i32 7
  %603 = load i16, ptr %602, align 8, !tbaa !60
  %604 = zext i16 %603 to i32
  %605 = icmp sgt i32 200, %604
  br i1 %605, label %606, label %607

606:                                              ; preds = %569
  br label %614

607:                                              ; preds = %569
  %608 = load ptr, ptr %3, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %608, i32 0, i32 2
  %610 = getelementptr inbounds %struct.anon.2, ptr %609, i32 0, i32 2
  %611 = getelementptr inbounds %struct.anon.5, ptr %610, i32 0, i32 7
  %612 = load i16, ptr %611, align 8, !tbaa !60
  %613 = zext i16 %612 to i32
  br label %614

614:                                              ; preds = %607, %606
  %615 = phi i32 [ 200, %606 ], [ %613, %607 ]
  %616 = trunc i32 %615 to i16
  %617 = load ptr, ptr %3, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %617, i32 0, i32 2
  %619 = getelementptr inbounds %struct.anon.2, ptr %618, i32 0, i32 2
  %620 = getelementptr inbounds %struct.anon.5, ptr %619, i32 0, i32 7
  store i16 %616, ptr %620, align 8, !tbaa !60
  %621 = load ptr, ptr %3, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %621, i32 0, i32 2
  %623 = getelementptr inbounds %struct.anon.2, ptr %622, i32 0, i32 1
  %624 = getelementptr inbounds %struct.anon.4, ptr %623, i32 0, i32 1
  %625 = load i8, ptr %624, align 2
  %626 = and i8 %625, -17
  %627 = or i8 %626, 0
  store i8 %627, ptr %624, align 2
  %628 = load ptr, ptr %3, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %628, i32 0, i32 2
  %630 = getelementptr inbounds %struct.anon.2, ptr %629, i32 0, i32 1
  %631 = getelementptr inbounds %struct.anon.4, ptr %630, i32 0, i32 1
  %632 = load i8, ptr %631, align 2
  %633 = and i8 %632, -33
  %634 = or i8 %633, 0
  store i8 %634, ptr %631, align 2
  %635 = load ptr, ptr %3, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %635, i32 0, i32 2
  %637 = getelementptr inbounds %struct.anon.2, ptr %636, i32 0, i32 1
  %638 = getelementptr inbounds %struct.anon.4, ptr %637, i32 0, i32 1
  %639 = load i8, ptr %638, align 2
  %640 = and i8 %639, -65
  %641 = or i8 %640, 0
  store i8 %641, ptr %638, align 2
  %642 = load ptr, ptr %3, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %642, i32 0, i32 2
  %644 = getelementptr inbounds %struct.anon.2, ptr %643, i32 0, i32 1
  %645 = getelementptr inbounds %struct.anon.4, ptr %644, i32 0, i32 1
  %646 = load i8, ptr %645, align 2
  %647 = and i8 %646, 127
  %648 = or i8 %647, 0
  store i8 %648, ptr %645, align 2
  %649 = load ptr, ptr %3, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %649, i32 0, i32 2
  %651 = getelementptr inbounds %struct.anon.2, ptr %650, i32 0, i32 2
  %652 = getelementptr inbounds %struct.anon.5, ptr %651, i32 0, i32 5
  %653 = getelementptr inbounds %struct.arm_2d_location_t, ptr %14, i32 0, i32 0
  store i16 -1, ptr %653, align 2, !tbaa !61
  %654 = getelementptr inbounds %struct.arm_2d_location_t, ptr %14, i32 0, i32 1
  store i16 -1, ptr %654, align 2, !tbaa !62
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %652, ptr align 2 %14, i64 4, i1 false), !tbaa.struct !63
  %655 = load ptr, ptr %3, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %655, i32 0, i32 2
  %657 = getelementptr inbounds %struct.anon.2, ptr %656, i32 0, i32 2
  %658 = getelementptr inbounds %struct.anon.5, ptr %657, i32 0, i32 1
  store i8 0, ptr %658, align 8, !tbaa !65
  %659 = load ptr, ptr %3, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %659, i32 0, i32 2
  %661 = getelementptr inbounds %struct.anon.2, ptr %660, i32 0, i32 1
  %662 = getelementptr inbounds %struct.anon.4, ptr %661, i32 0, i32 2
  store i8 8, ptr %662, align 1, !tbaa !25
  %663 = load ptr, ptr %3, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %663, i32 0, i32 2
  %665 = getelementptr inbounds %struct.anon.2, ptr %664, i32 0, i32 0
  %666 = getelementptr inbounds %struct.anon.3, ptr %665, i32 0, i32 0
  %667 = load ptr, ptr %666, align 8, !tbaa !9
  %668 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %667, i32 0, i32 0
  %669 = getelementptr inbounds %struct.anon.32, ptr %668, i32 0, i32 0
  %670 = load ptr, ptr %669, align 8, !tbaa !66
  %671 = icmp ne ptr null, %670
  br i1 %671, label %672, label %732

672:                                              ; preds = %614
  %673 = load ptr, ptr %3, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %673, i32 0, i32 2
  %675 = getelementptr inbounds %struct.anon.2, ptr %674, i32 0, i32 0
  %676 = getelementptr inbounds %struct.anon.3, ptr %675, i32 0, i32 0
  %677 = load ptr, ptr %676, align 8, !tbaa !9
  %678 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %677, i32 0, i32 0
  %679 = getelementptr inbounds %struct.anon.32, ptr %678, i32 0, i32 0
  %680 = load ptr, ptr %679, align 8, !tbaa !66
  %681 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %680, i32 0, i32 0
  %682 = getelementptr inbounds %struct.anon.32, ptr %681, i32 0, i32 1
  %683 = load i8, ptr %682, align 8
  %684 = and i8 %683, 1
  %685 = icmp ne i8 %684, 0
  br i1 %685, label %731, label %686

686:                                              ; preds = %672
  %687 = load ptr, ptr %3, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %687, i32 0, i32 2
  %689 = getelementptr inbounds %struct.anon.2, ptr %688, i32 0, i32 0
  %690 = getelementptr inbounds %struct.anon.3, ptr %689, i32 0, i32 0
  %691 = load ptr, ptr %690, align 8, !tbaa !9
  %692 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %691, i32 0, i32 0
  %693 = getelementptr inbounds %struct.anon.32, ptr %692, i32 0, i32 0
  %694 = load ptr, ptr %693, align 8, !tbaa !66
  %695 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %694, i32 0, i32 0
  %696 = getelementptr inbounds %struct.anon.32, ptr %695, i32 0, i32 1
  %697 = load i8, ptr %696, align 8
  %698 = and i8 %697, -2
  %699 = or i8 %698, 1
  store i8 %699, ptr %696, align 8
  %700 = load ptr, ptr %3, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %700, i32 0, i32 2
  %702 = getelementptr inbounds %struct.anon.2, ptr %701, i32 0, i32 0
  %703 = getelementptr inbounds %struct.anon.3, ptr %702, i32 0, i32 0
  %704 = load ptr, ptr %703, align 8, !tbaa !9
  %705 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %704, i32 0, i32 0
  %706 = getelementptr inbounds %struct.anon.32, ptr %705, i32 0, i32 0
  %707 = load ptr, ptr %706, align 8, !tbaa !66
  %708 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %707, i32 0, i32 6
  %709 = load ptr, ptr %708, align 8, !tbaa !35
  %710 = icmp ne ptr null, %709
  br i1 %710, label %711, label %730

711:                                              ; preds = %686
  %712 = load ptr, ptr %3, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %712, i32 0, i32 2
  %714 = getelementptr inbounds %struct.anon.2, ptr %713, i32 0, i32 0
  %715 = getelementptr inbounds %struct.anon.3, ptr %714, i32 0, i32 0
  %716 = load ptr, ptr %715, align 8, !tbaa !9
  %717 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %716, i32 0, i32 0
  %718 = getelementptr inbounds %struct.anon.32, ptr %717, i32 0, i32 0
  %719 = load ptr, ptr %718, align 8, !tbaa !66
  %720 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %719, i32 0, i32 6
  %721 = load ptr, ptr %720, align 8, !tbaa !35
  %722 = load ptr, ptr %3, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %722, i32 0, i32 2
  %724 = getelementptr inbounds %struct.anon.2, ptr %723, i32 0, i32 0
  %725 = getelementptr inbounds %struct.anon.3, ptr %724, i32 0, i32 0
  %726 = load ptr, ptr %725, align 8, !tbaa !9
  %727 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %726, i32 0, i32 0
  %728 = getelementptr inbounds %struct.anon.32, ptr %727, i32 0, i32 0
  %729 = load ptr, ptr %728, align 8, !tbaa !66
  call void %721(ptr noundef %729)
  br label %730

730:                                              ; preds = %711, %686
  br label %731

731:                                              ; preds = %730, %672
  br label %732

732:                                              ; preds = %731, %614
  br label %733

733:                                              ; preds = %732, %23
  %734 = load ptr, ptr %3, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %734, i32 0, i32 0
  %736 = call i32 @arm_2d_helper_pfb_task(ptr noundef %735, ptr noundef null)
  store i32 %736, ptr %5, align 4, !tbaa !28
  %737 = load i32, ptr %5, align 4, !tbaa !28
  %738 = icmp slt i32 %737, 0
  br i1 %738, label %739, label %748

739:                                              ; preds = %733
  br label %740

740:                                              ; preds = %739
  %741 = load ptr, ptr %3, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %741, i32 0, i32 2
  %743 = getelementptr inbounds %struct.anon.2, ptr %742, i32 0, i32 1
  %744 = getelementptr inbounds %struct.anon.4, ptr %743, i32 0, i32 2
  store i8 0, ptr %744, align 1, !tbaa !25
  br label %745

745:                                              ; preds = %740
  br label %746

746:                                              ; preds = %745
  %747 = load i32, ptr %5, align 4, !tbaa !28
  store i32 %747, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

748:                                              ; preds = %733
  %749 = load i32, ptr %5, align 4, !tbaa !28
  %750 = icmp ne i32 0, %749
  br i1 %750, label %751, label %753

751:                                              ; preds = %748
  %752 = load i32, ptr %5, align 4, !tbaa !28
  store i32 %752, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

753:                                              ; preds = %748
  br label %754

754:                                              ; preds = %753
  %755 = load ptr, ptr %3, align 8, !tbaa !5
  %756 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %755, i32 0, i32 2
  %757 = getelementptr inbounds %struct.anon.2, ptr %756, i32 0, i32 1
  %758 = getelementptr inbounds %struct.anon.4, ptr %757, i32 0, i32 1
  %759 = load i8, ptr %758, align 2
  %760 = lshr i8 %759, 6
  %761 = and i8 %760, 1
  %762 = icmp ne i8 %761, 0
  br i1 %762, label %763, label %784

763:                                              ; preds = %754
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %764 = load ptr, ptr %3, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %764, i32 0, i32 2
  %766 = getelementptr inbounds %struct.anon.2, ptr %765, i32 0, i32 0
  %767 = getelementptr inbounds %struct.anon.3, ptr %766, i32 0, i32 0
  %768 = load ptr, ptr %767, align 8, !tbaa !9
  store ptr %768, ptr %15, align 8, !tbaa !5
  %769 = load ptr, ptr %15, align 8, !tbaa !5
  %770 = icmp ne ptr null, %769
  br i1 %770, label %771, label %772

771:                                              ; preds = %763
  br label %773

772:                                              ; preds = %763
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 2635, ptr noundef @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

773:                                              ; preds = %771
  %774 = load ptr, ptr %15, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %774, i32 0, i32 9
  %776 = load ptr, ptr %775, align 8, !tbaa !51
  %777 = icmp ne ptr null, %776
  br i1 %777, label %778, label %783

778:                                              ; preds = %773
  %779 = load ptr, ptr %15, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %779, i32 0, i32 9
  %781 = load ptr, ptr %780, align 8, !tbaa !51
  %782 = load ptr, ptr %15, align 8, !tbaa !5
  call void %781(ptr noundef %782)
  br label %783

783:                                              ; preds = %778, %773
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %784

784:                                              ; preds = %783, %754
  %785 = load ptr, ptr %3, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %785, i32 0, i32 2
  %787 = getelementptr inbounds %struct.anon.2, ptr %786, i32 0, i32 1
  %788 = getelementptr inbounds %struct.anon.4, ptr %787, i32 0, i32 1
  %789 = load i8, ptr %788, align 2
  %790 = lshr i8 %789, 4
  %791 = and i8 %790, 1
  %792 = icmp ne i8 %791, 0
  br i1 %792, label %793, label %814

793:                                              ; preds = %784
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %794 = load ptr, ptr %3, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %794, i32 0, i32 2
  %796 = getelementptr inbounds %struct.anon.2, ptr %795, i32 0, i32 0
  %797 = getelementptr inbounds %struct.anon.3, ptr %796, i32 0, i32 0
  %798 = load ptr, ptr %797, align 8, !tbaa !9
  store ptr %798, ptr %16, align 8, !tbaa !5
  %799 = load ptr, ptr %16, align 8, !tbaa !5
  %800 = icmp ne ptr null, %799
  br i1 %800, label %801, label %802

801:                                              ; preds = %793
  br label %803

802:                                              ; preds = %793
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 2641, ptr noundef @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

803:                                              ; preds = %801
  %804 = load ptr, ptr %16, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %804, i32 0, i32 11
  %806 = load ptr, ptr %805, align 8, !tbaa !52
  %807 = icmp ne ptr null, %806
  br i1 %807, label %808, label %813

808:                                              ; preds = %803
  %809 = load ptr, ptr %16, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %809, i32 0, i32 11
  %811 = load ptr, ptr %810, align 8, !tbaa !52
  %812 = load ptr, ptr %16, align 8, !tbaa !5
  call void %811(ptr noundef %812)
  br label %813

813:                                              ; preds = %808, %803
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %814

814:                                              ; preds = %813, %784
  %815 = load ptr, ptr %3, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %815, i32 0, i32 2
  %817 = getelementptr inbounds %struct.anon.2, ptr %816, i32 0, i32 1
  %818 = getelementptr inbounds %struct.anon.4, ptr %817, i32 0, i32 1
  %819 = load i8, ptr %818, align 2
  %820 = lshr i8 %819, 7
  %821 = icmp ne i8 %820, 0
  br i1 %821, label %822, label %846

822:                                              ; preds = %814
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %823 = load ptr, ptr %3, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %823, i32 0, i32 2
  %825 = getelementptr inbounds %struct.anon.2, ptr %824, i32 0, i32 0
  %826 = getelementptr inbounds %struct.anon.3, ptr %825, i32 0, i32 0
  %827 = load ptr, ptr %826, align 8, !tbaa !9
  %828 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %827, i32 0, i32 0
  %829 = getelementptr inbounds %struct.anon.32, ptr %828, i32 0, i32 0
  %830 = load ptr, ptr %829, align 8, !tbaa !66
  store ptr %830, ptr %17, align 8, !tbaa !5
  %831 = load ptr, ptr %17, align 8, !tbaa !5
  %832 = icmp ne ptr null, %831
  br i1 %832, label %833, label %834

833:                                              ; preds = %822
  br label %835

834:                                              ; preds = %822
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 2647, ptr noundef @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

835:                                              ; preds = %833
  %836 = load ptr, ptr %17, align 8, !tbaa !5
  %837 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %836, i32 0, i32 9
  %838 = load ptr, ptr %837, align 8, !tbaa !51
  %839 = icmp ne ptr null, %838
  br i1 %839, label %840, label %845

840:                                              ; preds = %835
  %841 = load ptr, ptr %17, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %841, i32 0, i32 9
  %843 = load ptr, ptr %842, align 8, !tbaa !51
  %844 = load ptr, ptr %17, align 8, !tbaa !5
  call void %843(ptr noundef %844)
  br label %845

845:                                              ; preds = %840, %835
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  br label %846

846:                                              ; preds = %845, %814
  %847 = load ptr, ptr %3, align 8, !tbaa !5
  %848 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %847, i32 0, i32 2
  %849 = getelementptr inbounds %struct.anon.2, ptr %848, i32 0, i32 1
  %850 = getelementptr inbounds %struct.anon.4, ptr %849, i32 0, i32 1
  %851 = load i8, ptr %850, align 2
  %852 = lshr i8 %851, 5
  %853 = and i8 %852, 1
  %854 = icmp ne i8 %853, 0
  br i1 %854, label %855, label %879

855:                                              ; preds = %846
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %856 = load ptr, ptr %3, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %856, i32 0, i32 2
  %858 = getelementptr inbounds %struct.anon.2, ptr %857, i32 0, i32 0
  %859 = getelementptr inbounds %struct.anon.3, ptr %858, i32 0, i32 0
  %860 = load ptr, ptr %859, align 8, !tbaa !9
  %861 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %860, i32 0, i32 0
  %862 = getelementptr inbounds %struct.anon.32, ptr %861, i32 0, i32 0
  %863 = load ptr, ptr %862, align 8, !tbaa !66
  store ptr %863, ptr %18, align 8, !tbaa !5
  %864 = load ptr, ptr %18, align 8, !tbaa !5
  %865 = icmp ne ptr null, %864
  br i1 %865, label %866, label %867

866:                                              ; preds = %855
  br label %868

867:                                              ; preds = %855
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 2653, ptr noundef @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

868:                                              ; preds = %866
  %869 = load ptr, ptr %18, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %869, i32 0, i32 11
  %871 = load ptr, ptr %870, align 8, !tbaa !52
  %872 = icmp ne ptr null, %871
  br i1 %872, label %873, label %878

873:                                              ; preds = %868
  %874 = load ptr, ptr %18, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.arm_2d_scene_t, ptr %874, i32 0, i32 11
  %876 = load ptr, ptr %875, align 8, !tbaa !52
  %877 = load ptr, ptr %18, align 8, !tbaa !5
  call void %876(ptr noundef %877)
  br label %878

878:                                              ; preds = %873, %868
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %879

879:                                              ; preds = %878, %846
  %880 = load ptr, ptr %3, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %880, i32 0, i32 2
  %882 = getelementptr inbounds %struct.anon.2, ptr %881, i32 0, i32 1
  %883 = getelementptr inbounds %struct.anon.4, ptr %882, i32 0, i32 1
  %884 = load i8, ptr %883, align 2
  %885 = and i8 %884, 1
  %886 = icmp ne i8 %885, 0
  br i1 %886, label %887, label %892

887:                                              ; preds = %879
  %888 = load ptr, ptr %3, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %888, i32 0, i32 2
  %890 = getelementptr inbounds %struct.anon.2, ptr %889, i32 0, i32 1
  %891 = getelementptr inbounds %struct.anon.4, ptr %890, i32 0, i32 2
  store i8 9, ptr %891, align 1, !tbaa !25
  br label %892

892:                                              ; preds = %887, %879
  store i32 0, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

893:                                              ; preds = %23
  %894 = load ptr, ptr %3, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %894, i32 0, i32 2
  %896 = getelementptr inbounds %struct.anon.2, ptr %895, i32 0, i32 1
  %897 = load i16, ptr %896, align 8
  %898 = lshr i16 %897, 10
  %899 = and i16 %898, 1
  %900 = trunc i16 %899 to i8
  %901 = zext i8 %900 to i32
  %902 = icmp ne i32 %901, 0
  br i1 %902, label %903, label %915

903:                                              ; preds = %893
  %904 = load ptr, ptr %3, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %904, i32 0, i32 2
  %906 = getelementptr inbounds %struct.anon.2, ptr %905, i32 0, i32 1
  %907 = load i16, ptr %906, align 8
  %908 = lshr i16 %907, 9
  %909 = and i16 %908, 1
  %910 = trunc i16 %909 to i8
  %911 = zext i8 %910 to i32
  %912 = icmp ne i32 %911, 0
  br i1 %912, label %913, label %915

913:                                              ; preds = %903
  %914 = load ptr, ptr %3, align 8, !tbaa !5
  call void @__arm_2d_scene_player_delete_all_next_scene(ptr noundef %914)
  br label %917

915:                                              ; preds = %903, %893
  %916 = load ptr, ptr %3, align 8, !tbaa !5
  call void @__arm_2d_scene_player_next_scene(ptr noundef %916)
  br label %917

917:                                              ; preds = %915, %913
  %918 = load ptr, ptr %3, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %918, i32 0, i32 2
  %920 = getelementptr inbounds %struct.anon.2, ptr %919, i32 0, i32 1
  %921 = load i16, ptr %920, align 8
  %922 = and i16 %921, -9
  %923 = or i16 %922, 0
  store i16 %923, ptr %920, align 8
  %924 = load ptr, ptr %3, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %924, i32 0, i32 2
  %926 = getelementptr inbounds %struct.anon.2, ptr %925, i32 0, i32 1
  %927 = load i16, ptr %926, align 8
  %928 = and i16 %927, -1025
  %929 = or i16 %928, 0
  store i16 %929, ptr %926, align 8
  %930 = load ptr, ptr %3, align 8, !tbaa !5
  %931 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %930, i32 0, i32 2
  %932 = getelementptr inbounds %struct.anon.2, ptr %931, i32 0, i32 1
  %933 = load i16, ptr %932, align 8
  %934 = and i16 %933, -5
  %935 = or i16 %934, 0
  store i16 %935, ptr %932, align 8
  %936 = load ptr, ptr %3, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %936, i32 0, i32 2
  %938 = getelementptr inbounds %struct.anon.2, ptr %937, i32 0, i32 1
  %939 = load i16, ptr %938, align 8
  %940 = and i16 %939, -513
  %941 = or i16 %940, 0
  store i16 %941, ptr %938, align 8
  br label %942

942:                                              ; preds = %917
  %943 = load ptr, ptr %3, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct.arm_2d_scene_player_t, ptr %943, i32 0, i32 2
  %945 = getelementptr inbounds %struct.anon.2, ptr %944, i32 0, i32 1
  %946 = getelementptr inbounds %struct.anon.4, ptr %945, i32 0, i32 2
  store i8 0, ptr %946, align 1, !tbaa !25
  br label %947

947:                                              ; preds = %942
  br label %948

948:                                              ; preds = %947
  br label %949

949:                                              ; preds = %948, %556, %304, %233, %161, %87
  store i32 1, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %950

950:                                              ; preds = %949, %892, %751, %746, %548, %366, %361, %326, %281, %276, %87
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  %951 = load i32, ptr %2, align 4
  ret i32 %951
}

declare void @arm_2d_helper_dirty_region_on_frame_start(ptr noundef) #4

declare void @__arm_2d_helper_pfb_enable_drawing_canvas_colour(ptr noundef, i32) #4

; Function Attrs: nounwind uwtable
declare hidden i32 @__pfb_draw_scene_handler(ptr noundef, ptr noundef, i1 noundef zeroext) #5

; Function Attrs: nounwind uwtable
declare hidden i32 @__pfb_draw_scene_background_handler(ptr noundef, ptr noundef, i1 noundef zeroext) #5

declare i32 @arm_2d_helper_pfb_task(ptr noundef, ptr noundef) #4

declare void @__arm_2d_helper_pfb_disable_drawing_canvas_colour(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare hidden void @__arm_2d_scene_player_delete_all_next_scene(ptr noundef) #5

; Function Attrs: nounwind uwtable
declare hidden void @__arm_2d_scene_player_next_scene(ptr noundef) #5

attributes #0 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { noreturn nounwind }
attributes #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 408}
!10 = !{!"arm_2d_scene_player_t", !11, i64 0, !15, i64 360, !18, i64 408}
!11 = !{!"arm_2d_helper_pfb_t", !7, i64 0, !12, i64 344}
!12 = !{!"", !13, i64 0, !14, i64 8, !14, i64 12}
!13 = !{!"long", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!"", !14, i64 0, !14, i64 4, !13, i64 8, !13, i64 16, !14, i64 24, !16, i64 28, !17, i64 32, !17, i64 34, !14, i64 36, !13, i64 40}
!16 = !{!"float", !7, i64 0}
!17 = !{!"short", !7, i64 0}
!18 = !{!"", !19, i64 0, !20, i64 16, !21, i64 24, !23, i64 176}
!19 = !{!"", !6, i64 0, !6, i64 8}
!20 = !{!"", !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 1, !7, i64 1, !7, i64 1, !7, i64 1, !7, i64 2, !7, i64 2, !7, i64 2, !7, i64 2, !7, i64 2, !7, i64 2, !7, i64 3}
!21 = !{!"", !6, i64 0, !7, i64 8, !17, i64 10, !7, i64 16, !7, i64 128, !22, i64 130, !17, i64 134, !17, i64 136, !13, i64 144}
!22 = !{!"arm_2d_location_t", !17, i64 0, !17, i64 2}
!23 = !{!"", !24, i64 0, !24, i64 16}
!24 = !{!"arm_2d_scene_evt_t", !6, i64 0, !6, i64 8}
!25 = !{!10, !7, i64 427}
!26 = !{!27, !27, i64 0}
!27 = !{!"_Bool", !7, i64 0}
!28 = !{!14, !14, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{i8 0, i8 2}
!32 = !{}
!33 = !{!10, !6, i64 584}
!34 = !{!10, !6, i64 592}
!35 = !{!36, !6, i64 56}
!36 = !{!"arm_2d_scene_t", !37, i64 0, !6, i64 16, !7, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !39, i64 120, !40, i64 128}
!37 = !{!"", !6, i64 0, !38, i64 8}
!38 = !{!"", !7, i64 0}
!39 = !{!"", !7, i64 0, !7, i64 0, !7, i64 0}
!40 = !{!"arm_2d_helper_dirty_region_t", !7, i64 0, !41, i64 56}
!41 = !{!"arm_2d_helper_dirty_region_item_t", !7, i64 0, !42, i64 48}
!42 = !{!"arm_2d_region_t", !7, i64 0, !7, i64 4}
!43 = !{!36, !6, i64 88}
!44 = !{!36, !6, i64 32}
!45 = !{!36, !6, i64 40}
!46 = !{!36, !6, i64 48}
!47 = !{!36, !6, i64 72}
!48 = !{!49, !6, i64 0}
!49 = !{!"arm_2d_helper_draw_evt_t", !6, i64 0, !6, i64 8}
!50 = !{!49, !6, i64 8}
!51 = !{!36, !6, i64 80}
!52 = !{!36, !6, i64 96}
!53 = !{!36, !6, i64 64}
!54 = !{!36, !6, i64 104}
!55 = !{!10, !6, i64 432}
!56 = !{!7, !7, i64 0}
!57 = !{!58, !7, i64 0}
!58 = !{!"", !7, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!59 = !{!58, !6, i64 8}
!60 = !{!10, !17, i64 568}
!61 = !{!22, !17, i64 0}
!62 = !{!22, !17, i64 2}
!63 = !{i64 0, i64 2, !64, i64 2, i64 2, !64}
!64 = !{!17, !17, i64 0}
!65 = !{!10, !7, i64 440}
!66 = !{!36, !6, 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_helper_pfb_dependency_t = type { %struct.arm_2d_helper_render_evt_t, %struct.arm_2d_helper_draw_evt_t, %struct.arm_2d_evt_t, %struct.arm_2d_evt_t, %struct.anon.42, %struct.arm_2d_helper_before_flushing_evt_t }
%struct.arm_2d_helper_render_evt_t = type { ptr, ptr }
%struct.arm_2d_helper_draw_evt_t = type { ptr, ptr }
%struct.arm_2d_evt_t = type { ptr, ptr }
%struct.anon.42 = type { %struct.arm_2d_helper_draw_evt_t, ptr }
%struct.arm_2d_helper_before_flushing_evt_t = type { ptr, ptr }

@.str.1 = external hidden unnamed_addr constant [89 x i8], align 1
@__PRETTY_FUNCTION__.arm_2d_scene_player_task = external hidden unnamed_addr constant [63 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [20 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: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

declare i32 @arm_2d_helper_pfb_update_dependency(ptr noundef, i8 noundef zeroext, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local i32 @arm_2d_scene_player_task(ptr noundef nonnull %0) local_unnamed_addr #3 {
  %2 = alloca [1 x %struct.arm_2d_helper_pfb_dependency_t], align 8
  %3 = alloca [1 x %struct.arm_2d_helper_pfb_dependency_t], align 8
  %4 = alloca [1 x %struct.arm_2d_helper_pfb_dependency_t], align 8
  %5 = alloca [1 x %struct.arm_2d_helper_pfb_dependency_t], align 8
  %6 = getelementptr inbounds i8, ptr %0, i64 408
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %0, i64 424
  %9 = getelementptr inbounds i8, ptr %0, i64 427
  %10 = load i8, ptr %9, align 1, !tbaa !24
  switch i8 %10, label %158 [
    i8 0, label %11
    i8 1, label %38
    i8 2, label %56
    i8 3, label %83
    i8 4, label %101
    i8 5, label %110
    i8 6, label %118
    i8 7, label %159
    i8 8, label %191
    i8 9, label %241
  ]

11:                                               ; preds = %1
  %12 = icmp eq ptr %7, null
  br i1 %12, label %.preheader, label %21

.preheader:                                       ; preds = %11
  %.promoted = load i16, ptr %8, align 8
  %13 = and i16 %.promoted, -2
  %14 = and i16 %.promoted, 1
  %.not = icmp eq i16 %14, 0
  store i16 %13, ptr %8, align 8
  br i1 %.not, label %.critedge, label %15

15:                                               ; preds = %.preheader
  %16 = getelementptr inbounds i8, ptr %0, i64 584
  %17 = load ptr, ptr %16, align 8, !tbaa !25
  %.not242 = icmp eq ptr %17, null
  br i1 %.not242, label %.critedge, label %18

18:                                               ; preds = %15
  %19 = getelementptr inbounds i8, ptr %0, i64 592
  %20 = load ptr, ptr %19, align 8, !tbaa !26
  tail call void %17(ptr noundef %20, ptr noundef nonnull %0, ptr noundef null) #5
  br label %.critedge

21:                                               ; preds = %11
  %22 = getelementptr inbounds i8, ptr %7, i64 8
  %23 = load i8, ptr %22, align 8
  %24 = and i8 %23, 1
  %.not223 = icmp eq i8 %24, 0
  br i1 %.not223, label %25, label %30

25:                                               ; preds = %21
  %26 = or disjoint i8 %23, 1
  store i8 %26, ptr %22, align 8
  %27 = getelementptr inbounds i8, ptr %7, i64 56
  %28 = load ptr, ptr %27, align 8, !tbaa !27
  %.not224 = icmp eq ptr %28, null
  br i1 %.not224, label %30, label %29

29:                                               ; preds = %25
  tail call void %28(ptr noundef nonnull %7) #5
  br label %30

30:                                               ; preds = %25, %29, %21
  %31 = getelementptr inbounds i8, ptr %0, i64 426
  %32 = load i8, ptr %31, align 2
  %33 = or i8 %32, 2
  store i8 %33, ptr %31, align 2
  %34 = load i16, ptr %8, align 8
  %35 = or i16 %34, 2048
  store i16 %35, ptr %8, align 8
  %36 = load i8, ptr %9, align 1, !tbaa !24
  %37 = add i8 %36, 1
  store i8 %37, ptr %9, align 1, !tbaa !24
  br label %38

38:                                               ; preds = %30, %1
  %39 = getelementptr inbounds i8, ptr %7, i64 88
  %40 = load ptr, ptr %39, align 8, !tbaa !35
  %.not225 = icmp eq ptr %40, null
  br i1 %.not225, label %42, label %41

41:                                               ; preds = %38
  tail call void %40(ptr noundef nonnull %7) #5
  br label %42

42:                                               ; preds = %41, %38
  %43 = getelementptr inbounds i8, ptr %7, i64 120
  %44 = load i8, ptr %43, align 8
  %.not226 = icmp sgt i8 %44, -1
  br i1 %.not226, label %47, label %45

45:                                               ; preds = %42
  %46 = getelementptr inbounds i8, ptr %7, i64 128
  tail call void @arm_2d_helper_dirty_region_on_frame_start(ptr noundef nonnull %46) #5
  br label %47

47:                                               ; preds = %45, %42
  %48 = getelementptr inbounds i8, ptr %0, i64 426
  %49 = load i8, ptr %48, align 2
  %50 = and i8 %49, 2
  %.not227 = icmp eq i8 %50, 0
  br i1 %.not227, label %51, label %52

51:                                               ; preds = %47
  store i8 4, ptr %9, align 1, !tbaa !24
  br label %.critedge

52:                                               ; preds = %47
  %53 = and i8 %49, -3
  store i8 %53, ptr %48, align 2
  store i8 2, ptr %9, align 1, !tbaa !24
  %54 = getelementptr inbounds i8, ptr %7, i64 24
  %55 = load i32, ptr %54, align 8
  tail call void @__arm_2d_helper_pfb_enable_drawing_canvas_colour(ptr noundef nonnull %0, i32 %55) #5
  br label %56

56:                                               ; preds = %52, %1
  %57 = getelementptr inbounds i8, ptr %7, i64 32
  %58 = load ptr, ptr %57, align 8, !tbaa !36
  %59 = icmp eq ptr %58, null
  br i1 %59, label %60, label %75

60:                                               ; preds = %56
  %61 = getelementptr inbounds i8, ptr %7, i64 40
  %62 = load ptr, ptr %61, align 8, !tbaa !37
  %.not239 = icmp eq ptr %62, null
  br i1 %.not239, label %74, label %63

63:                                               ; preds = %60
  %64 = getelementptr inbounds i8, ptr %7, i64 48
  %65 = load ptr, ptr %64, align 8, !tbaa !38
  %.not240 = icmp eq ptr %65, null
  br i1 %.not240, label %74, label %66

66:                                               ; preds = %63
  %67 = getelementptr inbounds i8, ptr %7, i64 72
  %68 = load ptr, ptr %67, align 8, !tbaa !39
  %.not241 = icmp eq ptr %68, null
  br i1 %.not241, label %70, label %69

69:                                               ; preds = %66
  tail call void %68(ptr noundef nonnull %7) #5
  br label %70

70:                                               ; preds = %69, %66
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %2, i8 0, i64 104, i1 false)
  %71 = getelementptr inbounds i8, ptr %2, i64 16
  store ptr @__pfb_draw_scene_handler, ptr %71, align 8, !tbaa !40
  %72 = getelementptr inbounds i8, ptr %2, i64 24
  store ptr %0, ptr %72, align 8, !tbaa !42
  %73 = call i32 @arm_2d_helper_pfb_update_dependency(ptr noundef nonnull %0, i8 noundef zeroext 2, ptr noundef nonnull %2) #5
  store i8 3, ptr %9, align 1, !tbaa !24
  br label %.critedge

74:                                               ; preds = %63, %60
  store i8 4, ptr %9, align 1, !tbaa !24
  br label %.critedge

75:                                               ; preds = %56
  %76 = getelementptr inbounds i8, ptr %7, i64 72
  %77 = load ptr, ptr %76, align 8, !tbaa !39
  %.not228 = icmp eq ptr %77, null
  br i1 %.not228, label %79, label %78

78:                                               ; preds = %75
  tail call void %77(ptr noundef nonnull %7) #5
  br label %79

79:                                               ; preds = %78, %75
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %3, i8 0, i64 104, i1 false)
  %80 = getelementptr inbounds i8, ptr %3, i64 16
  store ptr @__pfb_draw_scene_background_handler, ptr %80, align 8, !tbaa !40
  %81 = getelementptr inbounds i8, ptr %3, i64 24
  store ptr %0, ptr %81, align 8, !tbaa !42
  %82 = call i32 @arm_2d_helper_pfb_update_dependency(ptr noundef nonnull %0, i8 noundef zeroext 2, ptr noundef nonnull %3) #5
  store i8 3, ptr %9, align 1, !tbaa !24
  br label %83

83:                                               ; preds = %79, %1
  %84 = call i32 @arm_2d_helper_pfb_task(ptr noundef nonnull %0, ptr noundef null) #5
  %85 = icmp slt i32 %84, 0
  br i1 %85, label %86, label %87

86:                                               ; preds = %83
  store i8 0, ptr %9, align 1, !tbaa !24
  br label %.critedge

87:                                               ; preds = %83
  %.not229 = icmp eq i32 %84, 0
  br i1 %.not229, label %88, label %.critedge

88:                                               ; preds = %87
  %89 = getelementptr inbounds i8, ptr %7, i64 80
  %90 = load ptr, ptr %89, align 8, !tbaa !43
  %.not230 = icmp eq ptr %90, null
  br i1 %.not230, label %92, label %91

91:                                               ; preds = %88
  call void %90(ptr noundef nonnull %7) #5
  br label %92

92:                                               ; preds = %91, %88
  %93 = getelementptr inbounds i8, ptr %7, i64 32
  %94 = load ptr, ptr %93, align 8, !tbaa !36
  %95 = icmp eq ptr %94, null
  br i1 %95, label %96, label %100

96:                                               ; preds = %92
  %97 = getelementptr inbounds i8, ptr %7, i64 48
  %98 = load ptr, ptr %97, align 8, !tbaa !38
  %.not231 = icmp eq ptr %98, null
  br i1 %.not231, label %100, label %99

99:                                               ; preds = %96
  store i8 6, ptr %9, align 1, !tbaa !24
  br label %.critedge

100:                                              ; preds = %96, %92
  store i8 4, ptr %9, align 1, !tbaa !24
  br label %101

101:                                              ; preds = %100, %1
  %102 = getelementptr inbounds i8, ptr %7, i64 48
  %103 = load ptr, ptr %102, align 8, !tbaa !38
  %104 = icmp eq ptr %103, null
  br i1 %104, label %105, label %106

105:                                              ; preds = %101
  store i8 0, ptr %9, align 1, !tbaa !24
  br label %.critedge

106:                                              ; preds = %101
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %4, i8 0, i64 104, i1 false)
  %107 = getelementptr inbounds i8, ptr %4, i64 16
  store ptr @__pfb_draw_scene_handler, ptr %107, align 8, !tbaa !40
  %108 = getelementptr inbounds i8, ptr %4, i64 24
  store ptr %0, ptr %108, align 8, !tbaa !42
  %109 = call i32 @arm_2d_helper_pfb_update_dependency(ptr noundef nonnull %0, i8 noundef zeroext 2, ptr noundef nonnull %4) #5
  store i8 5, ptr %9, align 1, !tbaa !24
  br label %110

110:                                              ; preds = %106, %1
  %111 = getelementptr inbounds i8, ptr %7, i64 40
  %112 = load ptr, ptr %111, align 8, !tbaa !37
  %113 = call i32 @arm_2d_helper_pfb_task(ptr noundef nonnull %0, ptr noundef %112) #5
  %114 = icmp slt i32 %113, 0
  br i1 %114, label %115, label %116

115:                                              ; preds = %110
  store i8 0, ptr %9, align 1, !tbaa !24
  br label %.critedge

116:                                              ; preds = %110
  %.not232 = icmp eq i32 %113, 0
  br i1 %.not232, label %117, label %.critedge

117:                                              ; preds = %116
  store i8 6, ptr %9, align 1, !tbaa !24
  br label %118

118:                                              ; preds = %117, %1
  %119 = getelementptr inbounds i8, ptr %7, i64 96
  %120 = load ptr, ptr %119, align 8, !tbaa !44
  %.not233 = icmp eq ptr %120, null
  br i1 %.not233, label %122, label %121

121:                                              ; preds = %118
  call void %120(ptr noundef nonnull %7) #5
  br label %122

122:                                              ; preds = %121, %118
  %123 = load i16, ptr %8, align 8
  %124 = and i16 %123, 2048
  %.not234 = icmp eq i16 %124, 0
  br i1 %.not234, label %130, label %125

125:                                              ; preds = %122
  %126 = and i16 %123, -2049
  store i16 %126, ptr %8, align 8
  %127 = getelementptr inbounds i8, ptr %7, i64 64
  %128 = load ptr, ptr %127, align 8, !tbaa !45
  %.not235 = icmp eq ptr %128, null
  br i1 %.not235, label %130, label %129

129:                                              ; preds = %125
  call void %128(ptr noundef nonnull %7) #5
  %.pre250 = load i16, ptr %8, align 8
  br label %130

130:                                              ; preds = %125, %129, %122
  %131 = phi i16 [ %126, %125 ], [ %.pre250, %129 ], [ %123, %122 ]
  %132 = and i16 %131, 1
  %.not236 = icmp eq i16 %132, 0
  br i1 %.not236, label %157, label %133

133:                                              ; preds = %130
  %134 = and i16 %131, -2
  store i16 %134, ptr %8, align 8
  %135 = getelementptr inbounds i8, ptr %7, i64 104
  %136 = load ptr, ptr %135, align 8, !tbaa !46
  %.not237 = icmp eq ptr %136, null
  br i1 %.not237, label %138, label %137

137:                                              ; preds = %133
  call void %136(ptr noundef nonnull %7) #5
  br label %138

138:                                              ; preds = %137, %133
  %139 = getelementptr inbounds i8, ptr %0, i64 584
  %140 = load ptr, ptr %139, align 8, !tbaa !25
  %.not238 = icmp eq ptr %140, null
  br i1 %.not238, label %144, label %141

141:                                              ; preds = %138
  %142 = getelementptr inbounds i8, ptr %0, i64 592
  %143 = load ptr, ptr %142, align 8, !tbaa !26
  call void %140(ptr noundef %143, ptr noundef nonnull %0, ptr noundef nonnull %7) #5
  br label %144

144:                                              ; preds = %141, %138
  %145 = getelementptr inbounds i8, ptr %0, i64 432
  %146 = load ptr, ptr %145, align 8, !tbaa !47
  %147 = icmp eq ptr %146, null
  br i1 %147, label %150, label %148

148:                                              ; preds = %144
  %149 = load i8, ptr %146, align 8, !tbaa !48
  br label %150

150:                                              ; preds = %144, %148
  %.sink = phi i8 [ %149, %148 ], [ 0, %144 ]
  %151 = getelementptr inbounds i8, ptr %0, i64 560
  store i8 %.sink, ptr %151, align 8
  %152 = load i16, ptr %8, align 8
  %153 = and i16 %152, -1549
  store i16 %153, ptr %8, align 8
  %154 = add i8 %.sink, -16
  %or.cond = icmp ult i8 %154, -15
  %brmerge = or i1 %147, %or.cond
  br i1 %brmerge, label %155, label %156

155:                                              ; preds = %150
  store i8 9, ptr %9, align 1, !tbaa !24
  br label %.critedge

156:                                              ; preds = %150
  store i8 7, ptr %9, align 1, !tbaa !24
  br label %.critedge

157:                                              ; preds = %130
  store i8 1, ptr %9, align 1, !tbaa !24
  br label %.critedge

158:                                              ; preds = %1
  store i8 0, ptr %9, align 1, !tbaa !24
  br label %.critedge

159:                                              ; preds = %1
  %160 = getelementptr inbounds i8, ptr %0, i64 432
  %161 = load ptr, ptr %160, align 8, !tbaa !47
  %162 = load i8, ptr %161, align 8, !tbaa !48
  %.not205 = icmp eq i8 %162, 0
  br i1 %.not205, label %163, label %164

163:                                              ; preds = %159
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 2583, ptr noundef nonnull @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

164:                                              ; preds = %159
  tail call void @__arm_2d_helper_pfb_disable_drawing_canvas_colour(ptr noundef nonnull %0) #5
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %5, i8 0, i64 104, i1 false)
  %165 = getelementptr inbounds i8, ptr %5, i64 16
  %166 = load ptr, ptr %160, align 8, !tbaa !47
  %167 = getelementptr inbounds i8, ptr %166, i64 8
  %168 = load ptr, ptr %167, align 8, !tbaa !50
  store ptr %168, ptr %165, align 8, !tbaa !40
  %169 = getelementptr inbounds i8, ptr %5, i64 24
  store ptr %0, ptr %169, align 8, !tbaa !42
  %170 = call i32 @arm_2d_helper_pfb_update_dependency(ptr noundef nonnull %0, i8 noundef zeroext 2, ptr noundef nonnull %5) #5
  %171 = getelementptr inbounds i8, ptr %0, i64 426
  %172 = load i8, ptr %171, align 2
  %173 = getelementptr inbounds i8, ptr %0, i64 568
  %174 = load i16, ptr %173, align 8, !tbaa !51
  %spec.select = call i16 @llvm.umax.i16(i16 %174, i16 200)
  store i16 %spec.select, ptr %173, align 8, !tbaa !51
  %175 = and i8 %172, 14
  store i8 %175, ptr %171, align 2
  %176 = getelementptr inbounds i8, ptr %0, i64 562
  store i16 -1, ptr %176, align 2, !tbaa !52
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 564
  store i16 -1, ptr %.sroa.2.0..sroa_idx, align 2, !tbaa !52
  %177 = getelementptr inbounds i8, ptr %0, i64 440
  store i8 0, ptr %177, align 8, !tbaa !53
  store i8 8, ptr %9, align 1, !tbaa !24
  %178 = load ptr, ptr %6, align 8, !tbaa !5
  %179 = load ptr, ptr %178, align 8, !tbaa !54
  %.not206 = icmp eq ptr %179, null
  br i1 %.not206, label %191, label %180

180:                                              ; preds = %164
  %181 = getelementptr inbounds i8, ptr %179, i64 8
  %182 = load i8, ptr %181, align 8
  %183 = and i8 %182, 1
  %.not207 = icmp eq i8 %183, 0
  br i1 %.not207, label %184, label %191

184:                                              ; preds = %180
  %185 = or disjoint i8 %182, 1
  store i8 %185, ptr %181, align 8
  %186 = load ptr, ptr %6, align 8, !tbaa !5
  %187 = load ptr, ptr %186, align 8, !tbaa !54
  %188 = getelementptr inbounds i8, ptr %187, i64 56
  %189 = load ptr, ptr %188, align 8, !tbaa !27
  %.not208 = icmp eq ptr %189, null
  br i1 %.not208, label %191, label %190

190:                                              ; preds = %184
  call void %189(ptr noundef nonnull %187) #5
  br label %191

191:                                              ; preds = %164, %184, %190, %180, %1
  %192 = call i32 @arm_2d_helper_pfb_task(ptr noundef nonnull %0, ptr noundef null) #5
  %193 = icmp slt i32 %192, 0
  br i1 %193, label %194, label %195

194:                                              ; preds = %191
  store i8 0, ptr %9, align 1, !tbaa !24
  br label %.critedge

195:                                              ; preds = %191
  %.not209 = icmp eq i32 %192, 0
  br i1 %.not209, label %196, label %.critedge

196:                                              ; preds = %195
  %197 = getelementptr inbounds i8, ptr %0, i64 426
  %198 = load i8, ptr %197, align 2
  %199 = and i8 %198, 64
  %.not210 = icmp eq i8 %199, 0
  br i1 %.not210, label %207, label %200

200:                                              ; preds = %196
  %201 = load ptr, ptr %6, align 8, !tbaa !5
  %.not211 = icmp eq ptr %201, null
  br i1 %.not211, label %202, label %203

202:                                              ; preds = %200
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 2635, ptr noundef nonnull @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

203:                                              ; preds = %200
  %204 = getelementptr inbounds i8, ptr %201, i64 80
  %205 = load ptr, ptr %204, align 8, !tbaa !43
  %.not212 = icmp eq ptr %205, null
  br i1 %.not212, label %207, label %206

206:                                              ; preds = %203
  call void %205(ptr noundef nonnull %201) #5
  %.pre = load i8, ptr %197, align 2
  br label %207

207:                                              ; preds = %203, %206, %196
  %208 = phi i8 [ %198, %203 ], [ %.pre, %206 ], [ %198, %196 ]
  %209 = and i8 %208, 16
  %.not213 = icmp eq i8 %209, 0
  br i1 %.not213, label %thread-pre-split, label %210

210:                                              ; preds = %207
  %211 = load ptr, ptr %6, align 8, !tbaa !5
  %.not214 = icmp eq ptr %211, null
  br i1 %.not214, label %212, label %213

212:                                              ; preds = %210
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 2641, ptr noundef nonnull @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

213:                                              ; preds = %210
  %214 = getelementptr inbounds i8, ptr %211, i64 96
  %215 = load ptr, ptr %214, align 8, !tbaa !44
  %.not215 = icmp eq ptr %215, null
  br i1 %.not215, label %thread-pre-split, label %216

216:                                              ; preds = %213
  call void %215(ptr noundef nonnull %211) #5
  %.pr.pre = load i8, ptr %197, align 2
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %213, %216, %207
  %217 = phi i8 [ %208, %207 ], [ %.pr.pre, %216 ], [ %208, %213 ]
  %.not216 = icmp sgt i8 %217, -1
  br i1 %.not216, label %226, label %218

218:                                              ; preds = %thread-pre-split
  %219 = load ptr, ptr %6, align 8, !tbaa !5
  %220 = load ptr, ptr %219, align 8, !tbaa !54
  %.not217 = icmp eq ptr %220, null
  br i1 %.not217, label %221, label %222

221:                                              ; preds = %218
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 2647, ptr noundef nonnull @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

222:                                              ; preds = %218
  %223 = getelementptr inbounds i8, ptr %220, i64 80
  %224 = load ptr, ptr %223, align 8, !tbaa !43
  %.not218 = icmp eq ptr %224, null
  br i1 %.not218, label %226, label %225

225:                                              ; preds = %222
  call void %224(ptr noundef nonnull %220) #5
  %.pre248 = load i8, ptr %197, align 2
  br label %226

226:                                              ; preds = %222, %225, %thread-pre-split
  %227 = phi i8 [ %217, %222 ], [ %.pre248, %225 ], [ %217, %thread-pre-split ]
  %228 = and i8 %227, 32
  %.not219 = icmp eq i8 %228, 0
  br i1 %.not219, label %237, label %229

229:                                              ; preds = %226
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = load ptr, ptr %230, align 8, !tbaa !54
  %.not220 = icmp eq ptr %231, null
  br i1 %.not220, label %232, label %233

232:                                              ; preds = %229
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 2653, ptr noundef nonnull @__PRETTY_FUNCTION__.arm_2d_scene_player_task) #6
  unreachable

233:                                              ; preds = %229
  %234 = getelementptr inbounds i8, ptr %231, i64 96
  %235 = load ptr, ptr %234, align 8, !tbaa !44
  %.not221 = icmp eq ptr %235, null
  br i1 %.not221, label %237, label %236

236:                                              ; preds = %233
  call void %235(ptr noundef nonnull %231) #5
  %.pre249 = load i8, ptr %197, align 2
  br label %237

237:                                              ; preds = %233, %236, %226
  %238 = phi i8 [ %227, %233 ], [ %.pre249, %236 ], [ %227, %226 ]
  %239 = and i8 %238, 1
  %.not222 = icmp eq i8 %239, 0
  br i1 %.not222, label %.critedge, label %240

240:                                              ; preds = %237
  store i8 9, ptr %9, align 1, !tbaa !24
  br label %.critedge

241:                                              ; preds = %1
  %242 = load i16, ptr %8, align 8
  %243 = and i16 %242, 1536
  %or.cond243.not = icmp eq i16 %243, 1536
  br i1 %or.cond243.not, label %244, label %245

244:                                              ; preds = %241
  tail call void @__arm_2d_scene_player_delete_all_next_scene(ptr noundef nonnull %0)
  br label %246

245:                                              ; preds = %241
  tail call void @__arm_2d_scene_player_next_scene(ptr noundef nonnull %0)
  br label %246

246:                                              ; preds = %245, %244
  %247 = load i16, ptr %8, align 8
  %248 = and i16 %247, -1549
  store i16 %248, ptr %8, align 8
  store i8 0, ptr %9, align 1, !tbaa !24
  br label %.critedge

.critedge:                                        ; preds = %51, %99, %158, %246, %74, %70, %15, %18, %.preheader, %237, %240, %195, %157, %156, %155, %116, %87, %194, %115, %105, %86
  %.1 = phi i32 [ %192, %194 ], [ %113, %115 ], [ -2, %105 ], [ %84, %86 ], [ %84, %87 ], [ %113, %116 ], [ 0, %155 ], [ 0, %156 ], [ 0, %157 ], [ %192, %195 ], [ 0, %240 ], [ 0, %237 ], [ 0, %.preheader ], [ 1, %18 ], [ 1, %15 ], [ 1, %70 ], [ 1, %74 ], [ 1, %246 ], [ 1, %158 ], [ 1, %99 ], [ 1, %51 ]
  ret i32 %.1
}

declare void @arm_2d_helper_dirty_region_on_frame_start(ptr noundef) local_unnamed_addr #2

declare void @__arm_2d_helper_pfb_enable_drawing_canvas_colour(ptr noundef, i32) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @__pfb_draw_scene_handler(ptr noundef, ptr noundef, i1 noundef zeroext) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @__pfb_draw_scene_background_handler(ptr noundef, ptr noundef, i1 noundef zeroext) #3

declare i32 @arm_2d_helper_pfb_task(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @__arm_2d_helper_pfb_disable_drawing_canvas_colour(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @__arm_2d_scene_player_delete_all_next_scene(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden void @__arm_2d_scene_player_next_scene(ptr noundef) local_unnamed_addr #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i16 @llvm.umax.i16(i16, i16) #4

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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { "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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }
attributes #6 = { 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, !18, i64 408}
!6 = !{!"arm_2d_scene_player_t", !7, i64 0, !13, i64 360, !16, i64 408}
!7 = !{!"arm_2d_helper_pfb_t", !8, i64 0, !10, i64 344}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !11, i64 0, !12, i64 8, !12, i64 12}
!11 = !{!"long", !8, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!"", !12, i64 0, !12, i64 4, !11, i64 8, !11, i64 16, !12, i64 24, !14, i64 28, !15, i64 32, !15, i64 34, !12, i64 36, !11, i64 40}
!14 = !{!"float", !8, i64 0}
!15 = !{!"short", !8, i64 0}
!16 = !{!"", !17, i64 0, !19, i64 16, !20, i64 24, !22, i64 176}
!17 = !{!"", !18, i64 0, !18, i64 8}
!18 = !{!"any pointer", !8, i64 0}
!19 = !{!"", !8, i64 0, !8, i64 0, !8, i64 0, !8, i64 0, !8, i64 1, !8, i64 1, !8, i64 1, !8, i64 1, !8, i64 2, !8, i64 2, !8, i64 2, !8, i64 2, !8, i64 2, !8, i64 2, !8, i64 3}
!20 = !{!"", !18, i64 0, !8, i64 8, !15, i64 10, !8, i64 16, !8, i64 128, !21, i64 130, !15, i64 134, !15, i64 136, !11, i64 144}
!21 = !{!"arm_2d_location_t", !15, i64 0, !15, i64 2}
!22 = !{!"", !23, i64 0, !23, i64 16}
!23 = !{!"arm_2d_scene_evt_t", !18, i64 0, !18, i64 8}
!24 = !{!6, !8, i64 427}
!25 = !{!6, !18, i64 584}
!26 = !{!6, !18, i64 592}
!27 = !{!28, !18, i64 56}
!28 = !{!"arm_2d_scene_t", !29, i64 0, !18, i64 16, !8, i64 24, !18, i64 32, !18, i64 40, !18, i64 48, !18, i64 56, !18, i64 64, !18, i64 72, !18, i64 80, !18, i64 88, !18, i64 96, !18, i64 104, !18, i64 112, !31, i64 120, !32, i64 128}
!29 = !{!"", !18, i64 0, !30, i64 8}
!30 = !{!"", !8, i64 0}
!31 = !{!"", !8, i64 0, !8, i64 0, !8, i64 0}
!32 = !{!"arm_2d_helper_dirty_region_t", !8, i64 0, !33, i64 56}
!33 = !{!"arm_2d_helper_dirty_region_item_t", !8, i64 0, !34, i64 48}
!34 = !{!"arm_2d_region_t", !8, i64 0, !8, i64 4}
!35 = !{!28, !18, i64 88}
!36 = !{!28, !18, i64 32}
!37 = !{!28, !18, i64 40}
!38 = !{!28, !18, i64 48}
!39 = !{!28, !18, i64 72}
!40 = !{!41, !18, i64 0}
!41 = !{!"arm_2d_helper_draw_evt_t", !18, i64 0, !18, i64 8}
!42 = !{!41, !18, i64 8}
!43 = !{!28, !18, i64 80}
!44 = !{!28, !18, i64 96}
!45 = !{!28, !18, i64 64}
!46 = !{!28, !18, i64 104}
!47 = !{!6, !18, i64 432}
!48 = !{!49, !8, i64 0}
!49 = !{!"", !8, i64 0, !18, i64 8, !18, i64 16, !18, i64 24}
!50 = !{!49, !18, i64 8}
!51 = !{!6, !15, i64 568}
!52 = !{!15, !15, i64 0}
!53 = !{!6, !8, i64 440}
!54 = !{!28, !18, i64 0}


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