; LLVM IR from ox-vgg/vise :: src/search_engine/relja_retrival/external/KMCode_relja/homography (homography)

; 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"

%class.Matrix = type { ptr, ptr, i32, i32 }
%class.ImageContent = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

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

declare void @_ZN6MatrixC1Eii(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef) unnamed_addr #1

declare void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef) unnamed_addr #2 align 2

declare void @_ZNK6Matrix3svdERS_S0_S0_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #1

; Function Attrs: nounwind
declare double @sqrt(double noundef) #3

declare void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #1

declare void @_ZNK6Matrix9transposeEv(ptr dead_on_unwind writable sret(%class.Matrix) align 8, ptr noundef nonnull align 8 dereferenceable(24)) #1

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #1

; Function Attrs: nounwind
declare void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local void @_Z14displayEllipseP12ImageContentP6Matrixiiiif(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, float noundef %6) #4 personality ptr @__gxx_personality_v0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca float, align 4
  %15 = alloca %class.Matrix, align 8
  %16 = alloca %class.Matrix, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca %class.Matrix, align 8
  %20 = alloca %class.Matrix, align 8
  %21 = alloca float, align 4
  %22 = alloca %class.Matrix, align 8
  %23 = alloca %class.Matrix, align 8
  %24 = alloca %class.Matrix, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca %class.Matrix, align 8
  %29 = alloca %class.Matrix, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca %class.Matrix, align 8
  %34 = alloca %class.Matrix, align 8
  %35 = alloca %class.Matrix, align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store i32 %2, ptr %10, align 4, !tbaa !9
  store i32 %3, ptr %11, align 4, !tbaa !9
  store i32 %4, ptr %12, align 4, !tbaa !9
  store i32 %5, ptr %13, align 4, !tbaa !9
  store float %6, ptr %14, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #7
  call void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %15)
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #7
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %36 unwind label %79

36:                                               ; preds = %7
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #7
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %37 unwind label %83

37:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #7
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %38 unwind label %87

38:                                               ; preds = %37
  %39 = load ptr, ptr %9, align 8, !tbaa !5
  %40 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %39)
          to label %41 unwind label %91

41:                                               ; preds = %38
  invoke void @_ZNK6Matrix3svdERS_S0_S0_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %42 unwind label %91

42:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %43 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %20, i32 noundef 1, i32 noundef 1)
          to label %44 unwind label %95

44:                                               ; preds = %42
  %45 = load double, ptr %43, align 8, !tbaa !13
  %46 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %20, i32 noundef 2, i32 noundef 2)
          to label %47 unwind label %95

47:                                               ; preds = %44
  %48 = load double, ptr %46, align 8, !tbaa !13
  %49 = fmul double %45, %48
  %50 = call double @sqrt(double noundef %49) #7
  %51 = fptrunc double %50 to float
  store float %51, ptr %21, align 4, !tbaa !11
  %52 = load float, ptr %21, align 4, !tbaa !11
  %53 = fpext float %52 to double
  %54 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %20, i32 noundef 1, i32 noundef 1)
          to label %55 unwind label %95

55:                                               ; preds = %47
  %56 = load double, ptr %54, align 8, !tbaa !13
  %57 = fdiv double %56, %53
  store double %57, ptr %54, align 8, !tbaa !13
  %58 = load float, ptr %21, align 4, !tbaa !11
  %59 = fpext float %58 to double
  %60 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %20, i32 noundef 2, i32 noundef 2)
          to label %61 unwind label %95

61:                                               ; preds = %55
  %62 = load double, ptr %60, align 8, !tbaa !13
  %63 = fdiv double %62, %59
  store double %63, ptr %60, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #7
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %23, ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %64 unwind label %99

64:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #7
  invoke void @_ZNK6Matrix9transposeEv(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %24, ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %65 unwind label %103

65:                                               ; preds = %64
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %22, ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(24) %24)
          to label %66 unwind label %107

66:                                               ; preds = %65
  %67 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %68 unwind label %111

68:                                               ; preds = %66
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %69 = load float, ptr %21, align 4, !tbaa !11
  %70 = invoke noundef float @_ZSt4rintf(float noundef %69)
          to label %71 unwind label %118

71:                                               ; preds = %68
  %72 = fptosi float %70 to i32
  store i32 %72, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %28) #7
  invoke void @_ZN6MatrixC1Eii(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef 2, i32 noundef 1)
          to label %73 unwind label %122

73:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #7
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %29)
          to label %74 unwind label %126

74:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  store i32 -2, ptr %30, align 4, !tbaa !9
  br label %75

75:                                               ; preds = %156, %74
  %76 = load i32, ptr %30, align 4, !tbaa !9
  %77 = icmp sle i32 %76, 2
  br i1 %77, label %130, label %78

78:                                               ; preds = %75
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  br label %159

79:                                               ; preds = %7
  %80 = landingpad { ptr, i32 }
          cleanup
  %81 = extractvalue { ptr, i32 } %80, 0
  store ptr %81, ptr %17, align 8
  %82 = extractvalue { ptr, i32 } %80, 1
  store i32 %82, ptr %18, align 4
  br label %633

83:                                               ; preds = %36
  %84 = landingpad { ptr, i32 }
          cleanup
  %85 = extractvalue { ptr, i32 } %84, 0
  store ptr %85, ptr %17, align 8
  %86 = extractvalue { ptr, i32 } %84, 1
  store i32 %86, ptr %18, align 4
  br label %632

87:                                               ; preds = %37
  %88 = landingpad { ptr, i32 }
          cleanup
  %89 = extractvalue { ptr, i32 } %88, 0
  store ptr %89, ptr %17, align 8
  %90 = extractvalue { ptr, i32 } %88, 1
  store i32 %90, ptr %18, align 4
  br label %631

91:                                               ; preds = %41, %38
  %92 = landingpad { ptr, i32 }
          cleanup
  %93 = extractvalue { ptr, i32 } %92, 0
  store ptr %93, ptr %17, align 8
  %94 = extractvalue { ptr, i32 } %92, 1
  store i32 %94, ptr %18, align 4
  br label %630

95:                                               ; preds = %55, %47, %44, %42
  %96 = landingpad { ptr, i32 }
          cleanup
  %97 = extractvalue { ptr, i32 } %96, 0
  store ptr %97, ptr %17, align 8
  %98 = extractvalue { ptr, i32 } %96, 1
  store i32 %98, ptr %18, align 4
  br label %629

99:                                               ; preds = %61
  %100 = landingpad { ptr, i32 }
          cleanup
  %101 = extractvalue { ptr, i32 } %100, 0
  store ptr %101, ptr %17, align 8
  %102 = extractvalue { ptr, i32 } %100, 1
  store i32 %102, ptr %18, align 4
  br label %117

103:                                              ; preds = %64
  %104 = landingpad { ptr, i32 }
          cleanup
  %105 = extractvalue { ptr, i32 } %104, 0
  store ptr %105, ptr %17, align 8
  %106 = extractvalue { ptr, i32 } %104, 1
  store i32 %106, ptr %18, align 4
  br label %116

107:                                              ; preds = %65
  %108 = landingpad { ptr, i32 }
          cleanup
  %109 = extractvalue { ptr, i32 } %108, 0
  store ptr %109, ptr %17, align 8
  %110 = extractvalue { ptr, i32 } %108, 1
  store i32 %110, ptr %18, align 4
  br label %115

111:                                              ; preds = %66
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %17, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %18, align 4
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #7
  br label %115

115:                                              ; preds = %111, %107
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  br label %116

116:                                              ; preds = %115, %103
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  br label %117

117:                                              ; preds = %116, %99
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #7
  br label %629

118:                                              ; preds = %68
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %17, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %18, align 4
  br label %628

122:                                              ; preds = %71
  %123 = landingpad { ptr, i32 }
          cleanup
  %124 = extractvalue { ptr, i32 } %123, 0
  store ptr %124, ptr %17, align 8
  %125 = extractvalue { ptr, i32 } %123, 1
  store i32 %125, ptr %18, align 4
  br label %627

126:                                              ; preds = %73
  %127 = landingpad { ptr, i32 }
          cleanup
  %128 = extractvalue { ptr, i32 } %127, 0
  store ptr %128, ptr %17, align 8
  %129 = extractvalue { ptr, i32 } %127, 1
  store i32 %129, ptr %18, align 4
  br label %626

130:                                              ; preds = %75
  %131 = load float, ptr %14, align 4, !tbaa !11
  %132 = load ptr, ptr %8, align 8, !tbaa !5
  %133 = getelementptr inbounds %class.ImageContent, ptr %132, i32 0, i32 4
  %134 = load ptr, ptr %133, align 8, !tbaa !15
  %135 = load i32, ptr %11, align 4, !tbaa !9
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds ptr, ptr %134, i64 %136
  %138 = load ptr, ptr %137, align 8, !tbaa !5
  %139 = load i32, ptr %10, align 4, !tbaa !9
  %140 = load i32, ptr %30, align 4, !tbaa !9
  %141 = add nsw i32 %139, %140
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds float, ptr %138, i64 %142
  store float %131, ptr %143, align 4, !tbaa !11
  %144 = load ptr, ptr %8, align 8, !tbaa !5
  %145 = getelementptr inbounds %class.ImageContent, ptr %144, i32 0, i32 4
  %146 = load ptr, ptr %145, align 8, !tbaa !15
  %147 = load i32, ptr %11, align 4, !tbaa !9
  %148 = load i32, ptr %30, align 4, !tbaa !9
  %149 = add nsw i32 %147, %148
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds ptr, ptr %146, i64 %150
  %152 = load ptr, ptr %151, align 8, !tbaa !5
  %153 = load i32, ptr %10, align 4, !tbaa !9
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds float, ptr %152, i64 %154
  store float %131, ptr %155, align 4, !tbaa !11
  br label %156

156:                                              ; preds = %130
  %157 = load i32, ptr %30, align 4, !tbaa !9
  %158 = add nsw i32 %157, 1
  store i32 %158, ptr %30, align 4, !tbaa !9
  br label %75, !llvm.loop !17

159:                                              ; preds = %78
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  store i32 -4, ptr %31, align 4, !tbaa !9
  br label %160

160:                                              ; preds = %297, %159
  %161 = load i32, ptr %31, align 4, !tbaa !9
  %162 = icmp sle i32 %161, 4
  br i1 %162, label %164, label %163

163:                                              ; preds = %160
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  br label %300

164:                                              ; preds = %160
  %165 = load float, ptr %14, align 4, !tbaa !11
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = getelementptr inbounds %class.ImageContent, ptr %166, i32 0, i32 4
  %168 = load ptr, ptr %167, align 8, !tbaa !15
  %169 = load i32, ptr %11, align 4, !tbaa !9
  %170 = load i32, ptr %13, align 4, !tbaa !9
  %171 = add nsw i32 %169, %170
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds ptr, ptr %168, i64 %172
  %174 = load ptr, ptr %173, align 8, !tbaa !5
  %175 = load i32, ptr %10, align 4, !tbaa !9
  %176 = load i32, ptr %12, align 4, !tbaa !9
  %177 = add nsw i32 %175, %176
  %178 = load i32, ptr %31, align 4, !tbaa !9
  %179 = add nsw i32 %177, %178
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds float, ptr %174, i64 %180
  store float %165, ptr %181, align 4, !tbaa !11
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  %183 = getelementptr inbounds %class.ImageContent, ptr %182, i32 0, i32 4
  %184 = load ptr, ptr %183, align 8, !tbaa !15
  %185 = load i32, ptr %11, align 4, !tbaa !9
  %186 = load i32, ptr %13, align 4, !tbaa !9
  %187 = add nsw i32 %185, %186
  %188 = load i32, ptr %31, align 4, !tbaa !9
  %189 = add nsw i32 %187, %188
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds ptr, ptr %184, i64 %190
  %192 = load ptr, ptr %191, align 8, !tbaa !5
  %193 = load i32, ptr %10, align 4, !tbaa !9
  %194 = load i32, ptr %12, align 4, !tbaa !9
  %195 = add nsw i32 %193, %194
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds float, ptr %192, i64 %196
  store float %165, ptr %197, align 4, !tbaa !11
  %198 = load float, ptr %14, align 4, !tbaa !11
  %199 = load ptr, ptr %8, align 8, !tbaa !5
  %200 = getelementptr inbounds %class.ImageContent, ptr %199, i32 0, i32 4
  %201 = load ptr, ptr %200, align 8, !tbaa !15
  %202 = load i32, ptr %11, align 4, !tbaa !9
  %203 = load i32, ptr %13, align 4, !tbaa !9
  %204 = add nsw i32 %202, %203
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds ptr, ptr %201, i64 %205
  %207 = load ptr, ptr %206, align 8, !tbaa !5
  %208 = load i32, ptr %10, align 4, !tbaa !9
  %209 = load i32, ptr %12, align 4, !tbaa !9
  %210 = sub nsw i32 %208, %209
  %211 = load i32, ptr %31, align 4, !tbaa !9
  %212 = add nsw i32 %210, %211
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds float, ptr %207, i64 %213
  store float %198, ptr %214, align 4, !tbaa !11
  %215 = load ptr, ptr %8, align 8, !tbaa !5
  %216 = getelementptr inbounds %class.ImageContent, ptr %215, i32 0, i32 4
  %217 = load ptr, ptr %216, align 8, !tbaa !15
  %218 = load i32, ptr %11, align 4, !tbaa !9
  %219 = load i32, ptr %13, align 4, !tbaa !9
  %220 = add nsw i32 %218, %219
  %221 = load i32, ptr %31, align 4, !tbaa !9
  %222 = add nsw i32 %220, %221
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds ptr, ptr %217, i64 %223
  %225 = load ptr, ptr %224, align 8, !tbaa !5
  %226 = load i32, ptr %10, align 4, !tbaa !9
  %227 = load i32, ptr %12, align 4, !tbaa !9
  %228 = sub nsw i32 %226, %227
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds float, ptr %225, i64 %229
  store float %198, ptr %230, align 4, !tbaa !11
  %231 = load float, ptr %14, align 4, !tbaa !11
  %232 = load ptr, ptr %8, align 8, !tbaa !5
  %233 = getelementptr inbounds %class.ImageContent, ptr %232, i32 0, i32 4
  %234 = load ptr, ptr %233, align 8, !tbaa !15
  %235 = load i32, ptr %11, align 4, !tbaa !9
  %236 = load i32, ptr %13, align 4, !tbaa !9
  %237 = sub nsw i32 %235, %236
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds ptr, ptr %234, i64 %238
  %240 = load ptr, ptr %239, align 8, !tbaa !5
  %241 = load i32, ptr %10, align 4, !tbaa !9
  %242 = load i32, ptr %12, align 4, !tbaa !9
  %243 = add nsw i32 %241, %242
  %244 = load i32, ptr %31, align 4, !tbaa !9
  %245 = add nsw i32 %243, %244
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds float, ptr %240, i64 %246
  store float %231, ptr %247, align 4, !tbaa !11
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  %249 = getelementptr inbounds %class.ImageContent, ptr %248, i32 0, i32 4
  %250 = load ptr, ptr %249, align 8, !tbaa !15
  %251 = load i32, ptr %11, align 4, !tbaa !9
  %252 = load i32, ptr %13, align 4, !tbaa !9
  %253 = sub nsw i32 %251, %252
  %254 = load i32, ptr %31, align 4, !tbaa !9
  %255 = add nsw i32 %253, %254
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds ptr, ptr %250, i64 %256
  %258 = load ptr, ptr %257, align 8, !tbaa !5
  %259 = load i32, ptr %10, align 4, !tbaa !9
  %260 = load i32, ptr %12, align 4, !tbaa !9
  %261 = add nsw i32 %259, %260
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds float, ptr %258, i64 %262
  store float %231, ptr %263, align 4, !tbaa !11
  %264 = load float, ptr %14, align 4, !tbaa !11
  %265 = load ptr, ptr %8, align 8, !tbaa !5
  %266 = getelementptr inbounds %class.ImageContent, ptr %265, i32 0, i32 4
  %267 = load ptr, ptr %266, align 8, !tbaa !15
  %268 = load i32, ptr %11, align 4, !tbaa !9
  %269 = load i32, ptr %13, align 4, !tbaa !9
  %270 = sub nsw i32 %268, %269
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds ptr, ptr %267, i64 %271
  %273 = load ptr, ptr %272, align 8, !tbaa !5
  %274 = load i32, ptr %10, align 4, !tbaa !9
  %275 = load i32, ptr %12, align 4, !tbaa !9
  %276 = sub nsw i32 %274, %275
  %277 = load i32, ptr %31, align 4, !tbaa !9
  %278 = add nsw i32 %276, %277
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds float, ptr %273, i64 %279
  store float %264, ptr %280, align 4, !tbaa !11
  %281 = load ptr, ptr %8, align 8, !tbaa !5
  %282 = getelementptr inbounds %class.ImageContent, ptr %281, i32 0, i32 4
  %283 = load ptr, ptr %282, align 8, !tbaa !15
  %284 = load i32, ptr %11, align 4, !tbaa !9
  %285 = load i32, ptr %13, align 4, !tbaa !9
  %286 = sub nsw i32 %284, %285
  %287 = load i32, ptr %31, align 4, !tbaa !9
  %288 = add nsw i32 %286, %287
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds ptr, ptr %283, i64 %289
  %291 = load ptr, ptr %290, align 8, !tbaa !5
  %292 = load i32, ptr %10, align 4, !tbaa !9
  %293 = load i32, ptr %12, align 4, !tbaa !9
  %294 = sub nsw i32 %292, %293
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds float, ptr %291, i64 %295
  store float %264, ptr %296, align 4, !tbaa !11
  br label %297

297:                                              ; preds = %164
  %298 = load i32, ptr %31, align 4, !tbaa !9
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %31, align 4, !tbaa !9
  br label %160, !llvm.loop !19

300:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %301 = load i32, ptr %25, align 4, !tbaa !9
  %302 = sub nsw i32 0, %301
  store i32 %302, ptr %32, align 4, !tbaa !9
  br label %303

303:                                              ; preds = %621, %300
  %304 = load i32, ptr %32, align 4, !tbaa !9
  %305 = load i32, ptr %25, align 4, !tbaa !9
  %306 = icmp sle i32 %304, %305
  br i1 %306, label %308, label %307

307:                                              ; preds = %303
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  br label %625

308:                                              ; preds = %303
  %309 = load i32, ptr %32, align 4, !tbaa !9
  %310 = sitofp i32 %309 to double
  %311 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef 1, i32 noundef 1)
          to label %312 unwind label %380

312:                                              ; preds = %308
  store double %310, ptr %311, align 8, !tbaa !13
  %313 = load i32, ptr %25, align 4, !tbaa !9
  %314 = load i32, ptr %25, align 4, !tbaa !9
  %315 = mul nsw i32 %313, %314
  %316 = load i32, ptr %32, align 4, !tbaa !9
  %317 = load i32, ptr %32, align 4, !tbaa !9
  %318 = mul nsw i32 %316, %317
  %319 = sub nsw i32 %315, %318
  %320 = sitofp i32 %319 to float
  %321 = invoke noundef float @_ZSt4sqrtf(float noundef %320)
          to label %322 unwind label %380

322:                                              ; preds = %312
  %323 = fpext float %321 to double
  %324 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef 2, i32 noundef 1)
          to label %325 unwind label %380

325:                                              ; preds = %322
  store double %323, ptr %324, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 24, ptr %33) #7
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %33, ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %28)
          to label %326 unwind label %384

326:                                              ; preds = %325
  %327 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 8 dereferenceable(24) %33)
          to label %328 unwind label %388

328:                                              ; preds = %326
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #7
  %329 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %29, i32 noundef 1, i32 noundef 1)
          to label %330 unwind label %380

330:                                              ; preds = %328
  %331 = load double, ptr %329, align 8, !tbaa !13
  %332 = call double @llvm.rint.f64(double %331)
  %333 = fptosi double %332 to i32
  store i32 %333, ptr %26, align 4, !tbaa !9
  %334 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %29, i32 noundef 2, i32 noundef 1)
          to label %335 unwind label %380

335:                                              ; preds = %330
  %336 = load double, ptr %334, align 8, !tbaa !13
  %337 = call double @llvm.rint.f64(double %336)
  %338 = fptosi double %337 to i32
  store i32 %338, ptr %27, align 4, !tbaa !9
  %339 = load i32, ptr %11, align 4, !tbaa !9
  %340 = load i32, ptr %27, align 4, !tbaa !9
  %341 = add nsw i32 %339, %340
  %342 = icmp sgt i32 %341, 0
  br i1 %342, label %343, label %393

343:                                              ; preds = %335
  %344 = load i32, ptr %11, align 4, !tbaa !9
  %345 = load i32, ptr %27, align 4, !tbaa !9
  %346 = add nsw i32 %344, %345
  %347 = load ptr, ptr %8, align 8, !tbaa !5
  %348 = invoke noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %347)
          to label %349 unwind label %380

349:                                              ; preds = %343
  %350 = icmp ult i32 %346, %348
  br i1 %350, label %351, label %393

351:                                              ; preds = %349
  %352 = load i32, ptr %10, align 4, !tbaa !9
  %353 = load i32, ptr %26, align 4, !tbaa !9
  %354 = add nsw i32 %352, %353
  %355 = icmp sgt i32 %354, 0
  br i1 %355, label %356, label %393

356:                                              ; preds = %351
  %357 = load i32, ptr %10, align 4, !tbaa !9
  %358 = load i32, ptr %26, align 4, !tbaa !9
  %359 = add nsw i32 %357, %358
  %360 = load ptr, ptr %8, align 8, !tbaa !5
  %361 = invoke noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %360)
          to label %362 unwind label %380

362:                                              ; preds = %356
  %363 = icmp ult i32 %359, %361
  br i1 %363, label %364, label %393

364:                                              ; preds = %362
  %365 = load float, ptr %14, align 4, !tbaa !11
  %366 = load ptr, ptr %8, align 8, !tbaa !5
  %367 = getelementptr inbounds %class.ImageContent, ptr %366, i32 0, i32 4
  %368 = load ptr, ptr %367, align 8, !tbaa !15
  %369 = load i32, ptr %11, align 4, !tbaa !9
  %370 = load i32, ptr %27, align 4, !tbaa !9
  %371 = add nsw i32 %369, %370
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds ptr, ptr %368, i64 %372
  %374 = load ptr, ptr %373, align 8, !tbaa !5
  %375 = load i32, ptr %10, align 4, !tbaa !9
  %376 = load i32, ptr %26, align 4, !tbaa !9
  %377 = add nsw i32 %375, %376
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds float, ptr %374, i64 %378
  store float %365, ptr %379, align 4, !tbaa !11
  br label %393

380:                                              ; preds = %587, %574, %561, %559, %554, %550, %526, %513, %475, %462, %449, %447, %440, %437, %435, %411, %398, %356, %343, %330, %328, %322, %312, %308
  %381 = landingpad { ptr, i32 }
          cleanup
  %382 = extractvalue { ptr, i32 } %381, 0
  store ptr %382, ptr %17, align 8
  %383 = extractvalue { ptr, i32 } %381, 1
  store i32 %383, ptr %18, align 4
  br label %624

384:                                              ; preds = %325
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %17, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %18, align 4
  br label %392

388:                                              ; preds = %326
  %389 = landingpad { ptr, i32 }
          cleanup
  %390 = extractvalue { ptr, i32 } %389, 0
  store ptr %390, ptr %17, align 8
  %391 = extractvalue { ptr, i32 } %389, 1
  store i32 %391, ptr %18, align 4
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #7
  br label %392

392:                                              ; preds = %388, %384
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #7
  br label %624

393:                                              ; preds = %364, %362, %351, %349, %335
  %394 = load i32, ptr %11, align 4, !tbaa !9
  %395 = load i32, ptr %27, align 4, !tbaa !9
  %396 = sub nsw i32 %394, %395
  %397 = icmp sgt i32 %396, 0
  br i1 %397, label %398, label %435

398:                                              ; preds = %393
  %399 = load i32, ptr %11, align 4, !tbaa !9
  %400 = load i32, ptr %27, align 4, !tbaa !9
  %401 = sub nsw i32 %399, %400
  %402 = load ptr, ptr %8, align 8, !tbaa !5
  %403 = invoke noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %402)
          to label %404 unwind label %380

404:                                              ; preds = %398
  %405 = icmp ult i32 %401, %403
  br i1 %405, label %406, label %435

406:                                              ; preds = %404
  %407 = load i32, ptr %10, align 4, !tbaa !9
  %408 = load i32, ptr %26, align 4, !tbaa !9
  %409 = sub nsw i32 %407, %408
  %410 = icmp sgt i32 %409, 0
  br i1 %410, label %411, label %435

411:                                              ; preds = %406
  %412 = load i32, ptr %10, align 4, !tbaa !9
  %413 = load i32, ptr %26, align 4, !tbaa !9
  %414 = sub nsw i32 %412, %413
  %415 = load ptr, ptr %8, align 8, !tbaa !5
  %416 = invoke noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %415)
          to label %417 unwind label %380

417:                                              ; preds = %411
  %418 = icmp ult i32 %414, %416
  br i1 %418, label %419, label %435

419:                                              ; preds = %417
  %420 = load float, ptr %14, align 4, !tbaa !11
  %421 = load ptr, ptr %8, align 8, !tbaa !5
  %422 = getelementptr inbounds %class.ImageContent, ptr %421, i32 0, i32 4
  %423 = load ptr, ptr %422, align 8, !tbaa !15
  %424 = load i32, ptr %11, align 4, !tbaa !9
  %425 = load i32, ptr %27, align 4, !tbaa !9
  %426 = sub nsw i32 %424, %425
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds ptr, ptr %423, i64 %427
  %429 = load ptr, ptr %428, align 8, !tbaa !5
  %430 = load i32, ptr %10, align 4, !tbaa !9
  %431 = load i32, ptr %26, align 4, !tbaa !9
  %432 = sub nsw i32 %430, %431
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds float, ptr %429, i64 %433
  store float %420, ptr %434, align 4, !tbaa !11
  br label %435

435:                                              ; preds = %419, %417, %406, %404, %393
  %436 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef 2, i32 noundef 1)
          to label %437 unwind label %380

437:                                              ; preds = %435
  %438 = load double, ptr %436, align 8, !tbaa !13
  %439 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef 1, i32 noundef 1)
          to label %440 unwind label %380

440:                                              ; preds = %437
  store double %438, ptr %439, align 8, !tbaa !13
  %441 = load i32, ptr %32, align 4, !tbaa !9
  %442 = sitofp i32 %441 to double
  %443 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef 2, i32 noundef 1)
          to label %444 unwind label %380

444:                                              ; preds = %440
  store double %442, ptr %443, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 24, ptr %34) #7
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %34, ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %28)
          to label %445 unwind label %499

445:                                              ; preds = %444
  %446 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %447 unwind label %503

447:                                              ; preds = %445
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #7
  %448 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %29, i32 noundef 1, i32 noundef 1)
          to label %449 unwind label %380

449:                                              ; preds = %447
  %450 = load double, ptr %448, align 8, !tbaa !13
  %451 = call double @llvm.rint.f64(double %450)
  %452 = fptosi double %451 to i32
  store i32 %452, ptr %26, align 4, !tbaa !9
  %453 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %29, i32 noundef 2, i32 noundef 1)
          to label %454 unwind label %380

454:                                              ; preds = %449
  %455 = load double, ptr %453, align 8, !tbaa !13
  %456 = call double @llvm.rint.f64(double %455)
  %457 = fptosi double %456 to i32
  store i32 %457, ptr %27, align 4, !tbaa !9
  %458 = load i32, ptr %11, align 4, !tbaa !9
  %459 = load i32, ptr %27, align 4, !tbaa !9
  %460 = add nsw i32 %458, %459
  %461 = icmp sgt i32 %460, 0
  br i1 %461, label %462, label %508

462:                                              ; preds = %454
  %463 = load i32, ptr %11, align 4, !tbaa !9
  %464 = load i32, ptr %27, align 4, !tbaa !9
  %465 = add nsw i32 %463, %464
  %466 = load ptr, ptr %8, align 8, !tbaa !5
  %467 = invoke noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %466)
          to label %468 unwind label %380

468:                                              ; preds = %462
  %469 = icmp ult i32 %465, %467
  br i1 %469, label %470, label %508

470:                                              ; preds = %468
  %471 = load i32, ptr %10, align 4, !tbaa !9
  %472 = load i32, ptr %26, align 4, !tbaa !9
  %473 = add nsw i32 %471, %472
  %474 = icmp sgt i32 %473, 0
  br i1 %474, label %475, label %508

475:                                              ; preds = %470
  %476 = load i32, ptr %10, align 4, !tbaa !9
  %477 = load i32, ptr %26, align 4, !tbaa !9
  %478 = add nsw i32 %476, %477
  %479 = load ptr, ptr %8, align 8, !tbaa !5
  %480 = invoke noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %479)
          to label %481 unwind label %380

481:                                              ; preds = %475
  %482 = icmp ult i32 %478, %480
  br i1 %482, label %483, label %508

483:                                              ; preds = %481
  %484 = load float, ptr %14, align 4, !tbaa !11
  %485 = load ptr, ptr %8, align 8, !tbaa !5
  %486 = getelementptr inbounds %class.ImageContent, ptr %485, i32 0, i32 4
  %487 = load ptr, ptr %486, align 8, !tbaa !15
  %488 = load i32, ptr %11, align 4, !tbaa !9
  %489 = load i32, ptr %27, align 4, !tbaa !9
  %490 = add nsw i32 %488, %489
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds ptr, ptr %487, i64 %491
  %493 = load ptr, ptr %492, align 8, !tbaa !5
  %494 = load i32, ptr %10, align 4, !tbaa !9
  %495 = load i32, ptr %26, align 4, !tbaa !9
  %496 = add nsw i32 %494, %495
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds float, ptr %493, i64 %497
  store float %484, ptr %498, align 4, !tbaa !11
  br label %508

499:                                              ; preds = %444
  %500 = landingpad { ptr, i32 }
          cleanup
  %501 = extractvalue { ptr, i32 } %500, 0
  store ptr %501, ptr %17, align 8
  %502 = extractvalue { ptr, i32 } %500, 1
  store i32 %502, ptr %18, align 4
  br label %507

503:                                              ; preds = %445
  %504 = landingpad { ptr, i32 }
          cleanup
  %505 = extractvalue { ptr, i32 } %504, 0
  store ptr %505, ptr %17, align 8
  %506 = extractvalue { ptr, i32 } %504, 1
  store i32 %506, ptr %18, align 4
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #7
  br label %507

507:                                              ; preds = %503, %499
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #7
  br label %624

508:                                              ; preds = %483, %481, %470, %468, %454
  %509 = load i32, ptr %11, align 4, !tbaa !9
  %510 = load i32, ptr %27, align 4, !tbaa !9
  %511 = sub nsw i32 %509, %510
  %512 = icmp sgt i32 %511, 0
  br i1 %512, label %513, label %550

513:                                              ; preds = %508
  %514 = load i32, ptr %11, align 4, !tbaa !9
  %515 = load i32, ptr %27, align 4, !tbaa !9
  %516 = sub nsw i32 %514, %515
  %517 = load ptr, ptr %8, align 8, !tbaa !5
  %518 = invoke noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %517)
          to label %519 unwind label %380

519:                                              ; preds = %513
  %520 = icmp ult i32 %516, %518
  br i1 %520, label %521, label %550

521:                                              ; preds = %519
  %522 = load i32, ptr %10, align 4, !tbaa !9
  %523 = load i32, ptr %26, align 4, !tbaa !9
  %524 = sub nsw i32 %522, %523
  %525 = icmp sgt i32 %524, 0
  br i1 %525, label %526, label %550

526:                                              ; preds = %521
  %527 = load i32, ptr %10, align 4, !tbaa !9
  %528 = load i32, ptr %26, align 4, !tbaa !9
  %529 = sub nsw i32 %527, %528
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  %531 = invoke noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %530)
          to label %532 unwind label %380

532:                                              ; preds = %526
  %533 = icmp ult i32 %529, %531
  br i1 %533, label %534, label %550

534:                                              ; preds = %532
  %535 = load float, ptr %14, align 4, !tbaa !11
  %536 = load ptr, ptr %8, align 8, !tbaa !5
  %537 = getelementptr inbounds %class.ImageContent, ptr %536, i32 0, i32 4
  %538 = load ptr, ptr %537, align 8, !tbaa !15
  %539 = load i32, ptr %11, align 4, !tbaa !9
  %540 = load i32, ptr %27, align 4, !tbaa !9
  %541 = sub nsw i32 %539, %540
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds ptr, ptr %538, i64 %542
  %544 = load ptr, ptr %543, align 8, !tbaa !5
  %545 = load i32, ptr %10, align 4, !tbaa !9
  %546 = load i32, ptr %26, align 4, !tbaa !9
  %547 = sub nsw i32 %545, %546
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds float, ptr %544, i64 %548
  store float %535, ptr %549, align 4, !tbaa !11
  br label %550

550:                                              ; preds = %534, %532, %521, %519, %508
  %551 = load i32, ptr %32, align 4, !tbaa !9
  %552 = sitofp i32 %551 to double
  %553 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef 1, i32 noundef 1)
          to label %554 unwind label %380

554:                                              ; preds = %550
  store double %552, ptr %553, align 8, !tbaa !13
  %555 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef 2, i32 noundef 1)
          to label %556 unwind label %380

556:                                              ; preds = %554
  store double 0.000000e+00, ptr %555, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #7
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %35, ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(24) %28)
          to label %557 unwind label %611

557:                                              ; preds = %556
  %558 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %559 unwind label %615

559:                                              ; preds = %557
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #7
  %560 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %29, i32 noundef 1, i32 noundef 1)
          to label %561 unwind label %380

561:                                              ; preds = %559
  %562 = load double, ptr %560, align 8, !tbaa !13
  %563 = call double @llvm.rint.f64(double %562)
  %564 = fptosi double %563 to i32
  store i32 %564, ptr %26, align 4, !tbaa !9
  %565 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %29, i32 noundef 2, i32 noundef 1)
          to label %566 unwind label %380

566:                                              ; preds = %561
  %567 = load double, ptr %565, align 8, !tbaa !13
  %568 = call double @llvm.rint.f64(double %567)
  %569 = fptosi double %568 to i32
  store i32 %569, ptr %27, align 4, !tbaa !9
  %570 = load i32, ptr %11, align 4, !tbaa !9
  %571 = load i32, ptr %27, align 4, !tbaa !9
  %572 = add nsw i32 %570, %571
  %573 = icmp sgt i32 %572, 0
  br i1 %573, label %574, label %620

574:                                              ; preds = %566
  %575 = load i32, ptr %11, align 4, !tbaa !9
  %576 = load i32, ptr %27, align 4, !tbaa !9
  %577 = add nsw i32 %575, %576
  %578 = load ptr, ptr %8, align 8, !tbaa !5
  %579 = invoke noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %578)
          to label %580 unwind label %380

580:                                              ; preds = %574
  %581 = icmp ult i32 %577, %579
  br i1 %581, label %582, label %620

582:                                              ; preds = %580
  %583 = load i32, ptr %10, align 4, !tbaa !9
  %584 = load i32, ptr %26, align 4, !tbaa !9
  %585 = add nsw i32 %583, %584
  %586 = icmp sgt i32 %585, 0
  br i1 %586, label %587, label %620

587:                                              ; preds = %582
  %588 = load i32, ptr %10, align 4, !tbaa !9
  %589 = load i32, ptr %26, align 4, !tbaa !9
  %590 = add nsw i32 %588, %589
  %591 = load ptr, ptr %8, align 8, !tbaa !5
  %592 = invoke noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %591)
          to label %593 unwind label %380

593:                                              ; preds = %587
  %594 = icmp ult i32 %590, %592
  br i1 %594, label %595, label %620

595:                                              ; preds = %593
  %596 = load float, ptr %14, align 4, !tbaa !11
  %597 = load ptr, ptr %8, align 8, !tbaa !5
  %598 = getelementptr inbounds %class.ImageContent, ptr %597, i32 0, i32 4
  %599 = load ptr, ptr %598, align 8, !tbaa !15
  %600 = load i32, ptr %11, align 4, !tbaa !9
  %601 = load i32, ptr %27, align 4, !tbaa !9
  %602 = add nsw i32 %600, %601
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds ptr, ptr %599, i64 %603
  %605 = load ptr, ptr %604, align 8, !tbaa !5
  %606 = load i32, ptr %10, align 4, !tbaa !9
  %607 = load i32, ptr %26, align 4, !tbaa !9
  %608 = add nsw i32 %606, %607
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds float, ptr %605, i64 %609
  store float %596, ptr %610, align 4, !tbaa !11
  br label %620

611:                                              ; preds = %556
  %612 = landingpad { ptr, i32 }
          cleanup
  %613 = extractvalue { ptr, i32 } %612, 0
  store ptr %613, ptr %17, align 8
  %614 = extractvalue { ptr, i32 } %612, 1
  store i32 %614, ptr %18, align 4
  br label %619

615:                                              ; preds = %557
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %17, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %18, align 4
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #7
  br label %619

619:                                              ; preds = %615, %611
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #7
  br label %624

620:                                              ; preds = %595, %593, %582, %580, %566
  br label %621

621:                                              ; preds = %620
  %622 = load i32, ptr %32, align 4, !tbaa !9
  %623 = add nsw i32 %622, 1
  store i32 %623, ptr %32, align 4, !tbaa !9
  br label %303, !llvm.loop !20

624:                                              ; preds = %619, %507, %392, %380
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #7
  br label %626

625:                                              ; preds = %307
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #7
  ret void

626:                                              ; preds = %624, %126
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #7
  br label %627

627:                                              ; preds = %626, %122
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %628

628:                                              ; preds = %627, %118
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %629

629:                                              ; preds = %628, %117, %95
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %630

630:                                              ; preds = %629, %91
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #7
  br label %631

631:                                              ; preds = %630, %87
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #7
  br label %632

632:                                              ; preds = %631, %83
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #7
  br label %633

633:                                              ; preds = %632, %79
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #7
  br label %634

634:                                              ; preds = %633
  %635 = load ptr, ptr %17, align 8
  %636 = load i32, ptr %18, align 4
  %637 = insertvalue { ptr, i32 } poison, ptr %635, 0
  %638 = insertvalue { ptr, i32 } %637, i32 %636, 1
  resume { ptr, i32 } %638
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4rintf(float noundef) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.rint.f64(double) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80)) #2 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!16, !6, i64 16}
!16 = !{!"_ZTS12ImageContent", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}


; 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"

%class.Matrix = type { ptr, ptr, i32, i32 }

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

declare void @_ZN6MatrixC1Eii(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef) unnamed_addr #1

declare void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef) unnamed_addr #2 align 2

declare void @_ZNK6Matrix3svdERS_S0_S0_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #3

declare void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1

declare void @_ZNK6Matrix9transposeEv(ptr dead_on_unwind writable sret(%class.Matrix) align 8, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1

; Function Attrs: nounwind
declare void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local void @_Z14displayEllipseP12ImageContentP6Matrixiiiif(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, float noundef %6) local_unnamed_addr #5 personality ptr @__gxx_personality_v0 {
  %8 = alloca %class.Matrix, align 8
  %9 = alloca %class.Matrix, align 8
  %10 = alloca %class.Matrix, align 8
  %11 = alloca %class.Matrix, align 8
  %12 = alloca %class.Matrix, align 8
  %13 = alloca %class.Matrix, align 8
  %14 = alloca %class.Matrix, align 8
  %15 = alloca %class.Matrix, align 8
  %16 = alloca %class.Matrix, align 8
  %17 = alloca %class.Matrix, align 8
  %18 = alloca %class.Matrix, align 8
  %19 = alloca %class.Matrix, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #8
  call void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #8
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %20 unwind label %229

20:                                               ; preds = %7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #8
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %21 unwind label %231

21:                                               ; preds = %20
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #8
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %22 unwind label %233

22:                                               ; preds = %21
  %23 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %1)
          to label %24 unwind label %235

24:                                               ; preds = %22
  invoke void @_ZNK6Matrix3svdERS_S0_S0_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %25 unwind label %235

25:                                               ; preds = %24
  %26 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %11, i32 noundef 1, i32 noundef 1)
  %27 = load double, ptr %26, align 8, !tbaa !5
  %28 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %11, i32 noundef 2, i32 noundef 2)
  %29 = load double, ptr %28, align 8, !tbaa !5
  %30 = fmul double %27, %29
  %31 = call double @sqrt(double noundef %30) #8
  %32 = fptrunc double %31 to float
  %33 = fpext float %32 to double
  %34 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %11, i32 noundef 1, i32 noundef 1)
  %35 = load double, ptr %34, align 8, !tbaa !5
  %36 = fdiv double %35, %33
  store double %36, ptr %34, align 8, !tbaa !5
  %37 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %11, i32 noundef 2, i32 noundef 2)
  %38 = load double, ptr %37, align 8, !tbaa !5
  %39 = fdiv double %38, %33
  store double %39, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #8
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %13, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %40 unwind label %237

40:                                               ; preds = %25
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #8
  invoke void @_ZNK6Matrix9transposeEv(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %14, ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %41 unwind label %239

41:                                               ; preds = %40
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %12, ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %14)
          to label %42 unwind label %241

42:                                               ; preds = %41
  %43 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %44 unwind label %243

44:                                               ; preds = %42
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #8
  %45 = call noundef float @_ZSt4rintf(float noundef %32)
  %46 = fptosi float %45 to i32
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #8
  invoke void @_ZN6MatrixC1Eii(ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef 2, i32 noundef 1)
          to label %47 unwind label %248

47:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #8
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %.preheader206 unwind label %250

.preheader206:                                    ; preds = %47
  %48 = getelementptr inbounds i8, ptr %0, i64 16
  %49 = load ptr, ptr %48, align 8, !tbaa !9
  %50 = sext i32 %3 to i64
  %51 = getelementptr inbounds ptr, ptr %49, i64 %50
  %52 = load ptr, ptr %51, align 8, !tbaa !13
  %53 = sext i32 %2 to i64
  %54 = getelementptr float, ptr %52, i64 %53
  %55 = getelementptr i8, ptr %54, i64 -8
  store float %6, ptr %55, align 4, !tbaa !14
  %56 = getelementptr ptr, ptr %49, i64 %50
  %57 = getelementptr i8, ptr %56, i64 -16
  %58 = load ptr, ptr %57, align 8, !tbaa !13
  %59 = getelementptr inbounds float, ptr %58, i64 %53
  store float %6, ptr %59, align 4, !tbaa !14
  %60 = getelementptr float, ptr %52, i64 %53
  %61 = getelementptr i8, ptr %60, i64 -4
  store float %6, ptr %61, align 4, !tbaa !14
  %62 = getelementptr ptr, ptr %49, i64 %50
  %63 = getelementptr i8, ptr %62, i64 -8
  %64 = load ptr, ptr %63, align 8, !tbaa !13
  %65 = getelementptr inbounds float, ptr %64, i64 %53
  store float %6, ptr %65, align 4, !tbaa !14
  %66 = getelementptr inbounds float, ptr %52, i64 %53
  store float %6, ptr %66, align 4, !tbaa !14
  %67 = getelementptr float, ptr %52, i64 %53
  %68 = getelementptr i8, ptr %67, i64 4
  store float %6, ptr %68, align 4, !tbaa !14
  %69 = getelementptr ptr, ptr %49, i64 %50
  %70 = getelementptr i8, ptr %69, i64 8
  %71 = load ptr, ptr %70, align 8, !tbaa !13
  %72 = getelementptr inbounds float, ptr %71, i64 %53
  store float %6, ptr %72, align 4, !tbaa !14
  %73 = getelementptr float, ptr %52, i64 %53
  %74 = getelementptr i8, ptr %73, i64 8
  store float %6, ptr %74, align 4, !tbaa !14
  %75 = getelementptr ptr, ptr %49, i64 %50
  %76 = getelementptr i8, ptr %75, i64 16
  %77 = load ptr, ptr %76, align 8, !tbaa !13
  %78 = getelementptr inbounds float, ptr %77, i64 %53
  store float %6, ptr %78, align 4, !tbaa !14
  %79 = add nsw i32 %5, %3
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds ptr, ptr %49, i64 %80
  %82 = load ptr, ptr %81, align 8, !tbaa !13
  %83 = add nsw i32 %4, %2
  %84 = sext i32 %83 to i64
  %85 = sub nsw i32 %2, %4
  %86 = sext i32 %85 to i64
  %87 = sub nsw i32 %3, %5
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds ptr, ptr %49, i64 %88
  %90 = load ptr, ptr %89, align 8, !tbaa !13
  %91 = add nsw i64 %84, -4
  %92 = getelementptr inbounds float, ptr %82, i64 %91
  store float %6, ptr %92, align 4, !tbaa !14
  %93 = getelementptr ptr, ptr %49, i64 %80
  %94 = getelementptr i8, ptr %93, i64 -32
  %95 = load ptr, ptr %94, align 8, !tbaa !13
  %96 = getelementptr inbounds float, ptr %95, i64 %84
  store float %6, ptr %96, align 4, !tbaa !14
  %97 = add nsw i64 %86, -4
  %98 = getelementptr inbounds float, ptr %82, i64 %97
  store float %6, ptr %98, align 4, !tbaa !14
  %99 = getelementptr inbounds float, ptr %95, i64 %86
  store float %6, ptr %99, align 4, !tbaa !14
  %100 = getelementptr inbounds float, ptr %90, i64 %91
  store float %6, ptr %100, align 4, !tbaa !14
  %101 = getelementptr ptr, ptr %49, i64 %88
  %102 = getelementptr i8, ptr %101, i64 -32
  %103 = load ptr, ptr %102, align 8, !tbaa !13
  %104 = getelementptr inbounds float, ptr %103, i64 %84
  store float %6, ptr %104, align 4, !tbaa !14
  %105 = getelementptr inbounds float, ptr %90, i64 %97
  store float %6, ptr %105, align 4, !tbaa !14
  %106 = getelementptr inbounds float, ptr %103, i64 %86
  store float %6, ptr %106, align 4, !tbaa !14
  %107 = add nsw i64 %84, -3
  %108 = getelementptr inbounds float, ptr %82, i64 %107
  store float %6, ptr %108, align 4, !tbaa !14
  %109 = getelementptr ptr, ptr %49, i64 %80
  %110 = getelementptr i8, ptr %109, i64 -24
  %111 = load ptr, ptr %110, align 8, !tbaa !13
  %112 = getelementptr inbounds float, ptr %111, i64 %84
  store float %6, ptr %112, align 4, !tbaa !14
  %113 = add nsw i64 %86, -3
  %114 = getelementptr inbounds float, ptr %82, i64 %113
  store float %6, ptr %114, align 4, !tbaa !14
  %115 = getelementptr inbounds float, ptr %111, i64 %86
  store float %6, ptr %115, align 4, !tbaa !14
  %116 = getelementptr inbounds float, ptr %90, i64 %107
  store float %6, ptr %116, align 4, !tbaa !14
  %117 = getelementptr ptr, ptr %49, i64 %88
  %118 = getelementptr i8, ptr %117, i64 -24
  %119 = load ptr, ptr %118, align 8, !tbaa !13
  %120 = getelementptr inbounds float, ptr %119, i64 %84
  store float %6, ptr %120, align 4, !tbaa !14
  %121 = getelementptr inbounds float, ptr %90, i64 %113
  store float %6, ptr %121, align 4, !tbaa !14
  %122 = getelementptr inbounds float, ptr %119, i64 %86
  store float %6, ptr %122, align 4, !tbaa !14
  %123 = add nsw i64 %84, -2
  %124 = getelementptr inbounds float, ptr %82, i64 %123
  store float %6, ptr %124, align 4, !tbaa !14
  %125 = getelementptr ptr, ptr %49, i64 %80
  %126 = getelementptr i8, ptr %125, i64 -16
  %127 = load ptr, ptr %126, align 8, !tbaa !13
  %128 = getelementptr inbounds float, ptr %127, i64 %84
  store float %6, ptr %128, align 4, !tbaa !14
  %129 = add nsw i64 %86, -2
  %130 = getelementptr inbounds float, ptr %82, i64 %129
  store float %6, ptr %130, align 4, !tbaa !14
  %131 = getelementptr inbounds float, ptr %127, i64 %86
  store float %6, ptr %131, align 4, !tbaa !14
  %132 = getelementptr inbounds float, ptr %90, i64 %123
  store float %6, ptr %132, align 4, !tbaa !14
  %133 = getelementptr ptr, ptr %49, i64 %88
  %134 = getelementptr i8, ptr %133, i64 -16
  %135 = load ptr, ptr %134, align 8, !tbaa !13
  %136 = getelementptr inbounds float, ptr %135, i64 %84
  store float %6, ptr %136, align 4, !tbaa !14
  %137 = getelementptr inbounds float, ptr %90, i64 %129
  store float %6, ptr %137, align 4, !tbaa !14
  %138 = getelementptr inbounds float, ptr %135, i64 %86
  store float %6, ptr %138, align 4, !tbaa !14
  %139 = add nsw i64 %84, -1
  %140 = getelementptr inbounds float, ptr %82, i64 %139
  store float %6, ptr %140, align 4, !tbaa !14
  %141 = getelementptr ptr, ptr %49, i64 %80
  %142 = getelementptr i8, ptr %141, i64 -8
  %143 = load ptr, ptr %142, align 8, !tbaa !13
  %144 = getelementptr inbounds float, ptr %143, i64 %84
  store float %6, ptr %144, align 4, !tbaa !14
  %145 = add nsw i64 %86, -1
  %146 = getelementptr inbounds float, ptr %82, i64 %145
  store float %6, ptr %146, align 4, !tbaa !14
  %147 = getelementptr inbounds float, ptr %143, i64 %86
  store float %6, ptr %147, align 4, !tbaa !14
  %148 = getelementptr inbounds float, ptr %90, i64 %139
  store float %6, ptr %148, align 4, !tbaa !14
  %149 = getelementptr ptr, ptr %49, i64 %88
  %150 = getelementptr i8, ptr %149, i64 -8
  %151 = load ptr, ptr %150, align 8, !tbaa !13
  %152 = getelementptr inbounds float, ptr %151, i64 %84
  store float %6, ptr %152, align 4, !tbaa !14
  %153 = getelementptr inbounds float, ptr %90, i64 %145
  store float %6, ptr %153, align 4, !tbaa !14
  %154 = getelementptr inbounds float, ptr %151, i64 %86
  store float %6, ptr %154, align 4, !tbaa !14
  %155 = getelementptr inbounds float, ptr %82, i64 %84
  store float %6, ptr %155, align 4, !tbaa !14
  %156 = load ptr, ptr %81, align 8, !tbaa !13
  %157 = getelementptr inbounds float, ptr %156, i64 %84
  store float %6, ptr %157, align 4, !tbaa !14
  %158 = getelementptr inbounds float, ptr %82, i64 %86
  store float %6, ptr %158, align 4, !tbaa !14
  %159 = getelementptr inbounds float, ptr %156, i64 %86
  store float %6, ptr %159, align 4, !tbaa !14
  %160 = getelementptr inbounds float, ptr %90, i64 %84
  store float %6, ptr %160, align 4, !tbaa !14
  %161 = load ptr, ptr %89, align 8, !tbaa !13
  %162 = getelementptr inbounds float, ptr %161, i64 %84
  store float %6, ptr %162, align 4, !tbaa !14
  %163 = getelementptr inbounds float, ptr %90, i64 %86
  store float %6, ptr %163, align 4, !tbaa !14
  %164 = getelementptr inbounds float, ptr %161, i64 %86
  store float %6, ptr %164, align 4, !tbaa !14
  %165 = add nsw i64 %84, 1
  %166 = getelementptr inbounds float, ptr %82, i64 %165
  store float %6, ptr %166, align 4, !tbaa !14
  %167 = getelementptr ptr, ptr %49, i64 %80
  %168 = getelementptr i8, ptr %167, i64 8
  %169 = load ptr, ptr %168, align 8, !tbaa !13
  %170 = getelementptr inbounds float, ptr %169, i64 %84
  store float %6, ptr %170, align 4, !tbaa !14
  %171 = add nsw i64 %86, 1
  %172 = getelementptr inbounds float, ptr %82, i64 %171
  store float %6, ptr %172, align 4, !tbaa !14
  %173 = getelementptr inbounds float, ptr %169, i64 %86
  store float %6, ptr %173, align 4, !tbaa !14
  %174 = getelementptr inbounds float, ptr %90, i64 %165
  store float %6, ptr %174, align 4, !tbaa !14
  %175 = getelementptr ptr, ptr %49, i64 %88
  %176 = getelementptr i8, ptr %175, i64 8
  %177 = load ptr, ptr %176, align 8, !tbaa !13
  %178 = getelementptr inbounds float, ptr %177, i64 %84
  store float %6, ptr %178, align 4, !tbaa !14
  %179 = getelementptr inbounds float, ptr %90, i64 %171
  store float %6, ptr %179, align 4, !tbaa !14
  %180 = getelementptr inbounds float, ptr %177, i64 %86
  store float %6, ptr %180, align 4, !tbaa !14
  %181 = add nsw i64 %84, 2
  %182 = getelementptr inbounds float, ptr %82, i64 %181
  store float %6, ptr %182, align 4, !tbaa !14
  %183 = getelementptr ptr, ptr %49, i64 %80
  %184 = getelementptr i8, ptr %183, i64 16
  %185 = load ptr, ptr %184, align 8, !tbaa !13
  %186 = getelementptr inbounds float, ptr %185, i64 %84
  store float %6, ptr %186, align 4, !tbaa !14
  %187 = add nsw i64 %86, 2
  %188 = getelementptr inbounds float, ptr %82, i64 %187
  store float %6, ptr %188, align 4, !tbaa !14
  %189 = getelementptr inbounds float, ptr %185, i64 %86
  store float %6, ptr %189, align 4, !tbaa !14
  %190 = getelementptr inbounds float, ptr %90, i64 %181
  store float %6, ptr %190, align 4, !tbaa !14
  %191 = getelementptr ptr, ptr %49, i64 %88
  %192 = getelementptr i8, ptr %191, i64 16
  %193 = load ptr, ptr %192, align 8, !tbaa !13
  %194 = getelementptr inbounds float, ptr %193, i64 %84
  store float %6, ptr %194, align 4, !tbaa !14
  %195 = getelementptr inbounds float, ptr %90, i64 %187
  store float %6, ptr %195, align 4, !tbaa !14
  %196 = getelementptr inbounds float, ptr %193, i64 %86
  store float %6, ptr %196, align 4, !tbaa !14
  %197 = add nsw i64 %84, 3
  %198 = getelementptr inbounds float, ptr %82, i64 %197
  store float %6, ptr %198, align 4, !tbaa !14
  %199 = getelementptr ptr, ptr %49, i64 %80
  %200 = getelementptr i8, ptr %199, i64 24
  %201 = load ptr, ptr %200, align 8, !tbaa !13
  %202 = getelementptr inbounds float, ptr %201, i64 %84
  store float %6, ptr %202, align 4, !tbaa !14
  %203 = add nsw i64 %86, 3
  %204 = getelementptr inbounds float, ptr %82, i64 %203
  store float %6, ptr %204, align 4, !tbaa !14
  %205 = getelementptr inbounds float, ptr %201, i64 %86
  store float %6, ptr %205, align 4, !tbaa !14
  %206 = getelementptr inbounds float, ptr %90, i64 %197
  store float %6, ptr %206, align 4, !tbaa !14
  %207 = getelementptr ptr, ptr %49, i64 %88
  %208 = getelementptr i8, ptr %207, i64 24
  %209 = load ptr, ptr %208, align 8, !tbaa !13
  %210 = getelementptr inbounds float, ptr %209, i64 %84
  store float %6, ptr %210, align 4, !tbaa !14
  %211 = getelementptr inbounds float, ptr %90, i64 %203
  store float %6, ptr %211, align 4, !tbaa !14
  %212 = getelementptr inbounds float, ptr %209, i64 %86
  store float %6, ptr %212, align 4, !tbaa !14
  %213 = add nsw i64 %84, 4
  %214 = getelementptr inbounds float, ptr %82, i64 %213
  store float %6, ptr %214, align 4, !tbaa !14
  %215 = getelementptr ptr, ptr %49, i64 %80
  %216 = getelementptr i8, ptr %215, i64 32
  %217 = load ptr, ptr %216, align 8, !tbaa !13
  %218 = getelementptr inbounds float, ptr %217, i64 %84
  store float %6, ptr %218, align 4, !tbaa !14
  %219 = add nsw i64 %86, 4
  %220 = getelementptr inbounds float, ptr %82, i64 %219
  store float %6, ptr %220, align 4, !tbaa !14
  %221 = getelementptr inbounds float, ptr %217, i64 %86
  store float %6, ptr %221, align 4, !tbaa !14
  %222 = getelementptr inbounds float, ptr %90, i64 %213
  store float %6, ptr %222, align 4, !tbaa !14
  %223 = getelementptr ptr, ptr %49, i64 %88
  %224 = getelementptr i8, ptr %223, i64 32
  %225 = load ptr, ptr %224, align 8, !tbaa !13
  %226 = getelementptr inbounds float, ptr %225, i64 %84
  store float %6, ptr %226, align 4, !tbaa !14
  %227 = getelementptr inbounds float, ptr %90, i64 %219
  store float %6, ptr %227, align 4, !tbaa !14
  %228 = getelementptr inbounds float, ptr %225, i64 %86
  store float %6, ptr %228, align 4, !tbaa !14
  %.not209 = icmp slt i32 %46, 0
  br i1 %.not209, label %._crit_edge, label %.lr.ph

229:                                              ; preds = %7
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %417

231:                                              ; preds = %20
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %416

233:                                              ; preds = %21
  %234 = landingpad { ptr, i32 }
          cleanup
  br label %415

235:                                              ; preds = %24, %22
  %236 = landingpad { ptr, i32 }
          cleanup
  br label %414

237:                                              ; preds = %25
  %238 = landingpad { ptr, i32 }
          cleanup
  br label %247

239:                                              ; preds = %40
  %240 = landingpad { ptr, i32 }
          cleanup
  br label %246

241:                                              ; preds = %41
  %242 = landingpad { ptr, i32 }
          cleanup
  br label %245

243:                                              ; preds = %42
  %244 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  br label %245

245:                                              ; preds = %243, %241
  %.pn = phi { ptr, i32 } [ %244, %243 ], [ %242, %241 ]
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  br label %246

246:                                              ; preds = %245, %239
  %.pn.pn = phi { ptr, i32 } [ %.pn, %245 ], [ %240, %239 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  br label %247

247:                                              ; preds = %246, %237
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %246 ], [ %238, %237 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #8
  br label %414

248:                                              ; preds = %44
  %249 = landingpad { ptr, i32 }
          cleanup
  br label %413

250:                                              ; preds = %47
  %251 = landingpad { ptr, i32 }
          cleanup
  br label %412

.lr.ph:                                           ; preds = %.preheader206
  %252 = sub nsw i32 0, %46
  br label %253

._crit_edge:                                      ; preds = %409, %.preheader206
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #8
  ret void

253:                                              ; preds = %.lr.ph, %409
  %.0210 = phi i32 [ %252, %.lr.ph ], [ %410, %409 ]
  %254 = sitofp i32 %.0210 to double
  %255 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef 1, i32 noundef 1)
  store double %254, ptr %255, align 8, !tbaa !5
  %add = add nsw i32 %.0210, %46
  %sub = sub nsw i32 %46, %.0210
  %256 = mul nsw i32 %add, %sub
  %257 = sitofp i32 %256 to float
  %258 = call noundef float @_ZSt4sqrtf(float noundef %257)
  %259 = fpext float %258 to double
  %260 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef 2, i32 noundef 1)
  store double %259, ptr %260, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #8
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %17, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %261 unwind label %290

261:                                              ; preds = %253
  %262 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %263 unwind label %292

263:                                              ; preds = %261
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #8
  %264 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 1, i32 noundef 1)
  %265 = load double, ptr %264, align 8, !tbaa !5
  %266 = call double @llvm.rint.f64(double %265)
  %267 = fptosi double %266 to i32
  %268 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 2, i32 noundef 1)
  %269 = load double, ptr %268, align 8, !tbaa !5
  %270 = call double @llvm.rint.f64(double %269)
  %271 = fptosi double %270 to i32
  %272 = add nsw i32 %271, %3
  %273 = icmp sgt i32 %272, 0
  br i1 %273, label %274, label %295

274:                                              ; preds = %263
  %275 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %276 = icmp ult i32 %272, %275
  br i1 %276, label %277, label %295

277:                                              ; preds = %274
  %278 = add nsw i32 %267, %2
  %279 = icmp sgt i32 %278, 0
  br i1 %279, label %280, label %295

280:                                              ; preds = %277
  %281 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %282 = icmp ult i32 %278, %281
  br i1 %282, label %283, label %295

283:                                              ; preds = %280
  %284 = load ptr, ptr %48, align 8, !tbaa !9
  %285 = zext nneg i32 %272 to i64
  %286 = getelementptr inbounds ptr, ptr %284, i64 %285
  %287 = load ptr, ptr %286, align 8, !tbaa !13
  %288 = zext nneg i32 %278 to i64
  %289 = getelementptr inbounds float, ptr %287, i64 %288
  store float %6, ptr %289, align 4, !tbaa !14
  br label %295

290:                                              ; preds = %253
  %291 = landingpad { ptr, i32 }
          cleanup
  br label %294

292:                                              ; preds = %261
  %293 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  br label %294

294:                                              ; preds = %292, %290
  %.pn192 = phi { ptr, i32 } [ %293, %292 ], [ %291, %290 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #8
  br label %411

295:                                              ; preds = %283, %280, %277, %274, %263
  %296 = sub nsw i32 %3, %271
  %297 = icmp sgt i32 %296, 0
  br i1 %297, label %298, label %314

298:                                              ; preds = %295
  %299 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %300 = icmp ult i32 %296, %299
  br i1 %300, label %301, label %314

301:                                              ; preds = %298
  %302 = sub nsw i32 %2, %267
  %303 = icmp sgt i32 %302, 0
  br i1 %303, label %304, label %314

304:                                              ; preds = %301
  %305 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %306 = icmp ult i32 %302, %305
  br i1 %306, label %307, label %314

307:                                              ; preds = %304
  %308 = load ptr, ptr %48, align 8, !tbaa !9
  %309 = zext nneg i32 %296 to i64
  %310 = getelementptr inbounds ptr, ptr %308, i64 %309
  %311 = load ptr, ptr %310, align 8, !tbaa !13
  %312 = zext nneg i32 %302 to i64
  %313 = getelementptr inbounds float, ptr %311, i64 %312
  store float %6, ptr %313, align 4, !tbaa !14
  br label %314

314:                                              ; preds = %307, %304, %301, %298, %295
  %315 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef 2, i32 noundef 1)
  %316 = load double, ptr %315, align 8, !tbaa !5
  %317 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef 1, i32 noundef 1)
  store double %316, ptr %317, align 8, !tbaa !5
  %318 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef 2, i32 noundef 1)
  store double %254, ptr %318, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #8
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %18, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %319 unwind label %348

319:                                              ; preds = %314
  %320 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %321 unwind label %350

321:                                              ; preds = %319
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #8
  %322 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 1, i32 noundef 1)
  %323 = load double, ptr %322, align 8, !tbaa !5
  %324 = call double @llvm.rint.f64(double %323)
  %325 = fptosi double %324 to i32
  %326 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 2, i32 noundef 1)
  %327 = load double, ptr %326, align 8, !tbaa !5
  %328 = call double @llvm.rint.f64(double %327)
  %329 = fptosi double %328 to i32
  %330 = add nsw i32 %329, %3
  %331 = icmp sgt i32 %330, 0
  br i1 %331, label %332, label %353

332:                                              ; preds = %321
  %333 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %334 = icmp ult i32 %330, %333
  br i1 %334, label %335, label %353

335:                                              ; preds = %332
  %336 = add nsw i32 %325, %2
  %337 = icmp sgt i32 %336, 0
  br i1 %337, label %338, label %353

338:                                              ; preds = %335
  %339 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %340 = icmp ult i32 %336, %339
  br i1 %340, label %341, label %353

341:                                              ; preds = %338
  %342 = load ptr, ptr %48, align 8, !tbaa !9
  %343 = zext nneg i32 %330 to i64
  %344 = getelementptr inbounds ptr, ptr %342, i64 %343
  %345 = load ptr, ptr %344, align 8, !tbaa !13
  %346 = zext nneg i32 %336 to i64
  %347 = getelementptr inbounds float, ptr %345, i64 %346
  store float %6, ptr %347, align 4, !tbaa !14
  br label %353

348:                                              ; preds = %314
  %349 = landingpad { ptr, i32 }
          cleanup
  br label %352

350:                                              ; preds = %319
  %351 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #8
  br label %352

352:                                              ; preds = %350, %348
  %.pn194 = phi { ptr, i32 } [ %351, %350 ], [ %349, %348 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #8
  br label %411

353:                                              ; preds = %341, %338, %335, %332, %321
  %354 = sub nsw i32 %3, %329
  %355 = icmp sgt i32 %354, 0
  br i1 %355, label %356, label %372

356:                                              ; preds = %353
  %357 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %358 = icmp ult i32 %354, %357
  br i1 %358, label %359, label %372

359:                                              ; preds = %356
  %360 = sub nsw i32 %2, %325
  %361 = icmp sgt i32 %360, 0
  br i1 %361, label %362, label %372

362:                                              ; preds = %359
  %363 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %364 = icmp ult i32 %360, %363
  br i1 %364, label %365, label %372

365:                                              ; preds = %362
  %366 = load ptr, ptr %48, align 8, !tbaa !9
  %367 = zext nneg i32 %354 to i64
  %368 = getelementptr inbounds ptr, ptr %366, i64 %367
  %369 = load ptr, ptr %368, align 8, !tbaa !13
  %370 = zext nneg i32 %360 to i64
  %371 = getelementptr inbounds float, ptr %369, i64 %370
  store float %6, ptr %371, align 4, !tbaa !14
  br label %372

372:                                              ; preds = %365, %362, %359, %356, %353
  %373 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef 1, i32 noundef 1)
  store double %254, ptr %373, align 8, !tbaa !5
  %374 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef 2, i32 noundef 1)
  store double 0.000000e+00, ptr %374, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #8
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %19, ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %375 unwind label %404

375:                                              ; preds = %372
  %376 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %377 unwind label %406

377:                                              ; preds = %375
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #8
  %378 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 1, i32 noundef 1)
  %379 = load double, ptr %378, align 8, !tbaa !5
  %380 = call double @llvm.rint.f64(double %379)
  %381 = fptosi double %380 to i32
  %382 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 2, i32 noundef 1)
  %383 = load double, ptr %382, align 8, !tbaa !5
  %384 = call double @llvm.rint.f64(double %383)
  %385 = fptosi double %384 to i32
  %386 = add nsw i32 %385, %3
  %387 = icmp sgt i32 %386, 0
  br i1 %387, label %388, label %409

388:                                              ; preds = %377
  %389 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %390 = icmp ult i32 %386, %389
  br i1 %390, label %391, label %409

391:                                              ; preds = %388
  %392 = add nsw i32 %381, %2
  %393 = icmp sgt i32 %392, 0
  br i1 %393, label %394, label %409

394:                                              ; preds = %391
  %395 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %396 = icmp ult i32 %392, %395
  br i1 %396, label %397, label %409

397:                                              ; preds = %394
  %398 = load ptr, ptr %48, align 8, !tbaa !9
  %399 = zext nneg i32 %386 to i64
  %400 = getelementptr inbounds ptr, ptr %398, i64 %399
  %401 = load ptr, ptr %400, align 8, !tbaa !13
  %402 = zext nneg i32 %392 to i64
  %403 = getelementptr inbounds float, ptr %401, i64 %402
  store float %6, ptr %403, align 4, !tbaa !14
  br label %409

404:                                              ; preds = %372
  %405 = landingpad { ptr, i32 }
          cleanup
  br label %408

406:                                              ; preds = %375
  %407 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #8
  br label %408

408:                                              ; preds = %406, %404
  %.pn196 = phi { ptr, i32 } [ %407, %406 ], [ %405, %404 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #8
  br label %411

409:                                              ; preds = %377, %388, %391, %394, %397
  %410 = add i32 %.0210, 1
  %exitcond.not = icmp eq i32 %.0210, %46
  br i1 %exitcond.not, label %._crit_edge, label %253, !llvm.loop !16

411:                                              ; preds = %408, %352, %294
  %.pn196.pn = phi { ptr, i32 } [ %.pn196, %408 ], [ %.pn194, %352 ], [ %.pn192, %294 ]
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #8
  br label %412

412:                                              ; preds = %411, %250
  %.pn196.pn.pn = phi { ptr, i32 } [ %.pn196.pn, %411 ], [ %251, %250 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  br label %413

413:                                              ; preds = %412, %248
  %.pn196.pn.pn.pn = phi { ptr, i32 } [ %.pn196.pn.pn, %412 ], [ %249, %248 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #8
  br label %414

414:                                              ; preds = %247, %413, %235
  %.pn196.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %236, %235 ], [ %.pn196.pn.pn.pn, %413 ], [ %.pn.pn.pn, %247 ]
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  br label %415

415:                                              ; preds = %414, %233
  %.pn196.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn196.pn.pn.pn.pn.pn, %414 ], [ %234, %233 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #8
  br label %416

416:                                              ; preds = %415, %231
  %.pn196.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn196.pn.pn.pn.pn.pn.pn, %415 ], [ %232, %231 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #8
  br label %417

417:                                              ; preds = %416, %229
  %.pn196.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn196.pn.pn.pn.pn.pn.pn.pn, %416 ], [ %230, %229 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #8
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #8
  resume { ptr, i32 } %.pn196.pn.pn.pn.pn.pn.pn.pn.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4rintf(float noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.rint.f64(double) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #2 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress 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 #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 16}
!10 = !{!"_ZTS12ImageContent", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72}
!11 = !{!"int", !7, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!12, !12, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass