; LLVM IR from jingweizhanghuai/Morn :: src/image (morn_image_transform)

; 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.MImagePoint = type { float, float }
%struct.MImageRect = type { i32, i32, i32, i32 }
%struct.MImage = type { i32, i32, i32, [4 x ptr], ptr }
%struct.MHandle = type { i32, i32, ptr, ptr }
%struct.HandleImageRotate = type { i32, i32, %struct.MImagePoint, %struct.MImagePoint, float, ptr, ptr, ptr }
%struct.MTable = type { i32, i32, i32, %union.anon }
%union.anon = type { ptr }

@.str = external hidden unnamed_addr constant [88 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@__FUNCTION__.mImageRotate = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [14 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @TransformGrid(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @GridInterpolation(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #0

declare void @m_Exception(i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ...) #3

declare ptr @ImageCreate(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #3

declare void @ImageRedefine(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #3

declare ptr @GetHandle(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #3

declare ptr @TableCreate(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #3

declare void @TableRedefine(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #3

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

declare void @HandleExchange(ptr noundef, ptr noundef) #3

declare void @mImageRelease(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local float @Affine_x(i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local float @Affine_y(i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @ImageRotate90(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @ImageRotate180(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @ImageRotate270(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @endImageRotate(ptr noundef) #0

; Function Attrs: nounwind uwtable
define dso_local void @mImageRotate(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, float noundef %4, i32 noundef %5) #0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca float, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i64, align 8
  %21 = alloca %struct.MImagePoint, align 4
  %22 = alloca %struct.MImageRect, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca %struct.MImagePoint, align 4
  %26 = alloca %struct.MImageRect, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca ptr, align 8
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca %struct.MImage, align 8
  %43 = alloca %struct.MImage, align 8
  %44 = alloca %struct.MImage, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca [6 x float], align 16
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca %struct.MImage, align 8
  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 ptr %3, ptr %10, align 8, !tbaa !5
  store float %4, ptr %11, align 4, !tbaa !9
  store i32 %5, ptr %12, align 4, !tbaa !11
  br label %55

55:                                               ; preds = %6
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  %57 = icmp eq ptr %56, null
  br i1 %57, label %62, label %58

58:                                               ; preds = %55
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = ptrtoint ptr %59 to i64
  %61 = icmp eq i64 %60, -1
  br i1 %61, label %62, label %63

62:                                               ; preds = %58, %55
  br label %92

63:                                               ; preds = %58
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.MImage, ptr %64, i32 0, i32 3
  %66 = getelementptr inbounds [4 x ptr], ptr %65, i64 0, i64 0
  %67 = icmp eq ptr %66, null
  br i1 %67, label %89, label %68

68:                                               ; preds = %63
  %69 = load ptr, ptr %7, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.MImage, ptr %69, i32 0, i32 3
  %71 = getelementptr inbounds [4 x ptr], ptr %70, i64 0, i64 0
  %72 = ptrtoint ptr %71 to i64
  %73 = icmp eq i64 %72, -1
  br i1 %73, label %89, label %74

74:                                               ; preds = %68
  %75 = load ptr, ptr %7, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.MImage, ptr %75, i32 0, i32 0
  %77 = load i32, ptr %76, align 8, !tbaa !13
  %78 = icmp sle i32 %77, 0
  br i1 %78, label %89, label %79

79:                                               ; preds = %74
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.MImage, ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 4, !tbaa !15
  %83 = icmp sle i32 %82, 0
  br i1 %83, label %89, label %84

84:                                               ; preds = %79
  %85 = load ptr, ptr %7, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.MImage, ptr %85, i32 0, i32 2
  %87 = load i32, ptr %86, align 8, !tbaa !16
  %88 = icmp sle i32 %87, 0
  br label %89

89:                                               ; preds = %84, %79, %74, %68, %63
  %90 = phi i1 [ true, %79 ], [ true, %74 ], [ true, %68 ], [ true, %63 ], [ %88, %84 ]
  %91 = zext i1 %90 to i32
  br label %92

92:                                               ; preds = %89, %62
  %93 = phi i32 [ 1, %62 ], [ %91, %89 ]
  store i32 %93, ptr %13, align 4, !tbaa !11
  %94 = load i32, ptr %13, align 4, !tbaa !11
  %95 = icmp ne i32 %94, 0
  br i1 %95, label %96, label %98

96:                                               ; preds = %92
  %97 = load i32, ptr %13, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %97, i32 noundef -1, ptr noundef @.str, i32 noundef 544, ptr noundef @__FUNCTION__.mImageRotate, ptr noundef @.str.4)
  br label %98

98:                                               ; preds = %96, %92
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %99

99:                                               ; preds = %98
  %100 = load ptr, ptr %8, align 8, !tbaa !5
  %101 = icmp eq ptr %100, null
  br i1 %101, label %106, label %102

102:                                              ; preds = %99
  %103 = load ptr, ptr %8, align 8, !tbaa !5
  %104 = ptrtoint ptr %103 to i64
  %105 = icmp eq i64 %104, -1
  br i1 %105, label %106, label %108

106:                                              ; preds = %102, %99
  %107 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %107, ptr %8, align 8, !tbaa !5
  br label %108

108:                                              ; preds = %106, %102
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %109 = load ptr, ptr %9, align 8, !tbaa !5
  %110 = icmp eq ptr %109, null
  br i1 %110, label %111, label %122

111:                                              ; preds = %108
  %112 = load ptr, ptr %7, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.MImage, ptr %112, i32 0, i32 2
  %114 = load i32, ptr %113, align 8, !tbaa !16
  %115 = sitofp i32 %114 to float
  %116 = fdiv float %115, 2.000000e+00
  store float %116, ptr %14, align 4, !tbaa !9
  %117 = load ptr, ptr %7, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.MImage, ptr %117, i32 0, i32 1
  %119 = load i32, ptr %118, align 4, !tbaa !15
  %120 = sitofp i32 %119 to float
  %121 = fdiv float %120, 2.000000e+00
  store float %121, ptr %15, align 4, !tbaa !9
  br label %129

122:                                              ; preds = %108
  %123 = load ptr, ptr %9, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.MImagePoint, ptr %123, i32 0, i32 0
  %125 = load float, ptr %124, align 4, !tbaa !17
  store float %125, ptr %14, align 4, !tbaa !9
  %126 = load ptr, ptr %9, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.MImagePoint, ptr %126, i32 0, i32 1
  %128 = load float, ptr %127, align 4, !tbaa !19
  store float %128, ptr %15, align 4, !tbaa !9
  br label %129

129:                                              ; preds = %122, %111
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %130 = load ptr, ptr %8, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.MImage, ptr %130, i32 0, i32 1
  %132 = load i32, ptr %131, align 4, !tbaa !15
  store i32 %132, ptr %18, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %133 = load ptr, ptr %8, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.MImage, ptr %133, i32 0, i32 2
  %135 = load i32, ptr %134, align 8, !tbaa !16
  store i32 %135, ptr %19, align 4, !tbaa !11
  %136 = load float, ptr %11, align 4, !tbaa !9
  %137 = fcmp oeq float %136, 0.000000e+00
  br i1 %137, label %138, label %521

138:                                              ; preds = %129
  br label %139

139:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %140 = load ptr, ptr %8, align 8, !tbaa !5
  %141 = ptrtoint ptr %140 to i64
  store i64 %141, ptr %20, align 8, !tbaa !20
  %142 = load ptr, ptr %8, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.MImage, ptr %142, i64 1
  %144 = ptrtoint ptr %143 to i64
  %145 = load i64, ptr %20, align 8, !tbaa !20
  %146 = add i64 %145, 56
  %147 = icmp eq i64 %144, %146
  br i1 %147, label %148, label %342

148:                                              ; preds = %139
  br label %149

149:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  store i32 4, ptr %23, align 4, !tbaa !11
  %150 = load i32, ptr %23, align 4, !tbaa !11
  %151 = icmp eq i32 %150, 1
  br i1 %151, label %152, label %163

152:                                              ; preds = %149
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = load float, ptr %14, align 4, !tbaa !9
  %156 = load i32, ptr %19, align 4, !tbaa !11
  %157 = sdiv i32 %156, 2
  %158 = sitofp i32 %157 to float
  %159 = fsub float %155, %158
  %160 = fadd float %159, 0.000000e+00
  %161 = fptosi float %160 to i64
  %162 = inttoptr i64 %161 to ptr
  call void @m_ImageCut(ptr noundef %153, ptr noundef %154, ptr noundef %162, ptr noundef null)
  br label %339

163:                                              ; preds = %149
  %164 = load i32, ptr %23, align 4, !tbaa !11
  %165 = icmp eq i32 %164, 2
  br i1 %165, label %166, label %184

166:                                              ; preds = %163
  %167 = load ptr, ptr %7, align 8, !tbaa !5
  %168 = load ptr, ptr %8, align 8, !tbaa !5
  %169 = load float, ptr %14, align 4, !tbaa !9
  %170 = load i32, ptr %19, align 4, !tbaa !11
  %171 = sdiv i32 %170, 2
  %172 = sitofp i32 %171 to float
  %173 = fsub float %169, %172
  %174 = fadd float %173, 0.000000e+00
  %175 = fptosi float %174 to i64
  %176 = inttoptr i64 %175 to ptr
  %177 = load float, ptr %14, align 4, !tbaa !9
  %178 = load i32, ptr %19, align 4, !tbaa !11
  %179 = sdiv i32 %178, 2
  %180 = sitofp i32 %179 to float
  %181 = fadd float %177, %180
  %182 = fptosi float %181 to i64
  %183 = inttoptr i64 %182 to ptr
  call void @m_ImageCut(ptr noundef %167, ptr noundef %168, ptr noundef %176, ptr noundef %183)
  br label %338

184:                                              ; preds = %163
  %185 = load i32, ptr %23, align 4, !tbaa !11
  %186 = icmp eq i32 %185, 3
  br i1 %186, label %187, label %212

187:                                              ; preds = %184
  %188 = load float, ptr %14, align 4, !tbaa !9
  %189 = load i32, ptr %19, align 4, !tbaa !11
  %190 = sdiv i32 %189, 2
  %191 = sitofp i32 %190 to float
  %192 = fadd float %188, %191
  %193 = fptosi float %192 to i64
  %194 = sitofp i64 %193 to float
  %195 = getelementptr inbounds %struct.MImagePoint, ptr %21, i32 0, i32 0
  store float %194, ptr %195, align 4, !tbaa !17
  %196 = load float, ptr %15, align 4, !tbaa !9
  %197 = load i32, ptr %18, align 4, !tbaa !11
  %198 = sdiv i32 %197, 2
  %199 = sitofp i32 %198 to float
  %200 = fsub float %196, %199
  %201 = getelementptr inbounds %struct.MImagePoint, ptr %21, i32 0, i32 1
  store float %200, ptr %201, align 4, !tbaa !19
  %202 = load ptr, ptr %7, align 8, !tbaa !5
  %203 = load ptr, ptr %8, align 8, !tbaa !5
  %204 = load float, ptr %14, align 4, !tbaa !9
  %205 = load i32, ptr %19, align 4, !tbaa !11
  %206 = sdiv i32 %205, 2
  %207 = sitofp i32 %206 to float
  %208 = fsub float %204, %207
  %209 = fadd float %208, 0.000000e+00
  %210 = fptosi float %209 to i64
  %211 = inttoptr i64 %210 to ptr
  call void @m_ImageCut(ptr noundef %202, ptr noundef %203, ptr noundef %211, ptr noundef %21)
  br label %337

212:                                              ; preds = %184
  %213 = load i32, ptr %23, align 4, !tbaa !11
  %214 = icmp eq i32 %213, 4
  br i1 %214, label %215, label %249

215:                                              ; preds = %212
  %216 = load float, ptr %14, align 4, !tbaa !9
  %217 = load i32, ptr %19, align 4, !tbaa !11
  %218 = sdiv i32 %217, 2
  %219 = sitofp i32 %218 to float
  %220 = fsub float %216, %219
  %221 = fadd float %220, 0.000000e+00
  %222 = fptosi float %221 to i64
  %223 = trunc i64 %222 to i32
  %224 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 0
  store i32 %223, ptr %224, align 4, !tbaa !22
  %225 = load float, ptr %14, align 4, !tbaa !9
  %226 = load i32, ptr %19, align 4, !tbaa !11
  %227 = sdiv i32 %226, 2
  %228 = sitofp i32 %227 to float
  %229 = fadd float %225, %228
  %230 = fptosi float %229 to i64
  %231 = trunc i64 %230 to i32
  %232 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 1
  store i32 %231, ptr %232, align 4, !tbaa !24
  %233 = load float, ptr %15, align 4, !tbaa !9
  %234 = load i32, ptr %18, align 4, !tbaa !11
  %235 = sdiv i32 %234, 2
  %236 = sitofp i32 %235 to float
  %237 = fsub float %233, %236
  %238 = fptosi float %237 to i32
  %239 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 2
  store i32 %238, ptr %239, align 4, !tbaa !25
  %240 = load float, ptr %15, align 4, !tbaa !9
  %241 = load i32, ptr %18, align 4, !tbaa !11
  %242 = sdiv i32 %241, 2
  %243 = sitofp i32 %242 to float
  %244 = fadd float %240, %243
  %245 = fptosi float %244 to i32
  %246 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 3
  store i32 %245, ptr %246, align 4, !tbaa !26
  %247 = load ptr, ptr %7, align 8, !tbaa !5
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  call void @m_ImageCut(ptr noundef %247, ptr noundef %248, ptr noundef %22, ptr noundef null)
  br label %336

249:                                              ; preds = %212
  %250 = load i32, ptr %23, align 4, !tbaa !11
  %251 = icmp eq i32 %250, 5
  br i1 %251, label %252, label %286

252:                                              ; preds = %249
  %253 = load float, ptr %14, align 4, !tbaa !9
  %254 = load i32, ptr %19, align 4, !tbaa !11
  %255 = sdiv i32 %254, 2
  %256 = sitofp i32 %255 to float
  %257 = fsub float %253, %256
  %258 = fadd float %257, 0.000000e+00
  %259 = fptosi float %258 to i64
  %260 = trunc i64 %259 to i32
  %261 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 0
  store i32 %260, ptr %261, align 4, !tbaa !22
  %262 = load float, ptr %14, align 4, !tbaa !9
  %263 = load i32, ptr %19, align 4, !tbaa !11
  %264 = sdiv i32 %263, 2
  %265 = sitofp i32 %264 to float
  %266 = fadd float %262, %265
  %267 = fptosi float %266 to i64
  %268 = trunc i64 %267 to i32
  %269 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 1
  store i32 %268, ptr %269, align 4, !tbaa !24
  %270 = load float, ptr %15, align 4, !tbaa !9
  %271 = load i32, ptr %18, align 4, !tbaa !11
  %272 = sdiv i32 %271, 2
  %273 = sitofp i32 %272 to float
  %274 = fsub float %270, %273
  %275 = fptosi float %274 to i32
  %276 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 2
  store i32 %275, ptr %276, align 4, !tbaa !25
  %277 = load float, ptr %15, align 4, !tbaa !9
  %278 = load i32, ptr %18, align 4, !tbaa !11
  %279 = sdiv i32 %278, 2
  %280 = sitofp i32 %279 to float
  %281 = fadd float %277, %280
  %282 = fptosi float %281 to i32
  %283 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 3
  store i32 %282, ptr %283, align 4, !tbaa !26
  %284 = load ptr, ptr %7, align 8, !tbaa !5
  %285 = load ptr, ptr %8, align 8, !tbaa !5
  call void @m_ImageCut(ptr noundef %284, ptr noundef %285, ptr noundef %22, ptr noundef inttoptr (i64 -1 to ptr))
  br label %335

286:                                              ; preds = %249
  %287 = load i32, ptr %23, align 4, !tbaa !11
  %288 = icmp eq i32 %287, 6
  br i1 %288, label %289, label %325

289:                                              ; preds = %286
  %290 = load float, ptr %14, align 4, !tbaa !9
  %291 = load i32, ptr %19, align 4, !tbaa !11
  %292 = sdiv i32 %291, 2
  %293 = sitofp i32 %292 to float
  %294 = fsub float %290, %293
  %295 = fadd float %294, 0.000000e+00
  %296 = fptosi float %295 to i64
  %297 = trunc i64 %296 to i32
  %298 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 0
  store i32 %297, ptr %298, align 4, !tbaa !22
  %299 = load float, ptr %14, align 4, !tbaa !9
  %300 = load i32, ptr %19, align 4, !tbaa !11
  %301 = sdiv i32 %300, 2
  %302 = sitofp i32 %301 to float
  %303 = fadd float %299, %302
  %304 = fptosi float %303 to i64
  %305 = trunc i64 %304 to i32
  %306 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 1
  store i32 %305, ptr %306, align 4, !tbaa !24
  %307 = load float, ptr %15, align 4, !tbaa !9
  %308 = load i32, ptr %18, align 4, !tbaa !11
  %309 = sdiv i32 %308, 2
  %310 = sitofp i32 %309 to float
  %311 = fsub float %307, %310
  %312 = fptosi float %311 to i32
  %313 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 2
  store i32 %312, ptr %313, align 4, !tbaa !25
  %314 = load float, ptr %15, align 4, !tbaa !9
  %315 = load i32, ptr %18, align 4, !tbaa !11
  %316 = sdiv i32 %315, 2
  %317 = sitofp i32 %316 to float
  %318 = fadd float %314, %317
  %319 = fptosi float %318 to i32
  %320 = getelementptr inbounds %struct.MImageRect, ptr %22, i32 0, i32 3
  store i32 %319, ptr %320, align 4, !tbaa !26
  %321 = getelementptr inbounds %struct.MImagePoint, ptr %21, i32 0, i32 0
  store float -1.000000e+00, ptr %321, align 4, !tbaa !17
  %322 = getelementptr inbounds %struct.MImagePoint, ptr %21, i32 0, i32 1
  store float -1.000000e+00, ptr %322, align 4, !tbaa !19
  %323 = load ptr, ptr %7, align 8, !tbaa !5
  %324 = load ptr, ptr %8, align 8, !tbaa !5
  call void @m_ImageCut(ptr noundef %323, ptr noundef %324, ptr noundef %22, ptr noundef %21)
  br label %334

325:                                              ; preds = %286
  br label %326

326:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 1, ptr %24, align 4, !tbaa !11
  %327 = load i32, ptr %24, align 4, !tbaa !11
  %328 = icmp ne i32 %327, 0
  br i1 %328, label %329, label %331

329:                                              ; preds = %326
  %330 = load i32, ptr %24, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %330, i32 noundef -1, ptr noundef @.str, i32 noundef 554, ptr noundef @__FUNCTION__.mImageRotate, ptr noundef @.str.1)
  br label %331

331:                                              ; preds = %329, %326
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %332

332:                                              ; preds = %331
  br label %333

333:                                              ; preds = %332
  br label %334

334:                                              ; preds = %333, %289
  br label %335

335:                                              ; preds = %334, %252
  br label %336

336:                                              ; preds = %335, %215
  br label %337

337:                                              ; preds = %336, %187
  br label %338

338:                                              ; preds = %337, %166
  br label %339

339:                                              ; preds = %338, %152
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %340

340:                                              ; preds = %339
  br label %341

341:                                              ; preds = %340
  br label %518

342:                                              ; preds = %139
  br label %343

343:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  store i32 5, ptr %27, align 4, !tbaa !11
  %344 = load i32, ptr %27, align 4, !tbaa !11
  %345 = icmp eq i32 %344, 1
  br i1 %345, label %346, label %352

346:                                              ; preds = %343
  %347 = load ptr, ptr %7, align 8, !tbaa !5
  %348 = load ptr, ptr %8, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.MImage, ptr %348, i64 0
  %350 = ptrtoint ptr %349 to i64
  %351 = inttoptr i64 %350 to ptr
  call void @m_ImageCut(ptr noundef %347, ptr noundef null, ptr noundef %351, ptr noundef null)
  br label %515

352:                                              ; preds = %343
  %353 = load i32, ptr %27, align 4, !tbaa !11
  %354 = icmp eq i32 %353, 2
  br i1 %354, label %355, label %368

355:                                              ; preds = %352
  %356 = load ptr, ptr %7, align 8, !tbaa !5
  %357 = load ptr, ptr %8, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.MImage, ptr %357, i64 0
  %359 = ptrtoint ptr %358 to i64
  %360 = inttoptr i64 %359 to ptr
  %361 = load float, ptr %14, align 4, !tbaa !9
  %362 = load i32, ptr %19, align 4, !tbaa !11
  %363 = sdiv i32 %362, 2
  %364 = sitofp i32 %363 to float
  %365 = fsub float %361, %364
  %366 = fptosi float %365 to i64
  %367 = inttoptr i64 %366 to ptr
  call void @m_ImageCut(ptr noundef %356, ptr noundef null, ptr noundef %360, ptr noundef %367)
  br label %514

368:                                              ; preds = %352
  %369 = load i32, ptr %27, align 4, !tbaa !11
  %370 = icmp eq i32 %369, 3
  br i1 %370, label %371, label %391

371:                                              ; preds = %368
  %372 = load float, ptr %14, align 4, !tbaa !9
  %373 = load i32, ptr %19, align 4, !tbaa !11
  %374 = sdiv i32 %373, 2
  %375 = sitofp i32 %374 to float
  %376 = fsub float %372, %375
  %377 = fptosi float %376 to i64
  %378 = sitofp i64 %377 to float
  %379 = getelementptr inbounds %struct.MImagePoint, ptr %25, i32 0, i32 0
  store float %378, ptr %379, align 4, !tbaa !17
  %380 = load float, ptr %14, align 4, !tbaa !9
  %381 = load i32, ptr %19, align 4, !tbaa !11
  %382 = sdiv i32 %381, 2
  %383 = sitofp i32 %382 to float
  %384 = fadd float %380, %383
  %385 = getelementptr inbounds %struct.MImagePoint, ptr %25, i32 0, i32 1
  store float %384, ptr %385, align 4, !tbaa !19
  %386 = load ptr, ptr %7, align 8, !tbaa !5
  %387 = load ptr, ptr %8, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.MImage, ptr %387, i64 0
  %389 = ptrtoint ptr %388 to i64
  %390 = inttoptr i64 %389 to ptr
  call void @m_ImageCut(ptr noundef %386, ptr noundef null, ptr noundef %390, ptr noundef %25)
  br label %513

391:                                              ; preds = %368
  %392 = load i32, ptr %27, align 4, !tbaa !11
  %393 = icmp eq i32 %392, 4
  br i1 %393, label %394, label %423

394:                                              ; preds = %391
  %395 = load ptr, ptr %8, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.MImage, ptr %395, i64 0
  %397 = ptrtoint ptr %396 to i64
  %398 = trunc i64 %397 to i32
  %399 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 0
  store i32 %398, ptr %399, align 4, !tbaa !22
  %400 = load float, ptr %14, align 4, !tbaa !9
  %401 = load i32, ptr %19, align 4, !tbaa !11
  %402 = sdiv i32 %401, 2
  %403 = sitofp i32 %402 to float
  %404 = fsub float %400, %403
  %405 = fptosi float %404 to i64
  %406 = trunc i64 %405 to i32
  %407 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 1
  store i32 %406, ptr %407, align 4, !tbaa !24
  %408 = load float, ptr %14, align 4, !tbaa !9
  %409 = load i32, ptr %19, align 4, !tbaa !11
  %410 = sdiv i32 %409, 2
  %411 = sitofp i32 %410 to float
  %412 = fadd float %408, %411
  %413 = fptosi float %412 to i32
  %414 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 2
  store i32 %413, ptr %414, align 4, !tbaa !25
  %415 = load float, ptr %15, align 4, !tbaa !9
  %416 = load i32, ptr %18, align 4, !tbaa !11
  %417 = sdiv i32 %416, 2
  %418 = sitofp i32 %417 to float
  %419 = fsub float %415, %418
  %420 = fptosi float %419 to i32
  %421 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 3
  store i32 %420, ptr %421, align 4, !tbaa !26
  %422 = load ptr, ptr %7, align 8, !tbaa !5
  call void @m_ImageCut(ptr noundef %422, ptr noundef null, ptr noundef %26, ptr noundef null)
  br label %512

423:                                              ; preds = %391
  %424 = load i32, ptr %27, align 4, !tbaa !11
  %425 = icmp eq i32 %424, 5
  br i1 %425, label %426, label %462

426:                                              ; preds = %423
  %427 = load ptr, ptr %8, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.MImage, ptr %427, i64 0
  %429 = ptrtoint ptr %428 to i64
  %430 = trunc i64 %429 to i32
  %431 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 0
  store i32 %430, ptr %431, align 4, !tbaa !22
  %432 = load float, ptr %14, align 4, !tbaa !9
  %433 = load i32, ptr %19, align 4, !tbaa !11
  %434 = sdiv i32 %433, 2
  %435 = sitofp i32 %434 to float
  %436 = fsub float %432, %435
  %437 = fptosi float %436 to i64
  %438 = trunc i64 %437 to i32
  %439 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 1
  store i32 %438, ptr %439, align 4, !tbaa !24
  %440 = load float, ptr %14, align 4, !tbaa !9
  %441 = load i32, ptr %19, align 4, !tbaa !11
  %442 = sdiv i32 %441, 2
  %443 = sitofp i32 %442 to float
  %444 = fadd float %440, %443
  %445 = fptosi float %444 to i32
  %446 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 2
  store i32 %445, ptr %446, align 4, !tbaa !25
  %447 = load float, ptr %15, align 4, !tbaa !9
  %448 = load i32, ptr %18, align 4, !tbaa !11
  %449 = sdiv i32 %448, 2
  %450 = sitofp i32 %449 to float
  %451 = fsub float %447, %450
  %452 = fptosi float %451 to i32
  %453 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 3
  store i32 %452, ptr %453, align 4, !tbaa !26
  %454 = load ptr, ptr %7, align 8, !tbaa !5
  %455 = load float, ptr %15, align 4, !tbaa !9
  %456 = load i32, ptr %18, align 4, !tbaa !11
  %457 = sdiv i32 %456, 2
  %458 = sitofp i32 %457 to float
  %459 = fadd float %455, %458
  %460 = fptosi float %459 to i64
  %461 = inttoptr i64 %460 to ptr
  call void @m_ImageCut(ptr noundef %454, ptr noundef null, ptr noundef %26, ptr noundef %461)
  br label %511

462:                                              ; preds = %423
  %463 = load i32, ptr %27, align 4, !tbaa !11
  %464 = icmp eq i32 %463, 6
  br i1 %464, label %465, label %501

465:                                              ; preds = %462
  %466 = load ptr, ptr %8, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.MImage, ptr %466, i64 0
  %468 = ptrtoint ptr %467 to i64
  %469 = trunc i64 %468 to i32
  %470 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 0
  store i32 %469, ptr %470, align 4, !tbaa !22
  %471 = load float, ptr %14, align 4, !tbaa !9
  %472 = load i32, ptr %19, align 4, !tbaa !11
  %473 = sdiv i32 %472, 2
  %474 = sitofp i32 %473 to float
  %475 = fsub float %471, %474
  %476 = fptosi float %475 to i64
  %477 = trunc i64 %476 to i32
  %478 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 1
  store i32 %477, ptr %478, align 4, !tbaa !24
  %479 = load float, ptr %14, align 4, !tbaa !9
  %480 = load i32, ptr %19, align 4, !tbaa !11
  %481 = sdiv i32 %480, 2
  %482 = sitofp i32 %481 to float
  %483 = fadd float %479, %482
  %484 = fptosi float %483 to i32
  %485 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 2
  store i32 %484, ptr %485, align 4, !tbaa !25
  %486 = load float, ptr %15, align 4, !tbaa !9
  %487 = load i32, ptr %18, align 4, !tbaa !11
  %488 = sdiv i32 %487, 2
  %489 = sitofp i32 %488 to float
  %490 = fsub float %486, %489
  %491 = fptosi float %490 to i32
  %492 = getelementptr inbounds %struct.MImageRect, ptr %26, i32 0, i32 3
  store i32 %491, ptr %492, align 4, !tbaa !26
  %493 = load float, ptr %15, align 4, !tbaa !9
  %494 = load i32, ptr %18, align 4, !tbaa !11
  %495 = sdiv i32 %494, 2
  %496 = sitofp i32 %495 to float
  %497 = fadd float %493, %496
  %498 = getelementptr inbounds %struct.MImagePoint, ptr %25, i32 0, i32 0
  store float %497, ptr %498, align 4, !tbaa !17
  %499 = getelementptr inbounds %struct.MImagePoint, ptr %25, i32 0, i32 1
  store float -1.000000e+00, ptr %499, align 4, !tbaa !19
  %500 = load ptr, ptr %7, align 8, !tbaa !5
  call void @m_ImageCut(ptr noundef %500, ptr noundef null, ptr noundef %26, ptr noundef %25)
  br label %510

501:                                              ; preds = %462
  br label %502

502:                                              ; preds = %501
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  store i32 1, ptr %28, align 4, !tbaa !11
  %503 = load i32, ptr %28, align 4, !tbaa !11
  %504 = icmp ne i32 %503, 0
  br i1 %504, label %505, label %507

505:                                              ; preds = %502
  %506 = load i32, ptr %28, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %506, i32 noundef -1, ptr noundef @.str, i32 noundef 554, ptr noundef @__FUNCTION__.mImageRotate, ptr noundef @.str.1)
  br label %507

507:                                              ; preds = %505, %502
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  br label %508

508:                                              ; preds = %507
  br label %509

509:                                              ; preds = %508
  br label %510

510:                                              ; preds = %509, %465
  br label %511

511:                                              ; preds = %510, %426
  br label %512

512:                                              ; preds = %511, %394
  br label %513

513:                                              ; preds = %512, %371
  br label %514

514:                                              ; preds = %513, %355
  br label %515

515:                                              ; preds = %514, %346
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %516

516:                                              ; preds = %515
  br label %517

517:                                              ; preds = %516
  br label %518

518:                                              ; preds = %517, %341
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  br label %519

519:                                              ; preds = %518
  br label %520

520:                                              ; preds = %519
  store i32 1, ptr %29, align 4
  br label %1413

521:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  %522 = load float, ptr %11, align 4, !tbaa !9
  %523 = fpext float %522 to double
  %524 = call double @mSin(double noundef %523)
  %525 = fptrunc double %524 to float
  store float %525, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %526 = load float, ptr %11, align 4, !tbaa !9
  %527 = fpext float %526 to double
  %528 = call double @mCos(double noundef %527)
  %529 = fptrunc double %528 to float
  store float %529, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %530, ptr %32, align 8, !tbaa !5
  %531 = load ptr, ptr %8, align 8, !tbaa !5
  %532 = load ptr, ptr %7, align 8, !tbaa !5
  %533 = icmp eq ptr %531, %532
  br i1 %533, label %534, label %669

534:                                              ; preds = %521
  %535 = load ptr, ptr %7, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.MImage, ptr %535, i32 0, i32 1
  %537 = load i32, ptr %536, align 4, !tbaa !15
  %538 = sitofp i32 %537 to float
  %539 = load float, ptr %31, align 4, !tbaa !9
  %540 = fcmp ogt float %539, 0.000000e+00
  br i1 %540, label %541, label %543

541:                                              ; preds = %534
  %542 = load float, ptr %31, align 4, !tbaa !9
  br label %546

543:                                              ; preds = %534
  %544 = load float, ptr %31, align 4, !tbaa !9
  %545 = fsub float 0.000000e+00, %544
  br label %546

546:                                              ; preds = %543, %541
  %547 = phi float [ %542, %541 ], [ %545, %543 ]
  %548 = load ptr, ptr %7, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.MImage, ptr %548, i32 0, i32 2
  %550 = load i32, ptr %549, align 8, !tbaa !16
  %551 = sitofp i32 %550 to float
  %552 = load float, ptr %30, align 4, !tbaa !9
  %553 = fcmp ogt float %552, 0.000000e+00
  br i1 %553, label %554, label %556

554:                                              ; preds = %546
  %555 = load float, ptr %30, align 4, !tbaa !9
  br label %559

556:                                              ; preds = %546
  %557 = load float, ptr %30, align 4, !tbaa !9
  %558 = fsub float 0.000000e+00, %557
  br label %559

559:                                              ; preds = %556, %554
  %560 = phi float [ %555, %554 ], [ %558, %556 ]
  %561 = fmul float %551, %560
  %562 = call float @llvm.fmuladd.f32(float %538, float %547, float %561)
  %563 = fptosi float %562 to i32
  store i32 %563, ptr %18, align 4, !tbaa !11
  %564 = load ptr, ptr %7, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.MImage, ptr %564, i32 0, i32 1
  %566 = load i32, ptr %565, align 4, !tbaa !15
  %567 = sitofp i32 %566 to float
  %568 = load float, ptr %30, align 4, !tbaa !9
  %569 = fcmp ogt float %568, 0.000000e+00
  br i1 %569, label %570, label %572

570:                                              ; preds = %559
  %571 = load float, ptr %30, align 4, !tbaa !9
  br label %575

572:                                              ; preds = %559
  %573 = load float, ptr %30, align 4, !tbaa !9
  %574 = fsub float 0.000000e+00, %573
  br label %575

575:                                              ; preds = %572, %570
  %576 = phi float [ %571, %570 ], [ %574, %572 ]
  %577 = load ptr, ptr %7, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.MImage, ptr %577, i32 0, i32 2
  %579 = load i32, ptr %578, align 8, !tbaa !16
  %580 = sitofp i32 %579 to float
  %581 = load float, ptr %31, align 4, !tbaa !9
  %582 = fcmp ogt float %581, 0.000000e+00
  br i1 %582, label %583, label %585

583:                                              ; preds = %575
  %584 = load float, ptr %31, align 4, !tbaa !9
  br label %588

585:                                              ; preds = %575
  %586 = load float, ptr %31, align 4, !tbaa !9
  %587 = fsub float 0.000000e+00, %586
  br label %588

588:                                              ; preds = %585, %583
  %589 = phi float [ %584, %583 ], [ %587, %585 ]
  %590 = fmul float %580, %589
  %591 = call float @llvm.fmuladd.f32(float %567, float %576, float %590)
  %592 = fptosi float %591 to i32
  store i32 %592, ptr %19, align 4, !tbaa !11
  %593 = load ptr, ptr %10, align 8, !tbaa !5
  %594 = icmp ne ptr %593, null
  br i1 %594, label %595, label %661

595:                                              ; preds = %588
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %596 = load float, ptr %14, align 4, !tbaa !9
  %597 = load float, ptr %14, align 4, !tbaa !9
  %598 = fadd float %596, %597
  %599 = load ptr, ptr %7, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.MImage, ptr %599, i32 0, i32 2
  %601 = load i32, ptr %600, align 8, !tbaa !16
  %602 = sitofp i32 %601 to float
  %603 = fsub float %598, %602
  %604 = load float, ptr %31, align 4, !tbaa !9
  %605 = load float, ptr %15, align 4, !tbaa !9
  %606 = load float, ptr %15, align 4, !tbaa !9
  %607 = fadd float %605, %606
  %608 = load ptr, ptr %7, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.MImage, ptr %608, i32 0, i32 1
  %610 = load i32, ptr %609, align 4, !tbaa !15
  %611 = sitofp i32 %610 to float
  %612 = fsub float %607, %611
  %613 = load float, ptr %30, align 4, !tbaa !9
  %614 = fmul float %612, %613
  %615 = fneg float %614
  %616 = call float @llvm.fmuladd.f32(float %603, float %604, float %615)
  %617 = load i32, ptr %18, align 4, !tbaa !11
  %618 = sitofp i32 %617 to float
  %619 = fadd float %616, %618
  %620 = fdiv float %619, 2.000000e+00
  store float %620, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  %621 = load float, ptr %14, align 4, !tbaa !9
  %622 = load float, ptr %14, align 4, !tbaa !9
  %623 = fadd float %621, %622
  %624 = load ptr, ptr %7, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.MImage, ptr %624, i32 0, i32 2
  %626 = load i32, ptr %625, align 8, !tbaa !16
  %627 = sitofp i32 %626 to float
  %628 = fsub float %623, %627
  %629 = load float, ptr %30, align 4, !tbaa !9
  %630 = load float, ptr %15, align 4, !tbaa !9
  %631 = load float, ptr %15, align 4, !tbaa !9
  %632 = fadd float %630, %631
  %633 = load ptr, ptr %7, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.MImage, ptr %633, i32 0, i32 1
  %635 = load i32, ptr %634, align 4, !tbaa !15
  %636 = sitofp i32 %635 to float
  %637 = fsub float %632, %636
  %638 = load float, ptr %31, align 4, !tbaa !9
  %639 = fmul float %637, %638
  %640 = call float @llvm.fmuladd.f32(float %628, float %629, float %639)
  %641 = load i32, ptr %19, align 4, !tbaa !11
  %642 = sitofp i32 %641 to float
  %643 = fadd float %640, %642
  %644 = fdiv float %643, 2.000000e+00
  store float %644, ptr %34, align 4, !tbaa !9
  %645 = load i32, ptr %19, align 4, !tbaa !11
  %646 = load float, ptr %33, align 4, !tbaa !9
  %647 = load ptr, ptr %10, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.MImagePoint, ptr %647, i32 0, i32 0
  %649 = load float, ptr %648, align 4, !tbaa !17
  %650 = fsub float %646, %649
  %651 = fptosi float %650 to i32
  %652 = add nsw i32 %645, %651
  store i32 %652, ptr %19, align 4, !tbaa !11
  %653 = load i32, ptr %18, align 4, !tbaa !11
  %654 = load float, ptr %34, align 4, !tbaa !9
  %655 = load ptr, ptr %10, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.MImagePoint, ptr %655, i32 0, i32 1
  %657 = load float, ptr %656, align 4, !tbaa !19
  %658 = fadd float %654, %657
  %659 = fptosi float %658 to i32
  %660 = add nsw i32 %653, %659
  store i32 %660, ptr %18, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %661

661:                                              ; preds = %595, %588
  %662 = load ptr, ptr %7, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.MImage, ptr %662, i32 0, i32 0
  %664 = load i32, ptr %663, align 8, !tbaa !13
  %665 = add nsw i32 %664, 0
  %666 = load i32, ptr %18, align 4, !tbaa !11
  %667 = load i32, ptr %19, align 4, !tbaa !11
  %668 = call ptr @ImageCreate(i32 noundef %665, i32 noundef %666, i32 noundef %667, ptr noundef null)
  store ptr %668, ptr %8, align 8, !tbaa !5
  br label %910

669:                                              ; preds = %521
  %670 = load i32, ptr %18, align 4, !tbaa !11
  %671 = icmp sle i32 %670, 0
  br i1 %671, label %675, label %672

672:                                              ; preds = %669
  %673 = load i32, ptr %19, align 4, !tbaa !11
  %674 = icmp sle i32 %673, 0
  br i1 %674, label %675, label %858

675:                                              ; preds = %672, %669
  %676 = load ptr, ptr %7, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.MImage, ptr %676, i32 0, i32 1
  %678 = load i32, ptr %677, align 4, !tbaa !15
  %679 = sitofp i32 %678 to float
  %680 = load float, ptr %31, align 4, !tbaa !9
  %681 = fcmp ogt float %680, 0.000000e+00
  br i1 %681, label %682, label %684

682:                                              ; preds = %675
  %683 = load float, ptr %31, align 4, !tbaa !9
  br label %687

684:                                              ; preds = %675
  %685 = load float, ptr %31, align 4, !tbaa !9
  %686 = fsub float 0.000000e+00, %685
  br label %687

687:                                              ; preds = %684, %682
  %688 = phi float [ %683, %682 ], [ %686, %684 ]
  %689 = load ptr, ptr %7, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.MImage, ptr %689, i32 0, i32 2
  %691 = load i32, ptr %690, align 8, !tbaa !16
  %692 = sitofp i32 %691 to float
  %693 = load float, ptr %30, align 4, !tbaa !9
  %694 = fcmp ogt float %693, 0.000000e+00
  br i1 %694, label %695, label %697

695:                                              ; preds = %687
  %696 = load float, ptr %30, align 4, !tbaa !9
  br label %700

697:                                              ; preds = %687
  %698 = load float, ptr %30, align 4, !tbaa !9
  %699 = fsub float 0.000000e+00, %698
  br label %700

700:                                              ; preds = %697, %695
  %701 = phi float [ %696, %695 ], [ %699, %697 ]
  %702 = fmul float %692, %701
  %703 = call float @llvm.fmuladd.f32(float %679, float %688, float %702)
  %704 = fptosi float %703 to i32
  store i32 %704, ptr %18, align 4, !tbaa !11
  %705 = load ptr, ptr %7, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.MImage, ptr %705, i32 0, i32 1
  %707 = load i32, ptr %706, align 4, !tbaa !15
  %708 = sitofp i32 %707 to float
  %709 = load float, ptr %30, align 4, !tbaa !9
  %710 = fcmp ogt float %709, 0.000000e+00
  br i1 %710, label %711, label %713

711:                                              ; preds = %700
  %712 = load float, ptr %30, align 4, !tbaa !9
  br label %716

713:                                              ; preds = %700
  %714 = load float, ptr %30, align 4, !tbaa !9
  %715 = fsub float 0.000000e+00, %714
  br label %716

716:                                              ; preds = %713, %711
  %717 = phi float [ %712, %711 ], [ %715, %713 ]
  %718 = load ptr, ptr %7, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.MImage, ptr %718, i32 0, i32 2
  %720 = load i32, ptr %719, align 8, !tbaa !16
  %721 = sitofp i32 %720 to float
  %722 = load float, ptr %31, align 4, !tbaa !9
  %723 = fcmp ogt float %722, 0.000000e+00
  br i1 %723, label %724, label %726

724:                                              ; preds = %716
  %725 = load float, ptr %31, align 4, !tbaa !9
  br label %729

726:                                              ; preds = %716
  %727 = load float, ptr %31, align 4, !tbaa !9
  %728 = fsub float 0.000000e+00, %727
  br label %729

729:                                              ; preds = %726, %724
  %730 = phi float [ %725, %724 ], [ %728, %726 ]
  %731 = fmul float %721, %730
  %732 = call float @llvm.fmuladd.f32(float %708, float %717, float %731)
  %733 = fptosi float %732 to i32
  store i32 %733, ptr %19, align 4, !tbaa !11
  %734 = load ptr, ptr %10, align 8, !tbaa !5
  %735 = icmp ne ptr %734, null
  br i1 %735, label %736, label %802

736:                                              ; preds = %729
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %737 = load float, ptr %14, align 4, !tbaa !9
  %738 = load float, ptr %14, align 4, !tbaa !9
  %739 = fadd float %737, %738
  %740 = load ptr, ptr %7, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.MImage, ptr %740, i32 0, i32 2
  %742 = load i32, ptr %741, align 8, !tbaa !16
  %743 = sitofp i32 %742 to float
  %744 = fsub float %739, %743
  %745 = load float, ptr %31, align 4, !tbaa !9
  %746 = load float, ptr %15, align 4, !tbaa !9
  %747 = load float, ptr %15, align 4, !tbaa !9
  %748 = fadd float %746, %747
  %749 = load ptr, ptr %7, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.MImage, ptr %749, i32 0, i32 1
  %751 = load i32, ptr %750, align 4, !tbaa !15
  %752 = sitofp i32 %751 to float
  %753 = fsub float %748, %752
  %754 = load float, ptr %30, align 4, !tbaa !9
  %755 = fmul float %753, %754
  %756 = fneg float %755
  %757 = call float @llvm.fmuladd.f32(float %744, float %745, float %756)
  %758 = load i32, ptr %18, align 4, !tbaa !11
  %759 = sitofp i32 %758 to float
  %760 = fadd float %757, %759
  %761 = fdiv float %760, 2.000000e+00
  store float %761, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %762 = load float, ptr %14, align 4, !tbaa !9
  %763 = load float, ptr %14, align 4, !tbaa !9
  %764 = fadd float %762, %763
  %765 = load ptr, ptr %7, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.MImage, ptr %765, i32 0, i32 2
  %767 = load i32, ptr %766, align 8, !tbaa !16
  %768 = sitofp i32 %767 to float
  %769 = fsub float %764, %768
  %770 = load float, ptr %30, align 4, !tbaa !9
  %771 = load float, ptr %15, align 4, !tbaa !9
  %772 = load float, ptr %15, align 4, !tbaa !9
  %773 = fadd float %771, %772
  %774 = load ptr, ptr %7, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.MImage, ptr %774, i32 0, i32 1
  %776 = load i32, ptr %775, align 4, !tbaa !15
  %777 = sitofp i32 %776 to float
  %778 = fsub float %773, %777
  %779 = load float, ptr %31, align 4, !tbaa !9
  %780 = fmul float %778, %779
  %781 = call float @llvm.fmuladd.f32(float %769, float %770, float %780)
  %782 = load i32, ptr %19, align 4, !tbaa !11
  %783 = sitofp i32 %782 to float
  %784 = fadd float %781, %783
  %785 = fdiv float %784, 2.000000e+00
  store float %785, ptr %36, align 4, !tbaa !9
  %786 = load i32, ptr %19, align 4, !tbaa !11
  %787 = load float, ptr %35, align 4, !tbaa !9
  %788 = load ptr, ptr %10, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.MImagePoint, ptr %788, i32 0, i32 0
  %790 = load float, ptr %789, align 4, !tbaa !17
  %791 = fsub float %787, %790
  %792 = fptosi float %791 to i32
  %793 = add nsw i32 %786, %792
  store i32 %793, ptr %19, align 4, !tbaa !11
  %794 = load i32, ptr %18, align 4, !tbaa !11
  %795 = load float, ptr %36, align 4, !tbaa !9
  %796 = load ptr, ptr %10, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.MImagePoint, ptr %796, i32 0, i32 1
  %798 = load float, ptr %797, align 4, !tbaa !19
  %799 = fadd float %795, %798
  %800 = fptosi float %799 to i32
  %801 = add nsw i32 %794, %800
  store i32 %801, ptr %18, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  br label %802

802:                                              ; preds = %736, %729
  br label %803

803:                                              ; preds = %802
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  store i32 4, ptr %37, align 4, !tbaa !11
  %804 = load i32, ptr %37, align 4, !tbaa !11
  %805 = icmp eq i32 %804, 2
  br i1 %805, label %806, label %816

806:                                              ; preds = %803
  %807 = load ptr, ptr %8, align 8, !tbaa !5
  %808 = load ptr, ptr %7, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.MImage, ptr %808, i32 0, i32 0
  %810 = load i32, ptr %809, align 8, !tbaa !13
  %811 = add nsw i32 %810, 0
  %812 = load i32, ptr %18, align 4, !tbaa !11
  %813 = load ptr, ptr %8, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.MImage, ptr %813, i32 0, i32 3
  %815 = getelementptr inbounds [4 x ptr], ptr %814, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %807, i32 noundef -1, i32 noundef %811, i32 noundef %812, ptr noundef %815)
  br label %855

816:                                              ; preds = %803
  %817 = load i32, ptr %37, align 4, !tbaa !11
  %818 = icmp eq i32 %817, 3
  br i1 %818, label %819, label %830

819:                                              ; preds = %816
  %820 = load ptr, ptr %8, align 8, !tbaa !5
  %821 = load ptr, ptr %7, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.MImage, ptr %821, i32 0, i32 0
  %823 = load i32, ptr %822, align 8, !tbaa !13
  %824 = add nsw i32 %823, 0
  %825 = load i32, ptr %18, align 4, !tbaa !11
  %826 = load i32, ptr %19, align 4, !tbaa !11
  %827 = load ptr, ptr %8, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.MImage, ptr %827, i32 0, i32 3
  %829 = getelementptr inbounds [4 x ptr], ptr %828, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %820, i32 noundef %824, i32 noundef %825, i32 noundef %826, ptr noundef %829)
  br label %854

830:                                              ; preds = %816
  %831 = load i32, ptr %37, align 4, !tbaa !11
  %832 = icmp eq i32 %831, 4
  br i1 %832, label %833, label %844

833:                                              ; preds = %830
  %834 = load ptr, ptr %8, align 8, !tbaa !5
  %835 = load ptr, ptr %7, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.MImage, ptr %835, i32 0, i32 0
  %837 = load i32, ptr %836, align 8, !tbaa !13
  %838 = add nsw i32 %837, 0
  %839 = load i32, ptr %18, align 4, !tbaa !11
  %840 = load i32, ptr %19, align 4, !tbaa !11
  %841 = load ptr, ptr %8, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.MImage, ptr %841, i32 0, i32 3
  %843 = getelementptr inbounds [4 x ptr], ptr %842, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %834, i32 noundef %838, i32 noundef %839, i32 noundef %840, ptr noundef %843)
  br label %853

844:                                              ; preds = %830
  br label %845

845:                                              ; preds = %844
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  store i32 1, ptr %38, align 4, !tbaa !11
  %846 = load i32, ptr %38, align 4, !tbaa !11
  %847 = icmp ne i32 %846, 0
  br i1 %847, label %848, label %850

848:                                              ; preds = %845
  %849 = load i32, ptr %38, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %849, i32 noundef -1, ptr noundef @.str, i32 noundef 586, ptr noundef @__FUNCTION__.mImageRotate, ptr noundef @.str.2)
  br label %850

850:                                              ; preds = %848, %845
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %851

851:                                              ; preds = %850
  br label %852

852:                                              ; preds = %851
  br label %853

853:                                              ; preds = %852, %833
  br label %854

854:                                              ; preds = %853, %819
  br label %855

855:                                              ; preds = %854, %806
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  br label %856

856:                                              ; preds = %855
  br label %857

857:                                              ; preds = %856
  br label %909

858:                                              ; preds = %672
  br label %859

859:                                              ; preds = %858
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  store i32 4, ptr %39, align 4, !tbaa !11
  %860 = load i32, ptr %39, align 4, !tbaa !11
  %861 = icmp eq i32 %860, 2
  br i1 %861, label %862, label %871

862:                                              ; preds = %859
  %863 = load ptr, ptr %8, align 8, !tbaa !5
  %864 = load ptr, ptr %7, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.MImage, ptr %864, i32 0, i32 0
  %866 = load i32, ptr %865, align 8, !tbaa !13
  %867 = add nsw i32 %866, 0
  %868 = load ptr, ptr %8, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.MImage, ptr %868, i32 0, i32 3
  %870 = getelementptr inbounds [4 x ptr], ptr %869, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %863, i32 noundef -1, i32 noundef %867, i32 noundef -1, ptr noundef %870)
  br label %906

871:                                              ; preds = %859
  %872 = load i32, ptr %39, align 4, !tbaa !11
  %873 = icmp eq i32 %872, 3
  br i1 %873, label %874, label %883

874:                                              ; preds = %871
  %875 = load ptr, ptr %8, align 8, !tbaa !5
  %876 = load ptr, ptr %7, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.MImage, ptr %876, i32 0, i32 0
  %878 = load i32, ptr %877, align 8, !tbaa !13
  %879 = add nsw i32 %878, 0
  %880 = load ptr, ptr %8, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.MImage, ptr %880, i32 0, i32 3
  %882 = getelementptr inbounds [4 x ptr], ptr %881, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %875, i32 noundef %879, i32 noundef -1, i32 noundef -1, ptr noundef %882)
  br label %905

883:                                              ; preds = %871
  %884 = load i32, ptr %39, align 4, !tbaa !11
  %885 = icmp eq i32 %884, 4
  br i1 %885, label %886, label %895

886:                                              ; preds = %883
  %887 = load ptr, ptr %8, align 8, !tbaa !5
  %888 = load ptr, ptr %7, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.MImage, ptr %888, i32 0, i32 0
  %890 = load i32, ptr %889, align 8, !tbaa !13
  %891 = add nsw i32 %890, 0
  %892 = load ptr, ptr %8, align 8, !tbaa !5
  %893 = getelementptr inbounds %struct.MImage, ptr %892, i32 0, i32 3
  %894 = getelementptr inbounds [4 x ptr], ptr %893, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %887, i32 noundef %891, i32 noundef -1, i32 noundef -1, ptr noundef %894)
  br label %904

895:                                              ; preds = %883
  br label %896

896:                                              ; preds = %895
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  store i32 1, ptr %40, align 4, !tbaa !11
  %897 = load i32, ptr %40, align 4, !tbaa !11
  %898 = icmp ne i32 %897, 0
  br i1 %898, label %899, label %901

899:                                              ; preds = %896
  %900 = load i32, ptr %40, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %900, i32 noundef -1, ptr noundef @.str, i32 noundef 589, ptr noundef @__FUNCTION__.mImageRotate, ptr noundef @.str.2)
  br label %901

901:                                              ; preds = %899, %896
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  br label %902

902:                                              ; preds = %901
  br label %903

903:                                              ; preds = %902
  br label %904

904:                                              ; preds = %903, %886
  br label %905

905:                                              ; preds = %904, %874
  br label %906

906:                                              ; preds = %905, %862
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  br label %907

907:                                              ; preds = %906
  br label %908

908:                                              ; preds = %907
  br label %909

909:                                              ; preds = %908, %857
  br label %910

910:                                              ; preds = %909, %661
  br label %911

911:                                              ; preds = %910
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %912 = load ptr, ptr %8, align 8, !tbaa !5
  %913 = icmp eq ptr %912, null
  br i1 %913, label %918, label %914

914:                                              ; preds = %911
  %915 = load ptr, ptr %8, align 8, !tbaa !5
  %916 = ptrtoint ptr %915 to i64
  %917 = icmp eq i64 %916, -1
  br i1 %917, label %918, label %919

918:                                              ; preds = %914, %911
  br label %948

919:                                              ; preds = %914
  %920 = load ptr, ptr %8, align 8, !tbaa !5
  %921 = getelementptr inbounds %struct.MImage, ptr %920, i32 0, i32 3
  %922 = getelementptr inbounds [4 x ptr], ptr %921, i64 0, i64 0
  %923 = icmp eq ptr %922, null
  br i1 %923, label %945, label %924

924:                                              ; preds = %919
  %925 = load ptr, ptr %8, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.MImage, ptr %925, i32 0, i32 3
  %927 = getelementptr inbounds [4 x ptr], ptr %926, i64 0, i64 0
  %928 = ptrtoint ptr %927 to i64
  %929 = icmp eq i64 %928, -1
  br i1 %929, label %945, label %930

930:                                              ; preds = %924
  %931 = load ptr, ptr %8, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.MImage, ptr %931, i32 0, i32 0
  %933 = load i32, ptr %932, align 8, !tbaa !13
  %934 = icmp sle i32 %933, 0
  br i1 %934, label %945, label %935

935:                                              ; preds = %930
  %936 = load ptr, ptr %8, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.MImage, ptr %936, i32 0, i32 1
  %938 = load i32, ptr %937, align 4, !tbaa !15
  %939 = icmp sle i32 %938, 0
  br i1 %939, label %945, label %940

940:                                              ; preds = %935
  %941 = load ptr, ptr %8, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct.MImage, ptr %941, i32 0, i32 2
  %943 = load i32, ptr %942, align 8, !tbaa !16
  %944 = icmp sle i32 %943, 0
  br label %945

945:                                              ; preds = %940, %935, %930, %924, %919
  %946 = phi i1 [ true, %935 ], [ true, %930 ], [ true, %924 ], [ true, %919 ], [ %944, %940 ]
  %947 = zext i1 %946 to i32
  br label %948

948:                                              ; preds = %945, %918
  %949 = phi i32 [ 1, %918 ], [ %947, %945 ]
  store i32 %949, ptr %41, align 4, !tbaa !11
  %950 = load i32, ptr %41, align 4, !tbaa !11
  %951 = icmp ne i32 %950, 0
  br i1 %951, label %952, label %954

952:                                              ; preds = %948
  %953 = load i32, ptr %41, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %953, i32 noundef -1, ptr noundef @.str, i32 noundef 591, ptr noundef @__FUNCTION__.mImageRotate, ptr noundef @.str.6)
  br label %954

954:                                              ; preds = %952, %948
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  br label %955

955:                                              ; preds = %954
  br label %956

956:                                              ; preds = %955
  %957 = load ptr, ptr %10, align 8, !tbaa !5
  %958 = icmp eq ptr %957, null
  br i1 %958, label %959, label %966

959:                                              ; preds = %956
  %960 = load i32, ptr %19, align 4, !tbaa !11
  %961 = sitofp i32 %960 to float
  %962 = fdiv float %961, 2.000000e+00
  store float %962, ptr %16, align 4, !tbaa !9
  %963 = load i32, ptr %18, align 4, !tbaa !11
  %964 = sitofp i32 %963 to float
  %965 = fdiv float %964, 2.000000e+00
  store float %965, ptr %17, align 4, !tbaa !9
  br label %973

966:                                              ; preds = %956
  %967 = load ptr, ptr %10, align 8, !tbaa !5
  %968 = getelementptr inbounds %struct.MImagePoint, ptr %967, i32 0, i32 0
  %969 = load float, ptr %968, align 4, !tbaa !17
  store float %969, ptr %16, align 4, !tbaa !9
  %970 = load ptr, ptr %10, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct.MImagePoint, ptr %970, i32 0, i32 1
  %972 = load float, ptr %971, align 4, !tbaa !19
  store float %972, ptr %17, align 4, !tbaa !9
  br label %973

973:                                              ; preds = %966, %959
  %974 = load float, ptr %11, align 4, !tbaa !9
  %975 = fcmp oeq float %974, 9.000000e+01
  br i1 %975, label %976, label %1016

976:                                              ; preds = %973
  %977 = load float, ptr %14, align 4, !tbaa !9
  %978 = load float, ptr %17, align 4, !tbaa !9
  %979 = fcmp oeq float %977, %978
  br i1 %979, label %980, label %1015

980:                                              ; preds = %976
  %981 = load float, ptr %15, align 4, !tbaa !9
  %982 = load float, ptr %16, align 4, !tbaa !9
  %983 = fcmp oeq float %981, %982
  br i1 %983, label %984, label %1015

984:                                              ; preds = %980
  %985 = load ptr, ptr %7, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.MImage, ptr %985, i32 0, i32 2
  %987 = load i32, ptr %986, align 8, !tbaa !16
  %988 = load i32, ptr %18, align 4, !tbaa !11
  %989 = icmp eq i32 %987, %988
  br i1 %989, label %990, label %1014

990:                                              ; preds = %984
  %991 = load ptr, ptr %7, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.MImage, ptr %991, i32 0, i32 1
  %993 = load i32, ptr %992, align 4, !tbaa !15
  %994 = load i32, ptr %19, align 4, !tbaa !11
  %995 = icmp eq i32 %993, %994
  br i1 %995, label %996, label %1014

996:                                              ; preds = %990
  %997 = load ptr, ptr %7, align 8, !tbaa !5
  %998 = load ptr, ptr %8, align 8, !tbaa !5
  call void @ImageRotate90(ptr noundef %997, ptr noundef %998)
  %999 = load ptr, ptr %32, align 8, !tbaa !5
  %1000 = load ptr, ptr %8, align 8, !tbaa !5
  %1001 = icmp ne ptr %999, %1000
  br i1 %1001, label %1002, label %1013

1002:                                             ; preds = %996
  br label %1003

1003:                                             ; preds = %1002
  call void @llvm.lifetime.start.p0(i64 56, ptr %42) #5
  %1004 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %42, ptr align 8 %1004, i64 56, i1 false), !tbaa.struct !27
  %1005 = load ptr, ptr %7, align 8, !tbaa !5
  %1006 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1005, ptr align 8 %1006, i64 56, i1 false), !tbaa.struct !27
  %1007 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1007, ptr align 8 %42, i64 56, i1 false), !tbaa.struct !27
  %1008 = load ptr, ptr %7, align 8, !tbaa !5
  %1009 = load ptr, ptr %8, align 8, !tbaa !5
  call void @HandleExchange(ptr noundef %1008, ptr noundef %1009)
  call void @llvm.lifetime.end.p0(i64 56, ptr %42) #5
  br label %1010

1010:                                             ; preds = %1003
  br label %1011

1011:                                             ; preds = %1010
  %1012 = load ptr, ptr %8, align 8, !tbaa !5
  call void @mImageRelease(ptr noundef %1012)
  br label %1013

1013:                                             ; preds = %1011, %996
  store i32 1, ptr %29, align 4
  br label %1412

1014:                                             ; preds = %990, %984
  br label %1015

1015:                                             ; preds = %1014, %980, %976
  br label %1016

1016:                                             ; preds = %1015, %973
  %1017 = load float, ptr %11, align 4, !tbaa !9
  %1018 = fcmp oeq float %1017, 1.800000e+02
  br i1 %1018, label %1019, label %1059

1019:                                             ; preds = %1016
  %1020 = load float, ptr %14, align 4, !tbaa !9
  %1021 = load float, ptr %16, align 4, !tbaa !9
  %1022 = fcmp oeq float %1020, %1021
  br i1 %1022, label %1023, label %1058

1023:                                             ; preds = %1019
  %1024 = load float, ptr %15, align 4, !tbaa !9
  %1025 = load float, ptr %17, align 4, !tbaa !9
  %1026 = fcmp oeq float %1024, %1025
  br i1 %1026, label %1027, label %1058

1027:                                             ; preds = %1023
  %1028 = load ptr, ptr %7, align 8, !tbaa !5
  %1029 = getelementptr inbounds %struct.MImage, ptr %1028, i32 0, i32 2
  %1030 = load i32, ptr %1029, align 8, !tbaa !16
  %1031 = load i32, ptr %19, align 4, !tbaa !11
  %1032 = icmp eq i32 %1030, %1031
  br i1 %1032, label %1033, label %1057

1033:                                             ; preds = %1027
  %1034 = load ptr, ptr %7, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.MImage, ptr %1034, i32 0, i32 1
  %1036 = load i32, ptr %1035, align 4, !tbaa !15
  %1037 = load i32, ptr %18, align 4, !tbaa !11
  %1038 = icmp eq i32 %1036, %1037
  br i1 %1038, label %1039, label %1057

1039:                                             ; preds = %1033
  %1040 = load ptr, ptr %7, align 8, !tbaa !5
  %1041 = load ptr, ptr %8, align 8, !tbaa !5
  call void @ImageRotate180(ptr noundef %1040, ptr noundef %1041)
  %1042 = load ptr, ptr %32, align 8, !tbaa !5
  %1043 = load ptr, ptr %8, align 8, !tbaa !5
  %1044 = icmp ne ptr %1042, %1043
  br i1 %1044, label %1045, label %1056

1045:                                             ; preds = %1039
  br label %1046

1046:                                             ; preds = %1045
  call void @llvm.lifetime.start.p0(i64 56, ptr %43) #5
  %1047 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %43, ptr align 8 %1047, i64 56, i1 false), !tbaa.struct !27
  %1048 = load ptr, ptr %7, align 8, !tbaa !5
  %1049 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1048, ptr align 8 %1049, i64 56, i1 false), !tbaa.struct !27
  %1050 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1050, ptr align 8 %43, i64 56, i1 false), !tbaa.struct !27
  %1051 = load ptr, ptr %7, align 8, !tbaa !5
  %1052 = load ptr, ptr %8, align 8, !tbaa !5
  call void @HandleExchange(ptr noundef %1051, ptr noundef %1052)
  call void @llvm.lifetime.end.p0(i64 56, ptr %43) #5
  br label %1053

1053:                                             ; preds = %1046
  br label %1054

1054:                                             ; preds = %1053
  %1055 = load ptr, ptr %8, align 8, !tbaa !5
  call void @mImageRelease(ptr noundef %1055)
  br label %1056

1056:                                             ; preds = %1054, %1039
  store i32 1, ptr %29, align 4
  br label %1412

1057:                                             ; preds = %1033, %1027
  br label %1058

1058:                                             ; preds = %1057, %1023, %1019
  br label %1059

1059:                                             ; preds = %1058, %1016
  %1060 = load float, ptr %11, align 4, !tbaa !9
  %1061 = fcmp oeq float %1060, 2.700000e+02
  br i1 %1061, label %1062, label %1102

1062:                                             ; preds = %1059
  %1063 = load float, ptr %14, align 4, !tbaa !9
  %1064 = load float, ptr %17, align 4, !tbaa !9
  %1065 = fcmp oeq float %1063, %1064
  br i1 %1065, label %1066, label %1101

1066:                                             ; preds = %1062
  %1067 = load float, ptr %15, align 4, !tbaa !9
  %1068 = load float, ptr %16, align 4, !tbaa !9
  %1069 = fcmp oeq float %1067, %1068
  br i1 %1069, label %1070, label %1101

1070:                                             ; preds = %1066
  %1071 = load ptr, ptr %7, align 8, !tbaa !5
  %1072 = getelementptr inbounds %struct.MImage, ptr %1071, i32 0, i32 2
  %1073 = load i32, ptr %1072, align 8, !tbaa !16
  %1074 = load i32, ptr %18, align 4, !tbaa !11
  %1075 = icmp eq i32 %1073, %1074
  br i1 %1075, label %1076, label %1100

1076:                                             ; preds = %1070
  %1077 = load ptr, ptr %7, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.MImage, ptr %1077, i32 0, i32 1
  %1079 = load i32, ptr %1078, align 4, !tbaa !15
  %1080 = load i32, ptr %19, align 4, !tbaa !11
  %1081 = icmp eq i32 %1079, %1080
  br i1 %1081, label %1082, label %1100

1082:                                             ; preds = %1076
  %1083 = load ptr, ptr %7, align 8, !tbaa !5
  %1084 = load ptr, ptr %8, align 8, !tbaa !5
  call void @ImageRotate270(ptr noundef %1083, ptr noundef %1084)
  %1085 = load ptr, ptr %32, align 8, !tbaa !5
  %1086 = load ptr, ptr %8, align 8, !tbaa !5
  %1087 = icmp ne ptr %1085, %1086
  br i1 %1087, label %1088, label %1099

1088:                                             ; preds = %1082
  br label %1089

1089:                                             ; preds = %1088
  call void @llvm.lifetime.start.p0(i64 56, ptr %44) #5
  %1090 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %44, ptr align 8 %1090, i64 56, i1 false), !tbaa.struct !27
  %1091 = load ptr, ptr %7, align 8, !tbaa !5
  %1092 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1091, ptr align 8 %1092, i64 56, i1 false), !tbaa.struct !27
  %1093 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1093, ptr align 8 %44, i64 56, i1 false), !tbaa.struct !27
  %1094 = load ptr, ptr %7, align 8, !tbaa !5
  %1095 = load ptr, ptr %8, align 8, !tbaa !5
  call void @HandleExchange(ptr noundef %1094, ptr noundef %1095)
  call void @llvm.lifetime.end.p0(i64 56, ptr %44) #5
  br label %1096

1096:                                             ; preds = %1089
  br label %1097

1097:                                             ; preds = %1096
  %1098 = load ptr, ptr %8, align 8, !tbaa !5
  call void @mImageRelease(ptr noundef %1098)
  br label %1099

1099:                                             ; preds = %1097, %1082
  store i32 1, ptr %29, align 4
  br label %1412

1100:                                             ; preds = %1076, %1070
  br label %1101

1101:                                             ; preds = %1100, %1066, %1062
  br label %1102

1102:                                             ; preds = %1101, %1059
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %1103 = load ptr, ptr %7, align 8, !tbaa !5
  %1104 = call ptr @GetHandle(ptr noundef %1103, i32 noundef 56, i32 noundef 901295839, ptr noundef @endImageRotate)
  store ptr %1104, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %1105 = load ptr, ptr %45, align 8, !tbaa !5
  %1106 = getelementptr inbounds %struct.MHandle, ptr %1105, i32 0, i32 3
  %1107 = load ptr, ptr %1106, align 8, !tbaa !29
  store ptr %1107, ptr %46, align 8, !tbaa !5
  %1108 = load ptr, ptr %45, align 8, !tbaa !5
  %1109 = getelementptr inbounds %struct.MHandle, ptr %1108, i32 0, i32 1
  %1110 = load volatile i32, ptr %1109, align 4, !tbaa !31
  %1111 = icmp eq i32 %1110, 0
  br i1 %1111, label %1158, label %1112

1112:                                             ; preds = %1102
  %1113 = load ptr, ptr %46, align 8, !tbaa !5
  %1114 = getelementptr inbounds %struct.HandleImageRotate, ptr %1113, i32 0, i32 2
  %1115 = getelementptr inbounds %struct.MImagePoint, ptr %1114, i32 0, i32 0
  %1116 = load float, ptr %1115, align 8, !tbaa !32
  %1117 = load float, ptr %14, align 4, !tbaa !9
  %1118 = fcmp une float %1116, %1117
  br i1 %1118, label %1158, label %1119

1119:                                             ; preds = %1112
  %1120 = load ptr, ptr %46, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct.HandleImageRotate, ptr %1120, i32 0, i32 2
  %1122 = getelementptr inbounds %struct.MImagePoint, ptr %1121, i32 0, i32 1
  %1123 = load float, ptr %1122, align 4, !tbaa !34
  %1124 = load float, ptr %15, align 4, !tbaa !9
  %1125 = fcmp une float %1123, %1124
  br i1 %1125, label %1158, label %1126

1126:                                             ; preds = %1119
  %1127 = load ptr, ptr %46, align 8, !tbaa !5
  %1128 = getelementptr inbounds %struct.HandleImageRotate, ptr %1127, i32 0, i32 3
  %1129 = getelementptr inbounds %struct.MImagePoint, ptr %1128, i32 0, i32 0
  %1130 = load float, ptr %1129, align 8, !tbaa !35
  %1131 = load float, ptr %16, align 4, !tbaa !9
  %1132 = fcmp une float %1130, %1131
  br i1 %1132, label %1158, label %1133

1133:                                             ; preds = %1126
  %1134 = load ptr, ptr %46, align 8, !tbaa !5
  %1135 = getelementptr inbounds %struct.HandleImageRotate, ptr %1134, i32 0, i32 3
  %1136 = getelementptr inbounds %struct.MImagePoint, ptr %1135, i32 0, i32 1
  %1137 = load float, ptr %1136, align 4, !tbaa !36
  %1138 = load float, ptr %17, align 4, !tbaa !9
  %1139 = fcmp une float %1137, %1138
  br i1 %1139, label %1158, label %1140

1140:                                             ; preds = %1133
  %1141 = load ptr, ptr %46, align 8, !tbaa !5
  %1142 = getelementptr inbounds %struct.HandleImageRotate, ptr %1141, i32 0, i32 4
  %1143 = load float, ptr %1142, align 8, !tbaa !37
  %1144 = load float, ptr %11, align 4, !tbaa !9
  %1145 = fcmp une float %1143, %1144
  br i1 %1145, label %1158, label %1146

1146:                                             ; preds = %1140
  %1147 = load ptr, ptr %46, align 8, !tbaa !5
  %1148 = getelementptr inbounds %struct.HandleImageRotate, ptr %1147, i32 0, i32 0
  %1149 = load i32, ptr %1148, align 8, !tbaa !38
  %1150 = load i32, ptr %18, align 4, !tbaa !11
  %1151 = icmp ne i32 %1149, %1150
  br i1 %1151, label %1158, label %1152

1152:                                             ; preds = %1146
  %1153 = load ptr, ptr %46, align 8, !tbaa !5
  %1154 = getelementptr inbounds %struct.HandleImageRotate, ptr %1153, i32 0, i32 1
  %1155 = load i32, ptr %1154, align 4, !tbaa !39
  %1156 = load i32, ptr %19, align 4, !tbaa !11
  %1157 = icmp ne i32 %1155, %1156
  br i1 %1157, label %1158, label %1382

1158:                                             ; preds = %1152, %1146, %1140, %1133, %1126, %1119, %1112, %1102
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #5
  %1159 = load float, ptr %31, align 4, !tbaa !9
  %1160 = getelementptr inbounds [6 x float], ptr %47, i64 0, i64 0
  store float %1159, ptr %1160, align 16, !tbaa !9
  %1161 = load float, ptr %30, align 4, !tbaa !9
  %1162 = getelementptr inbounds [6 x float], ptr %47, i64 0, i64 1
  store float %1161, ptr %1162, align 4, !tbaa !9
  %1163 = load float, ptr %14, align 4, !tbaa !9
  %1164 = load float, ptr %16, align 4, !tbaa !9
  %1165 = load float, ptr %31, align 4, !tbaa !9
  %1166 = fneg float %1164
  %1167 = call float @llvm.fmuladd.f32(float %1166, float %1165, float %1163)
  %1168 = load float, ptr %17, align 4, !tbaa !9
  %1169 = load float, ptr %30, align 4, !tbaa !9
  %1170 = fneg float %1168
  %1171 = call float @llvm.fmuladd.f32(float %1170, float %1169, float %1167)
  %1172 = getelementptr inbounds [6 x float], ptr %47, i64 0, i64 2
  store float %1171, ptr %1172, align 8, !tbaa !9
  %1173 = load float, ptr %30, align 4, !tbaa !9
  %1174 = fsub float 0.000000e+00, %1173
  %1175 = getelementptr inbounds [6 x float], ptr %47, i64 0, i64 3
  store float %1174, ptr %1175, align 4, !tbaa !9
  %1176 = load float, ptr %31, align 4, !tbaa !9
  %1177 = getelementptr inbounds [6 x float], ptr %47, i64 0, i64 4
  store float %1176, ptr %1177, align 16, !tbaa !9
  %1178 = load float, ptr %15, align 4, !tbaa !9
  %1179 = load float, ptr %16, align 4, !tbaa !9
  %1180 = load float, ptr %30, align 4, !tbaa !9
  %1181 = call float @llvm.fmuladd.f32(float %1179, float %1180, float %1178)
  %1182 = load float, ptr %17, align 4, !tbaa !9
  %1183 = load float, ptr %31, align 4, !tbaa !9
  %1184 = fneg float %1182
  %1185 = call float @llvm.fmuladd.f32(float %1184, float %1183, float %1181)
  %1186 = getelementptr inbounds [6 x float], ptr %47, i64 0, i64 5
  store float %1185, ptr %1186, align 4, !tbaa !9
  %1187 = load ptr, ptr %46, align 8, !tbaa !5
  %1188 = getelementptr inbounds %struct.HandleImageRotate, ptr %1187, i32 0, i32 5
  %1189 = load ptr, ptr %1188, align 8, !tbaa !40
  %1190 = icmp eq ptr %1189, null
  br i1 %1190, label %1191, label %1198

1191:                                             ; preds = %1158
  %1192 = load i32, ptr %18, align 4, !tbaa !11
  %1193 = add nsw i32 %1192, 0
  %1194 = load i32, ptr %19, align 4, !tbaa !11
  %1195 = call ptr @TableCreate(i32 noundef %1193, i32 noundef %1194, i32 noundef 2, ptr noundef null)
  %1196 = load ptr, ptr %46, align 8, !tbaa !5
  %1197 = getelementptr inbounds %struct.HandleImageRotate, ptr %1196, i32 0, i32 5
  store ptr %1195, ptr %1197, align 8, !tbaa !40
  br label %1239

1198:                                             ; preds = %1158
  br label %1199

1199:                                             ; preds = %1198
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  store i32 5, ptr %48, align 4, !tbaa !11
  br label %1200

1200:                                             ; preds = %1199
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  %1201 = load i32, ptr %48, align 4, !tbaa !11
  %1202 = icmp eq i32 %1201, 0
  br i1 %1202, label %1206, label %1203

1203:                                             ; preds = %1200
  %1204 = load i32, ptr %48, align 4, !tbaa !11
  %1205 = icmp eq i32 %1204, 2
  br label %1206

1206:                                             ; preds = %1203, %1200
  %1207 = phi i1 [ true, %1200 ], [ %1205, %1203 ]
  %1208 = zext i1 %1207 to i32
  store i32 %1208, ptr %49, align 4, !tbaa !11
  %1209 = load i32, ptr %49, align 4, !tbaa !11
  %1210 = icmp ne i32 %1209, 0
  br i1 %1210, label %1211, label %1213

1211:                                             ; preds = %1206
  %1212 = load i32, ptr %49, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %1212, i32 noundef -1, ptr noundef @.str, i32 noundef 630, ptr noundef @__FUNCTION__.mImageRotate, ptr noundef @.str.3)
  br label %1213

1213:                                             ; preds = %1211, %1206
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  br label %1214

1214:                                             ; preds = %1213
  br label %1215

1215:                                             ; preds = %1214
  %1216 = load i32, ptr %48, align 4, !tbaa !11
  %1217 = icmp eq i32 %1216, 3
  br i1 %1217, label %1218, label %1225

1218:                                             ; preds = %1215
  %1219 = load ptr, ptr %46, align 8, !tbaa !5
  %1220 = getelementptr inbounds %struct.HandleImageRotate, ptr %1219, i32 0, i32 5
  %1221 = load ptr, ptr %1220, align 8, !tbaa !40
  %1222 = getelementptr inbounds %struct.MTable, ptr %1221, i64 0
  %1223 = load i32, ptr %18, align 4, !tbaa !11
  %1224 = load i32, ptr %19, align 4, !tbaa !11
  call void @TableRedefine(ptr noundef %1222, i32 noundef %1223, i32 noundef %1224, i32 noundef -1, ptr noundef null)
  br label %1236

1225:                                             ; preds = %1215
  %1226 = load i32, ptr %48, align 4, !tbaa !11
  %1227 = icmp sge i32 %1226, 4
  br i1 %1227, label %1228, label %1235

1228:                                             ; preds = %1225
  %1229 = load ptr, ptr %46, align 8, !tbaa !5
  %1230 = getelementptr inbounds %struct.HandleImageRotate, ptr %1229, i32 0, i32 5
  %1231 = load ptr, ptr %1230, align 8, !tbaa !40
  %1232 = getelementptr inbounds %struct.MTable, ptr %1231, i64 0
  %1233 = load i32, ptr %18, align 4, !tbaa !11
  %1234 = load i32, ptr %19, align 4, !tbaa !11
  call void @TableRedefine(ptr noundef %1232, i32 noundef %1233, i32 noundef %1234, i32 noundef 2, ptr noundef null)
  br label %1235

1235:                                             ; preds = %1228, %1225
  br label %1236

1236:                                             ; preds = %1235, %1218
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  br label %1237

1237:                                             ; preds = %1236
  br label %1238

1238:                                             ; preds = %1237
  br label %1239

1239:                                             ; preds = %1238, %1191
  %1240 = load ptr, ptr %46, align 8, !tbaa !5
  %1241 = getelementptr inbounds %struct.HandleImageRotate, ptr %1240, i32 0, i32 6
  %1242 = load ptr, ptr %1241, align 8, !tbaa !41
  %1243 = icmp eq ptr %1242, null
  br i1 %1243, label %1244, label %1251

1244:                                             ; preds = %1239
  %1245 = load i32, ptr %18, align 4, !tbaa !11
  %1246 = add nsw i32 %1245, 0
  %1247 = load i32, ptr %19, align 4, !tbaa !11
  %1248 = call ptr @TableCreate(i32 noundef %1246, i32 noundef %1247, i32 noundef 2, ptr noundef null)
  %1249 = load ptr, ptr %46, align 8, !tbaa !5
  %1250 = getelementptr inbounds %struct.HandleImageRotate, ptr %1249, i32 0, i32 6
  store ptr %1248, ptr %1250, align 8, !tbaa !41
  br label %1292

1251:                                             ; preds = %1239
  br label %1252

1252:                                             ; preds = %1251
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #5
  store i32 5, ptr %50, align 4, !tbaa !11
  br label %1253

1253:                                             ; preds = %1252
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  %1254 = load i32, ptr %50, align 4, !tbaa !11
  %1255 = icmp eq i32 %1254, 0
  br i1 %1255, label %1259, label %1256

1256:                                             ; preds = %1253
  %1257 = load i32, ptr %50, align 4, !tbaa !11
  %1258 = icmp eq i32 %1257, 2
  br label %1259

1259:                                             ; preds = %1256, %1253
  %1260 = phi i1 [ true, %1253 ], [ %1258, %1256 ]
  %1261 = zext i1 %1260 to i32
  store i32 %1261, ptr %51, align 4, !tbaa !11
  %1262 = load i32, ptr %51, align 4, !tbaa !11
  %1263 = icmp ne i32 %1262, 0
  br i1 %1263, label %1264, label %1266

1264:                                             ; preds = %1259
  %1265 = load i32, ptr %51, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %1265, i32 noundef -1, ptr noundef @.str, i32 noundef 632, ptr noundef @__FUNCTION__.mImageRotate, ptr noundef @.str.3)
  br label %1266

1266:                                             ; preds = %1264, %1259
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  br label %1267

1267:                                             ; preds = %1266
  br label %1268

1268:                                             ; preds = %1267
  %1269 = load i32, ptr %50, align 4, !tbaa !11
  %1270 = icmp eq i32 %1269, 3
  br i1 %1270, label %1271, label %1278

1271:                                             ; preds = %1268
  %1272 = load ptr, ptr %46, align 8, !tbaa !5
  %1273 = getelementptr inbounds %struct.HandleImageRotate, ptr %1272, i32 0, i32 6
  %1274 = load ptr, ptr %1273, align 8, !tbaa !41
  %1275 = getelementptr inbounds %struct.MTable, ptr %1274, i64 0
  %1276 = load i32, ptr %18, align 4, !tbaa !11
  %1277 = load i32, ptr %19, align 4, !tbaa !11
  call void @TableRedefine(ptr noundef %1275, i32 noundef %1276, i32 noundef %1277, i32 noundef -1, ptr noundef null)
  br label %1289

1278:                                             ; preds = %1268
  %1279 = load i32, ptr %50, align 4, !tbaa !11
  %1280 = icmp sge i32 %1279, 4
  br i1 %1280, label %1281, label %1288

1281:                                             ; preds = %1278
  %1282 = load ptr, ptr %46, align 8, !tbaa !5
  %1283 = getelementptr inbounds %struct.HandleImageRotate, ptr %1282, i32 0, i32 6
  %1284 = load ptr, ptr %1283, align 8, !tbaa !41
  %1285 = getelementptr inbounds %struct.MTable, ptr %1284, i64 0
  %1286 = load i32, ptr %18, align 4, !tbaa !11
  %1287 = load i32, ptr %19, align 4, !tbaa !11
  call void @TableRedefine(ptr noundef %1285, i32 noundef %1286, i32 noundef %1287, i32 noundef 2, ptr noundef null)
  br label %1288

1288:                                             ; preds = %1281, %1278
  br label %1289

1289:                                             ; preds = %1288, %1271
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #5
  br label %1290

1290:                                             ; preds = %1289
  br label %1291

1291:                                             ; preds = %1290
  br label %1292

1292:                                             ; preds = %1291, %1244
  %1293 = load ptr, ptr %46, align 8, !tbaa !5
  %1294 = getelementptr inbounds %struct.HandleImageRotate, ptr %1293, i32 0, i32 7
  %1295 = load ptr, ptr %1294, align 8, !tbaa !42
  %1296 = icmp eq ptr %1295, null
  br i1 %1296, label %1297, label %1304

1297:                                             ; preds = %1292
  %1298 = load i32, ptr %18, align 4, !tbaa !11
  %1299 = add nsw i32 %1298, 0
  %1300 = load i32, ptr %19, align 4, !tbaa !11
  %1301 = call ptr @TableCreate(i32 noundef %1299, i32 noundef %1300, i32 noundef 1, ptr noundef null)
  %1302 = load ptr, ptr %46, align 8, !tbaa !5
  %1303 = getelementptr inbounds %struct.HandleImageRotate, ptr %1302, i32 0, i32 7
  store ptr %1301, ptr %1303, align 8, !tbaa !42
  br label %1345

1304:                                             ; preds = %1292
  br label %1305

1305:                                             ; preds = %1304
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  store i32 5, ptr %52, align 4, !tbaa !11
  br label %1306

1306:                                             ; preds = %1305
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  %1307 = load i32, ptr %52, align 4, !tbaa !11
  %1308 = icmp eq i32 %1307, 0
  br i1 %1308, label %1312, label %1309

1309:                                             ; preds = %1306
  %1310 = load i32, ptr %52, align 4, !tbaa !11
  %1311 = icmp eq i32 %1310, 2
  br label %1312

1312:                                             ; preds = %1309, %1306
  %1313 = phi i1 [ true, %1306 ], [ %1311, %1309 ]
  %1314 = zext i1 %1313 to i32
  store i32 %1314, ptr %53, align 4, !tbaa !11
  %1315 = load i32, ptr %53, align 4, !tbaa !11
  %1316 = icmp ne i32 %1315, 0
  br i1 %1316, label %1317, label %1319

1317:                                             ; preds = %1312
  %1318 = load i32, ptr %53, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %1318, i32 noundef -1, ptr noundef @.str, i32 noundef 634, ptr noundef @__FUNCTION__.mImageRotate, ptr noundef @.str.3)
  br label %1319

1319:                                             ; preds = %1317, %1312
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  br label %1320

1320:                                             ; preds = %1319
  br label %1321

1321:                                             ; preds = %1320
  %1322 = load i32, ptr %52, align 4, !tbaa !11
  %1323 = icmp eq i32 %1322, 3
  br i1 %1323, label %1324, label %1331

1324:                                             ; preds = %1321
  %1325 = load ptr, ptr %46, align 8, !tbaa !5
  %1326 = getelementptr inbounds %struct.HandleImageRotate, ptr %1325, i32 0, i32 7
  %1327 = load ptr, ptr %1326, align 8, !tbaa !42
  %1328 = getelementptr inbounds %struct.MTable, ptr %1327, i64 0
  %1329 = load i32, ptr %18, align 4, !tbaa !11
  %1330 = load i32, ptr %19, align 4, !tbaa !11
  call void @TableRedefine(ptr noundef %1328, i32 noundef %1329, i32 noundef %1330, i32 noundef -1, ptr noundef null)
  br label %1342

1331:                                             ; preds = %1321
  %1332 = load i32, ptr %52, align 4, !tbaa !11
  %1333 = icmp sge i32 %1332, 4
  br i1 %1333, label %1334, label %1341

1334:                                             ; preds = %1331
  %1335 = load ptr, ptr %46, align 8, !tbaa !5
  %1336 = getelementptr inbounds %struct.HandleImageRotate, ptr %1335, i32 0, i32 7
  %1337 = load ptr, ptr %1336, align 8, !tbaa !42
  %1338 = getelementptr inbounds %struct.MTable, ptr %1337, i64 0
  %1339 = load i32, ptr %18, align 4, !tbaa !11
  %1340 = load i32, ptr %19, align 4, !tbaa !11
  call void @TableRedefine(ptr noundef %1338, i32 noundef %1339, i32 noundef %1340, i32 noundef 1, ptr noundef null)
  br label %1341

1341:                                             ; preds = %1334, %1331
  br label %1342

1342:                                             ; preds = %1341, %1324
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  br label %1343

1343:                                             ; preds = %1342
  br label %1344

1344:                                             ; preds = %1343
  br label %1345

1345:                                             ; preds = %1344, %1297
  %1346 = load ptr, ptr %7, align 8, !tbaa !5
  %1347 = getelementptr inbounds [6 x float], ptr %47, i64 0, i64 0
  %1348 = load ptr, ptr %46, align 8, !tbaa !5
  %1349 = getelementptr inbounds %struct.HandleImageRotate, ptr %1348, i32 0, i32 5
  %1350 = load ptr, ptr %1349, align 8, !tbaa !40
  %1351 = load ptr, ptr %46, align 8, !tbaa !5
  %1352 = getelementptr inbounds %struct.HandleImageRotate, ptr %1351, i32 0, i32 6
  %1353 = load ptr, ptr %1352, align 8, !tbaa !41
  %1354 = load ptr, ptr %46, align 8, !tbaa !5
  %1355 = getelementptr inbounds %struct.HandleImageRotate, ptr %1354, i32 0, i32 7
  %1356 = load ptr, ptr %1355, align 8, !tbaa !42
  call void @TransformGrid(ptr noundef %1346, ptr noundef @Affine_x, ptr noundef @Affine_y, ptr noundef %1347, ptr noundef %1350, ptr noundef %1353, ptr noundef %1356)
  %1357 = load float, ptr %14, align 4, !tbaa !9
  %1358 = load ptr, ptr %46, align 8, !tbaa !5
  %1359 = getelementptr inbounds %struct.HandleImageRotate, ptr %1358, i32 0, i32 2
  %1360 = getelementptr inbounds %struct.MImagePoint, ptr %1359, i32 0, i32 0
  store float %1357, ptr %1360, align 8, !tbaa !32
  %1361 = load float, ptr %15, align 4, !tbaa !9
  %1362 = load ptr, ptr %46, align 8, !tbaa !5
  %1363 = getelementptr inbounds %struct.HandleImageRotate, ptr %1362, i32 0, i32 2
  %1364 = getelementptr inbounds %struct.MImagePoint, ptr %1363, i32 0, i32 1
  store float %1361, ptr %1364, align 4, !tbaa !34
  %1365 = load float, ptr %16, align 4, !tbaa !9
  %1366 = load ptr, ptr %46, align 8, !tbaa !5
  %1367 = getelementptr inbounds %struct.HandleImageRotate, ptr %1366, i32 0, i32 3
  %1368 = getelementptr inbounds %struct.MImagePoint, ptr %1367, i32 0, i32 0
  store float %1365, ptr %1368, align 8, !tbaa !35
  %1369 = load float, ptr %17, align 4, !tbaa !9
  %1370 = load ptr, ptr %46, align 8, !tbaa !5
  %1371 = getelementptr inbounds %struct.HandleImageRotate, ptr %1370, i32 0, i32 3
  %1372 = getelementptr inbounds %struct.MImagePoint, ptr %1371, i32 0, i32 1
  store float %1369, ptr %1372, align 4, !tbaa !36
  %1373 = load float, ptr %11, align 4, !tbaa !9
  %1374 = load ptr, ptr %46, align 8, !tbaa !5
  %1375 = getelementptr inbounds %struct.HandleImageRotate, ptr %1374, i32 0, i32 4
  store float %1373, ptr %1375, align 8, !tbaa !37
  %1376 = load i32, ptr %18, align 4, !tbaa !11
  %1377 = load ptr, ptr %46, align 8, !tbaa !5
  %1378 = getelementptr inbounds %struct.HandleImageRotate, ptr %1377, i32 0, i32 0
  store i32 %1376, ptr %1378, align 8, !tbaa !38
  %1379 = load i32, ptr %19, align 4, !tbaa !11
  %1380 = load ptr, ptr %46, align 8, !tbaa !5
  %1381 = getelementptr inbounds %struct.HandleImageRotate, ptr %1380, i32 0, i32 1
  store i32 %1379, ptr %1381, align 4, !tbaa !39
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #5
  br label %1382

1382:                                             ; preds = %1345, %1152
  %1383 = load ptr, ptr %7, align 8, !tbaa !5
  %1384 = load ptr, ptr %8, align 8, !tbaa !5
  %1385 = load ptr, ptr %46, align 8, !tbaa !5
  %1386 = getelementptr inbounds %struct.HandleImageRotate, ptr %1385, i32 0, i32 5
  %1387 = load ptr, ptr %1386, align 8, !tbaa !40
  %1388 = load ptr, ptr %46, align 8, !tbaa !5
  %1389 = getelementptr inbounds %struct.HandleImageRotate, ptr %1388, i32 0, i32 6
  %1390 = load ptr, ptr %1389, align 8, !tbaa !41
  %1391 = load ptr, ptr %46, align 8, !tbaa !5
  %1392 = getelementptr inbounds %struct.HandleImageRotate, ptr %1391, i32 0, i32 7
  %1393 = load ptr, ptr %1392, align 8, !tbaa !42
  %1394 = load i32, ptr %12, align 4, !tbaa !11
  call void @GridInterpolation(ptr noundef %1383, ptr noundef %1384, ptr noundef %1387, ptr noundef %1390, ptr noundef %1393, i32 noundef %1394)
  %1395 = load ptr, ptr %32, align 8, !tbaa !5
  %1396 = load ptr, ptr %8, align 8, !tbaa !5
  %1397 = icmp ne ptr %1395, %1396
  br i1 %1397, label %1398, label %1409

1398:                                             ; preds = %1382
  br label %1399

1399:                                             ; preds = %1398
  call void @llvm.lifetime.start.p0(i64 56, ptr %54) #5
  %1400 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %54, ptr align 8 %1400, i64 56, i1 false), !tbaa.struct !27
  %1401 = load ptr, ptr %7, align 8, !tbaa !5
  %1402 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1401, ptr align 8 %1402, i64 56, i1 false), !tbaa.struct !27
  %1403 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1403, ptr align 8 %54, i64 56, i1 false), !tbaa.struct !27
  %1404 = load ptr, ptr %7, align 8, !tbaa !5
  %1405 = load ptr, ptr %8, align 8, !tbaa !5
  call void @HandleExchange(ptr noundef %1404, ptr noundef %1405)
  call void @llvm.lifetime.end.p0(i64 56, ptr %54) #5
  br label %1406

1406:                                             ; preds = %1399
  br label %1407

1407:                                             ; preds = %1406
  %1408 = load ptr, ptr %8, align 8, !tbaa !5
  call void @mImageRelease(ptr noundef %1408)
  br label %1409

1409:                                             ; preds = %1407, %1382
  %1410 = load ptr, ptr %45, align 8, !tbaa !5
  %1411 = getelementptr inbounds %struct.MHandle, ptr %1410, i32 0, i32 1
  store volatile i32 1, ptr %1411, align 4, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  store i32 0, ptr %29, align 4
  br label %1412

1412:                                             ; preds = %1409, %1099, %1056, %1013
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  br label %1413

1413:                                             ; preds = %1412, %520
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  %1414 = load i32, ptr %29, align 4
  switch i32 %1414, label %1416 [
    i32 0, label %1415
    i32 1, label %1415
  ]

1415:                                             ; preds = %1413, %1413
  ret void

1416:                                             ; preds = %1413
  unreachable
}

declare void @m_ImageCut(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare double @mSin(double noundef) #3

declare double @mCos(double noundef) #3

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 0}
!14 = !{!"MImage", !12, i64 0, !12, i64 4, !12, i64 8, !7, i64 16, !6, i64 48}
!15 = !{!14, !12, i64 4}
!16 = !{!14, !12, i64 8}
!17 = !{!18, !10, i64 0}
!18 = !{!"MImagePoint", !10, i64 0, !10, i64 4}
!19 = !{!18, !10, i64 4}
!20 = !{!21, !21, i64 0}
!21 = !{!"long", !7, i64 0}
!22 = !{!23, !12, i64 0}
!23 = !{!"MImageRect", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12}
!24 = !{!23, !12, i64 4}
!25 = !{!23, !12, i64 8}
!26 = !{!23, !12, i64 12}
!27 = !{i64 0, i64 4, !11, i64 4, i64 4, !11, i64 8, i64 4, !11, i64 16, i64 32, !28, i64 48, i64 8, !5}
!28 = !{!7, !7, i64 0}
!29 = !{!30, !6, i64 16}
!30 = !{!"MHandle", !12, i64 0, !12, i64 4, !6, i64 8, !6, i64 16}
!31 = !{!30, !12, i64 4}
!32 = !{!33, !10, i64 8}
!33 = !{!"HandleImageRotate", !12, i64 0, !12, i64 4, !18, i64 8, !18, i64 16, !10, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!34 = !{!33, !10, i64 12}
!35 = !{!33, !10, i64 16}
!36 = !{!33, !10, i64 20}
!37 = !{!33, !10, i64 24}
!38 = !{!33, !12, i64 0}
!39 = !{!33, !12, i64 4}
!40 = !{!33, !6, i64 32}
!41 = !{!33, !6, i64 40}
!42 = !{!33, !6, i64 48}


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

%struct.MImageRect = type { i32, i32, i32, i32 }
%struct.MImage = type { i32, i32, i32, [4 x ptr], ptr }

@.str = external hidden unnamed_addr constant [88 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@__FUNCTION__.mImageRotate = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [14 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @TransformGrid(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #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 speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #2

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

; Function Attrs: nounwind uwtable
declare dso_local void @GridInterpolation(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @m_Exception(i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ...) local_unnamed_addr #3

declare ptr @ImageCreate(i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare void @ImageRedefine(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare ptr @GetHandle(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare ptr @TableCreate(i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare void @TableRedefine(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

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

declare void @HandleExchange(ptr noundef, ptr noundef) local_unnamed_addr #3

declare void @mImageRelease(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local float @Affine_x(i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local float @Affine_y(i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @ImageRotate90(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @ImageRotate180(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @ImageRotate270(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @endImageRotate(ptr noundef) #0

; Function Attrs: nounwind uwtable
define dso_local void @mImageRotate(ptr noundef %0, ptr noundef %1, ptr noundef readonly %2, ptr noundef readonly %3, float noundef %4, i32 noundef %5) local_unnamed_addr #0 {
  %7 = alloca %struct.MImageRect, align 4
  %8 = alloca %struct.MImageRect, align 4
  %9 = alloca %struct.MImage, align 8
  %10 = alloca %struct.MImage, align 8
  %11 = alloca %struct.MImage, align 8
  %12 = alloca [6 x float], align 16
  %13 = alloca %struct.MImage, align 8
  %magicptr = ptrtoint ptr %0 to i64
  switch i64 %magicptr, label %14 [
    i64 -1, label %.thread
    i64 0, label %.thread
  ]

14:                                               ; preds = %6
  %15 = getelementptr inbounds i8, ptr %0, i64 16
  %16 = icmp eq ptr %15, inttoptr (i64 -1 to ptr)
  br i1 %16, label %.thread, label %17

17:                                               ; preds = %14
  %18 = load i32, ptr %0, align 8, !tbaa !5
  %19 = icmp slt i32 %18, 1
  br i1 %19, label %.thread, label %20

20:                                               ; preds = %17
  %21 = getelementptr inbounds i8, ptr %0, i64 4
  %22 = load i32, ptr %21, align 4, !tbaa !11
  %23 = icmp slt i32 %22, 1
  br i1 %23, label %.thread, label %24

24:                                               ; preds = %20
  %25 = getelementptr inbounds i8, ptr %0, i64 8
  %26 = load i32, ptr %25, align 8, !tbaa !12
  %27 = icmp sgt i32 %26, 0
  br i1 %27, label %28, label %.thread

.thread:                                          ; preds = %14, %17, %20, %6, %6, %24
  tail call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef 1, i32 noundef -1, ptr noundef nonnull @.str, i32 noundef 544, ptr noundef nonnull @__FUNCTION__.mImageRotate, ptr noundef nonnull @.str.4) #6
  br label %28

28:                                               ; preds = %.thread, %24
  %magicptr489 = ptrtoint ptr %1 to i64
  switch i64 %magicptr489, label %30 [
    i64 -1, label %29
    i64 0, label %29
  ]

29:                                               ; preds = %28, %28
  br label %30

30:                                               ; preds = %28, %29
  %.0 = phi ptr [ %0, %29 ], [ %1, %28 ]
  %31 = icmp eq ptr %2, null
  br i1 %31, label %32, label %38

32:                                               ; preds = %30
  %33 = getelementptr inbounds i8, ptr %0, i64 4
  %34 = load <2 x i32>, ptr %33, align 4, !tbaa !13
  %35 = sitofp <2 x i32> %34 to <2 x float>
  %36 = fmul <2 x float> %35, <float 5.000000e-01, float 5.000000e-01>
  %37 = shufflevector <2 x float> %36, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  br label %40

38:                                               ; preds = %30
  %39 = load <2 x float>, ptr %2, align 4, !tbaa !14
  br label %40

40:                                               ; preds = %38, %32
  %41 = phi <2 x float> [ %37, %32 ], [ %39, %38 ]
  %42 = getelementptr inbounds i8, ptr %.0, i64 4
  %43 = load <2 x i32>, ptr %42, align 4, !tbaa !13
  %44 = fcmp oeq float %4, 0.000000e+00
  br i1 %44, label %45, label %93

45:                                               ; preds = %40
  %46 = ptrtoint ptr %.0 to i64
  %47 = getelementptr inbounds i8, ptr %.0, i64 56
  %48 = ptrtoint ptr %47 to i64
  %49 = add i64 %46, 56
  %50 = icmp eq i64 %49, %48
  br i1 %50, label %51, label %74

51:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #6
  %52 = extractelement <2 x i32> %43, i64 1
  %53 = sdiv i32 %52, 2
  %54 = sitofp i32 %53 to float
  %55 = extractelement <2 x float> %41, i64 0
  %56 = fsub float %55, %54
  %57 = fadd float %56, 0.000000e+00
  %58 = fptosi float %57 to i64
  %59 = trunc i64 %58 to i32
  store i32 %59, ptr %7, align 4, !tbaa !16
  %60 = fadd float %55, %54
  %61 = fptosi float %60 to i64
  %62 = trunc i64 %61 to i32
  %63 = getelementptr inbounds i8, ptr %7, i64 4
  store i32 %62, ptr %63, align 4, !tbaa !18
  %64 = extractelement <2 x i32> %43, i64 0
  %65 = sdiv i32 %64, 2
  %66 = sitofp i32 %65 to float
  %67 = extractelement <2 x float> %41, i64 1
  %68 = fsub float %67, %66
  %69 = getelementptr inbounds i8, ptr %7, i64 8
  %70 = fadd float %67, %66
  %71 = insertelement <2 x float> poison, float %68, i64 0
  %72 = insertelement <2 x float> %71, float %70, i64 1
  %73 = fptosi <2 x float> %72 to <2 x i32>
  store <2 x i32> %73, ptr %69, align 4, !tbaa !13
  call void @m_ImageCut(ptr noundef %0, ptr noundef nonnull %.0, ptr noundef nonnull %7, ptr noundef null) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #6
  br label %372

74:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #6
  %75 = trunc i64 %46 to i32
  store i32 %75, ptr %8, align 4, !tbaa !16
  %76 = sdiv <2 x i32> %43, <i32 2, i32 2>
  %77 = getelementptr inbounds i8, ptr %8, i64 4
  %78 = getelementptr inbounds i8, ptr %8, i64 8
  %79 = sitofp <2 x i32> %76 to <2 x float>
  %80 = shufflevector <2 x float> %79, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %81 = fsub <2 x float> %41, %80
  %82 = extractelement <2 x float> %81, i64 0
  %83 = fptosi float %82 to i64
  %84 = trunc i64 %83 to i32
  store i32 %84, ptr %77, align 4, !tbaa !18
  %85 = fadd <2 x float> %41, %80
  %86 = fsub <2 x float> %41, %80
  %87 = shufflevector <2 x float> %85, <2 x float> %86, <2 x i32> <i32 0, i32 3>
  %88 = fptosi <2 x float> %87 to <2 x i32>
  store <2 x i32> %88, ptr %78, align 4, !tbaa !13
  %89 = fadd <2 x float> %41, %80
  %90 = extractelement <2 x float> %89, i64 1
  %91 = fptosi float %90 to i64
  %92 = inttoptr i64 %91 to ptr
  call void @m_ImageCut(ptr noundef %0, ptr noundef null, ptr noundef nonnull %8, ptr noundef %92) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  br label %372

93:                                               ; preds = %40
  %94 = fpext float %4 to double
  %95 = tail call double @mSin(double noundef %94) #6
  %96 = tail call double @mCos(double noundef %94) #6
  %97 = insertelement <2 x double> poison, double %96, i64 0
  %98 = insertelement <2 x double> %97, double %95, i64 1
  %99 = fptrunc <2 x double> %98 to <2 x float>
  %100 = icmp eq ptr %.0, %0
  br i1 %100, label %101, label %147

101:                                              ; preds = %93
  %102 = getelementptr inbounds i8, ptr %0, i64 4
  %103 = load i32, ptr %102, align 4, !tbaa !11
  %104 = sitofp i32 %103 to float
  %105 = tail call <2 x float> @llvm.fabs.v2f32(<2 x float> %99)
  %106 = getelementptr inbounds i8, ptr %0, i64 8
  %107 = load i32, ptr %106, align 8, !tbaa !12
  %108 = sitofp i32 %107 to float
  %109 = insertelement <2 x float> poison, float %108, i64 0
  %110 = shufflevector <2 x float> %109, <2 x float> poison, <2 x i32> zeroinitializer
  %111 = fmul <2 x float> %105, %110
  %112 = shufflevector <2 x float> %111, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %113 = insertelement <2 x float> poison, float %104, i64 0
  %114 = shufflevector <2 x float> %113, <2 x float> poison, <2 x i32> zeroinitializer
  %115 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %114, <2 x float> %105, <2 x float> %112)
  %116 = fptosi <2 x float> %115 to <2 x i32>
  %.not481 = icmp eq ptr %3, null
  br i1 %.not481, label %141, label %117

117:                                              ; preds = %101
  %118 = fadd <2 x float> %41, %41
  %119 = extractelement <2 x float> %118, i64 0
  %120 = fsub float %119, %108
  %121 = fadd <2 x float> %41, %41
  %122 = extractelement <2 x float> %121, i64 1
  %123 = fsub float %122, %104
  %124 = fneg float %123
  %125 = sitofp <2 x i32> %116 to <2 x float>
  %126 = insertelement <2 x float> poison, float %123, i64 0
  %127 = insertelement <2 x float> %126, float %124, i64 1
  %128 = fmul <2 x float> %127, %99
  %129 = insertelement <2 x float> poison, float %120, i64 0
  %130 = shufflevector <2 x float> %129, <2 x float> poison, <2 x i32> zeroinitializer
  %131 = shufflevector <2 x float> %128, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %132 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %130, <2 x float> %99, <2 x float> %131)
  %133 = fadd <2 x float> %132, %125
  %134 = fmul <2 x float> %133, <float 5.000000e-01, float 5.000000e-01>
  %135 = load <2 x float>, ptr %3, align 4, !tbaa !14
  %136 = fsub <2 x float> %134, %135
  %137 = fadd <2 x float> %134, %135
  %138 = shufflevector <2 x float> %136, <2 x float> %137, <2 x i32> <i32 3, i32 0>
  %139 = fptosi <2 x float> %138 to <2 x i32>
  %140 = add nsw <2 x i32> %139, %116
  br label %141

141:                                              ; preds = %117, %101
  %142 = phi <2 x i32> [ %140, %117 ], [ %116, %101 ]
  %143 = load i32, ptr %0, align 8, !tbaa !5
  %144 = extractelement <2 x i32> %142, i64 0
  %145 = extractelement <2 x i32> %142, i64 1
  %146 = tail call ptr @ImageCreate(i32 noundef %143, i32 noundef %144, i32 noundef %145, ptr noundef null) #6
  br label %200

147:                                              ; preds = %93
  %148 = icmp slt <2 x i32> %43, <i32 1, i32 1>
  %149 = extractelement <2 x i1> %148, i64 0
  %150 = extractelement <2 x i1> %148, i64 1
  %or.cond12 = select i1 %149, i1 true, i1 %150
  br i1 %or.cond12, label %151, label %197

151:                                              ; preds = %147
  %152 = getelementptr inbounds i8, ptr %0, i64 4
  %153 = load i32, ptr %152, align 4, !tbaa !11
  %154 = sitofp i32 %153 to float
  %155 = tail call <2 x float> @llvm.fabs.v2f32(<2 x float> %99)
  %156 = getelementptr inbounds i8, ptr %0, i64 8
  %157 = load i32, ptr %156, align 8, !tbaa !12
  %158 = sitofp i32 %157 to float
  %159 = insertelement <2 x float> poison, float %158, i64 0
  %160 = shufflevector <2 x float> %159, <2 x float> poison, <2 x i32> zeroinitializer
  %161 = fmul <2 x float> %155, %160
  %162 = shufflevector <2 x float> %161, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %163 = insertelement <2 x float> poison, float %154, i64 0
  %164 = shufflevector <2 x float> %163, <2 x float> poison, <2 x i32> zeroinitializer
  %165 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %164, <2 x float> %155, <2 x float> %162)
  %166 = fptosi <2 x float> %165 to <2 x i32>
  %.not480 = icmp eq ptr %3, null
  br i1 %.not480, label %191, label %167

167:                                              ; preds = %151
  %168 = fadd <2 x float> %41, %41
  %169 = extractelement <2 x float> %168, i64 0
  %170 = fsub float %169, %158
  %171 = fadd <2 x float> %41, %41
  %172 = extractelement <2 x float> %171, i64 1
  %173 = fsub float %172, %154
  %174 = fneg float %173
  %175 = sitofp <2 x i32> %166 to <2 x float>
  %176 = insertelement <2 x float> poison, float %173, i64 0
  %177 = insertelement <2 x float> %176, float %174, i64 1
  %178 = fmul <2 x float> %177, %99
  %179 = insertelement <2 x float> poison, float %170, i64 0
  %180 = shufflevector <2 x float> %179, <2 x float> poison, <2 x i32> zeroinitializer
  %181 = shufflevector <2 x float> %178, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %182 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %180, <2 x float> %99, <2 x float> %181)
  %183 = fadd <2 x float> %182, %175
  %184 = fmul <2 x float> %183, <float 5.000000e-01, float 5.000000e-01>
  %185 = load <2 x float>, ptr %3, align 4, !tbaa !14
  %186 = fsub <2 x float> %184, %185
  %187 = fadd <2 x float> %184, %185
  %188 = shufflevector <2 x float> %186, <2 x float> %187, <2 x i32> <i32 3, i32 0>
  %189 = fptosi <2 x float> %188 to <2 x i32>
  %190 = add nsw <2 x i32> %189, %166
  br label %191

191:                                              ; preds = %167, %151
  %192 = phi <2 x i32> [ %190, %167 ], [ %166, %151 ]
  %193 = load i32, ptr %0, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %.0, i64 16
  %195 = extractelement <2 x i32> %192, i64 0
  %196 = extractelement <2 x i32> %192, i64 1
  tail call void @ImageRedefine(ptr noundef nonnull %.0, i32 noundef %193, i32 noundef %195, i32 noundef %196, ptr noundef nonnull %194) #6
  br label %200

197:                                              ; preds = %147
  %198 = load i32, ptr %0, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %.0, i64 16
  tail call void @ImageRedefine(ptr noundef nonnull %.0, i32 noundef %198, i32 noundef -1, i32 noundef -1, ptr noundef nonnull %199) #6
  br label %200

200:                                              ; preds = %141, %197, %191
  %.1 = phi ptr [ %146, %141 ], [ %.0, %191 ], [ %.0, %197 ]
  %201 = phi <2 x i32> [ %142, %141 ], [ %192, %191 ], [ %43, %197 ]
  %magicptr490 = ptrtoint ptr %.1 to i64
  switch i64 %magicptr490, label %202 [
    i64 -1, label %.thread501
    i64 0, label %.thread501
  ]

202:                                              ; preds = %200
  %203 = getelementptr inbounds i8, ptr %.1, i64 16
  %204 = icmp eq ptr %203, inttoptr (i64 -1 to ptr)
  br i1 %204, label %.thread501, label %205

205:                                              ; preds = %202
  %206 = load i32, ptr %.1, align 8, !tbaa !5
  %207 = icmp slt i32 %206, 1
  br i1 %207, label %.thread501, label %208

208:                                              ; preds = %205
  %209 = getelementptr inbounds i8, ptr %.1, i64 4
  %210 = load i32, ptr %209, align 4, !tbaa !11
  %211 = icmp slt i32 %210, 1
  br i1 %211, label %.thread501, label %212

212:                                              ; preds = %208
  %213 = getelementptr inbounds i8, ptr %.1, i64 8
  %214 = load i32, ptr %213, align 8, !tbaa !12
  %215 = icmp sgt i32 %214, 0
  br i1 %215, label %216, label %.thread501

.thread501:                                       ; preds = %202, %205, %208, %200, %200, %212
  tail call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef 1, i32 noundef -1, ptr noundef nonnull @.str, i32 noundef 591, ptr noundef nonnull @__FUNCTION__.mImageRotate, ptr noundef nonnull @.str.6) #6
  br label %216

216:                                              ; preds = %.thread501, %212
  %217 = icmp eq ptr %3, null
  br i1 %217, label %218, label %221

218:                                              ; preds = %216
  %219 = sitofp <2 x i32> %201 to <2 x float>
  %220 = fmul <2 x float> %219, <float 5.000000e-01, float 5.000000e-01>
  br label %224

221:                                              ; preds = %216
  %222 = load <2 x float>, ptr %3, align 4, !tbaa !14
  %223 = shufflevector <2 x float> %222, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  br label %224

224:                                              ; preds = %221, %218
  %225 = phi <2 x float> [ %220, %218 ], [ %223, %221 ]
  %226 = fcmp oeq float %4, 9.000000e+01
  %227 = extractelement <2 x float> %41, i64 0
  %228 = extractelement <2 x float> %225, i64 0
  %229 = fcmp oeq float %227, %228
  %or.cond = select i1 %226, i1 %229, i1 false
  %230 = extractelement <2 x float> %41, i64 1
  %231 = extractelement <2 x float> %225, i64 1
  %232 = fcmp oeq float %230, %231
  %or.cond491 = select i1 %or.cond, i1 %232, i1 false
  br i1 %or.cond491, label %233, label %245

233:                                              ; preds = %224
  %234 = getelementptr inbounds i8, ptr %0, i64 8
  %235 = load i32, ptr %234, align 8, !tbaa !12
  %236 = extractelement <2 x i32> %201, i64 0
  %237 = icmp eq i32 %235, %236
  br i1 %237, label %238, label %245

238:                                              ; preds = %233
  %239 = getelementptr inbounds i8, ptr %0, i64 4
  %240 = load i32, ptr %239, align 4, !tbaa !11
  %241 = extractelement <2 x i32> %201, i64 1
  %242 = icmp eq i32 %240, %241
  br i1 %242, label %243, label %245

243:                                              ; preds = %238
  tail call void @ImageRotate90(ptr noundef nonnull %0, ptr noundef %.1)
  %.not488 = icmp eq ptr %.0, %.1
  br i1 %.not488, label %372, label %244

244:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %9)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %9, ptr noundef nonnull align 8 dereferenceable(56) %0, i64 56, i1 false), !tbaa.struct !19
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef nonnull align 8 dereferenceable(56) %.1, i64 56, i1 false), !tbaa.struct !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %.1, ptr noundef nonnull align 8 dereferenceable(56) %9, i64 56, i1 false), !tbaa.struct !19
  tail call void @HandleExchange(ptr noundef nonnull %0, ptr noundef %.1) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %9)
  tail call void @mImageRelease(ptr noundef %.1) #6
  br label %372

245:                                              ; preds = %238, %233, %224
  %246 = fcmp oeq float %4, 1.800000e+02
  %247 = fcmp oeq float %227, %231
  %or.cond492 = select i1 %246, i1 %247, i1 false
  %248 = fcmp oeq float %230, %228
  %or.cond493 = select i1 %or.cond492, i1 %248, i1 false
  br i1 %or.cond493, label %249, label %261

249:                                              ; preds = %245
  %250 = getelementptr inbounds i8, ptr %0, i64 8
  %251 = load i32, ptr %250, align 8, !tbaa !12
  %252 = extractelement <2 x i32> %201, i64 1
  %253 = icmp eq i32 %251, %252
  br i1 %253, label %254, label %261

254:                                              ; preds = %249
  %255 = getelementptr inbounds i8, ptr %0, i64 4
  %256 = load i32, ptr %255, align 4, !tbaa !11
  %257 = extractelement <2 x i32> %201, i64 0
  %258 = icmp eq i32 %256, %257
  br i1 %258, label %259, label %261

259:                                              ; preds = %254
  tail call void @ImageRotate180(ptr noundef nonnull %0, ptr noundef %.1)
  %.not487 = icmp eq ptr %.0, %.1
  br i1 %.not487, label %372, label %260

260:                                              ; preds = %259
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %10)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %10, ptr noundef nonnull align 8 dereferenceable(56) %0, i64 56, i1 false), !tbaa.struct !19
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef nonnull align 8 dereferenceable(56) %.1, i64 56, i1 false), !tbaa.struct !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %.1, ptr noundef nonnull align 8 dereferenceable(56) %10, i64 56, i1 false), !tbaa.struct !19
  tail call void @HandleExchange(ptr noundef nonnull %0, ptr noundef %.1) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %10)
  tail call void @mImageRelease(ptr noundef %.1) #6
  br label %372

261:                                              ; preds = %254, %249, %245
  %262 = fcmp oeq float %4, 2.700000e+02
  %or.cond494 = select i1 %262, i1 %229, i1 false
  %or.cond495 = select i1 %or.cond494, i1 %232, i1 false
  br i1 %or.cond495, label %263, label %275

263:                                              ; preds = %261
  %264 = getelementptr inbounds i8, ptr %0, i64 8
  %265 = load i32, ptr %264, align 8, !tbaa !12
  %266 = extractelement <2 x i32> %201, i64 0
  %267 = icmp eq i32 %265, %266
  br i1 %267, label %268, label %275

268:                                              ; preds = %263
  %269 = getelementptr inbounds i8, ptr %0, i64 4
  %270 = load i32, ptr %269, align 4, !tbaa !11
  %271 = extractelement <2 x i32> %201, i64 1
  %272 = icmp eq i32 %270, %271
  br i1 %272, label %273, label %275

273:                                              ; preds = %268
  tail call void @ImageRotate270(ptr noundef nonnull %0, ptr noundef %.1)
  %.not486 = icmp eq ptr %.0, %.1
  br i1 %.not486, label %372, label %274

274:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %11)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %11, ptr noundef nonnull align 8 dereferenceable(56) %0, i64 56, i1 false), !tbaa.struct !19
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef nonnull align 8 dereferenceable(56) %.1, i64 56, i1 false), !tbaa.struct !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %.1, ptr noundef nonnull align 8 dereferenceable(56) %11, i64 56, i1 false), !tbaa.struct !19
  tail call void @HandleExchange(ptr noundef nonnull %0, ptr noundef %.1) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %11)
  tail call void @mImageRelease(ptr noundef %.1) #6
  br label %372

275:                                              ; preds = %268, %263, %261
  %276 = tail call ptr @GetHandle(ptr noundef nonnull %0, i32 noundef 56, i32 noundef 901295839, ptr noundef nonnull @endImageRotate) #6
  %277 = getelementptr inbounds i8, ptr %276, i64 16
  %278 = load ptr, ptr %277, align 8, !tbaa !22
  %279 = getelementptr inbounds i8, ptr %276, i64 4
  %280 = load volatile i32, ptr %279, align 4, !tbaa !24
  %281 = icmp eq i32 %280, 0
  br i1 %281, label %309, label %282

282:                                              ; preds = %275
  %283 = getelementptr inbounds i8, ptr %278, i64 8
  %284 = load float, ptr %283, align 8, !tbaa !25
  %285 = fcmp une float %284, %227
  br i1 %285, label %309, label %286

286:                                              ; preds = %282
  %287 = getelementptr inbounds i8, ptr %278, i64 12
  %288 = load float, ptr %287, align 4, !tbaa !28
  %289 = fcmp une float %288, %230
  br i1 %289, label %309, label %290

290:                                              ; preds = %286
  %291 = getelementptr inbounds i8, ptr %278, i64 16
  %292 = load float, ptr %291, align 8, !tbaa !29
  %293 = fcmp une float %292, %231
  br i1 %293, label %309, label %294

294:                                              ; preds = %290
  %295 = getelementptr inbounds i8, ptr %278, i64 20
  %296 = load float, ptr %295, align 4, !tbaa !30
  %297 = fcmp une float %296, %228
  br i1 %297, label %309, label %298

298:                                              ; preds = %294
  %299 = getelementptr inbounds i8, ptr %278, i64 24
  %300 = load float, ptr %299, align 8, !tbaa !31
  %301 = fcmp une float %300, %4
  br i1 %301, label %309, label %302

302:                                              ; preds = %298
  %303 = load i32, ptr %278, align 8, !tbaa !32
  %304 = extractelement <2 x i32> %201, i64 0
  %.not483 = icmp eq i32 %303, %304
  br i1 %.not483, label %305, label %309

305:                                              ; preds = %302
  %306 = getelementptr inbounds i8, ptr %278, i64 4
  %307 = load i32, ptr %306, align 4, !tbaa !33
  %308 = extractelement <2 x i32> %201, i64 1
  %.not484 = icmp eq i32 %307, %308
  br i1 %.not484, label %363, label %309

309:                                              ; preds = %305, %302, %298, %294, %290, %286, %282, %275
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #6
  store <2 x float> %99, ptr %12, align 16, !tbaa !14
  %310 = fneg float %231
  %311 = extractelement <2 x float> %99, i64 0
  %312 = tail call float @llvm.fmuladd.f32(float %310, float %311, float %227)
  %313 = fneg float %228
  %314 = extractelement <2 x float> %99, i64 1
  %315 = tail call float @llvm.fmuladd.f32(float %313, float %314, float %312)
  %316 = getelementptr inbounds i8, ptr %12, i64 8
  store float %315, ptr %316, align 8, !tbaa !14
  %317 = fsub float 0.000000e+00, %314
  %318 = getelementptr inbounds i8, ptr %12, i64 12
  store float %317, ptr %318, align 4, !tbaa !14
  %319 = getelementptr inbounds i8, ptr %12, i64 16
  store float %311, ptr %319, align 16, !tbaa !14
  %320 = tail call float @llvm.fmuladd.f32(float %231, float %314, float %230)
  %321 = tail call float @llvm.fmuladd.f32(float %313, float %311, float %320)
  %322 = getelementptr inbounds i8, ptr %12, i64 20
  store float %321, ptr %322, align 4, !tbaa !14
  %323 = getelementptr inbounds i8, ptr %278, i64 32
  %324 = load ptr, ptr %323, align 8, !tbaa !34
  %325 = icmp eq ptr %324, null
  br i1 %325, label %326, label %330

326:                                              ; preds = %309
  %327 = extractelement <2 x i32> %201, i64 0
  %328 = extractelement <2 x i32> %201, i64 1
  %329 = tail call ptr @TableCreate(i32 noundef %327, i32 noundef %328, i32 noundef 2, ptr noundef null) #6
  store ptr %329, ptr %323, align 8, !tbaa !34
  br label %333

330:                                              ; preds = %309
  %331 = extractelement <2 x i32> %201, i64 0
  %332 = extractelement <2 x i32> %201, i64 1
  tail call void @TableRedefine(ptr noundef nonnull %324, i32 noundef %331, i32 noundef %332, i32 noundef 2, ptr noundef null) #6
  br label %333

333:                                              ; preds = %330, %326
  %334 = getelementptr inbounds i8, ptr %278, i64 40
  %335 = load ptr, ptr %334, align 8, !tbaa !35
  %336 = icmp eq ptr %335, null
  br i1 %336, label %337, label %341

337:                                              ; preds = %333
  %338 = extractelement <2 x i32> %201, i64 0
  %339 = extractelement <2 x i32> %201, i64 1
  %340 = tail call ptr @TableCreate(i32 noundef %338, i32 noundef %339, i32 noundef 2, ptr noundef null) #6
  store ptr %340, ptr %334, align 8, !tbaa !35
  br label %344

341:                                              ; preds = %333
  %342 = extractelement <2 x i32> %201, i64 0
  %343 = extractelement <2 x i32> %201, i64 1
  tail call void @TableRedefine(ptr noundef nonnull %335, i32 noundef %342, i32 noundef %343, i32 noundef 2, ptr noundef null) #6
  br label %344

344:                                              ; preds = %341, %337
  %345 = getelementptr inbounds i8, ptr %278, i64 48
  %346 = load ptr, ptr %345, align 8, !tbaa !36
  %347 = icmp eq ptr %346, null
  br i1 %347, label %348, label %352

348:                                              ; preds = %344
  %349 = extractelement <2 x i32> %201, i64 0
  %350 = extractelement <2 x i32> %201, i64 1
  %351 = tail call ptr @TableCreate(i32 noundef %349, i32 noundef %350, i32 noundef 1, ptr noundef null) #6
  store ptr %351, ptr %345, align 8, !tbaa !36
  br label %355

352:                                              ; preds = %344
  %353 = extractelement <2 x i32> %201, i64 0
  %354 = extractelement <2 x i32> %201, i64 1
  tail call void @TableRedefine(ptr noundef nonnull %346, i32 noundef %353, i32 noundef %354, i32 noundef 1, ptr noundef null) #6
  %.pre = load ptr, ptr %345, align 8, !tbaa !36
  br label %355

355:                                              ; preds = %352, %348
  %356 = phi ptr [ %.pre, %352 ], [ %351, %348 ]
  %357 = load ptr, ptr %323, align 8, !tbaa !34
  %358 = load ptr, ptr %334, align 8, !tbaa !35
  call void @TransformGrid(ptr noundef nonnull %0, ptr noundef nonnull @Affine_x, ptr noundef nonnull @Affine_y, ptr noundef nonnull %12, ptr noundef %357, ptr noundef %358, ptr noundef %356)
  %359 = getelementptr inbounds i8, ptr %278, i64 8
  store <2 x float> %41, ptr %359, align 8, !tbaa !14
  %360 = getelementptr inbounds i8, ptr %278, i64 16
  %361 = shufflevector <2 x float> %225, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  store <2 x float> %361, ptr %360, align 8, !tbaa !14
  %362 = getelementptr inbounds i8, ptr %278, i64 24
  store float %4, ptr %362, align 8, !tbaa !31
  store <2 x i32> %201, ptr %278, align 8, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #6
  br label %363

363:                                              ; preds = %355, %305
  %364 = getelementptr inbounds i8, ptr %278, i64 32
  %365 = load ptr, ptr %364, align 8, !tbaa !34
  %366 = getelementptr inbounds i8, ptr %278, i64 40
  %367 = load ptr, ptr %366, align 8, !tbaa !35
  %368 = getelementptr inbounds i8, ptr %278, i64 48
  %369 = load ptr, ptr %368, align 8, !tbaa !36
  call void @GridInterpolation(ptr noundef nonnull %0, ptr noundef %.1, ptr noundef %365, ptr noundef %367, ptr noundef %369, i32 noundef %5)
  %.not485 = icmp eq ptr %.0, %.1
  br i1 %.not485, label %371, label %370

370:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %13)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %13, ptr noundef nonnull align 8 dereferenceable(56) %0, i64 56, i1 false), !tbaa.struct !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef nonnull align 8 dereferenceable(56) %.1, i64 56, i1 false), !tbaa.struct !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %.1, ptr noundef nonnull align 8 dereferenceable(56) %13, i64 56, i1 false), !tbaa.struct !19
  call void @HandleExchange(ptr noundef nonnull %0, ptr noundef %.1) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %13)
  call void @mImageRelease(ptr noundef %.1) #6
  br label %371

371:                                              ; preds = %370, %363
  store volatile i32 1, ptr %279, align 4, !tbaa !24
  br label %372

372:                                              ; preds = %371, %244, %243, %260, %259, %274, %273, %51, %74
  ret void
}

declare void @m_ImageCut(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare double @mSin(double noundef) local_unnamed_addr #3

declare double @mCos(double noundef) local_unnamed_addr #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x float> @llvm.fmuladd.v2f32(<2 x float>, <2 x float>, <2 x float>) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x float> @llvm.fabs.v2f32(<2 x float>) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"MImage", !7, i64 0, !7, i64 4, !7, i64 8, !8, i64 16, !10, i64 48}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 4}
!12 = !{!6, !7, i64 8}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"float", !8, i64 0}
!16 = !{!17, !7, i64 0}
!17 = !{!"MImageRect", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12}
!18 = !{!17, !7, i64 4}
!19 = !{i64 0, i64 4, !13, i64 4, i64 4, !13, i64 8, i64 4, !13, i64 16, i64 32, !20, i64 48, i64 8, !21}
!20 = !{!8, !8, i64 0}
!21 = !{!10, !10, i64 0}
!22 = !{!23, !10, i64 16}
!23 = !{!"MHandle", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 16}
!24 = !{!23, !7, i64 4}
!25 = !{!26, !15, i64 8}
!26 = !{!"HandleImageRotate", !7, i64 0, !7, i64 4, !27, i64 8, !27, i64 16, !15, i64 24, !10, i64 32, !10, i64 40, !10, i64 48}
!27 = !{!"MImagePoint", !15, i64 0, !15, i64 4}
!28 = !{!26, !15, i64 12}
!29 = !{!26, !15, i64 16}
!30 = !{!26, !15, i64 20}
!31 = !{!26, !15, i64 24}
!32 = !{!26, !7, i64 0}
!33 = !{!26, !7, i64 4}
!34 = !{!26, !10, i64 32}
!35 = !{!26, !10, i64 40}
!36 = !{!26, !10, i64 48}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,PromotePass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass