; LLVM IR from ARM-software/Arm-2D :: examples/common/controls (progress_wheel)

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

%struct.arm_2d_region_t = type { %union.anon.16, %union.anon.17 }
%union.anon.16 = type { %struct.arm_2d_location_t }
%struct.arm_2d_location_t = type { i16, i16 }
%union.anon.17 = type { %struct.arm_2d_size_t }
%struct.arm_2d_size_t = type { i16, i16 }
%struct.arm_2d_margin_t = type { i8, i8, i8, i8 }
%struct.arm_2d_tile_t = type { %union.anon.4, %union.anon.15, %union.anon.18 }
%union.anon.4 = type { %struct.anon.5 }
%struct.anon.5 = type { i8, %union.arm_2d_color_info_t, %union.anon.8 }
%union.arm_2d_color_info_t = type { %struct.anon.6 }
%struct.anon.6 = type { i8 }
%union.anon.8 = type { i16 }
%union.anon.15 = type { %struct.arm_2d_region_t }
%union.anon.18 = type { ptr }
%union.arm_2d_color_rgb565_t = type { i16 }
%struct.progress_wheel_t = type { %struct.anon }
%struct.anon = type { %struct.progress_wheel_cfg_t, ptr, float, float, [7 x %struct.arm_2d_op_trans_opa_t], %struct.arm_2d_helper_dirty_region_transform_t, %struct.arm_2d_region_list_item_t, %struct.arm_2d_tile_t, i8, i16, i16, i16, i32 }
%struct.progress_wheel_cfg_t = type { ptr, ptr, i16, i16, i16, i16, i32 }
%struct.arm_2d_op_trans_opa_t = type { %struct.arm_2d_op_core_t, %struct.anon.0, %struct.anon.1, %union.anon, %struct.anon.3, %struct.__arm_2d_transform_info_t, i8 }
%struct.arm_2d_op_core_t = type { [40 x i8], i64 }
%struct.anon.0 = type { ptr, ptr }
%struct.anon.1 = type { ptr }
%union.anon = type { %struct.anon.2 }
%struct.anon.2 = type { i32 }
%struct.anon.3 = type { ptr, %struct.arm_2d_tile_t }
%struct.__arm_2d_transform_info_t = type { float, float, float, %struct.arm_2d_point_float_t, %union.anon.19, [40 x i8] }
%struct.arm_2d_point_float_t = type { float, float }
%union.anon.19 = type { i32 }
%struct.arm_2d_helper_dirty_region_transform_t = type { float, %union.anon.20, float, [4 x i8], %struct.arm_2d_helper_dirty_region_item_t, [48 x i8] }
%union.anon.20 = type { float }
%struct.arm_2d_helper_dirty_region_item_t = type { [48 x i8], %struct.arm_2d_region_t }
%struct.arm_2d_region_list_item_t = type { ptr, [8 x i8], %struct.arm_2d_region_t, [4 x i8] }
%struct.anon.29 = type { i16 }

@progress_wheel_show.c_tQuadrantTable = external hidden constant [2 x [4 x { i8, i8 }]], align 16

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

; 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) #1

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #3

; Function Attrs: nounwind uwtable
define dso_local void @progress_wheel_show(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef %2, i16 noundef signext %3, i8 noundef zeroext %4, i1 noundef zeroext %5) #4 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i16, align 2
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca i16, align 2
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca %struct.arm_2d_region_t, align 2
  %20 = alloca %struct.arm_2d_region_t, align 2
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca %struct.arm_2d_size_t, align 2
  %26 = alloca %struct.arm_2d_region_t, align 2
  %27 = alloca ptr, align 8
  %28 = alloca %struct.arm_2d_region_t, align 2
  %29 = alloca ptr, align 8
  %30 = alloca %struct.arm_2d_size_t, align 2
  %31 = alloca i16, align 2
  %32 = alloca i8, align 1
  %33 = alloca i8, align 1
  %34 = alloca %struct.arm_2d_margin_t, align 1
  %35 = alloca ptr, align 8
  %36 = alloca %struct.arm_2d_margin_t, align 1
  %37 = alloca %struct.arm_2d_tile_t, align 8
  %38 = alloca ptr, align 8
  %39 = alloca %struct.arm_2d_region_t, align 2
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca %struct.arm_2d_region_t, align 2
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca %struct.arm_2d_location_t, align 2
  %47 = alloca i8, align 1
  %48 = alloca i8, align 1
  %49 = alloca i16, align 2
  %50 = alloca i8, align 1
  %51 = alloca %struct.arm_2d_region_t, align 2
  %52 = alloca i8, align 1
  %53 = alloca i8, align 1
  %54 = alloca i16, align 2
  %55 = alloca %struct.arm_2d_region_t, align 2
  %56 = alloca %struct.arm_2d_region_t, align 2
  %57 = alloca %struct.arm_2d_region_t, align 2
  %58 = alloca %struct.arm_2d_region_t, align 2
  %59 = alloca %struct.arm_2d_region_t, align 2
  %60 = alloca %struct.arm_2d_region_t, align 2
  %61 = alloca %struct.arm_2d_region_t, align 2
  %62 = alloca %struct.arm_2d_location_t, align 2
  %63 = alloca %struct.arm_2d_region_t, align 2
  %64 = alloca %union.arm_2d_color_rgb565_t, align 2
  %65 = alloca %union.arm_2d_color_rgb565_t, align 2
  %66 = alloca %union.arm_2d_color_rgb565_t, align 2
  %67 = alloca %union.arm_2d_color_rgb565_t, align 2
  %68 = alloca i32, align 4
  %69 = alloca %struct.arm_2d_region_t, align 2
  %70 = alloca %union.arm_2d_color_rgb565_t, align 2
  %71 = alloca %union.arm_2d_color_rgb565_t, align 2
  %72 = alloca %union.arm_2d_color_rgb565_t, align 2
  %73 = alloca %union.arm_2d_color_rgb565_t, align 2
  %74 = alloca i32, align 4
  %75 = alloca %struct.arm_2d_region_t, align 2
  %76 = alloca %union.arm_2d_color_rgb565_t, align 2
  %77 = alloca %union.arm_2d_color_rgb565_t, align 2
  %78 = alloca %union.arm_2d_color_rgb565_t, align 2
  %79 = alloca %union.arm_2d_color_rgb565_t, align 2
  %80 = alloca i32, align 4
  %81 = alloca %struct.arm_2d_region_t, align 2
  %82 = alloca %union.arm_2d_color_rgb565_t, align 2
  %83 = alloca %union.arm_2d_color_rgb565_t, align 2
  %84 = alloca %union.arm_2d_color_rgb565_t, align 2
  %85 = alloca %union.arm_2d_color_rgb565_t, align 2
  %86 = alloca i32, align 4
  %87 = alloca %struct.arm_2d_region_t, align 2
  %88 = alloca i32, align 4
  %89 = alloca ptr, align 8
  %90 = alloca %struct.arm_2d_region_t, align 2
  %91 = alloca %struct.arm_2d_location_t, align 2
  %92 = alloca %struct.arm_2d_tile_t, align 8
  %93 = alloca %union.arm_2d_color_rgb565_t, align 2
  %94 = alloca %struct.arm_2d_location_t, align 2
  %95 = alloca i32, align 4
  %96 = alloca i8, align 1
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i8, align 1
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i16 %3, ptr %10, align 2, !tbaa !9
  store i8 %4, ptr %11, align 1, !tbaa !11
  %100 = zext i1 %5 to i8
  store i8 %100, ptr %12, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #7
  %101 = load ptr, ptr %7, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.progress_wheel_t, ptr %101, i32 0, i32 0
  %103 = getelementptr inbounds %struct.anon, ptr %102, i32 0, i32 2
  %104 = load float, ptr %103, align 8, !tbaa !14
  %105 = fsub float %104, 1.000000e+00
  %106 = fcmp ogt float %105, 0.000000e+00
  br i1 %106, label %107, label %113

107:                                              ; preds = %6
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.progress_wheel_t, ptr %108, i32 0, i32 0
  %110 = getelementptr inbounds %struct.anon, ptr %109, i32 0, i32 2
  %111 = load float, ptr %110, align 8, !tbaa !14
  %112 = fsub float %111, 1.000000e+00
  br label %120

113:                                              ; preds = %6
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.progress_wheel_t, ptr %114, i32 0, i32 0
  %116 = getelementptr inbounds %struct.anon, ptr %115, i32 0, i32 2
  %117 = load float, ptr %116, align 8, !tbaa !14
  %118 = fsub float %117, 1.000000e+00
  %119 = fneg float %118
  br label %120

120:                                              ; preds = %113, %107
  %121 = phi float [ %112, %107 ], [ %119, %113 ]
  %122 = fcmp olt float %121, 0x3F847AE140000000
  %123 = zext i1 %122 to i8
  store i8 %123, ptr %13, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #7
  store i8 0, ptr %14, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %124 = load ptr, ptr %7, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.progress_wheel_t, ptr %124, i32 0, i32 0
  %126 = getelementptr inbounds %struct.anon, ptr %125, i32 0, i32 0
  %127 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %126, i32 0, i32 0
  %128 = load ptr, ptr %127, align 8, !tbaa !25
  store ptr %128, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %16) #7
  %129 = load ptr, ptr %7, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.progress_wheel_t, ptr %129, i32 0, i32 0
  %131 = getelementptr inbounds %struct.anon, ptr %130, i32 0, i32 0
  %132 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %131, i32 0, i32 4
  %133 = load i16, ptr %132, align 4, !tbaa !26
  store i16 %133, ptr %16, align 2, !tbaa !9
  %134 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %135 = trunc i8 %134 to i1
  br i1 %135, label %136, label %182

136:                                              ; preds = %120
  %137 = load i16, ptr %10, align 2, !tbaa !9
  %138 = sext i16 %137 to i32
  %139 = icmp sgt i32 0, %138
  br i1 %139, label %140, label %141

140:                                              ; preds = %136
  br label %144

141:                                              ; preds = %136
  %142 = load i16, ptr %10, align 2, !tbaa !9
  %143 = sext i16 %142 to i32
  br label %144

144:                                              ; preds = %141, %140
  %145 = phi i32 [ 0, %140 ], [ %143, %141 ]
  %146 = trunc i32 %145 to i16
  store i16 %146, ptr %10, align 2, !tbaa !9
  %147 = load i16, ptr %10, align 2, !tbaa !9
  %148 = sext i16 %147 to i32
  %149 = load ptr, ptr %7, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.progress_wheel_t, ptr %149, i32 0, i32 0
  %151 = getelementptr inbounds %struct.anon, ptr %150, i32 0, i32 0
  %152 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %151, i32 0, i32 6
  %153 = load i32, ptr %152, align 8
  %154 = lshr i32 %153, 16
  %155 = and i32 %154, 32767
  %156 = icmp slt i32 %148, %155
  br i1 %156, label %157, label %160

157:                                              ; preds = %144
  %158 = load i16, ptr %10, align 2, !tbaa !9
  %159 = sext i16 %158 to i32
  br label %168

160:                                              ; preds = %144
  %161 = load ptr, ptr %7, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.progress_wheel_t, ptr %161, i32 0, i32 0
  %163 = getelementptr inbounds %struct.anon, ptr %162, i32 0, i32 0
  %164 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %163, i32 0, i32 6
  %165 = load i32, ptr %164, align 8
  %166 = lshr i32 %165, 16
  %167 = and i32 %166, 32767
  br label %168

168:                                              ; preds = %160, %157
  %169 = phi i32 [ %159, %157 ], [ %167, %160 ]
  %170 = trunc i32 %169 to i16
  store i16 %170, ptr %10, align 2, !tbaa !9
  %171 = load ptr, ptr %7, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.progress_wheel_t, ptr %171, i32 0, i32 0
  %173 = getelementptr inbounds %struct.anon, ptr %172, i32 0, i32 12
  %174 = load i32, ptr %173, align 8, !tbaa !29
  %175 = load i16, ptr %10, align 2, !tbaa !9
  %176 = sext i16 %175 to i32
  %177 = call i32 @mul_n_q16(i32 noundef %174, i32 noundef %176)
  %178 = call signext i16 @reinterpret_s16_q16(i32 noundef %177)
  %179 = load ptr, ptr %7, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.progress_wheel_t, ptr %179, i32 0, i32 0
  %181 = getelementptr inbounds %struct.anon, ptr %180, i32 0, i32 11
  store i16 %178, ptr %181, align 2, !tbaa !30
  br label %182

182:                                              ; preds = %168, %120
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #7
  %183 = load ptr, ptr %7, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.progress_wheel_t, ptr %183, i32 0, i32 0
  %185 = getelementptr inbounds %struct.anon, ptr %184, i32 0, i32 10
  %186 = load i16, ptr %185, align 4, !tbaa !31
  %187 = sext i16 %186 to i32
  %188 = sdiv i32 %187, 900
  %189 = trunc i32 %188 to i8
  store i8 %189, ptr %17, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #7
  store i8 4, ptr %18, align 1, !tbaa !11
  %190 = load ptr, ptr %7, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.progress_wheel_t, ptr %190, i32 0, i32 0
  %192 = getelementptr inbounds %struct.anon, ptr %191, i32 0, i32 0
  %193 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %192, i32 0, i32 6
  %194 = load i32, ptr %193, align 8
  %195 = and i32 %194, 1
  %196 = icmp ne i32 %195, 0
  br i1 %196, label %197, label %202

197:                                              ; preds = %182
  %198 = load ptr, ptr %7, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.progress_wheel_t, ptr %198, i32 0, i32 0
  %200 = getelementptr inbounds %struct.anon, ptr %199, i32 0, i32 6
  %201 = call zeroext i8 @arm_2d_dynamic_dirty_region_wait_next(ptr noundef %200)
  store i8 %201, ptr %18, align 1, !tbaa !11
  br label %202

202:                                              ; preds = %197, %182
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %203 = load i8, ptr %13, align 1, !tbaa !12, !range !27, !noundef !28
  %204 = trunc i8 %203 to i1
  br i1 %204, label %205, label %320

205:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  call void @llvm.memset.p0.i64(ptr align 2 %20, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  store ptr null, ptr %21, align 8, !tbaa !5
  br label %206

206:                                              ; preds = %314, %205
  %207 = load ptr, ptr %21, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.arm_2d_region_t, ptr %207, i32 1
  store ptr %208, ptr %21, align 8, !tbaa !5
  %209 = icmp eq ptr %207, null
  br i1 %209, label %210, label %215

210:                                              ; preds = %206
  %211 = getelementptr inbounds %struct.arm_2d_region_t, ptr %20, i32 0, i32 1
  %212 = load ptr, ptr %8, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %212, i32 0, i32 1
  %214 = getelementptr inbounds %struct.arm_2d_region_t, ptr %213, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %211, ptr align 4 %214, i64 4, i1 false), !tbaa.struct !32
  br label %216

215:                                              ; preds = %206
  br label %216

216:                                              ; preds = %215, %210
  %217 = phi i32 [ 1, %210 ], [ 0, %215 ]
  %218 = icmp ne i32 %217, 0
  br i1 %218, label %220, label %219

219:                                              ; preds = %216
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  br label %319

220:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %221 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %221, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  store ptr null, ptr %24, align 8, !tbaa !5
  br label %222

222:                                              ; preds = %311, %220
  %223 = load ptr, ptr %24, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %223, i32 1
  store ptr %224, ptr %24, align 8, !tbaa !5
  %225 = icmp eq ptr %223, null
  br i1 %225, label %227, label %226

226:                                              ; preds = %222
  store i32 5, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %313

227:                                              ; preds = %222
  %228 = load ptr, ptr %9, align 8, !tbaa !5
  %229 = icmp eq ptr null, %228
  br i1 %229, label %230, label %231

230:                                              ; preds = %227
  store ptr %20, ptr %9, align 8, !tbaa !5
  br label %231

231:                                              ; preds = %230, %227
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %232 = load ptr, ptr %15, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %232, i32 0, i32 1
  %234 = getelementptr inbounds %struct.arm_2d_region_t, ptr %233, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %25, ptr align 4 %234, i64 4, i1 false), !tbaa.struct !32
  %235 = getelementptr inbounds %struct.arm_2d_size_t, ptr %25, i32 0, i32 0
  %236 = load i16, ptr %235, align 2, !tbaa !33
  %237 = sext i16 %236 to i32
  %238 = mul nsw i32 %237, 2
  %239 = trunc i32 %238 to i16
  store i16 %239, ptr %235, align 2, !tbaa !33
  %240 = getelementptr inbounds %struct.arm_2d_size_t, ptr %25, i32 0, i32 1
  %241 = load i16, ptr %240, align 2, !tbaa !35
  %242 = sext i16 %241 to i32
  %243 = mul nsw i32 %242, 2
  %244 = trunc i32 %243 to i16
  store i16 %244, ptr %240, align 2, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %245 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %26, ptr align 2 %245, i64 8, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  store ptr null, ptr %27, align 8, !tbaa !5
  br label %246

246:                                              ; preds = %309, %231
  %247 = load ptr, ptr %27, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.arm_2d_region_t, ptr %247, i32 1
  store ptr %248, ptr %27, align 8, !tbaa !5
  %249 = icmp eq ptr %247, null
  br i1 %249, label %251, label %250

250:                                              ; preds = %246
  store i32 8, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  br label %310

251:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  store ptr null, ptr %29, align 8, !tbaa !5
  br label %252

252:                                              ; preds = %304, %251
  %253 = load ptr, ptr %29, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.arm_2d_region_t, ptr %253, i32 1
  store ptr %254, ptr %29, align 8, !tbaa !5
  %255 = icmp eq ptr %253, null
  br i1 %255, label %256, label %298

256:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %30, ptr align 2 %25, i64 4, i1 false), !tbaa.struct !32
  %257 = getelementptr inbounds %struct.arm_2d_size_t, ptr %30, i32 0, i32 0
  %258 = load i16, ptr %257, align 2, !tbaa !33
  %259 = getelementptr inbounds %struct.arm_2d_region_t, ptr %28, i32 0, i32 1
  %260 = getelementptr inbounds %struct.arm_2d_size_t, ptr %259, i32 0, i32 0
  store i16 %258, ptr %260, align 2, !tbaa !11
  %261 = getelementptr inbounds %struct.arm_2d_size_t, ptr %30, i32 0, i32 1
  %262 = load i16, ptr %261, align 2, !tbaa !35
  %263 = getelementptr inbounds %struct.arm_2d_region_t, ptr %28, i32 0, i32 1
  %264 = getelementptr inbounds %struct.arm_2d_size_t, ptr %263, i32 0, i32 1
  store i16 %262, ptr %264, align 2, !tbaa !11
  %265 = getelementptr inbounds %struct.arm_2d_region_t, ptr %28, i32 0, i32 0
  %266 = getelementptr inbounds %struct.arm_2d_region_t, ptr %26, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %265, ptr align 2 %266, i64 4, i1 false), !tbaa.struct !32
  %267 = getelementptr inbounds %struct.arm_2d_region_t, ptr %26, i32 0, i32 1
  %268 = getelementptr inbounds %struct.arm_2d_size_t, ptr %267, i32 0, i32 0
  %269 = load i16, ptr %268, align 2, !tbaa !11
  %270 = sext i16 %269 to i32
  %271 = getelementptr inbounds %struct.arm_2d_size_t, ptr %30, i32 0, i32 0
  %272 = load i16, ptr %271, align 2, !tbaa !33
  %273 = sext i16 %272 to i32
  %274 = sub nsw i32 %270, %273
  %275 = ashr i32 %274, 1
  %276 = getelementptr inbounds %struct.arm_2d_region_t, ptr %28, i32 0, i32 0
  %277 = getelementptr inbounds %struct.arm_2d_location_t, ptr %276, i32 0, i32 0
  %278 = load i16, ptr %277, align 2, !tbaa !11
  %279 = sext i16 %278 to i32
  %280 = add nsw i32 %279, %275
  %281 = trunc i32 %280 to i16
  store i16 %281, ptr %277, align 2, !tbaa !11
  %282 = getelementptr inbounds %struct.arm_2d_region_t, ptr %26, i32 0, i32 1
  %283 = getelementptr inbounds %struct.arm_2d_size_t, ptr %282, i32 0, i32 1
  %284 = load i16, ptr %283, align 2, !tbaa !11
  %285 = sext i16 %284 to i32
  %286 = getelementptr inbounds %struct.arm_2d_size_t, ptr %30, i32 0, i32 1
  %287 = load i16, ptr %286, align 2, !tbaa !35
  %288 = sext i16 %287 to i32
  %289 = sub nsw i32 %285, %288
  %290 = ashr i32 %289, 1
  %291 = getelementptr inbounds %struct.arm_2d_region_t, ptr %28, i32 0, i32 0
  %292 = getelementptr inbounds %struct.arm_2d_location_t, ptr %291, i32 0, i32 1
  %293 = load i16, ptr %292, align 2, !tbaa !11
  %294 = sext i16 %293 to i32
  %295 = add nsw i32 %294, %290
  %296 = trunc i32 %295 to i16
  store i16 %296, ptr %292, align 2, !tbaa !11
  store i16 %296, ptr %31, align 2, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  %297 = load i16, ptr %31, align 2, !tbaa !9
  br label %299

298:                                              ; preds = %252
  br label %299

299:                                              ; preds = %298, %256
  %300 = phi i32 [ 1, %256 ], [ 0, %298 ]
  %301 = icmp ne i32 %300, 0
  br i1 %301, label %303, label %302

302:                                              ; preds = %299
  store i32 10, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  br label %309

303:                                              ; preds = %299
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %19, ptr align 2 %28, i64 8, i1 false), !tbaa.struct !36
  store ptr %19, ptr %9, align 8, !tbaa !5
  br label %304

304:                                              ; preds = %303
  %305 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null)
  %306 = zext i1 %305 to i8
  store i8 %306, ptr %32, align 1, !tbaa !12
  %307 = load i8, ptr %32, align 1, !tbaa !12, !range !27, !noundef !28
  %308 = trunc i8 %307 to i1
  br label %252, !llvm.loop !37

309:                                              ; preds = %302
  br label %246, !llvm.loop !39

310:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %311

311:                                              ; preds = %310
  %312 = load ptr, ptr %23, align 8, !tbaa !5
  br label %222, !llvm.loop !40

313:                                              ; preds = %226
  br label %314

314:                                              ; preds = %313
  %315 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null)
  %316 = zext i1 %315 to i8
  store i8 %316, ptr %33, align 1, !tbaa !12
  %317 = load i8, ptr %33, align 1, !tbaa !12, !range !27, !noundef !28
  %318 = trunc i8 %317 to i1
  br label %206, !llvm.loop !41

319:                                              ; preds = %219
  br label %320

320:                                              ; preds = %319, %202
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  store ptr null, ptr %35, align 8, !tbaa !5
  br label %321

321:                                              ; preds = %2028, %320
  %322 = load ptr, ptr %35, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %322, i32 1
  store ptr %323, ptr %35, align 8, !tbaa !5
  %324 = icmp eq ptr %322, null
  br i1 %324, label %325, label %330

325:                                              ; preds = %321
  %326 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %36, i32 0, i32 0
  store i8 0, ptr %326, align 1, !tbaa !42
  %327 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %36, i32 0, i32 1
  store i8 0, ptr %327, align 1, !tbaa !44
  %328 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %36, i32 0, i32 2
  store i8 0, ptr %328, align 1, !tbaa !45
  %329 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %36, i32 0, i32 3
  store i8 0, ptr %329, align 1, !tbaa !46
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %34, ptr align 1 %36, i64 4, i1 false), !tbaa.struct !47
  br label %331

330:                                              ; preds = %321
  br label %331

331:                                              ; preds = %330, %325
  %332 = phi i32 [ 1, %325 ], [ 0, %330 ]
  %333 = icmp ne i32 %332, 0
  br i1 %333, label %335, label %334

334:                                              ; preds = %331
  store i32 13, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  br label %2029

335:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 24, ptr %37) #7
  call void @llvm.memset.p0.i64(ptr align 8 %37, i8 0, i64 24, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  store ptr null, ptr %38, align 8, !tbaa !5
  br label %336

336:                                              ; preds = %2026, %335
  %337 = load ptr, ptr %38, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %337, i32 1
  store ptr %338, ptr %38, align 8, !tbaa !5
  %339 = icmp eq ptr %337, null
  br i1 %339, label %340, label %411

340:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  call void @llvm.memset.p0.i64(ptr align 2 %39, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %341 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %341, ptr %40, align 8, !tbaa !5
  %342 = load ptr, ptr %40, align 8, !tbaa !5
  %343 = icmp eq ptr null, %342
  br i1 %343, label %344, label %350

344:                                              ; preds = %340
  %345 = call ptr @arm_2d_get_default_frame_buffer()
  store ptr %345, ptr %40, align 8, !tbaa !5
  %346 = load ptr, ptr %40, align 8, !tbaa !5
  %347 = icmp eq ptr null, %346
  br i1 %347, label %348, label %349

348:                                              ; preds = %344
  store i32 15, ptr %22, align 4
  br label %407

349:                                              ; preds = %344
  br label %350

350:                                              ; preds = %349, %340
  %351 = load ptr, ptr %9, align 8, !tbaa !5
  %352 = icmp eq ptr null, %351
  br i1 %352, label %353, label %358

353:                                              ; preds = %350
  %354 = getelementptr inbounds %struct.arm_2d_region_t, ptr %39, i32 0, i32 1
  %355 = load ptr, ptr %40, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %355, i32 0, i32 1
  %357 = getelementptr inbounds %struct.arm_2d_region_t, ptr %356, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %354, ptr align 4 %357, i64 4, i1 false), !tbaa.struct !32
  br label %360

358:                                              ; preds = %350
  %359 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %39, ptr align 2 %359, i64 8, i1 false), !tbaa.struct !36
  br label %360

360:                                              ; preds = %358, %353
  %361 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %34, i32 0, i32 0
  %362 = load i8, ptr %361, align 1, !tbaa !42
  %363 = zext i8 %362 to i32
  %364 = getelementptr inbounds %struct.arm_2d_region_t, ptr %39, i32 0, i32 0
  %365 = getelementptr inbounds %struct.arm_2d_location_t, ptr %364, i32 0, i32 0
  %366 = load i16, ptr %365, align 2, !tbaa !11
  %367 = sext i16 %366 to i32
  %368 = add nsw i32 %367, %363
  %369 = trunc i32 %368 to i16
  store i16 %369, ptr %365, align 2, !tbaa !11
  %370 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %34, i32 0, i32 2
  %371 = load i8, ptr %370, align 1, !tbaa !45
  %372 = zext i8 %371 to i32
  %373 = getelementptr inbounds %struct.arm_2d_region_t, ptr %39, i32 0, i32 0
  %374 = getelementptr inbounds %struct.arm_2d_location_t, ptr %373, i32 0, i32 1
  %375 = load i16, ptr %374, align 2, !tbaa !11
  %376 = sext i16 %375 to i32
  %377 = add nsw i32 %376, %372
  %378 = trunc i32 %377 to i16
  store i16 %378, ptr %374, align 2, !tbaa !11
  %379 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %34, i32 0, i32 0
  %380 = load i8, ptr %379, align 1, !tbaa !42
  %381 = zext i8 %380 to i32
  %382 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %34, i32 0, i32 1
  %383 = load i8, ptr %382, align 1, !tbaa !44
  %384 = zext i8 %383 to i32
  %385 = add nsw i32 %381, %384
  %386 = getelementptr inbounds %struct.arm_2d_region_t, ptr %39, i32 0, i32 1
  %387 = getelementptr inbounds %struct.arm_2d_size_t, ptr %386, i32 0, i32 0
  %388 = load i16, ptr %387, align 2, !tbaa !11
  %389 = sext i16 %388 to i32
  %390 = sub nsw i32 %389, %385
  %391 = trunc i32 %390 to i16
  store i16 %391, ptr %387, align 2, !tbaa !11
  %392 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %34, i32 0, i32 2
  %393 = load i8, ptr %392, align 1, !tbaa !45
  %394 = zext i8 %393 to i32
  %395 = getelementptr inbounds %struct.arm_2d_margin_t, ptr %34, i32 0, i32 3
  %396 = load i8, ptr %395, align 1, !tbaa !46
  %397 = zext i8 %396 to i32
  %398 = add nsw i32 %394, %397
  %399 = getelementptr inbounds %struct.arm_2d_region_t, ptr %39, i32 0, i32 1
  %400 = getelementptr inbounds %struct.arm_2d_size_t, ptr %399, i32 0, i32 1
  %401 = load i16, ptr %400, align 2, !tbaa !11
  %402 = sext i16 %401 to i32
  %403 = sub nsw i32 %402, %398
  %404 = trunc i32 %403 to i16
  store i16 %404, ptr %400, align 2, !tbaa !11
  %405 = load ptr, ptr %40, align 8, !tbaa !5
  %406 = call ptr @arm_2d_tile_generate_child(ptr noundef %405, ptr noundef %39, ptr noundef %37, i1 noundef zeroext false)
  store ptr %406, ptr %41, align 8, !tbaa !5
  store i32 0, ptr %22, align 4
  br label %407

407:                                              ; preds = %360, %348
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  %408 = load i32, ptr %22, align 4
  switch i32 %408, label %2027 [
    i32 0, label %409
  ]

409:                                              ; preds = %407
  %410 = load ptr, ptr %41, align 8, !tbaa !5
  br label %412

411:                                              ; preds = %336
  br label %412

412:                                              ; preds = %411, %409
  %413 = phi i32 [ 1, %409 ], [ 0, %411 ]
  %414 = icmp ne i32 %413, 0
  br i1 %414, label %416, label %415

415:                                              ; preds = %412
  store i32 15, ptr %22, align 4
  br label %2027

416:                                              ; preds = %412
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  call void @llvm.memset.p0.i64(ptr align 2 %42, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  store ptr null, ptr %43, align 8, !tbaa !5
  br label %417

417:                                              ; preds = %2020, %416
  %418 = load ptr, ptr %43, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.arm_2d_region_t, ptr %418, i32 1
  store ptr %419, ptr %43, align 8, !tbaa !5
  %420 = icmp eq ptr %418, null
  br i1 %420, label %421, label %425

421:                                              ; preds = %417
  %422 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %423 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %37, i32 0, i32 1
  %424 = getelementptr inbounds %struct.arm_2d_region_t, ptr %423, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %422, ptr align 4 %424, i64 4, i1 false), !tbaa.struct !32
  br label %426

425:                                              ; preds = %417
  br label %426

426:                                              ; preds = %425, %421
  %427 = phi i32 [ 1, %421 ], [ 0, %425 ]
  %428 = icmp ne i32 %427, 0
  br i1 %428, label %430, label %429

429:                                              ; preds = %426
  store i32 18, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %2025

430:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  store ptr %37, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  store ptr null, ptr %45, align 8, !tbaa !5
  br label %431

431:                                              ; preds = %2017, %430
  %432 = load ptr, ptr %45, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %432, i32 1
  store ptr %433, ptr %45, align 8, !tbaa !5
  %434 = icmp eq ptr %432, null
  br i1 %434, label %436, label %435

435:                                              ; preds = %431
  store i32 21, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  br label %2019

436:                                              ; preds = %431
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  %437 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 0
  %438 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 0
  %439 = getelementptr inbounds %struct.arm_2d_location_t, ptr %438, i32 0, i32 0
  %440 = load i16, ptr %439, align 2, !tbaa !11
  %441 = sext i16 %440 to i32
  %442 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %443 = getelementptr inbounds %struct.arm_2d_size_t, ptr %442, i32 0, i32 0
  %444 = load i16, ptr %443, align 2, !tbaa !11
  %445 = sext i16 %444 to i32
  %446 = ashr i32 %445, 1
  %447 = add nsw i32 %441, %446
  %448 = trunc i32 %447 to i16
  store i16 %448, ptr %437, align 2, !tbaa !48
  %449 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 1
  %450 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 0
  %451 = getelementptr inbounds %struct.arm_2d_location_t, ptr %450, i32 0, i32 1
  %452 = load i16, ptr %451, align 2, !tbaa !11
  %453 = sext i16 %452 to i32
  %454 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %455 = getelementptr inbounds %struct.arm_2d_size_t, ptr %454, i32 0, i32 1
  %456 = load i16, ptr %455, align 2, !tbaa !11
  %457 = sext i16 %456 to i32
  %458 = ashr i32 %457, 1
  %459 = add nsw i32 %453, %458
  %460 = trunc i32 %459 to i16
  store i16 %460, ptr %449, align 2, !tbaa !50
  %461 = load i8, ptr %18, align 1, !tbaa !11
  %462 = zext i8 %461 to i32
  %463 = icmp eq i32 %462, 0
  br i1 %463, label %464, label %479

464:                                              ; preds = %436
  %465 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %466 = trunc i8 %465 to i1
  br i1 %466, label %467, label %479

467:                                              ; preds = %464
  %468 = load ptr, ptr %7, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.progress_wheel_t, ptr %468, i32 0, i32 0
  %470 = getelementptr inbounds %struct.anon, ptr %469, i32 0, i32 0
  %471 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %470, i32 0, i32 6
  %472 = load i32, ptr %471, align 8
  %473 = and i32 %472, 1
  %474 = icmp ne i32 %473, 0
  br i1 %474, label %475, label %479

475:                                              ; preds = %467
  %476 = load ptr, ptr %7, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.progress_wheel_t, ptr %476, i32 0, i32 0
  %478 = getelementptr inbounds %struct.anon, ptr %477, i32 0, i32 8
  store i8 0, ptr %478, align 8, !tbaa !51
  store i8 3, ptr %18, align 1, !tbaa !11
  br label %479

479:                                              ; preds = %475, %467, %464, %436
  %480 = load i8, ptr %18, align 1, !tbaa !11
  %481 = zext i8 %480 to i32
  %482 = icmp eq i32 1, %481
  br i1 %482, label %483, label %895

483:                                              ; preds = %479
  %484 = load ptr, ptr %7, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.progress_wheel_t, ptr %484, i32 0, i32 0
  %486 = getelementptr inbounds %struct.anon, ptr %485, i32 0, i32 9
  %487 = load i16, ptr %486, align 2, !tbaa !52
  %488 = sext i16 %487 to i32
  %489 = load ptr, ptr %7, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.progress_wheel_t, ptr %489, i32 0, i32 0
  %491 = getelementptr inbounds %struct.anon, ptr %490, i32 0, i32 10
  %492 = load i16, ptr %491, align 4, !tbaa !31
  %493 = sext i16 %492 to i32
  %494 = icmp ne i32 %488, %493
  br i1 %494, label %495, label %894

495:                                              ; preds = %483
  %496 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %497 = trunc i8 %496 to i1
  br i1 %497, label %498, label %894

498:                                              ; preds = %495
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #7
  %499 = load i8, ptr %17, align 1, !tbaa !11
  %500 = sext i8 %499 to i32
  %501 = load ptr, ptr %7, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.progress_wheel_t, ptr %501, i32 0, i32 0
  %503 = getelementptr inbounds %struct.anon, ptr %502, i32 0, i32 8
  %504 = load i8, ptr %503, align 8, !tbaa !51
  %505 = sext i8 %504 to i32
  %506 = sub nsw i32 %500, %505
  %507 = trunc i32 %506 to i8
  store i8 %507, ptr %47, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #7
  %508 = load i8, ptr %47, align 1, !tbaa !11
  %509 = sext i8 %508 to i32
  %510 = icmp sgt i32 %509, 0
  br i1 %510, label %511, label %514

511:                                              ; preds = %498
  %512 = load i8, ptr %47, align 1, !tbaa !11
  %513 = sext i8 %512 to i32
  br label %518

514:                                              ; preds = %498
  %515 = load i8, ptr %47, align 1, !tbaa !11
  %516 = sext i8 %515 to i32
  %517 = sub nsw i32 0, %516
  br label %518

518:                                              ; preds = %514, %511
  %519 = phi i32 [ %513, %511 ], [ %517, %514 ]
  %520 = trunc i32 %519 to i8
  store i8 %520, ptr %48, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %49) #7
  %521 = load ptr, ptr %7, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.progress_wheel_t, ptr %521, i32 0, i32 0
  %523 = getelementptr inbounds %struct.anon, ptr %522, i32 0, i32 10
  %524 = load i16, ptr %523, align 4, !tbaa !31
  %525 = sext i16 %524 to i32
  %526 = load ptr, ptr %7, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.progress_wheel_t, ptr %526, i32 0, i32 0
  %528 = getelementptr inbounds %struct.anon, ptr %527, i32 0, i32 9
  %529 = load i16, ptr %528, align 2, !tbaa !52
  %530 = sext i16 %529 to i32
  %531 = sub nsw i32 %525, %530
  %532 = trunc i32 %531 to i16
  store i16 %532, ptr %49, align 2, !tbaa !9
  %533 = load ptr, ptr %7, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.progress_wheel_t, ptr %533, i32 0, i32 0
  %535 = getelementptr inbounds %struct.anon, ptr %534, i32 0, i32 10
  %536 = load i16, ptr %535, align 4, !tbaa !31
  %537 = load ptr, ptr %7, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.progress_wheel_t, ptr %537, i32 0, i32 0
  %539 = getelementptr inbounds %struct.anon, ptr %538, i32 0, i32 9
  store i16 %536, ptr %539, align 2, !tbaa !52
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #7
  %540 = load i16, ptr %49, align 2, !tbaa !9
  %541 = sext i16 %540 to i32
  %542 = icmp sgt i32 %541, 0
  br i1 %542, label %543, label %546

543:                                              ; preds = %518
  %544 = load i16, ptr %49, align 2, !tbaa !9
  %545 = sext i16 %544 to i32
  br label %550

546:                                              ; preds = %518
  %547 = load i16, ptr %49, align 2, !tbaa !9
  %548 = sext i16 %547 to i32
  %549 = sub nsw i32 0, %548
  br label %550

550:                                              ; preds = %546, %543
  %551 = phi i32 [ %545, %543 ], [ %549, %546 ]
  %552 = icmp sle i32 %551, 90
  %553 = zext i1 %552 to i8
  store i8 %553, ptr %50, align 1, !tbaa !12
  %554 = load i8, ptr %48, align 1, !tbaa !11
  %555 = sext i8 %554 to i32
  %556 = icmp slt i32 %555, 2
  br i1 %556, label %557, label %892

557:                                              ; preds = %550
  %558 = load i8, ptr %50, align 1, !tbaa !12, !range !27, !noundef !28
  %559 = trunc i8 %558 to i1
  br i1 %559, label %560, label %565

560:                                              ; preds = %557
  %561 = load ptr, ptr %7, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.progress_wheel_t, ptr %561, i32 0, i32 0
  %563 = getelementptr inbounds %struct.anon, ptr %562, i32 0, i32 5
  %564 = getelementptr inbounds %struct.arm_2d_helper_dirty_region_transform_t, ptr %563, i32 0, i32 4
  call void @arm_2d_helper_dirty_region_item_set_extra_region(ptr noundef %564, ptr noundef %37, ptr noundef %42, ptr noundef null)
  br label %887

565:                                              ; preds = %557
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  call void @llvm.memset.p0.i64(ptr align 2 %51, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #7
  store i8 0, ptr %52, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %53) #7
  %566 = load ptr, ptr %7, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.progress_wheel_t, ptr %566, i32 0, i32 0
  %568 = getelementptr inbounds %struct.anon, ptr %567, i32 0, i32 0
  %569 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %568, i32 0, i32 6
  %570 = load i32, ptr %569, align 8
  %571 = lshr i32 %570, 2
  %572 = and i32 %571, 3
  %573 = trunc i32 %572 to i8
  store i8 %573, ptr %53, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %54) #7
  %574 = load ptr, ptr %7, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.progress_wheel_t, ptr %574, i32 0, i32 0
  %576 = getelementptr inbounds %struct.anon, ptr %575, i32 0, i32 0
  %577 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %576, i32 0, i32 2
  %578 = load i16, ptr %577, align 8, !tbaa !53
  %579 = sext i16 %578 to i32
  %580 = sdiv i32 %579, 2
  %581 = sub nsw i32 %580, 1
  %582 = trunc i32 %581 to i16
  store i16 %582, ptr %54, align 2, !tbaa !9
  %583 = load i16, ptr %49, align 2, !tbaa !9
  %584 = sext i16 %583 to i32
  %585 = icmp sgt i32 %584, 0
  br i1 %585, label %586, label %737

586:                                              ; preds = %565
  %587 = load ptr, ptr %7, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.progress_wheel_t, ptr %587, i32 0, i32 0
  %589 = getelementptr inbounds %struct.anon, ptr %588, i32 0, i32 8
  %590 = load i8, ptr %589, align 8, !tbaa !51
  %591 = sext i8 %590 to i32
  switch i32 %591, label %731 [
    i32 0, label %592
    i32 1, label %634
    i32 2, label %682
    i32 3, label %730
  ]

592:                                              ; preds = %586
  %593 = load i8, ptr %17, align 1, !tbaa !11
  %594 = sext i8 %593 to i32
  %595 = icmp sgt i32 %594, 0
  br i1 %595, label %596, label %633

596:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #7
  %597 = getelementptr inbounds %struct.arm_2d_region_t, ptr %55, i32 0, i32 0
  %598 = getelementptr inbounds %struct.arm_2d_location_t, ptr %597, i32 0, i32 0
  %599 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 0
  %600 = load i16, ptr %599, align 2, !tbaa !48
  %601 = sext i16 %600 to i32
  %602 = load i16, ptr %54, align 2, !tbaa !9
  %603 = sext i16 %602 to i32
  %604 = load i8, ptr %53, align 1, !tbaa !11
  %605 = sext i8 %604 to i64
  %606 = getelementptr inbounds [4 x %struct.anon.29], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 %605
  %607 = load i16, ptr %606, align 2
  %608 = shl i16 %607, 14
  %609 = ashr i16 %608, 14
  %610 = sext i16 %609 to i32
  %611 = mul nsw i32 %603, %610
  %612 = add nsw i32 %601, %611
  %613 = trunc i32 %612 to i16
  store i16 %613, ptr %598, align 2, !tbaa !48
  %614 = getelementptr inbounds %struct.arm_2d_location_t, ptr %597, i32 0, i32 1
  %615 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 1
  %616 = load i16, ptr %615, align 2, !tbaa !50
  %617 = sext i16 %616 to i32
  %618 = load i16, ptr %54, align 2, !tbaa !9
  %619 = sext i16 %618 to i32
  %620 = load i8, ptr %53, align 1, !tbaa !11
  %621 = sext i8 %620 to i64
  %622 = getelementptr inbounds [4 x %struct.anon.29], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 %621
  %623 = load i16, ptr %622, align 2
  %624 = shl i16 %623, 12
  %625 = ashr i16 %624, 14
  %626 = sext i16 %625 to i32
  %627 = mul nsw i32 %619, %626
  %628 = add nsw i32 %617, %627
  %629 = trunc i32 %628 to i16
  store i16 %629, ptr %614, align 2, !tbaa !50
  %630 = getelementptr inbounds %struct.arm_2d_region_t, ptr %55, i32 0, i32 1
  %631 = getelementptr inbounds %struct.arm_2d_size_t, ptr %630, i32 0, i32 0
  store i16 1, ptr %631, align 2, !tbaa !33
  %632 = getelementptr inbounds %struct.arm_2d_size_t, ptr %630, i32 0, i32 1
  store i16 1, ptr %632, align 2, !tbaa !35
  store i8 1, ptr %52, align 1, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %51, ptr align 2 %55, i64 8, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  br label %633

633:                                              ; preds = %596, %592
  br label %634

634:                                              ; preds = %633, %586
  %635 = load i8, ptr %17, align 1, !tbaa !11
  %636 = sext i8 %635 to i32
  %637 = icmp sgt i32 %636, 1
  br i1 %637, label %638, label %681

638:                                              ; preds = %634
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #7
  %639 = getelementptr inbounds %struct.arm_2d_region_t, ptr %56, i32 0, i32 0
  %640 = getelementptr inbounds %struct.arm_2d_location_t, ptr %639, i32 0, i32 0
  %641 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 0
  %642 = load i16, ptr %641, align 2, !tbaa !48
  %643 = sext i16 %642 to i32
  %644 = load i16, ptr %54, align 2, !tbaa !9
  %645 = sext i16 %644 to i32
  %646 = load i8, ptr %53, align 1, !tbaa !11
  %647 = sext i8 %646 to i64
  %648 = getelementptr inbounds [4 x %struct.anon.29], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 %647
  %649 = load i16, ptr %648, align 2
  %650 = shl i16 %649, 10
  %651 = ashr i16 %650, 14
  %652 = sext i16 %651 to i32
  %653 = mul nsw i32 %645, %652
  %654 = add nsw i32 %643, %653
  %655 = trunc i32 %654 to i16
  store i16 %655, ptr %640, align 2, !tbaa !48
  %656 = getelementptr inbounds %struct.arm_2d_location_t, ptr %639, i32 0, i32 1
  %657 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 1
  %658 = load i16, ptr %657, align 2, !tbaa !50
  %659 = sext i16 %658 to i32
  %660 = load i16, ptr %54, align 2, !tbaa !9
  %661 = sext i16 %660 to i32
  %662 = load i8, ptr %53, align 1, !tbaa !11
  %663 = sext i8 %662 to i64
  %664 = getelementptr inbounds [4 x %struct.anon.29], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 %663
  %665 = load i16, ptr %664, align 2
  %666 = shl i16 %665, 8
  %667 = ashr i16 %666, 14
  %668 = sext i16 %667 to i32
  %669 = mul nsw i32 %661, %668
  %670 = add nsw i32 %659, %669
  %671 = trunc i32 %670 to i16
  store i16 %671, ptr %656, align 2, !tbaa !50
  %672 = getelementptr inbounds %struct.arm_2d_region_t, ptr %56, i32 0, i32 1
  %673 = getelementptr inbounds %struct.arm_2d_size_t, ptr %672, i32 0, i32 0
  store i16 1, ptr %673, align 2, !tbaa !33
  %674 = getelementptr inbounds %struct.arm_2d_size_t, ptr %672, i32 0, i32 1
  store i16 1, ptr %674, align 2, !tbaa !35
  %675 = load i8, ptr %52, align 1, !tbaa !12, !range !27, !noundef !28
  %676 = trunc i8 %675 to i1
  br i1 %676, label %677, label %678

677:                                              ; preds = %638
  store i8 1, ptr %52, align 1, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %51, ptr align 2 %56, i64 8, i1 false), !tbaa.struct !36
  br label %680

678:                                              ; preds = %638
  %679 = call ptr @arm_2d_region_get_minimal_enclosure(ptr noundef %56, ptr noundef %51, ptr noundef %51)
  br label %680

680:                                              ; preds = %678, %677
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  br label %681

681:                                              ; preds = %680, %634
  br label %682

682:                                              ; preds = %681, %586
  %683 = load i8, ptr %17, align 1, !tbaa !11
  %684 = sext i8 %683 to i32
  %685 = icmp sgt i32 %684, 2
  br i1 %685, label %686, label %729

686:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #7
  %687 = getelementptr inbounds %struct.arm_2d_region_t, ptr %57, i32 0, i32 0
  %688 = getelementptr inbounds %struct.arm_2d_location_t, ptr %687, i32 0, i32 0
  %689 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 0
  %690 = load i16, ptr %689, align 2, !tbaa !48
  %691 = sext i16 %690 to i32
  %692 = load i16, ptr %54, align 2, !tbaa !9
  %693 = sext i16 %692 to i32
  %694 = load i8, ptr %53, align 1, !tbaa !11
  %695 = sext i8 %694 to i64
  %696 = getelementptr inbounds [4 x %struct.anon.29], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 %695
  %697 = load i16, ptr %696, align 2
  %698 = shl i16 %697, 6
  %699 = ashr i16 %698, 14
  %700 = sext i16 %699 to i32
  %701 = mul nsw i32 %693, %700
  %702 = add nsw i32 %691, %701
  %703 = trunc i32 %702 to i16
  store i16 %703, ptr %688, align 2, !tbaa !48
  %704 = getelementptr inbounds %struct.arm_2d_location_t, ptr %687, i32 0, i32 1
  %705 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 1
  %706 = load i16, ptr %705, align 2, !tbaa !50
  %707 = sext i16 %706 to i32
  %708 = load i16, ptr %54, align 2, !tbaa !9
  %709 = sext i16 %708 to i32
  %710 = load i8, ptr %53, align 1, !tbaa !11
  %711 = sext i8 %710 to i64
  %712 = getelementptr inbounds [4 x %struct.anon.29], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 %711
  %713 = load i16, ptr %712, align 2
  %714 = shl i16 %713, 4
  %715 = ashr i16 %714, 14
  %716 = sext i16 %715 to i32
  %717 = mul nsw i32 %709, %716
  %718 = add nsw i32 %707, %717
  %719 = trunc i32 %718 to i16
  store i16 %719, ptr %704, align 2, !tbaa !50
  %720 = getelementptr inbounds %struct.arm_2d_region_t, ptr %57, i32 0, i32 1
  %721 = getelementptr inbounds %struct.arm_2d_size_t, ptr %720, i32 0, i32 0
  store i16 1, ptr %721, align 2, !tbaa !33
  %722 = getelementptr inbounds %struct.arm_2d_size_t, ptr %720, i32 0, i32 1
  store i16 1, ptr %722, align 2, !tbaa !35
  %723 = load i8, ptr %52, align 1, !tbaa !12, !range !27, !noundef !28
  %724 = trunc i8 %723 to i1
  br i1 %724, label %725, label %726

725:                                              ; preds = %686
  store i8 1, ptr %52, align 1, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %51, ptr align 2 %57, i64 8, i1 false), !tbaa.struct !36
  br label %728

726:                                              ; preds = %686
  %727 = call ptr @arm_2d_region_get_minimal_enclosure(ptr noundef %57, ptr noundef %51, ptr noundef %51)
  br label %728

728:                                              ; preds = %726, %725
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #7
  br label %729

729:                                              ; preds = %728, %682
  br label %732

730:                                              ; preds = %586
  br label %731

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

732:                                              ; preds = %731, %729
  %733 = load ptr, ptr %7, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.progress_wheel_t, ptr %733, i32 0, i32 0
  %735 = getelementptr inbounds %struct.anon, ptr %734, i32 0, i32 5
  %736 = getelementptr inbounds %struct.arm_2d_helper_dirty_region_transform_t, ptr %735, i32 0, i32 4
  call void @arm_2d_helper_dirty_region_item_set_extra_region(ptr noundef %736, ptr noundef %37, ptr noundef %42, ptr noundef %51)
  br label %886

737:                                              ; preds = %565
  %738 = load ptr, ptr %7, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.progress_wheel_t, ptr %738, i32 0, i32 0
  %740 = getelementptr inbounds %struct.anon, ptr %739, i32 0, i32 8
  %741 = load i8, ptr %740, align 8, !tbaa !51
  %742 = sext i8 %741 to i32
  switch i32 %742, label %880 [
    i32 3, label %743
    i32 2, label %784
    i32 1, label %832
    i32 0, label %881
  ]

743:                                              ; preds = %737
  %744 = load i8, ptr %17, align 1, !tbaa !11
  %745 = sext i8 %744 to i32
  %746 = icmp slt i32 %745, 3
  br i1 %746, label %747, label %783

747:                                              ; preds = %743
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #7
  %748 = getelementptr inbounds %struct.arm_2d_region_t, ptr %58, i32 0, i32 0
  %749 = getelementptr inbounds %struct.arm_2d_location_t, ptr %748, i32 0, i32 0
  %750 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 0
  %751 = load i16, ptr %750, align 2, !tbaa !48
  %752 = sext i16 %751 to i32
  %753 = load i16, ptr %54, align 2, !tbaa !9
  %754 = sext i16 %753 to i32
  %755 = load i8, ptr %53, align 1, !tbaa !11
  %756 = sext i8 %755 to i64
  %757 = getelementptr inbounds [4 x %struct.anon.29], ptr getelementptr inbounds ([2 x [4 x %struct.anon.29]], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 1), i64 0, i64 %756
  %758 = load i16, ptr %757, align 2
  %759 = shl i16 %758, 2
  %760 = ashr i16 %759, 14
  %761 = sext i16 %760 to i32
  %762 = mul nsw i32 %754, %761
  %763 = add nsw i32 %752, %762
  %764 = trunc i32 %763 to i16
  store i16 %764, ptr %749, align 2, !tbaa !48
  %765 = getelementptr inbounds %struct.arm_2d_location_t, ptr %748, i32 0, i32 1
  %766 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 1
  %767 = load i16, ptr %766, align 2, !tbaa !50
  %768 = sext i16 %767 to i32
  %769 = load i16, ptr %54, align 2, !tbaa !9
  %770 = sext i16 %769 to i32
  %771 = load i8, ptr %53, align 1, !tbaa !11
  %772 = sext i8 %771 to i64
  %773 = getelementptr inbounds [4 x %struct.anon.29], ptr getelementptr inbounds ([2 x [4 x %struct.anon.29]], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 1), i64 0, i64 %772
  %774 = load i16, ptr %773, align 2
  %775 = ashr i16 %774, 14
  %776 = sext i16 %775 to i32
  %777 = mul nsw i32 %770, %776
  %778 = add nsw i32 %768, %777
  %779 = trunc i32 %778 to i16
  store i16 %779, ptr %765, align 2, !tbaa !50
  %780 = getelementptr inbounds %struct.arm_2d_region_t, ptr %58, i32 0, i32 1
  %781 = getelementptr inbounds %struct.arm_2d_size_t, ptr %780, i32 0, i32 0
  store i16 1, ptr %781, align 2, !tbaa !33
  %782 = getelementptr inbounds %struct.arm_2d_size_t, ptr %780, i32 0, i32 1
  store i16 1, ptr %782, align 2, !tbaa !35
  store i8 1, ptr %52, align 1, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %51, ptr align 2 %58, i64 8, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  br label %783

783:                                              ; preds = %747, %743
  br label %784

784:                                              ; preds = %783, %737
  %785 = load i8, ptr %17, align 1, !tbaa !11
  %786 = sext i8 %785 to i32
  %787 = icmp slt i32 %786, 2
  br i1 %787, label %788, label %831

788:                                              ; preds = %784
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  %789 = getelementptr inbounds %struct.arm_2d_region_t, ptr %59, i32 0, i32 0
  %790 = getelementptr inbounds %struct.arm_2d_location_t, ptr %789, i32 0, i32 0
  %791 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 0
  %792 = load i16, ptr %791, align 2, !tbaa !48
  %793 = sext i16 %792 to i32
  %794 = load i16, ptr %54, align 2, !tbaa !9
  %795 = sext i16 %794 to i32
  %796 = load i8, ptr %53, align 1, !tbaa !11
  %797 = sext i8 %796 to i64
  %798 = getelementptr inbounds [4 x %struct.anon.29], ptr getelementptr inbounds ([2 x [4 x %struct.anon.29]], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 1), i64 0, i64 %797
  %799 = load i16, ptr %798, align 2
  %800 = shl i16 %799, 6
  %801 = ashr i16 %800, 14
  %802 = sext i16 %801 to i32
  %803 = mul nsw i32 %795, %802
  %804 = add nsw i32 %793, %803
  %805 = trunc i32 %804 to i16
  store i16 %805, ptr %790, align 2, !tbaa !48
  %806 = getelementptr inbounds %struct.arm_2d_location_t, ptr %789, i32 0, i32 1
  %807 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 1
  %808 = load i16, ptr %807, align 2, !tbaa !50
  %809 = sext i16 %808 to i32
  %810 = load i16, ptr %54, align 2, !tbaa !9
  %811 = sext i16 %810 to i32
  %812 = load i8, ptr %53, align 1, !tbaa !11
  %813 = sext i8 %812 to i64
  %814 = getelementptr inbounds [4 x %struct.anon.29], ptr getelementptr inbounds ([2 x [4 x %struct.anon.29]], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 1), i64 0, i64 %813
  %815 = load i16, ptr %814, align 2
  %816 = shl i16 %815, 4
  %817 = ashr i16 %816, 14
  %818 = sext i16 %817 to i32
  %819 = mul nsw i32 %811, %818
  %820 = add nsw i32 %809, %819
  %821 = trunc i32 %820 to i16
  store i16 %821, ptr %806, align 2, !tbaa !50
  %822 = getelementptr inbounds %struct.arm_2d_region_t, ptr %59, i32 0, i32 1
  %823 = getelementptr inbounds %struct.arm_2d_size_t, ptr %822, i32 0, i32 0
  store i16 1, ptr %823, align 2, !tbaa !33
  %824 = getelementptr inbounds %struct.arm_2d_size_t, ptr %822, i32 0, i32 1
  store i16 1, ptr %824, align 2, !tbaa !35
  %825 = load i8, ptr %52, align 1, !tbaa !12, !range !27, !noundef !28
  %826 = trunc i8 %825 to i1
  br i1 %826, label %827, label %828

827:                                              ; preds = %788
  store i8 1, ptr %52, align 1, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %51, ptr align 2 %59, i64 8, i1 false), !tbaa.struct !36
  br label %830

828:                                              ; preds = %788
  %829 = call ptr @arm_2d_region_get_minimal_enclosure(ptr noundef %59, ptr noundef %51, ptr noundef %51)
  br label %830

830:                                              ; preds = %828, %827
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  br label %831

831:                                              ; preds = %830, %784
  br label %832

832:                                              ; preds = %831, %737
  %833 = load i8, ptr %17, align 1, !tbaa !11
  %834 = sext i8 %833 to i32
  %835 = icmp slt i32 %834, 2
  br i1 %835, label %836, label %879

836:                                              ; preds = %832
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #7
  %837 = getelementptr inbounds %struct.arm_2d_region_t, ptr %60, i32 0, i32 0
  %838 = getelementptr inbounds %struct.arm_2d_location_t, ptr %837, i32 0, i32 0
  %839 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 0
  %840 = load i16, ptr %839, align 2, !tbaa !48
  %841 = sext i16 %840 to i32
  %842 = load i16, ptr %54, align 2, !tbaa !9
  %843 = sext i16 %842 to i32
  %844 = load i8, ptr %53, align 1, !tbaa !11
  %845 = sext i8 %844 to i64
  %846 = getelementptr inbounds [4 x %struct.anon.29], ptr getelementptr inbounds ([2 x [4 x %struct.anon.29]], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 1), i64 0, i64 %845
  %847 = load i16, ptr %846, align 2
  %848 = shl i16 %847, 10
  %849 = ashr i16 %848, 14
  %850 = sext i16 %849 to i32
  %851 = mul nsw i32 %843, %850
  %852 = add nsw i32 %841, %851
  %853 = trunc i32 %852 to i16
  store i16 %853, ptr %838, align 2, !tbaa !48
  %854 = getelementptr inbounds %struct.arm_2d_location_t, ptr %837, i32 0, i32 1
  %855 = getelementptr inbounds %struct.arm_2d_location_t, ptr %46, i32 0, i32 1
  %856 = load i16, ptr %855, align 2, !tbaa !50
  %857 = sext i16 %856 to i32
  %858 = load i16, ptr %54, align 2, !tbaa !9
  %859 = sext i16 %858 to i32
  %860 = load i8, ptr %53, align 1, !tbaa !11
  %861 = sext i8 %860 to i64
  %862 = getelementptr inbounds [4 x %struct.anon.29], ptr getelementptr inbounds ([2 x [4 x %struct.anon.29]], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 1), i64 0, i64 %861
  %863 = load i16, ptr %862, align 2
  %864 = shl i16 %863, 8
  %865 = ashr i16 %864, 14
  %866 = sext i16 %865 to i32
  %867 = mul nsw i32 %859, %866
  %868 = add nsw i32 %857, %867
  %869 = trunc i32 %868 to i16
  store i16 %869, ptr %854, align 2, !tbaa !50
  %870 = getelementptr inbounds %struct.arm_2d_region_t, ptr %60, i32 0, i32 1
  %871 = getelementptr inbounds %struct.arm_2d_size_t, ptr %870, i32 0, i32 0
  store i16 1, ptr %871, align 2, !tbaa !33
  %872 = getelementptr inbounds %struct.arm_2d_size_t, ptr %870, i32 0, i32 1
  store i16 1, ptr %872, align 2, !tbaa !35
  %873 = load i8, ptr %52, align 1, !tbaa !12, !range !27, !noundef !28
  %874 = trunc i8 %873 to i1
  br i1 %874, label %875, label %876

875:                                              ; preds = %836
  store i8 1, ptr %52, align 1, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %51, ptr align 2 %60, i64 8, i1 false), !tbaa.struct !36
  br label %878

876:                                              ; preds = %836
  %877 = call ptr @arm_2d_region_get_minimal_enclosure(ptr noundef %60, ptr noundef %51, ptr noundef %51)
  br label %878

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

879:                                              ; preds = %878, %832
  br label %881

880:                                              ; preds = %737
  br label %881

881:                                              ; preds = %880, %879, %737
  %882 = load ptr, ptr %7, align 8, !tbaa !5
  %883 = getelementptr inbounds %struct.progress_wheel_t, ptr %882, i32 0, i32 0
  %884 = getelementptr inbounds %struct.anon, ptr %883, i32 0, i32 5
  %885 = getelementptr inbounds %struct.arm_2d_helper_dirty_region_transform_t, ptr %884, i32 0, i32 4
  call void @arm_2d_helper_dirty_region_item_set_extra_region(ptr noundef %885, ptr noundef %37, ptr noundef %42, ptr noundef %51)
  br label %886

886:                                              ; preds = %881, %732
  store i8 2, ptr %18, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  br label %887

887:                                              ; preds = %886, %560
  %888 = load i8, ptr %17, align 1, !tbaa !11
  %889 = load ptr, ptr %7, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.progress_wheel_t, ptr %889, i32 0, i32 0
  %891 = getelementptr inbounds %struct.anon, ptr %890, i32 0, i32 8
  store i8 %888, ptr %891, align 8, !tbaa !51
  br label %893

892:                                              ; preds = %550
  store i8 3, ptr %18, align 1, !tbaa !11
  br label %893

893:                                              ; preds = %892, %887
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #7
  br label %894

894:                                              ; preds = %893, %495, %483
  br label %895

895:                                              ; preds = %894, %479
  %896 = load i8, ptr %18, align 1, !tbaa !11
  %897 = zext i8 %896 to i32
  %898 = icmp eq i32 3, %897
  br i1 %898, label %899, label %911

899:                                              ; preds = %895
  %900 = load ptr, ptr %7, align 8, !tbaa !5
  %901 = getelementptr inbounds %struct.progress_wheel_t, ptr %900, i32 0, i32 0
  %902 = getelementptr inbounds %struct.anon, ptr %901, i32 0, i32 5
  %903 = getelementptr inbounds %struct.arm_2d_helper_dirty_region_transform_t, ptr %902, i32 0, i32 4
  call void @arm_2d_helper_dirty_region_item_set_extra_region(ptr noundef %903, ptr noundef %37, ptr noundef %42, ptr noundef null)
  %904 = load ptr, ptr %7, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.progress_wheel_t, ptr %904, i32 0, i32 0
  %906 = getelementptr inbounds %struct.anon, ptr %905, i32 0, i32 6
  call void @arm_2d_dynamic_dirty_region_update(ptr noundef %906, ptr noundef %37, ptr noundef %42, i8 noundef zeroext 1)
  %907 = load i8, ptr %17, align 1, !tbaa !11
  %908 = load ptr, ptr %7, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.progress_wheel_t, ptr %908, i32 0, i32 0
  %910 = getelementptr inbounds %struct.anon, ptr %909, i32 0, i32 8
  store i8 %907, ptr %910, align 8, !tbaa !51
  br label %911

911:                                              ; preds = %899, %895
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %61, ptr align 2 %42, i64 8, i1 false), !tbaa.struct !36
  %912 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %913 = getelementptr inbounds %struct.arm_2d_size_t, ptr %912, i32 0, i32 0
  %914 = load i16, ptr %913, align 2, !tbaa !11
  %915 = sext i16 %914 to i32
  %916 = add nsw i32 %915, 1
  %917 = ashr i32 %916, 1
  %918 = trunc i32 %917 to i16
  %919 = getelementptr inbounds %struct.arm_2d_region_t, ptr %61, i32 0, i32 1
  %920 = getelementptr inbounds %struct.arm_2d_size_t, ptr %919, i32 0, i32 0
  store i16 %918, ptr %920, align 2, !tbaa !11
  %921 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %922 = getelementptr inbounds %struct.arm_2d_size_t, ptr %921, i32 0, i32 1
  %923 = load i16, ptr %922, align 2, !tbaa !11
  %924 = sext i16 %923 to i32
  %925 = add nsw i32 %924, 1
  %926 = ashr i32 %925, 1
  %927 = trunc i32 %926 to i16
  %928 = getelementptr inbounds %struct.arm_2d_region_t, ptr %61, i32 0, i32 1
  %929 = getelementptr inbounds %struct.arm_2d_size_t, ptr %928, i32 0, i32 1
  store i16 %927, ptr %929, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #7
  %930 = getelementptr inbounds %struct.arm_2d_location_t, ptr %62, i32 0, i32 0
  %931 = load ptr, ptr %15, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %931, i32 0, i32 1
  %933 = getelementptr inbounds %struct.arm_2d_region_t, ptr %932, i32 0, i32 1
  %934 = getelementptr inbounds %struct.arm_2d_size_t, ptr %933, i32 0, i32 0
  %935 = load i16, ptr %934, align 4, !tbaa !11
  %936 = sext i16 %935 to i32
  %937 = sub nsw i32 %936, 1
  %938 = load i8, ptr %13, align 1, !tbaa !12, !range !27, !noundef !28
  %939 = trunc i8 %938 to i1
  %940 = xor i1 %939, true
  %941 = zext i1 %940 to i32
  %942 = sub nsw i32 %937, %941
  %943 = trunc i32 %942 to i16
  store i16 %943, ptr %930, align 2, !tbaa !48
  %944 = getelementptr inbounds %struct.arm_2d_location_t, ptr %62, i32 0, i32 1
  %945 = load ptr, ptr %15, align 8, !tbaa !5
  %946 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %945, i32 0, i32 1
  %947 = getelementptr inbounds %struct.arm_2d_region_t, ptr %946, i32 0, i32 1
  %948 = getelementptr inbounds %struct.arm_2d_size_t, ptr %947, i32 0, i32 1
  %949 = load i16, ptr %948, align 2, !tbaa !11
  %950 = sext i16 %949 to i32
  %951 = sub nsw i32 %950, 1
  %952 = load i8, ptr %13, align 1, !tbaa !12, !range !27, !noundef !28
  %953 = trunc i8 %952 to i1
  %954 = xor i1 %953, true
  %955 = zext i1 %954 to i32
  %956 = sub nsw i32 %951, %955
  %957 = trunc i32 %956 to i16
  store i16 %957, ptr %944, align 2, !tbaa !50
  %958 = load ptr, ptr %7, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.progress_wheel_t, ptr %958, i32 0, i32 0
  %960 = getelementptr inbounds %struct.anon, ptr %959, i32 0, i32 10
  %961 = load i16, ptr %960, align 4, !tbaa !31
  %962 = sext i16 %961 to i32
  %963 = icmp sge i32 %962, 900
  br i1 %963, label %964, label %1119

964:                                              ; preds = %911
  %965 = load ptr, ptr %7, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.progress_wheel_t, ptr %965, i32 0, i32 0
  %967 = getelementptr inbounds %struct.anon, ptr %966, i32 0, i32 10
  %968 = load i16, ptr %967, align 4, !tbaa !31
  %969 = sext i16 %968 to i32
  %970 = icmp eq i32 %969, 900
  br i1 %970, label %971, label %972

971:                                              ; preds = %964
  store i8 1, ptr %14, align 1, !tbaa !12
  br label %972

972:                                              ; preds = %971, %964
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %63, ptr align 2 %61, i64 8, i1 false), !tbaa.struct !36
  %973 = load ptr, ptr %7, align 8, !tbaa !5
  %974 = getelementptr inbounds %struct.progress_wheel_t, ptr %973, i32 0, i32 0
  %975 = getelementptr inbounds %struct.anon, ptr %974, i32 0, i32 0
  %976 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %975, i32 0, i32 6
  %977 = load i32, ptr %976, align 8
  %978 = lshr i32 %977, 2
  %979 = and i32 %978, 3
  switch i32 %979, label %980 [
    i32 0, label %981
    i32 1, label %994
    i32 2, label %1019
    i32 3, label %1032
  ]

980:                                              ; preds = %972
  br label %981

981:                                              ; preds = %980, %972
  %982 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %983 = getelementptr inbounds %struct.arm_2d_size_t, ptr %982, i32 0, i32 0
  %984 = load i16, ptr %983, align 2, !tbaa !11
  %985 = sext i16 %984 to i32
  %986 = add nsw i32 %985, 1
  %987 = ashr i32 %986, 1
  %988 = getelementptr inbounds %struct.arm_2d_region_t, ptr %63, i32 0, i32 0
  %989 = getelementptr inbounds %struct.arm_2d_location_t, ptr %988, i32 0, i32 0
  %990 = load i16, ptr %989, align 2, !tbaa !11
  %991 = sext i16 %990 to i32
  %992 = add nsw i32 %991, %987
  %993 = trunc i32 %992 to i16
  store i16 %993, ptr %989, align 2, !tbaa !11
  br label %1032

994:                                              ; preds = %972
  %995 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %996 = getelementptr inbounds %struct.arm_2d_size_t, ptr %995, i32 0, i32 0
  %997 = load i16, ptr %996, align 2, !tbaa !11
  %998 = sext i16 %997 to i32
  %999 = add nsw i32 %998, 1
  %1000 = ashr i32 %999, 1
  %1001 = getelementptr inbounds %struct.arm_2d_region_t, ptr %63, i32 0, i32 0
  %1002 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1001, i32 0, i32 0
  %1003 = load i16, ptr %1002, align 2, !tbaa !11
  %1004 = sext i16 %1003 to i32
  %1005 = add nsw i32 %1004, %1000
  %1006 = trunc i32 %1005 to i16
  store i16 %1006, ptr %1002, align 2, !tbaa !11
  %1007 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1008 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1007, i32 0, i32 1
  %1009 = load i16, ptr %1008, align 2, !tbaa !11
  %1010 = sext i16 %1009 to i32
  %1011 = add nsw i32 %1010, 1
  %1012 = ashr i32 %1011, 1
  %1013 = getelementptr inbounds %struct.arm_2d_region_t, ptr %63, i32 0, i32 0
  %1014 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1013, i32 0, i32 1
  %1015 = load i16, ptr %1014, align 2, !tbaa !11
  %1016 = sext i16 %1015 to i32
  %1017 = add nsw i32 %1016, %1012
  %1018 = trunc i32 %1017 to i16
  store i16 %1018, ptr %1014, align 2, !tbaa !11
  br label %1032

1019:                                             ; preds = %972
  %1020 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1021 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1020, i32 0, i32 1
  %1022 = load i16, ptr %1021, align 2, !tbaa !11
  %1023 = sext i16 %1022 to i32
  %1024 = add nsw i32 %1023, 1
  %1025 = ashr i32 %1024, 1
  %1026 = getelementptr inbounds %struct.arm_2d_region_t, ptr %63, i32 0, i32 0
  %1027 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1026, i32 0, i32 1
  %1028 = load i16, ptr %1027, align 2, !tbaa !11
  %1029 = sext i16 %1028 to i32
  %1030 = add nsw i32 %1029, %1025
  %1031 = trunc i32 %1030 to i16
  store i16 %1031, ptr %1027, align 2, !tbaa !11
  br label %1032

1032:                                             ; preds = %1019, %994, %981, %972
  %1033 = load i8, ptr %13, align 1, !tbaa !12, !range !27, !noundef !28
  %1034 = trunc i8 %1033 to i1
  br i1 %1034, label %1035, label %1073

1035:                                             ; preds = %1032
  %1036 = load ptr, ptr %7, align 8, !tbaa !5
  %1037 = getelementptr inbounds %struct.progress_wheel_t, ptr %1036, i32 0, i32 0
  %1038 = getelementptr inbounds %struct.anon, ptr %1037, i32 0, i32 0
  %1039 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1038, i32 0, i32 6
  %1040 = load i32, ptr %1039, align 8
  %1041 = lshr i32 %1040, 2
  %1042 = and i32 %1041, 3
  switch i32 %1042, label %1043 [
    i32 0, label %1044
    i32 1, label %1051
    i32 2, label %1058
    i32 3, label %1065
  ]

1043:                                             ; preds = %1035
  br label %1044

1044:                                             ; preds = %1043, %1035
  %1045 = load ptr, ptr %15, align 8, !tbaa !5
  %1046 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1046, ptr %64, align 2, !tbaa !11
  %1047 = load i8, ptr %11, align 1, !tbaa !11
  %1048 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %64, i32 0, i32 0
  %1049 = load i16, ptr %1048, align 2
  %1050 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %63, ptr noundef %1045, i16 %1049, i8 noundef zeroext %1047)
  br label %1072

1051:                                             ; preds = %1035
  %1052 = load ptr, ptr %15, align 8, !tbaa !5
  %1053 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1053, ptr %65, align 2, !tbaa !11
  %1054 = load i8, ptr %11, align 1, !tbaa !11
  %1055 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %65, i32 0, i32 0
  %1056 = load i16, ptr %1055, align 2
  %1057 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %63, ptr noundef %1052, i16 %1056, i8 noundef zeroext %1054)
  br label %1072

1058:                                             ; preds = %1035
  %1059 = load ptr, ptr %15, align 8, !tbaa !5
  %1060 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1060, ptr %66, align 2, !tbaa !11
  %1061 = load i8, ptr %11, align 1, !tbaa !11
  %1062 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %66, i32 0, i32 0
  %1063 = load i16, ptr %1062, align 2
  %1064 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %63, ptr noundef %1059, i16 %1063, i8 noundef zeroext %1061)
  br label %1072

1065:                                             ; preds = %1035
  %1066 = load ptr, ptr %15, align 8, !tbaa !5
  %1067 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1067, ptr %67, align 2, !tbaa !11
  %1068 = load i8, ptr %11, align 1, !tbaa !11
  %1069 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %67, i32 0, i32 0
  %1070 = load i16, ptr %1069, align 2
  %1071 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %63, ptr noundef %1066, i16 %1070, i8 noundef zeroext %1068)
  br label %1072

1072:                                             ; preds = %1065, %1058, %1051, %1044
  br label %1115

1073:                                             ; preds = %1032
  %1074 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1075 = trunc i8 %1074 to i1
  br i1 %1075, label %1076, label %1103

1076:                                             ; preds = %1073
  %1077 = load ptr, ptr %7, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.progress_wheel_t, ptr %1077, i32 0, i32 0
  %1079 = getelementptr inbounds %struct.anon, ptr %1078, i32 0, i32 4
  %1080 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1079, i64 0, i64 3
  %1081 = load ptr, ptr %15, align 8, !tbaa !5
  %1082 = load ptr, ptr %7, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.progress_wheel_t, ptr %1082, i32 0, i32 0
  %1084 = getelementptr inbounds %struct.anon, ptr %1083, i32 0, i32 0
  %1085 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1084, i32 0, i32 6
  %1086 = load i32, ptr %1085, align 8
  %1087 = lshr i32 %1086, 2
  %1088 = and i32 %1087, 3
  %1089 = add nsw i32 1, %1088
  %1090 = sitofp i32 %1089 to float
  %1091 = fmul float %1090, 9.000000e+01
  %1092 = fmul float %1091, 0x400921FB40000000
  %1093 = fdiv float %1092, 1.800000e+02
  %1094 = load ptr, ptr %7, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.progress_wheel_t, ptr %1094, i32 0, i32 0
  %1096 = getelementptr inbounds %struct.anon, ptr %1095, i32 0, i32 2
  %1097 = load float, ptr %1096, align 8, !tbaa !14
  %1098 = load i16, ptr %16, align 2, !tbaa !9
  %1099 = zext i16 %1098 to i64
  %1100 = load i8, ptr %11, align 1, !tbaa !11
  %1101 = load i32, ptr %62, align 2
  %1102 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef %1080, ptr noundef %1081, i32 %1101, float noundef %1093, float noundef %1097, i64 noundef %1099, i8 noundef zeroext %1100)
  br label %1103

1103:                                             ; preds = %1076, %1073
  %1104 = load ptr, ptr %7, align 8, !tbaa !5
  %1105 = getelementptr inbounds %struct.progress_wheel_t, ptr %1104, i32 0, i32 0
  %1106 = getelementptr inbounds %struct.anon, ptr %1105, i32 0, i32 4
  %1107 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1106, i64 0, i64 3
  %1108 = call i32 @arm_2dp_tile_transform(ptr noundef %1107, ptr noundef %37, ptr noundef %63, ptr noundef %46)
  store i32 %1108, ptr %68, align 4, !tbaa !54
  %1109 = load i32, ptr %68, align 4, !tbaa !54
  %1110 = load ptr, ptr %7, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.progress_wheel_t, ptr %1110, i32 0, i32 0
  %1112 = getelementptr inbounds %struct.anon, ptr %1111, i32 0, i32 4
  %1113 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1112, i64 0, i64 3
  %1114 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef %1113)
  br label %1115

1115:                                             ; preds = %1103, %1072
  br label %1116

1116:                                             ; preds = %1117, %1115
  br i1 false, label %1117, label %1118

1117:                                             ; preds = %1116
  br label %1116

1118:                                             ; preds = %1116
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  br label %1119

1119:                                             ; preds = %1118, %911
  %1120 = load ptr, ptr %7, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct.progress_wheel_t, ptr %1120, i32 0, i32 0
  %1122 = getelementptr inbounds %struct.anon, ptr %1121, i32 0, i32 10
  %1123 = load i16, ptr %1122, align 4, !tbaa !31
  %1124 = sext i16 %1123 to i32
  %1125 = icmp sge i32 %1124, 1800
  br i1 %1125, label %1126, label %1278

1126:                                             ; preds = %1119
  %1127 = load ptr, ptr %7, align 8, !tbaa !5
  %1128 = getelementptr inbounds %struct.progress_wheel_t, ptr %1127, i32 0, i32 0
  %1129 = getelementptr inbounds %struct.anon, ptr %1128, i32 0, i32 10
  %1130 = load i16, ptr %1129, align 4, !tbaa !31
  %1131 = sext i16 %1130 to i32
  %1132 = icmp eq i32 %1131, 1800
  br i1 %1132, label %1133, label %1134

1133:                                             ; preds = %1126
  store i8 1, ptr %14, align 1, !tbaa !12
  br label %1134

1134:                                             ; preds = %1133, %1126
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %69, ptr align 2 %61, i64 8, i1 false), !tbaa.struct !36
  %1135 = load ptr, ptr %7, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.progress_wheel_t, ptr %1135, i32 0, i32 0
  %1137 = getelementptr inbounds %struct.anon, ptr %1136, i32 0, i32 0
  %1138 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1137, i32 0, i32 6
  %1139 = load i32, ptr %1138, align 8
  %1140 = lshr i32 %1139, 2
  %1141 = and i32 %1140, 3
  switch i32 %1141, label %1142 [
    i32 0, label %1143
    i32 1, label %1168
    i32 2, label %1194
    i32 3, label %1181
  ]

1142:                                             ; preds = %1134
  br label %1143

1143:                                             ; preds = %1142, %1134
  %1144 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1145 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1144, i32 0, i32 0
  %1146 = load i16, ptr %1145, align 2, !tbaa !11
  %1147 = sext i16 %1146 to i32
  %1148 = add nsw i32 %1147, 1
  %1149 = ashr i32 %1148, 1
  %1150 = getelementptr inbounds %struct.arm_2d_region_t, ptr %69, i32 0, i32 0
  %1151 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1150, i32 0, i32 0
  %1152 = load i16, ptr %1151, align 2, !tbaa !11
  %1153 = sext i16 %1152 to i32
  %1154 = add nsw i32 %1153, %1149
  %1155 = trunc i32 %1154 to i16
  store i16 %1155, ptr %1151, align 2, !tbaa !11
  %1156 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1157 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1156, i32 0, i32 1
  %1158 = load i16, ptr %1157, align 2, !tbaa !11
  %1159 = sext i16 %1158 to i32
  %1160 = add nsw i32 %1159, 1
  %1161 = ashr i32 %1160, 1
  %1162 = getelementptr inbounds %struct.arm_2d_region_t, ptr %69, i32 0, i32 0
  %1163 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1162, i32 0, i32 1
  %1164 = load i16, ptr %1163, align 2, !tbaa !11
  %1165 = sext i16 %1164 to i32
  %1166 = add nsw i32 %1165, %1161
  %1167 = trunc i32 %1166 to i16
  store i16 %1167, ptr %1163, align 2, !tbaa !11
  br label %1194

1168:                                             ; preds = %1134
  %1169 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1170 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1169, i32 0, i32 1
  %1171 = load i16, ptr %1170, align 2, !tbaa !11
  %1172 = sext i16 %1171 to i32
  %1173 = add nsw i32 %1172, 1
  %1174 = ashr i32 %1173, 1
  %1175 = getelementptr inbounds %struct.arm_2d_region_t, ptr %69, i32 0, i32 0
  %1176 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1175, i32 0, i32 1
  %1177 = load i16, ptr %1176, align 2, !tbaa !11
  %1178 = sext i16 %1177 to i32
  %1179 = add nsw i32 %1178, %1174
  %1180 = trunc i32 %1179 to i16
  store i16 %1180, ptr %1176, align 2, !tbaa !11
  br label %1194

1181:                                             ; preds = %1134
  %1182 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1183 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1182, i32 0, i32 0
  %1184 = load i16, ptr %1183, align 2, !tbaa !11
  %1185 = sext i16 %1184 to i32
  %1186 = add nsw i32 %1185, 1
  %1187 = ashr i32 %1186, 1
  %1188 = getelementptr inbounds %struct.arm_2d_region_t, ptr %69, i32 0, i32 0
  %1189 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1188, i32 0, i32 0
  %1190 = load i16, ptr %1189, align 2, !tbaa !11
  %1191 = sext i16 %1190 to i32
  %1192 = add nsw i32 %1191, %1187
  %1193 = trunc i32 %1192 to i16
  store i16 %1193, ptr %1189, align 2, !tbaa !11
  br label %1194

1194:                                             ; preds = %1181, %1168, %1143, %1134
  %1195 = load i8, ptr %13, align 1, !tbaa !12, !range !27, !noundef !28
  %1196 = trunc i8 %1195 to i1
  br i1 %1196, label %1197, label %1235

1197:                                             ; preds = %1194
  %1198 = load ptr, ptr %7, align 8, !tbaa !5
  %1199 = getelementptr inbounds %struct.progress_wheel_t, ptr %1198, i32 0, i32 0
  %1200 = getelementptr inbounds %struct.anon, ptr %1199, i32 0, i32 0
  %1201 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1200, i32 0, i32 6
  %1202 = load i32, ptr %1201, align 8
  %1203 = lshr i32 %1202, 2
  %1204 = and i32 %1203, 3
  switch i32 %1204, label %1205 [
    i32 0, label %1206
    i32 1, label %1213
    i32 2, label %1220
    i32 3, label %1227
  ]

1205:                                             ; preds = %1197
  br label %1206

1206:                                             ; preds = %1205, %1197
  %1207 = load ptr, ptr %15, align 8, !tbaa !5
  %1208 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1208, ptr %70, align 2, !tbaa !11
  %1209 = load i8, ptr %11, align 1, !tbaa !11
  %1210 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %70, i32 0, i32 0
  %1211 = load i16, ptr %1210, align 2
  %1212 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %69, ptr noundef %1207, i16 %1211, i8 noundef zeroext %1209)
  br label %1234

1213:                                             ; preds = %1197
  %1214 = load ptr, ptr %15, align 8, !tbaa !5
  %1215 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1215, ptr %71, align 2, !tbaa !11
  %1216 = load i8, ptr %11, align 1, !tbaa !11
  %1217 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %71, i32 0, i32 0
  %1218 = load i16, ptr %1217, align 2
  %1219 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %69, ptr noundef %1214, i16 %1218, i8 noundef zeroext %1216)
  br label %1234

1220:                                             ; preds = %1197
  %1221 = load ptr, ptr %15, align 8, !tbaa !5
  %1222 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1222, ptr %72, align 2, !tbaa !11
  %1223 = load i8, ptr %11, align 1, !tbaa !11
  %1224 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %72, i32 0, i32 0
  %1225 = load i16, ptr %1224, align 2
  %1226 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %69, ptr noundef %1221, i16 %1225, i8 noundef zeroext %1223)
  br label %1234

1227:                                             ; preds = %1197
  %1228 = load ptr, ptr %15, align 8, !tbaa !5
  %1229 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1229, ptr %73, align 2, !tbaa !11
  %1230 = load i8, ptr %11, align 1, !tbaa !11
  %1231 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %73, i32 0, i32 0
  %1232 = load i16, ptr %1231, align 2
  %1233 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %69, ptr noundef %1228, i16 %1232, i8 noundef zeroext %1230)
  br label %1234

1234:                                             ; preds = %1227, %1220, %1213, %1206
  br label %1277

1235:                                             ; preds = %1194
  %1236 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1237 = trunc i8 %1236 to i1
  br i1 %1237, label %1238, label %1265

1238:                                             ; preds = %1235
  %1239 = load ptr, ptr %7, align 8, !tbaa !5
  %1240 = getelementptr inbounds %struct.progress_wheel_t, ptr %1239, i32 0, i32 0
  %1241 = getelementptr inbounds %struct.anon, ptr %1240, i32 0, i32 4
  %1242 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1241, i64 0, i64 1
  %1243 = load ptr, ptr %15, align 8, !tbaa !5
  %1244 = load ptr, ptr %7, align 8, !tbaa !5
  %1245 = getelementptr inbounds %struct.progress_wheel_t, ptr %1244, i32 0, i32 0
  %1246 = getelementptr inbounds %struct.anon, ptr %1245, i32 0, i32 0
  %1247 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1246, i32 0, i32 6
  %1248 = load i32, ptr %1247, align 8
  %1249 = lshr i32 %1248, 2
  %1250 = and i32 %1249, 3
  %1251 = add nsw i32 2, %1250
  %1252 = sitofp i32 %1251 to float
  %1253 = fmul float %1252, 9.000000e+01
  %1254 = fmul float %1253, 0x400921FB40000000
  %1255 = fdiv float %1254, 1.800000e+02
  %1256 = load ptr, ptr %7, align 8, !tbaa !5
  %1257 = getelementptr inbounds %struct.progress_wheel_t, ptr %1256, i32 0, i32 0
  %1258 = getelementptr inbounds %struct.anon, ptr %1257, i32 0, i32 2
  %1259 = load float, ptr %1258, align 8, !tbaa !14
  %1260 = load i16, ptr %16, align 2, !tbaa !9
  %1261 = zext i16 %1260 to i64
  %1262 = load i8, ptr %11, align 1, !tbaa !11
  %1263 = load i32, ptr %62, align 2
  %1264 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef %1242, ptr noundef %1243, i32 %1263, float noundef %1255, float noundef %1259, i64 noundef %1261, i8 noundef zeroext %1262)
  br label %1265

1265:                                             ; preds = %1238, %1235
  %1266 = load ptr, ptr %7, align 8, !tbaa !5
  %1267 = getelementptr inbounds %struct.progress_wheel_t, ptr %1266, i32 0, i32 0
  %1268 = getelementptr inbounds %struct.anon, ptr %1267, i32 0, i32 4
  %1269 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1268, i64 0, i64 1
  %1270 = call i32 @arm_2dp_tile_transform(ptr noundef %1269, ptr noundef %37, ptr noundef %69, ptr noundef %46)
  store i32 %1270, ptr %74, align 4, !tbaa !54
  %1271 = load i32, ptr %74, align 4, !tbaa !54
  %1272 = load ptr, ptr %7, align 8, !tbaa !5
  %1273 = getelementptr inbounds %struct.progress_wheel_t, ptr %1272, i32 0, i32 0
  %1274 = getelementptr inbounds %struct.anon, ptr %1273, i32 0, i32 4
  %1275 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1274, i64 0, i64 1
  %1276 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef %1275)
  br label %1277

1277:                                             ; preds = %1265, %1234
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #7
  br label %1278

1278:                                             ; preds = %1277, %1119
  %1279 = load ptr, ptr %7, align 8, !tbaa !5
  %1280 = getelementptr inbounds %struct.progress_wheel_t, ptr %1279, i32 0, i32 0
  %1281 = getelementptr inbounds %struct.anon, ptr %1280, i32 0, i32 10
  %1282 = load i16, ptr %1281, align 4, !tbaa !31
  %1283 = sext i16 %1282 to i32
  %1284 = icmp sge i32 %1283, 2700
  br i1 %1284, label %1285, label %1437

1285:                                             ; preds = %1278
  %1286 = load ptr, ptr %7, align 8, !tbaa !5
  %1287 = getelementptr inbounds %struct.progress_wheel_t, ptr %1286, i32 0, i32 0
  %1288 = getelementptr inbounds %struct.anon, ptr %1287, i32 0, i32 10
  %1289 = load i16, ptr %1288, align 4, !tbaa !31
  %1290 = sext i16 %1289 to i32
  %1291 = icmp eq i32 %1290, 2700
  br i1 %1291, label %1292, label %1293

1292:                                             ; preds = %1285
  store i8 1, ptr %14, align 1, !tbaa !12
  br label %1293

1293:                                             ; preds = %1292, %1285
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %75, ptr align 2 %61, i64 8, i1 false), !tbaa.struct !36
  %1294 = load ptr, ptr %7, align 8, !tbaa !5
  %1295 = getelementptr inbounds %struct.progress_wheel_t, ptr %1294, i32 0, i32 0
  %1296 = getelementptr inbounds %struct.anon, ptr %1295, i32 0, i32 0
  %1297 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1296, i32 0, i32 6
  %1298 = load i32, ptr %1297, align 8
  %1299 = lshr i32 %1298, 2
  %1300 = and i32 %1299, 3
  switch i32 %1300, label %1301 [
    i32 0, label %1302
    i32 1, label %1353
    i32 2, label %1315
    i32 3, label %1328
  ]

1301:                                             ; preds = %1293
  br label %1302

1302:                                             ; preds = %1301, %1293
  %1303 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1304 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1303, i32 0, i32 1
  %1305 = load i16, ptr %1304, align 2, !tbaa !11
  %1306 = sext i16 %1305 to i32
  %1307 = add nsw i32 %1306, 1
  %1308 = ashr i32 %1307, 1
  %1309 = getelementptr inbounds %struct.arm_2d_region_t, ptr %75, i32 0, i32 0
  %1310 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1309, i32 0, i32 1
  %1311 = load i16, ptr %1310, align 2, !tbaa !11
  %1312 = sext i16 %1311 to i32
  %1313 = add nsw i32 %1312, %1308
  %1314 = trunc i32 %1313 to i16
  store i16 %1314, ptr %1310, align 2, !tbaa !11
  br label %1353

1315:                                             ; preds = %1293
  %1316 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1317 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1316, i32 0, i32 0
  %1318 = load i16, ptr %1317, align 2, !tbaa !11
  %1319 = sext i16 %1318 to i32
  %1320 = add nsw i32 %1319, 1
  %1321 = ashr i32 %1320, 1
  %1322 = getelementptr inbounds %struct.arm_2d_region_t, ptr %75, i32 0, i32 0
  %1323 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1322, i32 0, i32 0
  %1324 = load i16, ptr %1323, align 2, !tbaa !11
  %1325 = sext i16 %1324 to i32
  %1326 = add nsw i32 %1325, %1321
  %1327 = trunc i32 %1326 to i16
  store i16 %1327, ptr %1323, align 2, !tbaa !11
  br label %1353

1328:                                             ; preds = %1293
  %1329 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1330 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1329, i32 0, i32 0
  %1331 = load i16, ptr %1330, align 2, !tbaa !11
  %1332 = sext i16 %1331 to i32
  %1333 = add nsw i32 %1332, 1
  %1334 = ashr i32 %1333, 1
  %1335 = getelementptr inbounds %struct.arm_2d_region_t, ptr %75, i32 0, i32 0
  %1336 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1335, i32 0, i32 0
  %1337 = load i16, ptr %1336, align 2, !tbaa !11
  %1338 = sext i16 %1337 to i32
  %1339 = add nsw i32 %1338, %1334
  %1340 = trunc i32 %1339 to i16
  store i16 %1340, ptr %1336, align 2, !tbaa !11
  %1341 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1342 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1341, i32 0, i32 1
  %1343 = load i16, ptr %1342, align 2, !tbaa !11
  %1344 = sext i16 %1343 to i32
  %1345 = add nsw i32 %1344, 1
  %1346 = ashr i32 %1345, 1
  %1347 = getelementptr inbounds %struct.arm_2d_region_t, ptr %75, i32 0, i32 0
  %1348 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1347, i32 0, i32 1
  %1349 = load i16, ptr %1348, align 2, !tbaa !11
  %1350 = sext i16 %1349 to i32
  %1351 = add nsw i32 %1350, %1346
  %1352 = trunc i32 %1351 to i16
  store i16 %1352, ptr %1348, align 2, !tbaa !11
  br label %1353

1353:                                             ; preds = %1328, %1315, %1302, %1293
  %1354 = load i8, ptr %13, align 1, !tbaa !12, !range !27, !noundef !28
  %1355 = trunc i8 %1354 to i1
  br i1 %1355, label %1356, label %1394

1356:                                             ; preds = %1353
  %1357 = load ptr, ptr %7, align 8, !tbaa !5
  %1358 = getelementptr inbounds %struct.progress_wheel_t, ptr %1357, i32 0, i32 0
  %1359 = getelementptr inbounds %struct.anon, ptr %1358, i32 0, i32 0
  %1360 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1359, i32 0, i32 6
  %1361 = load i32, ptr %1360, align 8
  %1362 = lshr i32 %1361, 2
  %1363 = and i32 %1362, 3
  switch i32 %1363, label %1364 [
    i32 0, label %1365
    i32 1, label %1372
    i32 2, label %1379
    i32 3, label %1386
  ]

1364:                                             ; preds = %1356
  br label %1365

1365:                                             ; preds = %1364, %1356
  %1366 = load ptr, ptr %15, align 8, !tbaa !5
  %1367 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1367, ptr %76, align 2, !tbaa !11
  %1368 = load i8, ptr %11, align 1, !tbaa !11
  %1369 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %76, i32 0, i32 0
  %1370 = load i16, ptr %1369, align 2
  %1371 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %75, ptr noundef %1366, i16 %1370, i8 noundef zeroext %1368)
  br label %1393

1372:                                             ; preds = %1356
  %1373 = load ptr, ptr %15, align 8, !tbaa !5
  %1374 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1374, ptr %77, align 2, !tbaa !11
  %1375 = load i8, ptr %11, align 1, !tbaa !11
  %1376 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %77, i32 0, i32 0
  %1377 = load i16, ptr %1376, align 2
  %1378 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %75, ptr noundef %1373, i16 %1377, i8 noundef zeroext %1375)
  br label %1393

1379:                                             ; preds = %1356
  %1380 = load ptr, ptr %15, align 8, !tbaa !5
  %1381 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1381, ptr %78, align 2, !tbaa !11
  %1382 = load i8, ptr %11, align 1, !tbaa !11
  %1383 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %78, i32 0, i32 0
  %1384 = load i16, ptr %1383, align 2
  %1385 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %75, ptr noundef %1380, i16 %1384, i8 noundef zeroext %1382)
  br label %1393

1386:                                             ; preds = %1356
  %1387 = load ptr, ptr %15, align 8, !tbaa !5
  %1388 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1388, ptr %79, align 2, !tbaa !11
  %1389 = load i8, ptr %11, align 1, !tbaa !11
  %1390 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %79, i32 0, i32 0
  %1391 = load i16, ptr %1390, align 2
  %1392 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %75, ptr noundef %1387, i16 %1391, i8 noundef zeroext %1389)
  br label %1393

1393:                                             ; preds = %1386, %1379, %1372, %1365
  br label %1436

1394:                                             ; preds = %1353
  %1395 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1396 = trunc i8 %1395 to i1
  br i1 %1396, label %1397, label %1424

1397:                                             ; preds = %1394
  %1398 = load ptr, ptr %7, align 8, !tbaa !5
  %1399 = getelementptr inbounds %struct.progress_wheel_t, ptr %1398, i32 0, i32 0
  %1400 = getelementptr inbounds %struct.anon, ptr %1399, i32 0, i32 4
  %1401 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1400, i64 0, i64 2
  %1402 = load ptr, ptr %15, align 8, !tbaa !5
  %1403 = load ptr, ptr %7, align 8, !tbaa !5
  %1404 = getelementptr inbounds %struct.progress_wheel_t, ptr %1403, i32 0, i32 0
  %1405 = getelementptr inbounds %struct.anon, ptr %1404, i32 0, i32 0
  %1406 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1405, i32 0, i32 6
  %1407 = load i32, ptr %1406, align 8
  %1408 = lshr i32 %1407, 2
  %1409 = and i32 %1408, 3
  %1410 = add nsw i32 3, %1409
  %1411 = sitofp i32 %1410 to float
  %1412 = fmul float %1411, 9.000000e+01
  %1413 = fmul float %1412, 0x400921FB40000000
  %1414 = fdiv float %1413, 1.800000e+02
  %1415 = load ptr, ptr %7, align 8, !tbaa !5
  %1416 = getelementptr inbounds %struct.progress_wheel_t, ptr %1415, i32 0, i32 0
  %1417 = getelementptr inbounds %struct.anon, ptr %1416, i32 0, i32 2
  %1418 = load float, ptr %1417, align 8, !tbaa !14
  %1419 = load i16, ptr %16, align 2, !tbaa !9
  %1420 = zext i16 %1419 to i64
  %1421 = load i8, ptr %11, align 1, !tbaa !11
  %1422 = load i32, ptr %62, align 2
  %1423 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef %1401, ptr noundef %1402, i32 %1422, float noundef %1414, float noundef %1418, i64 noundef %1420, i8 noundef zeroext %1421)
  br label %1424

1424:                                             ; preds = %1397, %1394
  %1425 = load ptr, ptr %7, align 8, !tbaa !5
  %1426 = getelementptr inbounds %struct.progress_wheel_t, ptr %1425, i32 0, i32 0
  %1427 = getelementptr inbounds %struct.anon, ptr %1426, i32 0, i32 4
  %1428 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1427, i64 0, i64 2
  %1429 = call i32 @arm_2dp_tile_transform(ptr noundef %1428, ptr noundef %37, ptr noundef %75, ptr noundef %46)
  store i32 %1429, ptr %80, align 4, !tbaa !54
  %1430 = load i32, ptr %80, align 4, !tbaa !54
  %1431 = load ptr, ptr %7, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.progress_wheel_t, ptr %1431, i32 0, i32 0
  %1433 = getelementptr inbounds %struct.anon, ptr %1432, i32 0, i32 4
  %1434 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1433, i64 0, i64 2
  %1435 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef %1434)
  br label %1436

1436:                                             ; preds = %1424, %1393
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  br label %1437

1437:                                             ; preds = %1436, %1278
  %1438 = load ptr, ptr %7, align 8, !tbaa !5
  %1439 = getelementptr inbounds %struct.progress_wheel_t, ptr %1438, i32 0, i32 0
  %1440 = getelementptr inbounds %struct.anon, ptr %1439, i32 0, i32 10
  %1441 = load i16, ptr %1440, align 4, !tbaa !31
  %1442 = sext i16 %1441 to i32
  %1443 = icmp sge i32 %1442, 3600
  br i1 %1443, label %1444, label %1588

1444:                                             ; preds = %1437
  store i8 1, ptr %14, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %81, ptr align 2 %61, i64 8, i1 false), !tbaa.struct !36
  %1445 = load ptr, ptr %7, align 8, !tbaa !5
  %1446 = getelementptr inbounds %struct.progress_wheel_t, ptr %1445, i32 0, i32 0
  %1447 = getelementptr inbounds %struct.anon, ptr %1446, i32 0, i32 0
  %1448 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1447, i32 0, i32 6
  %1449 = load i32, ptr %1448, align 8
  %1450 = lshr i32 %1449, 2
  %1451 = and i32 %1450, 3
  switch i32 %1451, label %1452 [
    i32 0, label %1504
    i32 1, label %1453
    i32 2, label %1466
    i32 3, label %1491
  ]

1452:                                             ; preds = %1444
  br label %1504

1453:                                             ; preds = %1444
  %1454 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1455 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1454, i32 0, i32 0
  %1456 = load i16, ptr %1455, align 2, !tbaa !11
  %1457 = sext i16 %1456 to i32
  %1458 = add nsw i32 %1457, 1
  %1459 = ashr i32 %1458, 1
  %1460 = getelementptr inbounds %struct.arm_2d_region_t, ptr %81, i32 0, i32 0
  %1461 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1460, i32 0, i32 0
  %1462 = load i16, ptr %1461, align 2, !tbaa !11
  %1463 = sext i16 %1462 to i32
  %1464 = add nsw i32 %1463, %1459
  %1465 = trunc i32 %1464 to i16
  store i16 %1465, ptr %1461, align 2, !tbaa !11
  br label %1504

1466:                                             ; preds = %1444
  %1467 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1468 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1467, i32 0, i32 0
  %1469 = load i16, ptr %1468, align 2, !tbaa !11
  %1470 = sext i16 %1469 to i32
  %1471 = add nsw i32 %1470, 1
  %1472 = ashr i32 %1471, 1
  %1473 = getelementptr inbounds %struct.arm_2d_region_t, ptr %81, i32 0, i32 0
  %1474 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1473, i32 0, i32 0
  %1475 = load i16, ptr %1474, align 2, !tbaa !11
  %1476 = sext i16 %1475 to i32
  %1477 = add nsw i32 %1476, %1472
  %1478 = trunc i32 %1477 to i16
  store i16 %1478, ptr %1474, align 2, !tbaa !11
  %1479 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1480 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1479, i32 0, i32 1
  %1481 = load i16, ptr %1480, align 2, !tbaa !11
  %1482 = sext i16 %1481 to i32
  %1483 = add nsw i32 %1482, 1
  %1484 = ashr i32 %1483, 1
  %1485 = getelementptr inbounds %struct.arm_2d_region_t, ptr %81, i32 0, i32 0
  %1486 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1485, i32 0, i32 1
  %1487 = load i16, ptr %1486, align 2, !tbaa !11
  %1488 = sext i16 %1487 to i32
  %1489 = add nsw i32 %1488, %1484
  %1490 = trunc i32 %1489 to i16
  store i16 %1490, ptr %1486, align 2, !tbaa !11
  br label %1504

1491:                                             ; preds = %1444
  %1492 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1493 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1492, i32 0, i32 1
  %1494 = load i16, ptr %1493, align 2, !tbaa !11
  %1495 = sext i16 %1494 to i32
  %1496 = add nsw i32 %1495, 1
  %1497 = ashr i32 %1496, 1
  %1498 = getelementptr inbounds %struct.arm_2d_region_t, ptr %81, i32 0, i32 0
  %1499 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1498, i32 0, i32 1
  %1500 = load i16, ptr %1499, align 2, !tbaa !11
  %1501 = sext i16 %1500 to i32
  %1502 = add nsw i32 %1501, %1497
  %1503 = trunc i32 %1502 to i16
  store i16 %1503, ptr %1499, align 2, !tbaa !11
  br label %1504

1504:                                             ; preds = %1491, %1466, %1453, %1452, %1444
  %1505 = load i8, ptr %13, align 1, !tbaa !12, !range !27, !noundef !28
  %1506 = trunc i8 %1505 to i1
  br i1 %1506, label %1507, label %1545

1507:                                             ; preds = %1504
  %1508 = load ptr, ptr %7, align 8, !tbaa !5
  %1509 = getelementptr inbounds %struct.progress_wheel_t, ptr %1508, i32 0, i32 0
  %1510 = getelementptr inbounds %struct.anon, ptr %1509, i32 0, i32 0
  %1511 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1510, i32 0, i32 6
  %1512 = load i32, ptr %1511, align 8
  %1513 = lshr i32 %1512, 2
  %1514 = and i32 %1513, 3
  switch i32 %1514, label %1515 [
    i32 0, label %1516
    i32 1, label %1523
    i32 2, label %1530
    i32 3, label %1537
  ]

1515:                                             ; preds = %1507
  br label %1516

1516:                                             ; preds = %1515, %1507
  %1517 = load ptr, ptr %15, align 8, !tbaa !5
  %1518 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1518, ptr %82, align 2, !tbaa !11
  %1519 = load i8, ptr %11, align 1, !tbaa !11
  %1520 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %82, i32 0, i32 0
  %1521 = load i16, ptr %1520, align 2
  %1522 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %81, ptr noundef %1517, i16 %1521, i8 noundef zeroext %1519)
  br label %1544

1523:                                             ; preds = %1507
  %1524 = load ptr, ptr %15, align 8, !tbaa !5
  %1525 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1525, ptr %83, align 2, !tbaa !11
  %1526 = load i8, ptr %11, align 1, !tbaa !11
  %1527 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %83, i32 0, i32 0
  %1528 = load i16, ptr %1527, align 2
  %1529 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %81, ptr noundef %1524, i16 %1528, i8 noundef zeroext %1526)
  br label %1544

1530:                                             ; preds = %1507
  %1531 = load ptr, ptr %15, align 8, !tbaa !5
  %1532 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1532, ptr %84, align 2, !tbaa !11
  %1533 = load i8, ptr %11, align 1, !tbaa !11
  %1534 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %84, i32 0, i32 0
  %1535 = load i16, ptr %1534, align 2
  %1536 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %81, ptr noundef %1531, i16 %1535, i8 noundef zeroext %1533)
  br label %1544

1537:                                             ; preds = %1507
  %1538 = load ptr, ptr %15, align 8, !tbaa !5
  %1539 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1539, ptr %85, align 2, !tbaa !11
  %1540 = load i8, ptr %11, align 1, !tbaa !11
  %1541 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %85, i32 0, i32 0
  %1542 = load i16, ptr %1541, align 2
  %1543 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %81, ptr noundef %1538, i16 %1542, i8 noundef zeroext %1540)
  br label %1544

1544:                                             ; preds = %1537, %1530, %1523, %1516
  br label %1587

1545:                                             ; preds = %1504
  %1546 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1547 = trunc i8 %1546 to i1
  br i1 %1547, label %1548, label %1575

1548:                                             ; preds = %1545
  %1549 = load ptr, ptr %7, align 8, !tbaa !5
  %1550 = getelementptr inbounds %struct.progress_wheel_t, ptr %1549, i32 0, i32 0
  %1551 = getelementptr inbounds %struct.anon, ptr %1550, i32 0, i32 4
  %1552 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1551, i64 0, i64 2
  %1553 = load ptr, ptr %15, align 8, !tbaa !5
  %1554 = load ptr, ptr %7, align 8, !tbaa !5
  %1555 = getelementptr inbounds %struct.progress_wheel_t, ptr %1554, i32 0, i32 0
  %1556 = getelementptr inbounds %struct.anon, ptr %1555, i32 0, i32 0
  %1557 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1556, i32 0, i32 6
  %1558 = load i32, ptr %1557, align 8
  %1559 = lshr i32 %1558, 2
  %1560 = and i32 %1559, 3
  %1561 = add nsw i32 4, %1560
  %1562 = sitofp i32 %1561 to float
  %1563 = fmul float %1562, 9.000000e+01
  %1564 = fmul float %1563, 0x400921FB40000000
  %1565 = fdiv float %1564, 1.800000e+02
  %1566 = load ptr, ptr %7, align 8, !tbaa !5
  %1567 = getelementptr inbounds %struct.progress_wheel_t, ptr %1566, i32 0, i32 0
  %1568 = getelementptr inbounds %struct.anon, ptr %1567, i32 0, i32 2
  %1569 = load float, ptr %1568, align 8, !tbaa !14
  %1570 = load i16, ptr %16, align 2, !tbaa !9
  %1571 = zext i16 %1570 to i64
  %1572 = load i8, ptr %11, align 1, !tbaa !11
  %1573 = load i32, ptr %62, align 2
  %1574 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef %1552, ptr noundef %1553, i32 %1573, float noundef %1565, float noundef %1569, i64 noundef %1571, i8 noundef zeroext %1572)
  br label %1575

1575:                                             ; preds = %1548, %1545
  %1576 = load ptr, ptr %7, align 8, !tbaa !5
  %1577 = getelementptr inbounds %struct.progress_wheel_t, ptr %1576, i32 0, i32 0
  %1578 = getelementptr inbounds %struct.anon, ptr %1577, i32 0, i32 4
  %1579 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1578, i64 0, i64 2
  %1580 = call i32 @arm_2dp_tile_transform(ptr noundef %1579, ptr noundef %37, ptr noundef %81, ptr noundef %46)
  store i32 %1580, ptr %86, align 4, !tbaa !54
  %1581 = load i32, ptr %86, align 4, !tbaa !54
  %1582 = load ptr, ptr %7, align 8, !tbaa !5
  %1583 = getelementptr inbounds %struct.progress_wheel_t, ptr %1582, i32 0, i32 0
  %1584 = getelementptr inbounds %struct.anon, ptr %1583, i32 0, i32 4
  %1585 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1584, i64 0, i64 2
  %1586 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef %1585)
  br label %1587

1587:                                             ; preds = %1575, %1544
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  br label %1588

1588:                                             ; preds = %1587, %1437
  br label %1589

1589:                                             ; preds = %1588
  %1590 = load i8, ptr %14, align 1, !tbaa !12, !range !27, !noundef !28
  %1591 = trunc i8 %1590 to i1
  br i1 %1591, label %1592, label %1593

1592:                                             ; preds = %1589
  br label %1704

1593:                                             ; preds = %1589
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %87, ptr align 2 %61, i64 8, i1 false), !tbaa.struct !36
  %1594 = load ptr, ptr %7, align 8, !tbaa !5
  %1595 = getelementptr inbounds %struct.progress_wheel_t, ptr %1594, i32 0, i32 0
  %1596 = getelementptr inbounds %struct.anon, ptr %1595, i32 0, i32 3
  %1597 = load float, ptr %1596, align 4, !tbaa !55
  %1598 = fcmp olt float %1597, 0x3FF921FB40000000
  br i1 %1598, label %1599, label %1612

1599:                                             ; preds = %1593
  %1600 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1601 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1600, i32 0, i32 0
  %1602 = load i16, ptr %1601, align 2, !tbaa !11
  %1603 = sext i16 %1602 to i32
  %1604 = add nsw i32 %1603, 1
  %1605 = ashr i32 %1604, 1
  %1606 = getelementptr inbounds %struct.arm_2d_region_t, ptr %87, i32 0, i32 0
  %1607 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1606, i32 0, i32 0
  %1608 = load i16, ptr %1607, align 2, !tbaa !11
  %1609 = sext i16 %1608 to i32
  %1610 = add nsw i32 %1609, %1605
  %1611 = trunc i32 %1610 to i16
  store i16 %1611, ptr %1607, align 2, !tbaa !11
  br label %1664

1612:                                             ; preds = %1593
  %1613 = load ptr, ptr %7, align 8, !tbaa !5
  %1614 = getelementptr inbounds %struct.progress_wheel_t, ptr %1613, i32 0, i32 0
  %1615 = getelementptr inbounds %struct.anon, ptr %1614, i32 0, i32 3
  %1616 = load float, ptr %1615, align 4, !tbaa !55
  %1617 = fcmp olt float %1616, 0x400921FB40000000
  br i1 %1617, label %1618, label %1643

1618:                                             ; preds = %1612
  %1619 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1620 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1619, i32 0, i32 1
  %1621 = load i16, ptr %1620, align 2, !tbaa !11
  %1622 = sext i16 %1621 to i32
  %1623 = add nsw i32 %1622, 1
  %1624 = ashr i32 %1623, 1
  %1625 = getelementptr inbounds %struct.arm_2d_region_t, ptr %87, i32 0, i32 0
  %1626 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1625, i32 0, i32 1
  %1627 = load i16, ptr %1626, align 2, !tbaa !11
  %1628 = sext i16 %1627 to i32
  %1629 = add nsw i32 %1628, %1624
  %1630 = trunc i32 %1629 to i16
  store i16 %1630, ptr %1626, align 2, !tbaa !11
  %1631 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1632 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1631, i32 0, i32 0
  %1633 = load i16, ptr %1632, align 2, !tbaa !11
  %1634 = sext i16 %1633 to i32
  %1635 = add nsw i32 %1634, 1
  %1636 = ashr i32 %1635, 1
  %1637 = getelementptr inbounds %struct.arm_2d_region_t, ptr %87, i32 0, i32 0
  %1638 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1637, i32 0, i32 0
  %1639 = load i16, ptr %1638, align 2, !tbaa !11
  %1640 = sext i16 %1639 to i32
  %1641 = add nsw i32 %1640, %1636
  %1642 = trunc i32 %1641 to i16
  store i16 %1642, ptr %1638, align 2, !tbaa !11
  br label %1663

1643:                                             ; preds = %1612
  %1644 = load ptr, ptr %7, align 8, !tbaa !5
  %1645 = getelementptr inbounds %struct.progress_wheel_t, ptr %1644, i32 0, i32 0
  %1646 = getelementptr inbounds %struct.anon, ptr %1645, i32 0, i32 3
  %1647 = load float, ptr %1646, align 4, !tbaa !55
  %1648 = fcmp olt float %1647, 0x4012D97C80000000
  br i1 %1648, label %1649, label %1662

1649:                                             ; preds = %1643
  %1650 = getelementptr inbounds %struct.arm_2d_region_t, ptr %42, i32 0, i32 1
  %1651 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1650, i32 0, i32 1
  %1652 = load i16, ptr %1651, align 2, !tbaa !11
  %1653 = sext i16 %1652 to i32
  %1654 = add nsw i32 %1653, 1
  %1655 = ashr i32 %1654, 1
  %1656 = getelementptr inbounds %struct.arm_2d_region_t, ptr %87, i32 0, i32 0
  %1657 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1656, i32 0, i32 1
  %1658 = load i16, ptr %1657, align 2, !tbaa !11
  %1659 = sext i16 %1658 to i32
  %1660 = add nsw i32 %1659, %1655
  %1661 = trunc i32 %1660 to i16
  store i16 %1661, ptr %1657, align 2, !tbaa !11
  br label %1662

1662:                                             ; preds = %1649, %1643
  br label %1663

1663:                                             ; preds = %1662, %1618
  br label %1664

1664:                                             ; preds = %1663, %1599
  %1665 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1666 = trunc i8 %1665 to i1
  br i1 %1666, label %1667, label %1691

1667:                                             ; preds = %1664
  %1668 = load ptr, ptr %7, align 8, !tbaa !5
  %1669 = getelementptr inbounds %struct.progress_wheel_t, ptr %1668, i32 0, i32 0
  %1670 = getelementptr inbounds %struct.anon, ptr %1669, i32 0, i32 4
  %1671 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1670, i64 0, i64 0
  %1672 = load ptr, ptr %15, align 8, !tbaa !5
  %1673 = load ptr, ptr %7, align 8, !tbaa !5
  %1674 = getelementptr inbounds %struct.progress_wheel_t, ptr %1673, i32 0, i32 0
  %1675 = getelementptr inbounds %struct.anon, ptr %1674, i32 0, i32 3
  %1676 = load float, ptr %1675, align 4, !tbaa !55
  %1677 = load ptr, ptr %7, align 8, !tbaa !5
  %1678 = getelementptr inbounds %struct.progress_wheel_t, ptr %1677, i32 0, i32 0
  %1679 = getelementptr inbounds %struct.anon, ptr %1678, i32 0, i32 2
  %1680 = load float, ptr %1679, align 8, !tbaa !14
  %1681 = load i8, ptr %13, align 1, !tbaa !12, !range !27, !noundef !28
  %1682 = trunc i8 %1681 to i1
  %1683 = zext i1 %1682 to i32
  %1684 = sitofp i32 %1683 to float
  %1685 = call float @llvm.fmuladd.f32(float 0x3F689374C0000000, float %1684, float %1680)
  %1686 = load i16, ptr %16, align 2, !tbaa !9
  %1687 = zext i16 %1686 to i64
  %1688 = load i8, ptr %11, align 1, !tbaa !11
  %1689 = load i32, ptr %62, align 2
  %1690 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef %1671, ptr noundef %1672, i32 %1689, float noundef %1676, float noundef %1685, i64 noundef %1687, i8 noundef zeroext %1688)
  br label %1691

1691:                                             ; preds = %1667, %1664
  %1692 = load ptr, ptr %7, align 8, !tbaa !5
  %1693 = getelementptr inbounds %struct.progress_wheel_t, ptr %1692, i32 0, i32 0
  %1694 = getelementptr inbounds %struct.anon, ptr %1693, i32 0, i32 4
  %1695 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1694, i64 0, i64 0
  %1696 = call i32 @arm_2dp_tile_transform(ptr noundef %1695, ptr noundef %37, ptr noundef %87, ptr noundef %46)
  store i32 %1696, ptr %88, align 4, !tbaa !54
  %1697 = load i32, ptr %88, align 4, !tbaa !54
  %1698 = load ptr, ptr %7, align 8, !tbaa !5
  %1699 = getelementptr inbounds %struct.progress_wheel_t, ptr %1698, i32 0, i32 0
  %1700 = getelementptr inbounds %struct.anon, ptr %1699, i32 0, i32 4
  %1701 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1700, i64 0, i64 0
  %1702 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef %1701)
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  br label %1703

1703:                                             ; preds = %1691
  br label %1704

1704:                                             ; preds = %1703, %1592
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #7
  %1705 = load ptr, ptr %7, align 8, !tbaa !5
  %1706 = getelementptr inbounds %struct.progress_wheel_t, ptr %1705, i32 0, i32 0
  %1707 = getelementptr inbounds %struct.anon, ptr %1706, i32 0, i32 0
  %1708 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1707, i32 0, i32 1
  %1709 = load ptr, ptr %1708, align 8, !tbaa !56
  store ptr %1709, ptr %89, align 8, !tbaa !5
  %1710 = load ptr, ptr %89, align 8, !tbaa !5
  %1711 = icmp ne ptr null, %1710
  br i1 %1711, label %1712, label %2016

1712:                                             ; preds = %1704
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %90, ptr align 2 %61, i64 8, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #7
  %1713 = getelementptr inbounds %struct.arm_2d_location_t, ptr %91, i32 0, i32 0
  %1714 = load ptr, ptr %89, align 8, !tbaa !5
  %1715 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %1714, i32 0, i32 1
  %1716 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1715, i32 0, i32 1
  %1717 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1716, i32 0, i32 0
  %1718 = load i16, ptr %1717, align 4, !tbaa !11
  %1719 = sext i16 %1718 to i32
  %1720 = add nsw i32 %1719, 1
  %1721 = ashr i32 %1720, 1
  %1722 = trunc i32 %1721 to i16
  store i16 %1722, ptr %1713, align 2, !tbaa !48
  %1723 = getelementptr inbounds %struct.arm_2d_location_t, ptr %91, i32 0, i32 1
  %1724 = load ptr, ptr %15, align 8, !tbaa !5
  %1725 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %1724, i32 0, i32 1
  %1726 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1725, i32 0, i32 1
  %1727 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1726, i32 0, i32 1
  %1728 = load i16, ptr %1727, align 2, !tbaa !11
  %1729 = sext i16 %1728 to i32
  %1730 = sub nsw i32 %1729, 1
  %1731 = trunc i32 %1730 to i16
  store i16 %1731, ptr %1723, align 2, !tbaa !50
  %1732 = load ptr, ptr %7, align 8, !tbaa !5
  %1733 = getelementptr inbounds %struct.progress_wheel_t, ptr %1732, i32 0, i32 0
  %1734 = getelementptr inbounds %struct.anon, ptr %1733, i32 0, i32 0
  %1735 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1734, i32 0, i32 6
  %1736 = load i32, ptr %1735, align 8
  %1737 = lshr i32 %1736, 1
  %1738 = and i32 %1737, 1
  %1739 = icmp ne i32 %1738, 0
  br i1 %1739, label %1856, label %1740

1740:                                             ; preds = %1712
  %1741 = load i8, ptr %13, align 1, !tbaa !12, !range !27, !noundef !28
  %1742 = trunc i8 %1741 to i1
  br i1 %1742, label %1743, label %1819

1743:                                             ; preds = %1740
  %1744 = getelementptr inbounds %struct.arm_2d_region_t, ptr %90, i32 0, i32 0
  %1745 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1744, i32 0, i32 0
  %1746 = load i16, ptr %1745, align 2, !tbaa !11
  %1747 = sext i16 %1746 to i32
  %1748 = getelementptr inbounds %struct.arm_2d_region_t, ptr %90, i32 0, i32 1
  %1749 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1748, i32 0, i32 0
  %1750 = load i16, ptr %1749, align 2, !tbaa !11
  %1751 = sext i16 %1750 to i32
  %1752 = add nsw i32 %1747, %1751
  %1753 = load ptr, ptr %89, align 8, !tbaa !5
  %1754 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %1753, i32 0, i32 1
  %1755 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1754, i32 0, i32 1
  %1756 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1755, i32 0, i32 0
  %1757 = load i16, ptr %1756, align 4, !tbaa !11
  %1758 = sext i16 %1757 to i32
  %1759 = sdiv i32 %1758, 2
  %1760 = sub nsw i32 %1752, %1759
  %1761 = trunc i32 %1760 to i16
  %1762 = getelementptr inbounds %struct.arm_2d_region_t, ptr %90, i32 0, i32 0
  %1763 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1762, i32 0, i32 0
  store i16 %1761, ptr %1763, align 2, !tbaa !11
  %1764 = getelementptr inbounds %struct.arm_2d_region_t, ptr %90, i32 0, i32 0
  %1765 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1764, i32 0, i32 1
  %1766 = load i16, ptr %1765, align 2, !tbaa !11
  %1767 = sext i16 %1766 to i32
  %1768 = add nsw i32 %1767, 1
  %1769 = trunc i32 %1768 to i16
  store i16 %1769, ptr %1765, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %92) #7
  %1770 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %92, i32 0, i32 0
  %1771 = load i8, ptr %1770, align 8
  %1772 = and i8 %1771, -2
  %1773 = or i8 %1772, 0
  store i8 %1773, ptr %1770, align 8
  %1774 = load i8, ptr %1770, align 8
  %1775 = and i8 %1774, -3
  %1776 = or i8 %1775, 0
  store i8 %1776, ptr %1770, align 8
  %1777 = load i8, ptr %1770, align 8
  %1778 = and i8 %1777, -5
  %1779 = or i8 %1778, 4
  store i8 %1779, ptr %1770, align 8
  %1780 = load i8, ptr %1770, align 8
  %1781 = and i8 %1780, -9
  %1782 = or i8 %1781, 0
  store i8 %1782, ptr %1770, align 8
  %1783 = load i8, ptr %1770, align 8
  %1784 = and i8 %1783, -17
  %1785 = or i8 %1784, 0
  store i8 %1785, ptr %1770, align 8
  %1786 = load i8, ptr %1770, align 8
  %1787 = and i8 %1786, 31
  %1788 = or i8 %1787, 0
  store i8 %1788, ptr %1770, align 8
  %1789 = getelementptr inbounds %struct.anon.5, ptr %1770, i32 0, i32 1
  call void @llvm.memset.p0.i64(ptr align 1 %1789, i8 0, i64 1, i1 false)
  %1790 = getelementptr inbounds %struct.anon.5, ptr %1770, i32 0, i32 2
  call void @llvm.memset.p0.i64(ptr align 2 %1790, i8 0, i64 2, i1 false)
  %1791 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %92, i32 0, i32 1
  %1792 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1791, i32 0, i32 0
  %1793 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1792, i32 0, i32 0
  store i16 0, ptr %1793, align 4, !tbaa !48
  %1794 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1792, i32 0, i32 1
  store i16 0, ptr %1794, align 2, !tbaa !50
  %1795 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1791, i32 0, i32 1
  %1796 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1795, i32 0, i32 0
  %1797 = load ptr, ptr %89, align 8, !tbaa !5
  %1798 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %1797, i32 0, i32 1
  %1799 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1798, i32 0, i32 1
  %1800 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1799, i32 0, i32 0
  %1801 = load i16, ptr %1800, align 4, !tbaa !11
  %1802 = sext i16 %1801 to i32
  %1803 = sdiv i32 %1802, 2
  %1804 = trunc i32 %1803 to i16
  store i16 %1804, ptr %1796, align 4, !tbaa !33
  %1805 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1795, i32 0, i32 1
  %1806 = load ptr, ptr %89, align 8, !tbaa !5
  %1807 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %1806, i32 0, i32 1
  %1808 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1807, i32 0, i32 1
  %1809 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1808, i32 0, i32 1
  %1810 = load i16, ptr %1809, align 2, !tbaa !11
  store i16 %1810, ptr %1805, align 2, !tbaa !35
  %1811 = getelementptr inbounds %struct.arm_2d_tile_t, ptr %92, i32 0, i32 2
  %1812 = load ptr, ptr %89, align 8, !tbaa !5
  store ptr %1812, ptr %1811, align 8, !tbaa !11
  %1813 = load i16, ptr %16, align 2, !tbaa !9
  store i16 %1813, ptr %93, align 2, !tbaa !11
  %1814 = load i8, ptr %11, align 1, !tbaa !11
  %1815 = getelementptr inbounds %union.arm_2d_color_rgb565_t, ptr %93, i32 0, i32 0
  %1816 = load i16, ptr %1815, align 2
  %1817 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef %37, ptr noundef %90, ptr noundef %92, i16 %1816, i8 noundef zeroext %1814)
  %1818 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 24, ptr %92) #7
  br label %1855

1819:                                             ; preds = %1740
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %94, ptr align 2 %46, i64 4, i1 false), !tbaa.struct !32
  %1820 = getelementptr inbounds %struct.arm_2d_location_t, ptr %94, i32 0, i32 1
  %1821 = load i16, ptr %1820, align 2, !tbaa !50
  %1822 = sext i16 %1821 to i32
  %1823 = add nsw i32 %1822, 1
  %1824 = trunc i32 %1823 to i16
  store i16 %1824, ptr %1820, align 2, !tbaa !50
  %1825 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1826 = trunc i8 %1825 to i1
  br i1 %1826, label %1827, label %1843

1827:                                             ; preds = %1819
  %1828 = load ptr, ptr %7, align 8, !tbaa !5
  %1829 = getelementptr inbounds %struct.progress_wheel_t, ptr %1828, i32 0, i32 0
  %1830 = getelementptr inbounds %struct.anon, ptr %1829, i32 0, i32 4
  %1831 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1830, i64 0, i64 4
  %1832 = load ptr, ptr %89, align 8, !tbaa !5
  %1833 = load ptr, ptr %7, align 8, !tbaa !5
  %1834 = getelementptr inbounds %struct.progress_wheel_t, ptr %1833, i32 0, i32 0
  %1835 = getelementptr inbounds %struct.anon, ptr %1834, i32 0, i32 2
  %1836 = load float, ptr %1835, align 8, !tbaa !14
  %1837 = fsub float %1836, 0x3F60624DE0000000
  %1838 = load i16, ptr %16, align 2, !tbaa !9
  %1839 = zext i16 %1838 to i64
  %1840 = load i8, ptr %11, align 1, !tbaa !11
  %1841 = load i32, ptr %91, align 2
  %1842 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef %1831, ptr noundef %1832, i32 %1841, float noundef 0.000000e+00, float noundef %1837, i64 noundef %1839, i8 noundef zeroext %1840)
  br label %1843

1843:                                             ; preds = %1827, %1819
  %1844 = load ptr, ptr %7, align 8, !tbaa !5
  %1845 = getelementptr inbounds %struct.progress_wheel_t, ptr %1844, i32 0, i32 0
  %1846 = getelementptr inbounds %struct.anon, ptr %1845, i32 0, i32 4
  %1847 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1846, i64 0, i64 4
  %1848 = call i32 @arm_2dp_tile_transform(ptr noundef %1847, ptr noundef %37, ptr noundef %90, ptr noundef %94)
  store i32 %1848, ptr %95, align 4, !tbaa !54
  %1849 = load i32, ptr %95, align 4, !tbaa !54
  %1850 = load ptr, ptr %7, align 8, !tbaa !5
  %1851 = getelementptr inbounds %struct.progress_wheel_t, ptr %1850, i32 0, i32 0
  %1852 = getelementptr inbounds %struct.anon, ptr %1851, i32 0, i32 4
  %1853 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1852, i64 0, i64 4
  %1854 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef %1853)
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #7
  br label %1855

1855:                                             ; preds = %1843, %1743
  br label %1856

1856:                                             ; preds = %1855, %1712
  call void @llvm.lifetime.start.p0(i64 1, ptr %96) #7
  %1857 = load ptr, ptr %7, align 8, !tbaa !5
  %1858 = getelementptr inbounds %struct.progress_wheel_t, ptr %1857, i32 0, i32 0
  %1859 = getelementptr inbounds %struct.anon, ptr %1858, i32 0, i32 0
  %1860 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1859, i32 0, i32 6
  %1861 = load i32, ptr %1860, align 8
  %1862 = lshr i32 %1861, 1
  %1863 = and i32 %1862, 1
  %1864 = icmp ne i32 %1863, 0
  br i1 %1864, label %1865, label %1866

1865:                                             ; preds = %1856
  store i8 0, ptr %96, align 1, !tbaa !11
  br label %1867

1866:                                             ; preds = %1856
  store i8 -1, ptr %96, align 1, !tbaa !11
  br label %1867

1867:                                             ; preds = %1866, %1865
  %1868 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1869 = trunc i8 %1868 to i1
  br i1 %1869, label %1870, label %1889

1870:                                             ; preds = %1867
  %1871 = load ptr, ptr %7, align 8, !tbaa !5
  %1872 = getelementptr inbounds %struct.progress_wheel_t, ptr %1871, i32 0, i32 0
  %1873 = getelementptr inbounds %struct.anon, ptr %1872, i32 0, i32 4
  %1874 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1873, i64 0, i64 5
  %1875 = load ptr, ptr %89, align 8, !tbaa !5
  %1876 = load ptr, ptr %7, align 8, !tbaa !5
  %1877 = getelementptr inbounds %struct.progress_wheel_t, ptr %1876, i32 0, i32 0
  %1878 = getelementptr inbounds %struct.anon, ptr %1877, i32 0, i32 3
  %1879 = load float, ptr %1878, align 4, !tbaa !55
  %1880 = load ptr, ptr %7, align 8, !tbaa !5
  %1881 = getelementptr inbounds %struct.progress_wheel_t, ptr %1880, i32 0, i32 0
  %1882 = getelementptr inbounds %struct.anon, ptr %1881, i32 0, i32 2
  %1883 = load float, ptr %1882, align 8, !tbaa !14
  %1884 = load i16, ptr %16, align 2, !tbaa !9
  %1885 = zext i16 %1884 to i64
  %1886 = load i8, ptr %96, align 1, !tbaa !11
  %1887 = load i32, ptr %91, align 2
  %1888 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef %1874, ptr noundef %1875, i32 %1887, float noundef %1879, float noundef %1883, i64 noundef %1885, i8 noundef zeroext %1886)
  br label %1889

1889:                                             ; preds = %1870, %1867
  %1890 = load ptr, ptr %7, align 8, !tbaa !5
  %1891 = getelementptr inbounds %struct.progress_wheel_t, ptr %1890, i32 0, i32 0
  %1892 = getelementptr inbounds %struct.anon, ptr %1891, i32 0, i32 4
  %1893 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1892, i64 0, i64 5
  %1894 = call i32 @arm_2dp_tile_transform(ptr noundef %1893, ptr noundef %37, ptr noundef %42, ptr noundef %46)
  store i32 %1894, ptr %97, align 4, !tbaa !54
  %1895 = load i32, ptr %97, align 4, !tbaa !54
  %1896 = load ptr, ptr %7, align 8, !tbaa !5
  %1897 = getelementptr inbounds %struct.progress_wheel_t, ptr %1896, i32 0, i32 0
  %1898 = getelementptr inbounds %struct.anon, ptr %1897, i32 0, i32 0
  %1899 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1898, i32 0, i32 6
  %1900 = load i32, ptr %1899, align 8
  %1901 = and i32 %1900, 1
  %1902 = icmp ne i32 %1901, 0
  br i1 %1902, label %1903, label %1952

1903:                                             ; preds = %1889
  %1904 = load ptr, ptr %7, align 8, !tbaa !5
  %1905 = getelementptr inbounds %struct.progress_wheel_t, ptr %1904, i32 0, i32 0
  %1906 = getelementptr inbounds %struct.anon, ptr %1905, i32 0, i32 5
  %1907 = getelementptr inbounds %struct.arm_2d_helper_dirty_region_transform_t, ptr %1906, i32 0, i32 4
  %1908 = getelementptr inbounds %struct.arm_2d_helper_dirty_region_item_t, ptr %1907, i32 0, i32 1
  %1909 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1908, i32 0, i32 0
  %1910 = getelementptr inbounds %struct.arm_2d_location_t, ptr %1909, i32 0, i32 0
  store i16 -1, ptr %1910, align 8, !tbaa !11
  %1911 = load ptr, ptr %7, align 8, !tbaa !5
  %1912 = getelementptr inbounds %struct.progress_wheel_t, ptr %1911, i32 0, i32 0
  %1913 = getelementptr inbounds %struct.anon, ptr %1912, i32 0, i32 5
  %1914 = getelementptr inbounds %struct.arm_2d_helper_dirty_region_transform_t, ptr %1913, i32 0, i32 4
  %1915 = getelementptr inbounds %struct.arm_2d_helper_dirty_region_item_t, ptr %1914, i32 0, i32 1
  %1916 = getelementptr inbounds %struct.arm_2d_region_t, ptr %1915, i32 0, i32 1
  %1917 = getelementptr inbounds %struct.arm_2d_size_t, ptr %1916, i32 0, i32 0
  store i16 1, ptr %1917, align 4, !tbaa !11
  %1918 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1919 = trunc i8 %1918 to i1
  br i1 %1919, label %1920, label %1946

1920:                                             ; preds = %1903
  %1921 = load ptr, ptr %7, align 8, !tbaa !5
  %1922 = getelementptr inbounds %struct.progress_wheel_t, ptr %1921, i32 0, i32 0
  %1923 = getelementptr inbounds %struct.anon, ptr %1922, i32 0, i32 5
  %1924 = load i8, ptr %18, align 1, !tbaa !11
  %1925 = zext i8 %1924 to i32
  %1926 = icmp eq i32 %1925, 2
  br i1 %1926, label %1936, label %1927

1927:                                             ; preds = %1920
  %1928 = load ptr, ptr %7, align 8, !tbaa !5
  %1929 = getelementptr inbounds %struct.progress_wheel_t, ptr %1928, i32 0, i32 0
  %1930 = getelementptr inbounds %struct.anon, ptr %1929, i32 0, i32 0
  %1931 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1930, i32 0, i32 6
  %1932 = load i32, ptr %1931, align 8
  %1933 = lshr i32 %1932, 1
  %1934 = and i32 %1933, 1
  %1935 = icmp ne i32 %1934, 0
  br label %1936

1936:                                             ; preds = %1927, %1920
  %1937 = phi i1 [ true, %1920 ], [ %1935, %1927 ]
  %1938 = call zeroext i1 @arm_2d_helper_dirty_region_transform_force_to_use_minimal_enclosure(ptr noundef %1923, i1 noundef zeroext %1937)
  %1939 = load ptr, ptr %7, align 8, !tbaa !5
  %1940 = getelementptr inbounds %struct.progress_wheel_t, ptr %1939, i32 0, i32 0
  %1941 = getelementptr inbounds %struct.anon, ptr %1940, i32 0, i32 5
  %1942 = load i8, ptr %18, align 1, !tbaa !11
  %1943 = zext i8 %1942 to i32
  %1944 = icmp eq i32 %1943, 3
  %1945 = call zeroext i1 @arm_2d_helper_dirty_region_transform_suspend_update(ptr noundef %1941, i1 noundef zeroext %1944)
  br label %1946

1946:                                             ; preds = %1936, %1903
  %1947 = load ptr, ptr %7, align 8, !tbaa !5
  %1948 = getelementptr inbounds %struct.progress_wheel_t, ptr %1947, i32 0, i32 0
  %1949 = getelementptr inbounds %struct.anon, ptr %1948, i32 0, i32 5
  %1950 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1951 = trunc i8 %1950 to i1
  call void @arm_2d_helper_dirty_region_transform_update(ptr noundef %1949, ptr noundef %42, i1 noundef zeroext %1951)
  br label %1952

1952:                                             ; preds = %1946, %1889
  %1953 = load ptr, ptr %7, align 8, !tbaa !5
  %1954 = getelementptr inbounds %struct.progress_wheel_t, ptr %1953, i32 0, i32 0
  %1955 = getelementptr inbounds %struct.anon, ptr %1954, i32 0, i32 4
  %1956 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1955, i64 0, i64 5
  %1957 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef %1956)
  %1958 = load ptr, ptr %7, align 8, !tbaa !5
  %1959 = getelementptr inbounds %struct.progress_wheel_t, ptr %1958, i32 0, i32 0
  %1960 = getelementptr inbounds %struct.anon, ptr %1959, i32 0, i32 0
  %1961 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1960, i32 0, i32 5
  %1962 = load i16, ptr %1961, align 2, !tbaa !57
  %1963 = zext i16 %1962 to i32
  %1964 = load ptr, ptr %7, align 8, !tbaa !5
  %1965 = getelementptr inbounds %struct.progress_wheel_t, ptr %1964, i32 0, i32 0
  %1966 = getelementptr inbounds %struct.anon, ptr %1965, i32 0, i32 0
  %1967 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1966, i32 0, i32 4
  %1968 = load i16, ptr %1967, align 4, !tbaa !26
  %1969 = zext i16 %1968 to i32
  %1970 = icmp ne i32 %1963, %1969
  br i1 %1970, label %1971, label %2015

1971:                                             ; preds = %1952
  %1972 = getelementptr inbounds %struct.arm_2d_location_t, ptr %91, i32 0, i32 1
  %1973 = load i16, ptr %1972, align 2, !tbaa !50
  %1974 = sitofp i16 %1973 to float
  %1975 = fmul float %1974, 0x3FF3C28F60000000
  %1976 = fptosi float %1975 to i16
  %1977 = getelementptr inbounds %struct.arm_2d_location_t, ptr %91, i32 0, i32 1
  store i16 %1976, ptr %1977, align 2, !tbaa !50
  %1978 = load i8, ptr %12, align 1, !tbaa !12, !range !27, !noundef !28
  %1979 = trunc i8 %1978 to i1
  br i1 %1979, label %1980, label %2003

1980:                                             ; preds = %1971
  %1981 = load ptr, ptr %7, align 8, !tbaa !5
  %1982 = getelementptr inbounds %struct.progress_wheel_t, ptr %1981, i32 0, i32 0
  %1983 = getelementptr inbounds %struct.anon, ptr %1982, i32 0, i32 4
  %1984 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %1983, i64 0, i64 6
  %1985 = load ptr, ptr %89, align 8, !tbaa !5
  %1986 = load ptr, ptr %7, align 8, !tbaa !5
  %1987 = getelementptr inbounds %struct.progress_wheel_t, ptr %1986, i32 0, i32 0
  %1988 = getelementptr inbounds %struct.anon, ptr %1987, i32 0, i32 3
  %1989 = load float, ptr %1988, align 4, !tbaa !55
  %1990 = load ptr, ptr %7, align 8, !tbaa !5
  %1991 = getelementptr inbounds %struct.progress_wheel_t, ptr %1990, i32 0, i32 0
  %1992 = getelementptr inbounds %struct.anon, ptr %1991, i32 0, i32 2
  %1993 = load float, ptr %1992, align 8, !tbaa !14
  %1994 = fmul float %1993, 0x3FE9374BC0000000
  %1995 = load ptr, ptr %7, align 8, !tbaa !5
  %1996 = getelementptr inbounds %struct.progress_wheel_t, ptr %1995, i32 0, i32 0
  %1997 = getelementptr inbounds %struct.anon, ptr %1996, i32 0, i32 0
  %1998 = getelementptr inbounds %struct.progress_wheel_cfg_t, ptr %1997, i32 0, i32 5
  %1999 = load i16, ptr %1998, align 2, !tbaa !57
  %2000 = zext i16 %1999 to i64
  %2001 = load i32, ptr %91, align 2
  %2002 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef %1984, ptr noundef %1985, i32 %2001, float noundef %1989, float noundef %1994, i64 noundef %2000, i8 noundef zeroext -1)
  br label %2003

2003:                                             ; preds = %1980, %1971
  %2004 = load ptr, ptr %7, align 8, !tbaa !5
  %2005 = getelementptr inbounds %struct.progress_wheel_t, ptr %2004, i32 0, i32 0
  %2006 = getelementptr inbounds %struct.anon, ptr %2005, i32 0, i32 4
  %2007 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %2006, i64 0, i64 6
  %2008 = call i32 @arm_2dp_tile_transform(ptr noundef %2007, ptr noundef %37, ptr noundef %42, ptr noundef %46)
  store i32 %2008, ptr %98, align 4, !tbaa !54
  %2009 = load i32, ptr %98, align 4, !tbaa !54
  %2010 = load ptr, ptr %7, align 8, !tbaa !5
  %2011 = getelementptr inbounds %struct.progress_wheel_t, ptr %2010, i32 0, i32 0
  %2012 = getelementptr inbounds %struct.anon, ptr %2011, i32 0, i32 4
  %2013 = getelementptr inbounds [7 x %struct.arm_2d_op_trans_opa_t], ptr %2012, i64 0, i64 6
  %2014 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef %2013)
  br label %2015

2015:                                             ; preds = %2003, %1952
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #7
  br label %2016

2016:                                             ; preds = %2015, %1704
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  br label %2017

2017:                                             ; preds = %2016
  %2018 = load ptr, ptr %44, align 8, !tbaa !5
  br label %431, !llvm.loop !58

2019:                                             ; preds = %435
  br label %2020

2020:                                             ; preds = %2019
  %2021 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null)
  %2022 = zext i1 %2021 to i8
  store i8 %2022, ptr %99, align 1, !tbaa !12
  %2023 = load i8, ptr %99, align 1, !tbaa !12, !range !27, !noundef !28
  %2024 = trunc i8 %2023 to i1
  br label %417, !llvm.loop !59

2025:                                             ; preds = %429
  br label %2026

2026:                                             ; preds = %2025
  br label %336, !llvm.loop !60

2027:                                             ; preds = %415, %407
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #7
  br label %2028

2028:                                             ; preds = %2027
  br label %321, !llvm.loop !61

2029:                                             ; preds = %334
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden signext i16 @reinterpret_s16_q16(i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @mul_n_q16(i32 noundef, i32 noundef) #5

declare zeroext i8 @arm_2d_dynamic_dirty_region_wait_next(ptr noundef) #6

declare zeroext i1 @arm_2d_op_wait_async(ptr noundef) #6

declare ptr @arm_2d_get_default_frame_buffer() #6

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

declare void @arm_2d_helper_dirty_region_item_set_extra_region(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #6

declare ptr @arm_2d_region_get_minimal_enclosure(ptr noundef, ptr noundef, ptr noundef) #6

declare void @arm_2d_dynamic_dirty_region_update(ptr noundef, ptr noundef, ptr noundef, i8 noundef zeroext) #6

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i16, i8 noundef zeroext) #6

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i16, i8 noundef zeroext) #6

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i16, i8 noundef zeroext) #6

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i16, i8 noundef zeroext) #6

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef, ptr noundef, i32, float noundef, float noundef, i64 noundef, i8 noundef zeroext) #6

declare i32 @arm_2dp_tile_transform(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #6

declare zeroext i1 @arm_2d_helper_dirty_region_transform_force_to_use_minimal_enclosure(ptr noundef, i1 noundef zeroext) #6

declare zeroext i1 @arm_2d_helper_dirty_region_transform_suspend_update(ptr noundef, i1 noundef zeroext) #6

declare void @arm_2d_helper_dirty_region_transform_update(ptr noundef, ptr noundef, i1 noundef zeroext) #6

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { inlinehint 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 = { "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 #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"_Bool", !7, i64 0}
!14 = !{!15, !19, i64 40}
!15 = !{!"progress_wheel_t", !16, i64 0}
!16 = !{!"", !17, i64 0, !6, i64 32, !19, i64 40, !19, i64 44, !7, i64 48, !20, i64 1336, !23, i64 1456, !24, i64 1488, !7, i64 1512, !10, i64 1514, !10, i64 1516, !10, i64 1518, !18, i64 1520}
!17 = !{!"progress_wheel_cfg_t", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 18, !10, i64 20, !10, i64 22, !18, i64 24, !18, i64 24, !18, i64 24, !18, i64 26}
!18 = !{!"int", !7, i64 0}
!19 = !{!"float", !7, i64 0}
!20 = !{!"arm_2d_helper_dirty_region_transform_t", !19, i64 0, !7, i64 4, !19, i64 8, !21, i64 16, !7, i64 72}
!21 = !{!"arm_2d_helper_dirty_region_item_t", !7, i64 0, !22, i64 48}
!22 = !{!"arm_2d_region_t", !7, i64 0, !7, i64 4}
!23 = !{!"arm_2d_region_list_item_t", !6, i64 0, !7, i64 8, !22, i64 16, !7, i64 24}
!24 = !{!"arm_2d_tile_t", !7, i64 0, !7, i64 4, !7, i64 16}
!25 = !{!15, !6, i64 0}
!26 = !{!15, !10, i64 20}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!15, !18, i64 1520}
!30 = !{!15, !10, i64 1518}
!31 = !{!15, !10, i64 1516}
!32 = !{i64 0, i64 2, !9, i64 2, i64 2, !9}
!33 = !{!34, !10, i64 0}
!34 = !{!"arm_2d_size_t", !10, i64 0, !10, i64 2}
!35 = !{!34, !10, i64 2}
!36 = !{i64 0, i64 4, !11, i64 4, i64 4, !11}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = distinct !{!39, !38}
!40 = distinct !{!40, !38}
!41 = distinct !{!41, !38}
!42 = !{!43, !7, i64 0}
!43 = !{!"arm_2d_margin_t", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3}
!44 = !{!43, !7, i64 1}
!45 = !{!43, !7, i64 2}
!46 = !{!43, !7, i64 3}
!47 = !{i64 0, i64 1, !11, i64 1, i64 1, !11, i64 2, i64 1, !11, i64 3, i64 1, !11}
!48 = !{!49, !10, i64 0}
!49 = !{!"arm_2d_location_t", !10, i64 0, !10, i64 2}
!50 = !{!49, !10, i64 2}
!51 = !{!15, !7, i64 1512}
!52 = !{!15, !10, i64 1514}
!53 = !{!15, !10, i64 16}
!54 = !{!18, !18, i64 0}
!55 = !{!15, !19, i64 44}
!56 = !{!15, !6, i64 8}
!57 = !{!15, !10, i64 22}
!58 = distinct !{!58, !38}
!59 = distinct !{!59, !38}
!60 = distinct !{!60, !38}
!61 = distinct !{!61, !38}


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

%struct.arm_2d_region_t = type { %union.anon.16, %union.anon.17 }
%union.anon.16 = type { %struct.arm_2d_location_t }
%struct.arm_2d_location_t = type { i16, i16 }
%union.anon.17 = type { %struct.arm_2d_size_t }
%struct.arm_2d_size_t = type { i16, i16 }
%struct.arm_2d_tile_t = type { %union.anon.4, %union.anon.15, %union.anon.18 }
%union.anon.4 = type { %struct.anon.5 }
%struct.anon.5 = type { i8, %union.arm_2d_color_info_t, %union.anon.8 }
%union.arm_2d_color_info_t = type { %struct.anon.6 }
%struct.anon.6 = type { i8 }
%union.anon.8 = type { i16 }
%union.anon.15 = type { %struct.arm_2d_region_t }
%union.anon.18 = type { ptr }
%struct.anon.29 = type { i16 }

@progress_wheel_show.c_tQuadrantTable = external hidden local_unnamed_addr constant [2 x [4 x { i8, i8 }]], align 16

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

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

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #2

; Function Attrs: nounwind uwtable
define dso_local void @progress_wheel_show(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef readonly %2, i16 noundef signext %3, i8 noundef zeroext %4, i1 noundef zeroext %5) local_unnamed_addr #3 {
  %7 = alloca %struct.arm_2d_region_t, align 4
  %8 = alloca %struct.arm_2d_tile_t, align 8
  %9 = alloca %struct.arm_2d_region_t, align 8
  %10 = alloca %struct.arm_2d_region_t, align 8
  %11 = alloca %struct.arm_2d_location_t, align 4
  %12 = alloca %struct.arm_2d_region_t, align 8
  %13 = alloca %struct.arm_2d_region_t, align 8
  %14 = alloca %struct.arm_2d_region_t, align 8
  %15 = alloca %struct.arm_2d_region_t, align 8
  %16 = alloca %struct.arm_2d_region_t, align 8
  %17 = alloca %struct.arm_2d_region_t, align 4
  %18 = alloca %struct.arm_2d_region_t, align 4
  %19 = alloca %struct.arm_2d_region_t, align 4
  %20 = alloca %struct.arm_2d_region_t, align 4
  %21 = alloca %struct.arm_2d_region_t, align 4
  %22 = alloca %struct.arm_2d_region_t, align 4
  %23 = alloca %struct.arm_2d_tile_t, align 8
  %24 = alloca %struct.arm_2d_location_t, align 4
  %25 = getelementptr inbounds i8, ptr %0, i64 40
  %26 = load float, ptr %25, align 8, !tbaa !5
  %27 = fadd float %26, -1.000000e+00
  %28 = fcmp ogt float %27, 0.000000e+00
  %29 = fneg float %27
  %30 = select i1 %28, float %27, float %29
  %31 = fcmp olt float %30, 0x3F847AE140000000
  %32 = load ptr, ptr %0, align 8, !tbaa !20
  %33 = getelementptr inbounds i8, ptr %0, i64 20
  %34 = load i16, ptr %33, align 4, !tbaa !21
  br i1 %5, label %35, label %47

35:                                               ; preds = %6
  %36 = tail call i16 @llvm.smax.i16(i16 %3, i16 0)
  %37 = zext nneg i16 %36 to i32
  %38 = getelementptr inbounds i8, ptr %0, i64 24
  %39 = load i32, ptr %38, align 8
  %40 = lshr i32 %39, 16
  %41 = and i32 %40, 32767
  %. = tail call i32 @llvm.umin.i32(i32 %41, i32 %37)
  %42 = getelementptr inbounds i8, ptr %0, i64 1520
  %43 = load i32, ptr %42, align 8, !tbaa !22
  %44 = tail call i32 @mul_n_q16(i32 noundef %43, i32 noundef %.)
  %45 = tail call signext i16 @reinterpret_s16_q16(i32 noundef %44)
  %46 = getelementptr inbounds i8, ptr %0, i64 1518
  store i16 %45, ptr %46, align 2, !tbaa !23
  br label %47

47:                                               ; preds = %35, %6
  %48 = getelementptr inbounds i8, ptr %0, i64 1516
  %49 = load i16, ptr %48, align 4, !tbaa !24
  %50 = sdiv i16 %49, 900
  %51 = trunc nsw i16 %50 to i8
  %52 = getelementptr inbounds i8, ptr %0, i64 24
  %53 = load i32, ptr %52, align 8
  %54 = and i32 %53, 1
  %.not = icmp eq i32 %54, 0
  br i1 %.not, label %58, label %55

55:                                               ; preds = %47
  %56 = getelementptr inbounds i8, ptr %0, i64 1456
  %57 = tail call zeroext i8 @arm_2d_dynamic_dirty_region_wait_next(ptr noundef nonnull %56) #7
  br label %58

58:                                               ; preds = %55, %47
  %.0438 = phi i8 [ %57, %55 ], [ 4, %47 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  br i1 %31, label %.preheader, label %76

.preheader:                                       ; preds = %58
  %59 = getelementptr inbounds i8, ptr %1, i64 8
  %60 = getelementptr inbounds i8, ptr %32, i64 8
  %.sroa.8195.0..sroa_idx = getelementptr inbounds i8, ptr %7, i64 4
  %.sroa_idx = getelementptr inbounds i8, ptr %1, i64 10
  %61 = icmp eq ptr %2, null
  %62 = load <2 x i16>, ptr %60, align 4, !tbaa !25
  %63 = shl <2 x i16> %62, <i16 1, i16 1>
  br i1 %61, label %.preheader.cont, label %.preheader.else

.preheader.else:                                  ; preds = %.preheader
  %64 = load <2 x i16>, ptr %2, align 2
  %.1.sroa.gep519 = getelementptr inbounds i8, ptr %2, i64 4
  %.sroa.gep596 = getelementptr inbounds i8, ptr %2, i64 6
  br label %.preheader.cont

.preheader.cont:                                  ; preds = %.preheader, %.preheader.else
  %.sroa.5200.0.copyload620.in = phi ptr [ %.1.sroa.gep519, %.preheader.else ], [ %59, %.preheader ]
  %.sroa.6201.0.copyload.in = phi ptr [ %.sroa.gep596, %.preheader.else ], [ %.sroa_idx, %.preheader ]
  %65 = phi <2 x i16> [ %64, %.preheader.else ], [ zeroinitializer, %.preheader ]
  %.sroa.6201.0.copyload = load i16, ptr %.sroa.6201.0.copyload.in, align 2
  %.sroa.5200.0.copyload620 = load i16, ptr %.sroa.5200.0.copyload620.in, align 2
  %66 = insertelement <2 x i16> poison, i16 %.sroa.5200.0.copyload620, i64 0
  %67 = insertelement <2 x i16> %66, i16 %.sroa.6201.0.copyload, i64 1
  %68 = sext <2 x i16> %67 to <2 x i32>
  %69 = sext <2 x i16> %63 to <2 x i32>
  %70 = sub nsw <2 x i32> %68, %69
  %71 = lshr <2 x i32> %70, <i32 1, i32 1>
  %72 = trunc <2 x i32> %71 to <2 x i16>
  %73 = add <2 x i16> %65, %72
  store <2 x i16> %73, ptr %7, align 4
  store <2 x i16> %63, ptr %.sroa.8195.0..sroa_idx, align 4
  %74 = tail call zeroext i1 @arm_2d_op_wait_async(ptr noundef null) #7
  %75 = tail call zeroext i1 @arm_2d_op_wait_async(ptr noundef null) #7
  br label %76

76:                                               ; preds = %.preheader.cont, %58
  %77 = phi i16 [ -1, %.preheader.cont ], [ -2, %58 ]
  %.4 = phi ptr [ %7, %.preheader.cont ], [ %2, %58 ]
  %78 = icmp eq ptr %.4, null
  %79 = getelementptr inbounds i8, ptr %10, i64 4
  %80 = getelementptr inbounds i8, ptr %8, i64 8
  %81 = getelementptr inbounds i8, ptr %11, i64 2
  %82 = getelementptr inbounds i8, ptr %10, i64 6
  %83 = getelementptr inbounds i8, ptr %0, i64 1514
  %84 = getelementptr inbounds i8, ptr %0, i64 1512
  %85 = getelementptr inbounds i8, ptr %0, i64 16
  %86 = icmp slt i16 %49, 1800
  %87 = icmp slt i16 %49, 2700
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %12, i64 4
  %.sroa.6123.0..sroa_idx = getelementptr inbounds i8, ptr %12, i64 6
  %88 = getelementptr inbounds i8, ptr %15, i64 4
  %89 = getelementptr inbounds i8, ptr %15, i64 6
  %90 = getelementptr inbounds i8, ptr %16, i64 4
  %91 = getelementptr inbounds i8, ptr %16, i64 6
  %92 = getelementptr inbounds i8, ptr %0, i64 1352
  %93 = icmp sgt i16 %49, 899
  %94 = icmp sgt i16 %49, 1799
  %95 = getelementptr inbounds i8, ptr %13, i64 4
  %96 = getelementptr inbounds i8, ptr %13, i64 6
  %97 = icmp sgt i16 %49, 2699
  %98 = getelementptr inbounds i8, ptr %14, i64 4
  %99 = getelementptr inbounds i8, ptr %14, i64 6
  %100 = getelementptr inbounds i8, ptr %0, i64 1456
  %101 = getelementptr inbounds i8, ptr %32, i64 8
  %102 = zext i1 %31 to i16
  %103 = or disjoint i16 %102, -2
  %104 = getelementptr inbounds i8, ptr %32, i64 10
  %.sroa.9.0..sroa_idx98 = getelementptr inbounds i8, ptr %17, i64 4
  %.sroa.10.0..sroa_idx110 = getelementptr inbounds i8, ptr %17, i64 6
  %105 = getelementptr inbounds i8, ptr %17, i64 2
  %106 = getelementptr inbounds i8, ptr %0, i64 600
  %107 = zext i16 %34 to i64
  %.sroa.9.0..sroa_idx100 = getelementptr inbounds i8, ptr %18, i64 4
  %.sroa.10.0..sroa_idx112 = getelementptr inbounds i8, ptr %18, i64 6
  %108 = getelementptr inbounds i8, ptr %18, i64 2
  %109 = getelementptr inbounds i8, ptr %0, i64 232
  %.sroa.9.0..sroa_idx102 = getelementptr inbounds i8, ptr %19, i64 4
  %.sroa.10.0..sroa_idx114 = getelementptr inbounds i8, ptr %19, i64 6
  %110 = getelementptr inbounds i8, ptr %19, i64 2
  %111 = getelementptr inbounds i8, ptr %0, i64 416
  %.sroa.9.0..sroa_idx106 = getelementptr inbounds i8, ptr %21, i64 4
  %.sroa.10.0..sroa_idx118 = getelementptr inbounds i8, ptr %21, i64 6
  %112 = getelementptr inbounds i8, ptr %0, i64 44
  %113 = getelementptr inbounds i8, ptr %21, i64 2
  %114 = getelementptr inbounds i8, ptr %0, i64 48
  %115 = uitofp i1 %31 to float
  %.sroa.9.0..sroa_idx104 = getelementptr inbounds i8, ptr %20, i64 4
  %.sroa.10.0..sroa_idx116 = getelementptr inbounds i8, ptr %20, i64 6
  %116 = getelementptr inbounds i8, ptr %20, i64 2
  %117 = getelementptr inbounds i8, ptr %0, i64 8
  %.sroa.9.0..sroa_idx108 = getelementptr inbounds i8, ptr %22, i64 4
  %.sroa.10.0..sroa_idx120 = getelementptr inbounds i8, ptr %22, i64 6
  %118 = getelementptr inbounds i8, ptr %24, i64 2
  %119 = getelementptr inbounds i8, ptr %0, i64 784
  %120 = getelementptr inbounds i8, ptr %22, i64 2
  %121 = getelementptr inbounds i8, ptr %23, i64 1
  %122 = getelementptr inbounds i8, ptr %23, i64 8
  %123 = getelementptr inbounds i8, ptr %23, i64 10
  %124 = getelementptr inbounds i8, ptr %23, i64 16
  %125 = getelementptr inbounds i8, ptr %0, i64 968
  %126 = getelementptr inbounds i8, ptr %0, i64 1336
  %127 = getelementptr inbounds i8, ptr %0, i64 1400
  %128 = getelementptr inbounds i8, ptr %0, i64 1404
  %129 = getelementptr inbounds i8, ptr %0, i64 22
  %130 = getelementptr inbounds i8, ptr %0, i64 1152
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %8, i8 0, i64 24, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #7
  store i64 0, ptr %9, align 8
  br i1 %78, label %131, label %135

131:                                              ; preds = %76
  %132 = getelementptr inbounds i8, ptr %1, i64 8
  %133 = getelementptr inbounds i8, ptr %9, i64 4
  %134 = load i32, ptr %132, align 4
  store i32 %134, ptr %133, align 4
  br label %137

135:                                              ; preds = %76
  %136 = load i64, ptr %.4, align 2
  store i64 %136, ptr %9, align 8
  br label %137

137:                                              ; preds = %131, %135
  %138 = call ptr @arm_2d_tile_generate_child(ptr noundef nonnull %1, ptr noundef nonnull %9, ptr noundef nonnull %8, i1 noundef zeroext false) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  store i64 0, ptr %10, align 8
  %139 = load i32, ptr %80, align 8
  store i32 %139, ptr %79, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #7
  %140 = bitcast i32 %139 to <2 x i16>
  %141 = ashr <2 x i16> %140, <i16 1, i16 1>
  store <2 x i16> %141, ptr %11, align 4, !tbaa !25
  %142 = icmp eq i8 %.0438, 0
  %brmerge.not = and i1 %142, %5
  br i1 %brmerge.not, label %143, label %146

143:                                              ; preds = %137
  %144 = load i32, ptr %52, align 8
  %145 = and i32 %144, 1
  %.not494 = icmp eq i32 %145, 0
  br i1 %.not494, label %.thread533.thread570, label %.thread533.thread

.thread533.thread:                                ; preds = %143
  store i8 0, ptr %84, align 8, !tbaa !26
  br label %.thread554

146:                                              ; preds = %137
  switch i8 %.0438, label %.thread533.thread570 [
    i8 1, label %147
    i8 3, label %.thread554
  ]

147:                                              ; preds = %146
  %148 = load i16, ptr %83, align 2, !tbaa !27
  %149 = load i16, ptr %48, align 4, !tbaa !24
  %.not495 = icmp ne i16 %148, %149
  %brmerge509.not = and i1 %.not495, %5
  br i1 %brmerge509.not, label %150, label %.thread533.thread570

150:                                              ; preds = %147
  %151 = load i8, ptr %84, align 8, !tbaa !26
  %152 = sub i8 %51, %151
  %153 = call i8 @llvm.abs.i8(i8 %152, i1 false)
  %154 = sub i16 %149, %148
  store i16 %149, ptr %83, align 2, !tbaa !27
  %155 = icmp sgt i16 %154, 0
  %156 = icmp slt i8 %153, 2
  br i1 %156, label %157, label %.thread554

157:                                              ; preds = %150
  %158 = call i16 @llvm.abs.i16(i16 %154, i1 false)
  %159 = icmp ult i16 %158, 91
  br i1 %159, label %160, label %161

160:                                              ; preds = %157
  call void @arm_2d_helper_dirty_region_item_set_extra_region(ptr noundef nonnull %92, ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef null) #7
  br label %.thread533.thread570.sink.split

161:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  store i64 0, ptr %12, align 8
  %162 = load i32, ptr %52, align 8
  %163 = trunc i32 %162 to i8
  %164 = lshr i8 %163, 2
  %165 = and i8 %164, 3
  %166 = load i16, ptr %85, align 8, !tbaa !28
  %167 = sdiv i16 %166, 2
  %narrow = add nsw i16 %167, -1
  br i1 %155, label %168, label %221

168:                                              ; preds = %161
  switch i8 %151, label %.thread538 [
    i8 0, label %169
    i8 1, label %182
    i8 2, label %201
  ]

169:                                              ; preds = %168
  br i1 %93, label %170, label %.thread538

170:                                              ; preds = %169
  %171 = zext nneg i8 %165 to i64
  %172 = getelementptr inbounds [4 x %struct.anon.29], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 %171
  %173 = load i16, ptr %172, align 2
  %174 = insertelement <2 x i16> poison, i16 %173, i64 0
  %175 = shufflevector <2 x i16> %174, <2 x i16> poison, <2 x i32> zeroinitializer
  %176 = shl <2 x i16> %175, <i16 14, i16 12>
  %177 = ashr <2 x i16> %176, <i16 14, i16 14>
  %178 = insertelement <2 x i16> poison, i16 %narrow, i64 0
  %179 = shufflevector <2 x i16> %178, <2 x i16> poison, <2 x i32> zeroinitializer
  %180 = mul <2 x i16> %177, %179
  %181 = add <2 x i16> %180, %141
  store <2 x i16> %181, ptr %12, align 8
  store i16 1, ptr %.sroa.5.0..sroa_idx, align 4
  store i16 1, ptr %.sroa.6123.0..sroa_idx, align 2, !tbaa !29
  br label %182

182:                                              ; preds = %170, %168
  %.0462 = phi i8 [ 0, %168 ], [ 1, %170 ]
  br i1 %94, label %183, label %.thread538

183:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  %184 = zext nneg i8 %165 to i64
  %185 = getelementptr inbounds [4 x %struct.anon.29], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 %184
  %186 = load i16, ptr %185, align 2
  %187 = insertelement <2 x i16> poison, i16 %186, i64 0
  %188 = shufflevector <2 x i16> %187, <2 x i16> poison, <2 x i32> zeroinitializer
  %189 = shl <2 x i16> %188, <i16 10, i16 8>
  %190 = ashr <2 x i16> %189, <i16 14, i16 14>
  %191 = insertelement <2 x i16> poison, i16 %narrow, i64 0
  %192 = shufflevector <2 x i16> %191, <2 x i16> poison, <2 x i32> zeroinitializer
  %193 = mul <2 x i16> %190, %192
  %194 = add <2 x i16> %193, %141
  store <2 x i16> %194, ptr %13, align 8, !tbaa !25
  store i16 1, ptr %95, align 4, !tbaa !30
  store i16 1, ptr %96, align 2, !tbaa !32
  %195 = trunc nuw i8 %.0462 to i1
  br i1 %195, label %196, label %198

196:                                              ; preds = %183
  %197 = load i64, ptr %13, align 8
  store i64 %197, ptr %12, align 8
  br label %200

198:                                              ; preds = %183
  %199 = call ptr @arm_2d_region_get_minimal_enclosure(ptr noundef nonnull %13, ptr noundef nonnull %12, ptr noundef nonnull %12) #7
  br label %200

200:                                              ; preds = %198, %196
  %.1463 = phi i8 [ 1, %196 ], [ %.0462, %198 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  br label %201

201:                                              ; preds = %200, %168
  %.2464 = phi i8 [ 0, %168 ], [ %.1463, %200 ]
  br i1 %97, label %202, label %.thread538

202:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %203 = zext nneg i8 %165 to i64
  %204 = getelementptr inbounds [4 x %struct.anon.29], ptr @progress_wheel_show.c_tQuadrantTable, i64 0, i64 %203
  %205 = load i16, ptr %204, align 2
  %206 = load <2 x i16>, ptr %11, align 4, !tbaa !25
  %207 = insertelement <2 x i16> poison, i16 %205, i64 0
  %208 = shufflevector <2 x i16> %207, <2 x i16> poison, <2 x i32> zeroinitializer
  %209 = shl <2 x i16> %208, <i16 6, i16 4>
  %210 = ashr <2 x i16> %209, <i16 14, i16 14>
  %211 = insertelement <2 x i16> poison, i16 %narrow, i64 0
  %212 = shufflevector <2 x i16> %211, <2 x i16> poison, <2 x i32> zeroinitializer
  %213 = mul <2 x i16> %210, %212
  %214 = add <2 x i16> %213, %206
  store <2 x i16> %214, ptr %14, align 8, !tbaa !25
  store i16 1, ptr %98, align 4, !tbaa !30
  store i16 1, ptr %99, align 2, !tbaa !32
  %215 = trunc nuw i8 %.2464 to i1
  br i1 %215, label %216, label %218

216:                                              ; preds = %202
  %217 = load i64, ptr %14, align 8
  store i64 %217, ptr %12, align 8
  br label %220

218:                                              ; preds = %202
  %219 = call ptr @arm_2d_region_get_minimal_enclosure(ptr noundef nonnull %14, ptr noundef nonnull %12, ptr noundef nonnull %12) #7
  br label %220

220:                                              ; preds = %218, %216
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br label %.thread538

221:                                              ; preds = %161
  switch i8 %151, label %.thread538 [
    i8 3, label %222
    i8 2, label %235
    i8 1, label %256
  ]

222:                                              ; preds = %221
  br i1 %87, label %223, label %.thread538

223:                                              ; preds = %222
  %224 = zext nneg i8 %165 to i64
  %225 = getelementptr inbounds [4 x %struct.anon.29], ptr getelementptr inbounds (i8, ptr @progress_wheel_show.c_tQuadrantTable, i64 8), i64 0, i64 %224
  %226 = load i16, ptr %225, align 2
  %227 = shl i16 %226, 2
  %228 = insertelement <2 x i16> poison, i16 %227, i64 0
  %229 = insertelement <2 x i16> %228, i16 %226, i64 1
  %230 = ashr <2 x i16> %229, <i16 14, i16 14>
  %231 = insertelement <2 x i16> poison, i16 %narrow, i64 0
  %232 = shufflevector <2 x i16> %231, <2 x i16> poison, <2 x i32> zeroinitializer
  %233 = mul <2 x i16> %230, %232
  %234 = add <2 x i16> %233, %141
  store <2 x i16> %234, ptr %12, align 8
  store i16 1, ptr %.sroa.5.0..sroa_idx, align 4
  store i16 1, ptr %.sroa.6123.0..sroa_idx, align 2, !tbaa !29
  br label %235

235:                                              ; preds = %223, %221
  %.3465 = phi i8 [ 0, %221 ], [ 1, %223 ]
  br i1 %86, label %236, label %.thread538

236:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %237 = zext nneg i8 %165 to i64
  %238 = getelementptr inbounds [4 x %struct.anon.29], ptr getelementptr inbounds (i8, ptr @progress_wheel_show.c_tQuadrantTable, i64 8), i64 0, i64 %237
  %239 = load i16, ptr %238, align 2
  %240 = insertelement <2 x i16> poison, i16 %239, i64 0
  %241 = shufflevector <2 x i16> %240, <2 x i16> poison, <2 x i32> zeroinitializer
  %242 = shl <2 x i16> %241, <i16 6, i16 4>
  %243 = ashr <2 x i16> %242, <i16 14, i16 14>
  %244 = insertelement <2 x i16> poison, i16 %narrow, i64 0
  %245 = shufflevector <2 x i16> %244, <2 x i16> poison, <2 x i32> zeroinitializer
  %246 = mul <2 x i16> %243, %245
  %247 = add <2 x i16> %246, %141
  store <2 x i16> %247, ptr %15, align 8, !tbaa !25
  store i16 1, ptr %88, align 4, !tbaa !30
  store i16 1, ptr %89, align 2, !tbaa !32
  %248 = trunc nuw i8 %.3465 to i1
  br i1 %248, label %249, label %252

249:                                              ; preds = %236
  %250 = load i64, ptr %15, align 8
  store i64 %250, ptr %12, align 8
  %251 = extractelement <2 x i16> %141, i64 1
  br label %.thread545

252:                                              ; preds = %236
  %253 = call ptr @arm_2d_region_get_minimal_enclosure(ptr noundef nonnull %15, ptr noundef nonnull %12, ptr noundef nonnull %12) #7
  %.pre606.pre = load i16, ptr %81, align 2, !tbaa !33
  br label %.thread545

.thread545:                                       ; preds = %249, %252
  %.pre606 = phi i16 [ %251, %249 ], [ %.pre606.pre, %252 ]
  %.4466 = phi i8 [ 1, %249 ], [ %.3465, %252 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  %.pre = load i16, ptr %11, align 4, !tbaa !35
  %254 = insertelement <2 x i16> poison, i16 %.pre, i64 0
  %255 = insertelement <2 x i16> %254, i16 %.pre606, i64 1
  br label %257

256:                                              ; preds = %221
  br i1 %86, label %._crit_edge, label %.thread538

._crit_edge:                                      ; preds = %256
  %.phi.trans.insert = zext nneg i8 %165 to i64
  %.phi.trans.insert604 = getelementptr inbounds [4 x %struct.anon.29], ptr getelementptr inbounds (i8, ptr @progress_wheel_show.c_tQuadrantTable, i64 8), i64 0, i64 %.phi.trans.insert
  %.pre605 = load i16, ptr %.phi.trans.insert604, align 2
  br label %257

257:                                              ; preds = %._crit_edge, %.thread545
  %258 = phi i16 [ %239, %.thread545 ], [ %.pre605, %._crit_edge ]
  %.5467547 = phi i8 [ %.4466, %.thread545 ], [ 0, %._crit_edge ]
  %259 = phi <2 x i16> [ %255, %.thread545 ], [ %141, %._crit_edge ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  %260 = insertelement <2 x i16> poison, i16 %258, i64 0
  %261 = shufflevector <2 x i16> %260, <2 x i16> poison, <2 x i32> zeroinitializer
  %262 = shl <2 x i16> %261, <i16 10, i16 8>
  %263 = ashr <2 x i16> %262, <i16 14, i16 14>
  %264 = insertelement <2 x i16> poison, i16 %narrow, i64 0
  %265 = shufflevector <2 x i16> %264, <2 x i16> poison, <2 x i32> zeroinitializer
  %266 = mul <2 x i16> %263, %265
  %267 = add <2 x i16> %266, %259
  store <2 x i16> %267, ptr %16, align 8, !tbaa !25
  store i16 1, ptr %90, align 4, !tbaa !30
  store i16 1, ptr %91, align 2, !tbaa !32
  %268 = trunc nuw i8 %.5467547 to i1
  br i1 %268, label %269, label %271

269:                                              ; preds = %257
  %270 = load i64, ptr %16, align 8
  store i64 %270, ptr %12, align 8
  br label %273

271:                                              ; preds = %257
  %272 = call ptr @arm_2d_region_get_minimal_enclosure(ptr noundef nonnull %16, ptr noundef nonnull %12, ptr noundef nonnull %12) #7
  br label %273

273:                                              ; preds = %271, %269
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  br label %.thread538

.thread538:                                       ; preds = %273, %256, %221, %235, %222, %220, %201, %168, %182, %169
  call void @arm_2d_helper_dirty_region_item_set_extra_region(ptr noundef nonnull %92, ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  br label %.thread533.thread570.sink.split

.thread554:                                       ; preds = %146, %.thread533.thread, %150
  call void @arm_2d_helper_dirty_region_item_set_extra_region(ptr noundef nonnull %92, ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef null) #7
  call void @arm_2d_dynamic_dirty_region_update(ptr noundef nonnull %100, ptr noundef nonnull %8, ptr noundef nonnull %10, i8 noundef zeroext 1) #7
  br label %.thread533.thread570.sink.split

.thread533.thread570.sink.split:                  ; preds = %160, %.thread538, %.thread554
  %.ph = phi i1 [ true, %.thread554 ], [ false, %.thread538 ], [ false, %160 ]
  %.8446551.ph = phi i8 [ 3, %.thread554 ], [ 2, %.thread538 ], [ 1, %160 ]
  store i8 %51, ptr %84, align 8, !tbaa !26
  br label %.thread533.thread570

.thread533.thread570:                             ; preds = %.thread533.thread570.sink.split, %146, %147, %143
  %274 = phi i1 [ false, %143 ], [ false, %147 ], [ false, %146 ], [ %.ph, %.thread533.thread570.sink.split ]
  %.8446551 = phi i8 [ 0, %143 ], [ 1, %147 ], [ %.0438, %146 ], [ %.8446551.ph, %.thread533.thread570.sink.split ]
  %275 = load i32, ptr %10, align 8, !tbaa !29
  %276 = load i16, ptr %79, align 4, !tbaa !29
  %277 = sext i16 %276 to i32
  %278 = add nsw i32 %277, 1
  %279 = lshr i32 %278, 1
  %280 = trunc i32 %279 to i16
  %281 = load i16, ptr %82, align 2, !tbaa !29
  %282 = sext i16 %281 to i32
  %283 = add nsw i32 %282, 1
  %284 = lshr i32 %283, 1
  %285 = trunc i32 %284 to i16
  %286 = load i16, ptr %101, align 4, !tbaa !29
  %287 = add i16 %286, %103
  %288 = load i16, ptr %104, align 2, !tbaa !29
  %289 = add i16 %77, %288
  %290 = load i16, ptr %48, align 4, !tbaa !24
  %291 = icmp sgt i16 %290, 899
  br i1 %291, label %292, label %.thread564.thread

292:                                              ; preds = %.thread533.thread570
  %293 = icmp eq i16 %290, 900
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #7
  store i32 %275, ptr %17, align 4, !tbaa !29
  store i16 %280, ptr %.sroa.9.0..sroa_idx98, align 4
  store i16 %285, ptr %.sroa.10.0..sroa_idx110, align 2, !tbaa !29
  %294 = load i32, ptr %52, align 8
  %295 = lshr i32 %294, 2
  %296 = and i32 %295, 3
  %297 = lshr i32 %275, 16
  %298 = trunc nuw i32 %297 to i16
  %299 = trunc i32 %275 to i16
  switch i32 %296, label %default.unreachable608 [
    i32 0, label %300
    i32 1, label %302
    i32 2, label %305
    i32 3, label %307
  ]

default.unreachable608:                           ; preds = %474, %442, %420, %387, %364, %331, %308, %292
  unreachable

300:                                              ; preds = %292
  %301 = add i16 %299, %280
  store i16 %301, ptr %17, align 4, !tbaa !29
  br label %307

302:                                              ; preds = %292
  %303 = add i16 %299, %280
  store i16 %303, ptr %17, align 4, !tbaa !29
  %304 = add i16 %298, %285
  store i16 %304, ptr %105, align 2, !tbaa !29
  br label %307

305:                                              ; preds = %292
  %306 = add i16 %298, %285
  store i16 %306, ptr %105, align 2, !tbaa !29
  br label %307

307:                                              ; preds = %305, %302, %300, %292
  br i1 %31, label %308, label %317

308:                                              ; preds = %307
  switch i32 %296, label %default.unreachable608 [
    i32 0, label %309
    i32 1, label %311
    i32 2, label %313
    i32 3, label %315
  ]

309:                                              ; preds = %308
  %310 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %17, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %329

311:                                              ; preds = %308
  %312 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %17, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %329

313:                                              ; preds = %308
  %314 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %17, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %329

315:                                              ; preds = %308
  %316 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %17, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %329

317:                                              ; preds = %307
  br i1 %5, label %318, label %326

318:                                              ; preds = %317
  %319 = mul nuw nsw i32 %296, 90
  %320 = add nuw nsw i32 %319, 90
  %321 = uitofp nneg i32 %320 to float
  %322 = fmul float %321, 0x400921FB40000000
  %323 = fdiv float %322, 1.800000e+02
  %324 = load float, ptr %25, align 8, !tbaa !5
  %.sroa.8.0.insert.ext = zext i16 %289 to i32
  %.sroa.8.0.insert.shift = shl nuw i32 %.sroa.8.0.insert.ext, 16
  %.sroa.060.0.insert.ext = zext i16 %287 to i32
  %.sroa.060.0.insert.insert = or disjoint i32 %.sroa.8.0.insert.shift, %.sroa.060.0.insert.ext
  %325 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef nonnull %106, ptr noundef nonnull %32, i32 %.sroa.060.0.insert.insert, float noundef %323, float noundef %324, i64 noundef %107, i8 noundef zeroext %4) #7
  br label %326

326:                                              ; preds = %318, %317
  %327 = call i32 @arm_2dp_tile_transform(ptr noundef nonnull %106, ptr noundef nonnull %8, ptr noundef nonnull %17, ptr noundef nonnull %11) #7
  %328 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef nonnull %106) #7
  br label %329

329:                                              ; preds = %326, %315, %313, %311, %309
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  %.pr = load i16, ptr %48, align 4, !tbaa !24
  %330 = icmp sgt i16 %.pr, 1799
  br i1 %330, label %331, label %.thread564

331:                                              ; preds = %329
  %332 = icmp eq i16 %.pr, 1800
  %spec.select510 = or i1 %332, %293
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  store i32 %275, ptr %18, align 4, !tbaa !29
  store i16 %280, ptr %.sroa.9.0..sroa_idx100, align 4
  store i16 %285, ptr %.sroa.10.0..sroa_idx112, align 2, !tbaa !29
  %333 = load i32, ptr %52, align 8
  %334 = lshr i32 %333, 2
  %335 = and i32 %334, 3
  switch i32 %335, label %default.unreachable608 [
    i32 0, label %336
    i32 1, label %349
    i32 2, label %363
    i32 3, label %356
  ]

336:                                              ; preds = %331
  %337 = load i16, ptr %79, align 4, !tbaa !29
  %338 = sext i16 %337 to i32
  %339 = add nsw i32 %338, 1
  %340 = lshr i32 %339, 1
  %341 = trunc i32 %340 to i16
  %342 = add i16 %299, %341
  store i16 %342, ptr %18, align 4, !tbaa !29
  %343 = load i16, ptr %82, align 2, !tbaa !29
  %344 = sext i16 %343 to i32
  %345 = add nsw i32 %344, 1
  %346 = lshr i32 %345, 1
  %347 = trunc i32 %346 to i16
  %348 = add i16 %298, %347
  store i16 %348, ptr %108, align 2, !tbaa !29
  br label %363

349:                                              ; preds = %331
  %350 = load i16, ptr %82, align 2, !tbaa !29
  %351 = sext i16 %350 to i32
  %352 = add nsw i32 %351, 1
  %353 = lshr i32 %352, 1
  %354 = trunc i32 %353 to i16
  %355 = add i16 %298, %354
  store i16 %355, ptr %108, align 2, !tbaa !29
  br label %363

356:                                              ; preds = %331
  %357 = load i16, ptr %79, align 4, !tbaa !29
  %358 = sext i16 %357 to i32
  %359 = add nsw i32 %358, 1
  %360 = lshr i32 %359, 1
  %361 = trunc i32 %360 to i16
  %362 = add i16 %299, %361
  store i16 %362, ptr %18, align 4, !tbaa !29
  br label %363

363:                                              ; preds = %356, %349, %336, %331
  br i1 %31, label %364, label %373

364:                                              ; preds = %363
  switch i32 %335, label %default.unreachable608 [
    i32 0, label %365
    i32 1, label %367
    i32 2, label %369
    i32 3, label %371
  ]

365:                                              ; preds = %364
  %366 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %18, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %385

367:                                              ; preds = %364
  %368 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %18, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %385

369:                                              ; preds = %364
  %370 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %18, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %385

371:                                              ; preds = %364
  %372 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %18, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %385

373:                                              ; preds = %363
  br i1 %5, label %374, label %382

374:                                              ; preds = %373
  %375 = mul nuw nsw i32 %335, 90
  %376 = add nuw nsw i32 %375, 180
  %377 = uitofp nneg i32 %376 to float
  %378 = fmul float %377, 0x400921FB40000000
  %379 = fdiv float %378, 1.800000e+02
  %380 = load float, ptr %25, align 8, !tbaa !5
  %.sroa.8.0.insert.ext78 = zext i16 %289 to i32
  %.sroa.8.0.insert.shift79 = shl nuw i32 %.sroa.8.0.insert.ext78, 16
  %.sroa.060.0.insert.ext62 = zext i16 %287 to i32
  %.sroa.060.0.insert.insert64 = or disjoint i32 %.sroa.8.0.insert.shift79, %.sroa.060.0.insert.ext62
  %381 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef nonnull %109, ptr noundef nonnull %32, i32 %.sroa.060.0.insert.insert64, float noundef %379, float noundef %380, i64 noundef %107, i8 noundef zeroext %4) #7
  br label %382

382:                                              ; preds = %374, %373
  %383 = call i32 @arm_2dp_tile_transform(ptr noundef nonnull %109, ptr noundef nonnull %8, ptr noundef nonnull %18, ptr noundef nonnull %11) #7
  %384 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef nonnull %109) #7
  br label %385

385:                                              ; preds = %382, %371, %369, %367, %365
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  %.pr559 = load i16, ptr %48, align 4, !tbaa !24
  %386 = icmp sgt i16 %.pr559, 2699
  br i1 %386, label %387, label %.thread564

387:                                              ; preds = %385
  %388 = icmp eq i16 %.pr559, 2700
  %spec.select511 = or i1 %388, %spec.select510
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #7
  store i32 %275, ptr %19, align 4, !tbaa !29
  store i16 %280, ptr %.sroa.9.0..sroa_idx102, align 4
  store i16 %285, ptr %.sroa.10.0..sroa_idx114, align 2, !tbaa !29
  %389 = load i32, ptr %52, align 8
  %390 = lshr i32 %389, 2
  %391 = and i32 %390, 3
  switch i32 %391, label %default.unreachable608 [
    i32 0, label %392
    i32 1, label %419
    i32 2, label %399
    i32 3, label %406
  ]

392:                                              ; preds = %387
  %393 = load i16, ptr %82, align 2, !tbaa !29
  %394 = sext i16 %393 to i32
  %395 = add nsw i32 %394, 1
  %396 = lshr i32 %395, 1
  %397 = trunc i32 %396 to i16
  %398 = add i16 %298, %397
  store i16 %398, ptr %110, align 2, !tbaa !29
  br label %419

399:                                              ; preds = %387
  %400 = load i16, ptr %79, align 4, !tbaa !29
  %401 = sext i16 %400 to i32
  %402 = add nsw i32 %401, 1
  %403 = lshr i32 %402, 1
  %404 = trunc i32 %403 to i16
  %405 = add i16 %299, %404
  store i16 %405, ptr %19, align 4, !tbaa !29
  br label %419

406:                                              ; preds = %387
  %407 = load i16, ptr %79, align 4, !tbaa !29
  %408 = sext i16 %407 to i32
  %409 = add nsw i32 %408, 1
  %410 = lshr i32 %409, 1
  %411 = trunc i32 %410 to i16
  %412 = add i16 %299, %411
  store i16 %412, ptr %19, align 4, !tbaa !29
  %413 = load i16, ptr %82, align 2, !tbaa !29
  %414 = sext i16 %413 to i32
  %415 = add nsw i32 %414, 1
  %416 = lshr i32 %415, 1
  %417 = trunc i32 %416 to i16
  %418 = add i16 %298, %417
  store i16 %418, ptr %110, align 2, !tbaa !29
  br label %419

419:                                              ; preds = %406, %399, %392, %387
  br i1 %31, label %420, label %429

420:                                              ; preds = %419
  switch i32 %391, label %default.unreachable608 [
    i32 0, label %421
    i32 1, label %423
    i32 2, label %425
    i32 3, label %427
  ]

421:                                              ; preds = %420
  %422 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %19, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %.thread561

423:                                              ; preds = %420
  %424 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %19, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %.thread561

425:                                              ; preds = %420
  %426 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %19, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %.thread561

427:                                              ; preds = %420
  %428 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %19, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %.thread561

429:                                              ; preds = %419
  br i1 %5, label %430, label %438

430:                                              ; preds = %429
  %431 = mul nuw nsw i32 %391, 90
  %432 = add nuw nsw i32 %431, 270
  %433 = uitofp nneg i32 %432 to float
  %434 = fmul float %433, 0x400921FB40000000
  %435 = fdiv float %434, 1.800000e+02
  %436 = load float, ptr %25, align 8, !tbaa !5
  %.sroa.8.0.insert.ext83 = zext i16 %289 to i32
  %.sroa.8.0.insert.shift84 = shl nuw i32 %.sroa.8.0.insert.ext83, 16
  %.sroa.060.0.insert.ext66 = zext i16 %287 to i32
  %.sroa.060.0.insert.insert68 = or disjoint i32 %.sroa.8.0.insert.shift84, %.sroa.060.0.insert.ext66
  %437 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef nonnull %111, ptr noundef nonnull %32, i32 %.sroa.060.0.insert.insert68, float noundef %435, float noundef %436, i64 noundef %107, i8 noundef zeroext %4) #7
  br label %438

438:                                              ; preds = %430, %429
  %439 = call i32 @arm_2dp_tile_transform(ptr noundef nonnull %111, ptr noundef nonnull %8, ptr noundef nonnull %19, ptr noundef nonnull %11) #7
  %440 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef nonnull %111) #7
  br label %.thread561

.thread561:                                       ; preds = %438, %427, %425, %423, %421
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #7
  %.pr563.pr = load i16, ptr %48, align 4, !tbaa !24
  %441 = icmp sgt i16 %.pr563.pr, 3599
  br i1 %441, label %442, label %.thread564

442:                                              ; preds = %.thread561
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  store i32 %275, ptr %20, align 4, !tbaa !29
  store i16 %280, ptr %.sroa.9.0..sroa_idx104, align 4
  store i16 %285, ptr %.sroa.10.0..sroa_idx116, align 2, !tbaa !29
  %443 = load i32, ptr %52, align 8
  %444 = lshr i32 %443, 2
  %445 = and i32 %444, 3
  switch i32 %445, label %default.unreachable608 [
    i32 0, label %473
    i32 1, label %446
    i32 2, label %453
    i32 3, label %466
  ]

446:                                              ; preds = %442
  %447 = load i16, ptr %79, align 4, !tbaa !29
  %448 = sext i16 %447 to i32
  %449 = add nsw i32 %448, 1
  %450 = lshr i32 %449, 1
  %451 = trunc i32 %450 to i16
  %452 = add i16 %299, %451
  store i16 %452, ptr %20, align 4, !tbaa !29
  br label %473

453:                                              ; preds = %442
  %454 = load i16, ptr %79, align 4, !tbaa !29
  %455 = sext i16 %454 to i32
  %456 = add nsw i32 %455, 1
  %457 = lshr i32 %456, 1
  %458 = trunc i32 %457 to i16
  %459 = add i16 %299, %458
  store i16 %459, ptr %20, align 4, !tbaa !29
  %460 = load i16, ptr %82, align 2, !tbaa !29
  %461 = sext i16 %460 to i32
  %462 = add nsw i32 %461, 1
  %463 = lshr i32 %462, 1
  %464 = trunc i32 %463 to i16
  %465 = add i16 %298, %464
  store i16 %465, ptr %116, align 2, !tbaa !29
  br label %473

466:                                              ; preds = %442
  %467 = load i16, ptr %82, align 2, !tbaa !29
  %468 = sext i16 %467 to i32
  %469 = add nsw i32 %468, 1
  %470 = lshr i32 %469, 1
  %471 = trunc i32 %470 to i16
  %472 = add i16 %298, %471
  store i16 %472, ptr %116, align 2, !tbaa !29
  br label %473

473:                                              ; preds = %466, %453, %446, %442
  br i1 %31, label %474, label %483

474:                                              ; preds = %473
  switch i32 %445, label %default.unreachable608 [
    i32 0, label %475
    i32 1, label %477
    i32 2, label %479
    i32 3, label %481
  ]

475:                                              ; preds = %474
  %476 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %20, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %.thread566

477:                                              ; preds = %474
  %478 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %20, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %.thread566

479:                                              ; preds = %474
  %480 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %20, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %.thread566

481:                                              ; preds = %474
  %482 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %20, ptr noundef nonnull %32, i16 %34, i8 noundef zeroext %4) #7
  br label %.thread566

483:                                              ; preds = %473
  br i1 %5, label %484, label %492

484:                                              ; preds = %483
  %485 = mul nuw nsw i32 %445, 90
  %486 = add nuw nsw i32 %485, 360
  %487 = uitofp nneg i32 %486 to float
  %488 = fmul float %487, 0x400921FB40000000
  %489 = fdiv float %488, 1.800000e+02
  %490 = load float, ptr %25, align 8, !tbaa !5
  %.sroa.8.0.insert.ext88 = zext i16 %289 to i32
  %.sroa.8.0.insert.shift89 = shl nuw i32 %.sroa.8.0.insert.ext88, 16
  %.sroa.060.0.insert.ext70 = zext i16 %287 to i32
  %.sroa.060.0.insert.insert72 = or disjoint i32 %.sroa.8.0.insert.shift89, %.sroa.060.0.insert.ext70
  %491 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef nonnull %111, ptr noundef nonnull %32, i32 %.sroa.060.0.insert.insert72, float noundef %489, float noundef %490, i64 noundef %107, i8 noundef zeroext %4) #7
  br label %492

492:                                              ; preds = %484, %483
  %493 = call i32 @arm_2dp_tile_transform(ptr noundef nonnull %111, ptr noundef nonnull %8, ptr noundef nonnull %20, ptr noundef nonnull %11) #7
  %494 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef nonnull %111) #7
  br label %.thread566

.thread566:                                       ; preds = %492, %481, %479, %477, %475
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  br label %539

.thread564:                                       ; preds = %329, %385, %.thread561
  %.10 = phi i1 [ %spec.select511, %.thread561 ], [ %spec.select510, %385 ], [ %293, %329 ]
  br i1 %.10, label %539, label %.thread564.thread

.thread564.thread:                                ; preds = %.thread533.thread570, %.thread564
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  store i32 %275, ptr %21, align 4, !tbaa !29
  store i16 %280, ptr %.sroa.9.0..sroa_idx106, align 4
  store i16 %285, ptr %.sroa.10.0..sroa_idx118, align 2, !tbaa !29
  %495 = load float, ptr %112, align 4, !tbaa !36
  %496 = fcmp olt float %495, 0x3FF921FB40000000
  %497 = lshr i32 %275, 16
  %498 = trunc nuw i32 %497 to i16
  %499 = trunc i32 %275 to i16
  br i1 %496, label %500, label %507

500:                                              ; preds = %.thread564.thread
  %501 = load i16, ptr %79, align 4, !tbaa !29
  %502 = sext i16 %501 to i32
  %503 = add nsw i32 %502, 1
  %504 = lshr i32 %503, 1
  %505 = trunc i32 %504 to i16
  %506 = add i16 %499, %505
  store i16 %506, ptr %21, align 4, !tbaa !29
  br label %531

507:                                              ; preds = %.thread564.thread
  %508 = fcmp olt float %495, 0x400921FB40000000
  br i1 %508, label %509, label %522

509:                                              ; preds = %507
  %510 = load i16, ptr %82, align 2, !tbaa !29
  %511 = sext i16 %510 to i32
  %512 = add nsw i32 %511, 1
  %513 = lshr i32 %512, 1
  %514 = trunc i32 %513 to i16
  %515 = add i16 %498, %514
  store i16 %515, ptr %113, align 2, !tbaa !29
  %516 = load i16, ptr %79, align 4, !tbaa !29
  %517 = sext i16 %516 to i32
  %518 = add nsw i32 %517, 1
  %519 = lshr i32 %518, 1
  %520 = trunc i32 %519 to i16
  %521 = add i16 %499, %520
  store i16 %521, ptr %21, align 4, !tbaa !29
  br label %531

522:                                              ; preds = %507
  %523 = fcmp olt float %495, 0x4012D97C80000000
  br i1 %523, label %524, label %531

524:                                              ; preds = %522
  %525 = load i16, ptr %82, align 2, !tbaa !29
  %526 = sext i16 %525 to i32
  %527 = add nsw i32 %526, 1
  %528 = lshr i32 %527, 1
  %529 = trunc i32 %528 to i16
  %530 = add i16 %498, %529
  store i16 %530, ptr %113, align 2, !tbaa !29
  br label %531

531:                                              ; preds = %509, %524, %522, %500
  br i1 %5, label %532, label %536

532:                                              ; preds = %531
  %533 = load float, ptr %25, align 8, !tbaa !5
  %534 = call float @llvm.fmuladd.f32(float %115, float 0x3F689374C0000000, float %533)
  %.sroa.8.0.insert.ext93 = zext i16 %289 to i32
  %.sroa.8.0.insert.shift94 = shl nuw i32 %.sroa.8.0.insert.ext93, 16
  %.sroa.060.0.insert.ext74 = zext i16 %287 to i32
  %.sroa.060.0.insert.insert76 = or disjoint i32 %.sroa.8.0.insert.shift94, %.sroa.060.0.insert.ext74
  %535 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef nonnull %114, ptr noundef nonnull %32, i32 %.sroa.060.0.insert.insert76, float noundef %495, float noundef %534, i64 noundef %107, i8 noundef zeroext %4) #7
  br label %536

536:                                              ; preds = %532, %531
  %537 = call i32 @arm_2dp_tile_transform(ptr noundef nonnull %114, ptr noundef nonnull %8, ptr noundef nonnull %21, ptr noundef nonnull %11) #7
  %538 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef nonnull %114) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  br label %539

539:                                              ; preds = %.thread566, %.thread564, %536
  %540 = load ptr, ptr %117, align 8, !tbaa !37
  %.not496 = icmp eq ptr %540, null
  br i1 %.not496, label %.critedge505, label %541

541:                                              ; preds = %539
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #7
  store i32 %275, ptr %22, align 4, !tbaa !29
  store i16 %280, ptr %.sroa.9.0..sroa_idx108, align 4
  store i16 %285, ptr %.sroa.10.0..sroa_idx120, align 2, !tbaa !29
  %542 = getelementptr inbounds i8, ptr %540, i64 8
  %543 = load i16, ptr %542, align 4, !tbaa !29
  %544 = sext i16 %543 to i32
  %545 = add nsw i32 %544, 1
  %546 = lshr i32 %545, 1
  %547 = load i16, ptr %104, align 2, !tbaa !29
  %548 = add i16 %547, -1
  %549 = load i32, ptr %52, align 8
  %550 = and i32 %549, 2
  %.not497 = icmp eq i32 %550, 0
  %551 = trunc i32 %275 to i16
  %552 = lshr i32 %275, 16
  %553 = trunc nuw i32 %552 to i16
  br i1 %.not497, label %554, label %576

554:                                              ; preds = %541
  br i1 %31, label %555, label %564

555:                                              ; preds = %554
  %.neg498574 = sdiv i16 %543, -2
  %556 = add i16 %.neg498574, %280
  %557 = add i16 %556, %551
  store i16 %557, ptr %22, align 4, !tbaa !29
  %558 = add i16 %553, 1
  store i16 %558, ptr %120, align 2, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #7
  store i8 4, ptr %23, align 8
  %559 = sdiv i16 %543, 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(7) %121, i8 0, i64 7, i1 false)
  store i16 %559, ptr %122, align 8, !tbaa !30
  %560 = getelementptr inbounds i8, ptr %540, i64 10
  %561 = load i16, ptr %560, align 2, !tbaa !29
  store i16 %561, ptr %123, align 2, !tbaa !32
  store ptr %540, ptr %124, align 8, !tbaa !29
  %562 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef null, ptr noundef nonnull %8, ptr noundef nonnull %22, ptr noundef nonnull %23, i16 %34, i8 noundef zeroext %4) #7
  %563 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #7
  br label %576

564:                                              ; preds = %554
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #7
  %565 = load i32, ptr %11, align 4
  store i32 %565, ptr %24, align 4
  %566 = lshr i32 %565, 16
  %567 = trunc nuw i32 %566 to i16
  %568 = add i16 %567, 1
  store i16 %568, ptr %118, align 2, !tbaa !33
  br i1 %5, label %569, label %573

569:                                              ; preds = %564
  %570 = load float, ptr %25, align 8, !tbaa !5
  %571 = fadd float %570, 0xBF60624DE0000000
  %.sroa.6.0.insert.ext = zext i16 %548 to i32
  %.sroa.6.0.insert.shift = shl nuw i32 %.sroa.6.0.insert.ext, 16
  %.sroa.012.0.insert.ext = and i32 %546, 65535
  %.sroa.012.0.insert.insert = or disjoint i32 %.sroa.6.0.insert.shift, %.sroa.012.0.insert.ext
  %572 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef nonnull %119, ptr noundef nonnull %540, i32 %.sroa.012.0.insert.insert, float noundef 0.000000e+00, float noundef %571, i64 noundef %107, i8 noundef zeroext %4) #7
  br label %573

573:                                              ; preds = %569, %564
  %574 = call i32 @arm_2dp_tile_transform(ptr noundef nonnull %119, ptr noundef nonnull %8, ptr noundef nonnull %22, ptr noundef nonnull %24) #7
  %575 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef nonnull %119) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #7
  br label %576

576:                                              ; preds = %555, %573, %541
  br i1 %5, label %577, label %585

577:                                              ; preds = %576
  %578 = load i32, ptr %52, align 8
  %579 = trunc i32 %578 to i8
  %580 = lshr i8 %579, 1
  %581 = and i8 %580, 1
  %.512 = add nsw i8 %581, -1
  %582 = load float, ptr %112, align 4, !tbaa !36
  %583 = load float, ptr %25, align 8, !tbaa !5
  %.sroa.6.0.insert.ext22 = zext i16 %548 to i32
  %.sroa.6.0.insert.shift23 = shl nuw i32 %.sroa.6.0.insert.ext22, 16
  %.sroa.012.0.insert.ext14 = and i32 %546, 65535
  %.sroa.012.0.insert.insert16 = or disjoint i32 %.sroa.6.0.insert.shift23, %.sroa.012.0.insert.ext14
  %584 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef nonnull %125, ptr noundef nonnull %540, i32 %.sroa.012.0.insert.insert16, float noundef %582, float noundef %583, i64 noundef %107, i8 noundef zeroext %.512) #7
  br label %585

585:                                              ; preds = %577, %576
  %586 = call i32 @arm_2dp_tile_transform(ptr noundef nonnull %125, ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #7
  %587 = load i32, ptr %52, align 8
  %588 = and i32 %587, 1
  %.not500 = icmp eq i32 %588, 0
  br i1 %.not500, label %598, label %589

589:                                              ; preds = %585
  store i16 -1, ptr %127, align 8, !tbaa !29
  store i16 1, ptr %128, align 4, !tbaa !29
  br i1 %5, label %590, label %597

590:                                              ; preds = %589
  %591 = icmp eq i8 %.8446551, 2
  %592 = and i32 %587, 2
  %593 = icmp ne i32 %592, 0
  %594 = or i1 %591, %593
  %595 = call zeroext i1 @arm_2d_helper_dirty_region_transform_force_to_use_minimal_enclosure(ptr noundef nonnull %126, i1 noundef zeroext %594) #7
  %596 = call zeroext i1 @arm_2d_helper_dirty_region_transform_suspend_update(ptr noundef nonnull %126, i1 noundef zeroext %274) #7
  br label %597

597:                                              ; preds = %590, %589
  call void @arm_2d_helper_dirty_region_transform_update(ptr noundef nonnull %126, ptr noundef nonnull %10, i1 noundef zeroext %5) #7
  br label %598

598:                                              ; preds = %597, %585
  %599 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef nonnull %125) #7
  %600 = load i16, ptr %129, align 2, !tbaa !38
  %601 = load i16, ptr %33, align 4, !tbaa !21
  %.not501 = icmp eq i16 %600, %601
  br i1 %.not501, label %615, label %602

602:                                              ; preds = %598
  br i1 %5, label %603, label %612

603:                                              ; preds = %602
  %604 = sitofp i16 %548 to float
  %605 = fmul float %604, 0x3FF3C28F60000000
  %606 = fptosi float %605 to i16
  %607 = load float, ptr %112, align 4, !tbaa !36
  %608 = load float, ptr %25, align 8, !tbaa !5
  %609 = fmul float %608, 0x3FE9374BC0000000
  %610 = zext i16 %600 to i64
  %.sroa.6.0.insert.ext27 = zext i16 %606 to i32
  %.sroa.6.0.insert.shift28 = shl nuw i32 %.sroa.6.0.insert.ext27, 16
  %.sroa.012.0.insert.ext18 = and i32 %546, 65535
  %.sroa.012.0.insert.insert20 = or disjoint i32 %.sroa.6.0.insert.shift28, %.sroa.012.0.insert.ext18
  %611 = call i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef nonnull %130, ptr noundef nonnull %540, i32 %.sroa.012.0.insert.insert20, float noundef %607, float noundef %609, i64 noundef %610, i8 noundef zeroext -1) #7
  br label %612

612:                                              ; preds = %603, %602
  %613 = call i32 @arm_2dp_tile_transform(ptr noundef nonnull %130, ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #7
  %614 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef nonnull %130) #7
  br label %615

615:                                              ; preds = %612, %598
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #7
  br label %.critedge505

.critedge505:                                     ; preds = %615, %539
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #7
  %616 = call zeroext i1 @arm_2d_op_wait_async(ptr noundef null) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden signext i16 @reinterpret_s16_q16(i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @mul_n_q16(i32 noundef, i32 noundef) local_unnamed_addr #4

declare zeroext i8 @arm_2d_dynamic_dirty_region_wait_next(ptr noundef) local_unnamed_addr #5

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

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

declare void @arm_2d_helper_dirty_region_item_set_extra_region(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

declare ptr @arm_2d_region_get_minimal_enclosure(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

declare void @arm_2d_dynamic_dirty_region_update(ptr noundef, ptr noundef, ptr noundef, i8 noundef zeroext) local_unnamed_addr #5

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_x_mirror_and_opacity(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i16, i8 noundef zeroext) local_unnamed_addr #5

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_xy_mirror_and_opacity(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i16, i8 noundef zeroext) local_unnamed_addr #5

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_y_mirror_and_opacity(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i16, i8 noundef zeroext) local_unnamed_addr #5

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_and_opacity(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i16, i8 noundef zeroext) local_unnamed_addr #5

declare i32 @arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare(ptr noundef, ptr noundef, i32, float noundef, float noundef, i64 noundef, i8 noundef zeroext) local_unnamed_addr #5

declare i32 @arm_2dp_tile_transform(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

declare zeroext i1 @arm_2d_helper_dirty_region_transform_force_to_use_minimal_enclosure(ptr noundef, i1 noundef zeroext) local_unnamed_addr #5

declare zeroext i1 @arm_2d_helper_dirty_region_transform_suspend_update(ptr noundef, i1 noundef zeroext) local_unnamed_addr #5

declare void @arm_2d_helper_dirty_region_transform_update(ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #5

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i8 @llvm.abs.i8(i8, i1 immarg) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i16 @llvm.abs.i16(i16, i1 immarg) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #6

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { inlinehint 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 #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !14, i64 40}
!6 = !{!"progress_wheel_t", !7, i64 0}
!7 = !{!"", !8, i64 0, !9, i64 32, !14, i64 40, !14, i64 44, !10, i64 48, !15, i64 1336, !18, i64 1456, !19, i64 1488, !10, i64 1512, !12, i64 1514, !12, i64 1516, !12, i64 1518, !13, i64 1520}
!8 = !{!"progress_wheel_cfg_t", !9, i64 0, !9, i64 8, !12, i64 16, !12, i64 18, !12, i64 20, !12, i64 22, !13, i64 24, !13, i64 24, !13, i64 24, !13, i64 26}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C/C++ TBAA"}
!12 = !{!"short", !10, i64 0}
!13 = !{!"int", !10, i64 0}
!14 = !{!"float", !10, i64 0}
!15 = !{!"arm_2d_helper_dirty_region_transform_t", !14, i64 0, !10, i64 4, !14, i64 8, !16, i64 16, !10, i64 72}
!16 = !{!"arm_2d_helper_dirty_region_item_t", !10, i64 0, !17, i64 48}
!17 = !{!"arm_2d_region_t", !10, i64 0, !10, i64 4}
!18 = !{!"arm_2d_region_list_item_t", !9, i64 0, !10, i64 8, !17, i64 16, !10, i64 24}
!19 = !{!"arm_2d_tile_t", !10, i64 0, !10, i64 4, !10, i64 16}
!20 = !{!6, !9, i64 0}
!21 = !{!6, !12, i64 20}
!22 = !{!6, !13, i64 1520}
!23 = !{!6, !12, i64 1518}
!24 = !{!6, !12, i64 1516}
!25 = !{!12, !12, i64 0}
!26 = !{!6, !10, i64 1512}
!27 = !{!6, !12, i64 1514}
!28 = !{!6, !12, i64 16}
!29 = !{!10, !10, i64 0}
!30 = !{!31, !12, i64 0}
!31 = !{!"arm_2d_size_t", !12, i64 0, !12, i64 2}
!32 = !{!31, !12, i64 2}
!33 = !{!34, !12, i64 2}
!34 = !{!"arm_2d_location_t", !12, i64 0, !12, i64 2}
!35 = !{!34, !12, i64 0}
!36 = !{!6, !14, i64 44}
!37 = !{!6, !9, i64 8}
!38 = !{!6, !12, i64 22}


; Effective O3 passes: AggressiveInstCombinePass,BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass